diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..bae884e --- /dev/null +++ b/.env.sample @@ -0,0 +1,3 @@ +INFURA_API_KEY= +OKLINK_API_KEY= +STABILITY_API_KEY= diff --git a/.eslintignore b/.eslintignore index 76add87..40f6e36 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,5 @@ node_modules -dist \ No newline at end of file +dist +**/__snapshots__/ +# **/*.test.ts +# **/*.test.js \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 66536ca..bc25ac5 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -13,6 +13,7 @@ "plugins": ["@typescript-eslint"], "rules": { "@typescript-eslint/no-unused-vars": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "type"] + "no-duplicate-imports": "error", + "@typescript-eslint/no-explicit-any": "warn" } } diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index 39b6225..7b73744 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -11,18 +11,18 @@ jobs: name: Code Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 18.x - - run: npm ci --ignore-scripts + - run: npm ci - run: npm run lint commit-lint: name: Commit Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Commit Lint Dependencies run: npm install @commitlint/config-conventional - uses: JulienKode/pull-request-name-linter-action@v0.5.0 diff --git a/.github/workflows/pull_requests.yml b/.github/workflows/pull_requests.yml index 51e381b..4b281b0 100644 --- a/.github/workflows/pull_requests.yml +++ b/.github/workflows/pull_requests.yml @@ -23,7 +23,7 @@ jobs: contents: read pull-requests: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: reviewdog/action-eslint@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6847f8a..076e0d9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,10 +1,7 @@ on: push: branches: - - master - main - - beta - - +([0-9])?(.{+([0-9]),x}).x env: NODE_ENV: ci @@ -25,8 +22,8 @@ jobs: runs-on: ubuntu-latest needs: [tests, linters] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 18.x - run: npm ci diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 83d7744..09b8370 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,8 +11,8 @@ jobs: name: Run Tests runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 18.x - run: npm ci @@ -22,8 +22,8 @@ jobs: name: Test Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 18.x - run: npm ci diff --git a/.gitignore b/.gitignore index b4e8a2c..ebbdc02 100644 --- a/.gitignore +++ b/.gitignore @@ -17,8 +17,6 @@ dist/ # Logs npm-debug.log* -yarn-debug.log* -yarn-error.log* # OS generated files .DS_Store @@ -29,4 +27,7 @@ Thumbs.db .prettiercache # TypeScript type declaration files -*.d.ts \ No newline at end of file +*.d.ts + +# vitest reports +coverage/ \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..248daf1 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +# .npmrc +engine-strict=true + diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..3c03207 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18 diff --git a/README.md b/README.md index e071c6a..3406e41 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,573 @@ -## TradeTrust Core +# TradeTrust Core -Unified interface for interacting with TradeTrust's various services. +Unified interface for interacting with TradeTrust's various services such as document verification and validation of the fragments. -## Getting Started +## Installation -To get started with this project, clone the repository and install the dependencies: +```sh +npm i @tradetrust-tt/tradetrust-core +``` -### install +## Basic Usages -Building the Project -You can build the project using the following command: -`npm i` +> [!IMPORTANT] +> We strongly recommend to use [ethers-v5](https://docs.ethers.org/v5/) to interact with smart contracts for tradetrust-core, as it is already tested, and all the provided example usages are with ethers-v5 as well. -#### build +#### Wrapping and Signing of Verifiable Document -This will generate the necessary files in the dist directory. -`npm run build` +This example provides how to wrap and sign TradeTrust verifiable document using public/private key pair. This method doesn't need user to have existing [document store](https://docs.tradetrust.io/docs/topics/introduction/verifiable-documents/document-store/) deployed on blockchain. +Replace `` and `` with your actual wallet address and private key. -#### Running Tests +```ts +import { + wrapDocumentV2, + signDocument, + isSignedWrappedV2Document, + SUPPORTED_SIGNING_ALGORITHM, +} from '@tradetrust-tt/tradetrust-core' -To run the tests, use the following command: -`npm run test` +const document = { + // raw TradeTrust v2 document with dns-did as identitify proof +} as any -#### Linting +async function start() { + // wrapping the raw v2 document + const wrappedDocument = wrapDocumentV2(document) -To lint the project, use the following command: -`npm run lint` + // signing with public and private key + const signedDocument = await signDocument( + wrappedDocument, + SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, + { + public: 'did:ethr:#controller', + private: '', + } + ) -#### lint fix + // signed document + console.log(signedDocument) + // check if the document has already wrapped and signed + console.log(isSignedWrappedV2Document(signedDocument)) +} -To automatically fix linting errors, use the following command: -`npm run lint-fix` +start() +``` -#### Contributing +#### Deploying Document Store -We welcome contributions to the TradeTrust Core project. Please feel free to submit a pull request or open an issue. +This example provides how to deploy trandetrust [document-store](https://docs.tradetrust.io/docs/topics/introduction/verifiable-documents/document-store/) to issue and revoke verifiable documents. Replace the values for `` and `` accordingly. + +```ts +import { DocumentStoreFactory } from '@tradetrust-tt/tradetrust-core' +import { Wallet, ethers } from 'ethers' + +async function start() { + // preparing the wallet + const unconnectedWallet = new Wallet('') + const provider = new ethers.providers.JsonRpcProvider( + '' + ) + const wallet = unconnectedWallet.connect(provider) + + // document store deployment + const docStoreFactory = new DocumentStoreFactory(wallet) + const ownerAddr = wallet.getAddress() + const transaction = await docStoreFactory.deploy('my doc store', ownerAddr) + const receipt = await transaction.deployTransaction.wait() + + // new document store address + console.log(receipt.contractAddress) +} + +start() +``` + +#### Wrapping, Issuing and Revoking of the Verifiable Document + +This example provides how to wrap the [raw verifiable document](https://docs.tradetrust.io/docs/tutorial/verifiable-documents/advanced/document-store/raw-document) and issue the TradeTrust verifiable document using the existing [document store](https://docs.tradetrust.io/docs/topics/introduction/verifiable-documents/document-store/). After successfully issued, transaction hash will be displayed and the wrappedDocument should be successfully [verified](#verifying). Replace the placeholders ``, `` and `` accordingly. + +```ts +import { + connectDocumentStore, + wrapDocumentV2, +} from '@tradetrust-tt/tradetrust-core' +import { Wallet, ethers } from 'ethers' +const document = { + // raw TradeTrust verifiable v2 document with dns-txt as identity proof +} as any + +async function start() { + // wrapping the raw v2 document + const wrappedDocument = wrapDocumentV2(document) + const documentHash = wrappedDocument.signature.targetHash + + // preparing the wallet + const unconnectedWallet = new Wallet('') + const provider = new ethers.providers.JsonRpcProvider('') + const wallet = unconnectedWallet.connect(provider) + + // connect to existing document store + const docStoreAddr = '' + const docStore = await connectDocumentStore(docStoreAddr, wallet) + + // issue the document + const transaction = await docStore.issue(`0x${documentHash}`) + const receipt = await transaction.wait() + + // transaction hash + console.log(receipt.transactionHash) + // issued document, which can be verified + console.log(console.log(JSON.stringify(wrappedDocument))) +} + +start() +``` + +After the document is issued on document store, we can [revoke](https://docs.tradetrust.io/docs/tutorial/verifiable-documents/advanced/document-store/revoking-document/revoking-document-cli) the document. Replace the `` with the address of the document store that the document is issued and the `` with the `targetHash` or `merkleRoot` of the document. + +```ts +const docStore = await connectDocumentStore('', wallet) +const transaction = await docStore.revoke(``) +const receipt = await transaction.wait() +// transaction hash +console.log(receipt.transactionHash) +``` + +Document Store also provides a list of functions to get the state of document or manage ownership of the document store. + +``` +documentIssued +documentRevoked +isOwner +name +owner +renounceOwnership +transferOwnership +version +initialize +issue +bulkIssue +getIssuedBlock +isIssued +isIssuedBefore +revoke +bulkRevoke +isRevoked +isRevokedBefore +``` + +#### Deploying Token Registry + +This example provides how to deploy TradeTrust standard token-registry for [transferrable records](https://docs.tradetrust.io/docs/tutorial/transferable-records/overview/). It requires less gas compared to [standalone deployment](#deploying-standalone-token-registry), as it uses deployer and implementation addresses for deployment. Replace the values for `` and `` with your wallet private key and the JSON RPC url for desired network accordingly. Currently, it supports the following networks. + +- ethereum +- sepolia +- polygon +- stabilitytestnet +- stability + +```ts +import { + TDocDeployer__factory, + TOKEN_REG_CONSTS, + DeploymentEvent, + encodeInitParams, + getEventFromReceipt, +} from '@tradetrust-tt/tradetrust-core' +import { Wallet, ethers } from 'ethers' + +async function start() { + // preparing the wallet + const unconnectedWallet = new Wallet('') + const provider = new ethers.providers.JsonRpcProvider('') + const wallet = unconnectedWallet.connect(provider) + const walletAddress = await wallet.getAddress() + const chainId = await wallet.getChainId() + + // deploy standard token registry + const { TokenImplementation, Deployer } = TOKEN_REG_CONSTS.contractAddress + const deployerContract = TDocDeployer__factory.connect( + Deployer[chainId], + wallet + ) + const initParam = encodeInitParams({ + name: 'DemoTokenRegistry', + symbol: 'DTR', + deployer: walletAddress, + }) + const tx = await deployerContract.deploy( + TokenImplementation[chainId], + initParam + ) + const receipt = await tx.wait() + const registryAddress = getEventFromReceipt( + receipt, + deployerContract.interface.getEventTopic('Deployment') + ).args.deployed + + // new token registry contract address + console.log(registryAddress) +} +start() +``` + +#### Deploying Standalone Token Registry + +This example provides how to deploy TradeTrust standalone token-registry for [transferrable records](https://docs.tradetrust.io/docs/tutorial/transferable-records/overview/). Replace the values for `` and `` with your wallet private key and the JSON RPC url for desired network accordingly. It works on all the [supported networks](https://docs.tradetrust.io/docs/topics/introduction/supported-network/#tradetrust-supported-networks). + +```ts +import { + TradeTrustToken__factory, + TOKEN_REG_CONSTS, +} from '@tradetrust-tt/tradetrust-core' +import { Wallet, ethers } from 'ethers' + +async function start() { + const unconnectedWallet = new Wallet('') + const provider = new ethers.providers.JsonRpcProvider('') + const wallet = unconnectedWallet.connect(provider) + const tokenFactory = new TradeTrustToken__factory(wallet) + const CHAIN_ID = await wallet.getChainId() + // get the title escrow factory address for each network + const TitleEscrowFactory = + TOKEN_REG_CONSTS.contractAddress.TitleEscrowFactory[CHAIN_ID] + const tokenRegistry = await tokenFactory.deploy( + 'DemoTokenRegistry', + 'DTR', + TitleEscrowFactory + ) + const registryAddress = tokenRegistry.address + // new standalone token registry contract address + console.log(registryAddress) +} +start() +``` + +#### Wrapping and Minting of Transferrable Record + +This example provides how to wrap the [raw transferrable document](https://docs.tradetrust.io/docs/tutorial/transferable-records/raw-document) and mint the tradetrust token for [transferrable record](https://docs.tradetrust.io/docs/tutorial/transferable-records/overview/) using the existing token registry address. Replace the place holders ``, ``, ``, `` and `` accordingly. After successfully minted, transaction hash will be displayed and the `wrappedDocument` should be successfully [verified](#verifying). + +```ts +import { + TradeTrustToken__factory, + wrapDocumentV2, +} from '@tradetrust-tt/tradetrust-core' +import { Wallet, ethers } from 'ethers' + +async function start() { + const document = { + // raw TradeTrust transferable v2 document with dns-txt as identitify proof + } as any + + // wrapping tradetrust v2 document + const wrappedDocument = wrapDocumentV2([document]) + const tokenId = wrappedDocument.signature.targetHash + + // preparing the wallet + const unconnectedWallet = new Wallet('') + const provider = new ethers.providers.JsonRpcProvider('') + const wallet = unconnectedWallet.connect(provider) + + // connect to the existing token registry + const connectedTokenReg = TradeTrustToken__factory.connect( + '', + wallet + ) + // minting the document + const transaction = await connectedTokenReg.mint( + '', + '', + tokenId + ) + console.log(`Waiting for transaction ${transaction.hash} to be completed`) + const receipt = await transaction.wait() + + // transaction hash + console.log(receipt.transactionHash) + // minted document, which should be able to verified + console.log(wrappedDocument) +} + +start() +``` + +#### Managing the Ownership of Transferable Record + +The examples in this section demonstrate how to manage and represent the ownership of a TradeTrust token between a beneficiary and holder for [Title Transfer](https://docs.tradetrust.io/docs/topics/introduction/transferable-records/title-transfer), and eventually surrender the document. During [minting](#minting-of-transferrable-record), the [Token Registry](https://docs.tradetrust.io/docs/topics/appendix/glossary/#token-registry) will create [Title Escrow](https://docs.tradetrust.io/docs/topics/introduction/transferable-records/title-transfer/#title-escrow) with initial owner and holder. In order to do the title transfer, we will need to connect to the titleEscrow first. + +```ts +import { connectToTitleEscrow } from '@tradetrust-tt/tradetrust-core' +import { Wallet, ethers } from 'ethers' + +const unconnectedWallet = new Wallet('') +const provider = new ethers.providers.JsonRpcProvider('') +const wallet = unconnectedWallet.connect(provider) + +const tokenId = '' +const tokenRegAddress = '' +const titleEscrow = await connectToTitleEscrow({ + tokenRegAddress, + address, + wallet, +}) +``` + +After getting the titleEscrow, we can call the following methods to change the ownership of the tradetrust token. + +`nominate` + +Allow the owner of the transferable record to nominate a new owner. After nomination, +the holder need to endorse with transferBeneficiary method. + +```ts +const transaction = await titleEscrow.nominate(beneficiaryNomineeAddress) +await transaction.wait() +``` + +`transferBeneficiary` + +Allow the holder of the transferable record to endorse the transfer to new owner who is being nominated by the current owner. +If you are both the owner and holder, the change of ownership can happen without nomination. + +```ts +const transaction = await titleEscrow.transferBeneficiary( + beneficiaryNomineeAddress +) +await transaction.wait() +``` + +`transferHolder` + +Allow the holder of the transferable record to change its holder. + +```ts +const transaction = await titleEscrow.transferHolder(newHolderAddress) +await transaction.wait() +``` + +`transferOwners` + +Allow the entity (who is both an owner and holder) to change to the new owner and holder of the document + +```ts +const transaction = await titleEscrow.transferOwners( + beneficiaryNomineeAddress, + newHolderAddress +) +await transaction.wait() +``` + +`surrender` + +Allow the entity (who is both an owner and holder) to surrender it's transferable record to the issuer of the token registry at the end of it's life cycle. + +```ts +const transaction = await titleEscrow.surrender() +await transaction.wait() +``` + +After the the transferable record is surrendered by the owner, the issuer of the token registry need to accept or reject that surrender. +Reference [here](#wrapping-and-minting-of-transferrable-record) on how to get the connected registry. + +`restore` + +Allow the issuer of the token registry to reject the surrender. + +```ts +const transaction = await connectedTokenReg.restore(tokenId) +await transaction.wait() +``` + +`burn` + +Allow the issuer of the token registry to accept the surrender and burn the document. + +```ts +const transaction = await connectedTokenReg.burn(tokenId) +await transaction.wait() +``` + +#### Managing Role and Access for Token Registry + +Roles are useful for granting users to access certain functions only on existing token registry. A trusted user can be granted multiple roles by the admin user to perform different operations. This example provides how to use `grantRole` and `revokeRole` methods, which can be called on the existing token registry by the admin user to grant and revoke roles to and from users. +Replace `` with the actual address of the user. + +```ts +import { TOKEN_REG_CONSTS } from '@tradetrust-tt/tradetrust-core' + +// granting minter role to specific user +await tokenRegistry.grantRole( + TOKEN_REG_CONSTS.roleHash.MinterRole, + '' +) + +// revoking accepter role from specific user +await tokenRegistry.revokeRole( + TOKEN_REG_CONSTS.roleHash.AccepterRole, + '' +) +``` + +Currently, here are the designated roles meant for the different key operations. + +| Role | Access | +| -------------- | ----------------------------------- | +| `DefaultAdmin` | Able to perform all operations | +| `MinterRole` | Able to mint new tokens | +| `AccepterRole` | Able to accept a surrendered token | +| `RestorerRole` | Able to restore a surrendered token | + +#### Verifying + +This example provides how to verify tradetrust document using your own provider configurations. + +```ts +import { + verify, + isValid, + interpretFragments, + generateProvider, + providerType, +} from '@tradetrust-tt/tradetrust-core' + +const providerOptions = { + // modify your provider options accordingly + network: 'sepolia', + providerType: 'infura' as providerType, + apiKey: 'your-api-key', +} +// create provider object +const provider = generateProvider(providerOptions) + +let document = { + // tradetrust document +} as any + +async function start() { + const fragments = await verify(document, { provider }) + + // to check the overall validity of the document + console.log(isValid(fragments)) + + // to check if the document has not been modified, has been issued and has valid issuer identity + const { hashValid, issuedValid, identityValid } = + interpretFragments(fragments) + console.log({ hashValid, issuedValid, identityValid }) +} + +start() +``` + +## Methods + +tradetrust-core provides the following methods for document verification and validations. + +#### `generateProvider` + +It generates receives provider options and returns the ethereum JSON RPC provider to be used for [verify](#verify) method. + +#### `wrapDocumentV2` + +It takes in TradeTrust v2 document and returns the wrapped document as an object. + +#### `wrapDocumentsV2` + +It takes in array of TradeTrust v2 documents and returns the wrapped documents. + +#### `wrapDocumentV3` + +It takes in TradeTrust v3 document and returns the wrapped document as an object. + +#### `wrapDocumentsV3` + +It takes in array of TradeTrust v3 documents and returns the wrapped documents. + +#### `obfuscateDocument` + +It removes a key-value pair from the document's data section, without causing the file hash to change. This can be used to generate a new document containing a subset of the original data, yet allow the recipient to proof the provenance of the document. + +#### `getDataV2` + +It returns the original data stored in the TradeTrust v2 document, in a readable format. + +#### `diagnose` + +Tool to find out why a document is not a valid open attestation file (wrapped or signed document) + +#### `signDocument` + +It takes a wrapped document, a wallet (public and private key pair) or an Ethers.js Signer. The method will sign the merkle root from the wrapped document, append the signature to the document and return it. Currently, it supports `Secp256k1VerificationKey2018` sign algorithm. + +#### `verify` + +It allows you to verify wrapped/ issued document programmatically. Upon successful verification, it will return fragments which would collectively prove the validity of the document. + +Document can be either [verifiable document](https://docs.tradetrust.io/docs/tutorial/verifiable-documents/overview) or [transferrable record](https://docs.tradetrust.io/docs/tutorial/transferable-records/overview) which follows [TradeTrust document schema](https://docs.tradetrust.io/docs/topics/introduction/tradetrust-document-schema/) + +For more information about building provider, visit [tt-verify repository](https://github.com/TradeTrust/tt-verify?tab=readme-ov-file#provider) + +#### `isValid` + +It will execute over fragments, returned from [verify](#verify) method and determine if the fragments produced a valid result. The function will return true if a document fulfill the following conditions: + +The document has not been tampered, and +The document has been issued, and +The document has not been revoked, and +The issuer identity is valid. + +#### `interpretFragments` + +It allows you to extract out the verified results from the fragments. + +After verification, use `isValid` method to answer some questions: + +- Has the document been tampered with ? +- Is the issuance state of the document valid ? +- Is the document issuer identity valid ? (see [identity proof](https://docs.tradetrust.io/docs/topics/verifying-documents/issuer-identity)) + +#### `verifySignature` + +It checks that the signature of the document corresponds to the actual content in the document. In addition, it checks that the target hash (hash of the document content), is part of the set of documents wrapped in the batch using the proofs. + +Note that this method does not check against the blockchain or any registry if this document has been published. The merkle root of this document need to be checked against a publicly accessible document store (can be a smart contract on the blockchain). + +#### `connectToTitleEscrow` + +It accepts the tokenId and address of the token resgitry and returns the address of the [TitleEscrow](https://docs.tradetrust.io/docs/topics/introduction/transferable-records/title-transfer/#title-escrow) which is connected to that token registry. + +#### `isWrappedV2Document` + +type guard for wrapped v2 document + +#### `isSignedWrappedV2Document` + +type guard for signed v2 document + +#### `isWrappedV3Document` + +type guard for wrapped v3 document + +#### `isSignedWrappedV3Document` + +type guard for signed v3 document + +#### `getEventFromReceipt` + +extracts a specific event from a transaction receipt. + +#### `encodeInitParams` + +prepare the initialization parameters for deploying the [token-registry](#deploying-token-registry) + +#### `connectDocumentStore` + +connect to the existing document store + +## Common Issues and Workaround + +- [Transaction underpriced error on polygon mainnet](https://docs.tradetrust.io/docs/topics/appendix/polygon-mainnet-workaround/) +- [ZeroGasTransactions RPCs error on stability networks](https://docs.tradetrust.io/docs/topics/appendix/stability-gasfee-workaround/) + +## Contributing + +We welcome contributions to the TradeTrust core library. Please feel free to submit a pull request or open an issue. diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..507e1c9 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,8 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], + + // Add your own rules. See http://marionebl.github.io/commitlint + rules: { + 'body-max-line-length': [0], // disable + }, +} diff --git a/coverage/base.css b/coverage/base.css deleted file mode 100644 index f418035..0000000 --- a/coverage/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/coverage/block-navigation.js b/coverage/block-navigation.js deleted file mode 100644 index cc12130..0000000 --- a/coverage/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selecter that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/coverage/clover.xml b/coverage/clover.xml deleted file mode 100644 index 93a1aac..0000000 --- a/coverage/clover.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json deleted file mode 100644 index d4098c6..0000000 --- a/coverage/coverage-final.json +++ /dev/null @@ -1,3 +0,0 @@ -{"/Users/minhtetoo/tradetrust/tradetrust-core/src/index.ts": {"path":"/Users/minhtetoo/tradetrust/tradetrust-core/src/index.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}}},"s":{"0":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}},"locations":[{"start":{"line":1,"column":0},"end":{"line":1,"column":23}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}},"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}},"line":1}},"f":{"0":0}} -,"/Users/minhtetoo/tradetrust/tradetrust-core/src/greet/index.ts": {"path":"/Users/minhtetoo/tradetrust/tradetrust-core/src/greet/index.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":16}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":1}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":42}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":33}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":21},"end":{"line":7,"column":1}},"locations":[{"start":{"line":5,"column":21},"end":{"line":7,"column":1}}]}},"b":{"0":[1]},"fnMap":{"0":{"name":"greet","decl":{"start":{"line":5,"column":21},"end":{"line":7,"column":1}},"loc":{"start":{"line":5,"column":21},"end":{"line":7,"column":1}},"line":5}},"f":{"0":1}} -} diff --git a/coverage/favicon.png b/coverage/favicon.png deleted file mode 100644 index c1525b8..0000000 Binary files a/coverage/favicon.png and /dev/null differ diff --git a/coverage/index.html b/coverage/index.html deleted file mode 100644 index f64f151..0000000 --- a/coverage/index.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- 87.5% - Statements - 7/8 -
- - -
- 50% - Branches - 1/2 -
- - -
- 50% - Functions - 1/2 -
- - -
- 87.5% - Lines - 7/8 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
src -
-
0%0/10%0/10%0/10%0/1
src/greet -
-
100%7/7100%1/1100%1/1100%7/7
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/prettify.css b/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/prettify.js b/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/sort-arrow-sprite.png b/coverage/sort-arrow-sprite.png deleted file mode 100644 index 6ed6831..0000000 Binary files a/coverage/sort-arrow-sprite.png and /dev/null differ diff --git a/coverage/sorter.js b/coverage/sorter.js deleted file mode 100644 index 2bb296a..0000000 --- a/coverage/sorter.js +++ /dev/null @@ -1,196 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - if ( - row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()) - ) { - row.style.display = ''; - } else { - row.style.display = 'none'; - } - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/coverage/src/greet/index.html b/coverage/src/greet/index.html deleted file mode 100644 index 3f21bb0..0000000 --- a/coverage/src/greet/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for src/greet - - - - - - - - - -
-
-

All files src/greet

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 1/1 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
index.ts -
-
100%7/7100%1/1100%1/1100%7/7
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/greet/index.ts.html b/coverage/src/greet/index.ts.html deleted file mode 100644 index 43623df..0000000 --- a/coverage/src/greet/index.ts.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - Code coverage report for src/greet/index.ts - - - - - - - - - -
-
-

