From fe8a66af9cdb13b33bf7d0de2123929e21bb0a8d Mon Sep 17 00:00:00 2001 From: lucastortora Date: Wed, 1 Sep 2021 09:35:12 +0200 Subject: [PATCH 1/3] * Browser friendly descriptive urls * Removed duplicate onBrokenLinks declaration in config --- ...intro_ssi.md => decentralized_identity.md} | 2 +- .../advanced/{README.md => overview.md} | 0 .../create.md | 0 .../merkle_key_collection.md | 0 .../overview.md} | 5 +- .../resolve.md | 0 .../update.md | 0 .../did_comm_messages.md | 0 .../overview.md} | 0 .../protocols.md | 0 .../{vc => verifiable_credentials}/create.md | 0 .../overview.md} | 0 .../{vc => verifiable_credentials}/revoke.md | 0 .../verifiable_presentations.md} | 2 +- .../docs/{intro.md => introduction.md} | 5 - .../libraries/rust/{README.md => overview.md} | 0 .../libraries/wasm/{README.md => overview.md} | 0 .../docs/specs/{README.md => overview.md} | 0 documentation/docusaurus.config.js | 7 +- documentation/sidebars.js | 172 +++++++++--------- 20 files changed, 96 insertions(+), 97 deletions(-) rename documentation/docs/{intro_ssi.md => decentralized_identity.md} (99%) rename documentation/docs/getting-started/advanced/{README.md => overview.md} (100%) rename documentation/docs/getting-started/{did => decentralized_identifiers}/create.md (100%) rename documentation/docs/getting-started/{did => decentralized_identifiers}/merkle_key_collection.md (100%) rename documentation/docs/getting-started/{did/README.md => decentralized_identifiers/overview.md} (99%) rename documentation/docs/getting-started/{did => decentralized_identifiers}/resolve.md (100%) rename documentation/docs/getting-started/{did => decentralized_identifiers}/update.md (100%) rename documentation/docs/getting-started/{didcomm => did_communications}/did_comm_messages.md (100%) rename documentation/docs/getting-started/{didcomm/README.md => did_communications/overview.md} (100%) rename documentation/docs/getting-started/{didcomm => did_communications}/protocols.md (100%) rename documentation/docs/getting-started/{vc => verifiable_credentials}/create.md (100%) rename documentation/docs/getting-started/{vc/README.md => verifiable_credentials/overview.md} (100%) rename documentation/docs/getting-started/{vc => verifiable_credentials}/revoke.md (100%) rename documentation/docs/getting-started/{vc/vp.md => verifiable_credentials/verifiable_presentations.md} (71%) rename documentation/docs/{intro.md => introduction.md} (98%) rename documentation/docs/libraries/rust/{README.md => overview.md} (100%) rename documentation/docs/libraries/wasm/{README.md => overview.md} (100%) rename documentation/docs/specs/{README.md => overview.md} (100%) diff --git a/documentation/docs/intro_ssi.md b/documentation/docs/decentralized_identity.md similarity index 99% rename from documentation/docs/intro_ssi.md rename to documentation/docs/decentralized_identity.md index 8e60c010a6..9464456ab3 100644 --- a/documentation/docs/intro_ssi.md +++ b/documentation/docs/decentralized_identity.md @@ -1,7 +1,7 @@ --- -title: Introduction to Decentralized Identity sidebar_label: Decentralized Identity --- +# Introduction to Decentralized Identity Decentralized Identity or Self Sovereign Identity (SSI) defines a new method for identity management and authentication. It removes the centralized aspects and puts the Identity subject in full control over its own identity. Decentralized identity provides a solution for the increasing amount of database breaches, the lack of trust in any digital setting and the increasingly difficult to comply to privacy legislation, such as GDPR. diff --git a/documentation/docs/getting-started/advanced/README.md b/documentation/docs/getting-started/advanced/overview.md similarity index 100% rename from documentation/docs/getting-started/advanced/README.md rename to documentation/docs/getting-started/advanced/overview.md diff --git a/documentation/docs/getting-started/did/create.md b/documentation/docs/getting-started/decentralized_identifiers/create.md similarity index 100% rename from documentation/docs/getting-started/did/create.md rename to documentation/docs/getting-started/decentralized_identifiers/create.md diff --git a/documentation/docs/getting-started/did/merkle_key_collection.md b/documentation/docs/getting-started/decentralized_identifiers/merkle_key_collection.md similarity index 100% rename from documentation/docs/getting-started/did/merkle_key_collection.md rename to documentation/docs/getting-started/decentralized_identifiers/merkle_key_collection.md diff --git a/documentation/docs/getting-started/did/README.md b/documentation/docs/getting-started/decentralized_identifiers/overview.md similarity index 99% rename from documentation/docs/getting-started/did/README.md rename to documentation/docs/getting-started/decentralized_identifiers/overview.md index 1aaa652f94..c33506e822 100644 --- a/documentation/docs/getting-started/did/README.md +++ b/documentation/docs/getting-started/decentralized_identifiers/overview.md @@ -1,7 +1,4 @@ ---- -title: Decentralized Identifiers (DID) -sidebar_label: Overview ---- +# Decentralized Identifiers (DID) The Decentralized Identifiers (DID) standard from W3C is the fundamental standard that supports the concept of a decentralized digital identity. A DID is a unique identifier that contains information that can be resolved to a DID Document. This document contains data such as public keys, enabling the holder to prove ownership over their personal data, but also URIs that link to public information about the identity. This implementation complies to the [DID specifications v1.0 Working](https://www.w3.org/TR/did-core//). diff --git a/documentation/docs/getting-started/did/resolve.md b/documentation/docs/getting-started/decentralized_identifiers/resolve.md similarity index 100% rename from documentation/docs/getting-started/did/resolve.md rename to documentation/docs/getting-started/decentralized_identifiers/resolve.md diff --git a/documentation/docs/getting-started/did/update.md b/documentation/docs/getting-started/decentralized_identifiers/update.md similarity index 100% rename from documentation/docs/getting-started/did/update.md rename to documentation/docs/getting-started/decentralized_identifiers/update.md diff --git a/documentation/docs/getting-started/didcomm/did_comm_messages.md b/documentation/docs/getting-started/did_communications/did_comm_messages.md similarity index 100% rename from documentation/docs/getting-started/didcomm/did_comm_messages.md rename to documentation/docs/getting-started/did_communications/did_comm_messages.md diff --git a/documentation/docs/getting-started/didcomm/README.md b/documentation/docs/getting-started/did_communications/overview.md similarity index 100% rename from documentation/docs/getting-started/didcomm/README.md rename to documentation/docs/getting-started/did_communications/overview.md diff --git a/documentation/docs/getting-started/didcomm/protocols.md b/documentation/docs/getting-started/did_communications/protocols.md similarity index 100% rename from documentation/docs/getting-started/didcomm/protocols.md rename to documentation/docs/getting-started/did_communications/protocols.md diff --git a/documentation/docs/getting-started/vc/create.md b/documentation/docs/getting-started/verifiable_credentials/create.md similarity index 100% rename from documentation/docs/getting-started/vc/create.md rename to documentation/docs/getting-started/verifiable_credentials/create.md diff --git a/documentation/docs/getting-started/vc/README.md b/documentation/docs/getting-started/verifiable_credentials/overview.md similarity index 100% rename from documentation/docs/getting-started/vc/README.md rename to documentation/docs/getting-started/verifiable_credentials/overview.md diff --git a/documentation/docs/getting-started/vc/revoke.md b/documentation/docs/getting-started/verifiable_credentials/revoke.md similarity index 100% rename from documentation/docs/getting-started/vc/revoke.md rename to documentation/docs/getting-started/verifiable_credentials/revoke.md diff --git a/documentation/docs/getting-started/vc/vp.md b/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md similarity index 71% rename from documentation/docs/getting-started/vc/vp.md rename to documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md index 590b9d8e20..15fb88579b 100644 --- a/documentation/docs/getting-started/vc/vp.md +++ b/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md @@ -1,5 +1,5 @@ --- -title: Verifiable Presentations +title: verifiable Presentations sidebar_label: Verifiable Presentations --- diff --git a/documentation/docs/intro.md b/documentation/docs/introduction.md similarity index 98% rename from documentation/docs/intro.md rename to documentation/docs/introduction.md index 09dbc0919e..b01d2aa043 100644 --- a/documentation/docs/intro.md +++ b/documentation/docs/introduction.md @@ -1,8 +1,3 @@ ---- -sidebar_position: 1 -title: Introduction ---- - # IOTA Identity Framework Guide ![IOTA Identity](https://github.com/iotaledger/identity.rs/raw/dev/.meta/identity_banner.png) diff --git a/documentation/docs/libraries/rust/README.md b/documentation/docs/libraries/rust/overview.md similarity index 100% rename from documentation/docs/libraries/rust/README.md rename to documentation/docs/libraries/rust/overview.md diff --git a/documentation/docs/libraries/wasm/README.md b/documentation/docs/libraries/wasm/overview.md similarity index 100% rename from documentation/docs/libraries/wasm/README.md rename to documentation/docs/libraries/wasm/overview.md diff --git a/documentation/docs/specs/README.md b/documentation/docs/specs/overview.md similarity index 100% rename from documentation/docs/specs/README.md rename to documentation/docs/specs/overview.md diff --git a/documentation/docusaurus.config.js b/documentation/docusaurus.config.js index 5889304212..b2ab245e45 100644 --- a/documentation/docusaurus.config.js +++ b/documentation/docusaurus.config.js @@ -7,14 +7,13 @@ module.exports = { tagline: 'Providing Trust between Individuals, Organizations and Things.', url: 'https://identity.docs.iota.org', baseUrl: '/', - onBrokenLinks: 'throw', + onBrokenLinks: 'warn', onBrokenMarkdownLinks: 'warn', favicon: 'img/favicon.ico', organizationName: 'iotaledger', // Usually your GitHub org/user name. projectName: 'identity.rs', // Usually your repo name. - onBrokenLinks: 'warn', stylesheets: [ - 'https://fonts.googleapis.com/css?family=Material+Icons', + // 'https://fonts.googleapis.com/css?family=Material+Icons', ], themeConfig: { navbar: { @@ -26,7 +25,7 @@ module.exports = { items: [ { type: 'doc', - docId: 'intro', + docId: 'introduction', position: 'left', label: 'Documentation', }, diff --git a/documentation/sidebars.js b/documentation/sidebars.js index 4f97b1c3c4..d197f03039 100644 --- a/documentation/sidebars.js +++ b/documentation/sidebars.js @@ -10,99 +10,107 @@ */ module.exports = { - // By default, Docusaurus generates a sidebar from the docs folder structure - // tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + // By default, Docusaurus generates a sidebar from the docs folder structure + // tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], - // But you can create a sidebar manually + // But you can create a sidebar manually - docs: [ - 'intro', - 'intro_ssi', - { - type: 'category', - label: 'Getting Started', - collapsed: false, - items: [ - 'getting-started/overview', + docs: [ { - 'Decentralized Identifiers (DID)': [ - 'getting-started/did/README', - 'getting-started/did/create', - 'getting-started/did/resolve', - 'getting-started/did/update', - 'getting-started/did/merkle_key_collection', - ], + type: 'doc', + id: 'introduction', + label: 'Introduction' }, { - 'Verifiable Credentials': [ - 'getting-started/vc/README', - 'getting-started/vc/create', - 'getting-started/vc/revoke', - 'getting-started/vc/vp', - ] + type:'doc', + id:'decentralized_identity', + label:'Decentralized Identity' }, { - 'DID Communication': [ - 'getting-started/didcomm/README', - 'getting-started/didcomm/did_comm_messages', - 'getting-started/didcomm/protocols', - ], - 'Advanced Concepts':[ - 'getting-started/advanced/README', - 'getting-started/advanced/client', - 'getting-started/advanced/did_messages', - 'getting-started/advanced/storage_adapter', - 'getting-started/advanced/signature_schemes', + type: 'category', + label: 'Getting Started', + collapsed: false, + items: [ + 'getting-started/overview', + { + 'Decentralized Identifiers (DID)': [ + 'getting-started/decentralized_identifiers/overview', + 'getting-started/decentralized_identifiers/create', + 'getting-started/decentralized_identifiers/resolve', + 'getting-started/decentralized_identifiers/update', + 'getting-started/decentralized_identifiers/merkle_key_collection', + ], + }, + { + 'Verifiable Credentials': [ + 'getting-started/verifiable_credentials/overview', + 'getting-started/verifiable_credentials/create', + 'getting-started/verifiable_credentials/revoke', + 'getting-started/verifiable_credentials/verifiable_presentations', + ] + }, + { + 'DID Communication': [ + 'getting-started/did_communications/overview', + 'getting-started/did_communications/did_comm_messages', + 'getting-started/did_communications/protocols', + ], + 'Advanced Concepts': [ + 'getting-started/advanced/overview', + 'getting-started/advanced/client', + 'getting-started/advanced/did_messages', + 'getting-started/advanced/storage_adapter', + 'getting-started/advanced/signature_schemes', - ] + ] + }, + ], }, - ], - }, - { - type: 'category', - label: 'Programming Languages', - collapsed: true, - items: [ { - type: 'category', - label: 'Rust', - collapsed: true, - items: [ - 'libraries/rust/README', - 'libraries/rust/getting_started', - 'libraries/rust/examples', - 'libraries/rust/api_reference', - 'libraries/rust/troubleshooting', - ], - + type: 'category', + label: 'Programming Languages', + collapsed: true, + items: [ + { + type: 'category', + label: 'Rust', + collapsed: true, + items: [ + 'libraries/rust/overview', + 'libraries/rust/getting_started', + 'libraries/rust/examples', + 'libraries/rust/api_reference', + 'libraries/rust/troubleshooting', + ], + + }, + { + type: 'category', + label: 'WASM', + collapsed: true, + items: [ + 'libraries/wasm/overview', + 'libraries/wasm/getting_started', + 'libraries/wasm/examples', + 'libraries/wasm/api_reference', + 'libraries/wasm/troubleshooting', + ], + }, + ], }, { - type: 'category', - label: 'WASM', - collapsed: true, - items: [ - 'libraries/wasm/README', - 'libraries/wasm/getting_started', - 'libraries/wasm/examples', - 'libraries/wasm/api_reference', - 'libraries/wasm/troubleshooting', - ], + type: 'category', + label: 'Specificatons', + collapsed: true, + items: [ + 'specs/overview', + 'specs/iota_did_method_spec', + 'specs/merkle_key_collection', + ], }, - ], - }, - { - type: 'category', - label: 'Specificatons', - collapsed: true, - items: [ - 'specs/README', - 'specs/iota_did_method_spec', - 'specs/merkle_key_collection', - ], - }, - 'glossary', - 'contribute', - 'contact', - 'faq' - ], + 'glossary', + 'contribute', + 'contact', + 'faq' + ], }; From 887febc3bdc566179f43acf3df1e544a37c84d5a Mon Sep 17 00:00:00 2001 From: lucastortora Date: Thu, 2 Sep 2021 12:31:35 +0200 Subject: [PATCH 2/3] * Removed Docusarus assets. * Added description, image and keywords for all docs. * Added alt attribute to images * Upgraded to docusarus beta 4 * Added png identity icon --- documentation/docs/contact.md | 6 + documentation/docs/contribute.md | 8 + documentation/docs/decentralized_identity.md | 54 +++- documentation/docs/faq.md | 7 + .../docs/getting-started/advanced/client.md | 5 + .../getting-started/advanced/did_messages.md | 14 +- .../docs/getting-started/advanced/overview.md | 5 + .../advanced/signature_schemes.md | 8 +- .../advanced/storage_adapter.md | 6 + .../{create.md => create.mdx} | 7 + .../merkle_key_collection.md | 5 + .../decentralized_identifiers/overview.md | 29 +- .../decentralized_identifiers/resolve.md | 5 +- .../decentralized_identifiers/update.md | 8 + .../did_communications/did_comm_messages.md | 6 + .../did_communications/overview.md | 6 + .../did_communications/protocols.md | 7 + .../docs/getting-started/overview.md | 13 +- .../verifiable_credentials/create.md | 7 + .../verifiable_credentials/overview.md | 6 + .../verifiable_credentials/revoke.md | 7 + .../verifiable_presentations.md | 5 + documentation/docs/glossary.md | 11 + documentation/docs/introduction.md | 42 ++- documentation/docs/libraries/README.md | 4 +- .../docs/libraries/rust/api_reference.md | 5 + documentation/docs/libraries/rust/examples.md | 5 + .../docs/libraries/rust/getting_started.md | 5 + documentation/docs/libraries/rust/overview.md | 7 + .../docs/libraries/rust/troubleshooting.md | 5 + .../docs/libraries/wasm/api_reference.md | 5 + documentation/docs/libraries/wasm/examples.md | 5 + .../docs/libraries/wasm/getting_started.md | 10 + documentation/docs/libraries/wasm/overview.md | 7 + .../docs/libraries/wasm/troubleshooting.md | 7 + .../docs/specs/iota_did_method_spec.md | 12 +- .../docs/specs/merkle_key_collection.md | 9 + documentation/docs/specs/overview.md | 5 + documentation/docusaurus.config.js | 8 +- documentation/package.json | 4 +- .../src/components/HomepageFeatures.js | 62 ---- .../components/HomepageFeatures.module.css | 13 - .../components/LandingpageActions/index.js | 2 +- documentation/static/img/Identity_icon.png | Bin 0 -> 5040 bytes documentation/static/img/docusaurus.png | Bin 5142 -> 0 bytes .../img/tutorial/docsVersionDropdown.png | Bin 25102 -> 0 bytes .../static/img/tutorial/localeDropdown.png | Bin 30020 -> 0 bytes .../static/img/undraw_docusaurus_mountain.svg | 170 ---------- .../static/img/undraw_docusaurus_react.svg | 169 ---------- .../static/img/undraw_docusaurus_tree.svg | 1 - documentation/yarn.lock | 298 +++++++++--------- 51 files changed, 475 insertions(+), 620 deletions(-) rename documentation/docs/getting-started/decentralized_identifiers/{create.md => create.mdx} (73%) delete mode 100644 documentation/src/components/HomepageFeatures.js delete mode 100644 documentation/src/components/HomepageFeatures.module.css create mode 100644 documentation/static/img/Identity_icon.png delete mode 100644 documentation/static/img/docusaurus.png delete mode 100644 documentation/static/img/tutorial/docsVersionDropdown.png delete mode 100644 documentation/static/img/tutorial/localeDropdown.png delete mode 100644 documentation/static/img/undraw_docusaurus_mountain.svg delete mode 100644 documentation/static/img/undraw_docusaurus_react.svg delete mode 100644 documentation/static/img/undraw_docusaurus_tree.svg diff --git a/documentation/docs/contact.md b/documentation/docs/contact.md index 8ca485ea42..ad8f82fa20 100644 --- a/documentation/docs/contact.md +++ b/documentation/docs/contact.md @@ -1,6 +1,12 @@ --- title: Contact sidebar_label: Contact +description: Get in touch with the project maintainers. +image: /img/Identity_icon.png +keywords: +- Contact +- GitHub +- Maintainers --- TODO: Add ways to contact the maintainers \ No newline at end of file diff --git a/documentation/docs/contribute.md b/documentation/docs/contribute.md index ab5ace28eb..15e4f81ab2 100644 --- a/documentation/docs/contribute.md +++ b/documentation/docs/contribute.md @@ -1,6 +1,14 @@ --- title: Contribute to the project sidebar_label: Contribute +description: Contribute to IOTA Identity joining the Identity initiative, via the projects GitHub repository, documentation or sharing your knowledge. +image: /img/Identity_icon.png +keywords: +- Contribute +- GitHub +- Identity Initiative +- Documentation +- Discord --- **Thanks for thinking about contributing to the project! We have the following ways that you can contribute.** diff --git a/documentation/docs/decentralized_identity.md b/documentation/docs/decentralized_identity.md index 9464456ab3..6b3e3c520d 100644 --- a/documentation/docs/decentralized_identity.md +++ b/documentation/docs/decentralized_identity.md @@ -1,5 +1,11 @@ --- -sidebar_label: Decentralized Identity +description: Decentralized identity defines a new method for identity management and authentication by removing centralized aspects. +image: /img/Identity_icon.png +keywords: +- Self Sovereign Identity +- decentralized +- Permissionless +- authentication --- # Introduction to Decentralized Identity @@ -14,9 +20,13 @@ With digital identity, the user can decide what information to share and with wh -### Identity for People +## Identity for People -> IOTA Identity builds a new internet, without usernames, passwords, endless repeated forums, or uncontrolled data harvesting. +:::info New internet + +IOTA Identity builds a new internet, without usernames, passwords, endless repeated forums, or uncontrolled data harvesting. + +::: Information about one’s life is spread across many locations. Most people have numerous unorganized important documents at home, hundreds of online accounts, and many more online footprints. Through statistical predictive analysis, computer programs can harvest unverified online information sources and create a reasonably accurate profile about our lives. These profiles are accurate enough for targeted advertising and personalized content, but lack the proof and trust for them to be used in business. This results in an antiquated customer experience where we have to submit our age and address for every purchase we make and every account we create. It also inhibits our ability to do many online tasks like requesting and extending licenses or taking out a mortgage. @@ -26,10 +36,11 @@ IOTA Identity allows a new internet without usernames, passwords, endless repeat Governmental mechanisms for building digital identities are currently being established throughout Europe and Asia, with demand increasing around the globe. However, they are managed by single entities, and restricted to the governments that created them. By decentralizing a framework for these standards to adapt to, we have a system for intergovernmental verification of individuals and devices. A person’s digital identification will be transferable across borders like a passport. However, it will no longer require the trust of the issuing government due to the digital trust established by the open and auditable system. -### Identity for Organizations - -> IOTA Identity allows organizations to comply with GDPR in a cost efficient and privacy-enabling manner +## Identity for Organizations +:::info GDPR +IOTA Identity allows organizations to comply with GDPR in a cost efficient and privacy-enabling manner +::: Many corporations are associated with greed and abuse of power. This reputation stems from the role some have chosen to take within society. Corporations are trusted with our data, but often do not act responsibly. Vulnerability, fix, patch, repeat. In software and systems we have seen this cycle repeat. Headlines on data leaks are now an ever-present feature in the news. @@ -39,9 +50,13 @@ Due to Know-Your-Customer (KYC) and Anti-Money Laundering (AML) obligations, com Organizations that have their own decentralized identities can also combat fraud and increase control over their online brand. Companies can sign invoices and agreements using their decentralized identities. While interacting with the customers, they will also be able to reliably identify themselves. -### Identity for Things +## Identity for Things + +:::info TRUST + +IOTA Identity adds the missing key ingredient for the "Economy of Things": Trust. -> IOTA Identity adds the missing key ingredient for the "Economy of Things": Trust. +::: With Identity of Things (IDoT) devices are provided with a unique global identity, able to prove many attributes including their capabilities, specifications and authenticity. People, organizations and other devices will only pay devices that can prove their ability to fulfill the required task. This basis of trust prevents fraudulent activity. In addition, by using the IOTA ledger, the progress of the task can be immutably logged. With the combination of the IOTA protocol and the IOTA Identity framework, we can automate the entire interaction between all parties, without requiring predefined trust. The [Industry Marketplace](https://industry.iota.org/) provides a perfect example of how this framework and level of autonomy work. @@ -50,27 +65,36 @@ representation of physical devices and objects. This allows other identities to Security is a major barrier in advancing technologies that use IoT. Whether it is the smart devices in our own homes, or at a larger scale, the critical infrastructure of organizations and cities, security must be at the core. It is central to any globally-unifying identity solution. By integrating advanced research in cryptography and digital ledgers, and combining it with a scalable access and management system, security will become a core functionality of the systems we build. By using scalable device DIDs, integrating verification and reputation schemes, and allowing for transparent tamper-proof accountability, we begin to understand how we can future-proof the security of our systems, allowing us to start trusting the process, and not the patch. -### One Framework. Any Identity. +## One Framework. Any Identity. -> The IOTA Identity framework serves as the invisible layer of trust for the internet. This framework must be open, scalable and free, so that everyone and everything can enjoy trust as a basic digital right. +:::info Framework + + The IOTA Identity framework serves as the invisible layer of trust for the internet. This framework must be open, scalable and free, so that everyone and everything can enjoy trust as a basic digital right. + +::: With multiple different types of actor requiring an identity protocol, it is a strong proposition to use the same underlying protocol for all of them. This IOTA Identity framework enables anyone or anything to create a digital identity, build an online profile of trust by collecting verifiable credentials, and share them with other actors they interact with. Interaction between people, companies, things and objects becomes seamless. And just as we can trust a person we will also be able to trust a car, or even a luxury coat. Different identities can also be linked together, creating trustworthy relationships, such as ownership of an object. IOTA already provides a protocol that enables these actors to transact value or data with one another. IOTA will now combine identity features into a single platform, creating the base protocol for the next generation of smart applications. -### Why IOTA? +## Why IOTA? + +:::info Neutral and Free -> IOTA is a neutral and free-to-use public infrastructure acting as a trustworthy public commons. +IOTA is a neutral and free-to-use public infrastructure acting as a trustworthy public commons. + +::: IOTA is a scalable and feeless Distributed Ledger Technology (DLT). Similar to Blockchain technology, IOTA provides an immutable and decentralized ledger that can transact value through the IOTA token. Unlike Blockchain, IOTA uses a non-linear data structure called the Tangle which makes it feeless and vastly more scalable. The Tangle also facilitates feeless transactions of data, such as DID registrations and credential revocations. As a single source of truth and trust in data, the Tangle can provide the trust infrastructure in a highly networked world. IOTA is uniquely suited for the a single unifying identity implementation. The network is designed for both humans and devices, providing a platform for trusted communication between individuals, organizations and things. The IOTA Foundation’s principles of full transparency, openness and permissionless innovation provide an open and neutral environment: + 1. **Permissionless & Decentralized**: Unlike a permissioned network such as Hyperledger or Corda, everyone can participate in consensus without being granted access. No party incentivized by profit-making has collective control over the network (unlike all blockchains). This makes IOTA neutral and censorship-resistant. 2. **Public**: Everyone can observe (unless using optional encryption) the transactions in the network. The network is inherently transparent. 3. **Feeless**: All data and value transactions on the network are free. Unlike other DLTs such as Bitcoin or Ethereum, registration and communication of identities can be written to the network without a requirement to purchase a cryptocurrency token. 4. **Open Source**: Everyone can view and contribute to the code. -5. **Easy to use**: IOTA Identity is inheritantly easier to use due to the lack of fees or requirement to set up an entire private network. In addition, the framework is designed to have a easy to use high-level API, with accesibility to the low-level more complex and more flexible API. Through integration with the Stronghold project, we also provide out-of-the-box security for secrets. +5. **Easy to use**: IOTA Identity is inherently easier to use due to the lack of fees or requirement to set up an entire private network. In addition, the framework is designed to have a easy to use high-level API, with accessibility to the low-level more complex and more flexible API. Through integration with the Stronghold project, we also provide out-of-the-box security for secrets. -Data must be immutably stored on a distributed ledger to ensure the decentralized nature of the digital identity protocol. With the network’s continual uptime, credentials are always verifiable without a dependency on the servers of credential issuers. This system also increases individual privacy, because contact with the Issuer is removed from the interaction between Holder and Verifier. Issuers will not be able to track when and how often the Holder uses their credentials. The flexibility afforded of the Tangle means that the digital identity framework remains extendible in the future. +Data must be immutably stored on a distributed ledger to ensure the decentralized nature of the digital identity protocol. With the network’s continual uptime, credentials are always verifiable without a dependency on the servers of credential issuers. This system also increases individual privacy, because contact with the Issuer is removed from the interaction between Holder and Verifier. Issuers will not be able to track when and how often the Holder uses their credentials. The flexibility afforded of the Tangle means that the digital identity framework remains extendable in the future. Within the digital identity framework, the Tangle is used for the following functionalities: 1. **Public Key Registry**: The Tangle enables a decentralized public key infrastructure (DPKI) for Issuers using DID standards. This allows Verifiers to verify a signature without a reliance on a centralized server. The DID standard also adds service endpoints, extending the usability of Identities beyond a public key registry, to, for example, registering verifiable credential standards. -2. **Revocation**: A verifiable credential can be revoked, meaning it will no longer be able to pass verification. The revocation is immutably stored on the Tangle, making sure no Holder can attempt to use their revoked credentials. This is designed to be a simple public key deactivation to guarentee GDPR compliance. \ No newline at end of file +2. **Revocation**: A verifiable credential can be revoked, meaning it will no longer be able to pass verification. The revocation is immutably stored on the Tangle, making sure no Holder can attempt to use their revoked credentials. This is designed to be a simple public key deactivation to guarantee GDPR compliance. \ No newline at end of file diff --git a/documentation/docs/faq.md b/documentation/docs/faq.md index 589091f047..9276534b88 100644 --- a/documentation/docs/faq.md +++ b/documentation/docs/faq.md @@ -1,6 +1,13 @@ --- title: Frequently Asked Questions sidebar_label: FAQ +description: Frequently Asked Question regardging IOTA Identity. +image: /img/Identity_icon.png +keywords: +- FAQ +- Frequently Asked Question +- Troubleshooting +- IOTA Identity --- TODO: Add list of frequently asked questions and there answers \ No newline at end of file diff --git a/documentation/docs/getting-started/advanced/client.md b/documentation/docs/getting-started/advanced/client.md index 8db8390e97..3d325dbaf2 100644 --- a/documentation/docs/getting-started/advanced/client.md +++ b/documentation/docs/getting-started/advanced/client.md @@ -1,6 +1,11 @@ --- title: IOTA Client sidebar_label: IOTA Client +description: Explain what the IOTA Client does and how the features such as ZMQ and promoting should be used. +image: /img/Identity_icon.png +keywords: +- IOTA Client +- ZMQ --- TODO: Explain what the IOTA Client does and how the features such as ZMQ and promoting should be used. \ No newline at end of file diff --git a/documentation/docs/getting-started/advanced/did_messages.md b/documentation/docs/getting-started/advanced/did_messages.md index 656c7923c0..ee85f02287 100644 --- a/documentation/docs/getting-started/advanced/did_messages.md +++ b/documentation/docs/getting-started/advanced/did_messages.md @@ -1,6 +1,16 @@ --- title: DID Messages sidebar_label: DID Messages +description: Learn how IOTA Identity recreates and validates the state from it's origin to the current version using Integration and Differentiation Chains. +image: /img/Identity_icon.png +keywords: +- Diff Chain +- Differentiation Chain +- Integration Chain +- smart contracts +- Chronicle +- state +- stateless --- TODO: Explain the concept of DID Messages and how they can be used to optimize DID updates. @@ -9,7 +19,7 @@ TODO: Explain the concept of DID Messages and how they can be used to optimize D Most DID methods are implemented on a Distributed Ledger Technology (DLT), such as Bitcoin, Ethereum or IOTA. Most common DID implementation on DLTs are based on fit-for-purpose Blockchains that store the state of a DID Document in the ledger, or a general purpose Blockchain that utilize smart contracts to store the state. Updating a DID Document where the state is understood by the network is straightforward. The network can determine if an action is legal and if a cryptographic signature is provided correctly, as it understands the underlying data structure, and can update the state accordingly. The individual state updates, or transactions, can be forgotten. -The IOTA Tangle is unable to track state or the understand the data structure. Storing the state is neither possible in the ledger, nor via a Smart contract (yet). Therefore, IOTA Identity has to recreate and validate the state from the origin of the Identity to the current version. The process involves querying all the relevant transactions from the Tangle, ordering them, filtering out the transactions that perform illegal actions or have an incorrect signature and then recreate state. As this requires the full history of the Identity, we recommend utilizing [Chronicle](https://github.com/iotaledger/chronicle.rs), an IOTA permanode, which stores the entire history of the Tangle. Further research will be performed to reduce storage requirements for IOTA Identity based applications. +The IOTA Tangle is unable to track state or understand the data structure. Storing the state is neither possible in the ledger, nor via a Smart contract (yet). Therefore, IOTA Identity has to recreate and validate the state from the origin of the Identity to the current version. The process involves querying all the relevant transactions from the Tangle, ordering them, filtering out the transactions that perform illegal actions or have an incorrect signature and then recreate state. As this requires the full history of the Identity, we recommend utilizing [Chronicle](https://github.com/iotaledger/chronicle.rs), an IOTA permanode, which stores the entire history of the Tangle. Further research will be performed to reduce storage requirements for IOTA Identity based applications. ### DID Messages @@ -17,7 +27,7 @@ Due to this constant need for state recreating, unique performance improvements The Integration Chain is a chain of transactions that contain full DID Documents. They are unrestricted in what they can add or remove from the DID Document. Every Integration Chain transaction points to a separate new Diff Chain. These Diff Chain transactions only list the changes to a DID Document and are therefore more compact. It is, however, restricted in rotating the signing key, making it fast and easy to validate the transaction. -Once a new Integration chain transaction is created, it will take all Diff Chain updates and compress them into a new DID Document, essentially combining them all into a single transaction. This reduces the amount of updates that need to be queried and validated tremendously. For example, lets assume every Diff chain contains 100 updates. Then validating a DID that has done 1050 updates, only requires the validation of 10 Integration Chain updates and 40 Diff Chain updates (The latest Diff Chain). We skipped out on 10 Diff Chains each containing 100 updates, and only validated the 10 Integration Chain updates and the last Diff Chain containing 40 updates. If we estimate every update to be on average 1 Kb, we only have to download 50 kb of information and validate it, which is signficantly less then the otherwise 1.025 Mb of information. +Once a new Integration chain transaction is created, it will take all Diff Chain updates and compress them into a new DID Document, essentially combining them all into a single transaction. This reduces the amount of updates that need to be queried and validated tremendously. For example, lets assume every Diff chain contains 100 updates. Then validating a DID that has done 1050 updates, only requires the validation of 10 Integration Chain updates and 40 Diff Chain updates (The latest Diff Chain). We skipped out on 10 Diff Chains each containing 100 updates, and only validated the 10 Integration Chain updates and the last Diff Chain containing 40 updates. If we estimate every update to be on average 1 Kb, we only have to download 50 kb of information and validate it, which is significantly less than the otherwise 1.025 Mb of information. The improved performance and ability to handle frequently updated DID Documents is especially beneficial for Verifiable Credential Revocation, by utilizing revocation flags. These concepts will be explained in the Verifiable Credentials and Key Collections sections. diff --git a/documentation/docs/getting-started/advanced/overview.md b/documentation/docs/getting-started/advanced/overview.md index a4ba87ea0d..3ca0522125 100644 --- a/documentation/docs/getting-started/advanced/overview.md +++ b/documentation/docs/getting-started/advanced/overview.md @@ -1,6 +1,11 @@ --- title: Advanced Concepts Overview sidebar_label: Overview +description: Provide overview of the advanced concepts +image: /img/Identity_icon.png +keywords: +- advanced +- concepts --- TODO: Provide overview of the advanced concepts \ No newline at end of file diff --git a/documentation/docs/getting-started/advanced/signature_schemes.md b/documentation/docs/getting-started/advanced/signature_schemes.md index 9b2b60d3a5..15826a0ec4 100644 --- a/documentation/docs/getting-started/advanced/signature_schemes.md +++ b/documentation/docs/getting-started/advanced/signature_schemes.md @@ -1,6 +1,12 @@ --- title: Signature Schemes sidebar_label: Signature Schemes +description: Explain what signature schemes are available and how a new one can be added locally (and to the repo). +image: /img/Identity_icon.png +keywords: +- signature +- local +- schemes --- -TODO: Explain what signature schemes are avaliable and how a new one can be added locally (and to the repo). \ No newline at end of file +TODO: Explain what signature schemes are available and how a new one can be added locally (and to the repo). \ No newline at end of file diff --git a/documentation/docs/getting-started/advanced/storage_adapter.md b/documentation/docs/getting-started/advanced/storage_adapter.md index e8cfd8b3d9..adb06fe35f 100644 --- a/documentation/docs/getting-started/advanced/storage_adapter.md +++ b/documentation/docs/getting-started/advanced/storage_adapter.md @@ -1,6 +1,12 @@ --- title: Storage Adapter sidebar_label: Storage Adapter +description: Explain the need for the storage adapter and how it can used to store account data differently +image: /img/Identity_icon.png +keywords: +- storage adapter +- account +- data --- TODO: Explain the need for the storage adapter and how it can used to store account data differently \ No newline at end of file diff --git a/documentation/docs/getting-started/decentralized_identifiers/create.md b/documentation/docs/getting-started/decentralized_identifiers/create.mdx similarity index 73% rename from documentation/docs/getting-started/decentralized_identifiers/create.md rename to documentation/docs/getting-started/decentralized_identifiers/create.mdx index 1037f7028a..2ba44a6bf8 100644 --- a/documentation/docs/getting-started/decentralized_identifiers/create.md +++ b/documentation/docs/getting-started/decentralized_identifiers/create.mdx @@ -1,6 +1,13 @@ --- title: Creating a Decentralized Identity sidebar_label: Create and Publish +description: DID Documents and publishing them to the Tangle +image: /img/Identity_icon.png +keywords: +- Documents +- DID +- Tangle +- Publish --- TODO: Explain DID, DID Documents and publishing them to the Tangle. diff --git a/documentation/docs/getting-started/decentralized_identifiers/merkle_key_collection.md b/documentation/docs/getting-started/decentralized_identifiers/merkle_key_collection.md index 651a815d8d..edc0467a3e 100644 --- a/documentation/docs/getting-started/decentralized_identifiers/merkle_key_collection.md +++ b/documentation/docs/getting-started/decentralized_identifiers/merkle_key_collection.md @@ -1,6 +1,11 @@ --- title: Merkle Key Collection sidebar_label: Merkle Key Collection +description: Explain why, how to use and how merkle key collections work. +image: /img/Identity_icon.png +keywords: +- Merkle Key Collections +- DID --- TODO: Explain why, how to use and how merkle key collections work. \ No newline at end of file diff --git a/documentation/docs/getting-started/decentralized_identifiers/overview.md b/documentation/docs/getting-started/decentralized_identifiers/overview.md index c33506e822..46928cf430 100644 --- a/documentation/docs/getting-started/decentralized_identifiers/overview.md +++ b/documentation/docs/getting-started/decentralized_identifiers/overview.md @@ -1,17 +1,28 @@ +--- +description: The Decentralized Identifiers (DID) standard from W3C is the fundamental standard that supports the concept of a decentralized digital identity. Explore the basic aspects of the DID standard. +image: /img/Identity_icon.png +keywords: +- public keys +- Method Specification +- Decentralized Identifiers +- overview +- DLT +--- + # Decentralized Identifiers (DID) The Decentralized Identifiers (DID) standard from W3C is the fundamental standard that supports the concept of a decentralized digital identity. A DID is a unique identifier that contains information that can be resolved to a DID Document. This document contains data such as public keys, enabling the holder to prove ownership over their personal data, but also URIs that link to public information about the identity. This implementation complies to the [DID specifications v1.0 Working](https://www.w3.org/TR/did-core//). -In the IOTA Identity framework, we have implemented the DID standard according to the `iota` DID Method Specification, which can be viewed [here](./specs/iota_did_method_spec.md). We recommend to see the `iota` DID Method Specification as the golden standard for DID on IOTA. Other implementations of DID on IOTA is recommended to follow the `iota` DID Method Specification. However, it is not necassary to implement a novel Method implementation for every project, so feel free to utilize this framework directly. +In the IOTA Identity framework, we have implemented the DID standard according to the `iota` [DID Method Specification](./specs/iota_did_method_spec.md). We recommend to see the `iota` DID Method Specification as the golden standard for DID on IOTA. Other implementations of DID on IOTA is recommended to follow the `iota` DID Method Specification. However, it is not necassary to implement a novel Method implementation for every project, so feel free to utilize this framework directly. An example of DID conforming to the `iota` method specification: `did:iota:8dQAzVbbf6FLW9ckwyCBnKmcMGcUV9LYJoXtgQkHcNQy` -### Chapter overview +## Chapter overview In this chapter we will explain the basic aspects of the DID standard. We will explore the how and why of DID Documents and why IOTA is a very suitable technology to host the DID Documents and the rest of a Self Sovereign Identity Framework. -### Decentralized Identifiers +## Decentralized Identifiers A Decentralized Identifier, or DID, is a unique identifier that is tied to a subject. This subject can be anything, like a person, an organization, an IoT device or even an object. The identifier can be used by the subject to identify themselves through a digital format, providing a basis for online identification. The identifier looks like a set of random characters that includes some prefixes to determine which standard and implementation is used: @@ -19,7 +30,7 @@ A Decentralized Identifier, or DID, is a unique identifier that is tied to a sub The World Wide Web Consortium (W3C) is a well-known standardization body that has standardized how DIDs should look like and work. This provides a basis for different technologies that implement the DID standard to achieve interoperability. A full list of all implementations can be found [here.](https://www.w3.org/TR/did-spec-registries/#did-methods) Please keep in mind that unfortuanetly most of these methods are outdated and not maintained. -### DID Documents +## DID Documents The purpose of a DID is to help navigate to a DID Document, which is a document containing more information regarding the identity subject. This document contains data such as public keys, enabling the subject to prove ownership over their personal data, but also URIs that link to public information about the identity. @@ -41,25 +52,25 @@ Never share your private keys, seeds, passphrases with anyone. Not even IOTA Fou Services are URIs that point to more information about the identity. This could be something as simple as a website for a organizational identity. These services are publicly avaliable for all to read and should therefore not contain Personal Identifiable Information (PII) in the case of human identities. -### Why use DIDs? +## Why use DIDs? DIDs have some limited use cases. It allows any subject to have a unique identifier, that they can prove ownership off and at the same time provide a way to send them encrypted messages. The Identity is Self Sovereign, meaning the subject is control of when the identity is created, but also destroyed. DIDs become really interesting in combination with Verifiable Credentials, that will be covered in a later section. In essence, Verifiable Credentials (VCs) are signed statements by trusted third parties about a certain identity. The signer, or Issuer, is referenced by DID and so is the subject, often called the Holder. The Holder can control a copy of this statement and share this with other parties, the Verifiers, that can verify the statement and check which party gave out the statement, without having to ask the Issuer. Instead, they can verify the signature of the Issuer by checking the Issuers DID Document. This whole set up puts Holders back into control over their own data, but also makes the data much more trustworthy as it has become verifiable. -### Why use IOTA Identity over other implementations? +## Why use IOTA Identity over other implementations? IOTA Identity is a framework to implement Self Sovereign Identities on IOTA. Inheritly, IOTA provides some unique features that have a major impact on the usability of the framework. -#### Feeless +### Feeless IOTA is a feeless Distributed Ledger Technology, that means that messages can immutably be stored inside the Tangle at no-cost, nor a requirements of holding any cryptocurrency tokens. That means that SSI applications can directly deploy towards the main network without any problems, as compared to most other SSI solutions running on a test network or having cryptocurrency requirements. This doesn't just make IOTA Identity have predictable costs and prevent issues around cryptocurrency holding taxes and legislation, it also makes it a fair network as anyone would be able to create one or more identities at no costs. The wealth of someone is irrelevant, making it the most inclusive SSI solution. -#### Ease-of-use +### Ease-of-use Without the need for a token, IOTA Identity can directly be used on the main network without having to purchase and manage a cryptocurrency token. In addition, the framework provides easy-to-use APIs that allow both standardized behavior or flexible, yet more complex access. Lastly, IOTA Identity provides a Stronghold solution for managing secrets in a secure manner, without requiring developers to reinvent the security wheel. -#### General Purpose DLT +### General Purpose DLT IOTA is a general purpose DLT as compared to some for-purpose DLTs with restricted use cases. That means that SSI can easily be combined with other DLT features such as payments, data streams, smart contracts and access control. It will no longer be needed to utilize multiple DLT projects alongside each other. diff --git a/documentation/docs/getting-started/decentralized_identifiers/resolve.md b/documentation/docs/getting-started/decentralized_identifiers/resolve.md index d62da244eb..5528f7fe5f 100644 --- a/documentation/docs/getting-started/decentralized_identifiers/resolve.md +++ b/documentation/docs/getting-started/decentralized_identifiers/resolve.md @@ -1,6 +1,9 @@ --- title: Resolve an IOTA Identity sidebar_label: Resolve +description: Explain how resolving works including arguments. +image: /img/Identity_icon.png +keywords: +- Resolve --- - TODO: Explain how resolving works including arguments. \ No newline at end of file diff --git a/documentation/docs/getting-started/decentralized_identifiers/update.md b/documentation/docs/getting-started/decentralized_identifiers/update.md index 7ebf79654b..8ab76ce591 100644 --- a/documentation/docs/getting-started/decentralized_identifiers/update.md +++ b/documentation/docs/getting-started/decentralized_identifiers/update.md @@ -1,6 +1,14 @@ --- title: Update DID Documents sidebar_label: Update +description: How DID Documents can be manipulated and how updates should be published. +image: /img/Identity_icon.png +keywords: +- Documents +- DID +- Tangle +- Update +- Publish --- TODO: Explain how DID Documents can be manipulated and how updates should be published. \ No newline at end of file diff --git a/documentation/docs/getting-started/did_communications/did_comm_messages.md b/documentation/docs/getting-started/did_communications/did_comm_messages.md index 7316a0d53d..be2527532a 100644 --- a/documentation/docs/getting-started/did_communications/did_comm_messages.md +++ b/documentation/docs/getting-started/did_communications/did_comm_messages.md @@ -1,6 +1,12 @@ --- title: DID Comm messages sidebar_label: DID Comm messages +description: Explain how to create and verify DID Comm messages +image: /img/Identity_icon.png +keywords: +- communication +- message +- Create --- TODO: Explain how to create and verify DID Comm messages \ No newline at end of file diff --git a/documentation/docs/getting-started/did_communications/overview.md b/documentation/docs/getting-started/did_communications/overview.md index 1603c6d6d8..3ce4e69454 100644 --- a/documentation/docs/getting-started/did_communications/overview.md +++ b/documentation/docs/getting-started/did_communications/overview.md @@ -1,6 +1,12 @@ --- title: DID Communications Overview sidebar_label: Overview +description: Explain the DID Communications standard and what it is useful for +image: /img/Identity_icon.png +keywords: +- communication +- message +- standard --- TODO: Explain the DID Communications standard and what it is useful for \ No newline at end of file diff --git a/documentation/docs/getting-started/did_communications/protocols.md b/documentation/docs/getting-started/did_communications/protocols.md index 20f0010f0a..77d0c88294 100644 --- a/documentation/docs/getting-started/did_communications/protocols.md +++ b/documentation/docs/getting-started/did_communications/protocols.md @@ -1,5 +1,12 @@ --- title: DID Comm Protocols sidebar_label: Protocols +description: Provide an overview of the DID Comm protocols +image: /img/Identity_icon.png +keywords: +- communication +- communications +- protocols +- Create --- TODO: Provide an overview of the DID Comm protocols \ No newline at end of file diff --git a/documentation/docs/getting-started/overview.md b/documentation/docs/getting-started/overview.md index 22c1057beb..0b411f8e88 100644 --- a/documentation/docs/getting-started/overview.md +++ b/documentation/docs/getting-started/overview.md @@ -1,13 +1,18 @@ --- -sidebar_position: 2 -title: Overview +description: Using IOTA Identity, a new digital identity can be created by anyone or anything at any time by generating a Decentralized Identifier (DID) combined with Verifiable Credentials. +image: /img/Identity_icon.png +keywords: +- Identity +- verifiable +- credentials +- Rust +- WASM --- - # Overview Using the standards proposed by W3C, this chapter will explain the IOTA Identity implementation. Using this implementation, a new digital identity can be created by anyone or anything at any time. To do so, a Decentralized Identifier (DID) is generated, that serves as a reference to a DID Document. The DID Document contains public keys, and other mechanisms, to enable the subject to prove their association with the DID. -However a DID alone tells you little about the subject. It must be combined with Verifiable Credentials. Verifiable Credentials are statements about the creator of the DID. They can be shared and verified online in a BYOI manner, and the DID creator remains in complete control of the process. +However, a DID alone tells you little about the subject. It must be combined with Verifiable Credentials. Verifiable Credentials are statements about the creator of the DID. They can be shared and verified online in a BYOI manner, and the DID creator remains in complete control of the process. This framework can be used in processes such as: - Address validation: Customers can prove where they live for shipping and billing addresses diff --git a/documentation/docs/getting-started/verifiable_credentials/create.md b/documentation/docs/getting-started/verifiable_credentials/create.md index e897eb3d27..08a9f80c4d 100644 --- a/documentation/docs/getting-started/verifiable_credentials/create.md +++ b/documentation/docs/getting-started/verifiable_credentials/create.md @@ -1,6 +1,13 @@ --- title: Create a Verifiable Credential sidebar_label: Create and Sign +description: Explain how a VC is created and verified. +image: /img/Identity_icon.png +keywords: +- verifiable +- credentials +- Create +- sign --- TODO: Explain how a VC is created and verified. \ No newline at end of file diff --git a/documentation/docs/getting-started/verifiable_credentials/overview.md b/documentation/docs/getting-started/verifiable_credentials/overview.md index 4fc5950cd2..e33bb29521 100644 --- a/documentation/docs/getting-started/verifiable_credentials/overview.md +++ b/documentation/docs/getting-started/verifiable_credentials/overview.md @@ -1,6 +1,12 @@ --- title: Verifiable Credentials Overview sidebar_label: Overview +description: Verifiable Credentials are statements about the holder. They can be verified online or in person, and the holder decides who to share them with. +image: /img/Identity_icon.png +keywords: +- verifiable +- credentials +- person --- diff --git a/documentation/docs/getting-started/verifiable_credentials/revoke.md b/documentation/docs/getting-started/verifiable_credentials/revoke.md index d1c5e1e773..643ed0c58b 100644 --- a/documentation/docs/getting-started/verifiable_credentials/revoke.md +++ b/documentation/docs/getting-started/verifiable_credentials/revoke.md @@ -1,6 +1,13 @@ --- title: Verifiable Credential Revocation sidebar_label: Revocation +description: Explain how a VC is revoke. +image: /img/Identity_icon.png +keywords: +- verifiable +- credentials +- revoke +- Merkle Key Collections --- diff --git a/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md b/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md index 15fb88579b..3237f4fb21 100644 --- a/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md +++ b/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md @@ -1,6 +1,11 @@ --- title: verifiable Presentations sidebar_label: Verifiable Presentations +description: Explain how a VC is created and verified. +image: /img/Identity_icon.png +keywords: +- verifiable +- presentations --- TODO: Explain the need for and \ No newline at end of file diff --git a/documentation/docs/glossary.md b/documentation/docs/glossary.md index 939529a3e9..69da69bd55 100644 --- a/documentation/docs/glossary.md +++ b/documentation/docs/glossary.md @@ -1,3 +1,14 @@ +--- +description: Glossary for IOTA Identity, defines the terms used in this specification and throughout decentralized identifier infrastructure. +image: /img/Identity_icon.png +keywords: +- W3C +- terminology +- IOTA +- verification method +- verifiable data registry +--- + # Glossary The first part describes the terminology by the W3C. diff --git a/documentation/docs/introduction.md b/documentation/docs/introduction.md index b01d2aa043..12090fc1f6 100644 --- a/documentation/docs/introduction.md +++ b/documentation/docs/introduction.md @@ -1,54 +1,64 @@ +--- +keywords: +- Identity +- guide +- TOC +- overview +description: The most important concepts that developers will need to know to utilize IOTA Identity to its full potential +image: /img/Identity_icon.png +--- + # IOTA Identity Framework Guide ![IOTA Identity](https://github.com/iotaledger/identity.rs/raw/dev/.meta/identity_banner.png) The IOTA Identity framework implements the most common standards and patterns for Decentralized Identity in both a DLT agnostic and `iota` method specification manner. It is designed to work for Identity for People, Organizations, Things, and Objects acting as a unifying-layer of trust between everyone and everything. -In this guide, we will go through the most important concepts that developers will need to know to utilize IOTA Identity to its full potential. The guide is programming language agnostic, with langauge specific guides located in Chapter 4. +In this guide, we will go through the most important concepts that developers will need to know to utilize IOTA Identity to its full potential. The guide is programming language agnostic, with language specific guides located in Chapter 4. -### Overview +## Overview -**Chapter 2: Decentralized Identity** +### Chapter 2: Decentralized Identity Describes the concept of Decentralized or Self Sovereign Identities (SSI), how it applies to People, Organizations and Things, and why IOTA is used. -**Chapter 3.1: Decentralized Identifiers (DID)** +### Chapter 3.1: Decentralized Identifiers (DID) Explains the DID standard from W3C, how to manipulate DID Documents and Merkle Key Collections, the basis of our revocation mechanism. -**Chapter 3.2: Verifiable Credentials (VC)** +### Chapter 3.2: Verifiable Credentials (VC) Explains the VC standard from W3C, how to create and revoke VCs and how to use Verifiable Presentations. -**Chapter 3.3: DID Communications (DID Comm)** +### Chapter 3.3: DID Communications (DID Comm) -This chapter covers the DID Comm standard, which is being developed by the Decentralized Identity Foundation (DIF). It also describes the different messages agents may sent each other and what the expected responses may look like. +This chapter covers the DID Comm standard, which is being developed by the Decentralized Identity Foundation (DIF). It also describes the different messages agents may send each other and what the expected responses may look like. -**Chapter 3.4: Advanced Concepts** +### Chapter 3.4: Advanced Concepts -This chapter is ment for those that want to push the IOTA Identity framework to its limits, utilizing the more complex, yet more flexible lower level libraries, allowing developers to optimize their implementation, take control over storage/security, and add features to the framework. +This chapter is meant for those that want to push the IOTA Identity framework to its limits, utilizing the more complex, yet more flexible lower level libraries, allowing developers to optimize their implementation, take control over storage/security, and add features to the framework. -**Chapter 4: Programming Languages** +### Chapter 4: Programming Languages -While the framework itself is developed in the Rust programming language, we also provide bindings, or "Foreign Function Interfaces" (FFI), to other languages. These will have seperate getting started sections, making the rest of the guide language agnostic, focusing on the conceptual level. +While the framework itself is developed in the Rust programming language, we also provide bindings, or "Foreign Function Interfaces" (FFI), to other languages. These will have separate getting started sections, making the rest of the guide language agnostic, focusing on the conceptual level. -**Chapter 5: Specification** +### Chapter 5: Specification While IOTA Identity implements many existing standards, it also adds some additional features we would like to standardize ourselves. This chapter covers these features and how they work in great detail. These are not light reads and can be skipped. -**Chapter 6: Glossary** +### Chapter 6: Glossary A list of all terminology used in this guide, the framework and all materials surrounding it. -**Chapter 7: Contribute** +### Chapter 7: Contribute A simple guide on how to contribute to the framework. -**Chapter 8: Contact** +### Chapter 8: Contact How to contact the maintainers. -**Chapter 9: FAQ** +### Chapter 9: FAQ Overview of the most Frequently Asked Questions, and their answers. diff --git a/documentation/docs/libraries/README.md b/documentation/docs/libraries/README.md index dc95cf2f37..918d852832 100644 --- a/documentation/docs/libraries/README.md +++ b/documentation/docs/libraries/README.md @@ -2,5 +2,5 @@ We currently support the following libraries: -- [Rust](./rust/README) -- [WASM](./wasm/README) +- [Rust](rust/overview.md) +- [WASM](wasm/overview.md) diff --git a/documentation/docs/libraries/rust/api_reference.md b/documentation/docs/libraries/rust/api_reference.md index 66c0bb00ee..162e480c47 100644 --- a/documentation/docs/libraries/rust/api_reference.md +++ b/documentation/docs/libraries/rust/api_reference.md @@ -1,6 +1,11 @@ --- title: API Reference sidebar_label: API Reference +description: Rust API reference. Learn how generate docs for the whole crate. +image: /img/Identity_icon.png +keywords: +- Rust +- API Reference --- Link to hosted api documentation: diff --git a/documentation/docs/libraries/rust/examples.md b/documentation/docs/libraries/rust/examples.md index b6704b6f91..84c2f6d5a1 100644 --- a/documentation/docs/libraries/rust/examples.md +++ b/documentation/docs/libraries/rust/examples.md @@ -1,4 +1,9 @@ --- title: Examples sidebar_label: Rust Examples +description: Rust Examples. +image: /img/Identity_icon.png +keywords: +- Rust +- Examples --- diff --git a/documentation/docs/libraries/rust/getting_started.md b/documentation/docs/libraries/rust/getting_started.md index 0a8ec6eacc..23dc789aea 100644 --- a/documentation/docs/libraries/rust/getting_started.md +++ b/documentation/docs/libraries/rust/getting_started.md @@ -1,4 +1,9 @@ --- title: Getting Started with Rust sidebar_label: Getting Started +description: Getting started with the IOTA Identity Rust Library. +image: /img/Identity_icon.png +keywords: +- Rust +- Identity --- diff --git a/documentation/docs/libraries/rust/overview.md b/documentation/docs/libraries/rust/overview.md index df6d200710..b0d8d74c03 100644 --- a/documentation/docs/libraries/rust/overview.md +++ b/documentation/docs/libraries/rust/overview.md @@ -1,6 +1,13 @@ --- title: IOTA Identity Rust Library sidebar_label: Overview +description: Overview of the IOTA Identity Rust Library. +image: /img/Identity_icon.png +keywords: +- Rust +- API Reference +- Examples +- Troubleshooting --- # IOTA Identity Rust Library diff --git a/documentation/docs/libraries/rust/troubleshooting.md b/documentation/docs/libraries/rust/troubleshooting.md index 6086ebc483..fdea8c0650 100644 --- a/documentation/docs/libraries/rust/troubleshooting.md +++ b/documentation/docs/libraries/rust/troubleshooting.md @@ -1,4 +1,9 @@ --- title: Rust Troubleshooting sidebar_label: Troubleshooting +description: Troubleshooting the IOTA Identity Rust Library. +image: /img/Identity_icon.png +keywords: +- Rust +- Identity --- diff --git a/documentation/docs/libraries/wasm/api_reference.md b/documentation/docs/libraries/wasm/api_reference.md index d872729836..9f5ade7c83 100644 --- a/documentation/docs/libraries/wasm/api_reference.md +++ b/documentation/docs/libraries/wasm/api_reference.md @@ -1,6 +1,11 @@ --- title: WASM API Reference sidebar_label: API Reference +description: WASM API reference. +image: /img/Identity_icon.png +keywords: +- WASM +- API Reference --- {@import ../../../../bindings/wasm/docs/api-reference.md} \ No newline at end of file diff --git a/documentation/docs/libraries/wasm/examples.md b/documentation/docs/libraries/wasm/examples.md index 92c3de106d..69971f6793 100644 --- a/documentation/docs/libraries/wasm/examples.md +++ b/documentation/docs/libraries/wasm/examples.md @@ -1,4 +1,9 @@ --- title: WASM Examples sidebar_label: Examples +description: WASM Examples. +image: /img/Identity_icon.png +keywords: +- WASM +- Examples --- diff --git a/documentation/docs/libraries/wasm/getting_started.md b/documentation/docs/libraries/wasm/getting_started.md index 6950530801..94af633e4c 100644 --- a/documentation/docs/libraries/wasm/getting_started.md +++ b/documentation/docs/libraries/wasm/getting_started.md @@ -1,6 +1,16 @@ --- title: Getting Started with WASM sidebar_label: Getting Started +description: Getting started with the IOTA Identity WASM Library. +image: /img/Identity_icon.png +keywords: +- WASM +- install +- npm +- yarn +- build +- nodejs +- webpack --- {@import ../../../../bindings/wasm/README.md} \ No newline at end of file diff --git a/documentation/docs/libraries/wasm/overview.md b/documentation/docs/libraries/wasm/overview.md index f78b3ed6c6..3fa09f1b4a 100644 --- a/documentation/docs/libraries/wasm/overview.md +++ b/documentation/docs/libraries/wasm/overview.md @@ -1,6 +1,13 @@ --- title: IOTA Identity WASM Library sidebar_label: Overview +description: Overview of the IOTA Identity WASM Library. +image: /img/Identity_icon.png +keywords: +- WASM +- API Reference +- Examples +- Troubleshooting --- diff --git a/documentation/docs/libraries/wasm/troubleshooting.md b/documentation/docs/libraries/wasm/troubleshooting.md index 398b66435c..dc9ef61650 100644 --- a/documentation/docs/libraries/wasm/troubleshooting.md +++ b/documentation/docs/libraries/wasm/troubleshooting.md @@ -1,4 +1,11 @@ --- title: WASM Troubleshooting sidebar_label: Troubleshooting +description: Troubleshooting of the IOTA Identity Rust Library. +image: /img/Identity_icon.png +keywords: +- Rust +- API Reference +- Examples +- Troubleshooting --- \ No newline at end of file diff --git a/documentation/docs/specs/iota_did_method_spec.md b/documentation/docs/specs/iota_did_method_spec.md index 60beefe715..adc9039cc7 100644 --- a/documentation/docs/specs/iota_did_method_spec.md +++ b/documentation/docs/specs/iota_did_method_spec.md @@ -1,6 +1,15 @@ --- title: IOTA DID Method Specification sidebar_label: DID Method +description: How IOTA Identity implements the Decentralized Identifiers Standard on the IOTA Tangle. +image: /img/Identity_icon.png +keywords: +- DID +- specs +- specifications +- Decentralized Identifiers +- Tangle +- format --- # IOTA DID Method Specification @@ -19,7 +28,8 @@ This specification defines a method of implementing DID on top of the [IOTA Tang Blockchain | Tangle :---------:|:---------: -![](/img/blockchain-bottleneck.gif) | ![](/img/tangle-bottleneck.gif) + +![Blockchain bottleneck](/img/blockchain-bottleneck.gif) | ![Tangle Bottleneck](/img/tangle-bottleneck.gif) For this method, the most important features of IOTA are: diff --git a/documentation/docs/specs/merkle_key_collection.md b/documentation/docs/specs/merkle_key_collection.md index 4dbafb2e45..4e1997d6c5 100644 --- a/documentation/docs/specs/merkle_key_collection.md +++ b/documentation/docs/specs/merkle_key_collection.md @@ -1,6 +1,15 @@ --- title: Merkle Key Collection Specification sidebar_label: Merkle Key Collection +description: The Merkle Key Collection Specification provides authentication and integrity protection to DID Documents without a dependency on any particular Distributed Ledger Technology (DLT). +image: /img/Identity_icon.png +keywords: +- Merkle Key Collection +- Documents +- DID +- DLT +- Specifications +- Specs --- Version 0.1-draft by Devin Turner, IOTA Foundation diff --git a/documentation/docs/specs/overview.md b/documentation/docs/specs/overview.md index 7073b739e0..a38034631b 100644 --- a/documentation/docs/specs/overview.md +++ b/documentation/docs/specs/overview.md @@ -1,6 +1,11 @@ --- title: Overview sidebar_label: Overview +description: IOTA Identity specifications overview. +image: /img/Identity_icon.png +keywords: +- specs +- specifications --- TODO \ No newline at end of file diff --git a/documentation/docusaurus.config.js b/documentation/docusaurus.config.js index b2ab245e45..33ba1a6078 100644 --- a/documentation/docusaurus.config.js +++ b/documentation/docusaurus.config.js @@ -13,7 +13,7 @@ module.exports = { organizationName: 'iotaledger', // Usually your GitHub org/user name. projectName: 'identity.rs', // Usually your repo name. stylesheets: [ - // 'https://fonts.googleapis.com/css?family=Material+Icons', + 'https://fonts.googleapis.com/css?family=Material+Icons', ], themeConfig: { navbar: { @@ -50,15 +50,15 @@ module.exports = { }, { label: 'Rust', - to: '/docs/libraries/rust/README', + to: '/docs/libraries/rust/overview', }, { label: 'WASM', - to: '/docs/libraries/wasm/README', + to: '/docs/libraries/wasm/overview', }, { label: 'Specification', - to: '/docs/specs/README', + to: '/docs/specs/overview', }, ], }, diff --git a/documentation/package.json b/documentation/package.json index abae28fec2..621e912a3a 100644 --- a/documentation/package.json +++ b/documentation/package.json @@ -14,8 +14,8 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^2.0.0-beta.6f366f4b4", - "@docusaurus/preset-classic": "^2.0.0-beta.6f366f4b4", + "@docusaurus/core": "^2.0.0-beta.4", + "@docusaurus/preset-classic": "^2.0.0-beta.4", "@mdx-js/react": "^1.6.21", "@svgr/webpack": "^5.5.0", "clsx": "^1.1.1", diff --git a/documentation/src/components/HomepageFeatures.js b/documentation/src/components/HomepageFeatures.js deleted file mode 100644 index 931c445e56..0000000000 --- a/documentation/src/components/HomepageFeatures.js +++ /dev/null @@ -1,62 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import styles from './HomepageFeatures.module.css'; -import LandingpageHeader from './LandingpageHeader'; - -const FeatureList = [ - { - title: 'Identity Of Things', - Svg: require('../../static/img/undraw_docusaurus_mountain.svg').default, - description: ( - <> - Devices have an identity that proves their capabilities, specifications, and authenticity to allow others to feel confident in transacting with them. - - ), - }, - { - title: 'Self Sovereign Identity', - Svg: require('../../static/img/undraw_docusaurus_tree.svg').default, - description: ( - <> - Individuals have a borderless digital identity that can be verified by anyone or anything in the world. - - ), - }, - { - title: 'Regulatory Compliance', - Svg: require('../../static/img/undraw_docusaurus_react.svg').default, - description: ( - <> - Organizations can use digital identities to follow regulations such as GDPR in a more cost-efficient way. - - ), - }, -]; - -function Feature({Svg, title, description}) { - return ( -
-
- -
-
-

