diff --git a/docs/.vscode/spellright.dict b/docs/.vscode/spellright.dict index f285211ebfd..42c44bdce01 100644 --- a/docs/.vscode/spellright.dict +++ b/docs/.vscode/spellright.dict @@ -2,10 +2,14 @@ abi audius blockhash ciphertexts +ddex delegater delegaters docusaurus erc +ern +ern3 +ern4 esque eth ethereum @@ -19,15 +23,20 @@ gravatar img io ioredis +isrc +iswc js jwt mainnet +metadatas metamask multisig +nft nodejs nonpayable npm oauth +oauthed off-chain on-chain onclick @@ -53,6 +62,7 @@ typehash undelegate unrepost unstake +upc userbase wei whitepaper \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index c80a3a69c0f..45f716c0c17 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ ## Dev -``` +```sh npm install npm run prepare:translations npm start @@ -10,13 +10,13 @@ npm start To develop on cloudflare pages and test the whole stack, run: -``` +```sh npm run pages:dev ``` ## Build -``` +```sh npm run build ``` @@ -26,16 +26,16 @@ Running the following commands will create a public test site to view your chang To deploy to docs.audius.org, ensure the commands are run from the `main` branch. -``` +```sh npm run build npm run pages:deploy ``` ## Translate -``` +```sh npm run prepare:translations ``` -This will write translations to the i18n folder. -If you modify markdown files while running the local dev server, you will need to prepare the translations as /i18n/en is the default entrypoint. +This will write translations to the i18n folder. If you modify markdown files while running the +local dev server, you will need to prepare the translations as /i18n/en is the default entrypoint. diff --git a/docs/docs/distributors/introduction/overview.mdx b/docs/docs/distributors/introduction/overview.mdx new file mode 100644 index 00000000000..d0cc7e10b19 --- /dev/null +++ b/docs/docs/distributors/introduction/overview.mdx @@ -0,0 +1,54 @@ +--- +id: overview +title: Distributing Content to Audius +pagination_label: Distributing Content to Audius +sidebar_label: Overview +description: Audius Protocol Documentation +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +:::tip Looking for how to accept deliveries from your label or distributor? + +Come back soon and check the [Audius Support Page](https://support.audius.co) for more information. + +::: + +Audius supports bulk content ingestion via the DDEX standard. + +Providers, labels & partners with their own delivery infrastructure should reference the following +documentation for guidance on how to send and administer content on Audius. + +If you're looking to build your own ingestion tooling, get started with the +[Audius SDK](/developers/sdk/overview). + +## What is DDEX + +Digital Data Exchange (or "DDEX") is an international standards-setting organization that was formed +in 2006 to develop standards that enable companies to communicate information along the digital +supply chain more efficiently by: + +- Developing standard message and file formats (XML or flat-file) +- Developing choreographies for specific business transactions +- Developing communication protocols (SFTP or based on web services) +- Working with industry bodies to create a more efficient supply chain + +:::info More Information + +- Learn more on the official DDEX Website here: [https://ddex.net/](https://ddex.net/) +- Looking for a deeper technical dive? Checkout the DDEX knowledge base here: + [https://kb.ddex.net/](https://kb.ddex.net/) + +::: + +--- + +## Open Source + +All DDEX ingestion code & libraries are open source and available on +[GitHub](https://github.com/AudiusProject/audius-protocol/tree/main/packages/ddex). + +You may clone and self-operate your own Audius compatible DDEX ingestion server, which provides a +web interface to deliver files, manage uploads, and track success. Under the hood, DDEX ingestion +uses the [Audius SDK](/developers/sdk/overview) to process and upload tracks and is available in a +[self-service](/distributors/self-serve/overview) manner. diff --git a/docs/docs/distributors/self-serve/overview.mdx b/docs/docs/distributors/self-serve/overview.mdx new file mode 100644 index 00000000000..5c2480afb6e --- /dev/null +++ b/docs/docs/distributors/self-serve/overview.mdx @@ -0,0 +1,18 @@ +--- +id: overview +title: Overview +pagination_label: Overview +sidebar_label: Overview +description: Audius Protocol Documentation +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +--- + +:::info + +Content can be ingested into the Audius network by directly operating your own DDEX ingestion +server. More details soon. + +::: diff --git a/docs/docs/distributors/self-serve/run-a-ddex-server.mdx b/docs/docs/distributors/self-serve/run-a-ddex-server.mdx new file mode 100644 index 00000000000..49fc639ec9e --- /dev/null +++ b/docs/docs/distributors/self-serve/run-a-ddex-server.mdx @@ -0,0 +1,41 @@ +--- +id: run-a-ddex-server +title: Running a DDEX Ingestion Server +pagination_label: Running a Server +sidebar_label: Running a Server +description: Audius Protocol Documentation +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +:::info Coming Soon! + +Under construction. Please use as your own risk! 🚧 + +Check back soon for updates on how to run and operate own DDEX Ingestion Server. + +::: + +## Instructions + +1. Provision a new machine following. We recommend: + +- Ubuntu +- 8 CPUs +- 16 to 32GB Memory + +2. Visit [audius-docker-compose](https://github.com/AudiusProject/audius-docker-compose) and run the + install script to set up your Audius environment on your provisioned machine. + +3. Follow the instructions in the + [audius-protocol](https://github.com/AudiusProject/audius-protocol/tree/main/packages/ddex) + repository to set the appropriate environment variables + +4. Start the DDEX Ingestion Server + +``` +audius-cli launch ddex +``` + +Your server will now be available at localhost:80 and is exposed via self-signed SSL on :443 if +`DDEX_URL` is set. diff --git a/docs/docs/distributors/specification/deal-types.mdx b/docs/docs/distributors/specification/deal-types.mdx new file mode 100644 index 00000000000..789abd299ee --- /dev/null +++ b/docs/docs/distributors/specification/deal-types.mdx @@ -0,0 +1,432 @@ +--- +id: deal-types +title: Deal Types +pagination_label: Deal Types +sidebar_label: Deal Types +description: Support for Deal Types +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +:::info Further Reading + +Checkout the +[DDEX ERN3 Knowledge Base]() +for more information. + +::: + +The following `Deal` types are supported for distribution to Audius. `Deal` types provided outside +of the provided list will be ignored. + +If your use case extends beyond the supported `Deal` types outlined below, please contact +`support@audius.co`. + +--- + +## Tracks + +Audius accepts the following DDEX `Deal`s for **track** releases: + +### Free To Stream + +1. `CommercialModelType`: `FreeOfChargeModel` +2. `UseType`: `Stream` or `OnDemandStream` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: N/A +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + FreeOfChargeModel + + OnDemandStream + + Worldwide + + 2023-09-02 + + + +``` + +### Pay Gated Stream + +`CommercialModelType`: `PayAsYouGoModel` 2. `UseType`: `Stream` or `OnDemandStream` 3. `PriceType`: +not supported 4. `WholesalePricePerUnit`: any nonzero USD amount 5. `ValidityPeriod` 1. `StartDate`: +any 6. `TerritoryCode`: `Worldwide` + +```xml + + + PayAsYouGoModel + + OnDemandStream + + Worldwide + + 1.0 + ... + + + 2023-09-02 + + + +``` + +### Follow Gated Stream + +1. `CommercialModelType`: `UserDefined` (`FollowGated`) +2. `UseType`: `Stream` or `OnDemandStream` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: N/A +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + UserDefined + + OnDemandStream + + Worldwide + + 2023-09-02 + + + +``` + +### NFT Gated Stream + +1. `CommercialModelType`: `UserDefined` (`NFTGated`) +2. `UseType`: `Stream` or `OnDemandStream` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: N/A +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` +7. `Conditions` (custom XML specific to Audius) + + 1. For Ethereum NFTs: + + ```xml + + eth +
// The Ethereum address of the NFT contract + // The standard followed by the NFT - either "ERC-721" or "ERC-1155" + // The name of the NFT + // The slug of the NFT collection. E.g. if your collection is located at https://opensea.io/collection/example-nft, the slug is "example-nft". + // Optional: URL to the image representing the NFT + // Optional: URL to an external resource providing more details about the NFT +
+ ``` + + ii. For Solana NFTs: + + ```xml + + sol +
// The address of the NFT on the Solana blockchain + // The name of the NFT + // Optional: URL to the image representing the NFT + // Optional: URL to an external resource providing more details about the NFT +
+ ``` + +```xml + + + UserDefined + + OnDemandStream + + Worldwide + + 2023-09-02 + + + eth +
0xAbCdEfGhIjKlMnOpQrStUvWxYz
+ ERC-721 + Example NFT + example-nft + https://www.example.com/nft-image.png + https://www.example.com/nft-details +
+
+
+``` + +### $AUDIO Tip Gated Stream + +1. `CommercialModelType`: `UserDefined` (`TipGated`) +2. `UseType`: `Stream` or `OnDemandStream` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: N/A +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + UserDefined + + OnDemandStream + + Worldwide + + 2023-09-02 + + + +``` + +### Free To Download + +:::info Downloadable content is streamable. + +If you can download it, you can stream it. + +::: + +1. `CommercialModelType`: `FreeOfChargeModel` +2. `UseType`: `Stream` or `OnDemandStream`, `PermanentDownload` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: N/A +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + FreeOfChargeModel + + OnDemandStream + PermanentDownload + + Worldwide + + 2023-09-02 + + + +``` + +### Pay Gated Download + +:::info Downloadable content is streamable. + +If you can download it, you can stream it. + +::: + +1. `CommercialModelType`: `PayAsYouGoModel` +2. `UseType`: `Stream` or `OnDemandStream`, `PermanentDownload` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: any USD amount +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + PayAsYouGoModel + + OnDemandStream + PermanentDownload + + Worldwide + + 1.0 + ... + + + 2023-09-02 + + + +``` + +### Follow Gated Download + +:::info Downloadable content is streamable. + +If you can download it, you can stream it. + +::: + +1. `CommercialModelType`: `UserDefined` (`FollowGated`) +2. `UseType`: `Stream` or `OnDemandStream`, `PermanentDownload` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: N/A +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + UserDefined + + OnDemandStream + PermanentDownload + + Worldwide + + 2023-09-02 + + + +``` + +--- + +## Albums + +Audius accepts the following DDEX `Deal`s for **album** releases + +### Free To Stream + +1. `CommercialModelType`: `FreeOfChargeModel` +2. `UseType`: `Stream` or `OnDemandStream` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: N/A +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + FreeOfChargeModel + + OnDemandStream + + Worldwide + + 2023-09-02 + + + +``` + +### Pay Gated Stream + +1. `CommercialModelType`: `PayAsYouGoModel` +2. `UseType`: `Stream` or `OnDemandStream` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: any nonzero USD amount +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + PayAsYouGoModel + + OnDemandStream + + Worldwide + + 1.0 + ... + + + 2023-09-02 + + + +``` + +### Free To Download + +:::info Downloadable content is streamable. + +If you can download it, you can stream it. + +::: + +1. `CommercialModelType`: `FreeOfChargeModel` +2. `UseType`: `Stream` or `OnDemandStream`, `PermanentDownload` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: N/A +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + FreeOfChargeModel + + OnDemandStream + PermanentDownload + + Worldwide + + 2023-09-02 + + + +``` + +### Pay Gated Download + +:::info Downloadable content is streamable. + +If you can download it, you can stream it. + +::: + +1. `CommercialModelType`: `PayAsYouGoModel` +2. `UseType`: `Stream` or `OnDemandStream`, `PermanentDownload` +3. `PriceType`: not supported +4. `WholesalePricePerUnit`: any USD amount +5. `ValidityPeriod` + 1. `StartDate`: any +6. `TerritoryCode`: `Worldwide` + +```xml + + + PayAsYouGoModel + + OnDemandStream + PermanentDownload + + Worldwide + + 1.0 + ... + + + 2023-09-02 + + + +``` + +--- + +## ERN4 Support + +:::info Coming Soon + +Support for ERN4 is coming coming soon. + +Checkout the +[DDEX ERN4 Knowledge Base]() +for information in the meantime. + +::: diff --git a/docs/docs/distributors/specification/metadata.mdx b/docs/docs/distributors/specification/metadata.mdx new file mode 100644 index 00000000000..8aad26d7b17 --- /dev/null +++ b/docs/docs/distributors/specification/metadata.mdx @@ -0,0 +1,338 @@ +--- +id: metadata +title: Supported Metadata Mapping +pagination_label: Metadata Mapping +sidebar_label: Metadata Mapping +description: Audius SDK to DDEX Metadata Mapping +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +:::info The following is provided based on [ERN3.8](/distributors/specification/deal-types) + +Please note that exact DDEX fields will depend on the specific ERN version. + +::: + +--- + +## General Metadata Mapping + +### Required Fields + +The following metadata fields are required for content to be listed on Audius and are examined and +pulled from a DDEX delivery in cascading precedence. + +#### coverArtFile + +:::note + +The `coverArtFile` maps to two DDEX Fields + +::: + +- `/ResourceList/Image/ImageDetailsByTerritory[TerritoryCode="Worldwide"]/TechnicalImageDetails/File/FilePath` +- `/ResourceList/Image/ImageDetailsByTerritory[TerritoryCode="Worldwide"]/TechnicalImageDetails/File/FileName` + +#### releaseDate + +1. `/DealList/ReleaseDeal/Deal/ValidityPeriod/StartDate` +2. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/ReleaseDate` +3. `/ReleaseList/Release/GlobalOriginalReleaseDate` + +#### userId + +:::note + +Not technically an Audius SDK metadata field, but uploaded as part of the track/album + +::: + +1. checks each artist name (in order) against Audius database of OAuthed display names, and uses the + first match + +--- + +### Optional Fields + +The following fields are optional for content to be listed on Audius and are examined and pulled +from a DDEX delivery in cascading precedence. + +#### ddexReleaseIds + +1. `/ReleaseList/Release/ReleaseId` + +:::note + +The following fields are parsed and preserved from this field: + +`PartyId`, `CatalogNumber`, `ICPN`, `GRid`, `ISAN`, `ISBN`, `ISMN`, `ISRC`, `ISSN`, `ISTC`, `ISWC`, +`MWLI`, `SICI`, and `ProprietaryId` + +::: + +#### description + +The DDEX standard includes a `MarketingComments` field that is rarely used, but is available. + +--- + +### Unused Fields + +The following Audius SDK Fields are not used by DDEX and have no mapping. + +#### child elements of `/ReleaseList/Release/` + +The following child elements are parsed and stored in the separate DDEX server. Audius does not +store these child fields and they are not used. + +- `ReferenceTitle/TitleText` +- `ReferenceTitle/SubTitle` + +#### child elements of `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/` + +The following child elements are parsed and stored in the separate DDEX server. Audius does not +store these child fields and they are not used. + +- `Title[@TitleType='DisplayTitle']/TitleText` (used in albums/EPs but not single tracks) +- `Title[@TitleType='DisplayTitle']/SubTitle` +- `Title[@TitleType='FormalTitle']/TitleText` +- `Title[@TitleType='FormalTitle']/SubTitle` + +#### child elements of `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/ResourceGroup/` + +The following child elements are parsed and stored in the separate DDEX server. Audius does not +store these child fields and they are not used. + +- `SequenceNumber` +- `ResourceGroupContentItem/ResourceType` +- `ResourceGroupContentItem/ReleaseResourceReference` +- `ResourceGroupContentItem/IsInstantGratificationResource` + +--- + +## Track Metadata Mapping + +### Required Fields + +The following fields are required for content to be listed on Audius and are examined and pulled +from a DDEX delivery in cascading precedence. + +#### genre + +1. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/Genre/SubGenre` +2. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/Genre/GenreText` +3. `/ResourceList/SoundRecording/SoundRecordingDetailsByTerritory[TerritoryCode="Worldwide"]/Genre/SubGenre` +4. `/ResourceList/SoundRecording/SoundRecordingDetailsByTerritory[TerritoryCode="Worldwide"]/Genre/GenreText` + +#### title + +1. `/ResourceList/SoundRecording/ReferenceTitle/TitleText` + +:::note + +Subtitle is currently ignored/unused in the both the SoundRecording and release and are stored in +the separate DDEX server but not in the Audius network. + +::: + +#### trackFile + +This is the actual audio file, not technically an Audius SDK metadata field, but uploaded in the +same SDK function. Note that this DDEX field is a relative path to the file within the delivery + +:::note + +The `trackFile` maps to two DDEX Fields + +::: + +- `/ResourceList/SoundRecording/SoundDetailsByTerritory[TerritoryCode="Worldwide"]/TechnicalSoundRecordingDetails/File/FilePath` +- `/ResourceList/SoundRecording/SoundDetailsByTerritory[TerritoryCode="Worldwide"]/TechnicalSoundRecordingDetails/File/FileName` + +--- + +### Optional Fields + +The following fields are optional for content to be listed on Audius and are examined and pulled +from a DDEX delivery in cascading precedence. + +#### artists + +The `/PartyName/FullName` child element is used as the artist’s name and the `SequenceNumber` +attribute to preserve order + +1. `/ResourceList/SoundRecording/SoundRecordingDetailsByTerritory[TerritoryCode="Worldwide"]/DisplayArtist` +2. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/DisplayArtist` + +#### copyrightLine + +This is only used if both `year` _AND_ `text` are non-empty. The child elements that are parsed are: +`Year` and `CLineText` + +1. `/ResourceList/SoundRecording/SoundRecordingDetailsByTerritory[TerritoryCode="Worldwide"]/CLine` +2. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/CLine` +3. `/ReleaseList/Release/CLine` + +#### indirectResourceContributors + +:::note + +The following children elements are parsed and stored in Audius: `PartyName`/`FullName`, +`SequenceNumber`, and `IndirectResourceContributorRole` + +::: + +1. `/ResourceList/SoundRecording/SoundDetailsByTerritory[TerritoryCode="Worldwide"]/IndirectResourceContributor` + +#### isrc + +1. `/ResourceList/SoundRecording/SoundRecordingId/ISRC` + +#### iswc + +1. `/ReleaseList/Release/ReleaseId/ISWC` + +#### parentalWarningType + +1. `/ResourceList/SoundRecording/SoundRecordingDetailsByTerritory[TerritoryCode="Worldwide"]/ParentalWarningType` +2. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/ParentalWarningType` + +#### previewStartSeconds + +Preview length is 30 seconds starting at the `previewStartSeconds` into the track’s audio, even if a +longer or shorter duration is given. does not support using an external file for the preview + +1. `/ResourceList/SoundRecording/SoundDetailsByTerritory[TerritoryCode="Worldwide"]/TechnicalSoundRecordingDetails/PreviewDetails/StartPoint` +2. only when + `/ResourceList/SoundRecording/SoundDetailsByTerritory[TerritoryCode="Worldwide"]/TechnicalSoundRecordingDetails/IsPreview` + is true + +#### producerCopyrightLine + +1. `/ResourceList/SoundRecording/SoundRecordingDetailsByTerritory[TerritoryCode="Worldwide"]/PLine` +2. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/PLine` +3. `/ReleaseList/Release/PLine` + +:::note + +This is only used if both `year` _AND_ `text` are non-empty. The child elements that are parsed are: +`Year` and `CLineText` + +::: + +#### resourceContributors + +1. `/ResourceList/SoundRecording/SoundDetailsByTerritory[TerritoryCode="Worldwide"]/ResourceContributor` + +:::note + +The following children elements are parsed and stored in Audius: `PartyName`/`FullName`, +`SequenceNumber`, and `ResourceContributorRole` + +::: + +#### rightsController + +1. `/ResourceList/SoundRecording/SoundDetailsByTerritory[TerritoryCode="Worldwide"]/RightsController` + +:::note + +The following children elements are parsed and stored in Audius: `PartyName`/`FullName`, +`RightsShareUnknown`, and `RightsControllerRole` + +::: + +--- + +## Album Metadata Mapping + +### Required Fields + +The following fields are required for content to be listed on Audius and are examined and pulled +from a DDEX delivery in cascading precedence. + +#### albumName + +1. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/Title[@TitleType='DisplayTitle']/TitleText` + +:::note + +Subtitle is currently ignored/unused in the both the SoundRecording and release and are stored in +the separate DDEX server but not in the Audius network. + +::: + +#### genre + +1. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/Genre/SubGenre` +2. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/Genre/GenreText` + +#### trackFiles + +This is an array of audio files which the album is comprised of, not technically an Audius SDK +metadata field, but uploaded as part of the album. + +1. each `/ReleaseList/Release/` except the release with the attribute `IsMainRelease="true"` + +#### trackMetadatas + +Metadata about each track in the album, not technically an Audius SDK metadata field, but uploaded +as part of the album + +1. each `/ReleaseList/Release/` except the release with the attribute `IsMainRelease="true"` + +--- + +### Optional Fields + +The following fields are optional for content to be listed on Audius and are examined and pulled +from a DDEX delivery in cascading precedence. + +#### artists + +The `/PartyName/FullName` child element is used as the artist’s name and the `SequenceNumber` +attribute to preserve order + +1. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/DisplayArtist` + +#### copyrightLine + +1. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/CLine` +2. `/ReleaseList/Release/CLine` + +:::note + +This is only used if both `year` _AND_ `text` are non-empty. The child elements that are parsed are: +`Year` and `CLineText` + +::: + +#### parentalWarningType + +1. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/ParentalWarningType` + +#### producerCopyrightLine + +1. `/ReleaseList/Release/ReleaseDetailsByTerritory[TerritoryCode="Worldwide"]/PLine` +2. `/ReleaseList/Release/PLine` + +:::note + +This is only used if both `year` _AND_ `text` are non-empty. The child elements that are parsed are: +`Year` and `PLineText` + +::: + +#### upc + +1. `/ReleaseList/Release/ReleaseId/ICPN` + +:::note + +ICPN (or "International Code Product Number") has an `IsEAN` attribute which determines if it’s an +EAN (or "European Article Number") or UPC ("Universal Product Code" — only used in US and Canada). + +Audius uses these interchangeably and just set it as UPC even if it’s an EAN. + +::: diff --git a/docs/docs/distributors/specification/overview.mdx b/docs/docs/distributors/specification/overview.mdx new file mode 100644 index 00000000000..7c005871c81 --- /dev/null +++ b/docs/docs/distributors/specification/overview.mdx @@ -0,0 +1,37 @@ +--- +id: overview +title: DDEX Best Practices +pagination_label: DDEX Best Practices +sidebar_label: DDEX Best Practices +description: DDEX best practices for delivering DDEX to Audius +--- + +import useBaseUrl from '@docusaurus/useBaseUrl' + +## General Guidance + +:::info Delivery processing + +[TikiLabs](https://tikilabs.com) is a facilitator of distributing DDEX directly to the Audius +Protocol. + +For inquiries or support, reach out at +[support@audius.co](mailto:support@audius.co?subject=DDEX%20Support). + +::: + +- ERN3 is the preferred DDEX specification for bulk ingestion into Audius. See the + [ERN3 details](/distributors/specification/deal-types) for more details around submission + choreography. +- Audius only accepts price information using absolute prices (e.g. via `WholesalePricePerUnit`). + Price codes will be ignored (e.g. `PriceType`). +- Audius also does not support `ValidityPeriod` `EndDate`s. This includes using `EndDate` to specify + multiple `ValidityPeriod`s with different prices. We can only parse 1 `ValidityPeriod` + `StartDate`. +- Audius currently only accepts the `Worldwide` `TerritoryCode`. Territory support for controlled + streaming is coming soon! 🌎 +- `NonInteractiveStream` is not supported. +- A `ReleaseDeal` is required with a `DealReleaseReference` to each track on an album. +- A `ReleaseDeal` is not required with a `DealReleaseReference` to an album release. If an album + deal is not specified, the album defaults to being free to stream, but each of its tracks is + configured according to the track’s `ReleaseDeal` `DealTerms`. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index fbf19d053f3..867ba0c1d4c 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -44,9 +44,7 @@ const config = { path: 'docs', routeBasePath: '/', sidebarPath: './sidebars.js', - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: 'https://github.com/AudiusProject/docs.audius.org/', + editUrl: 'https://github.com/AudiusProject/audius-protocol/tree/main/docs', }, theme: { customCss: './src/css/custom.css', @@ -76,21 +74,31 @@ const config = { label: 'Learn', to: '/', position: 'right', + activeBasePath: 'learn' }, { label: 'Developers', to: '/developers/introduction/overview', position: 'right', + activeBasePath: 'developers' }, { label: 'Staking', to: '/node-operator/overview', position: 'right', + activeBasePath: 'staking' + }, + { + label: 'Distributors', + to: '/distributors/introduction/overview', + position: 'right', + activeBasePath: 'distributors' }, { label: 'Reference', to: '/reference/overview', position: 'right', + activeBasePath: 'reference' }, { 'aria-label': 'Discord', diff --git a/docs/i18n/en/code.json b/docs/i18n/en/code.json new file mode 100644 index 00000000000..71f221e8427 --- /dev/null +++ b/docs/i18n/en/code.json @@ -0,0 +1,420 @@ +{ + "theme.ErrorPageContent.title": { + "message": "This page crashed.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Scroll back to top", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Blog list page navigation", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Newer Entries", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Older Entries", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.archive.title": { + "message": "Archive", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Archive", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Blog post page navigation", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Newer Post", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Older Post", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "One post|{count} posts", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} tagged with \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "View All Tags", + "description": "The label of the link targeting the tag list page" + }, + "theme.docs.breadcrumbs.navAriaLabel": { + "message": "Breadcrumbs", + "description": "The ARIA label for the breadcrumbs" + }, + "theme.docs.DocCard.categoryDescription": { + "message": "{count} items", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.colorToggle.ariaLabel": { + "message": "Switch between dark and light mode (currently {mode})", + "description": "The ARIA label for the navbar color mode toggle" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "dark mode", + "description": "The name for the dark color mode" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "light mode", + "description": "The name for the light color mode" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "Docs pages", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "Previous", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "Next", + "description": "The label used to navigate to the next doc" + }, + "theme.docs.versionBadge.label": { + "message": "Version: {versionLabel}" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "One doc tagged|{count} docs tagged", + "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.tagDocListPageTitle": { + "message": "{nDocsTagged} with \"{tagName}\"", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "latest version", + "description": "The label used for the latest version suggestion link label" + }, + "theme.common.editThisPage": { + "message": "Edit this page", + "description": "The link label to edit the current page" + }, + "theme.common.headingLinkTitle": { + "message": "Direct link to {heading}", + "description": "Title for link to heading" + }, + "theme.lastUpdated.atDate": { + "message": " on {date}", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": " by {user}", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "Last updated{atDate}{byUser}", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "Versions", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.NotFound.title": { + "message": "Page Not Found", + "description": "The title of the 404 page" + }, + "theme.tags.tagsListLabel": { + "message": "Tags:", + "description": "The label alongside a tag list" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "Close", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "Blog recent posts navigation", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.admonition.caution": { + "message": "caution", + "description": "The default label used for the Caution admonition (:::caution)" + }, + "theme.admonition.danger": { + "message": "danger", + "description": "The default label used for the Danger admonition (:::danger)" + }, + "theme.admonition.info": { + "message": "info", + "description": "The default label used for the Info admonition (:::info)" + }, + "theme.admonition.note": { + "message": "note", + "description": "The default label used for the Note admonition (:::note)" + }, + "theme.admonition.tip": { + "message": "tip", + "description": "The default label used for the Tip admonition (:::tip)" + }, + "theme.admonition.warning": { + "message": "warning", + "description": "The default label used for the Warning admonition (:::warning)" + }, + "theme.CodeBlock.copied": { + "message": "Copied", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "Copy code to clipboard", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copy": { + "message": "Copy", + "description": "The copy button label on code blocks" + }, + "theme.CodeBlock.wordWrapToggle": { + "message": "Toggle word wrap", + "description": "The title attribute for toggle word wrapping button of code block lines" + }, + "theme.DocSidebarItem.expandCategoryAriaLabel": { + "message": "Expand sidebar category '{label}'", + "description": "The ARIA label to expand the sidebar category" + }, + "theme.DocSidebarItem.collapseCategoryAriaLabel": { + "message": "Collapse sidebar category '{label}'", + "description": "The ARIA label to collapse the sidebar category" + }, + "theme.NavBar.navAriaLabel": { + "message": "Main", + "description": "The ARIA label for the main navigation" + }, + "theme.NotFound.p1": { + "message": "We could not find what you were looking for.", + "description": "The first paragraph of the 404 page" + }, + "theme.NotFound.p2": { + "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "On this page", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.blog.post.readMore": { + "message": "Read More", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.readMoreLabel": { + "message": "Read more about {title}", + "description": "The ARIA label for the link to full blog posts from excerpts" + }, + "theme.blog.post.readingTime.plurals": { + "message": "One min read|{readingTime} min read", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "Languages", + "description": "The label for the mobile language switcher dropdown" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "Collapse sidebar", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "Collapse sidebar", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.breadcrumbs.home": { + "message": "Home page", + "description": "The ARIA label for the home page in the breadcrumbs" + }, + "theme.docs.sidebar.closeSidebarButtonAriaLabel": { + "message": "Close navigation bar", + "description": "The ARIA label for close button of mobile sidebar" + }, + "theme.docs.sidebar.navAriaLabel": { + "message": "Docs sidebar", + "description": "The ARIA label for the sidebar navigation" + }, + "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { + "message": "Toggle navigation bar", + "description": "The ARIA label for hamburger menu button of mobile navigation" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "Expand sidebar", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "Expand sidebar", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← Back to main menu", + "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" + }, + "theme.SearchBar.seeAll": { + "message": "See all {count} results" + }, + "theme.SearchBar.label": { + "message": "Search", + "description": "The ARIA label and placeholder for search button" + }, + "theme.SearchModal.searchBox.resetButtonTitle": { + "message": "Clear the query", + "description": "The label and ARIA label for search box reset button" + }, + "theme.SearchModal.searchBox.cancelButtonText": { + "message": "Cancel", + "description": "The label and ARIA label for search box cancel button" + }, + "theme.SearchModal.startScreen.recentSearchesTitle": { + "message": "Recent", + "description": "The title for recent searches" + }, + "theme.SearchModal.startScreen.noRecentSearchesText": { + "message": "No recent searches", + "description": "The text when no recent searches" + }, + "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { + "message": "Save this search", + "description": "The label for save recent search button" + }, + "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { + "message": "Remove this search from history", + "description": "The label for remove recent search button" + }, + "theme.SearchModal.startScreen.favoriteSearchesTitle": { + "message": "Favorite", + "description": "The title for favorite searches" + }, + "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { + "message": "Remove this search from favorites", + "description": "The label for remove favorite search button" + }, + "theme.SearchModal.errorScreen.titleText": { + "message": "Unable to fetch results", + "description": "The title for error screen of search modal" + }, + "theme.SearchModal.errorScreen.helpText": { + "message": "You might want to check your network connection.", + "description": "The help text for error screen of search modal" + }, + "theme.SearchModal.footer.selectText": { + "message": "to select", + "description": "The explanatory text of the action for the enter key" + }, + "theme.SearchModal.footer.selectKeyAriaLabel": { + "message": "Enter key", + "description": "The ARIA label for the Enter key button that makes the selection" + }, + "theme.SearchModal.footer.navigateText": { + "message": "to navigate", + "description": "The explanatory text of the action for the Arrow up and Arrow down key" + }, + "theme.SearchModal.footer.navigateUpKeyAriaLabel": { + "message": "Arrow up", + "description": "The ARIA label for the Arrow up key button that makes the navigation" + }, + "theme.SearchModal.footer.navigateDownKeyAriaLabel": { + "message": "Arrow down", + "description": "The ARIA label for the Arrow down key button that makes the navigation" + }, + "theme.SearchModal.footer.closeText": { + "message": "to close", + "description": "The explanatory text of the action for Escape key" + }, + "theme.SearchModal.footer.closeKeyAriaLabel": { + "message": "Escape key", + "description": "The ARIA label for the Escape key button that close the modal" + }, + "theme.SearchModal.footer.searchByText": { + "message": "Search by", + "description": "The text explain that the search is making by Algolia" + }, + "theme.SearchModal.noResultsScreen.noResultsText": { + "message": "No results for", + "description": "The text explains that there are no results for the following search" + }, + "theme.SearchModal.noResultsScreen.suggestedQueryText": { + "message": "Try searching for", + "description": "The text for the suggested query when no results are found for the following search" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsText": { + "message": "Believe this query should return results?", + "description": "The text for the question where the user thinks there are missing results" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { + "message": "Let us know.", + "description": "The text for the link to report missing results" + }, + "theme.SearchModal.placeholder": { + "message": "Search docs", + "description": "The placeholder of the input of the DocSearch pop-up modal" + }, + "theme.SearchPage.documentsFound.plurals": { + "message": "One document found|{count} documents found", + "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.SearchPage.existingResultsTitle": { + "message": "Search results for \"{query}\"", + "description": "The search page title for non-empty query" + }, + "theme.SearchPage.emptyResultsTitle": { + "message": "Search the documentation", + "description": "The search page title for empty query" + }, + "theme.SearchPage.inputPlaceholder": { + "message": "Type your search here", + "description": "The placeholder for search page input" + }, + "theme.SearchPage.inputLabel": { + "message": "Search", + "description": "The ARIA label for search page input" + }, + "theme.SearchPage.algoliaLabel": { + "message": "Search by Algolia", + "description": "The ARIA label for Algolia mention" + }, + "theme.SearchPage.noResultsText": { + "message": "No results were found", + "description": "The paragraph for empty search result" + }, + "theme.SearchPage.fetchingNewResults": { + "message": "Fetching new results...", + "description": "The paragraph for fetching new search results" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "Try again", + "description": "The label of the button to try again rendering when the React error boundary captures an error" + }, + "theme.common.skipToMainContent": { + "message": "Skip to main content", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.tags.tagsPageTitle": { + "message": "Tags", + "description": "The title of the tag list page" + }, + "theme.unlistedContent.title": { + "message": "Unlisted page", + "description": "The unlisted content banner title" + }, + "theme.unlistedContent.message": { + "message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.", + "description": "The unlisted content banner message" + } +} diff --git a/docs/i18n/en/docusaurus-plugin-content-blog/options.json b/docs/i18n/en/docusaurus-plugin-content-blog/options.json new file mode 100644 index 00000000000..9239ff706c2 --- /dev/null +++ b/docs/i18n/en/docusaurus-plugin-content-blog/options.json @@ -0,0 +1,14 @@ +{ + "title": { + "message": "Blog", + "description": "The title for the blog used in SEO" + }, + "description": { + "message": "Blog", + "description": "The description for the blog used in SEO" + }, + "sidebar.title": { + "message": "Recent posts", + "description": "The label for the left sidebar" + } +} diff --git a/docs/i18n/en/docusaurus-plugin-content-docs/current.json b/docs/i18n/en/docusaurus-plugin-content-docs/current.json new file mode 100644 index 00000000000..191957753c1 --- /dev/null +++ b/docs/i18n/en/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,70 @@ +{ + "version.label": { + "message": "Next", + "description": "The label for version current" + }, + "sidebar.learn.category.Introduction": { + "message": "Introduction", + "description": "The label for category Introduction in sidebar learn" + }, + "sidebar.learn.category.Core Concepts": { + "message": "Core Concepts", + "description": "The label for category Core Concepts in sidebar learn" + }, + "sidebar.learn.category.Contributing": { + "message": "Contributing", + "description": "The label for category Contributing in sidebar learn" + }, + "sidebar.developers.category.Introduction": { + "message": "Introduction", + "description": "The label for category Introduction in sidebar developers" + }, + "sidebar.developers.category.Javascript SDK": { + "message": "Javascript SDK", + "description": "The label for category Javascript SDK in sidebar developers" + }, + "sidebar.developers.category.Guides": { + "message": "Guides", + "description": "The label for category Guides in sidebar developers" + }, + "sidebar.developers.category.The Graph": { + "message": "The Graph", + "description": "The label for category The Graph in sidebar developers" + }, + "sidebar.distributors.category.Introduction": { + "message": "Introduction", + "description": "The label for category Introduction in sidebar distributors" + }, + "sidebar.distributors.category.Specification": { + "message": "Specification", + "description": "The label for category Specification in sidebar distributors" + }, + "sidebar.distributors.category.Self Serve": { + "message": "Self Serve", + "description": "The label for category Self Serve in sidebar distributors" + }, + "sidebar.node_operators.category.Introduction": { + "message": "Introduction", + "description": "The label for category Introduction in sidebar node_operators" + }, + "sidebar.node_operators.category.Staking": { + "message": "Staking", + "description": "The label for category Staking in sidebar node_operators" + }, + "sidebar.node_operators.category.Run a Node": { + "message": "Run a Node", + "description": "The label for category Run a Node in sidebar node_operators" + }, + "sidebar.node_operators.category.Register a Node": { + "message": "Register a Node", + "description": "The label for category Register a Node in sidebar node_operators" + }, + "sidebar.reference.category.Introduction": { + "message": "Introduction", + "description": "The label for category Introduction in sidebar reference" + }, + "sidebar.reference.category.Protocol Dashboard": { + "message": "Protocol Dashboard", + "description": "The label for category Protocol Dashboard in sidebar reference" + } +} diff --git a/docs/i18n/en/docusaurus-theme-classic/navbar.json b/docs/i18n/en/docusaurus-theme-classic/navbar.json new file mode 100644 index 00000000000..a061485ed17 --- /dev/null +++ b/docs/i18n/en/docusaurus-theme-classic/navbar.json @@ -0,0 +1,30 @@ +{ + "title": { + "message": "Audius", + "description": "The title in the navbar" + }, + "logo.alt": { + "message": "Audius Logo", + "description": "The alt text of navbar logo" + }, + "item.label.Learn": { + "message": "Learn", + "description": "Navbar item with label Learn" + }, + "item.label.Developers": { + "message": "Developers", + "description": "Navbar item with label Developers" + }, + "item.label.Staking": { + "message": "Staking", + "description": "Navbar item with label Staking" + }, + "item.label.Distributors": { + "message": "Distributors", + "description": "Navbar item with label Distributors" + }, + "item.label.Reference": { + "message": "Reference", + "description": "Navbar item with label Reference" + } +} diff --git a/docs/sidebars.js b/docs/sidebars.js index 65b691e56a9..ae200ba613a 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -74,6 +74,31 @@ module.exports = { }, ], + distributors: [ + { + type: 'category', + label: 'Introduction', + items: ['distributors/introduction/overview'], + collapsed: false, + }, + { + type: 'category', + label: 'Specification', + items: [ + 'distributors/specification/overview', + 'distributors/specification/metadata', + 'distributors/specification/deal-types', + ], + collapsed: false, + }, + { + type: 'category', + label: 'Self Serve', + items: ['distributors/self-serve/overview', 'distributors/self-serve/run-a-ddex-server'], + collapsed: false, + }, + ], + node_operators: [ { type: 'category', diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 05ef6e7ef31..e1f5403a95f 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -22,7 +22,8 @@ footer { --ifm-color-primary-light: var(--secondary-light-1); --ifm-color-primary-lighter: var(--secondary-light-2); --ifm-color-primary-lightest: var(--neutral-light-4); - --ifm-code-font-size: 95%; + --ifm-code-font-size: 75%; + --ifm-code-font-weight: 600; --ifm-spacing-horizontal: 1em; --ifm-font-family-base: 'Avenir Next LT Pro', system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, @@ -31,7 +32,8 @@ footer { --ifm-font-color-base: var(--neutral-dark-3); --ifm-font-weight-base: 500; --ifm-footer-background-color: #35364f !important; - --ifm-code-background: var(--neutral-light-9); + --ifm-code-background: var(--neutral-light-10); + --ifm-code-padding-horizontal: 2px; --docsearch-searchbox-background: var(--white); --ifm-color-danger-contrast-background: var(--accent-red); --ifm-color-danger-contrast-foreground: var(--static-white); @@ -162,6 +164,11 @@ footer .text--center { /* Customized CSS Starts Here */ /* ///////////////////////////////////////////////////////////////////////// */ +code { + font-weight: 600; + color: var(--neutral-dark-1); +} + /* Home Page customized css */ img.welcomeBanner { @@ -316,3 +323,9 @@ html[data-theme='dark'] .navbar__items > a:nth-child(1):hover { html[data-theme='dark'] .tabs__item--active { background-color: #00000080; } + +/* list elements */ + +.markdown li { + margin-bottom: 12px; +} \ No newline at end of file