All files / src/greet index.ts

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 1/1 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -81x -1x -1x -1x -1x -1x -1x - 
export type Person = {
-    name: string
-}
- 
-export const greet = (person: Person) => {
-    return `hello ${person.name}`
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/index.html b/coverage/src/index.html deleted file mode 100644 index 1f93cfc..0000000 --- a/coverage/src/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for src - - - - - - - - - -
-
-

All files src

-
- -
- 0% - Statements - 0/1 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/1 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
index.ts -
-
0%0/10%0/10%0/10%0/1
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/index.ts.html b/coverage/src/index.ts.html deleted file mode 100644 index 0388d5b..0000000 --- a/coverage/src/index.ts.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - Code coverage report for src/index.ts - - - - - - - - - -
-
-

All files / src index.ts

-
- -
- 0% - Statements - 0/1 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/1 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2  - 
export * from './greet'
- -
-
- - - - - - - - \ No newline at end of file diff --git a/hardhat.config.js b/hardhat.config.js new file mode 100644 index 0000000..2496c59 --- /dev/null +++ b/hardhat.config.js @@ -0,0 +1,13 @@ +require('@nomiclabs/hardhat-ethers') + +module.exports = { + networks: { + hardhat: { + chainId: 1337, + accounts: { + mnemonic: + 'indicate swing place chair flight used hammer soon photo region volume shuffle', + }, + }, + }, +} diff --git a/package-lock.json b/package-lock.json index 2833726..9b40113 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,465 +1,368 @@ { - "name": "@tradetrust-tt/tradetrust-core", - "version": "1.0.3", + "name": "@minhtetoo/tradetrust-core", + "version": "1.0.28", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@tradetrust-tt/tradetrust-core", - "version": "1.0.3", + "name": "@minhtetoo/tradetrust-core", + "version": "1.0.28", "license": "ISC", "dependencies": { - "@vitest/coverage-v8": "^1.2.2" + "@tradetrust-tt/document-store": "^4.0.0", + "@tradetrust-tt/token-registry": "^4.10.2", + "@tradetrust-tt/tradetrust": "^6.9.5", + "@tradetrust-tt/tt-verify": "^8.9.2", + "dotenv": "^16.4.5", + "node-fetch": "^2.6.1" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^6.20.0", - "@typescript-eslint/parser": "^6.20.0", + "@commitlint/config-conventional": "^16.0.0", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@tradetrust-tt/tradetrust-cli": "^2.17.1", + "@types/gtag.js": "0.0.19", + "@types/jsdom": "^21.1.6", + "@types/node-fetch": "^2.6.11", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@vitest/browser": "^1.6.0", + "@vitest/coverage-v8": "^1.6.0", + "commitizen": "^4.3.0", + "concurrently": "^6.2.0", + "cz-conventional-changelog": "^3.3.0", "eslint": "^8.56.0", + "ethers": "^5.7.2", + "hardhat": "^2.22.3", + "jsdom": "^24.0.0", + "npm-run-all": "^4.1.5", "prettier": "^3.2.4", + "shelljs": "^0.8.5", "typescript": "^5.3.3", - "vitest": "^1.2.2" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, + "vitest": "^1.6.0" + }, "engines": { - "node": ">=0.10.0" + "node": "18.x" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.17.2" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "node_modules/@babel/code-frame": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/highlight": "^7.24.6", + "picocolors": "^1.0.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "node_modules/@babel/helper-string-parser": { + "version": "7.24.6", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", - "bin": { - "parser": "bin/babel-parser.js" - }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.6", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" } }, - "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "node_modules/@babel/highlight": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-validator-identifier": "^7.24.6", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "aix" - ], + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "android" - ], + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "optional": true }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=12" + "node": ">=0.8.0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@babel/parser": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/runtime": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/types": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@commitlint/config-conventional": { + "version": "16.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, "engines": { - "node": ">=12" + "node": ">=v12" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], + "node_modules/@commitlint/config-validator": { + "version": "19.0.3", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@commitlint/types": "^19.0.3", + "ajv": "^8.11.0" + }, "engines": { - "node": ">=12" + "node": ">=v18" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], + "node_modules/@commitlint/execute-rule": { + "version": "19.0.0", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=v18" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], + "node_modules/@commitlint/load": { + "version": "19.2.0", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@commitlint/config-validator": "^19.0.3", + "@commitlint/execute-rule": "^19.0.0", + "@commitlint/resolve-extends": "^19.1.0", + "@commitlint/types": "^19.0.3", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^5.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0" + }, "engines": { - "node": ">=12" + "node": ">=v18" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "5.3.0", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], + "node_modules/@commitlint/resolve-extends": { + "version": "19.1.0", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@commitlint/config-validator": "^19.0.3", + "@commitlint/types": "^19.0.3", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=v18" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], + "node_modules/@commitlint/types": { + "version": "19.0.3", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, "engines": { - "node": ">=12" + "node": ">=v18" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "5.3.0", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=12" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", "cpu": [ - "x64" + "arm64" ], + "dev": true, + "license": "MIT", "optional": true, "os": [ - "openbsd" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -478,21 +381,39 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -501,1275 +422,8618 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" }, "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": ">=14" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@ethereumjs/util": { + "version": "8.1.0", "dev": true, + "license": "MPL-2.0", "dependencies": { - "brace-expansion": "^1.1.7" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" }, "engines": { - "node": "*" + "node": ">=14" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.3.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=12.22" + "node": ">= 16" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "engines": { - "node": ">=8" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.3.3", + "dev": true, + "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.2.2", + "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", - "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", - "cpu": [ - "arm" + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "android" - ] + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", - "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", - "cpu": [ - "arm64" + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "android" - ] + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", - "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", - "cpu": [ - "arm64" + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "darwin" - ] + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", - "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", - "cpu": [ - "x64" + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", - "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", - "cpu": [ - "arm" + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", - "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", - "cpu": [ - "arm64" + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", - "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", - "cpu": [ - "arm64" + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", - "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", - "cpu": [ - "riscv64" + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", - "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", - "cpu": [ - "x64" + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", - "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", - "cpu": [ - "x64" + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", - "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", - "cpu": [ - "arm64" + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "win32" - ] + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", - "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", - "cpu": [ - "ia32" + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "optional": true, - "os": [ - "win32" - ] + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@govtechsg/jsonld": { + "version": "0.1.1", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "cross-fetch": "^3.1.4", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@govtechsg/jsonld/node_modules/cross-fetch": { + "version": "3.1.8", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/@govtechsg/oa-did-sign": { + "version": "2.2.0", + "license": "Apache-2.0", + "dependencies": { + "@govtechsg/open-attestation": "^4.5.0", + "did-resolver": "^2.1.1", + "ethers": "^5.0.4", + "ethr-did-resolver": "^3.0.0", + "node-cache": "^5.1.2", + "snyk": "^1.406.0", + "web-did-resolver": "^1.3.3" + } + }, + "node_modules/@govtechsg/oa-did-sign/node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@govtechsg/oa-did-sign/node_modules/cross-fetch": { + "version": "3.1.8", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/@govtechsg/oa-did-sign/node_modules/did-resolver": { + "version": "2.2.0", + "license": "Apache-2.0" + }, + "node_modules/@govtechsg/oa-did-sign/node_modules/ethr-did-resolver": { + "version": "3.0.3", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.0", + "did-resolver": "2.1.2", + "elliptic": "^6.5.3", + "ethjs-abi": "^0.2.1", + "ethjs-contract": "^0.2.0", + "ethjs-provider-http": "^0.1.6", + "ethjs-query": "^0.3.5", + "ethr-did-registry": "^0.0.3", + "js-sha3": "^0.8.0" + } + }, + "node_modules/@govtechsg/oa-did-sign/node_modules/ethr-did-resolver/node_modules/did-resolver": { + "version": "2.1.2", + "license": "Apache-2.0" + }, + "node_modules/@govtechsg/oa-did-sign/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/@govtechsg/oa-did-sign/node_modules/web-did-resolver": { + "version": "1.3.5", + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "^3.0.4", + "did-resolver": "2.1.1" + } + }, + "node_modules/@govtechsg/oa-did-sign/node_modules/web-did-resolver/node_modules/did-resolver": { + "version": "2.1.1", + "license": "Apache-2.0" + }, + "node_modules/@govtechsg/oa-encryption": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4.3.4", + "node-forge": "1.3.1" + } + }, + "node_modules/@govtechsg/open-attestation": { + "version": "4.7.3", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "ajv": "6.10.2", + "debug": "^4.1.1", + "did-resolver": "^2.1.2", + "ethers": "^5.0.31", + "ethr-did-resolver": "^3.0.3", + "flatley": "^5.2.0", + "js-base64": "^2.5.2", + "js-sha3": "^0.8.0", + "jsonld": "^3.1.0", + "lodash": "^4.17.15", + "node-fetch": "^2.6.0", + "runtypes": "^5.0.1", + "uuid": "^3.3.3", + "validator": "^12.0.0", + "verbal-expressions": "^1.0.2", + "web-did-resolver": "^1.3.5" + } + }, + "node_modules/@govtechsg/open-attestation/node_modules/ajv": { + "version": "6.10.2", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/@govtechsg/open-attestation/node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@govtechsg/open-attestation/node_modules/cross-fetch": { + "version": "3.1.8", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/@govtechsg/open-attestation/node_modules/did-resolver": { + "version": "2.2.0", + "license": "Apache-2.0" + }, + "node_modules/@govtechsg/open-attestation/node_modules/ethr-did-resolver": { + "version": "3.0.3", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.0", + "did-resolver": "2.1.2", + "elliptic": "^6.5.3", + "ethjs-abi": "^0.2.1", + "ethjs-contract": "^0.2.0", + "ethjs-provider-http": "^0.1.6", + "ethjs-query": "^0.3.5", + "ethr-did-registry": "^0.0.3", + "js-sha3": "^0.8.0" + } + }, + "node_modules/@govtechsg/open-attestation/node_modules/ethr-did-resolver/node_modules/did-resolver": { + "version": "2.1.2", + "license": "Apache-2.0" + }, + "node_modules/@govtechsg/open-attestation/node_modules/fast-deep-equal": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/@govtechsg/open-attestation/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/@govtechsg/open-attestation/node_modules/js-base64": { + "version": "2.6.4", + "license": "BSD-3-Clause" + }, + "node_modules/@govtechsg/open-attestation/node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/@govtechsg/open-attestation/node_modules/runtypes": { + "version": "5.1.0", + "license": "MIT" + }, + "node_modules/@govtechsg/open-attestation/node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@govtechsg/open-attestation/node_modules/validator": { + "version": "12.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@govtechsg/open-attestation/node_modules/web-did-resolver": { + "version": "1.3.5", + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "^3.0.4", + "did-resolver": "2.1.1" + } + }, + "node_modules/@govtechsg/open-attestation/node_modules/web-did-resolver/node_modules/did-resolver": { + "version": "2.1.1", + "license": "Apache-2.0" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@noble/curves": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.3.8", + "@nomicfoundation/edr-darwin-x64": "0.3.8", + "@nomicfoundation/edr-linux-arm64-gnu": "0.3.8", + "@nomicfoundation/edr-linux-arm64-musl": "0.3.8", + "@nomicfoundation/edr-linux-x64-gnu": "0.3.8", + "@nomicfoundation/edr-linux-x64-musl": "0.3.8", + "@nomicfoundation/edr-win32-x64-msvc": "0.3.8" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.1", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomiclabs/hardhat-ethers": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.25", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@scure/base": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.1.5", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.1", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@sentry-internal/tracing": { + "version": "7.116.0", + "license": "MIT", + "dependencies": { + "@sentry/core": "7.116.0", + "@sentry/types": "7.116.0", + "@sentry/utils": "7.116.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry-internal/tracing/node_modules/@sentry/core": { + "version": "7.116.0", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.116.0", + "@sentry/utils": "7.116.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry-internal/tracing/node_modules/@sentry/types": { + "version": "7.116.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry-internal/tracing/node_modules/@sentry/utils": { + "version": "7.116.0", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.116.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/integrations": { + "version": "7.116.0", + "license": "MIT", + "dependencies": { + "@sentry/core": "7.116.0", + "@sentry/types": "7.116.0", + "@sentry/utils": "7.116.0", + "localforage": "^1.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/core": { + "version": "7.116.0", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.116.0", + "@sentry/utils": "7.116.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/types": { + "version": "7.116.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/utils": { + "version": "7.116.0", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.116.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@snyk/protect": { + "version": "1.1291.1", + "dev": true, + "license": "Apache-2.0", + "bin": { + "snyk-protect": "bin/snyk-protect" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tradetrust-tt/dnsprove": { + "version": "2.12.3", + "license": "Apache-2.0", + "dependencies": { + "axios": "0.21.1", + "debug": "^4.3.1", + "runtypes": "^6.3.0" + }, + "engines": { + "node": "18.x" + } + }, + "node_modules/@tradetrust-tt/document-store": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@tradetrust-tt/document-store/-/document-store-4.0.0.tgz", + "integrity": "sha512-bvGtVJn/u1pxOBSq8wpPekWWTBI3ThHnkwx6PCHLs7n2jDPusPUjqOS4RtwB9EpkMkkgbRwMkKpIXbOauTgrhQ==", + "engines": { + "node": "18.x" + } + }, + "node_modules/@tradetrust-tt/token-registry": { + "version": "4.10.2", + "license": "Apache-2.0", + "dependencies": { + "@typechain/ethers-v5": "~10.0.0" + }, + "peerDependencies": { + "ethers": ">=5.0.8" + } + }, + "node_modules/@tradetrust-tt/tradetrust": { + "version": "6.9.5", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@govtechsg/jsonld": "^0.1.1", + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "cross-fetch": "^4.0.0", + "debug": "^4.3.4", + "ethers": "^5.7.2", + "flatley": "^5.2.0", + "js-base64": "^3.7.7", + "js-sha3": "^0.9.3", + "lodash": "^4.17.21", + "runtypes": "^6.7.0", + "uuid": "^9.0.1", + "validator": "^13.11.0" + }, + "engines": { + "node": "18.x" + } + }, + "node_modules/@tradetrust-tt/tradetrust-cli": { + "version": "2.21.2", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "@govtechsg/oa-encryption": "^1.3.3", + "@snyk/protect": "^1.1196.0", + "@tradetrust-tt/dnsprove": "^2.12.2", + "@tradetrust-tt/document-store": "^2.7.0", + "@tradetrust-tt/token-registry": "^4.10.1", + "@tradetrust-tt/tradetrust": "^6.9.4", + "@tradetrust-tt/tradetrust-config": "^1.14.1", + "@tradetrust-tt/tt-verify": "^8.9.1", + "ajv": "^8.4.0", + "ajv-formats": "^2.1.0", + "chalk": "^4.1.2", + "debug": "^4.3.2", + "ethers": "^5.7.2", + "ethers-aws-kms-signer": "^1.3.2", + "inquirer": "^8.0.0", + "mkdirp": "^1.0.4", + "node-fetch": "^2.6.1", + "signale": "^1.4.0", + "web3-utils": "^1.3.6", + "yargs": "^17.0.1" + }, + "bin": { + "tradetrust": "dist/cjs/index.js", + "tt": "dist/cjs/index.js" + }, + "engines": { + "node": "18.x" + } + }, + "node_modules/@tradetrust-tt/tradetrust-cli/node_modules/@tradetrust-tt/document-store": { + "version": "2.7.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@tradetrust-tt/tradetrust-config": { + "version": "1.14.3", + "dev": true, + "dependencies": { + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "dotenv": "^16.4.5", + "junk": "3.1.0", + "typedoc": "^0.25.4" + }, + "engines": { + "node": "18.x" + } + }, + "node_modules/@tradetrust-tt/tradetrust/node_modules/js-sha3": { + "version": "0.9.3", + "license": "MIT" + }, + "node_modules/@tradetrust-tt/tt-verify": { + "version": "8.9.2", + "license": "Apache-2.0", + "dependencies": { + "@govtechsg/oa-did-sign": "^2.2.0", + "@tradetrust-tt/dnsprove": "^2.12.3", + "@tradetrust-tt/document-store": "^2.7.0", + "@tradetrust-tt/token-registry": "^4.9.0", + "@tradetrust-tt/tradetrust": "^6.9.0", + "axios": "^1.6.2", + "debug": "^4.3.1", + "did-resolver": "^3.1.0", + "ethers": "^5.4.0", + "ethr-did-resolver": "^4.3.3", + "node-cache": "^5.1.2", + "runtypes": "^6.3.0", + "web-did-resolver": "^2.0.4" + }, + "engines": { + "node": "18.x" + } + }, + "node_modules/@tradetrust-tt/tt-verify/node_modules/@tradetrust-tt/document-store": { + "version": "2.7.0", + "license": "Apache-2.0" + }, + "node_modules/@tradetrust-tt/tt-verify/node_modules/axios": { + "version": "1.7.2", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/@typechain/ethers-v5": { + "version": "10.0.0", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.0.0", + "typescript": ">=4.3.0" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/gtag.js": { + "version": "0.0.19", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsdom": { + "version": "21.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.12.12", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "license": "MIT", + "peer": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitest/browser": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.6.0", + "magic-string": "^0.30.5", + "sirv": "^2.0.4" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "1.6.0", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.4", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "test-exclude": "^6.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.6.0" + } + }, + "node_modules/@vitest/expect": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.6.0", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.14.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-back": { + "version": "3.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1628.0", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.0", + "license": "MIT" + }, + "node_modules/axios": { + "version": "0.21.1", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "node_modules/bech32": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/boolean": { + "version": "3.2.0", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "license": "Apache-2.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0" + }, + "node_modules/chai": { + "version": "4.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/check-error": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "dev": true, + "license": "MIT" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/commitizen": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cachedir": "2.3.0", + "cz-conventional-changelog": "3.3.0", + "dedent": "0.7.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", + "find-root": "1.1.0", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.5", + "is-utf8": "^0.2.1", + "lodash": "4.17.21", + "minimist": "1.2.7", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1" + }, + "bin": { + "commitizen": "bin/commitizen", + "cz": "bin/git-cz", + "git-cz": "bin/git-cz" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/commitizen/node_modules/inquirer": { + "version": "8.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/commitizen/node_modules/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/commitizen/node_modules/tslib": { + "version": "2.6.2", + "dev": true, + "license": "0BSD" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "6.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/confbox": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commit-types": { + "version": "3.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/cookie": { + "version": "0.4.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "jiti": "^1.19.1" + }, + "engines": { + "node": ">=v16" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=8.2", + "typescript": ">=4" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssstyle": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cz-conventional-changelog": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/cz-conventional-changelog/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cz-conventional-changelog/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cz-conventional-changelog/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cz-conventional-changelog/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "dev": true, + "license": "MIT" + }, + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/did-resolver": { + "version": "3.2.2", + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "5.0.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.20.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethers": { + "version": "5.7.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/ethers-aws-kms-signer": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1.js": "^5.4.1", + "aws-sdk": "^2.922.0", + "bn.js": "^5.2.0", + "debug": "^4.3.1", + "ethers": "^5.4.1" + }, + "engines": { + "node": ">= 10.18" + } + }, + "node_modules/ethjs-abi": { + "version": "0.2.1", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-abi/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/ethjs-abi/node_modules/js-sha3": { + "version": "0.5.5", + "license": "MIT" + }, + "node_modules/ethjs-contract": { + "version": "0.2.3", + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "ethjs-abi": "0.2.0", + "ethjs-filter": "0.1.8", + "ethjs-util": "0.1.3", + "js-sha3": "0.5.5" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-contract/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/ethjs-contract/node_modules/ethjs-abi": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-contract/node_modules/ethjs-util": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-contract/node_modules/js-sha3": { + "version": "0.5.5", + "license": "MIT" + }, + "node_modules/ethjs-filter": { + "version": "0.1.8", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-format": { + "version": "0.2.7", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "ethjs-schema": "0.2.1", + "ethjs-util": "0.1.3", + "is-hex-prefixed": "1.0.0", + "number-to-bn": "1.7.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-format/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/ethjs-format/node_modules/ethjs-util": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-provider-http": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "xhr2": "0.1.3" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-query": { + "version": "0.3.8", + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "ethjs-format": "0.2.7", + "ethjs-rpc": "0.2.0", + "promise-to-callback": "^1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-rpc": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "promise-to-callback": "^1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-schema": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "dev": true, + "license": "MIT" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethr-did-registry": { + "version": "0.0.3", + "license": "Apache-2.0" + }, + "node_modules/ethr-did-resolver": { + "version": "4.3.5", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/abi": "^5.1.0", + "@ethersproject/abstract-signer": "^5.1.0", + "@ethersproject/address": "^5.1.0", + "@ethersproject/basex": "^5.1.0", + "@ethersproject/bignumber": "^5.1.0", + "@ethersproject/contracts": "^5.1.0", + "@ethersproject/providers": "^5.1.0", + "@ethersproject/transactions": "^5.1.0", + "did-resolver": "^3.1.0", + "ethr-did-registry": "^0.0.3", + "querystring": "^0.2.1" + } + }, + "node_modules/ethr-did-resolver/node_modules/querystring": { + "version": "0.2.1", + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/events": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-node-modules": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "findup-sync": "^4.0.0", + "merge": "^2.1.1" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup-sync": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatley": { + "version": "5.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "is-buffer": "^1.1.6" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "license": "BSD-3-Clause", + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/hardhat": { + "version": "2.22.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/edr": "^0.3.7", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/hardhat/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/hardhat/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/hardhat/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/hardhat/node_modules/find-up": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/glob": { + "version": "7.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/hardhat/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/hardhat/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/hardhat/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/hardhat/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "license": "MIT" + }, + "node_modules/immutable": { + "version": "4.3.6", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "dev": true, + "license": "ISC", + "optional": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/inquirer/node_modules/tslib": { + "version": "2.6.2", + "dev": true, + "license": "0BSD" + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fn": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jmespath": { + "version": "0.16.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-base64": { + "version": "3.7.7", + "license": "BSD-3-Clause" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "24.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.4", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.10", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.4", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.17.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.17.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "license": "ISC" + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonld": { + "version": "3.3.2", + "license": "BSD-3-Clause", + "dependencies": { + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "object.fromentries": "^2.0.2", + "rdf-canonize": "^2.0.1", + "request": "^2.88.0", + "semver": "^6.3.0", + "xmldom": "0.1.19" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/jsonld/node_modules/rdf-canonize": { + "version": "2.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "semver": "^6.3.0", + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonld/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jsonld/node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/longest": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/magicast": { + "version": "0.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.24.4", + "@babel/types": "^7.24.0", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mlly": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.0", + "ufo": "^1.5.3" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "dev": true, + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "8.1.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/node-cache": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "clone": "2.x" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", - "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] + "node_modules/number-to-bn": { + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "node_modules/nwsapi": { + "version": "2.2.10", + "dev": true, + "license": "MIT" }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" + "node_modules/oauth-sign": { + "version": "0.9.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "node_modules/object-inspect": { + "version": "1.13.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", - "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", - "dev": true, + "node_modules/object.assign": { + "version": "4.1.5", + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/type-utils": "6.20.0", - "@typescript-eslint/utils": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", - "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", + "node_modules/obliterator": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/typescript-estree": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", - "debug": "^4.3.4" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", - "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", + "node_modules/ora": { + "version": "5.4.1", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", - "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", + "node_modules/os-tmpdir": { + "version": "1.0.2", "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.20.0", - "@typescript-eslint/utils": "6.20.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", - "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", + "node_modules/p-map": { + "version": "4.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", - "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", + "node_modules/p-try": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "callsites": "^3.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", - "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/typescript-estree": "6.20.0", - "semver": "^7.5.4" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", - "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", + "node_modules/pidtree": { + "version": "0.3.1", "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.20.0", - "eslint-visitor-keys": "^3.4.1" + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=0.10" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@vitest/coverage-v8": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.2.2.tgz", - "integrity": "sha512-IHyKnDz18SFclIEEAHb9Y4Uxx0sPKC2VO1kdDCs1BF6Ip4S8rQprs971zIsooLUn7Afs71GRxWMWpkCGZpRMhw==", - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.4", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.1.6", - "magic-string": "^0.30.5", - "magicast": "^0.3.3", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": "^1.0.0" + "node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/@vitest/expect": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", - "integrity": "sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==", + "node_modules/pkg-conf": { + "version": "2.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@vitest/spy": "1.2.2", - "@vitest/utils": "1.2.2", - "chai": "^4.3.10" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=4" } }, - "node_modules/@vitest/runner": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.2.tgz", - "integrity": "sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==", + "node_modules/pkg-conf/node_modules/find-up": { + "version": "2.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@vitest/utils": "1.2.2", - "p-limit": "^5.0.0", - "pathe": "^1.1.1" + "locate-path": "^2.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=4" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/@vitest/snapshot": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.2.tgz", - "integrity": "sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==", + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "pretty-format": "^29.7.0" + "p-limit": "^1.1.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=4" } }, - "node_modules/@vitest/spy": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.2.tgz", - "integrity": "sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==", - "dependencies": { - "tinyspy": "^2.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/@vitest/utils": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.2.tgz", - "integrity": "sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==", + "node_modules/pkg-types": { + "version": "1.1.1", + "dev": true, + "license": "MIT", "dependencies": { - "diff-sequences": "^29.6.3", - "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "confbox": "^0.1.7", + "mlly": "^1.7.0", + "pathe": "^1.1.2" } }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">= 0.4" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/postcss": { + "version": "8.4.38", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">= 0.8.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/prettier": { + "version": "3.2.5", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/pretty-format": { + "version": "29.7.0", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/promise-to-callback": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/qs": { + "version": "6.5.3", + "license": "BSD-3-Clause", "engines": { - "node": "*" + "node": ">=0.6" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/querystring": { + "version": "0.2.0", + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/querystringify": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/raw-body": { + "version": "2.5.2", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "node_modules/rdf-canonize": { + "version": "3.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/react-is": { + "version": "18.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/read-pkg": { + "version": "3.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "pify": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/readable-stream": { + "version": "3.6.2", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 6" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "get-func-name": "^2.0.2" + "picomatch": "^2.2.1" }, "engines": { - "node": "*" + "node": ">=8.10.0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/rechoir": { + "version": "0.6.2", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "resolve": "^1.1.6" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.10" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/convert-source-map": { + "node_modules/reduce-flatten": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "dev": true, + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "node_modules/request": { + "version": "2.88.2", + "license": "Apache-2.0", "dependencies": { - "type-detect": "^4.0.0" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.12" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "license": "BSD-3-Clause", "dependencies": { - "path-type": "^4.0.0" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "node": ">=0.10.0" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/requires-port": { + "version": "1.0.0", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "node_modules/resolve-dir": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/reusify": { + "version": "1.0.4", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/ripemd160": { + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/rlp": { + "version": "2.2.7", "dev": true, + "license": "MPL-2.0", "dependencies": { - "is-glob": "^4.0.3" + "bn.js": "^5.2.0" }, - "engines": { - "node": ">=10.13.0" + "bin": { + "rlp": "bin/rlp" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/roarr": { + "version": "2.15.4", + "license": "BSD-3-Clause", "dependencies": { - "brace-expansion": "^1.1.7" + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" }, "engines": { - "node": "*" + "node": ">=8.0" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/rollup": { + "version": "4.18.0", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/rrweb-cssom": { + "version": "0.7.0", "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">=0.12.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/run-parallel": { + "version": "1.2.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" + "queue-microtask": "^1.2.2" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/runtypes": { + "version": "6.7.0", + "license": "MIT" + }, + "node_modules/rxjs": { + "version": "6.6.7", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, "engines": { - "node": ">=4.0" + "npm": ">=2.0.0" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/safe-array-concat": { + "version": "1.1.2", + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" }, "engines": { - "node": ">=16.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/sax": { + "version": "1.2.1", "dev": true, + "license": "ISC" + }, + "node_modules/saxes": { + "version": "6.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=v12.22.7" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "node_modules/scrypt-js": { + "version": "3.0.1", + "license": "MIT" }, - "node_modules/fastq": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", - "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "node_modules/secp256k1": { + "version": "4.0.3", "dev": true, + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" + "node_modules/semver": { + "version": "7.6.2", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10" } }, - "node_modules/fill-range": { + "node_modules/semver-compare": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/serialize-error": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "type-fest": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -1777,1254 +9041,1310 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/serialize-javascript": { + "version": "6.0.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "randombytes": "^2.1.0" } }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" } }, - "node_modules/get-func-name": { + "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": "*" + "node": ">= 0.4" } }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "sha.js": "bin.js" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/shebang-command": { + "version": "2.0.0", "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/shelljs": { + "version": "0.8.5", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "type-fest": "^0.20.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" }, - "engines": { - "node": ">=8" + "bin": { + "shjs": "bin/shjs" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/shiki": { + "version": "0.14.7", "dev": true, + "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "node_modules/siginfo": { + "version": "2.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "engines": { - "node": ">=16.17.0" - } + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/signale": { + "version": "1.4.0", "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, "engines": { - "node": ">= 4" + "node": ">=6" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/signale/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, + "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/signale/node_modules/chalk": { + "version": "2.4.2", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">=4" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/signale/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "color-name": "1.1.3" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/signale/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/signale/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", "dev": true, + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/signale/node_modules/has-flag": { + "version": "3.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=4" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/signale/node_modules/supports-color": { + "version": "5.5.0", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/sirv": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 10" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/snyk": { + "version": "1.1291.1", + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "@sentry/node": "^7.36.0", + "global-agent": "^3.0.0" + }, + "bin": { + "snyk": "bin/snyk" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/snyk/node_modules/@sentry/core": { + "version": "7.116.0", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "@sentry/types": "7.116.0", + "@sentry/utils": "7.116.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "node_modules/snyk/node_modules/@sentry/node": { + "version": "7.116.0", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "@sentry-internal/tracing": "7.116.0", + "@sentry/core": "7.116.0", + "@sentry/integrations": "7.116.0", + "@sentry/types": "7.116.0", + "@sentry/utils": "7.116.0" }, "engines": { "node": ">=8" } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/snyk/node_modules/@sentry/types": { + "version": "7.116.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/snyk/node_modules/@sentry/utils": { + "version": "7.116.0", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.116.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/solc": { + "version": "0.7.3", "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", "dev": true, + "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "node_modules/solc/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" - }, - "engines": { - "node": ">=14" + "glob": "^7.1.3" }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dependencies": { - "get-func-name": "^2.0.1" + "node_modules/source-map-js": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/magic-string": { - "version": "0.30.6", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.6.tgz", - "integrity": "sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==", + "node_modules/spawn-command": { + "version": "0.0.2-1", + "dev": true, + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/magicast": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", - "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", - "source-map-js": "^1.0.2" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" }, - "engines": { - "node": ">=10" + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/stackback": { + "version": "0.0.2", "dev": true, - "engines": { - "node": ">= 8" - } + "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/stacktrace-parser": { + "version": "0.1.10", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "type-fest": "^0.7.1" }, "engines": { - "node": ">=8.6" + "node": ">=6" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/statuses": { + "version": "2.0.1", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.8" } }, - "node_modules/mlly": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", - "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "node_modules/std-env": { + "version": "3.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "ufo": "^1.3.2" + "safe-buffer": "~5.2.0" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/string-format": { + "version": "2.0.0", + "license": "WTFPL OR MIT", + "peer": true }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=8" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/npm-run-path": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "license": "MIT", "dependencies": { - "wrappy": "1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/strip-bom": { + "version": "4.0.0", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "is-hex-prefixed": "1.0.0" }, "engines": { - "node": ">=10" + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/strip-literal": { + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "js-tokens": "^9.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.0", "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/table-layout": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, "engines": { "node": ">=8" } }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { "node": "*" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.8.0", "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.8.4", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=14.0.0" } }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "node_modules/tinyspy": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=0.6.0" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/to-fast-properties": { + "version": "2.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">=8.0" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=18" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "license": "MIT", + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "license": "0BSD" }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "node_modules/tsort": { + "version": "0.0.1", + "dev": true, + "license": "MIT" }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/type-detect": { + "version": "4.0.8", "dev": true, + "license": "MIT", "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", - "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "node_modules/typechain": { + "version": "8.3.2", + "license": "MIT", + "peer": true, "dependencies": { - "@types/estree": "1.0.5" + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" }, "bin": { - "rollup": "dist/bin/rollup" + "typechain": "dist/cli/cli.js" }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.6", - "@rollup/rollup-android-arm64": "4.9.6", - "@rollup/rollup-darwin-arm64": "4.9.6", - "@rollup/rollup-darwin-x64": "4.9.6", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", - "@rollup/rollup-linux-arm64-gnu": "4.9.6", - "@rollup/rollup-linux-arm64-musl": "4.9.6", - "@rollup/rollup-linux-riscv64-gnu": "4.9.6", - "@rollup/rollup-linux-x64-gnu": "4.9.6", - "@rollup/rollup-linux-x64-musl": "4.9.6", - "@rollup/rollup-win32-arm64-msvc": "4.9.6", - "@rollup/rollup-win32-ia32-msvc": "4.9.6", - "@rollup/rollup-win32-x64-msvc": "4.9.6", - "fsevents": "~2.3.2" + "peerDependencies": { + "typescript": ">=4.3.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "peer": true, "dependencies": { - "queue-microtask": "^1.2.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "license": "MIT", + "peer": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=6 <7 || >=8" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "license": "ISC", + "peer": true, "dependencies": { - "shebang-regex": "^3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==" - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/typechain/node_modules/prettier": { + "version": "2.8.8", + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==" - }, - "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "node_modules/typed-array-length": { + "version": "1.0.6", + "license": "MIT", "dependencies": { - "acorn": "^8.10.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/typedoc": { + "version": "0.25.13", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "has-flag": "^4.0.0" + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" }, "engines": { - "node": ">=8" + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "node_modules/typescript": { + "version": "5.4.5", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=8" + "node": ">=14.17" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/typical": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/ufo": { + "version": "1.5.3", + "dev": true, + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, - "engines": { - "node": "*" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tinybench": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", - "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==" - }, - "node_modules/tinypool": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", - "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "node_modules/undici": { + "version": "5.28.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, "engines": { - "node": ">=14.0.0" + "node": ">=14.0" } }, - "node_modules/tinyspy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", - "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", - "engines": { - "node": ">=14.0.0" - } + "node_modules/undici-types": { + "version": "5.26.5", + "dev": true, + "license": "MIT" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/universalify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 10.0.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/unpipe": { + "version": "1.0.0", "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8.0" + "node": ">= 0.8" } }, - "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", - "dev": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/url": { + "version": "0.10.3", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" + "node_modules/url-parse": { + "version": "1.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT" + }, + "node_modules/utf8": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "node_modules/util-deprecate": { + "version": "1.0.2", "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" + "uuid": "dist/bin/uuid" } }, - "node_modules/ufo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", - "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", "dev": true, + "license": "Apache-2.0", "dependencies": { - "punycode": "^2.1.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "node_modules/validator": { + "version": "13.12.0", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/verbal-expressions": { + "version": "1.0.2", + "license": "MIT", "engines": { - "node": ">=10.12.0" + "node": ">=9.2.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, "node_modules/vite": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", - "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "version": "5.2.11", + "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" }, "bin": { "vite": "bin/vite.js" @@ -3072,9 +10392,9 @@ } }, "node_modules/vite-node": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.2.tgz", - "integrity": "sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==", + "version": "1.6.0", + "dev": true, + "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", @@ -3093,17 +10413,16 @@ } }, "node_modules/vitest": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.2.tgz", - "integrity": "sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==", - "dependencies": { - "@vitest/expect": "1.2.2", - "@vitest/runner": "1.2.2", - "@vitest/snapshot": "1.2.2", - "@vitest/spy": "1.2.2", - "@vitest/utils": "1.2.2", + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "1.6.0", + "@vitest/runner": "1.6.0", + "@vitest/snapshot": "1.6.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", "acorn-walk": "^8.3.2", - "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "execa": "^8.0.1", @@ -3112,11 +10431,11 @@ "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.5.0", - "strip-literal": "^1.3.0", + "strip-literal": "^2.0.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.2", + "tinypool": "^0.8.3", "vite": "^5.0.0", - "vite-node": "1.2.2", + "vite-node": "1.6.0", "why-is-node-running": "^2.2.2" }, "bin": { @@ -3131,8 +10450,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "^1.0.0", - "@vitest/ui": "^1.0.0", + "@vitest/browser": "1.6.0", + "@vitest/ui": "1.6.0", "happy-dom": "*", "jsdom": "*" }, @@ -3157,10 +10476,166 @@ } } }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-did-resolver": { + "version": "2.0.27", + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "^4.0.0", + "did-resolver": "^4.0.0" + } + }, + "node_modules/web-did-resolver/node_modules/did-resolver": { + "version": "4.1.0", + "license": "Apache-2.0" + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "dev": true, + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip32": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip39": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3171,10 +10646,41 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/why-is-node-running": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "license": "MIT", "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" @@ -3186,21 +10692,198 @@ "node": ">=8" } }, + "node_modules/widest-line": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.4.6", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xhr2": { + "version": "0.1.3", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xmldom": { + "version": "0.1.19", + "engines": { + "node": ">=0.1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 2f8bd37..384f8b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tradetrust-tt/tradetrust-core", - "version": "1.0.3", + "version": "1.0.6", "description": "", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -9,27 +9,124 @@ "dist" ], "scripts": { - "test": "vitest --run", - "test:ci": "vitest --run --coverage", + "test:prep:blockchain": "hardhat node", + "test:prep:contracts": "node test/prep/setup-contracts.mjs", + "test:prep": "run-s test:prep:contracts test", + "test:concurrently": "concurrently -k -s first \"npm:test:prep:blockchain\" \"npm:test:prep\"", + "test": "npx vitest --run", + "test:ci": "concurrently -k -s first \"npm:test:prep:blockchain\" \"npm:test:prep\"", "build": "npm run clean && npm run build:cjs && npm run build:esm && npm run build:type", "build:cjs": "tsc --module commonjs --outDir dist/cjs", - "build:esm": "tsc --module es2015 --outDir dist/esm", + "build:esm": "tsc --module es6 --outDir dist/esm", "build:type": "tsc -d --emitDeclarationOnly --outDir dist/types", "lint": "eslint ./src --ext .js,.ts", "lint-fix": "eslint ./src --ext .js,.ts --fix", "clean": "rm -rf dist/" }, + "typesVersions": { + "*": { + ".": [ + "./dist/types/index.d.ts" + ], + "utils": [ + "./dist/types/utils/index.d.ts" + ], + "verify": [ + "./dist/types/verify/index.d.ts" + ], + "tradetrust": [ + "./dist/types/tradetrust/index.d.ts" + ], + "token-registry": [ + "./dist/types/token-registry/index.d.ts" + ], + "document-store": [ + "./dist/types/document-store/index.d.ts" + ] + } + }, + "exports": { + ".": { + "require": "./dist/cjs/index.js", + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts" + }, + "./utils": { + "require": "./dist/cjs/utils/index.js", + "import": "./dist/esm/utils/index.js", + "types": "./dist/types/utils/index.d.ts" + }, + "./verify": { + "require": "./dist/cjs/verify/index.js", + "import": "./dist/esm/verify/index.js", + "types": "./dist/types/verify/index.d.ts" + }, + "./tradetrust": { + "require": "./dist/cjs/tradetrust/index.js", + "import": "./dist/esm/tradetrust/index.js", + "types": "./dist/types/tradetrust/index.d.ts" + }, + "./token-registry": { + "require": "./dist/cjs/token-registry/index.js", + "import": "./dist/esm/token-registry/index.js", + "types": "./dist/types/token-registry/index.d.ts" + }, + "./document-store": { + "require": "./dist/cjs/document-store/index.js", + "import": "./dist/esm/document-store/index.js", + "types": "./dist/types/document-store/index.d.ts" + } + }, "author": "tradetrust", "license": "ISC", "devDependencies": { - "@typescript-eslint/eslint-plugin": "^6.20.0", - "@typescript-eslint/parser": "^6.20.0", + "@commitlint/config-conventional": "^16.0.0", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@tradetrust-tt/tradetrust-cli": "^2.17.1", + "@types/gtag.js": "0.0.19", + "@types/jsdom": "^21.1.6", + "@types/node-fetch": "^2.6.11", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@vitest/browser": "^1.6.0", + "@vitest/coverage-v8": "^1.6.0", + "commitizen": "^4.3.0", + "concurrently": "^6.2.0", + "cz-conventional-changelog": "^3.3.0", "eslint": "^8.56.0", + "ethers": "^5.7.2", + "hardhat": "^2.22.3", + "jsdom": "^24.0.0", + "npm-run-all": "^4.1.5", "prettier": "^3.2.4", + "shelljs": "^0.8.5", "typescript": "^5.3.3", - "vitest": "^1.2.2" + "vitest": "^1.6.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/TradeTrust/tradetrust-core.git" }, "dependencies": { - "@vitest/coverage-v8": "^1.2.2" + "@tradetrust-tt/document-store": "^4.0.0", + "@tradetrust-tt/token-registry": "^4.10.2", + "@tradetrust-tt/tradetrust": "^6.9.5", + "@tradetrust-tt/tt-verify": "^8.9.2", + "dotenv": "^16.4.5", + "node-fetch": "^2.6.1" + }, + "publishConfig": { + "access": "public" + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } + }, + "engines": { + "node": "18.x" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.17.2" } } diff --git a/src/document-store/getRoleString.ts b/src/document-store/getRoleString.ts new file mode 100644 index 0000000..e3ac306 --- /dev/null +++ b/src/document-store/getRoleString.ts @@ -0,0 +1,19 @@ +import { DocumentStore } from '@tradetrust-tt/document-store' + +const getRoleString = async ( + documentStore: DocumentStore, + role: string +): Promise => { + switch (role) { + case 'admin': + return await documentStore.DEFAULT_ADMIN_ROLE() + case 'issuer': + return await documentStore.ISSUER_ROLE() + case 'revoker': + return await documentStore.REVOKER_ROLE() + default: + throw new Error('Invalid role') + } +} +export { getRoleString as getDocumentStoreRoleString } +export const rolesList = ['admin', 'issuer', 'revoker'] diff --git a/src/document-store/index.ts b/src/document-store/index.ts new file mode 100644 index 0000000..e464191 --- /dev/null +++ b/src/document-store/index.ts @@ -0,0 +1,8 @@ +import { + type DocumentStore, + DocumentStoreFactory, + connect as connectDocumentStore, +} from '@tradetrust-tt/document-store' + +export { DocumentStore, DocumentStoreFactory, connectDocumentStore } +export * from './getRoleString' diff --git a/src/greet/greet.spec.ts b/src/greet/greet.spec.ts deleted file mode 100644 index b9b6d91..0000000 --- a/src/greet/greet.spec.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { describe, expect, it } from 'vitest' -import { greet } from '.' - -describe('Greet', () => { - const testPerson = { name: 'john' } - it('should return the greet string for person', () => { - expect(greet(testPerson)).equal('hello john') - }) -}) diff --git a/src/greet/index.ts b/src/greet/index.ts deleted file mode 100644 index 84ee213..0000000 --- a/src/greet/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Person = { - name: string -} - -export const greet = (person: Person) => { - return `hello ${person.name}` -} diff --git a/src/index.ts b/src/index.ts index c1b0e28..d5d5b54 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,5 @@ -export * from './greet' +export * from './verify' +export * from './utils' +export * from './tradetrust' +export * from './token-registry' +export * from './document-store' diff --git a/src/token-registry/connectToTitleEscrow.ts b/src/token-registry/connectToTitleEscrow.ts new file mode 100644 index 0000000..9201174 --- /dev/null +++ b/src/token-registry/connectToTitleEscrow.ts @@ -0,0 +1,25 @@ +import { Wallet } from 'ethers' +import { ConnectedSigner } from 'src/utils' +import { + TitleEscrow, + TitleEscrow__factory, + TradeTrustToken, + TradeTrustToken__factory, +} from '@tradetrust-tt/token-registry/dist/contracts' + +export interface ConnectToTitleEscrowArgs { + tokenId: string + tokenRegAddress: string + wallet: Wallet | ConnectedSigner +} + +export const connectToTitleEscrow = async ({ + tokenId, + tokenRegAddress, + wallet, +}: ConnectToTitleEscrowArgs): Promise => { + const tokenRegistry: TradeTrustToken = + await TradeTrustToken__factory.connect(tokenRegAddress, wallet) + const titleEscrowAddress = await tokenRegistry.ownerOf(tokenId) + return await TitleEscrow__factory.connect(titleEscrowAddress, wallet) +} diff --git a/src/token-registry/index.ts b/src/token-registry/index.ts new file mode 100644 index 0000000..d4bfa6e --- /dev/null +++ b/src/token-registry/index.ts @@ -0,0 +1,39 @@ +import { + TradeTrustToken__factory, + TitleEscrow__factory, + TitleEscrowFactory__factory, + TDocDeployer__factory, + // types + type TitleEscrow, + type TitleEscrowFactory, + type TradeTrustToken, +} from '@tradetrust-tt/token-registry/contracts' + +import type { TypedEvent } from '@tradetrust-tt/token-registry/dist/contracts/common' +import type { DeploymentEvent } from '@tradetrust-tt/token-registry/dist/contracts/contracts/utils/TDocDeployer' +import { + utils, + constants as TOKEN_REG_CONSTS, +} from '@tradetrust-tt/token-registry' + +const { getEventFromReceipt, encodeInitParams } = utils + +export { + TradeTrustToken__factory, + TitleEscrow__factory, + TitleEscrowFactory__factory, + TDocDeployer__factory, + TOKEN_REG_CONSTS, + // utils + getEventFromReceipt, + encodeInitParams, +} +export type { + TitleEscrow, + TradeTrustToken, + TypedEvent, + DeploymentEvent, + TitleEscrowFactory, +} + +export * from './connectToTitleEscrow' diff --git a/src/tradetrust/index.ts b/src/tradetrust/index.ts new file mode 100644 index 0000000..6c26a8f --- /dev/null +++ b/src/tradetrust/index.ts @@ -0,0 +1,74 @@ +// Import everything except utils from @tradetrust-tt/tradetrust +import { + type OpenAttestationDocument, + type WrappedDocument, + type SignedWrappedDocument, + v2, + v3, + SchemaId, + SUPPORTED_SIGNING_ALGORITHM, + validateSchema, + obfuscateDocument, + verifySignature, + signDocument, + getData as getDataV2, + isSchemaValidationError, + wrapDocuments as wrapDocumentsV2, + wrapDocument as wrapDocumentV2, + __unsafe__use__it__at__your__own__risks__wrapDocuments as wrapDocumentsV3, + __unsafe__use__it__at__your__own__risks__wrapDocument as wrapDocumentV3, + utils, +} from '@tradetrust-tt/tradetrust' + +import type { DiagnoseError } from '@tradetrust-tt/tradetrust/dist/types/shared/utils' + +const { + isTransferableAsset, + getAssetId, + isWrappedV2Document, + isSignedWrappedV2Document, + isWrappedV3Document, + isSignedWrappedV3Document, + isRawV2Document, + isRawV3Document, + isObfuscated, + getDocumentData, + getIssuerAddress, + diagnose, +} = utils + +export type { WrappedDocument, SignedWrappedDocument, OpenAttestationDocument } +export { + validateSchema, + obfuscateDocument, + verifySignature, + signDocument, + getDataV2, + isSchemaValidationError, + wrapDocumentV2, + wrapDocumentsV2, + wrapDocumentV3, + wrapDocumentsV3, + v2, + v3, + SchemaId, + SUPPORTED_SIGNING_ALGORITHM, +} + +// utils +export { + isTransferableAsset, + getAssetId, + isWrappedV2Document, + isSignedWrappedV2Document, + isWrappedV3Document, + isSignedWrappedV3Document, + isRawV2Document, + isRawV3Document, + isObfuscated, + getDocumentData, + getIssuerAddress, + diagnose, +} + +export type { DiagnoseError } diff --git a/src/utils/analytics/analytics.test.ts b/src/utils/analytics/analytics.test.ts new file mode 100644 index 0000000..59431c8 --- /dev/null +++ b/src/utils/analytics/analytics.test.ts @@ -0,0 +1,154 @@ +// @vitest-environment jsdom +import { + validateGtag, + validatePageViewEvent, + validateGaEvent, + gaPageView, + gaEvent, +} from './analytics' +import { beforeEach, afterEach, describe, it, expect, vi } from 'vitest' + +const consoleError = vi.spyOn(console, 'error').mockResolvedValue() +const consoleWarn = vi.spyOn(console, 'warn').mockResolvedValue() +const GA_MEASUREMENT_ID = 'G-123456789' +const mockGaEvent = { + action: 'TEST_ACTION', + category: 'TEST_CATEGORY', + label: 'TEST_LABEL', + value: 2, +} + +afterEach(() => { + vi.clearAllMocks() +}) + +describe('validateGtag', () => { + it('warns if gtag is not initialised', () => { + validateGtag() + expect(consoleWarn).toHaveBeenCalledTimes(1) + expect(consoleWarn).toHaveBeenCalledWith('gtag is not initialised') + }) +}) + +describe('validateGaPageView', () => { + it('errors if action is missing', () => { + // @ts-expect-error we expect this error to be thrown + validatePageViewEvent({}) + expect(consoleError).toHaveBeenCalledTimes(1) + expect(consoleError).toHaveBeenCalledWith('Action is required') + }) +}) + +describe('gaPageView', () => { + beforeEach(() => { + window.gtag = vi.fn() as Gtag.Gtag + }) + + afterEach(() => { + // @ts-expect-error the mock does not match the signature + window.gtag = undefined + }) + + it('sends and log gtag page view if window.gtag is present', () => { + gaPageView( + { + action: 'TEST_ACTION', + } as any, + GA_MEASUREMENT_ID + ) + expect(window.gtag).toHaveBeenCalledTimes(1) + expect(window.gtag).toHaveBeenCalledWith('event', 'TEST_ACTION', { + send_to: GA_MEASUREMENT_ID, + }) + }) + + it('errors if there is a validation error', () => { + const mockGaEventError = { action: 123 } + // @ts-expect-error the mock does not match the signature + gaPageView(mockGaEventError) + expect(consoleError).toHaveBeenCalledTimes(1) + expect(consoleError).toHaveBeenCalledWith('Action must be a string') + }) +}) + +describe('validateGaEvent', () => { + it('errors if category is missing', () => { + // @ts-expect-error we expect this error to be thrown + validateGaEvent({ + action: 'foobar_start', + }) + expect(consoleError).toHaveBeenCalledTimes(1) + expect(consoleError).toHaveBeenCalledWith('Category is required') + }) + + it('errors if action is missing', () => { + // @ts-expect-error we expect this error to be thrown + validateGaEvent({ + category: 'foobar', + }) + expect(consoleError).toHaveBeenCalledTimes(1) + expect(consoleError).toHaveBeenCalledWith('Action is required') + }) + + it('errors if value is not number', () => { + validateGaEvent({ + category: 'foobar', + action: 'foobar_start', + // @ts-expect-error we expect this error to be thrown + value: 'STRING', + }) + expect(consoleError).toHaveBeenCalledTimes(1) + expect(consoleError).toHaveBeenCalledWith('Value must be a number') + }) + + it('passes for minimum values', () => { + validateGaEvent({ + category: 'foobar', + action: 'foobar_start', + label: undefined, + value: undefined, + }) + }) + + it('passes for all values', () => { + validateGaEvent({ + category: 'foobar', + action: 'foobar_start', + label: 'Start Foobar', + value: 2, + }) + }) +}) + +describe('gaEvent', () => { + beforeEach(() => { + window.gtag = vi.fn() as Gtag.Gtag + }) + + afterEach(() => { + // @ts-expect-error the mock does not match the signature + window.gtag = undefined + }) + + it('does not fail if gtag is not present', () => { + gaEvent(mockGaEvent as any) + }) + + it('sends and log gtag event if window.gtag is present', () => { + gaEvent(mockGaEvent) + expect(window.gtag).toHaveBeenCalledTimes(1) + expect(window.gtag).toHaveBeenCalledWith('event', 'TEST_ACTION', { + event_category: 'TEST_CATEGORY', + event_label: 'TEST_LABEL', + value: 2, + }) + }) + + it('throws if there is a validation error', () => { + const mockGaEventError = { ...mockGaEvent, value: 'STRING' } + // @ts-expect-error the mock does not match the signature + gaEvent(mockGaEventError) + expect(consoleError).toHaveBeenCalledTimes(1) + expect(consoleError).toHaveBeenCalledWith('Value must be a number') + }) +}) diff --git a/src/utils/analytics/analytics.ts b/src/utils/analytics/analytics.ts new file mode 100644 index 0000000..e5a13a5 --- /dev/null +++ b/src/utils/analytics/analytics.ts @@ -0,0 +1,57 @@ +type GaActionDefault = 'page_view' + +interface GaEventProps { + action: string + category: string + label?: string + value?: number +} + +interface GaPageViewProps { + action: GaActionDefault +} + +export const validateGtag = (): boolean => { + const isInit = typeof gtag === 'function' + if (!isInit) console.warn('gtag is not initialised') + return isInit +} + +export const validatePageViewEvent = (gaEvent: GaPageViewProps): void => { + const { action } = gaEvent + if (!action) console.error('Action is required') + if (action && typeof action !== 'string') + console.error('Action must be a string') +} + +export const gaPageView = (gaEvent: GaPageViewProps, gaId: string): void => { + if (!validateGtag()) return + validatePageViewEvent(gaEvent) + const { action } = gaEvent + + gtag('event', action, { + send_to: gaId, + }) +} + +export const validateGaEvent = (gaEvent: GaEventProps): void => { + const { action, category, label, value } = gaEvent + if (!category) console.error('Category is required') + if (!action) console.error('Action is required') + if (label && typeof label !== 'string') + console.error('Label must be a string') + if (value && typeof value !== 'number') + console.error('Value must be a number') +} + +export const gaEvent = (gaEvent: GaEventProps): void => { + if (!validateGtag()) return + validateGaEvent(gaEvent) + const { action, category, label, value } = gaEvent + + gtag('event', action, { + event_category: category, + event_label: label, + value: value, + }) +} diff --git a/src/utils/analytics/index.ts b/src/utils/analytics/index.ts new file mode 100644 index 0000000..e3fdf16 --- /dev/null +++ b/src/utils/analytics/index.ts @@ -0,0 +1 @@ +export * from './analytics' diff --git a/src/utils/constants/VerificationErrorMessages.ts b/src/utils/constants/VerificationErrorMessages.ts new file mode 100644 index 0000000..fc8aaec --- /dev/null +++ b/src/utils/constants/VerificationErrorMessages.ts @@ -0,0 +1,89 @@ +export const TYPES = { + REVOKED: 'REVOKED', + ISSUED: 'ISSUED', + HASH: 'HASH', + IDENTITY: 'IDENTITY', + INVALID: 'INVALID', + ADDRESS_INVALID: 'ADDRESS_INVALID', + NETWORK_INVALID: 'NETWORK_INVALID', + CONTRACT_NOT_FOUND: 'CONTRACT_NOT_FOUND', + INVALID_ARGUMENT: 'INVALID_ARGUMENT', + SERVER_ERROR: 'SERVER_ERROR', + ETHERS_UNHANDLED_ERROR: 'ETHERS_UNHANDLED_ERROR', + CLIENT_NETWORK_ERROR: 'CLIENT_NETWORK_ERROR', +} + +export const MESSAGES = { + [TYPES.REVOKED]: { + failureTitle: 'Document revoked', + successTitle: 'Document has not been revoked', + failureMessage: + 'This document has been revoked by the issuing authority. Please contact them for more details.', + }, + [TYPES.ISSUED]: { + failureTitle: 'Document not issued', + successTitle: 'Document has been issued', + failureMessage: + 'This document cannot be found. Please contact your issuing authority for help or issue the document before trying again.', + }, + [TYPES.HASH]: { + failureTitle: 'Document has been tampered with', + successTitle: 'Document has not been tampered with', + failureMessage: + 'The contents of this document are inaccurate and have been tampered with.', + }, + [TYPES.IDENTITY]: { + failureTitle: 'Document issuer identity is invalid', + successTitle: 'Document issuer has been identified', + failureMessage: 'This document was issued by an invalid issuer.', + }, + [TYPES.INVALID]: { + failureTitle: 'Document is invalid', + successTitle: '', + failureMessage: + 'This document is not valid. Please upload a valid document.', + }, + [TYPES.ADDRESS_INVALID]: { + failureTitle: 'Document store or Token registry address is invalid', + successTitle: '', + failureMessage: + 'Please inform the issuer of this document that they have misconfigured their Document store or Token registry address.', + }, + [TYPES.NETWORK_INVALID]: { + failureTitle: "Document's network field is invalid", + successTitle: '', + failureMessage: + 'This document has an invalid network field. Please contact your issuing authority for help or re-issue the document with a valid network field before trying again.', + }, + [TYPES.CONTRACT_NOT_FOUND]: { + failureTitle: + 'Document store or Token registry address cannot be found', + successTitle: '', + failureMessage: + 'Please inform the issuer of this document that they have misconfigured their Document store or Token registry address.', + }, + [TYPES.INVALID_ARGUMENT]: { + failureTitle: "Document's merkle root is invalid", + successTitle: '', + failureMessage: + 'Please inform the issuer of this document that the merkle root is invalid, or it may have been tampered with.', + }, + [TYPES.SERVER_ERROR]: { + failureTitle: 'Unable to connect to the Ethereum network', + successTitle: '', + failureMessage: + 'We are unable to connect to the Ethereum network, please try again later. If this issue persists, contact us using the feedback link below.', + }, + [TYPES.ETHERS_UNHANDLED_ERROR]: { + failureTitle: "Whoops! It's not you, it's us", + successTitle: '', + failureMessage: + 'We encountered an internal error and cannot determine the cause, please try again later. If this issue persists, contact us using the feedback link below.', + }, + [TYPES.CLIENT_NETWORK_ERROR]: { + failureTitle: + 'Whoops! There seems to be an error verifying the document', + successTitle: '', + failureMessage: 'Please check your network and try again', + }, +} diff --git a/src/utils/constants/index.ts b/src/utils/constants/index.ts new file mode 100644 index 0000000..2de5f2f --- /dev/null +++ b/src/utils/constants/index.ts @@ -0,0 +1,3 @@ +export * from './supportedChains' +export * from './VerificationErrorMessages' +export * from './network' diff --git a/src/utils/constants/network.ts b/src/utils/constants/network.ts new file mode 100644 index 0000000..2c2078e --- /dev/null +++ b/src/utils/constants/network.ts @@ -0,0 +1,19 @@ +export const networks = [ + 'local', + 'mainnet', + 'matic', + 'amoy', + 'sepolia', + 'xdc', + 'xdcapothem', + 'hederatestnet', + 'hederamainnet', + 'stabilitytestnet', + 'stability', +] as const + +export type networkName = (typeof networks)[number] + +export type networkType = 'production' | 'test' | 'development' + +export type networkCurrency = 'ETH' | 'MATIC' | 'XDC' | 'HBAR' | 'FREE' diff --git a/src/utils/constants/supportedChains.test.ts b/src/utils/constants/supportedChains.test.ts new file mode 100644 index 0000000..38ce737 --- /dev/null +++ b/src/utils/constants/supportedChains.test.ts @@ -0,0 +1,110 @@ +import { CHAIN_ID, SUPPORTED_CHAINS } from './supportedChains' +import { describe, it, expect } from 'vitest' + +describe('supportedChains', () => { + it('should local chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.local] + + expect(id).toBe(CHAIN_ID.local) + expect(name).toBe('local') + expect(type).toBe('development') + expect(currency).toBe('ETH') + expect(explorerUrl).toBe('https://localhost/explorer') + }) + + it('should mainnet chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.mainnet] + + expect(id).toBe(CHAIN_ID.mainnet) + expect(name).toBe('mainnet') + expect(type).toBe('production') + expect(currency).toBe('ETH') + expect(explorerUrl).toBe('https://etherscan.io') + }) + + it('should matic chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.matic] + + expect(id).toBe(CHAIN_ID.matic) + expect(name).toBe('matic') + expect(type).toBe('production') + expect(currency).toBe('MATIC') + expect(explorerUrl).toBe('https://polygonscan.com') + }) + + it('should get polygon amoy chain info correctly', () => { + const { id, name, type, currency, explorerUrl, rpcUrl } = + SUPPORTED_CHAINS[CHAIN_ID.amoy] + + expect(id).toBe(CHAIN_ID.amoy) + expect(name).toBe('amoy') + expect(type).toBe('test') + expect(currency).toBe('MATIC') + expect(explorerUrl).toBe('https://www.oklink.com/amoy') + expect(rpcUrl).toContain('https://polygon-amoy.infura.io/v3/') + }) + + it('should sepolia chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.sepolia] + + expect(id).toBe(CHAIN_ID.sepolia) + expect(name).toBe('sepolia') + expect(type).toBe('test') + expect(currency).toBe('ETH') + expect(explorerUrl).toBe('https://sepolia.etherscan.io') + }) + it('should xdcnetwork chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.xdc] + + expect(id).toBe(CHAIN_ID.xdc) + expect(name).toBe('xdc') + expect(type).toBe('production') + expect(currency).toBe('XDC') + expect(explorerUrl).toBe('https://xdcscan.io') + }) + it('should xdcapothem chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.xdcapothem] + + expect(id).toBe(CHAIN_ID.xdcapothem) + expect(name).toBe('xdcapothem') + expect(type).toBe('test') + expect(currency).toBe('XDC') + expect(explorerUrl).toBe('https://apothem.xdcscan.io') + }) + it('should hederatestnet chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.hederatestnet] + + expect(id).toBe(CHAIN_ID.hederatestnet) + expect(name).toBe('hederatestnet') + expect(type).toBe('test') + expect(currency).toBe('HBAR') + expect(explorerUrl).toBe('https://hashscan.io/testnet') + }) + it('should stabilitytestnet chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.stabilitytestnet] + + expect(id).toBe(CHAIN_ID.stabilitytestnet) + expect(name).toBe('stabilitytestnet') + expect(type).toBe('test') + expect(currency).toBe('FREE') + expect(explorerUrl).toBe('https://stability-testnet.blockscout.com/') + }) + it('should stability chain info correctly', () => { + const { id, name, type, currency, explorerUrl } = + SUPPORTED_CHAINS[CHAIN_ID.stability] + + expect(id).toBe(CHAIN_ID.stability) + expect(name).toBe('stability') + expect(type).toBe('production') + expect(currency).toBe('FREE') + expect(explorerUrl).toBe('https://stability.blockscout.com/') + }) +}) diff --git a/src/utils/constants/supportedChains.ts b/src/utils/constants/supportedChains.ts new file mode 100644 index 0000000..563fbbc --- /dev/null +++ b/src/utils/constants/supportedChains.ts @@ -0,0 +1,201 @@ +import { networkName, networkType, networkCurrency } from './network' +import { + iconEthereum, + iconHedera, + iconPolygon, + iconStability, + iconXDC, +} from '../static/icons' +import 'dotenv/config' + +export enum CHAIN_ID { + local = '1337', + mainnet = '1', + matic = '137', + amoy = '80002', + sepolia = '11155111', + xdc = '50', + xdcapothem = '51', + hederatestnet = '296', + hederamainnet = '295', + stabilitytestnet = '20180427', + stability = '101010', +} + +export type chainInfo = { + id: CHAIN_ID + label: string + name: networkName + type: networkType + currency: networkCurrency + iconImage: string + explorerUrl: string + explorerApiUrl?: string + rpcUrl?: string + nativeCurrency?: { + name: string + symbol: string + decimals: number + } +} + +type supportedChains = Record + +export const SUPPORTED_CHAINS: supportedChains = { + [CHAIN_ID.local]: { + id: CHAIN_ID.local, + label: 'Local', + name: 'local', + type: 'development', + currency: 'ETH', + iconImage: iconEthereum, + explorerUrl: 'https://localhost/explorer', + rpcUrl: 'http://localhost:8545', + }, + [CHAIN_ID.mainnet]: { + id: CHAIN_ID.mainnet, + label: 'Mainnet', + name: 'mainnet', + type: 'production', + currency: 'ETH', + iconImage: iconEthereum, + explorerUrl: 'https://etherscan.io', + explorerApiUrl: 'https://api.etherscan.io', + }, + [CHAIN_ID.matic]: { + id: CHAIN_ID.matic, + label: 'Polygon', + name: 'matic', + type: 'production', + currency: 'MATIC', + iconImage: iconPolygon, + explorerUrl: 'https://polygonscan.com', + rpcUrl: 'https://polygon-rpc.com', + nativeCurrency: { + name: 'MATIC', + symbol: 'MATIC', + decimals: 18, + }, + }, + [CHAIN_ID.amoy]: { + id: CHAIN_ID.amoy, + label: 'Polygon Amoy', + name: 'amoy', + type: 'test', + currency: 'MATIC', + iconImage: iconPolygon, + explorerUrl: 'https://www.oklink.com/amoy', + explorerApiUrl: `https://www.oklink.com/${process.env.OKLINK_API_KEY}`, + rpcUrl: `https://polygon-amoy.infura.io/v3/${process.env.INFURA_API_KEY}`, + nativeCurrency: { + name: 'MATIC', + symbol: 'aMATIC', + decimals: 18, + }, + }, + [CHAIN_ID.sepolia]: { + id: CHAIN_ID.sepolia, + label: 'Sepolia', + name: 'sepolia', + type: 'test', + currency: 'ETH', + iconImage: iconEthereum, + explorerUrl: 'https://sepolia.etherscan.io', + rpcUrl: 'https://rpc.sepolia.org', + nativeCurrency: { + name: 'ETH', + symbol: 'sepETH', + decimals: 18, + }, + }, + [CHAIN_ID.xdc]: { + id: CHAIN_ID.xdc, + label: 'XDC Network', + name: 'xdc', + type: 'production', + currency: 'XDC', + iconImage: iconXDC, + explorerUrl: 'https://xdcscan.io', + rpcUrl: 'https://rpc.ankr.com/xdc', + nativeCurrency: { + name: 'XDC', + symbol: 'XDC', + decimals: 18, + }, + }, + [CHAIN_ID.xdcapothem]: { + id: CHAIN_ID.xdcapothem, + label: 'Apothem Network', + name: 'xdcapothem', + type: 'test', + currency: 'XDC', + iconImage: iconXDC, + explorerUrl: 'https://apothem.xdcscan.io', + rpcUrl: 'https://rpc.ankr.com/xdc_testnet', + nativeCurrency: { + name: 'XDC', + symbol: 'XDC', + decimals: 18, + }, + }, + [CHAIN_ID.hederatestnet]: { + id: CHAIN_ID.hederatestnet, + label: 'Hedera Testnet Network', + name: 'hederatestnet', + type: 'test', + currency: 'HBAR', + iconImage: iconHedera, + explorerUrl: 'https://hashscan.io/testnet', + rpcUrl: 'https://testnet.hashio.io/api', + nativeCurrency: { + name: 'HBAR', + symbol: 'HBAR', + decimals: 18, + }, + }, + [CHAIN_ID.hederamainnet]: { + id: CHAIN_ID.hederamainnet, + label: 'Hedera MainNet Network', + name: 'hederamainnet', + type: 'production', + currency: 'HBAR', + iconImage: iconHedera, + explorerUrl: 'https://hashscan.io/mainnet', + rpcUrl: 'https://mainnet.hashio.io/api', + nativeCurrency: { + name: 'HBAR', + symbol: 'HBAR', + decimals: 18, + }, + }, + [CHAIN_ID.stabilitytestnet]: { + id: CHAIN_ID.stabilitytestnet, + label: 'Stability Testnet Network', + name: 'stabilitytestnet', + type: 'test', + currency: 'FREE', + iconImage: iconStability, + explorerUrl: 'https://stability-testnet.blockscout.com/', + rpcUrl: 'https://free.testnet.stabilityprotocol.com', + nativeCurrency: { + name: 'FREE', + symbol: 'FREE', + decimals: 18, + }, + }, + [CHAIN_ID.stability]: { + id: CHAIN_ID.stability, + label: 'Stability Network', + name: 'stability', + type: 'production', + currency: 'FREE', + iconImage: iconStability, + explorerUrl: 'https://stability.blockscout.com/', + rpcUrl: `https://gtn.stabilityprotocol.com/?api_key=${process.env.STABILITY_API_KEY}`, + nativeCurrency: { + name: 'FREE', + symbol: 'FREE', + decimals: 18, + }, + }, +} diff --git a/src/utils/fragement/fragments.test.ts b/src/utils/fragement/fragments.test.ts new file mode 100644 index 0000000..a86d971 --- /dev/null +++ b/src/utils/fragement/fragments.test.ts @@ -0,0 +1,197 @@ +import { VerificationFragment } from '@tradetrust-tt/tt-verify' +import { interpretFragments, errorMessageHandling } from './fragments' +import { describe, it, expect } from 'vitest' +import { + whenDocumentHashInvalidAndNotIssued, + whenDocumentNotIssued, + whenDocumentValidAndIssuedByDns, + whenDocumentValidAndIssuedByDid, + whenDocumentHashInvalid, + whenDocumentIssuedAndRevokedByEthereumDocStore, + whenDocumentRevokedAndIdentifiedByDnsDid, + whenDocumentIssuerIdentityInvalidDnsTxt, + whenDocumentIssuerIdentityInvalidDid, + whenTransferableDocumentVerified, + whenDocumentAddressInvalid, + whenDocumentNotFound, + whenServerError, + whenUnhandledError, +} from '../../../test/fixtures/verify/fragments/verifier-response' + +describe('interpretFragments', () => { + it('should interpret whenDocumentHashInvalidAndNotIssued correctly', () => { + expect( + interpretFragments( + whenDocumentHashInvalidAndNotIssued as VerificationFragment[] + ) + ).toEqual({ + hashValid: false, + issuedValid: false, + identityValid: false, + }) + }) + it('should interpret whenDocumentNotIssued correctly', () => { + expect( + interpretFragments(whenDocumentNotIssued as VerificationFragment[]) + ).toEqual({ + hashValid: true, + issuedValid: false, + identityValid: true, + }) + }) + it('should interpret whenDocumentValidAndIssuedByDns correctly', () => { + expect( + interpretFragments( + whenDocumentValidAndIssuedByDns as VerificationFragment[] + ) + ).toEqual({ + hashValid: true, + issuedValid: true, + identityValid: true, + }) + }) + it('should interpret whenDocumentValidAndIssuedByDid correctly', () => { + expect( + interpretFragments( + whenDocumentValidAndIssuedByDid as VerificationFragment[] + ) + ).toEqual({ + hashValid: true, + issuedValid: true, + identityValid: true, + }) + }) + it('should interpret whenDocumentHashInvalid correctly', () => { + expect( + interpretFragments( + whenDocumentHashInvalid as VerificationFragment[] + ) + ).toEqual({ + hashValid: false, + issuedValid: true, + identityValid: true, + }) + }) + it('should interpret whenDocumentIssuedAndRevokedByEthereumDocStore correctly', () => { + expect( + interpretFragments( + whenDocumentIssuedAndRevokedByEthereumDocStore as VerificationFragment[] + ) + ).toEqual({ + hashValid: true, + issuedValid: false, + identityValid: true, + }) + }) + it('should interpret whenDocumentRevokedAndIdentifiedByDnsDid correctly', () => { + expect( + interpretFragments( + whenDocumentRevokedAndIdentifiedByDnsDid as VerificationFragment[] + ) + ).toEqual({ + hashValid: true, + issuedValid: false, + identityValid: true, + }) + }) + it('should interpret whenDocumentIssuerIdentityInvalidDnsTxt correctly', () => { + expect( + interpretFragments( + whenDocumentIssuerIdentityInvalidDnsTxt as VerificationFragment[] + ) + ).toEqual({ + hashValid: true, + issuedValid: true, + identityValid: false, + }) + }) + it('should interpret whenDocumentIssuerIdentityInvalidDid correctly', () => { + expect( + interpretFragments( + whenDocumentIssuerIdentityInvalidDid as VerificationFragment[] + ) + ).toEqual({ + hashValid: true, + issuedValid: true, + identityValid: false, + }) + }) + it('should interpret whenTransferableDocumentVerified correctly', () => { + expect( + interpretFragments( + whenTransferableDocumentVerified as VerificationFragment[] + ) + ).toEqual({ + hashValid: true, + issuedValid: true, + identityValid: true, + }) + }) +}) + +describe('errorMessageHandling', () => { + it('should return all errors when fragments have multiple errors', () => { + expect( + errorMessageHandling( + whenDocumentHashInvalidAndNotIssued as VerificationFragment[] + ) + ).toStrictEqual(['HASH', 'IDENTITY', 'ISSUED']) + }) + + it('should return hash error when fragments integrity invalid', () => { + expect( + errorMessageHandling( + whenDocumentHashInvalid as VerificationFragment[] + ) + ).toStrictEqual(['HASH']) + }) + + it('should return identity error when fragments identity invalid', () => { + expect( + errorMessageHandling( + whenDocumentIssuerIdentityInvalidDnsTxt as VerificationFragment[] + ) + ).toStrictEqual(['IDENTITY']) + }) + + it('should return revoked error when fragments indicate revoked (issued and revoked with ethereum doc store)', () => { + expect( + errorMessageHandling( + whenDocumentIssuedAndRevokedByEthereumDocStore as VerificationFragment[] + ) + ).toStrictEqual(['REVOKED']) + }) + it('should return revoked error when fragments indicate revoked (identified by DNS-DID but revoked with ethereum doc store)', () => { + expect( + errorMessageHandling( + whenDocumentRevokedAndIdentifiedByDnsDid as VerificationFragment[] + ) + ).toStrictEqual(['REVOKED']) + }) + + it('should return invalid address error when fragments contain invalid address', () => { + expect( + errorMessageHandling( + whenDocumentAddressInvalid as VerificationFragment[] + ) + ).toStrictEqual(['ADDRESS_INVALID']) + }) + + it('should return contract not found error when fragments contain contract not found error message', () => { + expect( + errorMessageHandling(whenDocumentNotFound as VerificationFragment[]) + ).toStrictEqual(['CONTRACT_NOT_FOUND']) + }) + + it('should return server error when fragments contain server error', () => { + expect( + errorMessageHandling(whenServerError as VerificationFragment[]) + ).toStrictEqual(['SERVER_ERROR']) + }) + + it('should return unhandled error when fragments contain an error that was not handled', () => { + expect( + errorMessageHandling(whenUnhandledError as VerificationFragment[]) + ).toStrictEqual(['ETHERS_UNHANDLED_ERROR']) + }) +}) diff --git a/src/utils/fragement/fragments.ts b/src/utils/fragement/fragments.ts new file mode 100644 index 0000000..0d1c23e --- /dev/null +++ b/src/utils/fragement/fragments.ts @@ -0,0 +1,78 @@ +import { + VerificationFragment, + isValid, + utils, + OpenAttestationEthereumDocumentStoreStatusCode, +} from '@tradetrust-tt/tt-verify' +import { TYPES } from '../constants/VerificationErrorMessages' + +interface interpretFragmentsReturnTypes { + hashValid: boolean + issuedValid: boolean + identityValid: boolean +} + +const certificateRevokedOnDidIdentified = ( + fragments: VerificationFragment[] +) => { + const didSignedDocumentStatusFragment = + utils.getOpenAttestationDidSignedDocumentStatusFragment(fragments) + return ( + didSignedDocumentStatusFragment?.reason?.code === + OpenAttestationEthereumDocumentStoreStatusCode.DOCUMENT_REVOKED + ) +} + +export const errorMessageHandling = ( + fragments: VerificationFragment[] +): string[] => { + const { hashValid, issuedValid, identityValid } = + interpretFragments(fragments) + const errors = [] + + if (utils.isDocumentStoreAddressOrTokenRegistryAddressInvalid(fragments)) { + // if the error is because the address is invalid, only return this one + return [TYPES.ADDRESS_INVALID] + } + if (utils.contractNotFound(fragments)) { + // if the error is because the contract cannot be found, only return this one + return [TYPES.CONTRACT_NOT_FOUND] + } + if (utils.serverError(fragments)) { + // if the error is because cannot connect to Ethereum, only return this one + return [TYPES.SERVER_ERROR] + } + + if (!hashValid) errors.push(TYPES.HASH) + if (!identityValid) errors.push(TYPES.IDENTITY) + if (!issuedValid) { + if ( + utils.certificateRevoked(fragments) || + certificateRevokedOnDidIdentified(fragments) + ) + errors.push(TYPES.REVOKED) + else if (utils.invalidArgument(fragments)) { + // this error is caused when the merkle root is wrong, and should always be shown with the DOCUMENT_INTEGRITY error + errors.push(TYPES.INVALID_ARGUMENT) + } else if (utils.certificateNotIssued(fragments)) + errors.push(TYPES.ISSUED) + else if (!hashValid && !identityValid) { + // this error is caused when the document is invalid, only keep this one + return [TYPES.INVALID] + } else { + // if it's some unhandled error that we didn't foresee, only keep this one + return [TYPES.ETHERS_UNHANDLED_ERROR] + } + } + + return errors +} + +export const interpretFragments = ( + fragments: VerificationFragment[] +): interpretFragmentsReturnTypes => { + const hashValid = isValid(fragments, ['DOCUMENT_INTEGRITY']) + const issuedValid = isValid(fragments, ['DOCUMENT_STATUS']) + const identityValid = isValid(fragments, ['ISSUER_IDENTITY']) + return { hashValid, issuedValid, identityValid } +} diff --git a/src/utils/fragement/index.ts b/src/utils/fragement/index.ts new file mode 100644 index 0000000..c29e81b --- /dev/null +++ b/src/utils/fragement/index.ts @@ -0,0 +1 @@ +export * from './fragments' diff --git a/src/utils/gasStation/index.ts b/src/utils/gasStation/index.ts new file mode 100644 index 0000000..09fa4fc --- /dev/null +++ b/src/utils/gasStation/index.ts @@ -0,0 +1,103 @@ +import { BigNumber, ethers } from 'ethers' +import fetch from 'node-fetch' + +export type GasStationFunction = ( + gasStationUrl: string +) => () => Promise +export type GasStationFeeData = { + maxPriorityFeePerGas: BigNumber | null + maxFeePerGas: BigNumber | null +} + +export const gasStation: GasStationFunction = + (gasStationUrl: string) => + async (): Promise => { + try { + if (!gasStationUrl) return undefined + const res = await fetch(gasStationUrl) + const data = await res.json() + return { + maxPriorityFeePerGas: safeParseUnits( + (data as any).standard.maxPriorityFee.toString(), + 9 + ), + maxFeePerGas: safeParseUnits( + (data as any).standard.maxFee.toString(), + 9 + ), + } + } catch (e) { + throw new Error('Failed to fetch gas station') + } + } + +const safeParseUnits = ( + _value: number | string, + decimals: number +): BigNumber => { + const value = String(_value) + if (!value.match(/^[0-9.]+$/)) { + throw new Error(`invalid gwei value: ${_value}`) + } + + // Break into [ whole, fraction ] + const comps = value.split('.') + if (comps.length === 1) { + comps.push('') + } + + // More than 1 decimal point or too many fractional positions + if (comps.length !== 2) { + throw new Error(`invalid gwei value: ${_value}`) + } + + // Pad the fraction to 9 decimal places + while (comps[1].length < decimals) { + comps[1] += '0' + } + + // Too many decimals and some non-zero ending, take the ceiling + if (comps[1].length > 9 && !comps[1].substring(9).match(/^0+$/)) { + comps[1] = BigNumber.from(comps[1].substring(0, 9)) + .add(BigNumber.from(1)) + .toString() + } + + return ethers.utils.parseUnits(`${comps[0]}.${comps[1]}`, decimals) +} + +export const scaleBigNumber = ( + wei: BigNumber | null | undefined, + multiplier: number, + precision = 2 +): BigNumber => { + if (wei === null || typeof wei === 'undefined') { + throw new Error('Wei not specified') + } + const padding = Math.pow(10, precision) + const newMultiplier = Math.round(padding * multiplier) + + const newWei = wei.mul(newMultiplier).div(padding) + return newWei +} + +export const calculateMaxFee = ( + maxFee: BigNumber | null | undefined, + priorityFee: BigNumber | null | undefined, + scale: number +): BigNumber => { + if (maxFee === null || typeof maxFee === 'undefined') { + throw new Error('Max Fee not specified') + } + if (priorityFee === null || typeof priorityFee === 'undefined') { + throw new Error('Priority Fee not specified') + } + if (scale === 1) { + return maxFee + } + + const priorityFeeChange = scaleBigNumber(priorityFee, scale).sub( + priorityFee + ) + return maxFee.add(priorityFeeChange) +} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..6e0f9e6 --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,9 @@ +import * as CONSTANTS from './constants/VerificationErrorMessages' +export * from './fragement' +export * from './analytics' +export * from './constants/supportedChains' +export * from './provider/provider' +export * from './wallet' +export * from './gasStation' + +export { CONSTANTS } diff --git a/src/utils/provider/index.ts b/src/utils/provider/index.ts new file mode 100644 index 0000000..6f29423 --- /dev/null +++ b/src/utils/provider/index.ts @@ -0,0 +1 @@ +export * from './provider' diff --git a/src/utils/provider/provider.ts b/src/utils/provider/provider.ts new file mode 100644 index 0000000..3db11d8 --- /dev/null +++ b/src/utils/provider/provider.ts @@ -0,0 +1,74 @@ +import { providers } from 'ethers' + +export type providerType = 'alchemy' | 'infura' | 'jsonrpc' + +export interface ProviderDetails { + network?: string + providerType?: providerType + url?: string + apiKey?: string +} + +/** + * Generate Provider generates a provider based on the defined options or your env var, if no options or env var was detected, it will generate a provider based on the default values. + * Generate Provider using the following options: (if no option is specified it will use the default values) + * @param {Object} ProviderDetails - Details to use for the function to successfully generate a provider. + * @param {string} ProviderDetails.network - The network in which the provider is connected to, i.e. "homestead", "mainnet", "sepolia" + * @param {string} ProviderDetails.providerType - Specify which provider to use: "infura", "alchemy" or "jsonrpc" + * @param {string} ProviderDetails.url - Specify which url for JsonRPC to connect to, if not specified will connect to localhost:8545 + * @param {string} ProviderDetails.apiKey - If no apiKey is provided, a default shared API key will be used, which may result in reduced performance and throttled requests. + */ +export const generateProvider = ( + options?: ProviderDetails +): providers.Provider => { + if (!!options && Object.keys(options).length === 1 && options.apiKey) { + throw new Error( + 'We could not link the apiKey provided to a provider, please state the provider to use in the parameter.' + ) + } + + const network = + options?.network || process.env.PROVIDER_NETWORK || 'homestead' + const provider = + options?.providerType || process.env.PROVIDER_ENDPOINT_TYPE || 'infura' + const url = options?.url || process.env.PROVIDER_ENDPOINT_URL || '' + const apiKey = + options?.apiKey || + (provider === 'infura' && process.env.INFURA_API_KEY) || + process.env.PROVIDER_API_KEY || + '' + + if (!!options && Object.keys(options).length === 1 && url) { + return new providers.JsonRpcProvider(url) + } + switch (provider) { + case 'infura': + return apiKey + ? new providers.InfuraProvider(network, apiKey) + : new providers.InfuraProvider(network) + + case 'alchemy': + if (apiKey) { + return network === 'sepolia' + ? new providers.JsonRpcProvider( + `https://eth-sepolia.g.alchemy.com/v2/${apiKey}`, + network + ) + : new providers.AlchemyProvider(network, apiKey) + } + return network === 'sepolia' + ? new providers.JsonRpcProvider( + `https://eth-sepolia.g.alchemy.com/v2/`, + network + ) + : new providers.AlchemyProvider(network) + + case 'jsonrpc': + return new providers.JsonRpcProvider(url) + + default: + throw new Error( + 'The provider provided is not on the list of providers. Please use one of the following: infura, alchemy or jsonrpc.' + ) + } +} diff --git a/src/utils/static/icons.ts b/src/utils/static/icons.ts new file mode 100644 index 0000000..f984bd5 --- /dev/null +++ b/src/utils/static/icons.ts @@ -0,0 +1,14 @@ +export const iconEthereum = + 'data:image/octet-stream;base64,UklGRhgNAABXRUJQVlA4WAoAAAAgAAAAGwAAGwAASUNDUEgMAAAAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t//9WUDggqgAAADAFAJ0BKhwAHAA+dTKVRiSjIiEwCACQDolpAAPkHk7DMrMXxNzwHIDjv+DHqFtqawAAAP70z2O5mt25znLF/PYXVnT+W4memsavhE+cY7ijwK4BKFVmNV4S+9B8T3H1TELWZXYrLpmamqBcD8vJDP/PiAlRu49H/+Gv8Kni132i35Zbq/s26cQ9V4lsRL1clPTBeuvbpDtGfs9xj+NJVQ66MUaTjioAAAAA' + +export const iconPolygon = + 'data:image/octet-stream;base64,UklGRuIDAABXRUJQVlA4WAoAAAAgAAAAGwAAGwAASUNDUJACAAAAAAKQbGNtcwQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAAADhjcHJ0AAABQAAAAE53dHB0AAABkAAAABRjaGFkAAABpAAAACxyWFlaAAAB0AAAABRiWFlaAAAB5AAAABRnWFlaAAAB+AAAABRyVFJDAAACDAAAACBnVFJDAAACLAAAACBiVFJDAAACTAAAACBjaHJtAAACbAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABwAAAAcAHMAUgBHAEIAIABiAHUAaQBsAHQALQBpAG4AAG1sdWMAAAAAAAAAAQAAAAxlblVTAAAAMgAAABwATgBvACAAYwBvAHAAeQByAGkAZwBoAHQALAAgAHUAcwBlACAAZgByAGUAZQBsAHkAAAAAWFlaIAAAAAAAAPbWAAEAAAAA0y1zZjMyAAAAAAABDEoAAAXj///zKgAAB5sAAP2H///7ov///aMAAAPYAADAlFhZWiAAAAAAAABvlAAAOO4AAAOQWFlaIAAAAAAAACSdAAAPgwAAtr5YWVogAAAAAAAAYqUAALeQAAAY3nBhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbcGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltwYXJhAAAAAAADAAAAAmZmAADypwAADVkAABPQAAAKW2Nocm0AAAAAAAMAAAAAo9cAAFR7AABMzQAAmZoAACZmAAAPXFZQOCAsAQAA0AYAnQEqHAAcAD51NJZIJKKiISgIAJAOiWwAnTKEdJbM1CAbylWADni89c4WxZmtFIZBTwVdNi7B/6pMFDSAAP6cndoPasLV/veLzZaSG+2mxKD2fk7/4J3+Z2GPkSYUHZlR0TsNSACB4Ufuttmf2MK9zqJ2TOLvtgN/ffP+c4jf/0JYocrS5HDSjZJ/5w4r7MaPkV5xVL/WKStL3v+f+1/gjVXkgGLN3OFVZlH5GcDKHsuZkryL3BvMdAEjCnkCyYaqZt/X/N4v03hkpt3+vLxOeIYNT3f4r0xR/2pbc/6PPyM+r+pgJDlri+mHxIk9+PsxEW8gi2xTCt42Moyy5KMqf8G9R8HkT4goyfBzf1NC02SSSxrt+Xli8+Ro//H/SzA0fbjp5Dn8gAAA' + +export const iconXDC = + 'data:image/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAAH7+Yj7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAADIdJREFUeNpi3LFtEwMDAwMDIyPD0v//Ge4yMDDUMe7Ytokhd8r5/wxQ8PfffwbG/Xu2Hk7rO2Njoa/IcPD0bQZ2NhYGxl3bN6dnTz4349bWOgafrBkMtx6+YmDcsW0TQ87k8/8ZGSHav/74ywAAAAD//2KEWcTGyvT01+9/0gwMDAyMh/Zu/Z/cewZmD8PkHMNURlWvxv8MDAwMqSFWDLPXHGP49/8/A1wQBn7/+cfAuHP7poU5k8/HIWnnAAAAAP//glvEycb8P6rtJAMXBzNc18/ffxlmFZpsY2Bg8GbcsW0TY9akc/+YmSDubMr2ZqibupUh3t+cYeHGkwwMDAwMekr8EP/8+PXvf+msixBTfv1heLi7iUHNuwkePHOLTe4z7ti2iSG598x/LnaIlT9+/WHgYGNh+PLtJwMPFzsDAwMDg5+lFAPcjQwMDE2TN9ypvfrgIwMzMyPDj1//GDqSdRlEBdgZGRgYGAAAAAD//2ySPUhCYRSGn+96vfSnYDYIDWEgDVEURX9TS+Rai1PUYERDUdCoLQ6F4FDU0uImRAhRGEIUSUNBEgTRELUEDUWKaKKZ3q/p3iQ64znveTnn4a0XAoxaVSUqpcxXa9ILZI2BIeyMX74+X9y9mxtSQmiuG4dN+3Wsv/FvLU958LS3CLF/EJeB6D0AY31uUuknXG123jIFVItiAA8K13hQ2ppU0+ExsU7+s8ygL2z2VqY9iNPkcWhx6zZg5OI6toZ3YZdcoQTAzEQHQ12tQgz7NmS2UAEgXywz0uvmcHveBA6ws9SPSJ0lPvyRtBOgWKrQ3KhRrelYVQUpzVBMiuTJEbHzF3n1kPn3673VAb6+dWECVy1CzoZvaNAUdB2cdo1Nf0+uWpMOgB/OyS6kqTiMw8/52NkHW1QgFGpBBQ1coAgrKgrqsotCL1KKuuomiETIRuFdepFdGIGBFJFeDOpuhVr0dRHICqSUWLsIcyTLConltnPOzv/8vVpsnrDouX7eHy/83ndtM1WSIb/Wlf64zOTbr3z5XqLiSPw+lV2NYToONrJjaxjTFu3ATO1gbWAsYGhzZ6+/wdBV/gVHuHQf2cahPQ3TwP7fgbqqZC7fnY0Wig7/Q9F0SF7dR9kSivJkMnVu6EF2dGGp5BF/FU3yrwbp7LnD9Pt5Fl8OcCYxRnrus8ctWYLklb1SmZpIXfTp6nDv7XeULOER7YrD67FemrZspOX4ABXH65RtQaIrSrQ5sqg8f/o4c2l0Nvpzxab61rUcaNvJvWunyOWX2bQhROzEIH5D93hCSG5daEOZmkipmYWCGHn0qU6QUjLSf5LW3U3Eu4fQdY3hvg6OHY7RfLSfYMBX55u2y3givlJtuWE+X/x242EW9Q9b/g3bcbnfFxemLfS6O1RVJf1sZimefJEjYGjrhriuJBLycfN8K2VbbAdy6x02wHjQr502LcGPgoUrYXPEIBzUsSpu1nVlJ/Bh7dAqpeUfU1UZxvHPe84993QVRcV5FwONDJeuaXOBiAscjJhzknMsJraVMtqaN3Uxp1Sz2KyFLhvNdMJ0zoLhWpsCISDCyEqb3LRV/BPT5QQVFsWve++558fbH24sOBe7vX8/7/d9nn3f5/M8jxP0AQFVEUWqItIAw3Lkr44jTwDts12KJbhG8yg3JsKWduH7AW72/81YyEQAi+Z72fDcYrZkJWNZzkUJW/9LsMcwnZz9tT9jWhKPGtugSNRmbfpCKopXEDLspFg0RhEMdgQfPvnVt/fi7uWo5XDuQCZhw04Exv4t2NgRfFjS9MMg4n/+GsuWnN2fQThqT42BOZGoPbnvxC20ODObedavSqI0b+lnwF7R2d7cs+fzWzmm5bh6uGr3Zk6ev8rIaAjTsinbtp5L3/UxPDIxvZcNmy8PZhIxHSEutzXLsk960TV3dm+WvEhgRy5pLx2icMMq6qq2k5r/HnN9uiu2YK2fouzkTHHk+BeyrvV2zFImQgYDXYfZV/01NQeL2fh6DYPDo7Mysb5yXYvobG8Zu/rL8LzTl+7gizFOFyXO5XpDBb/136cocApVVVymrEhJoHL7SiJROyDaWpsWzNHVofquu9qVn4ZcLqf4F9B1Zg/3h0fJfvUYmmf6owk+D0ffWI1ly01Am6g72yg/ONc3bQeaKiNkMND9IdWnL3OgrICNO2sYHHKXbEQdCjP8FOek/CFami/Kt47fjNkVu7ZmUbEzn2UFh+io3U36U0tI31TFE7rmik1O8vFO6bNnRHdny/XXqm+sm+myadncaa8io+QIoxMRQpEo964cpvz9Bnp6+12C5ZufZnVaYqpoa23yX+v780FD110XsSfD0ak9TAgYnzTwaipezeNyuPHdLEKG/Wgj0L3KwK6jvcmzweCxoJWSwMvprFw6Lxu4NgUHXVNk6Uc/kuDzxC0mpSR3zRJeyU3tllLmzcSXX9eUB+XHgnEBYjJis3fbMzy/fGFQSvnCbDzUdE0ZD/7+l177zW1Cho3Xo6CIR8ulaUsEUJjhZ0f+MsKG/TbwaTwjIE9TlfOqKhaPjEcZD1n4dJWk+V4UAYbpfAxUxrr4Dy1mGltVFUXh79z77r1vaF8LlLFQGQy04lDAqATFSFAhyBCwBqWGYCQxRkzkB5MgUUQMRiImKMQQQCAFokBbU4pUQDAlYipDA4hVtFDKUCmFwnvvTuf4o0IYSvsA2X/vj7Pu2evstdZuSVOaq1wgX9fESCOg9RYCHFfSGPNojHvYrn/VNIZMnWjEICUYIKALXF+d9Dy5RcEKoDzZA1sDGAJm6ZqYahlauPpsjF0H66ioOk9dg4NUTbKjawLthkYqFFI2ZQ5fKoKmRp+uqQzt35HcXukoiLueXAB8BPi3C3CAEHwbsvT7Kn5vYO0P1dSeSxAytTsyKjd5NdsnLWIw8bnuPJHTlrjt71UwCjjTGsAMIdhtGXr2hp0nKCyvJfg/gWqufKlwPcmkYT0Y2q8DMdsvAF65FcC8kKlvqKg6z+JNVQT0m9t2r8rxJO2jFu/m55AaCtR5vnoEOHUtwFfDlv712u3HKd5TSyTY8rARAmzHx3GbAkPIMgjoGlfCtwBcX5KwXQDCQbPVLijVNAVnjs/m/syURtuVDwHVorSkqHfY0g8Wltda63YcJxxsfRLajseAvt3Y+NnkJk9a/AvTPt1MasRCKYglHJbMfokxQx7mWM05Rk9ZRizu3CS+zYEUAmZPyKFr+/Ah15P9RdnW4uVnG+zX5q05jOPJpNvq+xLTDLBp8WSye3Tk58q/yXtnOSlhi+Ilb9CrWwaFOyp5c956wiGTZMniepIuGSHmTMhB18QssW1rcc25C07mmrJq9v/ZgBHQSFakFBCLO3w+80XGPZvLhUtxzECAUNDgkxVlLFq1ndRIMGku2m7TBT3apw15g7vSLmqeusLBHCH4MGTqY+obHa2wvJbdlf9c5VtrfKy/EGPRtLG8OvKxpuhfsIv3vyihbVr4asq/dScU7dJMxj+TRb9e6WgaZxOO/BJYCpwWpSVF0w1dTInZMnP7/rOU/XqG+kaHW+1HbuRM3HZYNvdlRgzue923pet38/6XW5K6QV8qbFeSkxUlb3AmOVlREo4skUq9J7Z//93KozWNExcUHME09KS54vsSw9DZtHgyOT07Ub7/L0a9tZQ3xw/mg7dGALBuSwVTF268aoqS3TUYAY35kx4kPcWsEKUlRdkhUz/wVckxc+eBumatcHOvOKtzG4qXvEF6aohVRXuZsaiQ1IjF5bjN0CeyWTk/HyEEpT8dZvLcAoJBI6mfj9k+Q3I78PrwHsQdf6IoLSlCCN5WisXz1x7heF2sxTQmpSISNhk7NJc20RD7jtRQtufodaHecX26Z7Zl/PABKKWorDpFye5DmAG91SCWkWbyXv4DWKa+UUo17tq4uEAqZnxc8BvHTl9uNvrcazXp1CbInPwHsAztR1+qIYC8UYvzw5a+enP5SdbtOEHYCnCv1U4BsYRP3tNdGfdkJjHbXwhMb8nNpOiaKNWEGLS6rJptFWewTK3ZpdDdlOtJpFKMHpjJ2KcycT11UCr1PHA6WT/YVgjWhkx92O81l/hm1wkOVTcCCtPQbttIeL7CcSWRkM6gvhm8MLALGVGTuO0XAq9du6a4E0f9uBDMtQx9uC8VtefiHDl+kT9OXuJ0fYKLMY+E4yP/01IjIEgJBmgXNcnqECa7W5SenSOkRQxcX8VdT64DFgBVd+uob1WdgYHAICF4UBOiixCkCyECKJREJZSkTipV/d9CdhewD4jf7kH/DgCwyUXgh54TRAAAAABJRU5ErkJggg==' + +export const iconHedera = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAAB2CAMAAAAqeZcjAAAAb1BMVEX///8XGRwAAACRkZJ1dnfz8/MUFxoAAAkOEBQ+QEISExW2t7fj5OQTFRkFCQ4AAAYfISRubm/IyMjT09T5+fl7e3ydnZ4vMDKBgYLq6uqkpKWtra7Z2dlcXV5QUVNFRkc2NzgmJyplZma/v8CIiYnq/nZ7AAAF4ElEQVRogcVb2aKCIBCtKY0yQc2tRc3q/7/xZrKp4BZ5561EjrMyDMNqNZGs2/Oy2Wb70luvvTLJ/dfFOVlTZ5lENyfaw5sIRq69rshGeFf9k/iX008gwyBNMBBUw7XIPmAAz38a5jo8pQnAQQnJySVQPgwin+MCwO2FFMhJejMCeow8QGMwKTKQx/dqPkYjGRVkE/gS2EoBuvxgAjLh7mdh8I/zUa+oDYreMHYexU5wqigInPiVlRV2y9x2sJkJesyhOdfbSYqNylTDU5xBWxlQBnNQY8AtzO0z7Bl/enlA5O90YTsZ1MpkVm2ArBezpsBvsgzJRGcKvJ0MitORFmLFJRxkU7hOQb1InmqDtzmPf9W6JhLHNqTjX91IAibwmgD6Ab54kgOAP6ycmiLxlgvZjFh3jiRpQT4qTIdbgYoPk3QjKEhgIq4vvzA71rw/nisK9sO4gld3dqD5kCMEDcWQfoVeETy/QX3nIiUIsfUPjfnInff1umnlAvfRN/AqxhUm0gShsT7/vfE1bKTVD5LQmT5ehQnivI718SHi/Lqg8wruOvhuLhF7iEnVAxw2AKGJ4bCXCsJE+FI9tlgEd4nRTNsquepU83IRg2MSVTJUdO8+DDjqhKVqHHHtKcLena7OuDCNKpkztI3mQp/YWBGcnEcxLr2w4jy7dP8O71S94LfGl1T+EHff8gG/E9UReeCxBIxV8e3J2W0yxWIxVsSJWjUIDcPmRGccTMy7BruCWQVPGdY+apJVz+2uu4/ObLfYYJdplvjdN1Z7NNKvjvUs9kER42IFQrhHim8xCmsltTxdW9gm0zhRpvFGYDm7ku8+cA+zhmAtGqvQnRntkeobZ8rZzMC+k2/KG8uVmEFpbNUQrMV8iOU3RT2vm6hnMwS78mtVumX9mMlYFaBMwgZNKbO8TZd1mIJd0YSdui6NQqrVsAE7mDafB2CjHZVy9SNc222HUsJifzNAKe6HZeHhk2Wc5B89sFUZYYDW/bAhlTJUayN1H5voZLefUAzrhV3lSCjXrzM7TawwCksD5KHyVLry69xntUoOfSAKWG2+S13IBksIXGuo5rg906LZO/YzZ8PaZMkc7IpmE28WGeO2biiHRbsBwoOwOU1ULiyJRfshWJRtB8gf8Fu+ASQv5j96QzYXpbgpY58tgyQahP06JvPwj7IVjWg95RGDsDQ8unu2Curd1iQss9+Swyr2EOZhWfz3WPrWUwo1CcvqtgvDsp39fwl5uySsMKl/ciAaLmDhcMGCo74o+JPg+E9LAdOyYi/chDW78DGFkGWXeZ7UaGsEP0lqeAqnddyfpHAsTGFtXd14wvrZjVAPcne/h5XT83/YjFTLznJbr6DB4OIbTe/za7FtNam9lpahjuhfighLl0w8+vjSb8umC0Ss6sikvHA5bNHi34EX//6r1LlkYdeV3HS5MnajBYR9y8JF+58fUURqcQ4cyOzwuAMZb+KBTP/x09PPXyOPn7Ls2pWXOH7quAp7gvWZ62zSH7ZJR4v6/cFMEkeLCg2KT5rZWaKj3oNU6dhYm97MIkuc+Cvn5eZm9pA8Zzt49SH5j1oCpEk1I8I76377RQOEfrdzQ6bbPaQ2k56Q7vBuI9ib0K9ogtIptiapladcrpXHbOOSRzjqQOOSrA27XzBDNKlNy1hTmj+tKa16gePig75c1UtPuQWvGGedqXhlZsPhdnrD4apKaUVfJoZ0antlPK+9stqNzW8mvdylj3anmeWpbLTOwvjW2UajOiYTu5G6jcLOjEbh+3TDuHTaonuvK4RB2moFR/PyFFUT+H7zVOjZCjYFNFux36wmc7MFx24Bf1reoYji6zMIqo735zWO8qqW0q7mkG86Ua0NtIGrclejwV91jQTD9osG/zed0+nXGXbw+P4CxzGdeHkD+2ZujZzjPZBRhUcbG7uqUlEYbEsgA8J2MXiZY/hKkBX4pdp+KCSsH47JRFfQ6Rrd69sp7UtXXhYHppJNJVm357VzxWwyl3+oR2ZAbpghWQAAAABJRU5ErkJggg==' + +export const iconStability = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAACNCAYAAACKXvmlAAAAAXNSR0IArs4c6QAAGCZJREFUeF7tnWmQVNd1x3/nvu6efV8Zhhk2aUZIICQUtESS0RLJyLJWQHYcu0q2k6pE5XzyB1eqklDlr/ngcsqpcpw4TpzYkhDaBdoQaEELAhmQBIhNwyqGbZi913dSt3sGIQRM9/Qy3TPvVfFh6Hffcu7v/c+559z7nuBtCQuoyvId+Lubh5vEmGWKfEfQJ7SoaFXT53SvmkcEEfXMBeIZAZaqFg2fCU4T1yx2HZah3AnUgPSArhOXpzDuByXVxV+sFQlNdZtNaWhWqpq1xwcbiv3FizHuUlTvAJkF6j8LhhJF+FxU1ilmjS/ibLqlkRMrRdypCs+UheZG1ZKiE8FFbsDcLy63A5chlHNh9VWUAWCPiK5HnWdDNb4t74kMT0Vwph40qmbJmWCbq+YRER4S6FDisDhJABATGFDYrWpWG/E9saGag0wx1Zk60KjKkhOU4QstUTF/j+pNCKUXUZax+LHKM4TIu6j7r9Hj/Rs2dtQPTJVAedJDY+OWD/ZSPtAY6RSX74rqMoQWwIxFRhK/27jmqKCrozH3jxVSsvP6WgYme7wzeaFRNUuhfKgv0kFM70R4EGU+QnESMKS6ix1RfYzyDI685o/5d79eQ/9kdVuTEpp5n2qgvik8R43cYdB7MHIdqvXjdEXJAqSgpxD50HVljbi67mR3YN+OKyWc7AEKZb9JB831p7SyKBZeKn7zMLiLEWlGtShnHWLzOKrHwGxS111dRmDt2jrpy9n5c3CiSQKNytI9BIZqIgtw+FvUvUtFGgRsvmUi7lEVIqJ6ApHXiMm/lfb4t6+9jDAUflZ5Igya0Wch7ooaQu345CFRfRQjc5McPmf0Oi5xsBjCHsX8jnDs6ZMnig4UussqWGgWbd7sr5q3qNENhm9TeAThZqBqgpRlLABtzaoX5R2BJ0xxYH3vji3Ht1x3XWSshvn4e8FBs0TVxyD1bmRoMfjvF9XbEGYAvnw08HnXFEU5pCLrIfKc8ZduooyTG0SiBXDtZy+xcKBRlaWnqRg20WuV2H2o3IUwGygpJIOPXOswyn5EXxX0+RK3+KO1tfEhekFU0QsDGlVz8/HQTOPIcjHygKLzJFEnykSCbqKYc1UZENgB5plYJPbUO41FXYWQ28lraJarOscGqDXh8BKEH6qwGKiWwoblK5Aq2KzyGVE+EOP8NuY4bzaXc3qVSGyiaB7rvPkJzYgrGgpEFxF1f4DyAJK3Qe5YNk72d1vP6kV4Fsz/lLq+LfnqsvILGlW5q5vSsDN0hfp896nq/YhcMZJvSdb4Bb1fPL9jXZbL88aR5/xB/65XmxnKp/xO3kBj8y3TGkMzowFzt8bcBxFzNeikckXJ0pxwWXIG3K3GmGf8+F85cpi8ye9MPDSq5o5BGiLh8B0Cj6jojYLUFMgQOlkOxrtfVJHTBn3PjbpP+kuK160rw2aZJ3TW4MRBoyp39lAZkei1iC7DdZdiTBuqyUyGGm8nFGq7GKoHgbUizqp+9f1pSw19EzVEnxBolqsGjvWEO41wP/CgKh0i8XzLhFxPgZCkIEOo7hYxT8fC7vPNjYFdqyT3VfScdpKdELXxJM1hE/wWjvNXuLo4S/NbCoSDcV6mEkR0kyvm924ksuYv6kuP5XLiV06gsbCsG6COaOzPxY19Vxz5hqraKnQhJ+fG2eOZaWaDZUFOqOoGFf6IL/zuHeXlp3IBT9ahWXJcyx1f8JqoyjKMLFVoFwhkxnTeUUjM3zmgyBqjsppoz9YNjY125UTWtuxAoyo3QrF/gJkSCd2LyHJgAZC7yVBZM1neHjikIluNyio35q6JDAe63mu1bizz9ayMQ7NI1V/WG2xFndtE9GFUFqNah3hBbg5ws/mdU4JuiuKu9lG8vn8fR7ZcJxmdgpE5aFTljv7+2nDYudkY3zLA1ouavXxLDlD5+insVIsvUDaArgo7RRvfq6QnU6qTEWgW/Vr9ZSuGrhLX/32M3ge0e7BMCCznn9TC06XIcyYS/t+GhrKPM1EITRuaWz8+MkNbGh42hr8EnQfjXoCWF1aehBcRX9inwqe48gcz7F+9oVUOp3OfaUGzcuVKs27+/T+T2Y3/IE1VpRT5BJPWIdO5F6/txSxgx+euaCwog+EB38/vfZx/Wbly/KWItHp4+fInnaPzy38hVSWPyewGkVkNSH05BHxebjdPENYYRENCZMAQHnBcjfDLjoP8dNWK8c/XSR+azpJfCDwWV5mGCiw4ZlY91JSC4+XuJowdhVhYCA+YODDRoKCKK8ovOw/nAzTKY/EhtQgU+5CmSqSjGZndCCVfvuplwgw4xU7sRoXIoBDqM0SHDVZt4pvkIzSjnWPhKfEjM2qRhW1Ic6WnOjkA167Qs5CEThsiQ4JrX4xy7pbX0Jx7oVWlmCunIZc3Q2VJAp60nGIOrF9gp1AX3EhCWcK9hpid+3ehrWCgsRfvM8i06oTLmlHzJTwF1jn5drlxWEZcUXjUFV1qEUxBQRP3pwLlRcj0amR2AzK9Jv53/P+9LTUL2CG0hWUoEehGrSuKJmHHgoNm1Cw+A+XFmLZaZG4jTKuGokJYHJlav2Zr7/gQ2sYt/SOwROKjouS2goXmHHiksgSZ04jMmwZ1du2bt13KArGQEOo1hPtNPIZJGpazA5R8Hj2l0veOQRorEqOsOY0QsLmdJKQ2lXMU+L42drGgBE87xGy+Zbz3U/BKc+6NWysU+5HZ9ZgrW6C+Iv73lC5JJFL/cUiCZ2yCTlA3zYdpUkHzpXwiNWWJpOCs+kRJwsKTpq3G+2BOSDv7EjZXiAYhMphwRTazm5FtUkIzapkiP9JQjrTXga1n1ZVNieSgjVFs3GLT/jajGw0arGvK2DapobFWstVy67LqK5DLGmFuI1I2eWeLxofQfUJwwBALjaT+xx28XASzSQ/NWZdlV3I70FqDuaYNaa2ZVKpjlSQ6ZAj2OPG8S0aV5Xx2pgw05954RXF8eG46W6CqJJ5pLthtxBXZ1L/9Z4fQWd+mJDTWqj4nXgCVjmlIWy1UFIHjFEywfDb1P2RzLk58ykL8DTW52KYsNCPGldJA3GXFSxIt1VBRnN9uyypLRIgMJwJd65LcXL9pb6pDE2fHJgYri2F6TSKzPL06MUTPp01AoxAZTgyf43HLeLK5mbgnD5pRyUm4LCqLkZn1yPxWpLYsUQhNOc+eiZ756jHsEDp4xokn5+wIKauB7liX70FzAQvZYXplKbKoHXN508QlBm2CLiaEBgzDpwxuppJzY0Ex1u8eNBexkM1tBJyE6sybFp/Hk7OSxEg218YttrBoY5cJVRZvyD3WY3Te71Z1qksT8NhgubECirJUkojDQnwkFBlwCA9IYvZcppNzKZrga7t7SpOEBW3qw++D2rL4CgkLELaeZZOFGdrisJxN/dts7gTHLZe6Lw+aFHrdBsVFPsQusbHliNkNiSmnaebTbCHRBrjhgUS+5eys/xQuLae7etCMw9zWZdliaEsVsmBGYr6yHXmluFl1iQwZQj12iYjEpzDknSu60D150KTY0+fvXhrA2KzyVS1x95XMwj47grcjITu/xU7kTmpebpqXmdHmHjRpmtMSYJODtoreOQ2xq0IvUs8aXSKSWIA2Mnsu34LcZMzhQZOMlZLcpySQcFk2qzxjpJ5lTNzlnE39xydyG9y8/WJBEvfqQZOEkVLZxUIyusTGrpKYXkckFjib+o+7okJUl3Nt4EGTChEp7GtXgFaVEu6cQ6i+BTfq5EM1IoUbuMSuHjSZseOFjqLGIThnDuHZc1GrQJNl86DJXk960Fzatmmlt+IvNbLvpxl91Uj2+jGnR/ag8aBJGTgPGg8aD5pRC3gxTcosJN3AUxpPaZKGZXRHDxoPGg8azz2lzEDKDTyl8ZTGg8ZTmpQZSLmBpzSe0njQeEqTMgMpN/CUxlMaDxpPaVJmIOUGntJ4SuNB4ylNygyk3MBTGk9pPGg8pUmZgZQbeErjKY0Hjac0KTOQcgNPaTyl8aDxlCZlBlJu4CmNpzQeNJ7SpMxAyg08pfGUxoPGU5qUGUi5gac0ntJ40HhKkzIDKTfwlMZTGg+afFKalStXmnWxRT9V1X9GpDTl3snTBpNWaWBQhH96+BV+sXKljPszHmm9AMD2+by/+1V5bf3Mb0PsMVTmg5SBpv72wzwCaDJBIxBzYRDYJsKvTCkvbr9a7N/j3tKGxp458faI4k4wDwvuPSAdilYKUpAvd5kM0Nh3SorSB+wSZY06PLXsBj5bKeNXmC+93Lh5O7+hys0/e6kaX3QR4ixFuR2hAyjJ2ClydKBJAM2wJmB5Q32s8Qf4aOtCehHJyAvgMqI05/blkpXrfaHIQJPP0etQ7lW4C2ilgFSngKGxccohVV418JIRNteE6N5wm2T0y1IZh2YEIFn6kzWB03U0+CPRWzA8CnKL/fp2jsQirdMUKDRWXd7yCf+lwsah05zYu5RwptTlXINmC5qz57DKA8PNYTf6PYEfi5qZoL60ejXLjQsJGoGowuc4/MaJ8YdsKMv55s46NKMnXPqTNUV95eHF6phHDdyJagvG5OUoqyCgcWMxRI4i5lWrLgM9bN57j4Sy/DzFD58zaOJnW/6k02l2zIn5zV/7i0t+VFrVXBMorsg7dvIZGo1FiPSeInhoT4872PMfuOY3h2cO72fFipy9Fjt30MybF2AoOhvlDnH8DxZV1t1U2TS3pK71Cirq2ggU2UFW7i7nUk9kXkKjSnTwDIP7Pqb/T28ytGPTcKT74LsaDj6N8Aalvv3s2BGeLEojTO+sxS93Iu7DINejOg3Eb/wBiisbqG7ppKF9AeXVzYhYj5WRkeG47Zdv0KjGGD60hzMfvMzgtrcJf9GFBofsNzojCF+Avg+ymojvdQ5/2pNtA2bz0RYWLfLR078Q5ceofBNosh8L/IqkiOD4AhRVN9E093oa2+bjD0xsRSJ/oLHq0sfpTa/Su/4pIkf24oaGwP3KQ2X/sArTjejLGPPv7CvbDlvsMDsrT192oFmyxMfnX8zA1Qcx/Agjl6GM+e1jcfyUT+9gxuU3UVnXhi8wMSP0CYdGldhwP4P7tnPi9ccJbnsbDScR4woRXN2Ny3/imGeY2XyYDRsymqPJfCBs45Yz0owveiui3wFZglCWqp8IVNRR27aA+rarqKhujitRLuOdCYNGFTc0GHdFvZvX0bfpVaLHD6X+qWhlMB7nqDxOxPc21W53JuOdTCmNYea8Rohdj3Ifwm2IzEDHn48x/iJKa1uobb2S2pZOSivqMM6YYpUqnxfcP/fQKG4kRKj7IP3b3qZvy3rCB3biBgfH72BEorh6EPQNjLyAOpvo2nEcGHd1O3O1p6YFZQSC12K4H5E7gbmADUrSB1IMvqJSSmunU9+2gJppl1FcVo1kuQ6aS2jUjRI+9QX9H79L3+bXCe3/lNhALxn6sJSNaYaAvSivoTxLqGgr3dsnuMo9o+M6HH4O3AhUAJmvbIvBX1JOReNsGmZdS03THHz+ooyoyoUOkitoYsMD9H+2mTPvvMDwzg+J9Z7KFCzn35ZVl35gI2r+kQM7P0rHeOmrQdv8GkzoLpBHgcVAVVbAsdJlHPzltdS2zadp1jWUVTZmJTGYbWg0GiJ47ACn33mB/s2vEzt+GI1G0unHS7W1wJwBPkCc36FDr9LVZf8e95Y+NIlTG9o72hGWgzwCeiWQPSkQoaimmea5N1A//YqMu6xsQaNuLOGK/vQmJ9evInpoT7aUZRSIICqfAo8jPEXXroP5EdOcy6uNb8qC1+DKwwh2Ts2skbzMuKm+eEPFBEqobJpLffvV1DTNxpYkJAMf9co0NBqLEu07Sf+uzfS+/zJDn36ADvaC/V54BkK/82w0mrfZj8paYDXBnm10d6cVx5x7jkwpzbnHNMya1YAGbkCx8HwDkZZ0RlKXAkeMD39ZDVXNl1HfNp+qhjZ8/vTyO5mEJjbUz8De7fRtfo2hT94jcuKI/ZpqNmCx/EVRjoC8iehqTPR99u07mQl1yTY0iePbnE1QmnFjt4M+AtwEVGZBchL+0ecnUF5HTes8Gtqvjud3bAw0ni0T0Gg0zPCRvZx5/2X6P1pPtPsQGgmlnnNJ/gbs1M6NoE/gBN6gKLO5mdxAM3qWuXOLcH2Xo3ofyoPAFSNTQLOgcorNKpfVz6C+fSG1LR0Ul9WkHCynA42tQodPHaVv20Z6319DaN/HaCg44oqSJyDJPRNDamUn6DO4zvNUyO5MJvIudB1Z6LgL3q4wd24FMf9CiK1AxcY7bQjZmYwlgq+onPKmWTTOvIbqRhvvJJ+YHi800YHT9O/cTO97axjeuZlY/2lw086lXYyfCOghhJeIsopBdxun99phdVbqTblVmq/esjBzYRUMfwP0B8DtINVJPlWp7ybgK62ievo8mudcR2VtK8ZYTi9t15SgsZ/rjoYZ7NpJz1vP0f/RG7inu7PphqwdeuJlgljsvzHlb9O1tXfMm0rdehdtkSulOe8Clju0b7dKczfKCoRrRuKdzCcGbcjpOBRXNlLbvoCG1qsoray/ZEkiOWgUNxwidOwAvVveoG/TK0SO7MtyvkV6Uf0IkSeBV+nadQjI2eSr0U6cIGjipxdaFpXgH+5A3AdA77fhM4xdDR/fQyM4gSJK6xLxTl1LB0VlVcgFhrxjQaPqEjl9jL7tNm5ZG49b3OGBbKqLnfqQiFvQ5whX7uboluFcqstEuqcLx1WzZ1fiBm4AXQHcAUzLWn7HxjvF5VRNu5yG9oVUNbTjC5Qg8ZxJYrsoNBojOtTP4J6t8VHR4PaNuL0nswWL9aF2bH4UZR1qniAQ+YC9uYlbLvVgTqTSfPW6li93eH97E8ZdgjEPoXaIro3WuYxPWcZoZRyKK+qoaumM53cqaqaN1LPk69DY+S3BAYYPfhafsjCw9S0i3QcgmvGpKomLTuRbuhHeQ3U16rzJgUe6YWXWoupUbJw/0IxetR2ix5yZKN8EfQjMdaBZm8pnp1sU1zRTN+Mq6mdcRWlFPfgCBOfMITx7Li4uwS9s3LKO/g9fI3xoT5bzLXadtX6I6z6NL/YKxhxg794kZmCl0u3p7Zt/0IzeT+uNJThnrkCiKxD5HirTs5NGjTskjL+Y0voZNM3+M+pmXIk7bwEDjfX0fvwOZ956luDebehwxjLxF+o1RfQw8HvUt4po32ccPmzjlrzb8heahKkMtXPLqfRdi7o/BLkdQxOaxfxOcTkVLR2Uz7+JMye74qn/WJ+dspAlz2BdkcsxRF8nxm8Zlq2c/GxgooLcZAjNd2hG70GYM6eBqO9eJD5EX4RSA2Qn3hGJZ5ZtoRHNEix2qCycRtkC7hP49CX27rV1oqwn55IBozAC4WTupLW1BKe4E+Pcg+q9IHaIbid+FQr89i4thVZJPkXkRTS2BiK76OoKJmOCfNinkIw9ai/DzIWVyNB8XPk2YgNmLiuQlwvYGGU38ApGX8At/YSurbbQmDU5ywZkhQjNqB0cOjurGY7dgMgykLtH1lVlJaucpvEtFMfisKiuosRsYtcuO3su59ncNO9jJCOQiaNM7DEcZnQ04bh3oeZv4vFOYkFevmxhlM0Y/TWu8xoHdtoVAQUJy5cBZr6YNv3rcGi7rB2HH6LGTjttBZ2oBeIKMhyvQqv7JMrvOLjnQKHDMhmhSdyTnfw1GLsZsRO/5FagLXvzd75Guh352LjFzsV9E+UJypyN2Z7fkv7zltoRCjmmudSdOsy+cjqx6C2Ifgu4GZie3Ve42bG52OTcO6i8hM/3Nvs+OTpZ1OVcY09WaOw9Ci0tJfjL2hHnVojZksT1I0tsUnu0xt7bzmexb254Btw3CQ8c5OjRCatCj3256e0xmaH50gW33liMc3ImYu4D/T5iOjIy0d0ufVX3M5Dfo+7zxOq7OPyezbfkfYIuHWymAjTn2GduETNlISqPIWLdlp01OJ4hemIBmupLiP6KLt0K+VVUTAeKsdpOMWhG0gydnbUEuRfc7yEsBKlJqp6lRDHag7IVzP9RzIvs2nVqLCNPtt+nIjSJPrTv0Nl/vAMT/TbIXQjzUWovojzuSJ3oE4y+QsR5kTlNu7Lx7pdCAGzqQpPoHcHOGlTnajB34XI3gl1SfO5b1odRdsRhQV9BYtvYv9+m/id13HIpeKc6NKO28TFrVh0ULwD3AVSt+rSiegQjz4M8hwa309Vlq9BZmq5XCBoz+qQVzrXm4kodWi6vwecuQcz9qLxAVN/g6G778sOCTv1n0nj/D3jSqjPzOcNxAAAAAElFTkSuQmCC' diff --git a/src/utils/wallet/index.ts b/src/utils/wallet/index.ts new file mode 100644 index 0000000..67eb1b4 --- /dev/null +++ b/src/utils/wallet/index.ts @@ -0,0 +1 @@ +export * from './wallet' diff --git a/src/utils/wallet/wallet.ts b/src/utils/wallet/wallet.ts new file mode 100644 index 0000000..5311f36 --- /dev/null +++ b/src/utils/wallet/wallet.ts @@ -0,0 +1,8 @@ +import { Signer } from 'ethers' +import { Provider } from '@ethersproject/abstract-provider' + +export type ConnectedSigner = Signer & { + readonly provider: Provider + readonly publicKey?: never + readonly privateKey?: never +} diff --git a/src/verify/index.ts b/src/verify/index.ts new file mode 100644 index 0000000..14045e4 --- /dev/null +++ b/src/verify/index.ts @@ -0,0 +1 @@ +export * from './verify' diff --git a/src/verify/verfiy.v2.dns-txt-doc-store.integration.test.ts b/src/verify/verfiy.v2.dns-txt-doc-store.integration.test.ts new file mode 100644 index 0000000..879dadd --- /dev/null +++ b/src/verify/verfiy.v2.dns-txt-doc-store.integration.test.ts @@ -0,0 +1,620 @@ +import { + dnsTxtDocStore, + dnsTxtDocStoreTampered, + dnsTxtDocStoreRevoked, + dnsTxtDocStoreIncorrectDNS, + dnsTxtDocStoreIncorrectDocumentStore, + dnsTxtDocStoreObfuscated, +} from '../../test/fixtures/verify/v2/dns-txt-doc-store' +import { describe, it, expect } from 'vitest' +import { verify, isValid } from './verify' +import { ethers } from 'ethers' + +const localProvider = new ethers.providers.JsonRpcProvider( + 'http://127.0.0.1:8545' +) + +describe('verify(integration) dns-txt with document store', () => { + it('should return valid fragments for document issued correctly with DNS-TXT and not revoked on a document store', async () => { + const fragments = await verify(dnsTxtDocStore, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + ], + "revocation": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "revoked": false, + }, + ], + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example.tradetrust.io", + "status": "VALID", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(true) + }) + it('should return in-valid fragments for tampered document with DNS-TXT', async () => { + const fragments = await verify(dnsTxtDocStoreTampered, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": false, + "name": "OpenAttestationHash", + "reason": { + "code": 0, + "codeString": "DOCUMENT_TAMPERED", + "message": "Document has been tampered with", + }, + "status": "INVALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + ], + "revocation": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "revoked": false, + }, + ], + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example.tradetrust.io", + "status": "VALID", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for document issued correctly with DNS-TXT, but revoked', async () => { + const fragments = await verify(dnsTxtDocStoreRevoked, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + ], + "revocation": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "reason": { + "code": 5, + "codeString": "DOCUMENT_REVOKED", + "message": "Document 0x8db570494b2beeea4e6431f2f7abda199f676ae50c2a7bb4a0d0c548da0952df has been revoked under contract 0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "revoked": true, + }, + ], + }, + "issuedOnAll": true, + "revokedOnAny": true, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 5, + "codeString": "DOCUMENT_REVOKED", + "message": "Document 0x8db570494b2beeea4e6431f2f7abda199f676ae50c2a7bb4a0d0c548da0952df has been revoked under contract 0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "status": "INVALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example.tradetrust.io", + "status": "VALID", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for document issued correctly with DNS-TXT, but the issuer dns identity is not valid', async () => { + const fragments = await verify(dnsTxtDocStoreIncorrectDNS, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + ], + "revocation": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "revoked": false, + }, + ], + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example123.tradetrust.io", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "status": "INVALID", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "status": "INVALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for document issued correctly with DNS-TXT, but the document store identity is not correct', async () => { + const fragments = await verify(dnsTxtDocStoreIncorrectDocumentStore, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": [ + { + "address": "0x5Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": false, + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_ISSUED", + "message": "Bad document store address checksum", + }, + }, + ], + }, + "issuedOnAll": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_ISSUED", + "message": "Bad document store address checksum", + }, + "status": "INVALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example123.tradetrust.io", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x5Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "status": "INVALID", + "value": "0x5Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x5Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "status": "INVALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return valid fragments for documented with obfuscated fields', async () => { + const fragments = await verify(dnsTxtDocStoreObfuscated, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + ], + "revocation": [ + { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "revoked": false, + }, + ], + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example.tradetrust.io", + "status": "VALID", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(true) + }) +}) diff --git a/src/verify/verify.ts b/src/verify/verify.ts new file mode 100644 index 0000000..f7a215d --- /dev/null +++ b/src/verify/verify.ts @@ -0,0 +1,26 @@ +import { + verificationBuilder as originalVerificationBuilder, + openAttestationVerifiers, + openAttestationDidIdentityProof, + isValid, +} from '@tradetrust-tt/tt-verify' +import { + DocumentsToVerify, + VerificationBuilderOptions, +} from '@tradetrust-tt/tt-verify/dist/types/src/types/core' + +const verificationBuilder = (builderOptions: VerificationBuilderOptions) => { + return originalVerificationBuilder( + [...openAttestationVerifiers, openAttestationDidIdentityProof], + builderOptions + ) +} + +const verify = ( + document: DocumentsToVerify, + builderOptions: VerificationBuilderOptions +) => { + return verificationBuilder(builderOptions)(document) +} + +export { verificationBuilder, verify, isValid } diff --git a/src/verify/verify.v2.dns-did.integration.test.ts b/src/verify/verify.v2.dns-did.integration.test.ts new file mode 100644 index 0000000..c59c258 --- /dev/null +++ b/src/verify/verify.v2.dns-did.integration.test.ts @@ -0,0 +1,369 @@ +import { + dnsDidSignedAndTampered, + dnsDidUnSigned, + dnsDidSigned, +} from '../../test/fixtures/verify/v2/dns-did' +import { describe, it, expect } from 'vitest' +import { isValid, verify } from './verify' +import { ethers } from 'ethers' +import { v3 } from '@tradetrust-tt/tradetrust' + +const localProvider = new ethers.providers.JsonRpcProvider( + 'http://127.0.0.1:8545' +) + +describe('verify(integration) dns-txt with dns:did', () => { + it('should return valid fragments for signed document', async () => { + const fragments = await verify(dnsDidSigned, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": [ + { + "did": "did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7", + "issued": true, + }, + ], + "revocation": [ + { + "revoked": false, + }, + ], + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationDidSignedDocumentStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 2, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "data": [ + { + "key": "did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller", + "location": "example.tradetrust.io", + "status": "VALID", + }, + ], + "name": "OpenAttestationDnsDidIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(true) + }) + it('should return in-valid fragments for unsigned document', async () => { + const fragments = await verify(dnsDidUnSigned, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 2, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for signed but tampared document', async () => { + const fragments = await verify(dnsDidSignedAndTampered, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": false, + "name": "OpenAttestationHash", + "reason": { + "code": 0, + "codeString": "DOCUMENT_TAMPERED", + "message": "Document has been tampered with", + }, + "status": "INVALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": [ + { + "did": "did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7", + "issued": true, + }, + ], + "revocation": [ + { + "revoked": false, + }, + ], + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationDidSignedDocumentStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 2, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "data": [ + { + "key": "did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller", + "location": "example.tradetrust.io", + "status": "VALID", + }, + ], + "name": "OpenAttestationDnsDidIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(false) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for empty document', async () => { + const fragments = await verify({} as v3.WrappedDocument, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "name": "OpenAttestationHash", + "reason": { + "code": 2, + "codeString": "SKIPPED", + "message": "Document does not have merkle root, target hash or data.", + }, + "status": "SKIPPED", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 2, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(false) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) +}) diff --git a/src/verify/verify.v2.dns-txt-token-reg.integration.test.ts b/src/verify/verify.v2.dns-txt-token-reg.integration.test.ts new file mode 100644 index 0000000..9e6696b --- /dev/null +++ b/src/verify/verify.v2.dns-txt-token-reg.integration.test.ts @@ -0,0 +1,489 @@ +import { + dnsTxtTokenRegMinted, + dnsTxttokenRegNotMinted, + dnsTxtTokenRegTampered, + dnsTxtTokenRegIncorrectDNS, + dnsTxtTokenRegIncorrectTokenReg, +} from '../../test/fixtures/verify/v2/dns-txt-token-reg' +import { describe, it, expect } from 'vitest' +import { verify, isValid } from './verify' +import { ethers } from 'ethers' + +const localProvider = new ethers.providers.JsonRpcProvider( + 'http://127.0.0.1:8545' +) + +describe('verify(integration) dns-txt with token-registry', () => { + it('should return valid fragments for document issued correctly with DNS-TXT on the token registry', async () => { + const fragments = await verify(dnsTxtTokenRegMinted, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": [ + { + "address": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": true, + }, + ], + "mintedOnAll": true, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example.tradetrust.io", + "status": "VALID", + "value": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(true) + }) + it('should return in-valid fragments for document, but not minted on the token registry', async () => { + const fragments = await verify(dnsTxttokenRegNotMinted, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": [ + { + "address": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": false, + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_MINTED", + "message": "Document has not been issued under token registry", + }, + }, + ], + "mintedOnAll": false, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_MINTED", + "message": "Document has not been issued under token registry", + }, + "status": "INVALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example.tradetrust.io", + "status": "VALID", + "value": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for tampered document with DNS-TXT', async () => { + const fragments = await verify(dnsTxtTokenRegTampered, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": false, + "name": "OpenAttestationHash", + "reason": { + "code": 0, + "codeString": "DOCUMENT_TAMPERED", + "message": "Document has been tampered with", + }, + "status": "INVALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": [ + { + "address": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": true, + }, + ], + "mintedOnAll": true, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example.tradetrust.io", + "status": "VALID", + "value": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + + it('should return in-valid fragments for document successfully minted with DNS-TXT, but the issuer dns identity is not valid', async () => { + const fragments = await verify(dnsTxtTokenRegIncorrectDNS, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": [ + { + "address": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": true, + }, + ], + "mintedOnAll": true, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example123.tradetrust.io", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "status": "INVALID", + "value": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "status": "INVALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) + + it('should return in-valid fragments for document successfully minted with DNS-TXT, but the token registry is not correct', async () => { + const fragments = await verify(dnsTxtTokenRegIncorrectTokenReg, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": [ + { + "address": "0x1Fb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": false, + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_MINTED", + "message": "Invalid contract arguments", + }, + }, + ], + "mintedOnAll": false, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_MINTED", + "message": "Invalid contract arguments", + }, + "status": "INVALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": [ + { + "location": "example.tradetrust.io", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x1Fb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "status": "INVALID", + "value": "0x1Fb613a88534E2939518f4ffBFE65F5969b491FF", + }, + ], + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x1Fb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "status": "INVALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) +}) diff --git a/src/verify/verify.v3.dns-did.integration.test.ts b/src/verify/verify.v3.dns-did.integration.test.ts new file mode 100644 index 0000000..e06707a --- /dev/null +++ b/src/verify/verify.v3.dns-did.integration.test.ts @@ -0,0 +1,273 @@ +import { + dnsDidSignedAndTampered, + dnsDidUnSigned, + dnsDidSigned, +} from '../../test/fixtures/verify/v3/dns-did' +import { describe, it, expect } from 'vitest' +import { isValid, verify } from './verify' +import { ethers } from 'ethers' + +const localProvider = new ethers.providers.JsonRpcProvider( + 'http://127.0.0.1:8545' +) + +describe('verify(integration) dns-txt with dns:did', () => { + it('should return valid fragments for signed document', async () => { + const fragments = await verify(dnsDidSigned, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": { + "did": "did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7", + "issued": true, + }, + "revocation": { + "revoked": false, + }, + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationDidSignedDocumentStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 2, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "data": { + "key": "did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller", + "location": "example.tradetrust.io", + "status": "VALID", + }, + "name": "OpenAttestationDnsDidIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(true) + }) + it('should return in-valid fragments for unsigned document', async () => { + const fragments = await verify(dnsDidUnSigned, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 2, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for signed but tampared document', async () => { + const fragments = await verify(dnsDidSignedAndTampered, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": false, + "name": "OpenAttestationHash", + "reason": { + "code": 0, + "codeString": "DOCUMENT_TAMPERED", + "message": "Document has been tampered with", + }, + "status": "INVALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": { + "did": "did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7", + "issued": true, + }, + "revocation": { + "revoked": false, + }, + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationDidSignedDocumentStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 2, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "data": { + "key": "did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller", + "location": "example.tradetrust.io", + "status": "VALID", + }, + "name": "OpenAttestationDnsDidIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(false) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) +}) diff --git a/src/verify/verify.v3.dns-txt-doc-store.integration.test.ts b/src/verify/verify.v3.dns-txt-doc-store.integration.test.ts new file mode 100644 index 0000000..b5bba2a --- /dev/null +++ b/src/verify/verify.v3.dns-txt-doc-store.integration.test.ts @@ -0,0 +1,580 @@ +import { + dnsTxtDocStore, + dnsTxtDocStoreTampered, + dnsTxtDocStoreRevoked, + dnsTxtDocStoreIncorrectDNS, + dnsTxtDocStoreIncorrectDocumentStore, + dnsTxtDocStoreObfuscated, +} from '../../test/fixtures/verify/v3/dns-txt-doc-store' +import { describe, it, expect } from 'vitest' +import { verify, isValid } from './verify' +import { ethers } from 'ethers' + +const localProvider = new ethers.providers.JsonRpcProvider( + 'http://127.0.0.1:8545' +) + +describe('verify(integration) dns-txt with document store', () => { + it('should return valid fragments for document issued correctly with DNS-TXT and not revoked on a document store', async () => { + const fragments = await verify(dnsTxtDocStore, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + "revocation": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "revoked": false, + }, + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(true) + }) + it('should return in-valid fragments for tampered document with DNS-TXT', async () => { + const fragments = await verify(dnsTxtDocStoreTampered, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": false, + "name": "OpenAttestationHash", + "reason": { + "code": 0, + "codeString": "DOCUMENT_TAMPERED", + "message": "Document has been tampered with", + }, + "status": "INVALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + "revocation": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "revoked": false, + }, + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for document issued correctly with DNS-TXT, but revoked', async () => { + const fragments = await verify(dnsTxtDocStoreRevoked, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + "revocation": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "reason": { + "code": 5, + "codeString": "DOCUMENT_REVOKED", + "message": "Document 0xeeef582def4ebea8fad684c33f67194f3a922692a3d9b96ca9d90150adf7259c has been revoked under contract 0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "revoked": true, + }, + }, + "issuedOnAll": true, + "revokedOnAny": true, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 5, + "codeString": "DOCUMENT_REVOKED", + "message": "Document 0xeeef582def4ebea8fad684c33f67194f3a922692a3d9b96ca9d90150adf7259c has been revoked under contract 0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "status": "INVALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for document issued correctly with DNS-TXT, but the issuer dns identity is not valid', async () => { + const fragments = await verify(dnsTxtDocStoreIncorrectDNS, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + "revocation": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "revoked": false, + }, + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example123.tradetrust.io", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "status": "INVALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for document issued correctly with DNS-TXT, but the document store identity is not correct', async () => { + const fragments = await verify(dnsTxtDocStoreIncorrectDocumentStore, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": { + "address": "0x99f7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": false, + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_ISSUED", + "message": "Bad document store address checksum", + }, + }, + "revocation": { + "address": "0x99f7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "reason": { + "code": 5, + "codeString": "DOCUMENT_REVOKED", + "message": "Bad document store address checksum", + }, + "revoked": true, + }, + }, + "issuedOnAll": false, + "revokedOnAny": true, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 5, + "codeString": "DOCUMENT_REVOKED", + "message": "Bad document store address checksum", + }, + "status": "INVALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x99f7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x99f7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "status": "INVALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return valid fragments for documented with obfuscated fields', async () => { + const fragments = await verify(dnsTxtDocStoreObfuscated, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "tokenRegistry" property or TOKEN_REGISTRY method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "details": { + "issuance": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "issued": true, + }, + "revocation": { + "address": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + "revoked": false, + }, + }, + "issuedOnAll": true, + "revokedOnAny": false, + }, + "name": "OpenAttestationEthereumDocumentStoreStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(true) + }) +}) diff --git a/src/verify/verify.v3.dns-txt-token-reg.integration.test.ts b/src/verify/verify.v3.dns-txt-token-reg.integration.test.ts new file mode 100644 index 0000000..f77977f --- /dev/null +++ b/src/verify/verify.v3.dns-txt-token-reg.integration.test.ts @@ -0,0 +1,454 @@ +import { + dnsTxtTokenRegMinted, + dnsTxttokenRegNotMinted, + dnsTxtTokenRegTampered, + dnsTxtTokenRegIncorrectDNS, + dnsTxtTokenRegIncorrectTokenReg, +} from '../../test/fixtures/verify/v3/dns-txt-token-reg' +import { describe, it, expect } from 'vitest' +import { verify, isValid } from './verify' +import { ethers } from 'ethers' + +const localProvider = new ethers.providers.JsonRpcProvider( + 'http://127.0.0.1:8545' +) + +describe('verify(integration) dns-txt with token-registry', () => { + it('should return valid fragments for document issued correctly with DNS-TXT on the token registry', async () => { + const fragments = await verify(dnsTxtTokenRegMinted, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": { + "address": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": true, + }, + "mintedOnAll": true, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(true) + }) + it('should return in-valid fragments for document, but not minted on the token registry', async () => { + const fragments = await verify(dnsTxttokenRegNotMinted, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": { + "address": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": false, + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_MINTED", + "message": "Document has not been issued under token registry", + }, + }, + "mintedOnAll": false, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_MINTED", + "message": "Document has not been issued under token registry", + }, + "status": "INVALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + it('should return in-valid fragments for tampered document with DNS-TXT', async () => { + const fragments = await verify(dnsTxtTokenRegTampered, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": false, + "name": "OpenAttestationHash", + "reason": { + "code": 0, + "codeString": "DOCUMENT_TAMPERED", + "message": "Document has been tampered with", + }, + "status": "INVALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": { + "address": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": true, + }, + "mintedOnAll": true, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "status": "VALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(true) + expect(isValid(fragments)).toStrictEqual(false) + }) + + it('should return in-valid fragments for document successfully minted with DNS-TXT, but the issuer dns identity is not valid', async () => { + const fragments = await verify(dnsTxtTokenRegIncorrectDNS, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": { + "address": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + "minted": true, + }, + "mintedOnAll": true, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "status": "VALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example123.tradetrust.io", + "value": "0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x9Eb613a88534E2939518f4ffBFE65F5969b491FF", + }, + "status": "INVALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(true) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) + + it('should return in-valid fragments for document successfully minted with DNS-TXT, but the token registry is not correct', async () => { + const fragments = await verify(dnsTxtTokenRegIncorrectTokenReg, { + provider: localProvider, + }) + expect(fragments).toMatchInlineSnapshot(` + [ + { + "data": true, + "name": "OpenAttestationHash", + "status": "VALID", + "type": "DOCUMENT_INTEGRITY", + }, + { + "data": { + "details": { + "address": "0x88b613a88534E2939518f4ffBFE65F5969b491FF", + "minted": false, + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_MINTED", + "message": "Invalid contract arguments", + }, + }, + "mintedOnAll": false, + }, + "name": "OpenAttestationEthereumTokenRegistryStatus", + "reason": { + "code": 1, + "codeString": "DOCUMENT_NOT_MINTED", + "message": "Invalid contract arguments", + }, + "status": "INVALID", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationEthereumDocumentStoreStatus", + "reason": { + "code": 4, + "codeString": "SKIPPED", + "message": "Document issuers doesn't have "documentStore" or "certificateStore" property or DOCUMENT_STORE method", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "name": "OpenAttestationDidSignedDocumentStatus", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not signed by DID directly", + }, + "status": "SKIPPED", + "type": "DOCUMENT_STATUS", + }, + { + "data": { + "identifier": "example.tradetrust.io", + "value": "0x88b613a88534E2939518f4ffBFE65F5969b491FF", + }, + "name": "OpenAttestationDnsTxtIdentityProof", + "reason": { + "code": 4, + "codeString": "MATCHING_RECORD_NOT_FOUND", + "message": "Matching DNS record not found for 0x88b613a88534E2939518f4ffBFE65F5969b491FF", + }, + "status": "INVALID", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDnsDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document was not issued using DNS-DID", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + { + "name": "OpenAttestationDidIdentityProof", + "reason": { + "code": 0, + "codeString": "SKIPPED", + "message": "Document is not using DID as top level identifier or has not been wrapped", + }, + "status": "SKIPPED", + "type": "ISSUER_IDENTITY", + }, + ] + `) + expect(isValid(fragments, ['DOCUMENT_INTEGRITY'])).toStrictEqual(true) + expect(isValid(fragments, ['DOCUMENT_STATUS'])).toStrictEqual(false) + expect(isValid(fragments, ['ISSUER_IDENTITY'])).toStrictEqual(false) + expect(isValid(fragments)).toStrictEqual(false) + }) +}) diff --git a/test/fixtures/verify/fragments/verifier-response.ts b/test/fixtures/verify/fragments/verifier-response.ts new file mode 100644 index 0000000..a1b4295 --- /dev/null +++ b/test/fixtures/verify/fragments/verifier-response.ts @@ -0,0 +1,994 @@ +// Verification Responses + +export const whenDocumentHashInvalidAndNotIssued = [ + { + data: false, + reason: { + code: 0, + codeString: "DOCUMENT_TAMPERED", + message: "Certificate has been tampered with", + }, + status: "INVALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + data: { + details: [ + { + address: "0x20bc9C354A18C8178A713B9BcCFFaC2152b53991", + reason: { + code: 2, + codeString: "CONTRACT_ADDRESS_INVALID", + message: "Contract address 0x20bc9C354A18C8178A713B9BcCFFaC2152b53991 is invalid", + }, + issued: false, + }, + ], + issuedOnAll: false, + }, + reason: { + code: 2, + codeString: "CONTRACT_ADDRESS_INVALID", + message: "Contract address 0x20bc9C354A18C8178A713B9BcCFFaC2152b53991 is invalid", + }, + status: "INVALID", + name: "OpenAttestationEthereumDocumentStoreIssued", + type: "DOCUMENT_STATUS", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + issued: false, + reason: { + code: 1, + codeString: "DOCUMENT_NOT_ISSUED", + message: + "Certificate 0xda7a25d51e62bc50e1c7cfa17f7be0e5df3428b96f584e5d021f0cd8da97306d has not been issued under contract 0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + }, + }, + ], + issuedOnAll: false, + }, + reason: { + code: 1, + codeString: "DOCUMENT_NOT_ISSUED", + message: + "Certificate 0xda7a25d51e62bc50e1c7cfa17f7be0e5df3428b96f584e5d021f0cd8da97306d has not been issued under contract 0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + }, + status: "INVALID", + }, + { + reason: { + code: 2, + codeString: "SKIPPED", + message: `Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type`, + }, + status: "SKIPPED", + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + }, + { + reason: { + code: 0, + codeString: "SKIPPED", + message: `Document was not issued using DNS-DID`, + }, + status: "SKIPPED", + name: "OpenAttestationDnsDidIdentityProof", + type: "ISSUER_IDENTITY", + }, + { + reason: { + code: 0, + codeString: "SKIPPED", + message: `Document is not using DID as top level identifier`, + }, + status: "SKIPPED", + name: "OpenAttestationDidIdentityProof", + type: "ISSUER_IDENTITY", + }, +]; + +export const whenDocumentNotIssued = [ + { + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + issued: false, + reason: { + code: 1, + codeString: "DOCUMENT_NOT_ISSUED", + message: + "Certificate 0xda7a25d51e62bc50e1c7cfa17f7be0e5df3428b96f584e5d021f0cd8da97306d has not been issued under contract 0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + }, + }, + ], + issuedOnAll: false, + }, + reason: { + code: 1, + codeString: "DOCUMENT_NOT_ISSUED", + message: + "Certificate 0xda7a25d51e62bc50e1c7cfa17f7be0e5df3428b96f584e5d021f0cd8da97306d has not been issued under contract 0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + }, + status: "INVALID", + }, + { + data: true, + status: "VALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "example.tradetrust.io", + value: "0xe59877ac86c0310e9ddaeb627f42fdee5f793fbe", + }, + ], + status: "VALID", + }, +]; + +export const whenDocumentValidAndIssuedByDns = [ + { + data: true, + status: "VALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + data: { + issuedOnAll: true, + revokedOnAny: false, + details: { + issuance: [ + { + issued: true, + address: "0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + }, + ], + revocation: [ + { + revoked: false, + address: "0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + }, + ], + }, + }, + status: "VALID", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "example.tradetrust.io", + value: "0xe59877ac86c0310e9ddaeb627f42fdee5f793fbe", + }, + ], + status: "VALID", + }, +]; + +export const whenDocumentValidAndIssuedByDid = [ + { + data: true, + status: "VALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + issued: true, + }, + ], + issuedOnAll: true, + }, + status: "VALID", + name: "OpenAttestationEthereumDocumentStoreIssued", + type: "DOCUMENT_STATUS", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + revoked: false, + }, + ], + revokedOnAny: false, + }, + status: "VALID", + name: "OpenAttestationEthereumDocumentStoreRevoked", + type: "DOCUMENT_STATUS", + }, + { + name: "OpenAttestationDidIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + did: "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + }, + ], + status: "VALID", + }, +]; + +export const whenDocumentHashInvalid = [ + ...whenDocumentValidAndIssuedByDns.filter((fragment) => fragment.type !== "DOCUMENT_INTEGRITY"), + { + data: false, + reason: { + code: 0, + codeString: "DOCUMENT_TAMPERED", + message: "Certificate has been tampered with", + }, + status: "INVALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, +]; + +export const whenDocumentRevokedAndIdentifiedByDnsDid = [ + { + type: "DOCUMENT_INTEGRITY", + name: "OpenAttestationHash", + data: true, + status: "VALID", + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationEthereumTokenRegistryStatus", + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationEthereumDocumentStoreStatus", + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "documentStore" or "certificateStore" property or DOCUMENT_STORE method', + }, + }, + { + name: "OpenAttestationDidSignedDocumentStatus", + type: "DOCUMENT_STATUS", + data: { + issuedOnAll: true, + revokedOnAny: true, + details: { + issuance: [ + { + issued: true, + did: "did:ethr:0x1245e5B64D785b25057f7438F715f4aA5D965733", + }, + ], + revocation: [ + { + revoked: true, + address: "0x49b2969bF0E4aa822023a9eA2293b24E4518C1DD", + reason: { + message: + "Document 0x3752f29527952e7ccc6bf4da614d80f2fec9e5bd8b71adf10beb4e6763e6c233 has been revoked under contract 0x49b2969bF0E4aa822023a9eA2293b24E4518C1DD", + code: 5, + codeString: "DOCUMENT_REVOKED", + }, + }, + ], + }, + }, + status: "INVALID", + reason: { + message: + "Document 0x3752f29527952e7ccc6bf4da614d80f2fec9e5bd8b71adf10beb4e6763e6c233 has been revoked under contract 0x49b2969bF0E4aa822023a9eA2293b24E4518C1DD", + code: 5, + codeString: "DOCUMENT_REVOKED", + }, + }, + { + status: "SKIPPED", + type: "ISSUER_IDENTITY", + name: "OpenAttestationDnsTxtIdentityProof", + reason: { + code: 2, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "documentStore" / "tokenRegistry" property or doesn\'t use DNS-TXT type', + }, + }, + { + name: "OpenAttestationDnsDidIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + location: "demo-tradetrust.openattestation.com", + key: "did:ethr:0x1245e5B64D785b25057f7438F715f4aA5D965733#controller", + status: "VALID", + }, + ], + status: "VALID", + }, +]; + +export const whenDocumentIssuedAndRevokedByEthereumDocStore = [ + { + type: "DOCUMENT_INTEGRITY", + name: "OpenAttestationHash", + data: true, + status: "VALID", + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationEthereumTokenRegistryStatus", + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + }, + { + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + data: { + issuedOnAll: true, + revokedOnAny: true, + details: { + issuance: [ + { + issued: true, + address: "0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + }, + ], + revocation: [ + { + revoked: true, + address: "0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + reason: { + message: + "Document 0x1268951303ad546f18d00f26344b1841d4f6a4f432cec898308a3535ba7f9bdd has been revoked under contract 0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + code: 5, + codeString: "DOCUMENT_REVOKED", + }, + }, + ], + }, + }, + reason: { + message: + "Document 0x1268951303ad546f18d00f26344b1841d4f6a4f432cec898308a3535ba7f9bdd has been revoked under contract 0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + code: 5, + codeString: "DOCUMENT_REVOKED", + }, + status: "INVALID", + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationDidSignedDocumentStatus", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document was not signed by DID directly", + }, + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "inc-brown-jaguar.sandbox.fyntech.io", + value: "0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + }, + ], + status: "VALID", + }, + { + status: "SKIPPED", + type: "ISSUER_IDENTITY", + name: "OpenAttestationDnsDidIdentityProof", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document was not issued using DNS-DID", + }, + }, + { + status: "SKIPPED", + type: "ISSUER_IDENTITY", + name: "OpenAttestationDidIdentityProof", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document is not using DID as top level identifier or has not been wrapped", + }, + }, +]; + +export const whenDocumentIssuerIdentityInvalidDnsTxt = [ + { + data: true, + status: "VALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + issued: true, + }, + ], + issuedOnAll: true, + }, + status: "VALID", + name: "OpenAttestationEthereumDocumentStoreIssued", + type: "DOCUMENT_STATUS", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + revoked: false, + }, + ], + revokedOnAny: false, + }, + status: "VALID", + name: "OpenAttestationEthereumDocumentStoreRevoked", + type: "DOCUMENT_STATUS", + }, + { + reason: { + code: 2, + codeString: "SKIPPED", + message: `Document issuers doesn't have "documentStore" / "tokenRegistry" property or doesn't use DNS-TXT type`, + }, + status: "SKIPPED", + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + }, +]; + +export const whenDocumentIssuerIdentityInvalidDid = [ + { + data: true, + status: "VALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + issued: true, + }, + ], + issuedOnAll: true, + }, + status: "VALID", + name: "OpenAttestationEthereumDocumentStoreIssued", + type: "DOCUMENT_STATUS", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + revoked: false, + }, + ], + revokedOnAny: false, + }, + status: "VALID", + name: "OpenAttestationEthereumDocumentStoreRevoked", + type: "DOCUMENT_STATUS", + }, + { + reason: { + code: 2, + codeString: "SKIPPED", + message: `Document is not using DID as top level identifier`, + }, + status: "SKIPPED", + name: "OpenAttestationDidIdentityProof", + type: "ISSUER_IDENTITY", + }, +]; + +export const whenTransferableDocumentVerified = [ + { type: "DOCUMENT_INTEGRITY", name: "OpenAttestationHash", data: true, status: "VALID" }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationEthereumDocumentStoreIssued", + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "documentStore" or "certificateStore" property or DOCUMENT_STORE method', + }, + }, + { + name: "OpenAttestationEthereumTokenRegistryMinted", + type: "DOCUMENT_STATUS", + data: { mintedOnAll: true, details: [{ minted: true, address: "0xc3E9eBc6aDA9BA4B4Ce65D71901Cb2307e9670cE" }] }, + status: "VALID", + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationEthereumDocumentStoreRevoked", + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "documentStore" or "certificateStore" property or DOCUMENT_STORE method', + }, + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "demo-tradetrust.openattestation.com", + value: "0xc3E9eBc6aDA9BA4B4Ce65D71901Cb2307e9670cE", + }, + ], + status: "VALID", + }, +]; + +export const whenDocumentInvalid = [ + { + status: "SKIPPED", + type: "DOCUMENT_INTEGRITY", + name: "OpenAttestationHash", + reason: { + code: 2, + codeString: "SKIPPED", + message: "Document does not have merkle root, target hash or data.", + }, + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationEthereumTokenRegistryStatus", + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationEthereumDocumentStoreStatus", + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "documentStore" or "certificateStore" property or DOCUMENT_STORE method', + }, + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationDidSignedDocumentStatus", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document was not signed by DID directly", + }, + }, + { + status: "SKIPPED", + type: "ISSUER_IDENTITY", + name: "OpenAttestationDnsTxtIdentityProof", + reason: { + code: 2, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "documentStore" / "tokenRegistry" property or doesn\'t use DNS-TXT type', + }, + }, + { + status: "SKIPPED", + type: "ISSUER_IDENTITY", + name: "OpenAttestationDnsDidIdentityProof", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document was not issued using DNS-DID", + }, + }, + { + status: "SKIPPED", + type: "ISSUER_IDENTITY", + name: "OpenAttestationDidIdentityProof", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document is not using DID as top level identifier or has not been wrapped", + }, + }, +]; + +export const whenDocumentAddressInvalid = [ + { + type: "DOCUMENT_INTEGRITY", + name: "OpenAttestationHash", + data: true, + status: "VALID", + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationEthereumTokenRegistryStatus", + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + }, + { + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + data: { + issuedOnAll: true, + revokedOnAny: true, + details: { + issuance: [ + { + issued: true, + address: "0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + }, + ], + revocation: [ + { + revoked: true, + address: "0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + reason: { + message: "Invalid document store address", + code: 1, + codeString: "DOCUMENT_STORE_ADDRESS_INVALID", + }, + }, + ], + }, + }, + reason: { + code: 1, + codeString: "DOCUMENT_STORE_ADDRESS_INVALID", + message: "Invalid document store address", + }, + status: "INVALID", + }, + { + status: "SKIPPED", + type: "DOCUMENT_STATUS", + name: "OpenAttestationDidSignedDocumentStatus", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document was not signed by DID directly", + }, + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "inc-brown-jaguar.sandbox.fyntech.io", + value: "0xF02F69B0c9F9Fc74110545E20a4A8CE7e0575fb4", + }, + ], + status: "VALID", + }, + { + status: "SKIPPED", + type: "ISSUER_IDENTITY", + name: "OpenAttestationDnsDidIdentityProof", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document was not issued using DNS-DID", + }, + }, + { + status: "SKIPPED", + type: "ISSUER_IDENTITY", + name: "OpenAttestationDidIdentityProof", + reason: { + code: 0, + codeString: "SKIPPED", + message: "Document is not using DID as top level identifier or has not been wrapped", + }, + }, +]; + +export const whenDocumentNotFound = [ + { + data: true, + status: "VALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + revoked: false, + }, + ], + revokedOnAny: false, + }, + status: "INVALID", + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + reason: { + code: 1, + codeString: "1", + message: "Contract is not found", + }, + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "example.tradetrust.io", + value: "0xe59877ac86c0310e9ddaeb627f42fdee5f793fbe", + }, + ], + status: "VALID", + }, +]; + +export const whenInvalidCallArgument = [ + { + data: true, + status: "INVALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + revoked: false, + }, + ], + revokedOnAny: false, + }, + status: "INVALID", + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + reason: { + code: 1, + codeString: "1", + message: "Invalid call arguments", + }, + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "example.tradetrust.io", + value: "0xe59877ac86c0310e9ddaeb627f42fdee5f793fbe", + }, + ], + status: "VALID", + }, +]; + +export const whenServerError = [ + { + data: true, + status: "VALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + revoked: false, + }, + ], + revokedOnAny: false, + }, + status: "INVALID", + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + reason: { + code: 500, + codeString: "SERVER_ERROR", + message: "Server error", + }, + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "example.tradetrust.io", + value: "0xe59877ac86c0310e9ddaeb627f42fdee5f793fbe", + }, + ], + status: "VALID", + }, +]; + +export const whenUnhandledError = [ + { + data: true, + status: "VALID", + name: "OpenAttestationHash", + type: "DOCUMENT_INTEGRITY", + }, + { + reason: { + code: 4, + codeString: "SKIPPED", + message: 'Document issuers doesn\'t have "tokenRegistry" property or TOKEN_REGISTRY method', + }, + name: "OpenAttestationEthereumTokenRegistryMinted", + status: "SKIPPED", + type: "DOCUMENT_STATUS", + }, + { + data: { + details: [ + { + address: "0x8Fc57204c35fb9317D91285eF52D6b892EC08cD3", + revoked: false, + }, + ], + revokedOnAny: false, + }, + status: "INVALID", + name: "OpenAttestationEthereumDocumentStoreStatus", + type: "DOCUMENT_STATUS", + reason: { + code: 3, + codeString: "UNHANDLED_ERROR", + message: "Unhandled error", + }, + }, + { + name: "OpenAttestationDnsTxtIdentityProof", + type: "ISSUER_IDENTITY", + data: [ + { + status: "VALID", + location: "example.tradetrust.io", + value: "0xe59877ac86c0310e9ddaeb627f42fdee5f793fbe", + }, + ], + status: "VALID", + }, +]; diff --git a/test/fixtures/verify/v2/dns-did.ts b/test/fixtures/verify/v2/dns-did.ts new file mode 100644 index 0000000..71b5000 --- /dev/null +++ b/test/fixtures/verify/v2/dns-did.ts @@ -0,0 +1,145 @@ +import { + SchemaId, + SignedWrappedDocument, + WrappedDocument, + v2, +} from '@tradetrust-tt/tradetrust' +import { RevocationType } from '@tradetrust-tt/tradetrust/dist/types/__generated__/schema.2.0' + +interface CustomDocument extends v2.OpenAttestationDocument { + recipient: { + name: string + } +} + +export const dnsDidSigned: SignedWrappedDocument = { + version: SchemaId.v2, + data: { + recipient: { + name: 'c84cfdbe-1c0b-4054-96b5-b47f3a2e8d54:string:John Doe', + }, + $template: { + name: '6a251ceb-eaef-4d0c-b12d-6cdcd65bb99a:string:main', + type: '6bd991b7-9577-4619-81b4-ec7ba837e09d:string:EMBEDDED_RENDERER', + url: '4c29c7df-a84f-4415-8b78-793d852164a2:string:https://tutorial-renderer.openattestation.com', + }, + issuers: [ + { + id: '41393850-42d7-4555-be18-c422c25faccb:string:did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7', + name: 'd21dd4c4-493a-44ac-ba6c-4ccca772d0cc:string:Demo Issuer', + revocation: { + type: '79404e49-d587-4438-b6a2-b799cc306e3b:string:NONE' as v2.RevocationType, + }, + identityProof: { + type: 'abbb99fa-98cb-42d0-bc3f-4500623146ad:string:DNS-DID', + location: + 'becf6fed-784b-4871-a96d-9f0c7936d7b3:string:example.tradetrust.io', + key: '19600faf-b8eb-47d7-be35-ccf3923494b3:string:did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '229f6c1a45e3ca687d1ffcd98283e1199e22d264f212821d1c23c7c09983108e', + proof: [], + merkleRoot: + '229f6c1a45e3ca687d1ffcd98283e1199e22d264f212821d1c23c7c09983108e', + }, + proof: [ + { + type: 'OpenAttestationSignature2018', + created: '2024-02-20T03:57:40.810Z', + proofPurpose: 'assertionMethod', + verificationMethod: + 'did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller', + signature: + '0xea27eee0c6d12aabf7d823321b48cf45d04bc761daed9e132de988199b874a3e5275e166b4f84858372b9a3e83242898872897bc4bf8f5b79c5754cd43067e141c', + }, + ], +} +export const dnsDidUnSigned: WrappedDocument = { + version: SchemaId.v2, + data: { + recipient: { + name: 'c84cfdbe-1c0b-4054-96b5-b47f3a2e8d54:string:John Doe', + }, + $template: { + name: '6a251ceb-eaef-4d0c-b12d-6cdcd65bb99a:string:main', + type: '6bd991b7-9577-4619-81b4-ec7ba837e09d:string:EMBEDDED_RENDERER', + url: '4c29c7df-a84f-4415-8b78-793d852164a2:string:https://tutorial-renderer.openattestation.com', + }, + issuers: [ + { + id: '41393850-42d7-4555-be18-c422c25faccb:string:did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7', + name: 'd21dd4c4-493a-44ac-ba6c-4ccca772d0cc:string:Demo Issuer', + revocation: { + type: '79404e49-d587-4438-b6a2-b799cc306e3b:string:NONE' as RevocationType, + }, + identityProof: { + type: 'abbb99fa-98cb-42d0-bc3f-4500623146ad:string:DNS-DID', + location: + 'becf6fed-784b-4871-a96d-9f0c7936d7b3:string:example.tradetrust.io', + key: '19600faf-b8eb-47d7-be35-ccf3923494b3:string:did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '229f6c1a45e3ca687d1ffcd98283e1199e22d264f212821d1c23c7c09983108e', + proof: [], + merkleRoot: + '229f6c1a45e3ca687d1ffcd98283e1199e22d264f212821d1c23c7c09983108e', + }, +} + +export const dnsDidSignedAndTampered: SignedWrappedDocument = { + version: SchemaId.v2, + data: { + recipient: { + name: 'c84cfdbe-1c0b-4054-96b5-b47f3a2e8d54:string:John Doe 123', + }, + $template: { + name: '6a251ceb-eaef-4d0c-b12d-6cdcd65bb99a:string:main', + type: '6bd991b7-9577-4619-81b4-ec7ba837e09d:string:EMBEDDED_RENDERER', + url: '4c29c7df-a84f-4415-8b78-793d852164a2:string:https://tutorial-renderer.openattestation.com', + }, + issuers: [ + { + id: '41393850-42d7-4555-be18-c422c25faccb:string:did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7', + name: 'd21dd4c4-493a-44ac-ba6c-4ccca772d0cc:string:Demo Issuer', + revocation: { + type: '79404e49-d587-4438-b6a2-b799cc306e3b:string:NONE' as v2.RevocationType, + }, + identityProof: { + type: 'abbb99fa-98cb-42d0-bc3f-4500623146ad:string:DNS-DID', + location: + 'becf6fed-784b-4871-a96d-9f0c7936d7b3:string:example.tradetrust.io', + key: '19600faf-b8eb-47d7-be35-ccf3923494b3:string:did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '229f6c1a45e3ca687d1ffcd98283e1199e22d264f212821d1c23c7c09983108e', + proof: [], + merkleRoot: + '229f6c1a45e3ca687d1ffcd98283e1199e22d264f212821d1c23c7c09983108e', + }, + proof: [ + { + type: 'OpenAttestationSignature2018', + created: '2024-02-20T03:57:40.810Z', + proofPurpose: 'assertionMethod', + verificationMethod: + 'did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller', + signature: + '0xea27eee0c6d12aabf7d823321b48cf45d04bc761daed9e132de988199b874a3e5275e166b4f84858372b9a3e83242898872897bc4bf8f5b79c5754cd43067e141c', + }, + ], +} diff --git a/test/fixtures/verify/v2/dns-txt-doc-store.ts b/test/fixtures/verify/v2/dns-txt-doc-store.ts new file mode 100644 index 0000000..dece4fc --- /dev/null +++ b/test/fixtures/verify/v2/dns-txt-doc-store.ts @@ -0,0 +1,217 @@ +import { SchemaId, WrappedDocument, v2 } from '@tradetrust-tt/tradetrust' + +interface CustomDocument extends v2.OpenAttestationDocument { + recipient: { + name: string + } +} + +interface CustomDocumentObfuscated extends v2.OpenAttestationDocument {} + +export const dnsTxtDocStore: WrappedDocument = { + version: SchemaId.v2, + data: { + $template: { + name: '456f5ada-b199-4012-b359-ad689d3a5df6:string:main', + type: 'a8b58b42-cd8c-4da5-ad83-fc0a71e342d0:string:EMBEDDED_RENDERER', + url: '92c32eb4-5119-4707-8c43-a4a4411d62ca:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: '3728fb07-d41b-47c6-b3c4-c2165cb76f3e:string:John Doe', + }, + issuers: [ + { + name: 'ea308a68-db59-422f-8da3-a37788f0fcd1:string:Demo Issuer', + documentStore: + 'af1be992-cf0e-477d-b5f2-a847c12289dd:string:0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + identityProof: { + type: '5947b4b6-0d4e-4bef-9d50-5aee88f3783b:string:DNS-TXT', + location: + '5e0eba02-56ae-46a1-9c99-4008578cbe96:string:example.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '56a72ab0a30bef3d6fb767d16f66a854a21624739a773b590a2381d68eea9468', + proof: [], + merkleRoot: + '56a72ab0a30bef3d6fb767d16f66a854a21624739a773b590a2381d68eea9468', + }, +} + +export const dnsTxtDocStoreTampered: WrappedDocument = { + version: SchemaId.v2, + data: { + $template: { + name: '456f5ada-b199-4012-b359-ad689d3a5df6:string:main', + type: 'a8b58b42-cd8c-4da5-ad83-fc0a71e342d0:string:EMBEDDED_RENDERER', + url: '92c32eb4-5119-4707-8c43-a4a4411d62ca:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: '3728fb07-d41b-47c6-b3c4-c2165cb76f3e:string:John Doe123', + }, + issuers: [ + { + name: 'ea308a68-db59-422f-8da3-a37788f0fcd1:string:Demo Issuer', + documentStore: + 'af1be992-cf0e-477d-b5f2-a847c12289dd:string:0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + identityProof: { + type: '5947b4b6-0d4e-4bef-9d50-5aee88f3783b:string:DNS-TXT', + location: + '5e0eba02-56ae-46a1-9c99-4008578cbe96:string:example.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '56a72ab0a30bef3d6fb767d16f66a854a21624739a773b590a2381d68eea9468', + proof: [], + merkleRoot: + '56a72ab0a30bef3d6fb767d16f66a854a21624739a773b590a2381d68eea9468', + }, +} + +export const dnsTxtDocStoreRevoked: WrappedDocument = { + version: SchemaId.v2, + data: { + $template: { + name: '972df188-c53c-4c30-ac89-06e0c4dced2a:string:main', + type: '423b0d90-246b-46e0-9e79-22cf1be59f65:string:EMBEDDED_RENDERER', + url: 'cb067340-ba6b-4d78-b190-4e33385770dc:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: 'b9f4c31b-fe8a-4d17-9248-1aa9dfe15b34:string:John Doe', + }, + issuers: [ + { + name: '36f6164a-ae7b-4fb1-9a0f-14be44b887af:string:Demo Issuer', + documentStore: + '2caad7b5-a48b-4163-9d0d-0eb00b21c29c:string:0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + identityProof: { + type: 'a01aea55-bf30-468b-89bf-6d4c7ea4e8ae:string:DNS-TXT', + location: + '2e984e1e-3323-40bb-b1c8-808658a977c9:string:example.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '8db570494b2beeea4e6431f2f7abda199f676ae50c2a7bb4a0d0c548da0952df', + proof: [], + merkleRoot: + '8db570494b2beeea4e6431f2f7abda199f676ae50c2a7bb4a0d0c548da0952df', + }, +} + +export const dnsTxtDocStoreIncorrectDNS: WrappedDocument = { + version: SchemaId.v2, + data: { + $template: { + name: '8650ba19-cce3-43b6-a966-ee4f8fc6485a:string:main', + type: '20a3fa71-a25c-425d-9d67-31d147c4e996:string:EMBEDDED_RENDERER', + url: '9f775314-bcfa-4069-b330-1dffcb2e3615:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: '9a037b55-2717-474f-821d-845aa4b7b054:string:John Doe', + }, + issuers: [ + { + name: '18322448-990c-45d0-961b-9e6c333ec5ef:string:Demo Issuer', + documentStore: + 'b08f8a5e-36ee-4008-bce6-9c8098eeaf2f:string:0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + identityProof: { + type: '91fa0cf3-ec4e-409a-b934-38e6f21e3c39:string:DNS-TXT', + location: + 'd3be6135-2c5f-40bd-ac20-a4f03b497504:string:example123.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + 'ba891dc3da5db9155ec370bb80f17b8fbe115893feb4337a3e321fd2300ea9b0', + proof: [], + merkleRoot: + 'ba891dc3da5db9155ec370bb80f17b8fbe115893feb4337a3e321fd2300ea9b0', + }, +} + +export const dnsTxtDocStoreObfuscated: WrappedDocument = + { + version: SchemaId.v2, + data: { + $template: { + name: '456f5ada-b199-4012-b359-ad689d3a5df6:string:main', + type: 'a8b58b42-cd8c-4da5-ad83-fc0a71e342d0:string:EMBEDDED_RENDERER', + url: '92c32eb4-5119-4707-8c43-a4a4411d62ca:string:https://tutorial-renderer.openattestation.com', + }, + issuers: [ + { + name: 'ea308a68-db59-422f-8da3-a37788f0fcd1:string:Demo Issuer', + documentStore: + 'af1be992-cf0e-477d-b5f2-a847c12289dd:string:0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + identityProof: { + type: '5947b4b6-0d4e-4bef-9d50-5aee88f3783b:string:DNS-TXT', + location: + '5e0eba02-56ae-46a1-9c99-4008578cbe96:string:example.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '56a72ab0a30bef3d6fb767d16f66a854a21624739a773b590a2381d68eea9468', + proof: [], + merkleRoot: + '56a72ab0a30bef3d6fb767d16f66a854a21624739a773b590a2381d68eea9468', + }, + privacy: { + obfuscatedData: [ + '8c5c965edb2e14df766ad1e77822428d2cbf2d2d761f7c36a5801deaa971fe83', + ], + }, + } + +export const dnsTxtDocStoreIncorrectDocumentStore: WrappedDocument = + { + version: SchemaId.v2, + data: { + $template: { + name: '780fdc2c-d385-46c3-8abc-cb72b412d98f:string:main', + type: 'f14b2cc9-2965-464a-b734-7235290016ff:string:EMBEDDED_RENDERER', + url: '5344265c-edb6-4700-800e-ea1625d8c3ab:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: 'c48268db-6655-41e0-b657-247b5e2ce973:string:John Doe', + }, + issuers: [ + { + name: '45ad3669-3dd8-47f2-864b-7d4e011ac8ea:string:Demo Issuer', + documentStore: + '91efd177-638f-474c-852f-d8c333c949a9:string:0x5Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + identityProof: { + type: '093ff56d-05db-4ca4-a5cb-f775faa06397:string:DNS-TXT', + location: + '7382f992-2c4f-42d4-96d0-469b32b0a9ee:string:example123.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '920d98cd370552fa42013782bccd1b3ca23424d11b81f3d1850de3a65ce6fd82', + proof: [], + merkleRoot: + '920d98cd370552fa42013782bccd1b3ca23424d11b81f3d1850de3a65ce6fd82', + }, + } diff --git a/test/fixtures/verify/v2/dns-txt-token-reg.ts b/test/fixtures/verify/v2/dns-txt-token-reg.ts new file mode 100644 index 0000000..67d31c5 --- /dev/null +++ b/test/fixtures/verify/v2/dns-txt-token-reg.ts @@ -0,0 +1,178 @@ +import { SchemaId, WrappedDocument, v2 } from '@tradetrust-tt/tradetrust' + +interface CustomDocument extends v2.OpenAttestationDocument { + recipient: { + name: string + } +} + +export const dnsTxtTokenRegIncorrectTokenReg: WrappedDocument = + { + version: SchemaId.v2, + data: { + $template: { + name: 'a4fe54c9-6da2-459a-9fe3-f11d2ecca24f:string:main', + type: '236e2694-c949-428c-b105-bed1a6d68c16:string:EMBEDDED_RENDERER', + url: '387c1469-2c28-4da7-9787-0e1fcfb7b963:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: '1fac4b24-9720-4945-b5b9-2fecacc9e947:string:John Doe', + }, + issuers: [ + { + name: '464bfbbe-9b41-4c63-967c-e90ceea2f43b:string:Demo Issuer', + tokenRegistry: + 'd204a475-42ef-4044-b9cd-ff53f8f3ab45:string:0x1Fb613a88534E2939518f4ffBFE65F5969b491FF', + identityProof: { + type: '581497a4-4d1d-4426-b0e4-199dc29634f9:string:DNS-TXT', + location: + 'bd2a2f65-50f6-42d2-9f0d-387c455f24e7:string:example.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '82de42fe0d4dc965546a08f0555a33d66f25192f8121dab54b0a8d213a984a81', + proof: [], + merkleRoot: + '82de42fe0d4dc965546a08f0555a33d66f25192f8121dab54b0a8d213a984a81', + }, + } + +export const dnsTxtTokenRegIncorrectDNS: WrappedDocument = { + version: SchemaId.v2, + data: { + $template: { + name: '795c6391-b05a-455c-96f0-2664faeb0f7b:string:main', + type: '2fb67d3c-fd76-4759-9b5a-ca1c6026a6ef:string:EMBEDDED_RENDERER', + url: '72fc5787-d5fe-4a07-8d62-e8cc0b94060b:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: '7454e768-af43-45aa-9a33-40ccbffc0e54:string:John Doe', + }, + issuers: [ + { + name: 'a202c60d-687b-451f-92b9-8d8f36f78658:string:Demo Issuer', + tokenRegistry: + 'c2c76af8-2914-42b5-9ae2-1064d366d1d6:string:0x9Eb613a88534E2939518f4ffBFE65F5969b491FF', + identityProof: { + type: 'f567358b-7bad-4d38-9aa9-005cefbea1b1:string:DNS-TXT', + location: + 'ad38dca4-07dd-481d-b0e5-ca67dd751450:string:example123.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '26a31b2d50a79a6e7966227714bc1e7e2fd31f6bfdf5ac8066a3b9c01046c35b', + proof: [], + merkleRoot: + '26a31b2d50a79a6e7966227714bc1e7e2fd31f6bfdf5ac8066a3b9c01046c35b', + }, +} + +export const dnsTxtTokenRegTampered: WrappedDocument = { + version: SchemaId.v2, + data: { + $template: { + name: '65deecd5-b41f-408c-b2ee-7f2561f32502:string:main', + type: 'a8cdd6cd-e0bd-4b1b-9de3-63c49d66e226:string:EMBEDDED_RENDERER', + url: '060acff7-fca4-4c3d-ac2e-b9d70a031924:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: '24d1e2cf-e245-4fca-b8b4-76f4ad61c7b6:string:John Doe123', + }, + issuers: [ + { + name: '1b949346-fc02-404f-94ff-a3b0a442141c:string:Demo Issuer', + tokenRegistry: + '9c9e8d16-aaa0-40ca-8633-f61e2f2d3b81:string:0x9Eb613a88534E2939518f4ffBFE65F5969b491FF', + identityProof: { + type: 'd1d58014-31af-45cc-a1c2-2b48022a0cb7:string:DNS-TXT', + location: + '195e5963-b6ed-440a-9e31-1f52f41df24f:string:example.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '8b59f2f2792f802e15c7ecfc44eb4e5a8da3ce830c1c53faaafbab9de5812bdb', + proof: [], + merkleRoot: + '8b59f2f2792f802e15c7ecfc44eb4e5a8da3ce830c1c53faaafbab9de5812bdb', + }, +} + +export const dnsTxtTokenRegMinted: WrappedDocument = { + version: SchemaId.v2, + data: { + $template: { + name: '65deecd5-b41f-408c-b2ee-7f2561f32502:string:main', + type: 'a8cdd6cd-e0bd-4b1b-9de3-63c49d66e226:string:EMBEDDED_RENDERER', + url: '060acff7-fca4-4c3d-ac2e-b9d70a031924:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: '24d1e2cf-e245-4fca-b8b4-76f4ad61c7b6:string:John Doe', + }, + issuers: [ + { + name: '1b949346-fc02-404f-94ff-a3b0a442141c:string:Demo Issuer', + tokenRegistry: + '9c9e8d16-aaa0-40ca-8633-f61e2f2d3b81:string:0x9Eb613a88534E2939518f4ffBFE65F5969b491FF', + identityProof: { + type: 'd1d58014-31af-45cc-a1c2-2b48022a0cb7:string:DNS-TXT', + location: + '195e5963-b6ed-440a-9e31-1f52f41df24f:string:example.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '8b59f2f2792f802e15c7ecfc44eb4e5a8da3ce830c1c53faaafbab9de5812bdb', + proof: [], + merkleRoot: + '8b59f2f2792f802e15c7ecfc44eb4e5a8da3ce830c1c53faaafbab9de5812bdb', + }, +} + +export const dnsTxttokenRegNotMinted: WrappedDocument = { + version: SchemaId.v2, + data: { + $template: { + name: '5c59bd33-5fba-4904-ad73-a6423993a1e3:string:main', + type: 'dbcd76ba-4c5e-43d8-8b0d-47f90c7d7492:string:EMBEDDED_RENDERER', + url: 'e78f3c82-9be6-4c9f-83dc-2817988c17bb:string:https://tutorial-renderer.openattestation.com', + }, + recipient: { + name: 'a5964e36-318e-40aa-b49e-a06131a74730:string:John Doe', + }, + issuers: [ + { + name: '47e0a10d-7b3e-4308-a865-3fae07c164f1:string:Demo Issuer', + tokenRegistry: + '8df433de-fb6b-4d13-afe5-feedc8bf48ef:string:0x9Eb613a88534E2939518f4ffBFE65F5969b491FF', + identityProof: { + type: 'b05dea77-c7ed-40a8-a5b0-7d9315e6d1a6:string:DNS-TXT', + location: + 'b9d5f684-80ba-4cda-bd94-cec907931d09:string:example.tradetrust.io', + }, + }, + ], + }, + signature: { + type: 'SHA3MerkleProof', + targetHash: + '1d24bc3377f39cd66ef196796236ced7eecec87571a857f2c309fd853834837d', + proof: [], + merkleRoot: + '1d24bc3377f39cd66ef196796236ced7eecec87571a857f2c309fd853834837d', + }, +} diff --git a/test/fixtures/verify/v3/dns-did.ts b/test/fixtures/verify/v3/dns-did.ts new file mode 100644 index 0000000..3757918 --- /dev/null +++ b/test/fixtures/verify/v3/dns-did.ts @@ -0,0 +1,213 @@ +import { SchemaId, v3 } from '@tradetrust-tt/tradetrust' + +export const dnsDidSigned = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DID', + value: 'did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7', + revocation: { + type: 'NONE', + }, + }, + identityProof: { + type: 'DNS-DID', + identifier: 'example.tradetrust.io', + }, + }, + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '7e5a3f03f8f4b06314689ec944748e60c97689ef734d75583577d6f647b9747d', + proofs: [], + merkleRoot: + '7e5a3f03f8f4b06314689ec944748e60c97689ef734d75583577d6f647b9747d', + salts: 'W3sidmFsdWUiOiJhNWI4ZDE5NGM1MjIxMzJjNDgwZTY3ZmM0YmYyZDQzMmU2NWQ0YjlmZmUxMWEwNjlmMjNlYWQ1OTdkMzJjMDRmIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMjk2ZmZhYTZiM2E5ZTRmZWU0ZjViMGU0NDA0ZDk5N2Q2MGRlY2YxMmZiZmViMDIyMjMwNTEzZGZiMDVjZGE3OSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI3YjUxMjYyZjcyNDExNDVkNDhkODI2NDJiMWUwMjlkYTdkNTZmNzkwNDU5NWQ1Nzg1M2UyMmQ2MDUwYmQyY2RjIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjNlZDhiZmVkNjkxZjg4MWMwZWNmOGNhZjJhYzA0ZGJjYzgzODFiOGIyNmU3YWZkMDg2MTZlNzA2Y2M1ZjZlNzUiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMWVhMDUxYTlmZDIyNzFhMDBkMWFkZjM2Zjc1ZTFkOWE1M2UyYjcwYTY0ZTc0NjNmYWRlMDhlYjY5NmRmZWFmMCIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiI0MmUxYjIzMTU2ZDNkYWE3Zjc1MTFkYjI1MDY5YjkxYjMwNzhiMjEwNWY1MmFmMTA0N2QwMjRjMzgzZjlkNzg5IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiI3ZGI3YzZlNTgwZGEwZTAyODM3OThjMmQxM2NiYTRkZTZiOTU5Yzg0MDUxNGFjN2I5ZjYzZmVhYWE0MzEwYzFlIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiZGI5MzQ2ZGJmYzQzYjFlZDAyNTM3MTNlM2VkNDNiZmYyYjY5NjcxMmM0M2M4ODE2ZjMwZmQ1ZWM5NGQ4NDk5MiIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiODg0Nzc3MDVhMzdkYTNiNjBhNWExYjZiZDAxZjI0NDFhYzdjN2IyMTg3MDNlODkyZTZhNGQ5N2EyNGRkMDAyYyIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiMTYyOTdmYThhN2JmZjAwNjc2ODdhMDUwZWNmZmY4MTdlY2RkYmExYjEyMTI0NDZmM2FhOTMwMjI1MDQ4NmExNyIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiNWEwZDE5NzE1ZTI1YTk5ZmQ1OTQ3OWI3Y2I5MDJhODk4MDkwNTE4YTNkMzQ4MzViZjM1MjAyNTNkYzE0ODYwZCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiJlYWFkZjY3YzE1OTFjZTM2YmVkMDYzYmQ4MTU0NzQ5OGY1MDViOTVhNWM1ZWFjYjRkNDQ3ZmE2NGUxNmVkYTIzIiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjhjNTM0MmViNDNjNDEzYmYwZmRiNTNiMWFlNWMzMjdmYzIyNGNiYTFiMjVkYmZlZDk5ZTYwZjM5ZWE4YWNkNWMiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIwMzk0YjE5ZWNjZmEyZjE4NmIzZGIxMGI1YmI4YzQwODBkOTQzY2IyNDZkN2ZhYWVlMzJkYWIwMDNhZTIzZjBlIiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiNTMyMDRhYWQ0N2I0YjFlYjQ4OGU0NjUwNWViMzg5MDNlYjk3OTQ3MThjMDhiZmI5NzBkZjE0YzY3ZWU5ZTUzMSIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6Ijg5NGEyZGM4NzdmNGE5YzU5NzQ2NTAzN2JlYjA2OWZjNDBmNzYyODRlZTI2MzUzZGM0NTA1NjRjY2UwOGIyNWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYmVhMmE3ZTczMzkxMWJhYzRkOWIyMTI0YmY0ZjgwZWJlZDAwYmZiNDNmZTUxYmIxMjVlNThhN2FiNjc5N2IzOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6IjZjMDE2ODgwM2ZlMWI3M2Q5YWQ4NjdmZDhkYjIyZjczZmQ4YjE2Y2VlYTMwMGYxNjVhNWYzMDE4ZmQzOTFhOGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiI1MGMzNDcxMGMxY2I1ZDNhZGMyZTJlZGExODBlM2JiZWJhN2U0Mzg3YzYyZTkwNzk2ZGVjYmM2NjY0ZjI0NGUzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiYmI1NTAxY2U3NzBiNjk4ZTJhZDZhNWQ2ODhkN2ViZmU4YWI0YzZmYzcxOTllOWI4YzY1NTdkN2M4NTE4MjgzMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImM0MDNmMWJlMWYwNmFhZmYzMWI2N2RhMjAxOGRhZmI4ZGE3ZDNiZWNkMmJjZGZhNjczYTA5M2M2OTEwZTkzNjciLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiIzNmE4OGNmYzk5Yzg5NThjYmVkOGYwYjQzMTdmMWE5ZjlkMmU4YTkyNzllNjhiM2RkZDU3OGI5YmMwYjE2NDVhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiNGUyODc1YjFmYzE0Y2ExMTg1YjIwMzdmMjZmZjM4OWFjODg3ZGExYjMxNTQ3MDYwODE4YzhmYzMzOGJkMjlkNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiOGU0NzQzYjY0MjIxMzE0YTFlZjA4MWI2ZmIxZTk1ZjU3OGUwZTEwMjY4ZGU5OTM2MWRmNTczNDQ1ZGEyMGU0ZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjdmMWRiZGQwYjM3YWNlYWRjNzY2OTJmZWE5NTRiYjIwNTAzYTY3MDI0ZmRiMGE5YjExN2QyYTA2MjlmNmYxMGEiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjA1NmFkYjhkMjZkZGQ0MzQyZTM5ZTdlNmRjYTA5ZTI0MjgxNDA3Mjg0MTU1ZjVmYWRlN2M0MjRjZTczZDZlZjkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiNzEzZDE4MGUxMDgxNWEwMGNjMmYwMmQyYTA4NDBhNzNkNzIxNWU3M2I0YzhhNWZlOGZmZGZkNzg2NDJjNTEwNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5yZXZvY2F0aW9uLnR5cGUifSx7InZhbHVlIjoiYWNmODhjZTFhZjhiNTg4MmFkOTlkNDAwZDJmM2UzY2MzYzAxMmJkOWY3OGFlYmY2YTNjYzNiMGFhMzYwYjAyMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNWRjNmNkYzBjMGJmMmI0OTMzYzQxNjk2ZmIzOWUzNzlkN2YxMWI0NjFkNDc0OTc0ZDY2NWI5MDBhZGJjNWEyZCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifV0=', + privacy: { + obfuscated: [], + }, + key: 'did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller', + signature: + '0x7d43a79c4dc1da3300457883bd2d5e3f181f1a19742984cfb0b191412793984f3fa83d9f5d3a800b4bd9403a0c35f87415da0d19daa23f3b2d05b8f425085f821c', + }, +} as v3.WrappedDocument +export const dnsDidUnSigned = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DID', + value: 'did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7', + revocation: { + type: 'NONE', + }, + }, + identityProof: { + type: 'DNS-DID', + identifier: 'example.tradetrust.io', + }, + }, + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '7e5a3f03f8f4b06314689ec944748e60c97689ef734d75583577d6f647b9747d', + proofs: [], + merkleRoot: + '7e5a3f03f8f4b06314689ec944748e60c97689ef734d75583577d6f647b9747d', + salts: 'W3sidmFsdWUiOiJhNWI4ZDE5NGM1MjIxMzJjNDgwZTY3ZmM0YmYyZDQzMmU2NWQ0YjlmZmUxMWEwNjlmMjNlYWQ1OTdkMzJjMDRmIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMjk2ZmZhYTZiM2E5ZTRmZWU0ZjViMGU0NDA0ZDk5N2Q2MGRlY2YxMmZiZmViMDIyMjMwNTEzZGZiMDVjZGE3OSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI3YjUxMjYyZjcyNDExNDVkNDhkODI2NDJiMWUwMjlkYTdkNTZmNzkwNDU5NWQ1Nzg1M2UyMmQ2MDUwYmQyY2RjIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjNlZDhiZmVkNjkxZjg4MWMwZWNmOGNhZjJhYzA0ZGJjYzgzODFiOGIyNmU3YWZkMDg2MTZlNzA2Y2M1ZjZlNzUiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMWVhMDUxYTlmZDIyNzFhMDBkMWFkZjM2Zjc1ZTFkOWE1M2UyYjcwYTY0ZTc0NjNmYWRlMDhlYjY5NmRmZWFmMCIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiI0MmUxYjIzMTU2ZDNkYWE3Zjc1MTFkYjI1MDY5YjkxYjMwNzhiMjEwNWY1MmFmMTA0N2QwMjRjMzgzZjlkNzg5IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiI3ZGI3YzZlNTgwZGEwZTAyODM3OThjMmQxM2NiYTRkZTZiOTU5Yzg0MDUxNGFjN2I5ZjYzZmVhYWE0MzEwYzFlIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiZGI5MzQ2ZGJmYzQzYjFlZDAyNTM3MTNlM2VkNDNiZmYyYjY5NjcxMmM0M2M4ODE2ZjMwZmQ1ZWM5NGQ4NDk5MiIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiODg0Nzc3MDVhMzdkYTNiNjBhNWExYjZiZDAxZjI0NDFhYzdjN2IyMTg3MDNlODkyZTZhNGQ5N2EyNGRkMDAyYyIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiMTYyOTdmYThhN2JmZjAwNjc2ODdhMDUwZWNmZmY4MTdlY2RkYmExYjEyMTI0NDZmM2FhOTMwMjI1MDQ4NmExNyIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiNWEwZDE5NzE1ZTI1YTk5ZmQ1OTQ3OWI3Y2I5MDJhODk4MDkwNTE4YTNkMzQ4MzViZjM1MjAyNTNkYzE0ODYwZCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiJlYWFkZjY3YzE1OTFjZTM2YmVkMDYzYmQ4MTU0NzQ5OGY1MDViOTVhNWM1ZWFjYjRkNDQ3ZmE2NGUxNmVkYTIzIiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjhjNTM0MmViNDNjNDEzYmYwZmRiNTNiMWFlNWMzMjdmYzIyNGNiYTFiMjVkYmZlZDk5ZTYwZjM5ZWE4YWNkNWMiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIwMzk0YjE5ZWNjZmEyZjE4NmIzZGIxMGI1YmI4YzQwODBkOTQzY2IyNDZkN2ZhYWVlMzJkYWIwMDNhZTIzZjBlIiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiNTMyMDRhYWQ0N2I0YjFlYjQ4OGU0NjUwNWViMzg5MDNlYjk3OTQ3MThjMDhiZmI5NzBkZjE0YzY3ZWU5ZTUzMSIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6Ijg5NGEyZGM4NzdmNGE5YzU5NzQ2NTAzN2JlYjA2OWZjNDBmNzYyODRlZTI2MzUzZGM0NTA1NjRjY2UwOGIyNWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYmVhMmE3ZTczMzkxMWJhYzRkOWIyMTI0YmY0ZjgwZWJlZDAwYmZiNDNmZTUxYmIxMjVlNThhN2FiNjc5N2IzOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6IjZjMDE2ODgwM2ZlMWI3M2Q5YWQ4NjdmZDhkYjIyZjczZmQ4YjE2Y2VlYTMwMGYxNjVhNWYzMDE4ZmQzOTFhOGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiI1MGMzNDcxMGMxY2I1ZDNhZGMyZTJlZGExODBlM2JiZWJhN2U0Mzg3YzYyZTkwNzk2ZGVjYmM2NjY0ZjI0NGUzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiYmI1NTAxY2U3NzBiNjk4ZTJhZDZhNWQ2ODhkN2ViZmU4YWI0YzZmYzcxOTllOWI4YzY1NTdkN2M4NTE4MjgzMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImM0MDNmMWJlMWYwNmFhZmYzMWI2N2RhMjAxOGRhZmI4ZGE3ZDNiZWNkMmJjZGZhNjczYTA5M2M2OTEwZTkzNjciLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiIzNmE4OGNmYzk5Yzg5NThjYmVkOGYwYjQzMTdmMWE5ZjlkMmU4YTkyNzllNjhiM2RkZDU3OGI5YmMwYjE2NDVhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiNGUyODc1YjFmYzE0Y2ExMTg1YjIwMzdmMjZmZjM4OWFjODg3ZGExYjMxNTQ3MDYwODE4YzhmYzMzOGJkMjlkNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiOGU0NzQzYjY0MjIxMzE0YTFlZjA4MWI2ZmIxZTk1ZjU3OGUwZTEwMjY4ZGU5OTM2MWRmNTczNDQ1ZGEyMGU0ZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjdmMWRiZGQwYjM3YWNlYWRjNzY2OTJmZWE5NTRiYjIwNTAzYTY3MDI0ZmRiMGE5YjExN2QyYTA2MjlmNmYxMGEiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjA1NmFkYjhkMjZkZGQ0MzQyZTM5ZTdlNmRjYTA5ZTI0MjgxNDA3Mjg0MTU1ZjVmYWRlN2M0MjRjZTczZDZlZjkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiNzEzZDE4MGUxMDgxNWEwMGNjMmYwMmQyYTA4NDBhNzNkNzIxNWU3M2I0YzhhNWZlOGZmZGZkNzg2NDJjNTEwNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5yZXZvY2F0aW9uLnR5cGUifSx7InZhbHVlIjoiYWNmODhjZTFhZjhiNTg4MmFkOTlkNDAwZDJmM2UzY2MzYzAxMmJkOWY3OGFlYmY2YTNjYzNiMGFhMzYwYjAyMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNWRjNmNkYzBjMGJmMmI0OTMzYzQxNjk2ZmIzOWUzNzlkN2YxMWI0NjFkNDc0OTc0ZDY2NWI5MDBhZGJjNWEyZCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifV0=', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsDidSignedAndTampered = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'TAMPERED_SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DID', + value: 'did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7', + revocation: { + type: 'NONE', + }, + }, + identityProof: { + type: 'DNS-DID', + identifier: 'example.tradetrust.io', + }, + }, + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '7e5a3f03f8f4b06314689ec944748e60c97689ef734d75583577d6f647b9747d', + proofs: [], + merkleRoot: + '7e5a3f03f8f4b06314689ec944748e60c97689ef734d75583577d6f647b9747d', + salts: 'W3sidmFsdWUiOiJhNWI4ZDE5NGM1MjIxMzJjNDgwZTY3ZmM0YmYyZDQzMmU2NWQ0YjlmZmUxMWEwNjlmMjNlYWQ1OTdkMzJjMDRmIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMjk2ZmZhYTZiM2E5ZTRmZWU0ZjViMGU0NDA0ZDk5N2Q2MGRlY2YxMmZiZmViMDIyMjMwNTEzZGZiMDVjZGE3OSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI3YjUxMjYyZjcyNDExNDVkNDhkODI2NDJiMWUwMjlkYTdkNTZmNzkwNDU5NWQ1Nzg1M2UyMmQ2MDUwYmQyY2RjIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjNlZDhiZmVkNjkxZjg4MWMwZWNmOGNhZjJhYzA0ZGJjYzgzODFiOGIyNmU3YWZkMDg2MTZlNzA2Y2M1ZjZlNzUiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMWVhMDUxYTlmZDIyNzFhMDBkMWFkZjM2Zjc1ZTFkOWE1M2UyYjcwYTY0ZTc0NjNmYWRlMDhlYjY5NmRmZWFmMCIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiI0MmUxYjIzMTU2ZDNkYWE3Zjc1MTFkYjI1MDY5YjkxYjMwNzhiMjEwNWY1MmFmMTA0N2QwMjRjMzgzZjlkNzg5IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiI3ZGI3YzZlNTgwZGEwZTAyODM3OThjMmQxM2NiYTRkZTZiOTU5Yzg0MDUxNGFjN2I5ZjYzZmVhYWE0MzEwYzFlIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiZGI5MzQ2ZGJmYzQzYjFlZDAyNTM3MTNlM2VkNDNiZmYyYjY5NjcxMmM0M2M4ODE2ZjMwZmQ1ZWM5NGQ4NDk5MiIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiODg0Nzc3MDVhMzdkYTNiNjBhNWExYjZiZDAxZjI0NDFhYzdjN2IyMTg3MDNlODkyZTZhNGQ5N2EyNGRkMDAyYyIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiMTYyOTdmYThhN2JmZjAwNjc2ODdhMDUwZWNmZmY4MTdlY2RkYmExYjEyMTI0NDZmM2FhOTMwMjI1MDQ4NmExNyIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiNWEwZDE5NzE1ZTI1YTk5ZmQ1OTQ3OWI3Y2I5MDJhODk4MDkwNTE4YTNkMzQ4MzViZjM1MjAyNTNkYzE0ODYwZCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiJlYWFkZjY3YzE1OTFjZTM2YmVkMDYzYmQ4MTU0NzQ5OGY1MDViOTVhNWM1ZWFjYjRkNDQ3ZmE2NGUxNmVkYTIzIiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjhjNTM0MmViNDNjNDEzYmYwZmRiNTNiMWFlNWMzMjdmYzIyNGNiYTFiMjVkYmZlZDk5ZTYwZjM5ZWE4YWNkNWMiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIwMzk0YjE5ZWNjZmEyZjE4NmIzZGIxMGI1YmI4YzQwODBkOTQzY2IyNDZkN2ZhYWVlMzJkYWIwMDNhZTIzZjBlIiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiNTMyMDRhYWQ0N2I0YjFlYjQ4OGU0NjUwNWViMzg5MDNlYjk3OTQ3MThjMDhiZmI5NzBkZjE0YzY3ZWU5ZTUzMSIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6Ijg5NGEyZGM4NzdmNGE5YzU5NzQ2NTAzN2JlYjA2OWZjNDBmNzYyODRlZTI2MzUzZGM0NTA1NjRjY2UwOGIyNWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYmVhMmE3ZTczMzkxMWJhYzRkOWIyMTI0YmY0ZjgwZWJlZDAwYmZiNDNmZTUxYmIxMjVlNThhN2FiNjc5N2IzOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6IjZjMDE2ODgwM2ZlMWI3M2Q5YWQ4NjdmZDhkYjIyZjczZmQ4YjE2Y2VlYTMwMGYxNjVhNWYzMDE4ZmQzOTFhOGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiI1MGMzNDcxMGMxY2I1ZDNhZGMyZTJlZGExODBlM2JiZWJhN2U0Mzg3YzYyZTkwNzk2ZGVjYmM2NjY0ZjI0NGUzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiYmI1NTAxY2U3NzBiNjk4ZTJhZDZhNWQ2ODhkN2ViZmU4YWI0YzZmYzcxOTllOWI4YzY1NTdkN2M4NTE4MjgzMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImM0MDNmMWJlMWYwNmFhZmYzMWI2N2RhMjAxOGRhZmI4ZGE3ZDNiZWNkMmJjZGZhNjczYTA5M2M2OTEwZTkzNjciLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiIzNmE4OGNmYzk5Yzg5NThjYmVkOGYwYjQzMTdmMWE5ZjlkMmU4YTkyNzllNjhiM2RkZDU3OGI5YmMwYjE2NDVhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiNGUyODc1YjFmYzE0Y2ExMTg1YjIwMzdmMjZmZjM4OWFjODg3ZGExYjMxNTQ3MDYwODE4YzhmYzMzOGJkMjlkNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiOGU0NzQzYjY0MjIxMzE0YTFlZjA4MWI2ZmIxZTk1ZjU3OGUwZTEwMjY4ZGU5OTM2MWRmNTczNDQ1ZGEyMGU0ZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjdmMWRiZGQwYjM3YWNlYWRjNzY2OTJmZWE5NTRiYjIwNTAzYTY3MDI0ZmRiMGE5YjExN2QyYTA2MjlmNmYxMGEiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjA1NmFkYjhkMjZkZGQ0MzQyZTM5ZTdlNmRjYTA5ZTI0MjgxNDA3Mjg0MTU1ZjVmYWRlN2M0MjRjZTczZDZlZjkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiNzEzZDE4MGUxMDgxNWEwMGNjMmYwMmQyYTA4NDBhNzNkNzIxNWU3M2I0YzhhNWZlOGZmZGZkNzg2NDJjNTEwNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5yZXZvY2F0aW9uLnR5cGUifSx7InZhbHVlIjoiYWNmODhjZTFhZjhiNTg4MmFkOTlkNDAwZDJmM2UzY2MzYzAxMmJkOWY3OGFlYmY2YTNjYzNiMGFhMzYwYjAyMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNWRjNmNkYzBjMGJmMmI0OTMzYzQxNjk2ZmIzOWUzNzlkN2YxMWI0NjFkNDc0OTc0ZDY2NWI5MDBhZGJjNWEyZCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifV0=', + privacy: { + obfuscated: [], + }, + key: 'did:ethr:0x391aFf3942857a10958425FebF1fC1938D9F5AE7#controller', + signature: + '0x7d43a79c4dc1da3300457883bd2d5e3f181f1a19742984cfb0b191412793984f3fa83d9f5d3a800b4bd9403a0c35f87415da0d19daa23f3b2d05b8f425085f821c', + }, +} as v3.WrappedDocument diff --git a/test/fixtures/verify/v3/dns-txt-doc-store.ts b/test/fixtures/verify/v3/dns-txt-doc-store.ts new file mode 100644 index 0000000..6c27252 --- /dev/null +++ b/test/fixtures/verify/v3/dns-txt-doc-store.ts @@ -0,0 +1,439 @@ +import { SchemaId, v3 } from '@tradetrust-tt/tradetrust' + +export const dnsTxtDocStore = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DOCUMENT_STORE', + value: '0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + attachments: [ + { + fileName: 'sample.pdf', + mimeType: 'application/pdf', + data: 'BASE64_ENCODED_FILE', + }, + ], + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '660e07e2defb55f04d6715448ac4f9c5718c8115c50ebd8931be15ed61ae8580', + proofs: [], + merkleRoot: + '660e07e2defb55f04d6715448ac4f9c5718c8115c50ebd8931be15ed61ae8580', + salts: 'W3sidmFsdWUiOiI0YmQ0MGZjZjliMGRjNzU3YjViMWU4MDhlNmEwMGQ3NWQ4NjZmYzg0ODYzYTA3YjRkYTllNGU4NjQ5MThiMjY3IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMDk4ZDk0ODZlNjZiMTQ4MDk5ZDQ2ZTI2NGQ3N2E0NjRjZDcwNjA3M2MwYTg2Yzk0NDlkNmIyMWYxYmRiZjFkZSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI3OWZkMDU0YjhjYzMwM2M3NWMzZDAxN2QzNTRhYzJjOGQyNjI1YjViNTdjZjM0OGJjMDVhODMwZTUzNDQzODBjIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjIyNjZkNmQxZTI4YTQwNzBmNTcyMDY3YTcwNTIzZjMxOWMyYTQ4YjJlMmVjMzRhNjgwNjAzNWU5YWVhM2QzMmIiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiOTk4YTVmODU5NzMzODRlYTE4ODMzMTY2NmRjZWY0ZTMwZGIyZDFjYmNjYjk0MzNjZmM5MmIyNjdjZDM5YWM2NSIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiIwMjg5ZDVmNjBiN2Y4MmMxMDg5MzFlYWZmNzAwYWI0YTgyMmYxYzAwMTMyMDQ1YjViYWE2YzZmYmE3NzBmYjk1IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiI5NDU3ZGEwMjI1MTVlYWU0MjRkZGI2ZDBiNmRiZmJkN2Y1ODRhNzM1ZjQ5OGQyNzc4ODhlOTY1ZTFjMjkxYjVkIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiNzY1ZmY5NDA3YWM5OWI1ZDNjYmY1YzhiMWQzNWQzYzVmOThiMTdkNzdmNDcyMWM5MWE3YTY2ZDZmMzEwYWVhMCIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiZjE0NDNkYjcxY2Q3YjJlYmZlMjk2NDA4NzViNjk5YWI4YjBkN2JmODEyZGM2MmZjZTQ1ZWEzMWU2MTllNzJhZiIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiNTIyODQ5ODgxODNjODk4NzM2NTBkMTNhNGYzN2NjOWNkMmVlNjcyMDIzZmFhNzVmMzY3NTZkNjMxYjAxZmI3OSIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiMDczMTc2YjZhNzAzNGJiZWE1YTIxNmNkMDIzOTA0NGUyYTVlNjdlMjRmY2M3MGM2ODg2YjM3YjhlY2RmMjJjMiIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiIzNTU2ODY5MjBmZTM5OGY3OThlZTk0OTcxMmU4YmQyY2Y2YmY4YmQ4OTU2M2E0ZTRlMTRlZjgzOGQwYTlhYWM1IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjBhMzZiN2YwMjVmZGZmMjZmZTc1ZDlhNTFjMzdiNzhjOTU0NGMwMjQzNjAxYzEzMjJkYWFhYjVjNjA0NDdlMWUiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIzMjliM2VmMDg3NjhjOTRmZDZiOTEyYWI2ZmIzOWNiMzhiN2MwODVkYjJlNGMzNWY3NzI1OGVjMzJiNTMyZGJjIiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiYmE1M2JlN2VhZjczN2Q2ZTIwZTY0YjVjNWIwZTcwMTZiNTkwOGM0MWRhZWVmMjJmMjczMmQ4NTEzNWJiNmIwNiIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6ImU2MTc3Nzc0MWViYzljNzM2MmU2MjVhNmEwZDhiNDdkOWUzM2ZmMDk1MzQ4ZTgwYzg0ZjkzN2Q1ZjRkMjRhMmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiZWM1NGExYjM2MzExNDA1MjY0ODZhZDFkMzk5ZTZmNTA0NWM0MmI2MzUyODg5MzhhN2FjYTRjMzY3OWFmMzc1NCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6ImRkY2UzNjBjNDQwMmI0OGU1MzNmMDM4NWMxMzNlMTAzYTI2OGYyOWI2OWY2Zjc5YzUzOTQzOThiNzkyMTQ5YmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiI2NDEzMjhkMmQzN2UzMGI0NTA5YWVkNWM0ODQwYWRlOTRjMTIzMmUxMjBkZmMxMWE0OGJmZTM3MDhmYzRjNzhiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiZDk2ZDI5YjE1NjM1YzgwYmY4ZDgxYmQ0OGMzZTk3MWVjNTRmNmNjMTY4YTI3NGJjMTllY2VkYjczMTQwZDg4ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImIxZmZiMjQ5ZmVlYzg2N2JkZDUxOWM4YzY4NGEzMDllNWE1MDE3ZjM1Njk2NWNiNzU5MjY3MjhkYmE1MzgwMTkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiJkOGQyYjA4YmIxYjU2MDNkYjk2N2QxNWUwMDM4N2ZkMmIxMmQxYzk2NjFkZDAxZGVhODhiNzkzZTI5OWEyNWVhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiYjkwZjdlMzIyN2ZkYjA4MWRjZTg3ZTI4MWMwNjUzYWJiNGQyYzJkMGU0NTY3ZTcxNjk2MmMwOGZhYzkwMThhZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiZDE5NzIxZWJkYjNlMDhlZmZlMTUyYTkyNDljYzg5NTkxZGNhNGMzMTA0MzI5NjdkYTllZjFkMmFkNDk4YjdlNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjI2M2FkODRjOWQ3ZTljMzRhMzY5MjYxYTEyMGNhMDdlODJhMTI0NTE3NzdmM2MyYjg2NDVjYjY4OWU3MDViYjIiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjgyM2E3MTRiMzdiMGJjOWE1Y2Q3ZDBlNGRjMTNmYWVhZTYxNTdiZjM5NjQ2NmE1YTA3OGIwODM4MDA4YWVmYmQiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiY2IyZGE4NWQ2MmRlOWNmNmZmMzNkMWU2MjFkNjBkM2EzZjJlZjBiMjBhZGZjZGZjOTkxYTEzMzZhNjA3ODUxYSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNmJhMzBmNjgwYTg2OTUxOTMwMGE5ZjQzNjE5M2FiODYyZDM5MzIyODkxNTFjMzc5YzFhZDQxNDk0ODVjM2Y4OSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiYWZmM2Y3YWNkYTBlMDM4N2U1MTU4NDFjNTNkOWNjZjFkZmU0ODc5YmEzNjBmYjJkYmRkNmVlNWJlYmRiODcwMSIsInBhdGgiOiJhdHRhY2htZW50c1swXS5maWxlTmFtZSJ9LHsidmFsdWUiOiI1YTE5NTlmZWRkMDkyZDg1YTBmYzk3MGM0MGI3ZjcyNjYzNWRmZDMyYzI1Yjk1NjhjODlmZTE3MjQwYWMxYzNhIiwicGF0aCI6ImF0dGFjaG1lbnRzWzBdLm1pbWVUeXBlIn0seyJ2YWx1ZSI6ImRjYWVkYTNmMzg0MjYyNzc1MWU5ZGJlZDExNWFkNWQ4ZmYyOTZhYWFjYWZmNzhmNTQxNTJmNjc1MzhkYzgyZDEiLCJwYXRoIjoiYXR0YWNobWVudHNbMF0uZGF0YSJ9XQ==', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxtDocStoreTampered = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'TAMPERED_SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DOCUMENT_STORE', + value: '0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + attachments: [ + { + fileName: 'sample.pdf', + mimeType: 'application/pdf', + data: 'BASE64_ENCODED_FILE', + }, + ], + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '660e07e2defb55f04d6715448ac4f9c5718c8115c50ebd8931be15ed61ae8580', + proofs: [], + merkleRoot: + '660e07e2defb55f04d6715448ac4f9c5718c8115c50ebd8931be15ed61ae8580', + salts: 'W3sidmFsdWUiOiI0YmQ0MGZjZjliMGRjNzU3YjViMWU4MDhlNmEwMGQ3NWQ4NjZmYzg0ODYzYTA3YjRkYTllNGU4NjQ5MThiMjY3IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMDk4ZDk0ODZlNjZiMTQ4MDk5ZDQ2ZTI2NGQ3N2E0NjRjZDcwNjA3M2MwYTg2Yzk0NDlkNmIyMWYxYmRiZjFkZSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI3OWZkMDU0YjhjYzMwM2M3NWMzZDAxN2QzNTRhYzJjOGQyNjI1YjViNTdjZjM0OGJjMDVhODMwZTUzNDQzODBjIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjIyNjZkNmQxZTI4YTQwNzBmNTcyMDY3YTcwNTIzZjMxOWMyYTQ4YjJlMmVjMzRhNjgwNjAzNWU5YWVhM2QzMmIiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiOTk4YTVmODU5NzMzODRlYTE4ODMzMTY2NmRjZWY0ZTMwZGIyZDFjYmNjYjk0MzNjZmM5MmIyNjdjZDM5YWM2NSIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiIwMjg5ZDVmNjBiN2Y4MmMxMDg5MzFlYWZmNzAwYWI0YTgyMmYxYzAwMTMyMDQ1YjViYWE2YzZmYmE3NzBmYjk1IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiI5NDU3ZGEwMjI1MTVlYWU0MjRkZGI2ZDBiNmRiZmJkN2Y1ODRhNzM1ZjQ5OGQyNzc4ODhlOTY1ZTFjMjkxYjVkIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiNzY1ZmY5NDA3YWM5OWI1ZDNjYmY1YzhiMWQzNWQzYzVmOThiMTdkNzdmNDcyMWM5MWE3YTY2ZDZmMzEwYWVhMCIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiZjE0NDNkYjcxY2Q3YjJlYmZlMjk2NDA4NzViNjk5YWI4YjBkN2JmODEyZGM2MmZjZTQ1ZWEzMWU2MTllNzJhZiIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiNTIyODQ5ODgxODNjODk4NzM2NTBkMTNhNGYzN2NjOWNkMmVlNjcyMDIzZmFhNzVmMzY3NTZkNjMxYjAxZmI3OSIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiMDczMTc2YjZhNzAzNGJiZWE1YTIxNmNkMDIzOTA0NGUyYTVlNjdlMjRmY2M3MGM2ODg2YjM3YjhlY2RmMjJjMiIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiIzNTU2ODY5MjBmZTM5OGY3OThlZTk0OTcxMmU4YmQyY2Y2YmY4YmQ4OTU2M2E0ZTRlMTRlZjgzOGQwYTlhYWM1IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjBhMzZiN2YwMjVmZGZmMjZmZTc1ZDlhNTFjMzdiNzhjOTU0NGMwMjQzNjAxYzEzMjJkYWFhYjVjNjA0NDdlMWUiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIzMjliM2VmMDg3NjhjOTRmZDZiOTEyYWI2ZmIzOWNiMzhiN2MwODVkYjJlNGMzNWY3NzI1OGVjMzJiNTMyZGJjIiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiYmE1M2JlN2VhZjczN2Q2ZTIwZTY0YjVjNWIwZTcwMTZiNTkwOGM0MWRhZWVmMjJmMjczMmQ4NTEzNWJiNmIwNiIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6ImU2MTc3Nzc0MWViYzljNzM2MmU2MjVhNmEwZDhiNDdkOWUzM2ZmMDk1MzQ4ZTgwYzg0ZjkzN2Q1ZjRkMjRhMmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiZWM1NGExYjM2MzExNDA1MjY0ODZhZDFkMzk5ZTZmNTA0NWM0MmI2MzUyODg5MzhhN2FjYTRjMzY3OWFmMzc1NCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6ImRkY2UzNjBjNDQwMmI0OGU1MzNmMDM4NWMxMzNlMTAzYTI2OGYyOWI2OWY2Zjc5YzUzOTQzOThiNzkyMTQ5YmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiI2NDEzMjhkMmQzN2UzMGI0NTA5YWVkNWM0ODQwYWRlOTRjMTIzMmUxMjBkZmMxMWE0OGJmZTM3MDhmYzRjNzhiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiZDk2ZDI5YjE1NjM1YzgwYmY4ZDgxYmQ0OGMzZTk3MWVjNTRmNmNjMTY4YTI3NGJjMTllY2VkYjczMTQwZDg4ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImIxZmZiMjQ5ZmVlYzg2N2JkZDUxOWM4YzY4NGEzMDllNWE1MDE3ZjM1Njk2NWNiNzU5MjY3MjhkYmE1MzgwMTkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiJkOGQyYjA4YmIxYjU2MDNkYjk2N2QxNWUwMDM4N2ZkMmIxMmQxYzk2NjFkZDAxZGVhODhiNzkzZTI5OWEyNWVhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiYjkwZjdlMzIyN2ZkYjA4MWRjZTg3ZTI4MWMwNjUzYWJiNGQyYzJkMGU0NTY3ZTcxNjk2MmMwOGZhYzkwMThhZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiZDE5NzIxZWJkYjNlMDhlZmZlMTUyYTkyNDljYzg5NTkxZGNhNGMzMTA0MzI5NjdkYTllZjFkMmFkNDk4YjdlNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjI2M2FkODRjOWQ3ZTljMzRhMzY5MjYxYTEyMGNhMDdlODJhMTI0NTE3NzdmM2MyYjg2NDVjYjY4OWU3MDViYjIiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjgyM2E3MTRiMzdiMGJjOWE1Y2Q3ZDBlNGRjMTNmYWVhZTYxNTdiZjM5NjQ2NmE1YTA3OGIwODM4MDA4YWVmYmQiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiY2IyZGE4NWQ2MmRlOWNmNmZmMzNkMWU2MjFkNjBkM2EzZjJlZjBiMjBhZGZjZGZjOTkxYTEzMzZhNjA3ODUxYSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNmJhMzBmNjgwYTg2OTUxOTMwMGE5ZjQzNjE5M2FiODYyZDM5MzIyODkxNTFjMzc5YzFhZDQxNDk0ODVjM2Y4OSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiYWZmM2Y3YWNkYTBlMDM4N2U1MTU4NDFjNTNkOWNjZjFkZmU0ODc5YmEzNjBmYjJkYmRkNmVlNWJlYmRiODcwMSIsInBhdGgiOiJhdHRhY2htZW50c1swXS5maWxlTmFtZSJ9LHsidmFsdWUiOiI1YTE5NTlmZWRkMDkyZDg1YTBmYzk3MGM0MGI3ZjcyNjYzNWRmZDMyYzI1Yjk1NjhjODlmZTE3MjQwYWMxYzNhIiwicGF0aCI6ImF0dGFjaG1lbnRzWzBdLm1pbWVUeXBlIn0seyJ2YWx1ZSI6ImRjYWVkYTNmMzg0MjYyNzc1MWU5ZGJlZDExNWFkNWQ4ZmYyOTZhYWFjYWZmNzhmNTQxNTJmNjc1MzhkYzgyZDEiLCJwYXRoIjoiYXR0YWNobWVudHNbMF0uZGF0YSJ9XQ==', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxtDocStoreRevoked = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DOCUMENT_STORE', + value: '0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + attachments: [ + { + fileName: 'sample.pdf', + mimeType: 'application/pdf', + data: 'BASE64_ENCODED_FILE', + }, + ], + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + 'eeef582def4ebea8fad684c33f67194f3a922692a3d9b96ca9d90150adf7259c', + proofs: [], + merkleRoot: + 'eeef582def4ebea8fad684c33f67194f3a922692a3d9b96ca9d90150adf7259c', + salts: 'W3sidmFsdWUiOiI0ZTk0NWY3ODhiMzUxZjVjMmQ3MjNmOTE0NzBmMTBkZmRmYjM3ZjI4MDMyYTQzMzQ2YTA5ZWE4MzdmOGM4Y2UwIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiZTU0MDM1YzEyNWFlMDBjMmE4YjE0N2EwYzg1NWIzZDRkNjI1OGU2YWVhY2E5YjI2YWE2OGQ0YzhjZmQ5MmY3NCIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI2NGNmMzIzM2MxNTE4NmQxNTA3ODkzYWY0ZThlYzc3OTQzNDExZjFlNjE5YTU1ZTA1YjllNzE1OGMwYjdmMWNjIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6ImY4Yzg3MjQxMjBkZjNkODYyOWM5YzFmZjZiNzRjYjlmOWRiNmE4NWQ3ZDY5ZWY5OTFkYzIwNzc5OGNkOThkMjYiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNGEwZDZjOGRlODU5MGUyNDRiYzU5NGEwMzQwNmMwYjRiMzhmNjkzYzQyNjJmMzc1Mzg5NzM3NGU1NDM2OGVkNyIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiI5MjBjNjhjNmU2N2NiZWQ5YWQzMzFmNWQzMmJkM2MyMDM3NzNiMmRiYWIyYzU0Y2QxZjM1MmZmZjA5NTQ2MGU2IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiJiZmRiNzE5NDY3NjhhNzc0MTZkYzdhYmVlZGYzYWYxN2QwYjUxYjQ1ZmYyZDVkYTIxODMzYjkwYThlZjRmZjBjIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiY2Y4N2QzMDM2N2M4MDU3YmNiZjE5NTJhMGRkNDQ3Nzg1YjZkZDk4NGY2NWYzYzdjOGIyMDdlZDE0NWUyOWM2OSIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiODExMGZkZWNmM2FkMDkwYjk4MTM0NTQwNzEwOWVkZDJiNjVlMDM3OGYyNGJlZmZlOTQxZWYyZjE4NzU2YzQ0MCIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiZmJkNTU0ZWRlNjM1Zjg4MzVmMmU1NDI2ZDJlNTNkMjczMDYzNzczMDQ5NGJiY2Q3Zjg4MTI5ZTczY2U1MzIxYyIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiOTIwMjA5M2VjMGU4ZTQ3YmRhOGMzZmI1NDcyMGM3NDQ1MGM0NzQxZDc3NmFhMWI1ODA3MDAxNjRiNDY1ZmY0MCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiJhNWFjZGIzOTE2ZThlYTU4ZjIxOTQwOGQ5YTNiZjM5MzNiZThiNDhmYjhiMTJmMjg2NGY0NWRhYzczYWUwZjgyIiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6Ijg3OGMxNjY0ZGQ3MDgxNzk4ZmM5M2ZhMDY3ZjZmMTRjODkwMGU2NWE4M2RkMTg4ODcwNzA5YWRkZWI2NjVmYWIiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIwYjZlZDk3YzRhZjBiYmE5ZTg2ZGE5ZjJmZTQ0YTUxYzU0YTNlOTA0ZjVkZWRkMTc4ODc1Mzc1OGYyMTdkMDEwIiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiMGY5ZTA0MzdiNGEzYjU1YzNhYzI2ZWE1MDk4MjU3MDFlNGQ2NzkwMWE3Y2ExNzNkYWM5YTM1M2E1MTE0NzQ1OCIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6Ijg3NjhmNTNhYzAzODBkODY5OWJhM2VlNmM5YTJkYThhODJjYWIyNjg5MTU5OGNiOTVhMWRmZjI1MTg3MzEyYjYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiOGRiNGZiYzRlMzIwOGI3MjhhNTdmYjQ0MzQyN2U2ODA2MWNjMjRjNGQxZTZmNjBjMjlkYWUwMjQzYzhhMGIzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6ImUzZjFlOTMwYzliYWNmNDMyYmNhODg5NTZmZTgzODcwZTUyNzg0MTQxODIyNjQ2MzExOGEyNmFhZjY0OGM3YzMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiJjMDkxOTdkYTk0YTk4OTg5NDdkYjYxOTZiMTIyMTdjZmFiYjFhZmYzYTNiOTQ0YTJkYTI5ZDk0Njk5NDExNjA4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiMmYzNTg4NjljNWRkZDgwNTI2MjcwZmViNDlhMmRiMmJlNWI4ZDZlM2E2MjlhMGFiMDk1YTgzN2YzNzc4YTljNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6IjI2ODhmYWY2MjQyMmY3NGJiZjk2YWM0ZGY0MDUyMzVkYzQyMGFiZTczZWU0Y2RjNzg2ZTQyZTAyYWJmZWM5MzgiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiI4OWYxMzdlZDI3MzQyN2MwNTg1ZWI2MTg5YWZiYzlkYTVmY2IxNjMxNDI1ODkxOGRkODg1NDU5OTgyNzIyMTIyIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiMTY4YmJkZTk4ZjAzNDMxZDFmMzcxMjgwMmUwY2Y5NjI0MWI2ODcxNDRmYTAwMTllYWVkZTI5YjJmZDQxYzE3NSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiZDc1MGY2M2Y0MTkxMDJlZGYzMTQ0MzRiZTg2OWQ3YWJmYWQwNGUwY2IwODBmZDYwNTE1ZmZlMTlmNmQ2OTg5ZiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6Ijk1YjkzNmViYmY4MmI2M2I2YTI3ODAwMGJjNjAxZDZjNGM4NDk1NWYxMjE4OTc4YWU5NGViZDcxYTA5ZTNhNmQiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6Ijk5OWE2ZjIwNmQyMDcyNzlkNTBjM2IyOTJjNjE0OTBmZGIyNDllMDQ4NzY0ZjM2NWExOWJhN2VjNWZkNGU1MDEiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiOWNlYjhjZmQ4YmFjYWI1MjVkMWJhM2UzOTUyZWRhODk5NDQzYjY3ZDBiNThiOGFmZGIzYThkYjk2ODA5NjViMSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiMGM2MmVhMTY0MTE3NzBiMDdiNmJiOTU0MTMzZWFhZjNjYzEzMjIxZjZmMDBjMDIwODNjZjZjMWRiZDg4MmM3ZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiNmQzMzhmZDU4YWY3ZjJkZDMxNWY4NzA2ODFkM2VhY2RlZmVhNWRlOTEwNDc2ODdiYjlkZTEwZTU1ZDQ0YjYxNyIsInBhdGgiOiJhdHRhY2htZW50c1swXS5maWxlTmFtZSJ9LHsidmFsdWUiOiJjNTZmN2UyZTg4NTRkMjQ5NTNkNWU4OTAzZjcxNjY4M2FkMmZhNzVkMDE4MTRkNzA0OGU0NmNkNTRhYWNiZTZmIiwicGF0aCI6ImF0dGFjaG1lbnRzWzBdLm1pbWVUeXBlIn0seyJ2YWx1ZSI6IjFjMmZhZmQ4MGMxNzJjYmNjM2M2ZDFmNWI1OTVmYmY4MjE2YmEwOWM5ODVlMTliNmU1ZTE3MzAzMGE2MGE2NTYiLCJwYXRoIjoiYXR0YWNobWVudHNbMF0uZGF0YSJ9XQ==', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxtDocStoreIncorrectDNS = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DOCUMENT_STORE', + value: '0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example123.tradetrust.io', + }, + }, + attachments: [ + { + fileName: 'sample.pdf', + mimeType: 'application/pdf', + data: 'BASE64_ENCODED_FILE', + }, + ], + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '3ef17c1a3b5a05395340c7ba30c41fc1a73f3091585fade6401a42eb684944a8', + proofs: [], + merkleRoot: + '3ef17c1a3b5a05395340c7ba30c41fc1a73f3091585fade6401a42eb684944a8', + salts: 'W3sidmFsdWUiOiI0ZmQ4Yzg4MmI4N2E4YWMyYWU2MjZiZjFmNzlmYTQ5NzQ5NTAzYTRmNTg3MzhhMGFhZTlkMmRmMTNmMjFlNTExIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiYWM1ZmVjNjgzMzZiY2ZiNDk5Y2MzNzIxZmU4ZWRjZThkNzY2ZjdmYTc4NDllMGFiZDgxMGJlYTc3YmY3ZjJiOCIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI1YzRiMDQzNTcwNjUxZDc4N2NjNjcxNDE0ZTY5ZGZkZGU0MjA3NjNhY2IwYzQxYzEwZjIxMzgxYjc4YzVhZmQxIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6ImZkMzQ4ZmY5ZjNiMDkwNWQxNjM3ZjQ4MTcyMDMxZmI3ZmM1N2U1MDkzMDQ4YjBlNzVkZmJmOGExZTFhMDRjNzgiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiZTQxNzA5ZTFiYTg5N2I1MWEyODk5NTczOWEyYmJlMmViZWQwMGEyMWJmZWM1ZTFjODk0NWMxOGFjZjgzZjQwNSIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiJjOWRiYjA1OWI5NGUzN2QyOWM1YjBiMmI2MmE1OWY1N2ZiNTMyMmExYzM1ODg5MGUwYjM2NDJiMDczNjdhYjhiIiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiJiYjc4NGM3ZTE0OWY5ODcyNjA2MzA2YjVmNTAxNjQxNDRlNmYxYTI5ZGQ2YTJkNDlhZDZmZDk2NWZlMjM5OWY2IiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiNmY0YzQ3ZjQ4NTI5YzIwMjA3YjQ4MDBkODRiNDk5ZWI3ODU1ODBlMTFkZjFlMGU5Nzc3Y2IwYzUyMDY0NzkzNiIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiNDU1NzMzYzU0NzNiYTA5ZjBmMDMxM2IwMjE4Y2IzNjU5ZTg1MTgxY2IzYjdmMGVkNTE2ODg4NjViZDBjZDI4YSIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiNGE2MTc3ZDQ1MzYxYmIxMTljNTMxZGIyOTM1Mjg4MzEyYzM5MmNhODZiNTIxYjMzYzllMmI3NjIzMDNmNzVmOSIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiYWZiY2U1OTUyYzdlNjM4YTU4ZWRlYjRkYWQ0OTI4MTNiZWZlODJmZWJhYzhkYmEyZTk1MzVkMDVkNDJjMmRhYiIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiJmM2M0OTJmYzgxOTc2NzQ5MWE5ZGM5ODU0MWI2OTgwZjZkZTg3YjNjNDY1MmRmY2U4ZDQwNzYxMjc3NTI1NGMzIiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6ImE5ZDc3MDlkN2U3YjE2MmMzZTllMzQzOWQ4ODBlOTk1MTdjZGJlODFiZDFmMTFlNGZkOWQzZGU4ZWIyOTE1MGQiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiJiMDQ4YjJmODBlY2UzMTY1MzliYmE3N2VmMzczNDhiM2U0MzZkOGJjYmYxM2M5NmMxZGRhYjIzYWU5N2M2ZjY3IiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiNTdiYmE1Nzg3YWZiNzA5NjA3Y2UwNWExZGVjMzJkMGQ2YjA5YWE2OTcwYmVlYzQ4YWZlMTljNmQyNmQzMjlkNyIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6Ijc1ODQ2MDk4YTI1ZTE3NTZjZTliZmViNzE3MTIwOThmMjIxOTVlNGMwZDgwNTdmMGQ3ZjJiNzE5ZGY0Nzk0OGEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNDE0Njg4NzNhYzBkYmVkYzBlZjc4YTI3MmE5MDgyNWMyOGNkNjRiNzc5ZjFkZmU3YTIyZWE3MTVlYWRiMmQ1MSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6IjVkNzMyZjI1YWExOTlkZjI4NDRkNmI4MWQyNWIzNjdhY2E4Yjc4ZTM4NGE2NWNhOTZkMGI4ZTQxYmU2ZTcwMDEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiJlMTY5Yjg4YjdjZTJiNTI1OTFjZGRhYjY0MTFhMDE2Y2JjMzA1ZDUzYjVlYTBkYTczZDdlODM5MDNiNjYyMDM5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiNWNjZWY0M2U0OWIxN2FhM2E1YmIzNzM3NjdhODUyZmVjYmViN2ViMTM1NmUyMDQzZGE4YTMyMjZlNzA3MmEzNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImIzMzNhMDJjNTY2OTkyYjQwZmJkYjVjYjgxZjEyNmM5OWUzOGNmYTE4MTBlNTdjZmQ1ZDI2NjkzYTczNDBlMjAiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiIzYjg2MjM1N2RkYzkwNzc0YzJiNDY3ZGJiNjM5MzE4ZmY1MDdmYTdmOThhNTM0NWIzZTI2ZWFmOTM5MzNjYWY4IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiNGFhYTVmYTEyZmZkZjgyOTMxMTUyYzYyZGVjYTE0NDMxMTQ2MzM2N2FiNzU4MDAyN2E0YTI2ZDVmMzI4N2UzOSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiMDAwZThmNDYwNWY0YjRkNTFjYzM4NDM2ZWFlZWIzOGQwNzc3N2NlYjA5NmJkYWZhOTU0OTU1Y2VhMjI0MzJlOSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6ImQxZWMwODhmZDVhNGY0ZjFiM2EyY2M3MGU1NjQ1MTUxNWI3NDNhZDhiZjg3YTE3MTAwNzgyNDkyYjQwOGI3NDAiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6ImIwZTU1NTc4NmMzNjI5YjNmMDdmYmQ3NDAxNzQyNjJlZDE3M2RiYzk5M2NmMmRmNDkwZDkyNWZhYzk4YmFhYjUiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiZTBhYmExYWU4ZThhMGNjZTU4MDllNDI0MjQ4YjE0ZTExYTdkN2QzOTEwYjI5ZjA3NjNmNzc3MzM5NDFiMDM5MSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNzUxOWQ0YzcyMTlhMjZjYzM5M2I3NzAzZjIzYjhhZjkzZjI1OTg1N2I1YjdiMjIwODMyMmU1YmQ5MDk0M2MzMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiODkyZTNjNDdmNTcxNTc3OTY4YWI2NTdjYzAzN2Q2ZjRkZjAxZmQ5NzdkMWMwM2JkMzM5OGVlZmYyZDU4N2I2OCIsInBhdGgiOiJhdHRhY2htZW50c1swXS5maWxlTmFtZSJ9LHsidmFsdWUiOiIxMWM4ZGVkNDhmOTAxNjZmZTY5MTZhY2EyMTQ3NjcxOGNlN2M0OTA3MGE0NjBjMTJkOTIwZTdiZDU5MjE5OGE4IiwicGF0aCI6ImF0dGFjaG1lbnRzWzBdLm1pbWVUeXBlIn0seyJ2YWx1ZSI6IjhmMGUyNWI1ODgyMzJjNDhmNDU3ZmQ3M2RlNDE1MGZlMTQxMGU4ODQzMzdiMzc4MWM1NzI5Mjc4NDBjZGIzODkiLCJwYXRoIjoiYXR0YWNobWVudHNbMF0uZGF0YSJ9XQ==', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxtDocStoreObfuscated = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DOCUMENT_STORE', + value: '0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + attachments: [ + { + fileName: 'sample.pdf', + mimeType: 'application/pdf', + data: 'BASE64_ENCODED_FILE', + }, + ], + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '660e07e2defb55f04d6715448ac4f9c5718c8115c50ebd8931be15ed61ae8580', + proofs: [], + merkleRoot: + '660e07e2defb55f04d6715448ac4f9c5718c8115c50ebd8931be15ed61ae8580', + salts: 'W3sidmFsdWUiOiI0YmQ0MGZjZjliMGRjNzU3YjViMWU4MDhlNmEwMGQ3NWQ4NjZmYzg0ODYzYTA3YjRkYTllNGU4NjQ5MThiMjY3IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMDk4ZDk0ODZlNjZiMTQ4MDk5ZDQ2ZTI2NGQ3N2E0NjRjZDcwNjA3M2MwYTg2Yzk0NDlkNmIyMWYxYmRiZjFkZSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI3OWZkMDU0YjhjYzMwM2M3NWMzZDAxN2QzNTRhYzJjOGQyNjI1YjViNTdjZjM0OGJjMDVhODMwZTUzNDQzODBjIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjIyNjZkNmQxZTI4YTQwNzBmNTcyMDY3YTcwNTIzZjMxOWMyYTQ4YjJlMmVjMzRhNjgwNjAzNWU5YWVhM2QzMmIiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiOTk4YTVmODU5NzMzODRlYTE4ODMzMTY2NmRjZWY0ZTMwZGIyZDFjYmNjYjk0MzNjZmM5MmIyNjdjZDM5YWM2NSIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiIwMjg5ZDVmNjBiN2Y4MmMxMDg5MzFlYWZmNzAwYWI0YTgyMmYxYzAwMTMyMDQ1YjViYWE2YzZmYmE3NzBmYjk1IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiI5NDU3ZGEwMjI1MTVlYWU0MjRkZGI2ZDBiNmRiZmJkN2Y1ODRhNzM1ZjQ5OGQyNzc4ODhlOTY1ZTFjMjkxYjVkIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiNzY1ZmY5NDA3YWM5OWI1ZDNjYmY1YzhiMWQzNWQzYzVmOThiMTdkNzdmNDcyMWM5MWE3YTY2ZDZmMzEwYWVhMCIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiZjE0NDNkYjcxY2Q3YjJlYmZlMjk2NDA4NzViNjk5YWI4YjBkN2JmODEyZGM2MmZjZTQ1ZWEzMWU2MTllNzJhZiIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiNTIyODQ5ODgxODNjODk4NzM2NTBkMTNhNGYzN2NjOWNkMmVlNjcyMDIzZmFhNzVmMzY3NTZkNjMxYjAxZmI3OSIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiMDczMTc2YjZhNzAzNGJiZWE1YTIxNmNkMDIzOTA0NGUyYTVlNjdlMjRmY2M3MGM2ODg2YjM3YjhlY2RmMjJjMiIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiIzNTU2ODY5MjBmZTM5OGY3OThlZTk0OTcxMmU4YmQyY2Y2YmY4YmQ4OTU2M2E0ZTRlMTRlZjgzOGQwYTlhYWM1IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjBhMzZiN2YwMjVmZGZmMjZmZTc1ZDlhNTFjMzdiNzhjOTU0NGMwMjQzNjAxYzEzMjJkYWFhYjVjNjA0NDdlMWUiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIzMjliM2VmMDg3NjhjOTRmZDZiOTEyYWI2ZmIzOWNiMzhiN2MwODVkYjJlNGMzNWY3NzI1OGVjMzJiNTMyZGJjIiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiYmE1M2JlN2VhZjczN2Q2ZTIwZTY0YjVjNWIwZTcwMTZiNTkwOGM0MWRhZWVmMjJmMjczMmQ4NTEzNWJiNmIwNiIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6ImU2MTc3Nzc0MWViYzljNzM2MmU2MjVhNmEwZDhiNDdkOWUzM2ZmMDk1MzQ4ZTgwYzg0ZjkzN2Q1ZjRkMjRhMmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiZWM1NGExYjM2MzExNDA1MjY0ODZhZDFkMzk5ZTZmNTA0NWM0MmI2MzUyODg5MzhhN2FjYTRjMzY3OWFmMzc1NCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6ImRkY2UzNjBjNDQwMmI0OGU1MzNmMDM4NWMxMzNlMTAzYTI2OGYyOWI2OWY2Zjc5YzUzOTQzOThiNzkyMTQ5YmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiI2NDEzMjhkMmQzN2UzMGI0NTA5YWVkNWM0ODQwYWRlOTRjMTIzMmUxMjBkZmMxMWE0OGJmZTM3MDhmYzRjNzhiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiZDk2ZDI5YjE1NjM1YzgwYmY4ZDgxYmQ0OGMzZTk3MWVjNTRmNmNjMTY4YTI3NGJjMTllY2VkYjczMTQwZDg4ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImIxZmZiMjQ5ZmVlYzg2N2JkZDUxOWM4YzY4NGEzMDllNWE1MDE3ZjM1Njk2NWNiNzU5MjY3MjhkYmE1MzgwMTkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiJkOGQyYjA4YmIxYjU2MDNkYjk2N2QxNWUwMDM4N2ZkMmIxMmQxYzk2NjFkZDAxZGVhODhiNzkzZTI5OWEyNWVhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiYjkwZjdlMzIyN2ZkYjA4MWRjZTg3ZTI4MWMwNjUzYWJiNGQyYzJkMGU0NTY3ZTcxNjk2MmMwOGZhYzkwMThhZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiZDE5NzIxZWJkYjNlMDhlZmZlMTUyYTkyNDljYzg5NTkxZGNhNGMzMTA0MzI5NjdkYTllZjFkMmFkNDk4YjdlNiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjI2M2FkODRjOWQ3ZTljMzRhMzY5MjYxYTEyMGNhMDdlODJhMTI0NTE3NzdmM2MyYjg2NDVjYjY4OWU3MDViYjIiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjgyM2E3MTRiMzdiMGJjOWE1Y2Q3ZDBlNGRjMTNmYWVhZTYxNTdiZjM5NjQ2NmE1YTA3OGIwODM4MDA4YWVmYmQiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiY2IyZGE4NWQ2MmRlOWNmNmZmMzNkMWU2MjFkNjBkM2EzZjJlZjBiMjBhZGZjZGZjOTkxYTEzMzZhNjA3ODUxYSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNmJhMzBmNjgwYTg2OTUxOTMwMGE5ZjQzNjE5M2FiODYyZDM5MzIyODkxNTFjMzc5YzFhZDQxNDk0ODVjM2Y4OSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiYWZmM2Y3YWNkYTBlMDM4N2U1MTU4NDFjNTNkOWNjZjFkZmU0ODc5YmEzNjBmYjJkYmRkNmVlNWJlYmRiODcwMSIsInBhdGgiOiJhdHRhY2htZW50c1swXS5maWxlTmFtZSJ9LHsidmFsdWUiOiI1YTE5NTlmZWRkMDkyZDg1YTBmYzk3MGM0MGI3ZjcyNjYzNWRmZDMyYzI1Yjk1NjhjODlmZTE3MjQwYWMxYzNhIiwicGF0aCI6ImF0dGFjaG1lbnRzWzBdLm1pbWVUeXBlIn0seyJ2YWx1ZSI6ImRjYWVkYTNmMzg0MjYyNzc1MWU5ZGJlZDExNWFkNWQ4ZmYyOTZhYWFjYWZmNzhmNTQxNTJmNjc1MzhkYzgyZDEiLCJwYXRoIjoiYXR0YWNobWVudHNbMF0uZGF0YSJ9XQ==', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxtDocStoreIncorrectDocumentStore = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'DOCUMENT_STORE', + value: '0x99f7E4777a8D1b6EdD5F2d9b8582e2817F0B0953', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + attachments: [ + { + fileName: 'sample.pdf', + mimeType: 'application/pdf', + data: 'BASE64_ENCODED_FILE', + }, + ], + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + 'f039e1328ad4a21e7d58d6dab1caea228238bee71080b1364bb6f1097c39b407', + proofs: [], + merkleRoot: + 'f039e1328ad4a21e7d58d6dab1caea228238bee71080b1364bb6f1097c39b407', + salts: 'W3sidmFsdWUiOiJhODAzNGZlOTA0MjNmMDAwMDdlMGMxNzA5MTg0ZjY2NWI0NDcwZTEwNDk0OGFiMzhlOTkzNGNlNTkwOWYwZmQ2IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMGY4N2IzMDcwZGU1YzY5YTU4OTgzMmQ2NDFlZTc1OWE1MzBiMGM3MWU2ZDQ1NzExY2YxZTVlNzUzNGZiMDA0ZiIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiIwZDI4NTAyNjE5ZmViZTQ5NTc4YTViNmEzN2JlYzk1MTU3OWVmY2FhYmUwM2ViZjY0YmY1YzkzYTZiNmM1ZTNkIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6Ijg1OTFmZGQwMTdmOGMwMTQyNGIxYTkzOTAxZjAzNjdiNDRjYmU3ODljNzRjYTk4YzFhZjAwMzNlODc3MmExOWQiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiOGRjZjc4ZDQyZDNmMTQ4YzY1NThiZWM4ODZjNDIzZmJhODg0YThmN2NhOGFjZWRkMmY5YjViMGJhN2E3M2JiYSIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiIzMjI1YjZlZWE1M2VhZGNhNmEzZGZhZmNlOTAyYmEyNjk4M2JmMDRjOWFmY2UwMDhhNzkxM2FiNTRmZWY1ODIwIiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiJjNGUyYWQ4Mzk1YWUxNmExMzdhMTEyNjcxN2YyNDU0ZmY2N2E5ZmFhYzY1MWJjODliMTYxZWY1NTlmYjQ5NzZlIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiNDRlOGZhOTEzNGVhZGRlZjE3OTRiMTE2ZDViMmM5OTE5ODdiZTYyMjA5Yjk0MjgyYzdiYjJiNTI4Zjk0Y2I3NiIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiNGZiMjIxM2FmNzEwOGZjNzNlMGZlMDkwZmVmZWE2YWE2ZGNmNWJlN2ZlNWQ2YzJlMjQ3NTgzNzcyY2RmMzgxYSIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiNmQ5OGUxZWJmNDRlYjdkNDUyZTk1YjY2NzAxNzY3YjYyMjU0NTIwNDlmNDNjMjJhMjhkY2YwYjA0Y2JhNGE1ZiIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiMDAxMDIzYTJlNDkwYTNhYzdhYzAyOTNiNjJhZmRhNTNlYzJjNmRiMDRmZDVkODVjMWU0OWY0MzVmNjNjNTQ2NiIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiI4MWVkODJjYWRhOThjY2NjZDJjZDgyNzFlZTg5NzRlNmUyNWRmMDlkYzdhMzg0MGJhOWQxY2NjYWVhZDIzZDA4IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjA5NjlhMjIwYTUyZDVhZDA3YjZmZjFlYTBhMzY2NzY1OTQ1NGEyYjRmOTJmN2JiNTgwYjg1MmYwZWIyMGE3M2MiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiJhZDU3YThjYmNhZGI4N2IyMDQxNzM0YjRjNDU4ODVmMDhhNWFmZTc5YTIyNTQ1NjlhOTNjMWM1Yjc4ZGRlYzk2IiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiZjY0ODM4MDVmODE5NThkNWViYjk0ZDM5MTk3MjAzODVlODUyMmFmN2JmNmE1NGRjZDU1YTJmZmFjMjdlN2ViZSIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6IjRlNDA0NGIyYWQ1YmZmZGI1OWIyMWUyZWM1MWEzMzNhN2QwMGRiMTNjOTY2ODc2ZGZhZTM2ODI5N2EzZDk1NmQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiMTQzZjkzYWEwMzFmZTUwNzI3NGE2ODEyZGZmZDkzOTIxMWE5YWRhZjRjNGUzMzBhOGYzN2RmNmE1M2E1NmY0ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6ImViMjFjYWI2NDU5MTdlOWQ4MGYzOWQwNmNkYzdjZDE2ZTRiYmRjZTk4ZmFmZTRlM2FiYTY2NmQwZTE5Zjc3NzAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiJjZGJlYzlmMjE1YjNlM2YwNzNhNGQyY2Q0NGIyODJkZDY2MjVjZDgzMGFkZGY2NTQ1MWM5ZWQ0YjQ3MjEzMmE0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiYzdiYzdiNGIxYWM1OGQ0MThiZmNkMDZiOTdjN2Y3Yzk4MjFlMjkxYWJlNmFiYzVhNWNiMmYzZDIzNzdiMDNjZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImE1ZGIwNWZiZGIxMmQ5ZTdlNTUwMWJmYTdlOGE0NTg4OGJjYWI4YTIxNTQ0YjE1NzUzMjIyZDhjNWY5MWJkZTQiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiI4MjE4YjkwNDJhNjhiNjhiZTU3YmQ4MWY3ODc5MzdjZWM3MDVhNDcxMDllYTU4NjVlMjMwN2E0MmY3ZThjY2IzIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiNDFlMjQyMGU0NThhNGRjOGM2ZGM2YzczZDllYTlmMGVhMjVmZTQ1YzY5OTliMWZjZjEyNTI1M2EyYzhjNTY1OSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiZmNhNGQwNzA3NDEzZDM2ZjhjM2ZmMDVkOTIzMTNhMmEwYmIxNGU5Y2IzNjk3ODQwNTljNTNjZTVlYzJiN2QzMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6ImE4MzM4OTM1YjRiOWZmNDc1NmE0NjJjMjZmNmY4ZTYzYmVjY2VlNzlhYjIwYTk3MDlkMTY4N2Q3MjBmNWY4YTQiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6Ijk5NGUxODNiNjdkZDhkZjBkZTVlN2RiMTdiNzI4MTJlNzQ0OWMyZjA5MjYzNmZlNGI0M2ZmYjIzMTM0YjhkNDgiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiODE4MTJkNDgxNGFjMDJlYjZjOWNiMDBjOTZiOTE4MTlhMTgxZGE1MGVmYWZmYTY0N2YyMzlmNDQ5NmFmZTU2MiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiN2M2YTNkZTNlNjdmNGNiMWNjMGRhYzlmZDczYzdmYzFmMzM3NDlmMWM3YTZiM2E1YmQzOWNkZDdhOWZlMTQ4MSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiOTI1NzUxNDNmMmI2NzhkZjRmYmY3MjAzZTY4MzkxOGUwNGFlODgwYTk1ZTc2MGU4ZmExMDBlNzU2YzEwNWMwMSIsInBhdGgiOiJhdHRhY2htZW50c1swXS5maWxlTmFtZSJ9LHsidmFsdWUiOiJlMmVhYzE4YjFkNTY2NTU2Yjk2MmE4N2ViMmNlM2NmOWJmNmMwNDE1NzExOTJhOGZjN2Q5OWZhMmE4M2VjYTViIiwicGF0aCI6ImF0dGFjaG1lbnRzWzBdLm1pbWVUeXBlIn0seyJ2YWx1ZSI6Ijk4Zjk1MWM5NThlYmRiNmYzZWMyN2VkMDg1NDE0ZGIzZjhhZWFhM2M0Zjk0M2FmNzBhZDY5ZDE1ZmQxMTNmMDAiLCJwYXRoIjoiYXR0YWNobWVudHNbMF0uZGF0YSJ9XQ==', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument diff --git a/test/fixtures/verify/v3/dns-txt-token-reg.ts b/test/fixtures/verify/v3/dns-txt-token-reg.ts new file mode 100644 index 0000000..8c4ff40 --- /dev/null +++ b/test/fixtures/verify/v3/dns-txt-token-reg.ts @@ -0,0 +1,331 @@ +import { SchemaId, v3 } from '@tradetrust-tt/tradetrust' + +export const dnsTxtTokenRegIncorrectTokenReg = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'TOKEN_REGISTRY', + value: '0x88b613a88534E2939518f4ffBFE65F5969b491FF', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + 'f5a2421f4d1bc7081766f025c1f84eb1730837e1d797695942e15920e438498c', + proofs: [], + merkleRoot: + 'f5a2421f4d1bc7081766f025c1f84eb1730837e1d797695942e15920e438498c', + salts: 'W3sidmFsdWUiOiIxOTJmZTU3NDZjNmEwMTMxYWE0YzQyZGZhYTk1ODc4NTE1MDJiN2Q2YjI4NTNhZThjZWQ1OTBjOGM4ODg2MzUwIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiYmM5MTJjMzFkYjM3YjMyYjIwMTRjOTkyOTAyM2IwZmQ4YTk5MzljMTg3ZGNhMGI5M2EyYTY1MzJlNjgwMmFiZiIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI1MzFhYzMyNmQ0MTdlYjViNjMyMzdmNzU2NjQyOWZjZWI4NDZmNDI3NDNkMGFkMWU2MjQzZjkxYmVmNmU1MzljIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjYxNGQ5MzJmN2Y2YjY0OWFkNGExNTllNzgwZjYyODU5NmQxOGRmMmRhOGEwNDg3ZGVkMmI4MjljNGM0OWQ0MDEiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMzMyZTZjNzNjY2UzMjUxZTBiNGE0YzEwZjlmMTM5MjQxMTQ3ZTRmZDEyYjljMDUxOGZkZTU0Yzg2NGEyNzZhNSIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiIwOWE1NmNjMGZhMTY3NDkwZjVkNTkyMTcxNDcwZTYxODljY2MwM2IwNTc4NzMwMWFhZjE0YThlZWRjMGVjY2Q4IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiI1YjM2ZmU1Mjk5N2U3MTM2NTg5NjIwZTFmZWRlMTRmMGFkODYzMDFhYzg0YzIzN2U0MzEyOGE4ZmMyYzBmMThiIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiNjI2Y2E5YjBkYzRkZTBjODI1ZWEzNjAyYmJhNmQzMTRiYTE0YzFkOTI2NmExYmY0OTFiMTJiZTZiMzMzNWJjYyIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiODc3NWVkYzJmYmUyOTNjMGIzZmUwNjk1MjhmMjFjODJmOTk1ZTQ4YmMwOTIyY2JmZjYzODY3OTZiNTUxODBiNiIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiYzk4NzU2Y2ZhZmMwY2YyMGM0ZDliYWYzZDUyMWM0MmQ0MDFkMWE0NTI5Y2ZmZjcwOTNkYjNkZTcyMTRjNDIwYyIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiZjJkYWFmNGIxNDE3MWQxNzFlN2U4NjZlMTQxZjMwNDE0ZTUwNjBjOGU4MDRhNzQ1YmU0MTNiMjgwNDAyMjQyNCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiJlZTk0MjVhZGY5ZDQwOWUxZjgxYjQ4NWU3YTNiNjg3MWUzN2ZjNzJlOThjMmY3MjFiMmI0MjJmZjgxOTZkNjkzIiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjA3NGUyZjE4Y2Q5ODZiMDM1MDg2MjBmNGU5OGIwNTcxMTdlZTIyNzhhY2ZmZDhmMWY3ZjgwMThkNDMyM2MwMzAiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiI4ZjQ4NWMxZmNhZTA5NmFmNDEwOTE0NzllNDM2OGYwMWI3OGFlOWYxYmIzODE0ZTlmYjI0MjU1OWY2ZDE0N2Y1IiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiYmQ5YmMzNzlmOTg5MzZlMzcwM2RjNWQzMGJiY2NkYjM2ZDFhNmYzOGE4Njg4Y2RmYWM0ZDlkOGY2YWYxMTQ2OSIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6IjI0N2UyMTA0N2RjMjg0NGI1YmI4MzMxYWU0YjFjYzhiNTJmZWM5YzBjOWUxMTNkNzZmOTUwN2UzZDQzOTY2NTciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNGYwZjZkYmI0YTdhY2IxZjkzNGFhYThkNmE5YThhOWVjZGM3ZDM5ZWRmM2MyNmYwNmI1ZGUzMDRiMmE1N2MyOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6IjNhNmQxYmRhYjU0ZDhmYjkyYmQ4NTdhNjFiNTA1MmZmM2IxMmI3NDVmYmYwNjY2MjhjMDgyZTc1OWI2NDdiMWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiI4ZGU1NDAzN2YwYzY0NjFjMTJiYmNhMjBlN2QxNTYwNzgxMDBkMzMyN2I2NDlkNWZiYWQ5NjkyY2QxZDY3MTI0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiNGZjMzlhMmNjODdlNDg1YjYzYTcxOTUyYjE1N2FjM2Q3Y2MyZDFiNDg1ZjUxOGFlMDNiNjE0ZTFlMjhjMDhkNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6IjUzNjcwNjlhNGI0MjdhNGYzYzc2N2NjNDIzMDMwYTJjODBkMWUxNTI5ZTUyY2VmODM1YmE3MGUwMTdiYmJjNjMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiJhYTJkNGMyODQ2MWNjMjJiYjI5ZTVmMmY1OTVkMmNiOTU1MGQ2NDFkZDZhODE1NWMyMzgzZDY1ZDFkNzY0OWVkIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiNDhjMjI1MTVmYjdhOTVhZTFiMWU0YTFhNTExZmM4ZjEwNDk5Y2E2NGM2NTMyYjIzMWEyYTMxODRmODRhNTJjMCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiZDFiOTc2M2QyZWY5NWMyNGU0NTRkMjMwNmRjZmUzNTI1YjA1NTI1ZWVjYjE4MmRkNzAzMzAyMTVmMTQwODIzOCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjRiNzFlZDY3MDMxOGY4N2VkY2MzNWRkNGYzZjcxYzJmMDI5MDVlMzhlMjZlMDdhNDk3YWY1ZDQ2ZWY3N2M3ZWEiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjE5NGI5ZDliZjY5ZWE3YWQ5MWI0ZWY4YTYwNTVlNWM4YmMwODg4NDNlYTBiZTA1MDU0YjI4NmI5MjZkZGE2YzkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiODFmOGRhOWRlN2MxNzIzODY5YjNhM2U5M2EwNjY4YWE2YjQ2OWVhZWVmMjU5NmM0ZjI3NmQxY2Q5N2MwMzZmYiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiMzk2MGUzNTRiNDJhMTMwMzhlYTdmZDU4YzE3ODI5OGE4ZjI0ZGJmM2VjY2I1NjY4MWI3MWZjY2U5NDZkY2VlYSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifV0=', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxtTokenRegIncorrectDNS = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'TOKEN_REGISTRY', + value: '0x9Eb613a88534E2939518f4ffBFE65F5969b491FF', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example123.tradetrust.io', + }, + }, + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '3b11827925e0ceb00d4fb7dc8aac83ada4009e70315e8f64a75b75c361318a4f', + proofs: [], + merkleRoot: + '3b11827925e0ceb00d4fb7dc8aac83ada4009e70315e8f64a75b75c361318a4f', + salts: 'W3sidmFsdWUiOiJjYjI0ZjRkYmZkOGVmM2IxMjg3ODNmMzI2MDU1YzY1NzRkMmEwYWY5MjBhMDY2MDAwZjVkN2ZiZDU0M2Q0Y2VmIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMjg1YmRlMjY2ZWU3NTMwZTRkNDlmYjUyZmJhMWEyYjBhYTEwMTdjMjJjMTVhNzc5ODc5MDRlNzY2NTcyZjFlNiIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiJiNjI3NTI0MWMxNDMxYjNlNmNjOTRkOTg2MGFiMTEzMGIxYzM3MTcyNjNiYzFjMDE3M2Y1ODdlODQ1YTc3NGYxIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6ImNjZjIxZTk5NzlkMzFkYjhkZTU2YjQ4MDYyOWNjMDI3N2Y3YWI1OTY5YzRiNWVlOWMzODQ5ZDk0MTg0ZTUxNWYiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNjE5OWI3NzgzY2U3N2QzOGM4MTE1MjA4YmI2NWM5MGQ3Njg2NzU1MTkxNGIwNjAzN2NkMTY4ZjFiYjhiOGE3MCIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiJmZmYyZGIxZTRjYmRjZDBlMzMyN2RkZDFjNDhiMTRmZDYxMjMzNzM1M2M2NmZkNzk1MmY2ODBhYTg4ODBmNWM1IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiI1YjhmYzE2ZWRmM2UzODNjYzkxNmQwYTFiMjVjYjc0ODQ4ZTI3ZTI3MWZiNTM4ZmNlOThhMTUwMTQ3N2U1ZjZlIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiZGE0Y2MxMTM2OTY0MjBlMzg0ODcyMDRjYjEwMDA4YzIzMmY0OTcwMDBkMjBiYTgwOTRhMGJlNWYyMzhhNzZmNSIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiZmY5ZWIxYzU0ZmU2MjFiNTYyZjEzOTMyMDQ0MjkxMTMwNGVlZDljZGFhZjAxNmU1OTczYTkzYTI2MTQzNzcwNCIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiNjQzODhkMWQxM2ZhNzJhNTJkNDg3NTgzNzU5Y2ZhNWQ0YmYzODhiZDY5NTBmOGM5NzQzN2RkZjZiYjViMGUzMyIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiYzI0ZWEwOWUzZTZiMTIzOTk0Yzg2NmZmZDE5YmM3M2UzOWZlY2Y3NmZiYmM2MGUyZGMyODQ2MmNmMWM4YjJkYSIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiJkM2FmODgyOGE2MThiNGI3ZjhkNDljYWMzMGYzNjgwYmE0NmI3NjFjNDEyYmQxZWZjNjFlNDRjOGRhNmJiN2U4IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjE5MzkxNGVjMTQ5NTNkNDYzODhlZWNiNTIwMjRiOTdlYjZkNWZlOTgwZWI2ZDY4MWI0YTIwMmZlNThhMjhiZjkiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiI1Yzg1OTk3OTQ4YmU3NDFkZjI4NzhhOGNjYjQ2MDc4ZWJiN2UxMDM5ZDRiZTY5YjQ3YzczOGY4ODVmNjIxNjQxIiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiYWE3NDBkZTMzOTc0YjM2MTYzNGE0MDhhMzIzZjM0M2IyM2U1ODRmNGM0MWQ1OTNlMGFlODEzYjY4ZjI3OTE4MiIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6IjA1NzM3ZGVlNGRlNjVjYTYzYTllZmYzODgzZGE4ZWY1ODY2MmViZGYwM2FmNDU1NGZlOTkyYTc1NzE2YTYxM2YiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNjAyYjk5MGEyNmY1ZTNlYzlkOWQ2OTg1OTIzYTdiZmZjNGM0MjM0MWY1NWNlZGE1NjE1NmQ0MmQ3ZDIxNDE3OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6ImEzOWQwNzU0YmE1MTY5NzI4ZTA0Y2VjMjQzODZiNTA1NDE3NmU3OGMxYzBiNWU1NjA3YmE5NWYxNjJkYjViYWUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiJmZmVjMWNkNDM5N2NmZjU1NGZjNzBmOWU5YmJlMzJmYzA5NDFjMTA5ZGRmNjczNGUxZGExOTQ1MDcxZWYyNWJhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiMTQ2YzhiZjdiYzJjNmM0YmRhZmJkNzBmOGM3NGQyMzg0ZDEyOGFhMGIwNjgxNDM0YzlmMTEyNzI4YjJlNmFkZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6IjQwOWM0MTM5ZjYzN2IzOTM0ZDE4NThhMjRiNDJiZWY4OTU4YTFmNDViNmZkMDZhNzRlZGM2MjJjYzMyNmRiZGMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiJhODA3ZmZjOThmNWUxNTE5ZWQ0YjYxNmJkNjUwM2QwY2I2NjFiNGU3MDg1NTExMzJlNzcxOThjZDA2MDBmODA3IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiZWUyODk0ODliNWFlMzFlOGQwOTVhY2Y3MTEyMjliN2I2N2I4MDI2NjU0Y2VmN2Y2MWRmNzJhMWY0NjUyYTNmZiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiMWRjOTZiZTVhNzgyN2RhZDUxN2JiMmQwOGI5NDY3NThjODFhMjI1OTVjMDJhMDNiMmNiN2VhYWY3ZTM3ODgyZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6ImQ2OGMwODJjYzNmOTBlMTc3OTMwZTMyM2Q5MTZkODUzYzZmYjA0ZTg4NTc3Nzc5Mzk4NzA4NjBjNTNhZDQ3YzUiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6ImZiYTg1YzQ5MDQwNzkyOTcxMWU5OTM3NDdiZDc3NmY1OTMyOGY4YzE1YjYwOTc2NTlhNjQyOGE4NWFmYTk3NWEiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiMTA2ZjRiNTllZWVhOTMwNjMzODBhYTI1ZjA1ZjJjNDYzYzg1OGZmZDM2MGI5ZmQ5NjhkMDM2M2FhMGM1ZTA4YyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiZWEzODQ5M2NhNGMxZGY5YTMwNGZjMzAzYTYwNTA4ZDkxOGQ5Y2FlOTU0MDNjZWYwNjZjMTYwMzQ4ZTZlYmQyMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifV0=', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxtTokenRegTampered = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:TAMPERED_SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'TOKEN_REGISTRY', + value: '0x9Eb613a88534E2939518f4ffBFE65F5969b491FF', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '9e4f74864999eed515ebc5ff02a4ee21e2cc99d660690864784055b6aeff04af', + proofs: [], + merkleRoot: + '9e4f74864999eed515ebc5ff02a4ee21e2cc99d660690864784055b6aeff04af', + salts: 'W3sidmFsdWUiOiIxYWRlMWM2NGUyMGQwM2NhNmU3NmM4NDFkOTc2Y2ExZTk5MGMzNThhYzFjYTdjYmE1ZGMyYmNiZjc1OTg1NmY3IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiOTA4YmQwY2U4ZGM4ZjNmYzhjNmM0MjhkNjlhMWFmNWUzMWQzNWJkOTZmYjNhYThiYWYxZTM1MmM3NTZmMGEzYSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI1YTI1ZWJmM2QyODRkMmZlODMyNWRhOTc5MTM2Y2FjNDFjYmYxZDA5OWQyNGU5MzRmMDgyZWM0NmZiM2E1MDU5IiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjE1NDliYmIwMGY5OTg3ZThmMjIxNTYzMzU2NWJkMDExY2RjOWFmZTZjMGVjZjVjZjczMWNiZmFhODZkZTNlMGMiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiYTJkNzc4MzQxZGMxZGViMzNlMzVlNmVlNzYwNDg0OGFjOTI5NmQyYjA3NTVlYzA1YmQ0NGE5YmQ5YzMxYWRlYSIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiI1MGMwYjVjMzJiZTlhZGE1NWJhMzQyZjkyMWQ1YWFmZjlmMDQwZTQwNTVlY2Q4NzAzZGYyNWIzZTZiMTkwYWY2IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiJjMjU0MDkyZjNmZjFkZWQ2MDdiYzZhMzM5ZWY4ZWE2Y2Y1ODFiNjMyM2U4MWIwNTFlNTZjYTNlMjAzZjFiMzM1IiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiMjljNDA5MWZhN2U3ZjYxMzIzNzg1ZjRkY2M4NTU5NzhmZTE1MzczMTI3NjZiNWVmMGJjNGZiY2YwNWU4MjI1MCIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiNGVjYWU1M2JkZmQ2ZWYxMzEzNGRkYzUxOTZjZTc5MjRjMDA5MTg3MjAyZmYxMzJhOWMwMjU5NmY0ZDVhNTE4YSIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiNWRjY2U0ODE2YjNhODU4NGE5ZTIwYzZlNmI3MTg2Yzk2N2EwYTE2ZWIwMGQ4NWFiYjI5ZGM2NTk1ZDI0NzM2NCIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiZTQ2MTgwZmVhMzhkZDg2OGNjODhjMGRlM2I2MWM0MTIyZDBmZGIyMWI1ODZlYTJiYjgxNmEyZTE0YWI1NjlkNCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiI3ZjNkMjIyNzUyYWIwZTY4Nzg3YWI2OTVjNmI4ZWMyNGM3ZDkxZjgzNDZlMDFkMTMyYTI2YzI3N2E3MzI4Yjc2IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjJjYmMzN2NlYmQwYTdlODNmY2YzZDk3MTYxYjdjMGQ4MDljYWQ4OWE3ZDgyMjAzZmU1ZGVhY2E2YmJiM2YwZWQiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIzYzc0MDA1YjA2MmQ4NDEzNDRiNzMzODIwMzdiMDNiNWFiMzk3MjFjYzBjNmEwNmQ0NmY0NGY5NGY3OWQzZmQ2IiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiZGVmYTcyYzZlMTYyNjNlMmQxMjdlNGUzY2E1MzQyMDYwZGVlODc3YWIxNDg3MjY0Y2U3YTM0NTllYmFiMWE1YiIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6IjEzZDQ0Y2I2ZTVjNWU1NWMxYmJmNzlhMWRiMDZhYzUxY2JmMGMwMzM3YjVlYjliOTE5Y2U4MDhjNTJhYjliZmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiY2Q1NzI4OGQ2MWVjZjE0NmQwY2ViNzI5N2ZhNTdmOTQ0ODg1NDdmOWEzY2E0ZWUxMWExNmMxNjcwMzU3ZDczNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6IjJiZDM4OWYyNmFhNmFkNzU3OWYwYWQyMDBhYWE5MTI2YzMyMzVhMzIzYzkyZmQyNGVmYmU3MDhjMTlmMDA4MjgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiJiYzUxYzMwNWM5YWNmMjA4ZjRhNzY3MGI0YjhmYjMyOWI1OGFlMjNhZGEzZmU0MjA4NDc2NmVhZjEyZGFhNDEwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiN2ZmNzE3ZDU2YTM2MzA4NWRiZmNmOGI3MDMwODA2M2Y5ZDFiODk2MzM5NzJlNWE4ZmI5YjFjYjVhOGZiZjkyMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImFmN2MxYmRlODI2NjAxYTJjYjEzMTgxYmRmNDMyMTAyODRkNWVmYTYxYTg5MjFhNDVlNGJhNDIyOTI5N2UwYTQiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiI5YTJiMTAwNGRmMGZhZjZlMjg1NDc2MzczODViN2YyZjU5NmYyNmFiNDJlMzEyNmI5YjcxNjA5NGYwYWIzZmZhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiYmI3MzdhZDI0MTkyMmZjOTI0OTUyYWI1MjMwNDBkNWQyYWQ4NGI0MTI5ZDczNjk0ODJkMzQzYWM5ZjA3Zjc0NCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiYTNjMTNhOTA1ZGE0M2VkZjM4YzgwNmI5YzIxY2Q5ZDVjNDQyYWNiOTY1NGQ3YTE1MDBhNGU1MzBhODU3ZDdjNyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjExZGUyYWNiYWJmMDQ1OGRjNzE0ZDgxOWQzNDJjNjZhMjg1ZmU5ZTMzNDA0ZmVlN2ZjNDU0OGY5NmRlODgxMjciLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6ImE4ZjQ3ZGI0YTRjODU4NGY5NGJhYzk0MTVmM2I3OGQyOTNjOGU1NTEzMjZjNTFlMDllOGY3OTQ3OGY2MWExZTkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiOGM2NmRkMjBlMmY0YTE3NWExNGE1YWU1ODZhMjY4YTYwMTZhN2YyMjUxZGRhODJiZTY2ZWI0YThhYzhhOTliYiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiMGYzNWUwZjEzYWQ5OGM5NjY3YjQ5MDYwZTljZWJkMDY5ODVjMDM1MmU4Njg2M2JiNDBiYzRhZjM4ZjE2ZTc3NyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifV0=', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxtTokenRegMinted = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'TOKEN_REGISTRY', + value: '0x9Eb613a88534E2939518f4ffBFE65F5969b491FF', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '9e4f74864999eed515ebc5ff02a4ee21e2cc99d660690864784055b6aeff04af', + proofs: [], + merkleRoot: + '9e4f74864999eed515ebc5ff02a4ee21e2cc99d660690864784055b6aeff04af', + salts: 'W3sidmFsdWUiOiIxYWRlMWM2NGUyMGQwM2NhNmU3NmM4NDFkOTc2Y2ExZTk5MGMzNThhYzFjYTdjYmE1ZGMyYmNiZjc1OTg1NmY3IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiOTA4YmQwY2U4ZGM4ZjNmYzhjNmM0MjhkNjlhMWFmNWUzMWQzNWJkOTZmYjNhYThiYWYxZTM1MmM3NTZmMGEzYSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI1YTI1ZWJmM2QyODRkMmZlODMyNWRhOTc5MTM2Y2FjNDFjYmYxZDA5OWQyNGU5MzRmMDgyZWM0NmZiM2E1MDU5IiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjE1NDliYmIwMGY5OTg3ZThmMjIxNTYzMzU2NWJkMDExY2RjOWFmZTZjMGVjZjVjZjczMWNiZmFhODZkZTNlMGMiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiYTJkNzc4MzQxZGMxZGViMzNlMzVlNmVlNzYwNDg0OGFjOTI5NmQyYjA3NTVlYzA1YmQ0NGE5YmQ5YzMxYWRlYSIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiI1MGMwYjVjMzJiZTlhZGE1NWJhMzQyZjkyMWQ1YWFmZjlmMDQwZTQwNTVlY2Q4NzAzZGYyNWIzZTZiMTkwYWY2IiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiJjMjU0MDkyZjNmZjFkZWQ2MDdiYzZhMzM5ZWY4ZWE2Y2Y1ODFiNjMyM2U4MWIwNTFlNTZjYTNlMjAzZjFiMzM1IiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiMjljNDA5MWZhN2U3ZjYxMzIzNzg1ZjRkY2M4NTU5NzhmZTE1MzczMTI3NjZiNWVmMGJjNGZiY2YwNWU4MjI1MCIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiNGVjYWU1M2JkZmQ2ZWYxMzEzNGRkYzUxOTZjZTc5MjRjMDA5MTg3MjAyZmYxMzJhOWMwMjU5NmY0ZDVhNTE4YSIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiNWRjY2U0ODE2YjNhODU4NGE5ZTIwYzZlNmI3MTg2Yzk2N2EwYTE2ZWIwMGQ4NWFiYjI5ZGM2NTk1ZDI0NzM2NCIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiZTQ2MTgwZmVhMzhkZDg2OGNjODhjMGRlM2I2MWM0MTIyZDBmZGIyMWI1ODZlYTJiYjgxNmEyZTE0YWI1NjlkNCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiI3ZjNkMjIyNzUyYWIwZTY4Nzg3YWI2OTVjNmI4ZWMyNGM3ZDkxZjgzNDZlMDFkMTMyYTI2YzI3N2E3MzI4Yjc2IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjJjYmMzN2NlYmQwYTdlODNmY2YzZDk3MTYxYjdjMGQ4MDljYWQ4OWE3ZDgyMjAzZmU1ZGVhY2E2YmJiM2YwZWQiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiIzYzc0MDA1YjA2MmQ4NDEzNDRiNzMzODIwMzdiMDNiNWFiMzk3MjFjYzBjNmEwNmQ0NmY0NGY5NGY3OWQzZmQ2IiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiZGVmYTcyYzZlMTYyNjNlMmQxMjdlNGUzY2E1MzQyMDYwZGVlODc3YWIxNDg3MjY0Y2U3YTM0NTllYmFiMWE1YiIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6IjEzZDQ0Y2I2ZTVjNWU1NWMxYmJmNzlhMWRiMDZhYzUxY2JmMGMwMzM3YjVlYjliOTE5Y2U4MDhjNTJhYjliZmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiY2Q1NzI4OGQ2MWVjZjE0NmQwY2ViNzI5N2ZhNTdmOTQ0ODg1NDdmOWEzY2E0ZWUxMWExNmMxNjcwMzU3ZDczNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6IjJiZDM4OWYyNmFhNmFkNzU3OWYwYWQyMDBhYWE5MTI2YzMyMzVhMzIzYzkyZmQyNGVmYmU3MDhjMTlmMDA4MjgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiJiYzUxYzMwNWM5YWNmMjA4ZjRhNzY3MGI0YjhmYjMyOWI1OGFlMjNhZGEzZmU0MjA4NDc2NmVhZjEyZGFhNDEwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiN2ZmNzE3ZDU2YTM2MzA4NWRiZmNmOGI3MDMwODA2M2Y5ZDFiODk2MzM5NzJlNWE4ZmI5YjFjYjVhOGZiZjkyMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6ImFmN2MxYmRlODI2NjAxYTJjYjEzMTgxYmRmNDMyMTAyODRkNWVmYTYxYTg5MjFhNDVlNGJhNDIyOTI5N2UwYTQiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiI5YTJiMTAwNGRmMGZhZjZlMjg1NDc2MzczODViN2YyZjU5NmYyNmFiNDJlMzEyNmI5YjcxNjA5NGYwYWIzZmZhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiYmI3MzdhZDI0MTkyMmZjOTI0OTUyYWI1MjMwNDBkNWQyYWQ4NGI0MTI5ZDczNjk0ODJkMzQzYWM5ZjA3Zjc0NCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiYTNjMTNhOTA1ZGE0M2VkZjM4YzgwNmI5YzIxY2Q5ZDVjNDQyYWNiOTY1NGQ3YTE1MDBhNGU1MzBhODU3ZDdjNyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjExZGUyYWNiYWJmMDQ1OGRjNzE0ZDgxOWQzNDJjNjZhMjg1ZmU5ZTMzNDA0ZmVlN2ZjNDU0OGY5NmRlODgxMjciLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6ImE4ZjQ3ZGI0YTRjODU4NGY5NGJhYzk0MTVmM2I3OGQyOTNjOGU1NTEzMjZjNTFlMDllOGY3OTQ3OGY2MWExZTkiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiOGM2NmRkMjBlMmY0YTE3NWExNGE1YWU1ODZhMjY4YTYwMTZhN2YyMjUxZGRhODJiZTY2ZWI0YThhYzhhOTliYiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiMGYzNWUwZjEzYWQ5OGM5NjY3YjQ5MDYwZTljZWJkMDY5ODVjMDM1MmU4Njg2M2JiNDBiYzRhZjM4ZjE2ZTc3NyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifV0=', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument + +export const dnsTxttokenRegNotMinted = { + version: SchemaId.v3, + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json', + 'https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json', + ], + reference: 'SERIAL_NUMBER_123', + name: 'Republic of Singapore Driving Licence', + issuanceDate: '2010-01-01T19:23:24Z', + validFrom: '2010-01-01T19:23:24Z', + issuer: { + id: 'https://example.com', + type: 'OpenAttestationIssuer', + name: 'DEMO STORE', + }, + type: [ + 'VerifiableCredential', + 'DrivingLicenceCredential', + 'OpenAttestationCredential', + ], + credentialSubject: { + id: 'did:example:SERIAL_NUMBER_123', + class: [ + { + type: '3', + effectiveDate: '2010-01-01T19:23:24Z', + }, + { + type: '3A', + effectiveDate: '2010-01-01T19:23:24Z', + }, + ], + }, + openAttestationMetadata: { + template: { + name: 'CUSTOM_TEMPLATE', + type: 'EMBEDDED_RENDERER', + url: 'https://localhost:3000/renderer', + }, + proof: { + type: 'OpenAttestationProofMethod', + method: 'TOKEN_REGISTRY', + value: '0x9Eb613a88534E2939518f4ffBFE65F5969b491FF', + }, + identityProof: { + type: 'DNS-TXT', + identifier: 'example.tradetrust.io', + }, + }, + proof: { + type: 'OpenAttestationMerkleProofSignature2018', + proofPurpose: 'assertionMethod', + targetHash: + '65918f0fd52db1c2f81f3b57c13c9198e5c525ef7c95ab40889ea8464f4e6470', + proofs: [], + merkleRoot: + '65918f0fd52db1c2f81f3b57c13c9198e5c525ef7c95ab40889ea8464f4e6470', + salts: 'W3sidmFsdWUiOiJjOTFlYjY4ZDU1YWZmNTZlYzdjOGZmNjcxYjE3MjcxYjE3M2EwNmQwZmI5NGZlOGE3ZmEyYmM0YjA4ZDliYjlkIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiZTI2NzI4NDJjZjJiMWVkODI0YTg4ZGUyYTJjZGE5MWUyZDI0MTRkNDA1YTcyY2E1NmIyODAyN2Y4YTVmYTkzZiIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI4YjlkY2E3ODAzNjM0NTE1ZmMyN2E4YTc0N2VhNTZkYTgyMjAwNmE2OGIzMTE3YjUyYjM2YjhhMThjMmY0OTZjIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjQwMTU3OTM1ZjljMjhhZGVhZGQwMWU1MWVkMjcwZWUzMTM4MTA4ZWIzZTJhMzQxZjFkMmIzZGQyNjg5MGRkMDkiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiOTA5ZGQ4MWFjNmM2YzYzNjhiMDhjOTZmZDEyZGNiOTlmYWI2NTVmYmM1ODJiZWRkYjhiNTc0MDM3M2JmOGM3MyIsInBhdGgiOiJAY29udGV4dFszXSJ9LHsidmFsdWUiOiI0NGJiMGNmOTk1YWFjY2ZjODA1ZGE2NDgzZGQzNzhjY2ZjZTNiNzU5YzhiNjIyMTYyNGNiZjE3Mjg4OTI0NTllIiwicGF0aCI6InJlZmVyZW5jZSJ9LHsidmFsdWUiOiJkNjBmZjdhYjVjNTJlOTk4ZmQ4YTJkOWIyYWU3MzY2ZjdjOGU4OGQ3MDEzMWI2YmNhNGU5NmEzNjRlZmM5Mzg2IiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiM2IyN2I0ZTUzODg2ZmVjY2NmOTc2NmJkNDFmMTBlNjcyNDJlNzY5YzY2NTMwNGUyZDM5ZGJhMGNlODkyMTA5NiIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiY2ZkMmExZWU2MGEwMzc3ZGY1YjgxZTM4MTA0ZTQ1NDZmZmJiZDVkMjE4MTVkYTMwZTFjNjViMzI5YTNjZmVhNiIsInBhdGgiOiJ2YWxpZEZyb20ifSx7InZhbHVlIjoiMzIzYjg4OWU1ZDY3YTlmNTQxMDZjMmQ3OTlkOWQxZWU3MTViOWY2ZTk4YjIzZTA3ZmM2N2RiMzVjNGNhNzg3YSIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiZmU1OTFmNjI3ZWJkMTQ1M2ZkYzk4ZDY5ZDQ1MjI5OWMzYzVhN2RmYjlmYzE3YjlhZTFmOWM0NGE0MzUyYzA2ZSIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiIxOTU1MzcxNzY5MTkxNDQyMzQ5NDYwNzhiMTNkZDM0YjFkMmI1OTJjZTE0NTcxZjY1NWQ4MTFlNDkxM2JhNTViIiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6Ijg4MmIzYjIzMDE1NzYzYzQ5NjA1YmY4MDQ3ZjlmZGI4Yjg4YjIzYThmNmMwZGFiMzRiZjZhNTY3OWUxMmY5MWEiLCJwYXRoIjoidHlwZVswXSJ9LHsidmFsdWUiOiJjZTQwYzU5ZjNjNmE2YmY1NzU0YTFjZTZhNTJiM2NhN2I3YjBiMTIyOTEyMzA3NTc5YmQzNmM1NWFhMmE2MGE2IiwicGF0aCI6InR5cGVbMV0ifSx7InZhbHVlIjoiMGZjNmVmOTIzMDRlY2FkZjdlNGRjZjA5NzdlMGEzNzkwYTM0MTJmYjVkNjVmYmQ0MDEwNTc2OWViZTY4MDQyOCIsInBhdGgiOiJ0eXBlWzJdIn0seyJ2YWx1ZSI6IjNmMDVhNWY2ZGY2YTA5ZWQwYjA0NjY3ZDhkOTM4YmZmMmJhMjRhYmI3ZjFmYzc0ODQ5NWNmOWFjYTE3ODRjMmQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiZGUxOWJkYjFlYzIwMTQ3OWI5ZmI2OTJiNTk1YTZjZDdjOGE1N2ZlMDE5MmI3YWVmNjdkOTQ5ZjUxYzdjN2Q2NCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1swXS50eXBlIn0seyJ2YWx1ZSI6ImQwNDZhZDk4NmM4ZTNiOTYxMmFjZGEzZmIwYjM4OTYyNjYxMjk3OTlmMDRlNzZlN2EyODlmM2NkMmY5NTRkNzAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2xhc3NbMF0uZWZmZWN0aXZlRGF0ZSJ9LHsidmFsdWUiOiJiNmExYWI0M2ViZjYxYzUwNDQxNDNkYmQxNWIzMjU5NjQ2MzM3NmJhY2RlODBmN2RiZDMzNTU5N2Y3MzQ1ZTUzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNsYXNzWzFdLnR5cGUifSx7InZhbHVlIjoiMWZkZTcwZWEzZjIzYzg5N2M2MjllYmE4YWMzNjEzMDg2NTgwYWZlYzI1NmRhNzY4YjI2ZmFkYWZkODU2YjVlYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jbGFzc1sxXS5lZmZlY3RpdmVEYXRlIn0seyJ2YWx1ZSI6IjE4YzAxYzdiMGVjMWNjYWVhZjRhNGNlODNmMDA4ZTk4ZjczNWQzZjhkNWUyYzFmNDk3NDdlZTQyMGQ1NDVmZjIiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiI5YTU5MmE3NWIzM2FlMzU5OGNhZGM1MzU5MDBjMzY2NjdiMzhlYzMzNTM2YzE3Yjk2YzVhOGM4NDJhZjEwZTc4IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnR5cGUifSx7InZhbHVlIjoiNjBmYTY4MTgwZDk3ZjQ0YmJjMDY0YmY1ODEzZWIwODkyNDc2YTZhMTAzMDAzZGNlZjk1ODJiMDgzMTNkZDQ2YiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiNWFkZGY4Yzc2MWRlMWZkOTk0ZmZhMTlhMjc4YTkyN2NjM2NlYmZjNTlkYTU5MTViMzcyMmNhYmRkNzZiYWQ3NyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6ImE0NTRlNGNhYWU1MDRmZTEzOTk1MmY3YmU4NGE4ZGE0NTUxYjQ4MGYxYTJjNDdkMjFlMTY4ZDBlZGRkYzQ3MjYiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjM2ZTY1YWIwMDAwMDUxYTBjNmViZGQ2Zjk3NjkxMGFlMjg4M2MyODM1NmYyMzUxMGNhZDFiZjhiNDUwZWRjNGIiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiZDJjNTJmYTZiYzQ4ZmM3ZWRkMGY0MzI3NmI3MTE4ZjBlODIzYzc4NzMxNzcxYjgzODg5NDE2NDdjOTdhYzVlMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNzE5YjliZDc5YTU2ODIzMTBkODQ1ZWE2YTIxM2FiMjM1OGE2ZDNkMDUzZDRiMjVhNDEzN2E2NzNlZTMxNGM0YyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifV0=', + privacy: { + obfuscated: [], + }, + }, +} as v3.WrappedDocument diff --git a/test/prep/setup-contracts.mjs b/test/prep/setup-contracts.mjs new file mode 100644 index 0000000..6732f90 --- /dev/null +++ b/test/prep/setup-contracts.mjs @@ -0,0 +1,82 @@ +import shell from 'shelljs' + +const TT_CLI_PATH = 'tradetrust' +const ACCOUNT_ADDRESS = '0xe0A71284EF59483795053266CB796B65E48B5124' +const ACCOUNT_KEY = + '0xe82294532bcfcd8e0763ee5cef194f36f00396be59b94fb418f5f8d83140d9a7' + +// const ACCOUNT_DNS_DID_ADDRESS = '0x391aFf3942857a10958425FebF1fC1938D9F5AE7' +// const ACCOUNT_DNS_DID_KEY = +;('0x3760fb287bee810607433485cfa3fc665c2d682a1816991dccce645b096ae19a') +const TOKEN_REGISTRY_ADDRESS = '0x9Eb613a88534E2939518f4ffBFE65F5969b491FF' +const DOCUMENT_STORE_ADDRESS = '0x4Bf7E4777a8D1b6EdD5F2d9b8582e2817F0B0953' +const TITLE_ESCROW_FACTORY_ADDRESS = + '0x63A223E025256790E88778a01f480eBA77731D04' + +// const ACCOUNT_ADDR = '0xe0A71284EF59483795053266CB796B65E48B5124' +// const ISSUER_DNS = 'minhtetoo.lol' + +const issuedMerkleRootVerifiableDocs = [ + // v2 documents + '0x56a72ab0a30bef3d6fb767d16f66a854a21624739a773b590a2381d68eea9468', // issued correctly + '0x8db570494b2beeea4e6431f2f7abda199f676ae50c2a7bb4a0d0c548da0952df', // revoked + '0xba891dc3da5db9155ec370bb80f17b8fbe115893feb4337a3e321fd2300ea9b0', // invalid dns + '0x1249f84c06bddebc947022569b77f6b30cdc9bff53fda9700ef2a8cc30e7dcc5', // incorrect document store + + // v3 documents + '660e07e2defb55f04d6715448ac4f9c5718c8115c50ebd8931be15ed61ae8580', // issued correctly + 'eeef582def4ebea8fad684c33f67194f3a922692a3d9b96ca9d90150adf7259c', // revoked + '3ef17c1a3b5a05395340c7ba30c41fc1a73f3091585fade6401a42eb684944a8', // invalid dns + 'f039e1328ad4a21e7d58d6dab1caea228238bee71080b1364bb6f1097c39b407', // incorrect document store +] + +const mintedMerkleRootTransferrableRecord = [ + // v2 documents + '0x8b59f2f2792f802e15c7ecfc44eb4e5a8da3ce830c1c53faaafbab9de5812bdb', // issued correctly + '26a31b2d50a79a6e7966227714bc1e7e2fd31f6bfdf5ac8066a3b9c01046c35b', // incorrect dns + '0x82de42fe0d4dc965546a08f0555a33d66f25192f8121dab54b0a8d213a984a81', //incorrect token reg + + // v3 documents + '9e4f74864999eed515ebc5ff02a4ee21e2cc99d660690864784055b6aeff04af', // issued correctly + '3b11827925e0ceb00d4fb7dc8aac83ada4009e70315e8f64a75b75c361318a4f', // incorrect dns + 'f5a2421f4d1bc7081766f025c1f84eb1730837e1d797695942e15920e438498c', // incorrect token reg +] + +const revokedMerkleRootVerifiableDocs = [ + '0x8db570494b2beeea4e6431f2f7abda199f676ae50c2a7bb4a0d0c548da0952df', // v3 record + 'eeef582def4ebea8fad684c33f67194f3a922692a3d9b96ca9d90150adf7259c', //v3 record +] +console.log('\n## Deploying Token Registry ##\n') +shell.exec( + `${TT_CLI_PATH} deploy title-escrow-factory -n local -k ${ACCOUNT_KEY}` +) + +shell.exec( + `${TT_CLI_PATH} deploy token-registry "DEMO TOKEN REGISTRY" DTR -n local -k ${ACCOUNT_KEY} --factory-address ${TITLE_ESCROW_FACTORY_ADDRESS} --standalone` +) + +console.log('\n## Deploying Document Store ##\n') +shell.exec( + `${TT_CLI_PATH} deploy document-store "test document store" --network local -k ${ACCOUNT_KEY}` +) + +console.log('\n## Issuing Documents on Document Store ##\n') +issuedMerkleRootVerifiableDocs.forEach((ele) => { + shell.exec( + `${TT_CLI_PATH} document-store issue --address ${DOCUMENT_STORE_ADDRESS} --hash ${ele} --network local --k ${ACCOUNT_KEY}` + ) +}) + +console.log('\n## Revoking Documents on Document Store ##\n') +revokedMerkleRootVerifiableDocs.forEach((ele) => { + shell.exec( + `${TT_CLI_PATH} document-store revoke --address ${DOCUMENT_STORE_ADDRESS} --hash ${ele} --network local --k ${ACCOUNT_KEY}` + ) +}) + +console.log('\n## Minting Documents on Token Registry ##\n') +mintedMerkleRootTransferrableRecord.forEach((ele) => { + shell.exec( + `${TT_CLI_PATH} token-registry mint --address ${TOKEN_REGISTRY_ADDRESS} --tokenId ${ele} --beneficiary ${ACCOUNT_ADDRESS} --holder ${ACCOUNT_ADDRESS} --network local --k ${ACCOUNT_KEY}` + ) +}) diff --git a/tsconfig.json b/tsconfig.json index bfba394..a2fe2c0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,109 +1,16 @@ { + "include": ["./src/**/*"], + "exclude": ["**/*.test.ts"], "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ + "target": "es6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, "module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ "moduleResolution": "node10" /* Specify how TypeScript looks up a file from a given module specifier. */, - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "baseUrl": "." /* Specify the base directory to resolve non-relative module names. */, + "resolveJsonModule": true /* Enable importing .json files. */, + "allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */, "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - }, + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } } diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..ded2e16 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,10 @@ +/// +import { defineConfig } from 'vite' +import 'dotenv/config' + +export default defineConfig({ + test: { + testTimeout: 10000, + include: ['src/**/*.test.{ts,js}'], + }, +})