{title}

-

{description}

-
-
- ); -} - -export default function HomepageFeatures() { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); -} diff --git a/documentation/src/components/HomepageFeatures.module.css b/documentation/src/components/HomepageFeatures.module.css deleted file mode 100644 index 9dcb82c354..0000000000 --- a/documentation/src/components/HomepageFeatures.module.css +++ /dev/null @@ -1,13 +0,0 @@ -/* stylelint-disable docusaurus/copyright-header */ - -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} diff --git a/documentation/src/components/LandingpageActions/index.js b/documentation/src/components/LandingpageActions/index.js index cd2bc523f6..f0f3ebd494 100644 --- a/documentation/src/components/LandingpageActions/index.js +++ b/documentation/src/components/LandingpageActions/index.js @@ -6,7 +6,7 @@ import styles from './styles.module.css'; const ActionList = [ { title: 'Documentation', - link: 'docs/intro', + link: 'docs/introduction', description: ( <> Learn the Basics about the IOTA Identity Framework and the concepts behind the Digital Identifier W3C standard. diff --git a/documentation/static/img/Identity_icon.png b/documentation/static/img/Identity_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9a70850c67d7252c22c97f771e6cbb68584c39 GIT binary patch literal 5040 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 F{0H{b<4^zq diff --git a/documentation/static/img/tutorial/docsVersionDropdown.png b/documentation/static/img/tutorial/docsVersionDropdown.png deleted file mode 100644 index ff1cbe68893d205dc0a6821bfa74d8e7d25c09cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25102 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 Js!v|N^*`%a2QvTw diff --git a/documentation/static/img/tutorial/localeDropdown.png b/documentation/static/img/tutorial/localeDropdown.png deleted file mode 100644 index d7163f96752499e2e39e771d4d5e9e42c68677aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30020 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 diff --git a/documentation/static/img/undraw_docusaurus_mountain.svg b/documentation/static/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index 431cef2f7f..0000000000 --- a/documentation/static/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/documentation/static/img/undraw_docusaurus_react.svg b/documentation/static/img/undraw_docusaurus_react.svg deleted file mode 100644 index e417050433..0000000000 --- a/documentation/static/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/documentation/static/img/undraw_docusaurus_tree.svg b/documentation/static/img/undraw_docusaurus_tree.svg deleted file mode 100644 index a05cc03dda..0000000000 --- a/documentation/static/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1 +0,0 @@ -docu_tree \ No newline at end of file diff --git a/documentation/yarn.lock b/documentation/yarn.lock index 70c9659030..3433032776 100644 --- a/documentation/yarn.lock +++ b/documentation/yarn.lock @@ -1160,10 +1160,10 @@ "@docsearch/css" "3.0.0-alpha.39" algoliasearch "^4.0.0" -"@docusaurus/core@2.0.0-beta.6f366f4b4", "@docusaurus/core@^2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.6f366f4b4.tgz#e278f26ead2a1f3e74b5de8af29705b42e3ce6ea" - integrity sha512-IDOP0uisodRByiY/wrW7sy/KT7szWGdQZpfQ2WKuomOYseKL5/Ui8a/6BEdTQaNTFt2MTS4A+DzXBixuvnOpLg== +"@docusaurus/core@2.0.0-beta.5", "@docusaurus/core@^2.0.0-beta.4": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.5.tgz#a8ccb489d75f777de59fdb698f93de9263928594" + integrity sha512-LERPgERVmui0Fb/aIEsd0/1O8VMWW2+vokoPJFHsCswNkk+63C+Ko6luu2z1QoXhbUGAVEJKTb4Z2NAZ5eSF5Q== dependencies: "@babel/core" "^7.12.16" "@babel/generator" "^7.12.15" @@ -1175,12 +1175,12 @@ "@babel/runtime" "^7.12.5" "@babel/runtime-corejs3" "^7.12.13" "@babel/traverse" "^7.12.13" - "@docusaurus/cssnano-preset" "2.0.0-beta.6f366f4b4" + "@docusaurus/cssnano-preset" "2.0.0-beta.5" "@docusaurus/react-loadable" "5.5.0" - "@docusaurus/types" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-common" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-validation" "2.0.0-beta.6f366f4b4" + "@docusaurus/types" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" + "@docusaurus/utils-common" "2.0.0-beta.5" + "@docusaurus/utils-validation" "2.0.0-beta.5" "@slorber/static-site-generator-webpack-plugin" "^4.0.0" "@svgr/webpack" "^5.5.0" autoprefixer "^10.2.5" @@ -1189,7 +1189,7 @@ boxen "^5.0.1" chalk "^4.1.1" chokidar "^3.5.1" - clean-css "^5.1.2" + clean-css "^5.1.5" commander "^5.1.0" copy-webpack-plugin "^9.0.0" core-js "^3.9.1" @@ -1226,6 +1226,7 @@ react-router "^5.2.0" react-router-config "^5.1.1" react-router-dom "^5.2.0" + remark-admonitions "^1.2.1" resolve-pathname "^3.0.0" rtl-detect "^1.0.3" semver "^7.3.4" @@ -1244,24 +1245,24 @@ webpack-merge "^5.8.0" webpackbar "^5.0.0-3" -"@docusaurus/cssnano-preset@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.6f366f4b4.tgz#a6c9dfb6cd7de814dcc661822413eac9fd4d17b7" - integrity sha512-g6D9mIRPUqHokVri1vdPyaUvaKXh9vN3a5YtVVGlglBfbkqQEJIVVlCTCppmtTt6e5Xfe0VUmfCgKU9Ru3J7Pg== +"@docusaurus/cssnano-preset@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.5.tgz#9f0e89662ac470cadf78bb1c90ad746ad5f6d5b3" + integrity sha512-qbGj3X5jcAuA/Nr6EKGRFUGYnMXAuuBg0PyJpKGXLi9/wuIGGuuO/FED2L3f9AONWXZmZuwtKQGXeGtVN8sKEg== dependencies: cssnano-preset-advanced "^5.1.1" postcss "^8.2.15" postcss-sort-media-queries "^3.10.11" -"@docusaurus/mdx-loader@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.6f366f4b4.tgz#e2cf19782fc9e573ad3d0f8db20f3c787934537d" - integrity sha512-6hxruPQu07ly1DBzuKIteyZthK55nOBZ3h6oYQSSF/SEqQ8nWfDZ7DgVZ8ul+7T0/pPT7SlCp7dboS0nZE3jrQ== +"@docusaurus/mdx-loader@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.5.tgz#e2b0678d52878dcbc0227489526996f67000358a" + integrity sha512-6e1SPIIEuXomdpYnP3dkAu/6Y6aInu5vRBBc1GjLvy1RzrX1NTLdQtNdjjaEctP0eyddkyc9tkQwH0p2Wav8Zw== dependencies: "@babel/parser" "^7.12.16" "@babel/traverse" "^7.12.13" - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" "@mdx-js/mdx" "^1.6.21" "@mdx-js/react" "^1.6.21" chalk "^4.1.1" @@ -1277,21 +1278,22 @@ url-loader "^4.1.1" webpack "^5.40.0" -"@docusaurus/plugin-content-blog@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.6f366f4b4.tgz#4148e959bf7e9615397726e0933651a163c65b63" - integrity sha512-6mKvMCyZIfX68wfIPr/cAVBNS7KX0lEXi+OA+mwoH/hlQP5VESzysPVltCJjk4W8hrp0SWDJok53OFP4pmMpeQ== +"@docusaurus/plugin-content-blog@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.5.tgz#6f9e47eb72d4169ff36a8d0f26348caf18fa48dc" + integrity sha512-gZmsBKibSE6/0LeGtpPtcRCvbl8XnRwsWhDGVf13CswnKSwmyE7FWq1ymAzgA4xJx//UamaRzZB9449+l2HVCg== dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/mdx-loader" "2.0.0-beta.6f366f4b4" - "@docusaurus/types" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-validation" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/mdx-loader" "2.0.0-beta.5" + "@docusaurus/types" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" + "@docusaurus/utils-validation" "2.0.0-beta.5" chalk "^4.1.1" escape-string-regexp "^4.0.0" feed "^4.2.2" fs-extra "^10.0.0" globby "^11.0.2" + js-yaml "^4.0.0" loader-utils "^2.0.0" lodash "^4.17.20" reading-time "^1.3.0" @@ -1299,16 +1301,16 @@ tslib "^2.2.0" webpack "^5.40.0" -"@docusaurus/plugin-content-docs@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.6f366f4b4.tgz#874f866a46dc3435a4a3d2d80398069a6ebd57e8" - integrity sha512-p+Fx6X/25AKoB9pNRF4Qo2gEEx0t+z+YbCnWaTViOuN/BNK+UrAeF2uX72PGeAJSOVjO41gmKLofHp71/etkYA== +"@docusaurus/plugin-content-docs@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.5.tgz#22bf5fc4b6dc91019a9393008b3272c763cf9216" + integrity sha512-9WXa+UK4/oOnGdk2aWLfE/151v6tf4jgxgRSM+V9jH9FQiluG5APDz0lH62wSTZbl8PjflK5BBhl17tCjGvvgQ== dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/mdx-loader" "2.0.0-beta.6f366f4b4" - "@docusaurus/types" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-validation" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/mdx-loader" "2.0.0-beta.5" + "@docusaurus/types" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" + "@docusaurus/utils-validation" "2.0.0-beta.5" chalk "^4.1.1" combine-promises "^1.1.0" escape-string-regexp "^4.0.0" @@ -1325,76 +1327,76 @@ utility-types "^3.10.0" webpack "^5.40.0" -"@docusaurus/plugin-content-pages@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.6f366f4b4.tgz#92493fa2d83ee316c8d174541ba32947f09b33d2" - integrity sha512-aphnJJjg++kbW4CzFgbph4KA9FNnLkQB5qRRv+wUcBXbKmr03KieY1zq5W5OOe+1nI0cCCbx327e6llSYilhRg== +"@docusaurus/plugin-content-pages@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.5.tgz#3aa5e752699fcafe9b59b27fe011b7f86453e2af" + integrity sha512-1amYXgCc+ZqU8KScwG5zXWIGcy9OdrmmhB6LUuE+vfn+jVOdn8oVTkR8JTVMqmvLhyxmL30ixO06UsstQvKAJQ== dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/mdx-loader" "2.0.0-beta.6f366f4b4" - "@docusaurus/types" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-validation" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/mdx-loader" "2.0.0-beta.5" + "@docusaurus/types" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" + "@docusaurus/utils-validation" "2.0.0-beta.5" globby "^11.0.2" lodash "^4.17.20" remark-admonitions "^1.2.1" tslib "^2.1.0" webpack "^5.40.0" -"@docusaurus/plugin-debug@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.6f366f4b4.tgz#fb0b04dc7d9817edc15d79c4cee9dcb7d2671793" - integrity sha512-32f0mGonK+5qz6yGoPcJPYKSYu3nHeE//wLjDNMNs3YJwsAxwYdmrVOVIgTpIEVgeY9hoH8XeOn1QAHCRfqCLA== +"@docusaurus/plugin-debug@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.5.tgz#649449ccf33209ba0b723361d86459b45e4f760f" + integrity sha512-ITrgRNic+NY9HMzUKzYhh6Mz/tgKQjdJYVizA/kbP5pkjB8FunE+0B12km9UNBzuT4ETGdNKgQGAqzrcrjpnag== dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/types" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/types" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" react-json-view "^1.21.3" tslib "^2.1.0" -"@docusaurus/plugin-google-analytics@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.6f366f4b4.tgz#ac31183189b948163c8218befb294133162ab2f2" - integrity sha512-v0DQ4dk8nwp3vbQ9EL7qkM1c3MMaTjITyeuytc698Lix72mdIXlOaGAXPvuyy+I+vzwrW5+IIk8mzTi8xvqYvg== +"@docusaurus/plugin-google-analytics@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.5.tgz#a54197e7e60ab785dd14fb4e1a02887fc162d9c1" + integrity sha512-ncG+SCafoqFhtOMJwk9IZbzZCdy1bgmOjNCSfF6mmDp9laYYJBplBtqItIBQTuycIyKCxznKzi2q8l9989uMrA== dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" -"@docusaurus/plugin-google-gtag@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.6f366f4b4.tgz#8ab12d6b19f786e9305873136662d6e0e2bdcb23" - integrity sha512-BgP/hJy6JB8ZY9q7pp3G+u9uWXu2rpwAP6d5MutW+7iLgJMt2W3NOHUvSol5nodjfRHH3gByyZcKU6bBB+50LA== +"@docusaurus/plugin-google-gtag@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.5.tgz#415a4f98776e0ece17e96ca7e823022b5bf98316" + integrity sha512-FMWAXCLCUwEk7wykOAcM6vs3tHWVIU/T1PElqcoD7fh9521ocZ/5L8yyWWfJ+nX/90TVs+7nOFY0vNl2I2MYZg== dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" -"@docusaurus/plugin-sitemap@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.6f366f4b4.tgz#b019314edbfa071a607755e4bd6d05f2c5d0a565" - integrity sha512-ykIokaV8C44Bb9Ne1Ve2ncaRDm8zvnXBfxE1zCKGp+4OLPq9CJIui3MGnHkVUlgimxcbrJVN6qqnY91fOovn5A== +"@docusaurus/plugin-sitemap@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.5.tgz#2ab02a85e66e8b5dd8ce5f19023c005be2ec073b" + integrity sha512-QcIIMNmyMnOm5q/zyzidixNIB+yE7/ouUi/62wr5+ZkO/rvvObVe+r9Tdl90SmvsJH17y290EWEy9kunoRyG0w== dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/types" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-common" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-validation" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/types" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" + "@docusaurus/utils-common" "2.0.0-beta.5" + "@docusaurus/utils-validation" "2.0.0-beta.5" fs-extra "^10.0.0" sitemap "^7.0.0" tslib "^2.2.0" -"@docusaurus/preset-classic@^2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.6f366f4b4.tgz#96aa8b65eca4f7686c30cae467265b6c0cab2a3d" - integrity sha512-3k7YMIvfDAKw3V8rD+2IFvtVJe9C0BaH6zEUn2eIFBOLLa7q5ITkHAWE9G+X4qT+GFXMJnTg2KAxcUxlfxBvfQ== - dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-blog" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-docs" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-pages" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-debug" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-google-analytics" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-google-gtag" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-sitemap" "2.0.0-beta.6f366f4b4" - "@docusaurus/theme-classic" "2.0.0-beta.6f366f4b4" - "@docusaurus/theme-search-algolia" "2.0.0-beta.6f366f4b4" +"@docusaurus/preset-classic@^2.0.0-beta.4": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.5.tgz#7594167507ee7ff7aa78c3188bab4dfba6e8b551" + integrity sha512-hcPLYwMEMDuc/lNloDRh3SKpZneQLaz0Zj8CI7jsislp4iBz9QtbWZzruoXsJe7noSfqsBcTJqRlNw7/UwEyTA== + dependencies: + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/plugin-content-blog" "2.0.0-beta.5" + "@docusaurus/plugin-content-docs" "2.0.0-beta.5" + "@docusaurus/plugin-content-pages" "2.0.0-beta.5" + "@docusaurus/plugin-debug" "2.0.0-beta.5" + "@docusaurus/plugin-google-analytics" "2.0.0-beta.5" + "@docusaurus/plugin-google-gtag" "2.0.0-beta.5" + "@docusaurus/plugin-sitemap" "2.0.0-beta.5" + "@docusaurus/theme-classic" "2.0.0-beta.5" + "@docusaurus/theme-search-algolia" "2.0.0-beta.5" "@docusaurus/react-loadable@5.5.0": version "5.5.0" @@ -1403,20 +1405,20 @@ dependencies: prop-types "^15.6.2" -"@docusaurus/theme-classic@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.6f366f4b4.tgz#b3ce3d722e6cfa22bc77ac77bcbbb00444b8d901" - integrity sha512-j8M2ge/k19eVZ1/WM3n0cyzlUDQZN2EQRS9OwDw04r3CIprBWWuaLBGqCPjkCuRG3O2FRculA3TqfYOURL3/0A== - dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-blog" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-docs" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-pages" "2.0.0-beta.6f366f4b4" - "@docusaurus/theme-common" "2.0.0-beta.6f366f4b4" - "@docusaurus/types" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-common" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-validation" "2.0.0-beta.6f366f4b4" +"@docusaurus/theme-classic@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.5.tgz#1c51cfc953eb7e3e7da8886ab62f99cd2a8cede0" + integrity sha512-AtBifB1mRMI5W0ORlY5M/QEnHUB/wvGLRkLegBbgBAiTy2IGr99GUXRRminQI2AQuFTwYAMLQoSVSeJ0w1q49g== + dependencies: + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/plugin-content-blog" "2.0.0-beta.5" + "@docusaurus/plugin-content-docs" "2.0.0-beta.5" + "@docusaurus/plugin-content-pages" "2.0.0-beta.5" + "@docusaurus/theme-common" "2.0.0-beta.5" + "@docusaurus/types" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" + "@docusaurus/utils-common" "2.0.0-beta.5" + "@docusaurus/utils-validation" "2.0.0-beta.5" "@mdx-js/mdx" "^1.6.21" "@mdx-js/react" "^1.6.21" chalk "^4.1.1" @@ -1424,7 +1426,7 @@ copy-text-to-clipboard "^3.0.1" fs-extra "^10.0.0" globby "^11.0.2" - infima "0.2.0-alpha.27" + infima "0.2.0-alpha.31" lodash "^4.17.20" parse-numeric-range "^1.2.0" postcss "^8.2.15" @@ -1434,38 +1436,40 @@ react-router-dom "^5.2.0" rtlcss "^3.1.2" -"@docusaurus/theme-common@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.6f366f4b4.tgz#eabb205409dc3df8e0410758bc520c75687a1894" - integrity sha512-9lrNywVBeu112L8tEBd/s8V2mEWYXlH+7rN8BFVdr8SNty7zqUJ7v6ddnK0Jz+/7X0RL0I+sMNy/5hOVEj1LwQ== +"@docusaurus/theme-common@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.5.tgz#c6376de88bd0ac6f9803da25ab6212d4b5fc3afb" + integrity sha512-6XEM8NzpR2Q42qkhPdI46M/7lLcZcOCgqmQfmj319sGmKkfhPuYPuIUvNqorxldZqLYuV8/9q7WAPjAgj+wawA== dependencies: - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-blog" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-docs" "2.0.0-beta.6f366f4b4" - "@docusaurus/plugin-content-pages" "2.0.0-beta.6f366f4b4" - "@docusaurus/types" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/plugin-content-blog" "2.0.0-beta.5" + "@docusaurus/plugin-content-docs" "2.0.0-beta.5" + "@docusaurus/plugin-content-pages" "2.0.0-beta.5" + "@docusaurus/types" "2.0.0-beta.5" + clsx "^1.1.1" + fs-extra "^10.0.0" tslib "^2.1.0" -"@docusaurus/theme-search-algolia@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.6f366f4b4.tgz#d82c74f898319f9c57a42e836b7ae3c8555755ee" - integrity sha512-CNSfPfR1MgrNTRkZ2zHa+ZOtPL8J3zW5nwYpf7o68jdgOuM6CLJCFnej8M+ePEk0m3vxdqDGXA21OUsQBre2ow== +"@docusaurus/theme-search-algolia@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.5.tgz#889a10e3b849cf3d5a17b3cf735ccdc454a71af6" + integrity sha512-+3XG4SHJ4xukvv/WDKRejf3qSTVa3ufOv6hlZ32H8RAmfJmI/Rmsm/oueB86xBw/OkznIXx6M8HzchfYCHWxSA== dependencies: "@docsearch/react" "^3.0.0-alpha.39" - "@docusaurus/core" "2.0.0-beta.6f366f4b4" - "@docusaurus/theme-common" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" - "@docusaurus/utils-validation" "2.0.0-beta.6f366f4b4" + "@docusaurus/core" "2.0.0-beta.5" + "@docusaurus/theme-common" "2.0.0-beta.5" + "@docusaurus/utils" "2.0.0-beta.5" + "@docusaurus/utils-validation" "2.0.0-beta.5" algoliasearch "^4.8.4" algoliasearch-helper "^3.3.4" clsx "^1.1.1" eta "^1.12.1" lodash "^4.17.20" -"@docusaurus/types@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.6f366f4b4.tgz#3b12f183999960eb2d4247fb36f8c20f07cb9701" - integrity sha512-WVHDRfge4YCaPqisseCIUxndXLD0Gh9RYR2vBBEkIM/IzqD/V5o2TlL/XOkpceOstBJ5CTp0sJYaZN8xrKHRRA== +"@docusaurus/types@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.5.tgz#668ddfaa7f23d74522a58aac99d62436b555fbc6" + integrity sha512-WtwR5O67cTK6wo9KnSxqBpgC26M6Z90PgX5Gun/Re8Ix+GVEqIzzev9C/2P2Da2TW0sgSkjWNr1tHaNxNMPLkQ== dependencies: commander "^5.1.0" joi "^17.4.0" @@ -1473,30 +1477,30 @@ webpack "^5.40.0" webpack-merge "^5.8.0" -"@docusaurus/utils-common@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.6f366f4b4.tgz#6e01c34ebf72b6bf064c62c3e546ff8c057bfd93" - integrity sha512-d2enfgSpmpbTwoLjZb5TCLJnyQh9jg5QMVikf3Tnhj6elyGY7pYxDYtjc0BJ25CZNPV/6NTRmCrOXNmW1jBX/Q== +"@docusaurus/utils-common@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.5.tgz#afadd9426372292e0b6d28778613410e3fd58aa4" + integrity sha512-LUHEfZ9QGwBCpmGfLiPz5ENipxicsBlzIu+jUuB6I+ljX4Cd2OFkjDVmL0kjHR80sh0KJzNizpjsVj3l3jN9RA== dependencies: - "@docusaurus/types" "2.0.0-beta.6f366f4b4" + "@docusaurus/types" "2.0.0-beta.5" tslib "^2.2.0" -"@docusaurus/utils-validation@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.6f366f4b4.tgz#34a40a275ff2a4551e10216ebe31b28a5b39503e" - integrity sha512-ryRFs3oGJSIgD0bqllnjO7Q4mogxsgsYBIxx97mqwFTAlszxdwoXqG5Cc7VvEiVMnjN01NIniZtrDlled6VRjw== +"@docusaurus/utils-validation@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.5.tgz#fe7efefdb518bc19fb6cb9c79492bd84cfc4a59a" + integrity sha512-VWj1BRYejcGewWP3BKSm3a5dVzQWA9w9MDQUCylR2NxywOxonoUPo9nz5g9bN+C3rwuelfA5u3MORu2q2+rbLw== dependencies: - "@docusaurus/utils" "2.0.0-beta.6f366f4b4" + "@docusaurus/utils" "2.0.0-beta.5" chalk "^4.1.1" joi "^17.4.0" tslib "^2.1.0" -"@docusaurus/utils@2.0.0-beta.6f366f4b4": - version "2.0.0-beta.6f366f4b4" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.6f366f4b4.tgz#922322359154c96b09a4b4fcfd336034598a77a3" - integrity sha512-SaITJ9iSUM/CeuWqEJ0rZ945rr4N9yFPoxE5UxcgBVG/8ZjkQh9N8UoyHB4IW54FNL7hTPlxQAV/+TmqM7w2IA== +"@docusaurus/utils@2.0.0-beta.5": + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.5.tgz#68859f070ca6bf7875f4a4121e314269211a876b" + integrity sha512-hIzuARFMqXqljTdbF19bYRw+fqqK2gHlzepeC9uJfLLaGmirPFDPjr+BN9oiajBhNx2CgvJVl/66lEx4hrd7uQ== dependencies: - "@docusaurus/types" "2.0.0-beta.6f366f4b4" + "@docusaurus/types" "2.0.0-beta.5" "@types/github-slugger" "^1.3.0" chalk "^4.1.1" escape-string-regexp "^4.0.0" @@ -2683,10 +2687,10 @@ clean-css@^4.2.3: dependencies: source-map "~0.6.0" -clean-css@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.1.2.tgz#6ea0da7286b4ddc2469a1b776e2461a5007eed54" - integrity sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw== +clean-css@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.1.5.tgz#3b0af240dcfc9a3779a08c2332df3ebd4474f232" + integrity sha512-9dr/cU/LjMpU57PXlSvDkVRh0rPxJBXiBtD0+SgYt8ahTCsXtfKjCkNYgIoTC6mBg8CFr5EKhW3DKCaGMUbUfQ== dependencies: source-map "~0.6.0" @@ -4690,10 +4694,10 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infima@0.2.0-alpha.27: - version "0.2.0-alpha.27" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.27.tgz#f61bfee412640cebb4c867e11d2e53af4f36f9d5" - integrity sha512-3wzGnP8glFhxCSK0xLMtOoT0M/8fQGScu7yPmgGEMjTdw392GzEwaZW5FOH13z1qC1N57NBia+CVnKKw86kSMg== +infima@0.2.0-alpha.31: + version "0.2.0-alpha.31" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.31.tgz#c5b66ef1797551471c49b636d6ed270f981d276e" + integrity sha512-ggOAeyiQIFKZeYnH9lbhDBHFZhcYOa0LFKSMLgot33X21aJRu7ruwVUVwYg4kJnZRLGLeAjC5BVgLxKoLixuNQ== inflight@^1.0.4: version "1.0.6" From 257989d0564bf48cde22128baa056621f9cc17b8 Mon Sep 17 00:00:00 2001 From: lucas-tortora <85233773+lucas-tortora@users.noreply.github.com> Date: Thu, 2 Sep 2021 14:07:20 +0200 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: charlesthompson3 <74603461+charlesthompson3@users.noreply.github.com> --- documentation/docs/contribute.md | 2 +- documentation/docs/decentralized_identity.md | 9 ++++----- .../docs/getting-started/advanced/did_messages.md | 2 +- .../decentralized_identifiers/overview.md | 10 +++++----- .../getting-started/verifiable_credentials/revoke.md | 2 +- .../verifiable_credentials/verifiable_presentations.md | 2 +- documentation/docs/introduction.md | 4 ++-- 7 files changed, 15 insertions(+), 16 deletions(-) diff --git a/documentation/docs/contribute.md b/documentation/docs/contribute.md index 15e4f81ab2..710fc478b6 100644 --- a/documentation/docs/contribute.md +++ b/documentation/docs/contribute.md @@ -1,7 +1,7 @@ --- title: Contribute to the project sidebar_label: Contribute -description: Contribute to IOTA Identity joining the Identity initiative, via the projects GitHub repository, documentation or sharing your knowledge. +description: Contribute to IOTA Identity by joining the Identity initiative, via the projects GitHub repository, documentation, or sharing your knowledge. image: /img/Identity_icon.png keywords: - Contribute diff --git a/documentation/docs/decentralized_identity.md b/documentation/docs/decentralized_identity.md index 6b3e3c520d..8bac03bd3b 100644 --- a/documentation/docs/decentralized_identity.md +++ b/documentation/docs/decentralized_identity.md @@ -9,7 +9,7 @@ keywords: --- # Introduction to Decentralized Identity -Decentralized Identity or Self Sovereign Identity (SSI) defines a new method for identity management and authentication. It removes the centralized aspects and puts the Identity subject in full control over its own identity. Decentralized identity provides a solution for the increasing amount of database breaches, the lack of trust in any digital setting and the increasingly difficult to comply to privacy legislation, such as GDPR. +Decentralized Identity or Self Sovereign Identity (SSI) defines a new method for identity management and authentication. It removes the centralized aspects and puts the Identity subject in full control over its own identity. Decentralized identity provides a solution for the increasing amount of database breaches, the lack of trust in any digital setting, and the increasingly difficult to comply to privacy legislation, such as GDPR. There are three levels of privacy when interacting on the internet: full privacy, verifiable identities and pseudonymity. With full privacy, neither parties, nor observers, can identify the interacting parties. With verifiable identities, parties can trust each other, because they can both provide proof about their identities. With pseudonymity, both parties recognize each other through a pseudonymous identifier. Pseudonymity is the default setting of the internet. However, data harvesting platforms, like Google and Facebook, can now link these “random” identifiers, though imprecisely, to identities in the real-world. The associated data and insights have become extremely valuable to advertising agencies, product developers, and numerous local and global businesses. @@ -41,8 +41,7 @@ Governmental mechanisms for building digital identities are currently being esta :::info GDPR IOTA Identity allows organizations to comply with GDPR in a cost efficient and privacy-enabling manner ::: -Many corporations are associated with greed and abuse of power. This reputation stems from the role some have chosen to take within society. Corporations are trusted with our data, but often do not act responsibly. Vulnerability, fix, patch, repeat. In software and systems we have seen this -cycle repeat. Headlines on data leaks are now an ever-present feature in the news. +Many corporations are associated with greed and abuse of power. This reputation stems from the role some have chosen to take within society. Corporations are trusted with our data, but often do not act responsibly. Vulnerability, fix, patch, repeat. In software and systems we have seen this cycle repeat. Headlines on data leaks are now an ever-present feature in the news. IOTA Identity presents an opportunity for companies to embrace a new role in the ecosystem. Traditional approaches do not provide cost efficient solutions to new legislation like GDPR. IOTA Identity enables organizations to change their processes to comply with the new regulations in a cost efficient and privacy-enabling manner. Features of “Data Protection and Privacy by Design” shift responsibility over Personal Identifiable Information (PII) from organization to customer, and organizations no longer need to store that data. The relationship between customer and organization is also tightened as communication via a third party Identity provider like Google or Facebook is no longer needed. @@ -58,7 +57,7 @@ IOTA Identity adds the missing key ingredient for the "Economy of Things": Trust ::: -With Identity of Things (IDoT) devices are provided with a unique global identity, able to prove many attributes including their capabilities, specifications and authenticity. People, organizations and other devices will only pay devices that can prove their ability to fulfill the required task. This basis of trust prevents fraudulent activity. In addition, by using the IOTA ledger, the progress of the task can be immutably logged. With the combination of the IOTA protocol and the IOTA Identity framework, we can automate the entire interaction between all parties, without requiring predefined trust. The [Industry Marketplace](https://industry.iota.org/) provides a perfect example of how this framework and level of autonomy work. +With Identity of Things (IDoT) devices are provided with a unique global identity, able to prove many attributes including their capabilities, specifications, and authenticity. People, organizations, and other devices will only pay devices that can prove their ability to fulfill the required task. This basis of trust prevents fraudulent activity. In addition, by using the IOTA ledger, the progress of the task can be immutably logged. With the combination of the IOTA protocol and the IOTA Identity framework, we can automate the entire interaction between all parties, without requiring predefined trust. The [Industry Marketplace](https://industry.iota.org/) provides a perfect example of how this framework and level of autonomy work. There is a growth in applications that generate Digital Twins for physical devices or objects, such as the Asset Administration Shell (AAS) developed for our Industry Marketplace. Digital twins are online profiles representing a device or object. They provide a virtual state that mirrors reality by emulating the device or object’s physical state through data input sources like sensors. A digital twin is often used to monitor state and execute actions based on the information. Digital twins are only rarely shared outside the associated application and organization due to complexity in sharing and matching profiles. However, empowered with a digital identity, digital twin sharing would become possible. Once data is verifiable and trusted, digital twins can form the basis for the digital representation of physical devices and objects. This allows other identities to interact with them automatically, and provide services such as predictive maintenance. @@ -73,7 +72,7 @@ Security is a major barrier in advancing technologies that use IoT. Whether it i ::: -With multiple different types of actor requiring an identity protocol, it is a strong proposition to use the same underlying protocol for all of them. This IOTA Identity framework enables anyone or anything to create a digital identity, build an online profile of trust by collecting verifiable credentials, and share them with other actors they interact with. Interaction between people, companies, things and objects becomes seamless. And just as we can trust a person we will also be able to trust a car, or even a luxury coat. Different identities can also be linked together, creating trustworthy relationships, such as ownership of an object. IOTA already provides a protocol that enables these actors to transact value or data with one another. IOTA will now combine identity features into a single platform, creating the base protocol for the next generation of smart applications. +With multiple different types of actors requiring an identity protocol, it is a strong proposition to use the same underlying protocol for all of them. This IOTA Identity framework enables anyone or anything to create a digital identity, build an online profile of trust by collecting verifiable credentials, and share them with other actors they interact with. Interaction between people, companies, things and objects becomes seamless. And just as we can trust a person we will also be able to trust a car, or even a luxury coat. Different identities can also be linked together, creating trustworthy relationships, such as ownership of an object. IOTA already provides a protocol that enables these actors to transact value or data with one another. IOTA will now combine identity features into a single platform, creating the base protocol for the next generation of smart applications. ## Why IOTA? diff --git a/documentation/docs/getting-started/advanced/did_messages.md b/documentation/docs/getting-started/advanced/did_messages.md index ee85f02287..c9a2cacc5e 100644 --- a/documentation/docs/getting-started/advanced/did_messages.md +++ b/documentation/docs/getting-started/advanced/did_messages.md @@ -19,7 +19,7 @@ TODO: Explain the concept of DID Messages and how they can be used to optimize D Most DID methods are implemented on a Distributed Ledger Technology (DLT), such as Bitcoin, Ethereum or IOTA. Most common DID implementation on DLTs are based on fit-for-purpose Blockchains that store the state of a DID Document in the ledger, or a general purpose Blockchain that utilize smart contracts to store the state. Updating a DID Document where the state is understood by the network is straightforward. The network can determine if an action is legal and if a cryptographic signature is provided correctly, as it understands the underlying data structure, and can update the state accordingly. The individual state updates, or transactions, can be forgotten. -The IOTA Tangle is unable to track state or understand the data structure. Storing the state is neither possible in the ledger, nor via a Smart contract (yet). Therefore, IOTA Identity has to recreate and validate the state from the origin of the Identity to the current version. The process involves querying all the relevant transactions from the Tangle, ordering them, filtering out the transactions that perform illegal actions or have an incorrect signature and then recreate state. As this requires the full history of the Identity, we recommend utilizing [Chronicle](https://github.com/iotaledger/chronicle.rs), an IOTA permanode, which stores the entire history of the Tangle. Further research will be performed to reduce storage requirements for IOTA Identity based applications. +The IOTA Tangle is unable to track, state, or understand the data structure. Storing the state is neither possible in the ledger, nor via a Smart contract (yet). Therefore, IOTA Identity has to recreate and validate the state from the origin of the Identity to the current version. The process involves querying all the relevant transactions from the Tangle, ordering them, filtering out the transactions that perform illegal actions or have an incorrect signature and then recreate state. As this requires the full history of the Identity, we recommend utilizing [Chronicle](https://github.com/iotaledger/chronicle.rs), an IOTA permanode, which stores the entire history of the Tangle. Further research will be performed to reduce storage requirements for IOTA Identity based applications. ### DID Messages diff --git a/documentation/docs/getting-started/decentralized_identifiers/overview.md b/documentation/docs/getting-started/decentralized_identifiers/overview.md index 46928cf430..1e010b4682 100644 --- a/documentation/docs/getting-started/decentralized_identifiers/overview.md +++ b/documentation/docs/getting-started/decentralized_identifiers/overview.md @@ -1,5 +1,5 @@ --- -description: The Decentralized Identifiers (DID) standard from W3C is the fundamental standard that supports the concept of a decentralized digital identity. Explore the basic aspects of the DID standard. +description: The Decentralized Identifiers (DID) standard from W3C is the fundamental standard that supports the concept of a decentralized digital identity. Explore the basic aspects of the DID standard. image: /img/Identity_icon.png keywords: - public keys @@ -11,14 +11,14 @@ keywords: # Decentralized Identifiers (DID) -The Decentralized Identifiers (DID) standard from W3C is the fundamental standard that supports the concept of a decentralized digital identity. A DID is a unique identifier that contains information that can be resolved to a DID Document. This document contains data such as public keys, enabling the holder to prove ownership over their personal data, but also URIs that link to public information about the identity. This implementation complies to the [DID specifications v1.0 Working](https://www.w3.org/TR/did-core//). +The Decentralized Identifiers (DID) standard from W3C is the fundamental standard that supports the concept of a decentralized digital identity. A DID is a unique identifier that contains information that can be resolved to a DID Document. This document contains data such as public keys, enabling the holder to prove ownership over their personal data, but also URIs that link to public information about the identity. This implementation complies to the [DID specifications v1.0 Working](https://www.w3.org/TR/did-core//). -In the IOTA Identity framework, we have implemented the DID standard according to the `iota` [DID Method Specification](./specs/iota_did_method_spec.md). We recommend to see the `iota` DID Method Specification as the golden standard for DID on IOTA. Other implementations of DID on IOTA is recommended to follow the `iota` DID Method Specification. However, it is not necassary to implement a novel Method implementation for every project, so feel free to utilize this framework directly. +In the IOTA Identity framework, we have implemented the DID standard according to the `iota` [DID Method Specification](./specs/iota_did_method_spec.md). We recommend seeing the `iota` DID Method Specification as the golden standard for DID on IOTA. Other implementations of DID on IOTA are recommended to follow the `iota` DID Method Specification. However, it is not necassary to implement a novel Method implementation for every project, so feel free to utilize this framework directly. An example of DID conforming to the `iota` method specification: `did:iota:8dQAzVbbf6FLW9ckwyCBnKmcMGcUV9LYJoXtgQkHcNQy` -## Chapter overview +## Chapter Overview In this chapter we will explain the basic aspects of the DID standard. We will explore the how and why of DID Documents and why IOTA is a very suitable technology to host the DID Documents and the rest of a Self Sovereign Identity Framework. @@ -60,7 +60,7 @@ DIDs become really interesting in combination with Verifiable Credentials, that ## Why use IOTA Identity over other implementations? -IOTA Identity is a framework to implement Self Sovereign Identities on IOTA. Inheritly, IOTA provides some unique features that have a major impact on the usability of the framework. +IOTA Identity is a framework to implement Self Sovereign Identities on IOTA. Inherently, IOTA provides some unique features that have a major impact on the usability of the framework. ### Feeless diff --git a/documentation/docs/getting-started/verifiable_credentials/revoke.md b/documentation/docs/getting-started/verifiable_credentials/revoke.md index 643ed0c58b..0b67d9c442 100644 --- a/documentation/docs/getting-started/verifiable_credentials/revoke.md +++ b/documentation/docs/getting-started/verifiable_credentials/revoke.md @@ -1,7 +1,7 @@ --- title: Verifiable Credential Revocation sidebar_label: Revocation -description: Explain how a VC is revoke. +description: Explain how a VC is revoked. image: /img/Identity_icon.png keywords: - verifiable diff --git a/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md b/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md index 3237f4fb21..0e7d3cd3ad 100644 --- a/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md +++ b/documentation/docs/getting-started/verifiable_credentials/verifiable_presentations.md @@ -1,5 +1,5 @@ --- -title: verifiable Presentations +title: Verifiable Presentations sidebar_label: Verifiable Presentations description: Explain how a VC is created and verified. image: /img/Identity_icon.png diff --git a/documentation/docs/introduction.md b/documentation/docs/introduction.md index 12090fc1f6..04c443e157 100644 --- a/documentation/docs/introduction.md +++ b/documentation/docs/introduction.md @@ -4,7 +4,7 @@ keywords: - guide - TOC - overview -description: The most important concepts that developers will need to know to utilize IOTA Identity to its full potential +description: The most important concepts that developers will need to know to utilize IOTA Identity to its full potential. image: /img/Identity_icon.png --- @@ -28,7 +28,7 @@ Explains the DID standard from W3C, how to manipulate DID Documents and Merkle K ### Chapter 3.2: Verifiable Credentials (VC) -Explains the VC standard from W3C, how to create and revoke VCs and how to use Verifiable Presentations. +Explains the VC standard from W3C, how to create and revoke VCs, and how to use Verifiable Presentations. ### Chapter 3.3: DID Communications (DID Comm)