From 934b34a18b194928f90e7797289cc6f2243789ec Mon Sep 17 00:00:00 2001 From: Mircea Nistor Date: Wed, 9 Mar 2022 15:24:18 +0100 Subject: [PATCH] feat(date-store-json): add JSON object storage implementation (#819) * feat(data-store-json): add JSON backed storage option * feat(data-store-json): add private-key-store * feat(data-store-json): use the same JSON object backend for all the data stores * feat(data-store-json): simplify JSON store APIs convert integration test to use a plain file as the backend for the JSON storage. * test(browser): use data-store-json in browser tests and unlock more test scenarios * test(browser): link local packages during browser tests * feat(core): define IDataStoreORM interface at the `@veramo/core` level * docs(core): add some inline documentation for the `IDataStoreORM` plugin interface. * docs(data-store-json): add some inline documentation for types defined in data-store-json --- .gitignore | 2 + __browser_tests__/react-sample/.gitignore | 1 - ...t.test.js => browserAgent.browser-test.ts} | 20 +- .../react-sample/jest-integration.config.js | 2 +- .../react-sample/jest-puppeteer.config.js | 2 +- __browser_tests__/react-sample/package.json | 14 + .../react-sample/src/veramo/setup.ts | 55 +- __browser_tests__/react-sample/tsconfig.json | 24 +- __browser_tests__/react-sample/yarn.lock | 2088 ++++++++++++++++- __tests__/initial.migration.test.ts | 4 +- __tests__/localAgent.test.ts | 4 +- __tests__/localJsonStoreAgent.test.ts | 215 ++ __tests__/localMemoryStoreAgent.test.ts | 5 +- __tests__/restAgent.test.ts | 2 +- __tests__/shared/dbInitOptions.ts | 6 +- __tests__/shared/didDiscovery.ts | 3 +- __tests__/shared/documentationExamples.ts | 3 +- __tests__/shared/handleSdrMessage.ts | 12 +- __tests__/shared/messageHandler.ts | 3 +- __tests__/shared/saveClaims.ts | 11 +- __tests__/shared/verifiableDataJWT.ts | 10 +- __tests__/shared/verifiableDataLD.ts | 3 +- __tests__/utils/json-file-store.ts | 85 + package.json | 2 +- packages/cli/src/explore/credentials.ts | 2 +- packages/cli/src/explore/presentations.ts | 2 +- packages/cli/src/setup.ts | 13 +- packages/core/package.json | 1 + packages/core/plugin.schema.json | 1027 ++++++++ packages/core/src/index.ts | 1 + packages/core/src/types/IDataStoreORM.ts | 415 ++++ packages/credential-ld/src/action-handler.ts | 10 +- .../credential-ld/src/ld-credential-module.ts | 10 +- packages/credential-ld/src/types.ts | 8 +- packages/credential-w3c/src/action-handler.ts | 12 +- packages/data-store-json/LICENSE | 201 ++ packages/data-store-json/README.md | 16 + packages/data-store-json/api-extractor.json | 18 + packages/data-store-json/package.json | 40 + .../src/__tests__/data-store-orm-json.test.ts | 387 +++ .../data-store-json/src/data-store-json.ts | 595 +++++ .../src/identifier/did-store.ts | 106 + .../src/identifier/key-store.ts | 75 + .../src/identifier/private-key-store.ts | 92 + packages/data-store-json/src/index.ts | 23 + packages/data-store-json/src/types.ts | 112 + packages/data-store-json/tsconfig.json | 13 + packages/data-store/package.json | 15 +- packages/data-store/plugin.schema.json | 1029 -------- .../src/__tests__/data-store-orm.test.ts | 42 +- packages/data-store/src/data-store-orm.ts | 155 +- .../data-store/src/did-discovery-provider.ts | 3 +- packages/data-store/src/index.ts | 15 +- packages/data-store/src/types.ts | 69 - packages/selective-disclosure/package.json | 6 +- .../src/action-handler.ts | 25 +- packages/selective-disclosure/src/types.ts | 28 +- packages/selective-disclosure/tsconfig.json | 1 - packages/tsconfig.json | 1 + scripts/prepare-integration-tests.ts | 3 +- scripts/prepare-react-test.sh | 43 + yarn.lock | 20 +- 62 files changed, 5800 insertions(+), 1410 deletions(-) delete mode 100644 __browser_tests__/react-sample/.gitignore rename __browser_tests__/react-sample/headless-tests/{browserAgent.test.js => browserAgent.browser-test.ts} (88%) create mode 100644 __tests__/localJsonStoreAgent.test.ts create mode 100644 __tests__/utils/json-file-store.ts create mode 100644 packages/core/src/types/IDataStoreORM.ts create mode 100644 packages/data-store-json/LICENSE create mode 100644 packages/data-store-json/README.md create mode 100644 packages/data-store-json/api-extractor.json create mode 100644 packages/data-store-json/package.json create mode 100644 packages/data-store-json/src/__tests__/data-store-orm-json.test.ts create mode 100644 packages/data-store-json/src/data-store-json.ts create mode 100644 packages/data-store-json/src/identifier/did-store.ts create mode 100644 packages/data-store-json/src/identifier/key-store.ts create mode 100644 packages/data-store-json/src/identifier/private-key-store.ts create mode 100644 packages/data-store-json/src/index.ts create mode 100644 packages/data-store-json/src/types.ts create mode 100644 packages/data-store-json/tsconfig.json delete mode 100644 packages/data-store/plugin.schema.json delete mode 100644 packages/data-store/src/types.ts create mode 100644 scripts/prepare-react-test.sh diff --git a/.gitignore b/.gitignore index 50579dc52..3cedcb979 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,8 @@ /node_modules website/node_modules +**/build/ +**/*.log /packages/*/build/ /packages/*/api/*.api.json /packages/*/api/*.api.md diff --git a/__browser_tests__/react-sample/.gitignore b/__browser_tests__/react-sample/.gitignore deleted file mode 100644 index b0f6b7a29..000000000 --- a/__browser_tests__/react-sample/.gitignore +++ /dev/null @@ -1 +0,0 @@ -yarn-error.log \ No newline at end of file diff --git a/__browser_tests__/react-sample/headless-tests/browserAgent.test.js b/__browser_tests__/react-sample/headless-tests/browserAgent.browser-test.ts similarity index 88% rename from __browser_tests__/react-sample/headless-tests/browserAgent.test.js rename to __browser_tests__/react-sample/headless-tests/browserAgent.browser-test.ts index 6df3eb928..eb2ffce7d 100644 --- a/__browser_tests__/react-sample/headless-tests/browserAgent.test.js +++ b/__browser_tests__/react-sample/headless-tests/browserAgent.browser-test.ts @@ -1,32 +1,32 @@ import { agent } from '../src/veramo/setup' import keyManager from '../../../__tests__/shared/keyManager' -import didManager from '../../../__tests__/shared/didManager' +// import didManager from '../../../__tests__/shared/didManager' import verifiableDataJWT from '../../../__tests__/shared/verifiableDataJWT' import verifiableDataLD from '../../../__tests__/shared/verifiableDataLD' import handleSdrMessage from '../../../__tests__/shared/handleSdrMessage' -import resolveDid from '../../../__tests__/shared/resolveDid' +// import resolveDid from '../../../__tests__/shared/resolveDid' import webDidFlow from '../../../__tests__/shared/webDidFlow' import saveClaims from '../../../__tests__/shared/saveClaims' import documentationExamples from '../../../__tests__/shared/documentationExamples' -import didCommPacking from '../../../__tests__/shared/didCommPacking' +// import didCommPacking from '../../../__tests__/shared/didCommPacking' import messageHandler from '../../../__tests__/shared/messageHandler' jest.setTimeout(3 * 60 * 1000) describe('Browser integration tests', () => { - describe('global tests', () => { + describe('shared tests', () => { const testContext = { getAgent: () => agent, setup: () => {}, tearDown: () => {} } - // verifiableDataJWT(testContext) + verifiableDataJWT(testContext) // verifiableDataLD(testContext) - // handleSdrMessage(testContext) + handleSdrMessage(testContext) // resolveDid(testContext) - // webDidFlow(testContext) - // saveClaims(testContext) - // documentationExamples(testContext) + webDidFlow(testContext) + saveClaims(testContext) + documentationExamples(testContext) keyManager(testContext) // didManager(testContext) - // messageHandler(testContext) + messageHandler(testContext) // didCommPacking(testContext) }) diff --git a/__browser_tests__/react-sample/jest-integration.config.js b/__browser_tests__/react-sample/jest-integration.config.js index 9459efb62..754158950 100644 --- a/__browser_tests__/react-sample/jest-integration.config.js +++ b/__browser_tests__/react-sample/jest-integration.config.js @@ -1,7 +1,7 @@ module.exports = { preset: 'jest-puppeteer', rootDir: 'headless-tests', - testRegex: './*\\.test\\.(js|tsx?)$', + testRegex: './*\\.browser-test\\.(ts|tsx?)$', globalSetup: 'jest-environment-puppeteer/setup', globalTeardown: 'jest-environment-puppeteer/teardown', testEnvironment: 'jest-environment-puppeteer', diff --git a/__browser_tests__/react-sample/jest-puppeteer.config.js b/__browser_tests__/react-sample/jest-puppeteer.config.js index 425b06b3f..7a1e3ae08 100644 --- a/__browser_tests__/react-sample/jest-puppeteer.config.js +++ b/__browser_tests__/react-sample/jest-puppeteer.config.js @@ -6,7 +6,7 @@ module.exports = { }, browserContext: "default", server: { - command: `npm start`, + command: "npm start", port: 3000, launchTimeout: 20000, debug: true, diff --git a/__browser_tests__/react-sample/package.json b/__browser_tests__/react-sample/package.json index 10d92d8a2..d1ed6e9b8 100644 --- a/__browser_tests__/react-sample/package.json +++ b/__browser_tests__/react-sample/package.json @@ -6,12 +6,26 @@ "@types/node": "16.11.26", "@types/react": "17.0.39", "@types/react-dom": "17.0.13", + "@veramo/core": "^3.1.0", + "@veramo/credential-w3c": "^3.1.0", + "@veramo/data-store": "^3.1.0", + "@veramo/did-comm": "^3.1.0", + "@veramo/did-jwt": "^3.1.0", + "@veramo/did-manager": "^3.1.0", + "@veramo/did-provider-ethr": "^3.1.0", + "@veramo/did-provider-key": "^3.1.0", + "@veramo/did-provider-web": "^3.1.0", + "@veramo/did-resolver": "^3.1.0", + "@veramo/key-manager": "^3.1.0", + "@veramo/message-handler": "^3.1.0", + "@veramo/selective-disclosure": "^3.1.0", "crypto": "npm:crypto-browserify", "did-resolver": "3.1.5", "ethr-did-resolver": "5.0.4", "react": "17.0.2", "react-dom": "17.0.2", "react-scripts": "5.0.0", + "typeorm": "^0.2.44", "typescript": "4.5.5", "web-did-resolver": "2.0.12", "web-vitals": "2.1.4" diff --git a/__browser_tests__/react-sample/src/veramo/setup.ts b/__browser_tests__/react-sample/src/veramo/setup.ts index ee8433fc9..b851c78c7 100644 --- a/__browser_tests__/react-sample/src/veramo/setup.ts +++ b/__browser_tests__/react-sample/src/veramo/setup.ts @@ -1,36 +1,40 @@ -import { createAgent, IResolver } from '@veramo/core' +import { createAgent, IDataStore, IDataStoreORM, IDIDManager, IKeyManager, IResolver, TAgent } from '@veramo/core' import { DIDResolverPlugin } from '@veramo/did-resolver' import { Resolver } from 'did-resolver' import { getResolver as ethrDidResolver } from 'ethr-did-resolver' import { getResolver as webDidResolver } from 'web-did-resolver' import { MessageHandler } from '@veramo/message-handler' -import { KeyManager, MemoryKeyStore, MemoryPrivateKeyStore } from '@veramo/key-manager' -import { DIDManager, MemoryDIDStore } from '@veramo/did-manager' +import { KeyManager } from '@veramo/key-manager' +import { DIDManager } from '@veramo/did-manager' import { JwtMessageHandler } from '@veramo/did-jwt' -import { W3cMessageHandler } from '@veramo/credential-w3c' -import { DIDCommMessageHandler } from '@veramo/did-comm' -import { SdrMessageHandler } from '@veramo/selective-disclosure' +import { CredentialIssuer, ICredentialIssuer, W3cMessageHandler } from '@veramo/credential-w3c' +// import { getDidKeyResolver, KeyDIDProvider } from '@veramo/did-provider-key' +import { DIDComm, DIDCommMessageHandler, IDIDComm } from '@veramo/did-comm' +import { ISelectiveDisclosure, SdrMessageHandler, SelectiveDisclosure } from '@veramo/selective-disclosure' import { KeyManagementSystem } from '@veramo/kms-local' -// import { Connection, createConnection } from 'typeorm' -import { CredentialIssuer, ICredentialIssuer } from '@veramo/credential-w3c' -import { - CredentialIssuerLD, - ICredentialIssuerLD, - LdDefaultContexts, - VeramoEcdsaSecp256k1RecoverySignature2020, - VeramoEd25519Signature2018, -} from '@veramo/credential-ld' import { EthrDIDProvider } from '@veramo/did-provider-ethr' import { WebDIDProvider } from '@veramo/did-provider-web' -import { getDidKeyResolver, KeyDIDProvider } from '@veramo/did-provider-key' -import { DIDComm, IDIDComm } from '@veramo/did-comm' -import { ISelectiveDisclosure, SelectiveDisclosure } from '@veramo/selective-disclosure' -// import { DataStore, DataStoreORM, Entities, IDataStoreORM, migrations } from '@veramo/data-store' +import { DataStoreJson, DIDStoreJson, KeyStoreJson, PrivateKeyStoreJson } from "@veramo/data-store-json"; +// import { FakeDidProvider, FakeDidResolver } from "../../../../__tests__/utils/fake-did"; const INFURA_PROJECT_ID = '33aab9e0334c44b0a2e0c57c15302608' -export const agent = createAgent({ +const memoryJsonStore = { + notifyUpdate: () => Promise.resolve() +} + +type InstalledPlugins = + IResolver + & IKeyManager + & IDIDManager + & ICredentialIssuer + & IDataStoreORM + & IDataStore + & ISelectiveDisclosure + & IDIDComm + +export const agent: TAgent = createAgent({ plugins: [ new DIDResolverPlugin({ resolver: new Resolver({ @@ -47,13 +51,13 @@ export const agent = createAgent({ }), }), new KeyManager({ - store: new MemoryKeyStore(), + store: new KeyStoreJson(memoryJsonStore), kms: { - local: new KeyManagementSystem(new MemoryPrivateKeyStore()), + local: new KeyManagementSystem(new PrivateKeyStoreJson(memoryJsonStore)), }, }), new DIDManager({ - store: new MemoryDIDStore(), + store: new DIDStoreJson(memoryJsonStore), defaultProvider: 'did:ethr:rinkeby', providers: { 'did:ethr': new EthrDIDProvider({ @@ -83,7 +87,7 @@ export const agent = createAgent({ * `KeyDIDProvider` throws error: * "Field 'browser' doesn't contain a valid alias configuration" * Can't resolve 'stream' - * 'stream-browserify' can be installed for brower env + * 'stream-browserify' can be installed for browser env */ // 'did:key': new KeyDIDProvider({ // defaultKms: 'local', @@ -91,8 +95,7 @@ export const agent = createAgent({ // 'did:fake': new FakeDidProvider(), }, }), - // new DataStore(dbConnection), - // new DataStoreORM(dbConnection), + new DataStoreJson(memoryJsonStore), new MessageHandler({ messageHandlers: [ new DIDCommMessageHandler(), diff --git a/__browser_tests__/react-sample/tsconfig.json b/__browser_tests__/react-sample/tsconfig.json index a273b0cfc..f1474c87a 100644 --- a/__browser_tests__/react-sample/tsconfig.json +++ b/__browser_tests__/react-sample/tsconfig.json @@ -1,4 +1,5 @@ { + "extends": "../../packages/tsconfig.settings.json", "compilerOptions": { "target": "es5", "lib": [ @@ -12,7 +13,6 @@ "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, @@ -22,5 +22,27 @@ }, "include": [ "src" + ], + "references": [ + { "path": "../../packages/core" }, + { "path": "../../packages/credential-w3c" }, + { "path": "../../packages/data-store" }, + { "path": "../../packages/data-store-json" }, + { "path": "../../packages/did-comm" }, + { "path": "../../packages/did-discovery" }, + { "path": "../../packages/did-jwt" }, + { "path": "../../packages/did-manager" }, + { "path": "../../packages/did-provider-ethr" }, + { "path": "../../packages/did-provider-key" }, + { "path": "../../packages/did-provider-web" }, + { "path": "../../packages/did-resolver" }, + { "path": "../../packages/key-manager" }, + { "path": "../../packages/kms-local" }, + { "path": "../../packages/message-handler" }, + { "path": "../../packages/remote-client" }, + { "path": "../../packages/remote-server" }, + { "path": "../../packages/selective-disclosure" }, + { "path": "../../packages/url-handler" }, + { "path": "../../packages/utils" } ] } diff --git a/__browser_tests__/react-sample/yarn.lock b/__browser_tests__/react-sample/yarn.lock index 4d9267b40..51cd1ecc0 100644 --- a/__browser_tests__/react-sample/yarn.lock +++ b/__browser_tests__/react-sample/yarn.lock @@ -1070,6 +1070,11 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@bitauth/libauth@^1.18.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@bitauth/libauth/-/libauth-1.19.1.tgz#713751bbc09815b667f8fe00a1cc5b0f3bf45dd1" + integrity sha512-R524tD5VwOt3QRHr7N518nqTVR/HKgfWL4LypekcGuNQN8R4PWScvuRcRzrY39A28kLztMv+TJdiKuMNbkU1ug== + "@csstools/normalize.css@*": version "12.0.0" resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" @@ -1103,6 +1108,21 @@ dependencies: postcss-value-parser "^4.2.0" +"@did-core/data-model@^0.1.1-unstable.13": + version "0.1.1-unstable.15" + resolved "https://registry.yarnpkg.com/@did-core/data-model/-/data-model-0.1.1-unstable.15.tgz#51ef2e99adebdf2d8ba8c43ed537f33916d6b8a8" + integrity sha512-l7gxLxegcXW7389G+j6o+S24lS8uasmJx5txWpW3QadNvOawKwvWn8bV59SdHSK806xNzIZaCLKmXKxebs8yAQ== + dependencies: + factory.ts "^0.5.1" + +"@did-core/did-ld-json@^0.1.1-unstable.13": + version "0.1.1-unstable.15" + resolved "https://registry.yarnpkg.com/@did-core/did-ld-json/-/did-ld-json-0.1.1-unstable.15.tgz#009a97491f7a897197a7373258bdf089602155db" + integrity sha512-p2jKRxSU+eJJqd+ewCklYp/XZ6ysISk8VU2/kANCoB/WwUy/kVgw2rUNScRDXw2utr9Qj36P8EZTYi4aj7vRCQ== + dependencies: + "@transmute/did-context" "^0.6.1-unstable.25" + jsonld-checker "^0.1.6" + "@eslint/eslintrc@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" @@ -1133,7 +1153,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/abstract-provider@^5.5.0": +"@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== @@ -1146,7 +1166,7 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/web" "^5.5.0" -"@ethersproject/abstract-signer@^5.5.0": +"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== @@ -1157,7 +1177,7 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/address@^5.5.0": +"@ethersproject/address@5.5.0", "@ethersproject/address@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== @@ -1192,7 +1212,7 @@ "@ethersproject/logger" "^5.5.0" bn.js "^4.11.9" -"@ethersproject/bytes@^5.5.0": +"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== @@ -1236,6 +1256,43 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" +"@ethersproject/hdnode@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" + integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/json-wallets@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" + integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + "@ethersproject/keccak256@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" @@ -1256,7 +1313,15 @@ dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/properties@^5.5.0": +"@ethersproject/pbkdf2@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" + integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + +"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== @@ -1313,7 +1378,7 @@ "@ethersproject/logger" "^5.5.0" hash.js "1.1.7" -"@ethersproject/signing-key@^5.5.0": +"@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== @@ -1325,7 +1390,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/strings@^5.5.0": +"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== @@ -1334,7 +1399,7 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/transactions@^5.5.0": +"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== @@ -1349,6 +1414,27 @@ "@ethersproject/rlp" "^5.5.0" "@ethersproject/signing-key" "^5.5.0" +"@ethersproject/wallet@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" + integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/json-wallets" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + "@ethersproject/web@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" @@ -1360,6 +1446,17 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" +"@ethersproject/wordlists@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" + integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@hapi/hoek@^9.0.0": version "9.2.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" @@ -1753,6 +1850,35 @@ "@jridgewell/resolve-uri" "^3.0.3" sourcemap-codec "1.4.8" +"@mattrglobal/bbs-signatures@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@mattrglobal/bbs-signatures/-/bbs-signatures-0.5.0.tgz#c8e3842a657cabbf7f1e16db06f77c9f84a42f3f" + integrity sha512-4te4TpacAmeCM8aa/kHkU0i1IJwsO1x/Tez6/YLUWg6rK6bfGA1NNO7IBc12u9ETkoTsiU32UmsiYWXcw9QwKQ== + optionalDependencies: + "@mattrglobal/node-bbs-signatures" "0.11.0" + +"@mattrglobal/bls12381-key-pair@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@mattrglobal/bls12381-key-pair/-/bls12381-key-pair-0.5.0.tgz#dd6014b5b14903d4a280af4286c74d8a97b38410" + integrity sha512-eXAtke0HOEr9RcT+NEI1MERE50gUnnLm1mYBJkUugk9REP3MfKXtX2Mo4FXyCH/IR4Oxj2jCcfNYW/h0Q3x5sg== + dependencies: + "@mattrglobal/bbs-signatures" "0.5.0" + bs58 "4.0.1" + rfc4648 "1.4.0" + +"@mattrglobal/node-bbs-signatures@0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.11.0.tgz#c63ab8648a529cfe1dd855cc78a93f78ee27a9f4" + integrity sha512-V0wcY0ZewrPOiMOrL3wam0oYL1SLbF2ihgAM6JQvLrAKw1MckYiJ8T4vL+nOBs2hf1PA1TZI+USe5mqMWuVKTw== + dependencies: + neon-cli "0.4.0" + node-pre-gyp "0.14.0" + +"@multiformats/base-x@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" + integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1774,6 +1900,34 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@peculiar/asn1-schema@^2.0.44": + version "2.0.44" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.0.44.tgz#dcb1b8f84a4dd5f07f674028beade9c3de43cc06" + integrity sha512-uaCnjQ9A9WwQSMuDJcNOCYEPXTahgKbFMvI7eMOMd8lXgx0J1eU7F3BoMsK5PFxa3dVUxjSQbaOjfgGoeHGgoQ== + dependencies: + "@types/asn1js" "^2.0.2" + asn1js "^2.1.1" + pvtsutils "^1.2.1" + tslib "^2.3.0" + +"@peculiar/json-schema@^1.1.12": + version "1.1.12" + resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339" + integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== + dependencies: + tslib "^2.0.0" + +"@peculiar/webcrypto@^1.1.6": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.2.3.tgz#79268ef0a8068bed2a40fc33bc68b4d3546fe2cc" + integrity sha512-q7wDfZy3k/tpnsYB23/MyyDkjn6IdHh8w+xwoVMS5cu6CjVoFzngXDZEOOuSE4zus2yO6ciQhhHxd4XkLpwVnQ== + dependencies: + "@peculiar/asn1-schema" "^2.0.44" + "@peculiar/json-schema" "^1.1.12" + pvtsutils "^1.2.1" + tslib "^2.3.1" + webcrypto-core "^1.4.0" + "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.4" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz#df0d0d855fc527db48aac93c218a0bf4ada41f99" @@ -1862,6 +2016,147 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@sqltools/formatter@^1.2.2": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20" + integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg== + +"@stablelib/aead@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" + integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== + +"@stablelib/binary@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" + integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== + dependencies: + "@stablelib/int" "^1.0.1" + +"@stablelib/bytes@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" + integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== + +"@stablelib/chacha20poly1305@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" + integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== + dependencies: + "@stablelib/aead" "^1.0.1" + "@stablelib/binary" "^1.0.1" + "@stablelib/chacha" "^1.0.1" + "@stablelib/constant-time" "^1.0.1" + "@stablelib/poly1305" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/chacha@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" + integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/constant-time@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" + integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== + +"@stablelib/ed25519@^1.0.1", "@stablelib/ed25519@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.2.tgz#937a88a2f73a71d9bdc3ea276efe8954776ae0f4" + integrity sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ== + dependencies: + "@stablelib/random" "^1.0.1" + "@stablelib/sha512" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/hash@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" + integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== + +"@stablelib/int@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" + integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== + +"@stablelib/keyagreement@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f" + integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== + dependencies: + "@stablelib/bytes" "^1.0.1" + +"@stablelib/poly1305@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc" + integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== + dependencies: + "@stablelib/constant-time" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/random@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.1.tgz#4357a00cb1249d484a9a71e6054bc7b8324a7009" + integrity sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/sha256@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f" + integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/sha512@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" + integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/wipe@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" + integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== + +"@stablelib/x25519@^1.0.0", "@stablelib/x25519@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.1.tgz#bcd6132ac4dd94f28f1479e228c85b3468d6ed27" + integrity sha512-nmyUI2ZArxYDh1PhdoSCPEtlTYE0DYugp2qqx8OtjrX3Hmh7boIlDsD0X71ihAxzxqJf3TyQqN/p58ToWhnp+Q== + dependencies: + "@stablelib/keyagreement" "^1.0.1" + "@stablelib/random" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/xchacha20@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/xchacha20/-/xchacha20-1.0.1.tgz#e98808d1f7d8b20e3ff37c71a3062a2a955d9a8c" + integrity sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/chacha" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/xchacha20poly1305@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/xchacha20poly1305/-/xchacha20poly1305-1.0.1.tgz#addcaf30b92dd956f76b3357888e2f91b92e7a61" + integrity sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg== + dependencies: + "@stablelib/aead" "^1.0.1" + "@stablelib/chacha20poly1305" "^1.0.1" + "@stablelib/constant-time" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + "@stablelib/xchacha20" "^1.0.1" + "@surma/rollup-plugin-off-main-thread@^2.2.3": version "2.2.3" resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" @@ -1980,11 +2275,155 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@transmute/bls12381-key-pair@^0.7.0-unstable.2": + version "0.7.0-unstable.50" + resolved "https://registry.yarnpkg.com/@transmute/bls12381-key-pair/-/bls12381-key-pair-0.7.0-unstable.50.tgz#d0755605581951774c905739db8299ad7d84357b" + integrity sha512-l4G3r5c0vB8Hk7bsZ6V0vTW1EhbWHT8KCaePax7Z846/5YSikiRdR1GSSKBdi/I2N0T5KBxYvUDPRXm0cOU7ew== + dependencies: + "@mattrglobal/bls12381-key-pair" "^0.5.0" + "@transmute/ld-key-pair" "^0.7.0-unstable.50" + +"@transmute/did-context@^0.6.1-unstable.25", "@transmute/did-context@^0.6.1-unstable.36": + version "0.6.1-unstable.37" + resolved "https://registry.yarnpkg.com/@transmute/did-context/-/did-context-0.6.1-unstable.37.tgz#12ad065e142bc688460090d0ce338948e513c262" + integrity sha512-p/QnG3QKS4218hjIDgdvJOFATCXsAnZKgy4egqRrJLlo3Y6OaDBg7cA73dixOwUPoEKob0K6rLIGcsCI/L1acw== + +"@transmute/did-key-bls12381@^0.3.0-unstable.5": + version "0.3.0-unstable.5" + resolved "https://registry.yarnpkg.com/@transmute/did-key-bls12381/-/did-key-bls12381-0.3.0-unstable.5.tgz#b512f0196dc1d80a035b4bd3a2deca2dc6f32310" + integrity sha512-D6KsDOF0ACO76JubdPxwvrgV7152qCHtHGMZlLtUvjYdIpCuk5q5NeVp+LdgSnZRPNANGgoM5BZqz0X7/C2OoQ== + dependencies: + "@transmute/bls12381-key-pair" "^0.7.0-unstable.2" + "@transmute/did-key-common" "^0.3.0-unstable.5" + +"@transmute/did-key-common@^0.3.0-unstable.5": + version "0.3.0-unstable.5" + resolved "https://registry.yarnpkg.com/@transmute/did-key-common/-/did-key-common-0.3.0-unstable.5.tgz#c46b2952bfee9ffc0c8cf886a6dc0b160bea3720" + integrity sha512-8g8rPwzw8phRcO6j7Pdef7POB8Q+2mQRg+7rB6PX1wqxsAR6qFsaQRN5q1Odb6UOih1bZ2Dbnas1eArp6lNoSQ== + dependencies: + "@did-core/data-model" "^0.1.1-unstable.13" + "@did-core/did-ld-json" "^0.1.1-unstable.13" + "@transmute/did-context" "^0.6.1-unstable.36" + "@transmute/ld-key-pair" "^0.6.1-unstable.36" + "@transmute/security-context" "^0.6.1-unstable.36" + +"@transmute/did-key-ed25519@^0.3.0-unstable.5": + version "0.3.0-unstable.5" + resolved "https://registry.yarnpkg.com/@transmute/did-key-ed25519/-/did-key-ed25519-0.3.0-unstable.5.tgz#9748acc3212b04bd416ee71d150d7f148a00ccf8" + integrity sha512-yYnuCEZMVa7b+zmYgKby+49Rgnq045RWoR5ddG9n6UxDowFxrKuwZeN9imInCZcBY9mzYXm2yutqTXULuptUow== + dependencies: + "@transmute/did-key-common" "^0.3.0-unstable.5" + "@transmute/ed25519-key-pair" "^0.6.1-unstable.37" + +"@transmute/did-key-secp256k1@^0.3.0-unstable.5": + version "0.3.0-unstable.5" + resolved "https://registry.yarnpkg.com/@transmute/did-key-secp256k1/-/did-key-secp256k1-0.3.0-unstable.5.tgz#47dfdd5ab721cdc42af5a6968e993d2955572ea4" + integrity sha512-LRz7lNkgaD5lJWs95QSHux/VoJd52QnGal+FbEuYo7Q/3IIUHR98hZYrhdYKLzRTIKOE76Z1y/rvJpGu2+NzJA== + dependencies: + "@transmute/did-key-common" "^0.3.0-unstable.5" + "@transmute/secp256k1-key-pair" "^0.7.0-unstable.2" + +"@transmute/did-key-test-vectors@^0.3.0-unstable.5": + version "0.3.0-unstable.5" + resolved "https://registry.yarnpkg.com/@transmute/did-key-test-vectors/-/did-key-test-vectors-0.3.0-unstable.5.tgz#aa061691d796785b05da8ac574133b5ff350117d" + integrity sha512-JtW2D9MUJRurGx/0Qb6AYDz6QBeY1RE/qA4yQcLVxLjGeh0vvThpOkN2OAIvq6ktG0KoZWBCZGQt26f7m64noQ== + +"@transmute/did-key-web-crypto@^0.3.0-unstable.5": + version "0.3.0-unstable.5" + resolved "https://registry.yarnpkg.com/@transmute/did-key-web-crypto/-/did-key-web-crypto-0.3.0-unstable.5.tgz#add632d5814e4a2a57db8f2f584e6081bb138540" + integrity sha512-RKlgTBerm7z0v9hAVBfHGyUIOPoqrfY1qcyX3VapAF6IUpyebAHY3suo0Bugc7bXg7t59O/NPc9lbbNXmNXJdg== + dependencies: + "@transmute/did-key-common" "^0.3.0-unstable.5" + "@transmute/web-crypto-key-pair" "^0.7.0-unstable.2" + +"@transmute/did-key-x25519@^0.3.0-unstable.5": + version "0.3.0-unstable.5" + resolved "https://registry.yarnpkg.com/@transmute/did-key-x25519/-/did-key-x25519-0.3.0-unstable.5.tgz#95003e681dda701e4ce080eeeb1118c9249a3268" + integrity sha512-QxBnZy01K0S+VjurxeLGMhFoZZaMi6eam2y9IfPQXia8pSBjB++sTyhJTJcpmnLFxVNY9I1X+x90je2wguFm9g== + dependencies: + "@transmute/did-key-common" "^0.3.0-unstable.5" + "@transmute/x25519-key-pair" "^0.7.0-unstable.1" + +"@transmute/did-key.js@^0.3.0-unstable": + version "0.3.0-unstable.5" + resolved "https://registry.yarnpkg.com/@transmute/did-key.js/-/did-key.js-0.3.0-unstable.5.tgz#8f7781b3ee22f8b4f3416175b9311aebf9be6393" + integrity sha512-R1391881SKMB545Yl9SZYE5NatW0USNs8R6p55R/e8p2MT0APzmaGk7yY0BEL+DAWwoTEyp+kYDx2/hFgu0NDQ== + dependencies: + "@transmute/did-key-bls12381" "^0.3.0-unstable.5" + "@transmute/did-key-ed25519" "^0.3.0-unstable.5" + "@transmute/did-key-secp256k1" "^0.3.0-unstable.5" + "@transmute/did-key-test-vectors" "^0.3.0-unstable.5" + "@transmute/did-key-web-crypto" "^0.3.0-unstable.5" + "@transmute/did-key-x25519" "^0.3.0-unstable.5" + +"@transmute/ed25519-key-pair@^0.6.1-unstable.37": + version "0.6.1-unstable.37" + resolved "https://registry.yarnpkg.com/@transmute/ed25519-key-pair/-/ed25519-key-pair-0.6.1-unstable.37.tgz#115a3c9ca0495e9b9d1f6059c6241f5dfc16d073" + integrity sha512-l34yzE/QnQwmdk5xY9g2kD55e4XPp/jTZQzPu7I6J4Ar+bMaL/0RLL/pgvwyI7qUpsddxRf4WPZCCcZveqPcdA== + dependencies: + "@stablelib/ed25519" "^1.0.1" + "@transmute/ld-key-pair" "^0.6.1-unstable.37" + "@transmute/x25519-key-pair" "^0.6.1-unstable.37" + +"@transmute/ld-key-pair@^0.6.1-unstable.36", "@transmute/ld-key-pair@^0.6.1-unstable.37": + version "0.6.1-unstable.37" + resolved "https://registry.yarnpkg.com/@transmute/ld-key-pair/-/ld-key-pair-0.6.1-unstable.37.tgz#ffe8af071b4ea991a49c795724b93999f4e6c8af" + integrity sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ== + +"@transmute/ld-key-pair@^0.7.0-unstable.50": + version "0.7.0-unstable.50" + resolved "https://registry.yarnpkg.com/@transmute/ld-key-pair/-/ld-key-pair-0.7.0-unstable.50.tgz#0a4f864f718fb0386f03d907ab4c37287a07147b" + integrity sha512-vInTCBYL7cLXHv5gthUAnjNSqcQz/UcjBWx0xwF7R9b842CuUW2tL7sLAJ61iW4Y+VEHzKqTkvHYXpjI6KLSfw== + +"@transmute/secp256k1-key-pair@^0.7.0-unstable.2": + version "0.7.0-unstable.50" + resolved "https://registry.yarnpkg.com/@transmute/secp256k1-key-pair/-/secp256k1-key-pair-0.7.0-unstable.50.tgz#cbdbe8422a9beacf6f2f08fdbdb6e927f25e64ac" + integrity sha512-KogNtPeUwNaeC1wPCBK3HDKpUI0eAFlXWdajuFrp5VuQFNV3udH5AVBotBnrk/iguuzswq1LnKlZ/88XBowMgg== + dependencies: + "@bitauth/libauth" "^1.18.1" + "@transmute/ld-key-pair" "^0.7.0-unstable.50" + secp256k1 "^4.0.2" + +"@transmute/security-context@^0.6.1-unstable.36": + version "0.6.1-unstable.37" + resolved "https://registry.yarnpkg.com/@transmute/security-context/-/security-context-0.6.1-unstable.37.tgz#532b9238efd80dbaaa3e7dd663107cd925afadcc" + integrity sha512-GtLmG65qlORrz/2S4I74DT+vA4+qXsFxrMr0cNOXjUqZBd/AW1PTrFnryLF9907BfoiD58HC9qb1WVGWjSlBYw== + +"@transmute/web-crypto-key-pair@^0.7.0-unstable.2": + version "0.7.0-unstable.50" + resolved "https://registry.yarnpkg.com/@transmute/web-crypto-key-pair/-/web-crypto-key-pair-0.7.0-unstable.50.tgz#fc2d0b9b83fb5550dbfe703dc0408e039a655a8e" + integrity sha512-yRv6eckGBQKAOQn9tkE3LPIix0QVuzXxWG25/rl7fvkYm/WQZ9KL0X9BL/IE9UWm+JqDXncmLE+bfv0MnnUH+w== + dependencies: + "@peculiar/webcrypto" "^1.1.6" + "@transmute/ld-key-pair" "^0.7.0-unstable.50" + big-integer "^1.6.48" + +"@transmute/x25519-key-pair@^0.6.1-unstable.37": + version "0.6.1-unstable.37" + resolved "https://registry.yarnpkg.com/@transmute/x25519-key-pair/-/x25519-key-pair-0.6.1-unstable.37.tgz#d51fe84d2a8079781e1dfbc2c032e8c37c5c2d9a" + integrity sha512-j6zR9IoJmgVhUCVH8YVGpsgQf99SxPKZ00LGnUheBAQzgj2lULGBQ44G+GqBCdzfT0qweptTfp1RjqqHEpizeA== + dependencies: + "@stablelib/x25519" "^1.0.0" + "@transmute/ld-key-pair" "^0.6.1-unstable.37" + +"@transmute/x25519-key-pair@^0.7.0-unstable.1": + version "0.7.0-unstable.50" + resolved "https://registry.yarnpkg.com/@transmute/x25519-key-pair/-/x25519-key-pair-0.7.0-unstable.50.tgz#d80fc4228497d95c7ce40732cbb18a6e5420e037" + integrity sha512-TFbf7BDebjeX6DvhMRFV3HRMmg4D66AafXxNqQYKphRI1bIymCtIBemj+oSFoO01YWsYAuxyflSsAkRImbYzHA== + dependencies: + "@stablelib/x25519" "^1.0.0" + "@transmute/ld-key-pair" "^0.7.0-unstable.50" + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@types/asn1js@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/asn1js/-/asn1js-2.0.2.tgz#bb1992291381b5f06e22a829f2ae009267cdf8c5" + integrity sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.1.18" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" @@ -2332,6 +2771,11 @@ dependencies: "@types/node" "*" +"@types/zen-observable@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" + integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== + "@typescript-eslint/eslint-plugin@^5.5.0": version "5.10.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz#f8c1d59fc37bd6d9d11c97267fdfe722c4777152" @@ -2419,6 +2863,166 @@ "@typescript-eslint/types" "5.10.2" eslint-visitor-keys "^3.0.0" +"@veramo/core@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/core/-/core-3.1.0.tgz#668023eee807b4e4d1678851b2f8270b1d05df6f" + integrity sha512-gy7Z+GZayt/b3Oy/uAkXnXLdHjs5pjB8Q4nMM7yTnvQKhyJGjYBgpRpuy54D0TCRzjU8DxQEhXjPmI+9GGReRg== + dependencies: + debug "^4.1.1" + did-jwt-vc "2.1.7" + events "^3.2.0" + z-schema "^5.0.0" + +"@veramo/credential-w3c@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/credential-w3c/-/credential-w3c-3.1.0.tgz#bbbd9f05ce86dc9e100b98225b505b272ebe3ef9" + integrity sha512-n2zMEqn9jgUjlrD/W1tV0tVuXrqL0d8+2pHgquwLj9S4lbc98VswK01G/23KsdNtyopXq/Cq5xOZ0yjOHMHuVw== + dependencies: + "@veramo/core" "^3.1.0" + "@veramo/did-jwt" "^3.1.0" + "@veramo/did-resolver" "^3.1.0" + "@veramo/message-handler" "^3.1.0" + blakejs "^1.1.0" + debug "^4.1.1" + did-jwt-vc "2.1.7" + did-resolver "3.1.3" + +"@veramo/data-store@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/data-store/-/data-store-3.1.0.tgz#1e311476b0be55f0e52fa0159a08bdab481b7682" + integrity sha512-wByE3U9axu4BFLlj3RELSPEsc8jaGO+Ac/ww734ROZXLwmQhCqcK+H//ECPiGcSPjDqLzZSYvg06VtUv97pm9w== + dependencies: + "@veramo/core" "^3.1.0" + "@veramo/did-discovery" "^3.1.0" + "@veramo/did-manager" "^3.1.0" + "@veramo/key-manager" "^3.1.0" + debug "^4.1.1" + typeorm "0.2.38" + +"@veramo/did-comm@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/did-comm/-/did-comm-3.1.0.tgz#6f50adb89cdf09da92d4406880d82d1662192490" + integrity sha512-3aVV5nw8Iov+K+V4WrwETxQTbXqTtEOzUJuytMLrHNPLEFAqbcicZ01d3nzlld+EnKqK8rBClVSUbRSVGttYWg== + dependencies: + "@ethersproject/signing-key" "^5.5.0" + "@stablelib/ed25519" "^1.0.2" + "@veramo/core" "^3.1.0" + "@veramo/message-handler" "^3.1.0" + cross-fetch "^3.1.4" + debug "^4.1.1" + did-jwt "5.11.1" + did-resolver "3.1.3" + uint8arrays "3.0.0" + uuid "^8.3.0" + +"@veramo/did-discovery@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/did-discovery/-/did-discovery-3.1.0.tgz#5bd8150c9952ff4dac50e7bd10fdd0ea034268b5" + integrity sha512-L0GCF5eDtqM1kzy1oYoxBAUKWO9xK2TdH1YXHXwm4s8Ece2raUpio6RVQ7gUWlKTieNCGy+8A/nCH0IFSeq+lQ== + dependencies: + "@veramo/core" "^3.1.0" + debug "^4.1.1" + +"@veramo/did-jwt@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/did-jwt/-/did-jwt-3.1.0.tgz#a928187b4b413f98f54f0230c9659bd57226868d" + integrity sha512-YX7hROsnQPG0MLfcYRdM6VrZ7gqNPEGkNEme45bMhtn0hNNneoI8AoaVNv33KlpPZ/1YComjoNMsdw4Vfjqm4g== + dependencies: + "@veramo/core" "^3.1.0" + "@veramo/message-handler" "^3.1.0" + debug "^4.1.1" + did-jwt "5.11.1" + did-resolver "3.1.3" + +"@veramo/did-manager@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/did-manager/-/did-manager-3.1.0.tgz#c8dfe8b3d6f87232c987ae3d2794321aa4837c4a" + integrity sha512-acKy6jjp5MAcbw0MXQ2tEoMIWAMZYvHuPoYPzf3GKw9PsNZFUEzIJVgAgcb1iKv5YnJqihAhxD6675nkIkqiHw== + dependencies: + "@veramo/core" "^3.1.0" + "@veramo/did-discovery" "^3.1.0" + +"@veramo/did-provider-ethr@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/did-provider-ethr/-/did-provider-ethr-3.1.0.tgz#1509948921c3a66e114bad4c401a88d6212d0158" + integrity sha512-UNLWVm4+TM/NwoOBOxxjiiAyc+z/kFMkV2FRUswjjZ2HvHnIfS1I6vLKVMUOWgtpt9XKqqbwKRQaNxSDR3ggKg== + dependencies: + "@ethersproject/abstract-provider" "5.5.1" + "@ethersproject/abstract-signer" "5.5.0" + "@ethersproject/address" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/signing-key" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@veramo/core" "^3.1.0" + "@veramo/did-manager" "^3.1.0" + debug "^4.1.1" + ethr-did "2.1.5" + +"@veramo/did-provider-key@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/did-provider-key/-/did-provider-key-3.1.0.tgz#75e27b12ec53d742c088eb93e9a2081fc11f0f26" + integrity sha512-L4TyKGFXUauYeaNI+K2tqPpnsex+4+xOhiJGGbrYbYumjbJXcWEE9Cf9EvFExG/1QuHXkXM3/CndC9A83fwNBg== + dependencies: + "@transmute/did-key.js" "^0.3.0-unstable" + "@veramo/core" "^3.1.0" + "@veramo/did-manager" "^3.1.0" + debug "^4.1.1" + multibase "^4.0.2" + multicodec "^3.0.0" + +"@veramo/did-provider-web@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/did-provider-web/-/did-provider-web-3.1.0.tgz#37473544a0c399ddd2e4277f5ed0e718e4ceb738" + integrity sha512-EVoQA56/9+9iovQ3e+XzuKKFHDBKTkYnVGzJ4OYdf/Vn1VEM5ShEneH/pFhGzx7N4k/0q3P9ZvazDp83OrRpnA== + dependencies: + "@veramo/core" "^3.1.0" + "@veramo/did-manager" "^3.1.0" + debug "^4.1.1" + +"@veramo/did-resolver@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/did-resolver/-/did-resolver-3.1.0.tgz#3f832ed3d519660c70a29cd1ce75f9427efa65f3" + integrity sha512-yXO3EGDwnf8hVjM1dpqBnvfN3mbRJzzZt79uVW/KMHqycQVodEGm7HOOw4qkSpjmooMZlyXMHLi0eWyyeRC5KQ== + dependencies: + "@veramo/core" "^3.1.0" + cross-fetch "^3.1.4" + debug "^4.1.1" + +"@veramo/key-manager@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/key-manager/-/key-manager-3.1.0.tgz#83dd912198ca07c38d83209e9675ca1f292f9315" + integrity sha512-nP0Ezhe9iV6xjIaz95mrfKOUEeGGXQg+0xzjhVKwdwcDZZSLdrp2BFFyRQHziI/U0hVHdh7AKobg0KfrwDZViw== + dependencies: + "@ethersproject/bytes" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@stablelib/ed25519" "^1.0.2" + "@veramo/core" "^3.1.0" + did-jwt "5.11.1" + uint8arrays "3.0.0" + +"@veramo/message-handler@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/message-handler/-/message-handler-3.1.0.tgz#15d5eb1d8b68537e4e61d838812febcdff4bb4ad" + integrity sha512-OZTQMK7Cq0S8U1DnxwVeGLISkvfA2MRSuEXwZN/XjXVW/2phgpNazthQr4YrFz+qM+yCVB987U25H5+0cDd0UA== + dependencies: + "@veramo/core" "^3.1.0" + +"@veramo/selective-disclosure@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@veramo/selective-disclosure/-/selective-disclosure-3.1.0.tgz#8d30f8c81b70136a22964a8dc309c3d35345abff" + integrity sha512-ahjsraw1C9BMcFNx8hUpvOt9e3nOHYExUXb2yRjtS4WtS91em4m61Db6T432zO/efCwmkAT9kesezEL5vwheWA== + dependencies: + "@veramo/core" "^3.1.0" + "@veramo/credential-w3c" "^3.1.0" + "@veramo/data-store" "^3.1.0" + "@veramo/did-jwt" "^3.1.0" + "@veramo/message-handler" "^3.1.0" + blakejs "^1.1.0" + debug "^4.1.1" + did-jwt "5.11.1" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -2555,6 +3159,11 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -2618,6 +3227,11 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -2652,7 +3266,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2672,6 +3286,18 @@ ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-escape-sequences@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz#2483c8773f50dd9174dd9557e92b1718f1816097" + integrity sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw== + dependencies: + array-back "^3.0.1" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -2684,6 +3310,16 @@ ansi-html-community@^0.0.8: resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2694,7 +3330,12 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-styles@^3.2.1: +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.1.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2713,6 +3354,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -2721,6 +3367,24 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" + integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + arg@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb" @@ -2751,6 +3415,25 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-back@^1.0.3, array-back@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" + integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs= + dependencies: + typical "^2.6.0" + +array-back@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022" + integrity sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw== + dependencies: + typical "^2.6.1" + +array-back@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -2810,6 +3493,25 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +asn1js@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-2.2.0.tgz#d890fcdda86b8a005693df14a986bfb2c2069c57" + integrity sha512-oagLNqpfNv7CvmyMoexMDNyVDSiq1rya0AEUgcLlNHdHgNl6U/hi8xY370n5y+ZIFEXOx0J4B1qF2NDjMRxklA== + dependencies: + pvutils latest + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -2849,6 +3551,16 @@ autoprefixer@^10.4.2: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + axe-core@^4.3.5: version "4.4.0" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.0.tgz#f93be7f81017eb8bedeb1859cc8092cc918d2dc8" @@ -3046,6 +3758,13 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -3056,11 +3775,23 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + bech32@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +bech32@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" + integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== + bfj@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" @@ -3071,6 +3802,11 @@ bfj@^7.0.2: hoopy "^0.1.4" tryer "^1.0.1" +big-integer@^1.6.48: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3090,6 +3826,11 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" +blakejs@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" + integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== + bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -3235,6 +3976,13 @@ bs-logger@0.x: dependencies: fast-json-stable-stringify "2.x" +bs58@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3270,11 +4018,24 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtin-modules@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -3336,11 +4097,32 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001297: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001306.tgz#582592afe243bad2223081b8abab07bf289cc699" integrity sha512-Wd1OuggRzg1rbnM5hv1wXs2VkxJH/AA+LuudlIqvZiCvivF+wJJe2mgBZC8gPMgI7D76PP5CTx8Luvaqc1V6OQ== +canonicalize@^1.0.1, canonicalize@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" + integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== + case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3358,6 +4140,15 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" + integrity sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ== + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -3373,6 +4164,11 @@ charcodes@^0.2.0: resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + check-types@^11.1.1: version "11.1.2" resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" @@ -3393,7 +4189,7 @@ chokidar@^3.4.2, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1: +chownr@^1.1.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -3433,6 +4229,30 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3453,6 +4273,15 @@ clone-deep@^0.2.4: lazy-cache "^1.0.3" shallow-clone "^0.1.2" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3467,6 +4296,11 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -3506,14 +4340,40 @@ colorette@^2.0.10: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== -combined-stream@^1.0.8: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@^2.20.0: +command-line-args@^4.0.2: + version "4.0.7" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-4.0.7.tgz#f8d1916ecb90e9e121eda6428e41300bfb64cc46" + integrity sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA== + dependencies: + array-back "^2.0.0" + find-replace "^1.0.3" + typical "^2.6.1" + +command-line-commands@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/command-line-commands/-/command-line-commands-2.0.1.tgz#c58aa13dc78c06038ed67077e57ad09a6f858f46" + integrity sha512-m8c2p1DrNd2ruIAggxd/y6DgygQayf6r8RHwchhXryaLF8I6koYjoYroVP+emeROE9DXN5b9sP1Gh+WtvTTdtQ== + dependencies: + array-back "^2.0.0" + +command-line-usage@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-4.1.0.tgz#a6b3b2e2703b4dcf8bd46ae19e118a9a52972882" + integrity sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g== + dependencies: + ansi-escape-sequences "^4.0.0" + array-back "^2.0.0" + table-layout "^0.4.2" + typical "^2.6.1" + +commander@^2.20.0, commander@^2.7.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -3583,6 +4443,11 @@ connect-history-api-fallback@^1.6.0: resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + content-disposition@0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -3630,6 +4495,11 @@ core-js@^3.19.2: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.0.tgz#f479dbfc3dffb035a0827602dd056839a774aa71" integrity sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -3688,7 +4558,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-fetch@3.1.5, cross-fetch@^3.1.2: +cross-fetch@3.1.5, cross-fetch@^3.1.2, cross-fetch@^3.1.4: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== @@ -3931,6 +4801,13 @@ damerau-levenshtein@^1.0.7: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -3947,14 +4824,14 @@ debug@2.6.9, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.3, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: +debug@4, debug@4.3.3, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" -debug@^3.1.1, debug@^3.2.7: +debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -3983,6 +4860,11 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-extend@^0.6.0, deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -4036,6 +4918,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -4054,6 +4941,11 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -4086,7 +4978,56 @@ devtools-protocol@0.0.960912: resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.960912.tgz#411c1fa355eddb72f06c4a8743f2808766db6245" integrity sha512-I3hWmV9rWHbdnUdmMKHF2NuYutIM2kXz2mdXW8ha7TbRlGTVs+PF+PsB5QWvpCek4Fy9B+msiispCfwlhG5Sqg== -did-resolver@3.1.5, did-resolver@^3.1.5: +did-jwt-vc@2.1.7: + version "2.1.7" + resolved "https://registry.yarnpkg.com/did-jwt-vc/-/did-jwt-vc-2.1.7.tgz#c9bf69cdf86f3e46db30344eb5d1e6cbada9164b" + integrity sha512-MSuoy2yVRqlF4viGjtUzDmFBfxercwgUwIY+rs3swnyU7RmeZ5Iwp5TBhStIy3ro+BIQEPtXtp1xlcbATJW1iA== + dependencies: + did-jwt "^5.7.0" + did-resolver "^3.1.0" + +did-jwt@5.11.1: + version "5.11.1" + resolved "https://registry.yarnpkg.com/did-jwt/-/did-jwt-5.11.1.tgz#d7202dc1bfe067e2b3f7378b2346aee5ced9c9ea" + integrity sha512-2ObDArhxUP/hgkc1j/yelP8z4hOSUC3vnepUvpcwMXxYLYgiyR0BkidCmYmj3Mgj4BS/5cYhLBFlpaaQt4kAFA== + dependencies: + "@stablelib/ed25519" "^1.0.2" + "@stablelib/random" "^1.0.1" + "@stablelib/sha256" "^1.0.1" + "@stablelib/x25519" "^1.0.1" + "@stablelib/xchacha20poly1305" "^1.0.1" + bech32 "^2.0.0" + canonicalize "^1.0.5" + did-resolver "^3.1.3" + elliptic "^6.5.4" + js-sha3 "^0.8.0" + multiformats "^9.4.10" + uint8arrays "^3.0.0" + +did-jwt@^5.11.1, did-jwt@^5.7.0: + version "5.12.4" + resolved "https://registry.yarnpkg.com/did-jwt/-/did-jwt-5.12.4.tgz#6357a550173b7155f2e5cf3b8ea3f8e8be180617" + integrity sha512-rFY7yIlE/79zB648Drn9vLiM+F4+3IzRkFvBcHelZqQmnPy037U9VWeeP/f2PlnQKgW5qbYXVJR5KftLfo58TA== + dependencies: + "@stablelib/ed25519" "^1.0.2" + "@stablelib/random" "^1.0.1" + "@stablelib/sha256" "^1.0.1" + "@stablelib/x25519" "^1.0.1" + "@stablelib/xchacha20poly1305" "^1.0.1" + bech32 "^2.0.0" + canonicalize "^1.0.5" + did-resolver "^3.1.5" + elliptic "^6.5.4" + js-sha3 "^0.8.0" + multiformats "^9.4.10" + uint8arrays "^3.0.0" + +did-resolver@3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-3.1.3.tgz#ed530c9daa2c9925f85e9eabf258e51960db7e70" + integrity sha512-ab8y90tSiDkTdfddXRC9Qcb1QSd568aC6+OgFTrcE4rs1vQAZOil+VqXHDu+Ff/UvhxlckPO8oJtp86iICZG0w== + +did-resolver@3.1.5, did-resolver@^3.1.0, did-resolver@^3.1.3, did-resolver@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-3.1.5.tgz#1a82a00fa96d64085676183bff40ebc13c88cd6a" integrity sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg== @@ -4244,11 +5185,24 @@ dotenv@^10.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^8.2.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -4266,7 +5220,7 @@ electron-to-chromium@^1.4.17: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.63.tgz#866db72d1221fda89419dc22669d03833e11625d" integrity sha512-e0PX/LRJPFRU4kzJKLvTobxyFdnANCvcoDCe8XcyTqP58nTWIwdsHvXLIl1RkB39X5yaosLaroMASWB0oIsgCA== -elliptic@6.5.4, elliptic@^6.5.3: +elliptic@6.5.4, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -4388,7 +5342,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -4678,7 +5632,7 @@ ethr-did-registry@^0.0.3: resolved "https://registry.yarnpkg.com/ethr-did-registry/-/ethr-did-registry-0.0.3.tgz#f363d2c73cb9572b57bd7a5c9c90c88485feceb5" integrity sha512-4BPvMGkxAK9vTduCq6D5b8ZqjteD2cvDIPPriXP6nnmPhWKFSxypo+AFvyQ0omJGa0cGTR+dkdI/8jiF7U/qaw== -ethr-did-resolver@5.0.4: +ethr-did-resolver@5.0.4, ethr-did-resolver@^5.0.2: version "5.0.4" resolved "https://registry.yarnpkg.com/ethr-did-resolver/-/ethr-did-resolver-5.0.4.tgz#a5c09465ee2b1cf752e49f09673bc44567bd8c59" integrity sha512-eccHUIS207ymuxjAjFWu7jDeKKd1Sk+GDiKL3T0IpQRXwemkh6k9V2pQah9uQ7tS8sxZ8mKT7SeWXDmM6Uf/UQ== @@ -4694,6 +5648,24 @@ ethr-did-resolver@5.0.4: did-resolver "^3.1.5" ethr-did-registry "^0.0.3" +ethr-did@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/ethr-did/-/ethr-did-2.1.5.tgz#b8d0d2cae43edfb8bbb87ec2892dfe85a19d77a1" + integrity sha512-Q9CWn3iKm9zACPspUWq0CyJNagYx39ZVwjv4x/2+XwwG9fvpfPvJKFL016qe8SRHyE+3GuGKDP1X4HZxlChtGw== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/base64" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/providers" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wallet" "^5.5.0" + did-jwt "^5.11.1" + did-resolver "^3.1.3" + ethr-did-resolver "^5.0.2" + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -4800,6 +5772,20 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + extract-zip@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -4811,6 +5797,24 @@ extract-zip@2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +factory.ts@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/factory.ts/-/factory.ts-0.5.2.tgz#1ab69b9ec75efc9d72977557794fe8e0cc7f846d" + integrity sha512-I4YDKuyMW+s2PocnWh/Ekv9wSStt/MNN1ZRb1qhy0Kv056ndlzbLHDsW9KEmTAqMpLI3BtjSqEdZ7ZfdnaXn9w== + dependencies: + clone-deep "^4.0.1" + source-map-support "^0.5.19" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -4865,6 +5869,18 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +figlet@^1.1.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" + integrity sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -4945,6 +5961,14 @@ find-process@^1.4.7: commander "^5.1.0" debug "^4.1.1" +find-replace@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" + integrity sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A= + dependencies: + array-back "^1.0.4" + test-value "^2.1.0" + find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -5010,6 +6034,11 @@ for-own@^0.1.3: dependencies: for-in "^1.0.1" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.0" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz#0282b335fa495a97e167f69018f566ea7d2a2b5e" @@ -5038,6 +6067,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -5082,6 +6120,13 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^2.0.0" +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-monkey@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" @@ -5107,6 +6152,20 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -5156,6 +6215,20 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-config@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/git-config/-/git-config-0.0.7.tgz#a9c8a3ef07a776c3d72261356d8b727b62202b28" + integrity sha1-qcij7wendsPXImE1bYtye2IgKyg= + dependencies: + iniparser "~1.0.5" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -5262,16 +6335,53 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== +handlebars@^4.1.0: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + harmony-reflect@^1.4.6: version "1.6.2" resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -5294,6 +6404,11 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -5323,6 +6438,11 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -5465,6 +6585,15 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -5478,7 +6607,7 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5509,11 +6638,18 @@ identity-obj-proxy@^3.0.0: dependencies: harmony-reflect "^1.4.6" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore-walk@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + dependencies: + minimatch "^3.0.4" + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -5573,11 +6709,36 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +iniparser@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/iniparser/-/iniparser-1.0.5.tgz#836d6befe6dfbfcee0bccf1cf9f2acc7027f783d" + integrity sha1-g21r7+bfv87gvM8c+fKsxwJ/eD0= + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -5676,6 +6837,18 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -5735,7 +6908,7 @@ is-plain-obj@^3.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== -is-plain-object@^2.0.1: +is-plain-object@^2.0.1, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -5789,7 +6962,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@^1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -5828,6 +7001,11 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -6760,7 +7938,7 @@ joi@^17.4.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -js-sha3@0.8.0: +js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== @@ -6778,13 +7956,18 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: +js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + jsdom@^16.6.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -6848,7 +8031,7 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@^0.4.0: +json-schema@0.4.0, json-schema@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== @@ -6858,6 +8041,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + json5@2.x, json5@^2.1.2, json5@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -6881,11 +8069,42 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonld-checker@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/jsonld-checker/-/jsonld-checker-0.1.7.tgz#2c010f14f5a577e2647eb9caa79007ae60f5c310" + integrity sha512-AFBFjRttHzB5Q78SATl5Qhc3hQEnmiEqLuUIpfVx8bn5ODhO1M0IiV9PRPUMe6IZjedGWOZEmzieNIBs88EDVg== + dependencies: + jsonld "^3.1.1" + node-fetch "^2.6.1" + +jsonld@^3.1.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-3.3.2.tgz#f8688b349385ff5c755e83c7f60a9cf834078fc0" + integrity sha512-DXqG/fdiG7eJ8FzvSd58bW8DQsulQR/gjLYUz9PxBP/WTTpB2HzjjdxSAx5aBHewJ0RiFAV/QcqGCJjxHvuIzw== + 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" + jsonpointer@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072" integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg== +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" @@ -7039,6 +8258,16 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -7049,6 +8278,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.padend@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -7059,7 +8293,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.3.0, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7078,6 +8312,13 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -7192,7 +8433,7 @@ mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.34" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== @@ -7204,6 +8445,11 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -7238,6 +8484,21 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + mixin-object@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" @@ -7251,13 +8512,18 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -7273,6 +8539,13 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multibase@^4.0.2: + version "4.0.6" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-4.0.6.tgz#6e624341483d6123ca1ede956208cb821b440559" + integrity sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ== + dependencies: + "@multiformats/base-x" "^4.0.1" + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -7286,6 +8559,33 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +multicodec@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-3.2.1.tgz#82de3254a0fb163a107c1aab324f2a91ef51efb2" + integrity sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw== + dependencies: + uint8arrays "^3.0.0" + varint "^6.0.0" + +multiformats@^9.4.10, multiformats@^9.4.2: + version "9.6.4" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.6.4.tgz#5dce1f11a407dbb69aa612cb7e5076069bb759ca" + integrity sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nanoid@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" @@ -7296,16 +8596,47 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +needle@^2.2.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.2: +neo-async@^2.6.0, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +neon-cli@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/neon-cli/-/neon-cli-0.4.0.tgz#d89e0a55b8db577324af70470e2b4e67157205f6" + integrity sha512-66HhHb8rk+zHSG64CI6jhyOQqpibBAald8ObdQPCjXcCjzSEVnkQHutUE8dyNlHRNT7xLfrZGkDbtwrYh2p+6w== + dependencies: + chalk "~2.1.0" + command-line-args "^4.0.2" + command-line-commands "^2.0.0" + command-line-usage "^4.0.0" + git-config "0.0.7" + handlebars "^4.1.0" + inquirer "^3.0.6" + mkdirp "^0.5.1" + quickly-copy-file "^1.0.0" + rimraf "^2.6.1" + rsvp "^4.6.1" + semver "^5.1.0" + toml "^2.3.0" + ts-typed-json "^0.2.2" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -7314,7 +8645,12 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@2.6.7: +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-fetch@2.6.7, node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -7326,16 +8662,45 @@ node-forge@^1.2.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.2.1.tgz#82794919071ef2eb5c509293325cec8afd0fd53c" integrity sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w== +node-gyp-build@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= +node-pre-gyp@0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + node-releases@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -7351,6 +8716,27 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +npm-bundled@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -7358,6 +8744,16 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -7372,12 +8768,22 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -object-assign@^4.1.1: +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -7424,7 +8830,7 @@ object.entries@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -object.fromentries@^2.0.5: +object.fromentries@^2.0.2, object.fromentries@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== @@ -7483,6 +8889,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -7523,11 +8936,24 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -os-homedir@^1.0.1: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -7617,6 +9043,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parent-require@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" + integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc= + parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" @@ -7643,11 +9074,23 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= -parse5@6.0.1: +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@6.0.1, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -8372,7 +9815,7 @@ proxy-from-env@1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -psl@^1.1.33: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -8420,6 +9863,18 @@ puppeteer@13.4.1: unbzip2-stream "1.4.3" ws "8.5.0" +pvtsutils@^1.2.0, pvtsutils@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.2.2.tgz#62ef6bc0513cbc255ee02574dedeaa41272d6101" + integrity sha512-OALo5ZEdqiI127i64+CXwkCOyFHUA+tCQgaUO/MvRDFXWPr53f2sx28ECNztUEzuyu5xvuuD1EB/szg9mwJoGA== + dependencies: + tslib "^2.3.1" + +pvutils@latest: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.2.tgz#8d046cabeb81040d430744b0e76f4b2970c9e81f" + integrity sha512-wlo0BUInyP+ZgBJHV8PnJW8S2HubdQfMMip8B9yXr9aFlauJFuF1jZ/RWFmzGYitC7GxkxqXdwbY9/R97v+Cqg== + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -8430,6 +9885,11 @@ qs@6.9.6: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -8440,6 +9900,13 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +quickly-copy-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/quickly-copy-file/-/quickly-copy-file-1.0.0.tgz#9f8ff066230510ee7422b0121472b093a8690859" + integrity sha1-n4/wZiMFEO50IrASFHKwk6hpCFk= + dependencies: + mkdirp "~0.5.0" + raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -8477,6 +9944,24 @@ raw-body@2.4.2: iconv-lite "0.4.24" unpipe "1.0.0" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +rdf-canonize@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-2.0.1.tgz#12c9b8b41570cd669d9b152c9e679063478ba194" + integrity sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA== + dependencies: + semver "^6.3.0" + setimmediate "^1.0.5" + react-app-polyfill@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7" @@ -8611,7 +10096,7 @@ react@17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -readable-stream@^2.0.1: +readable-stream@^2.0.1, readable-stream@^2.0.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -8647,6 +10132,16 @@ recursive-readdir@^2.2.2: dependencies: minimatch "3.0.4" +reduce-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327" + integrity sha1-JYx479FT3fk8tWEjf2EYTzaW4yc= + +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + regenerate-unicode-properties@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" @@ -8729,6 +10224,32 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + 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" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -8802,6 +10323,14 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -8812,6 +10341,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfc4648@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/rfc4648/-/rfc4648-1.4.0.tgz#c75b2856ad2e2d588b6ddb985d556f1f7f2a2abd" + integrity sha512-3qIzGhHlMHA6PoT6+cdPKZ+ZqtxkIvg8DZGKA5z6PQ33/uuhoJ+Ws/D/J9rXW6gXodgH8QYlz2UCl+sdUDmNIg== + rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -8819,6 +10353,13 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -8844,6 +10385,21 @@ rollup@^2.43.1: optionalDependencies: fsevents "~2.3.2" +rsvp@^3.5.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== + +rsvp@^4.6.1: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8851,6 +10407,18 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + rxjs@^7.1.0: version "7.5.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.2.tgz#11e4a3a1dfad85dbf7fb6e33cbba17668497490b" @@ -8863,12 +10431,12 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -8886,7 +10454,7 @@ sass-loader@^12.3.0: klona "^2.0.4" neo-async "^2.6.2" -sax@~1.2.4: +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -8943,6 +10511,20 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -8967,6 +10549,11 @@ semver@7.x, semver@^7.3.2, semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^5.1.0, semver@^5.3.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -9028,6 +10615,16 @@ serve-static@1.14.2: parseurl "~1.3.3" send "0.17.2" +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -9038,7 +10635,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -9056,6 +10653,13 @@ shallow-clone@^0.1.2: lazy-cache "^0.2.3" mixin-object "^2.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -9082,6 +10686,11 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +signal-exit@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" @@ -9130,7 +10739,7 @@ source-map-loader@^3.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.1" -source-map-support@^0.5.6, source-map-support@~0.5.20: +source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -9179,6 +10788,32 @@ spawnd@^6.0.2: signal-exit "^3.0.6" tree-kill "^1.2.2" +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -9207,6 +10842,21 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + 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" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -9250,7 +10900,16 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -string-width@^4.1.0, string-width@^4.2.0: +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9259,6 +10918,14 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string.prototype.matchall@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" @@ -9312,6 +10979,20 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -9351,6 +11032,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + style-loader@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" @@ -9364,6 +11050,18 @@ stylehacks@^5.0.2: browserslist "^4.16.6" postcss-selector-parser "^6.0.4" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -9440,6 +11138,17 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +table-layout@^0.4.2: + version "0.4.5" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.4.5.tgz#d906de6a25fa09c0c90d1d08ecd833ecedcb7378" + integrity sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw== + dependencies: + array-back "^2.0.0" + deep-extend "~0.6.0" + lodash.padend "^4.6.1" + typical "^2.6.1" + wordwrapjs "^3.0.0" + tailwindcss@^3.0.2: version "3.0.18" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.0.18.tgz#ea4825e6496d77dc21877b6b61c7cc56cda3add5" @@ -9497,6 +11206,19 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +tar@^4.4.2: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + temp-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" @@ -9549,17 +11271,39 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" +test-value@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" + integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE= + dependencies: + array-back "^1.0.3" + typical "^2.6.0" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + throat@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== -through@^2.3.8: +through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -9574,6 +11318,13 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9596,6 +11347,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +toml@^2.3.0: + version "2.3.6" + resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.6.tgz#25b0866483a9722474895559088b436fd11f861b" + integrity sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ== + tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -9605,6 +11361,14 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -9648,6 +11412,13 @@ ts-jest@27.1.3: semver "7.x" yargs-parser "20.x" +ts-typed-json@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/ts-typed-json/-/ts-typed-json-0.2.2.tgz#53184bee893e45991b73c8c463a38b59e27cd47e" + integrity sha1-UxhL7ok+RZkbc8jEY6OLWeJ81H4= + dependencies: + rsvp "^3.5.0" + tsconfig-paths@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" @@ -9663,7 +11434,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== @@ -9675,6 +11446,18 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -9724,11 +11507,74 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typeorm@0.2.38: + version "0.2.38" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.38.tgz#2af08079919f6ab04cd17017f9faa2c8d5cd566f" + integrity sha512-M6Y3KQcAREQcphOVJciywf4mv6+A0I/SeR+lWNjKsjnQ+a3XcMwGYMGL0Jonsx3H0Cqlf/3yYqVki1jIXSK/xg== + dependencies: + "@sqltools/formatter" "^1.2.2" + app-root-path "^3.0.0" + buffer "^6.0.3" + chalk "^4.1.0" + cli-highlight "^2.1.11" + debug "^4.3.1" + dotenv "^8.2.0" + glob "^7.1.6" + js-yaml "^4.0.0" + mkdirp "^1.0.4" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.1.0" + xml2js "^0.4.23" + yargonaut "^1.1.4" + yargs "^17.0.1" + zen-observable-ts "^1.0.0" + +typeorm@^0.2.44: + version "0.2.44" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.44.tgz#4cc07eb1eb7a0e7f3ec9e65ded9eb3c3aedbb3e1" + integrity sha512-yFyb9Ts73vGaS/O06TvLpzvT5U/ngO31GeciNc0eoH7P1QcG8kVZdOy9FHJqkTeDmIljMRgWjbYUoMw53ZY7Xw== + dependencies: + "@sqltools/formatter" "^1.2.2" + app-root-path "^3.0.0" + buffer "^6.0.3" + chalk "^4.1.0" + cli-highlight "^2.1.11" + debug "^4.3.1" + dotenv "^8.2.0" + glob "^7.1.6" + js-yaml "^4.0.0" + mkdirp "^1.0.4" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.1.0" + uuid "^8.3.2" + xml2js "^0.4.23" + yargs "^17.0.1" + zen-observable-ts "^1.0.0" + typescript@4.5.5: version "4.5.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== +typical@^2.6.0, typical@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" + integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= + +uglify-js@^3.1.4: + version "3.15.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.1.tgz#9403dc6fa5695a6172a91bc983ea39f0f7c9086d" + integrity sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ== + +uint8arrays@3.0.0, uint8arrays@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.0.0.tgz#260869efb8422418b6f04e3fac73a3908175c63b" + integrity sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA== + dependencies: + multiformats "^9.4.2" + unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" @@ -9834,7 +11680,12 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^8.3.2: +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -9853,11 +11704,45 @@ v8-to-istanbul@^8.1.0: convert-source-map "^1.6.0" source-map "^0.7.3" +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +validator@^13.7.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -9918,6 +11803,17 @@ web-vitals@2.1.4: resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c" integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg== +webcrypto-core@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.4.0.tgz#9a395920792bcfa4605dc64aaf264156f79e873e" + integrity sha512-HY3Zo0GcRIQUUDnlZ/shGjN+4f7LVMkdJZoGPog+oHhJsJdMz6iM8Za5xZ0t6qg7Fx/JXXz+oBv2J2p982hGTQ== + dependencies: + "@peculiar/asn1-schema" "^2.0.44" + "@peculiar/json-schema" "^1.1.12" + asn1js "^2.1.1" + pvtsutils "^1.2.0" + tslib "^2.3.1" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -10126,11 +12022,31 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wordwrapjs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-3.0.0.tgz#c94c372894cadc6feb1a66bff64e1d9af92c5d1e" + integrity sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw== + dependencies: + reduce-flatten "^1.0.1" + typical "^2.6.1" + workbox-background-sync@6.4.2: version "6.4.2" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz#bb31b95928d376abcb9bde0de3a0cef9bae46cf7" @@ -10351,11 +12267,29 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@^0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xmldom@0.1.19: + version "0.1.19" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" + integrity sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw= + xtend@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -10366,6 +12300,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -10376,12 +12315,26 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yargonaut@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" + integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA== + dependencies: + chalk "^1.1.1" + figlet "^1.1.1" + parent-require "^1.0.0" + yargs-parser@20.x, yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^16.2.0: +yargs-parser@^21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" + integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== + +yargs@^16.0.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -10394,6 +12347,19 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.0.1: + version "17.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" + integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== + dependencies: + cliui "^7.0.2" + 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.0.0" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -10406,3 +12372,27 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +z-schema@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-5.0.2.tgz#f410394b2c9fcb9edaf6a7511491c0bb4e89a504" + integrity sha512-40TH47ukMHq5HrzkeVE40Ad7eIDKaRV2b+Qpi2prLc9X9eFJFzV7tMe5aH12e6avaSS/u5l653EQOv+J9PirPw== + dependencies: + lodash.get "^4.4.2" + lodash.isequal "^4.5.0" + validator "^13.7.0" + optionalDependencies: + commander "^2.7.1" + +zen-observable-ts@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" + integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA== + dependencies: + "@types/zen-observable" "0.8.3" + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== diff --git a/__tests__/initial.migration.test.ts b/__tests__/initial.migration.test.ts index 7f6710248..a90c03674 100644 --- a/__tests__/initial.migration.test.ts +++ b/__tests__/initial.migration.test.ts @@ -6,6 +6,7 @@ import { createAgent, IDataStore, + IDataStoreORM, IDIDManager, IKeyManager, IResolver, @@ -23,7 +24,6 @@ import { DataStoreORM, DIDStore, Entities, - IDataStoreORM, KeyStore, migrations, PrivateKeyStore, @@ -83,7 +83,7 @@ describe('database initial migration tests', () => { agent = createAgent({ context: { - // authenticatedDid: 'did:example:3456' + // authorizedDID: 'did:example:3456' }, plugins: [ new KeyManager({ diff --git a/__tests__/localAgent.test.ts b/__tests__/localAgent.test.ts index 05ef4da1b..67bd29275 100644 --- a/__tests__/localAgent.test.ts +++ b/__tests__/localAgent.test.ts @@ -9,6 +9,7 @@ import { createAgent, IAgentOptions, IDataStore, + IDataStoreORM, IDIDManager, IKeyManager, IMessageHandler, @@ -45,7 +46,6 @@ import { DataStoreORM, DIDStore, Entities, - IDataStoreORM, KeyStore, migrations, PrivateKeyStore, @@ -130,7 +130,7 @@ const setup = async (options?: IAgentOptions): Promise => { >({ ...options, context: { - // authenticatedDid: 'did:example:3456' + // authorizedDID: 'did:example:3456' }, plugins: [ new KeyManager({ diff --git a/__tests__/localJsonStoreAgent.test.ts b/__tests__/localJsonStoreAgent.test.ts new file mode 100644 index 000000000..f1f82391f --- /dev/null +++ b/__tests__/localJsonStoreAgent.test.ts @@ -0,0 +1,215 @@ +// noinspection ES6PreferShortImport + +/** + * This runs a suite of ./shared tests using an agent configured for local operations, + * using a JSON db for storage of credentials and an in-memory store for keys and DIDs. + * + */ +import { + createAgent, + IAgentOptions, + IDataStore, + IDataStoreORM, + IDIDManager, + IKeyManager, + IMessageHandler, + IResolver, + TAgent, +} from '../packages/core/src' +import { MessageHandler } from '../packages/message-handler/src' +import { KeyManager } from '../packages/key-manager/src' +import { DIDManager } from '../packages/did-manager/src' +import { DIDResolverPlugin } from '../packages/did-resolver/src' +import { JwtMessageHandler } from '../packages/did-jwt/src' +import { CredentialIssuer, ICredentialIssuer, W3cMessageHandler } from '../packages/credential-w3c/src' +import { + CredentialIssuerLD, + ICredentialIssuerLD, + LdDefaultContexts, + VeramoEcdsaSecp256k1RecoverySignature2020, + VeramoEd25519Signature2018, +} from '../packages/credential-ld/src' +import { EthrDIDProvider } from '../packages/did-provider-ethr/src' +import { WebDIDProvider } from '../packages/did-provider-web/src' +import { getDidKeyResolver, KeyDIDProvider } from '../packages/did-provider-key/src' +import { DIDComm, DIDCommMessageHandler, IDIDComm } from '../packages/did-comm/src' +import { + ISelectiveDisclosure, + SdrMessageHandler, + SelectiveDisclosure, +} from '../packages/selective-disclosure/src' +import { KeyManagementSystem, SecretBox } from '../packages/kms-local/src' +import { + DataStoreJson, + DIDStoreJson, + KeyStoreJson, + PrivateKeyStoreJson, +} from '../packages/data-store-json/src' +import { FakeDidProvider, FakeDidResolver } from './utils/fake-did' + +import { Resolver } from 'did-resolver' +import { getResolver as ethrDidResolver } from 'ethr-did-resolver' +import { getResolver as webDidResolver } from 'web-did-resolver' +import { contexts as credential_contexts } from '@transmute/credentials-context' +import * as fs from 'fs' + +// Shared tests +import verifiableDataJWT from './shared/verifiableDataJWT' +import verifiableDataLD from './shared/verifiableDataLD' +import handleSdrMessage from './shared/handleSdrMessage' +import resolveDid from './shared/resolveDid' +import webDidFlow from './shared/webDidFlow' +import saveClaims from './shared/saveClaims' +import documentationExamples from './shared/documentationExamples' +import keyManager from './shared/keyManager' +import didManager from './shared/didManager' +import didCommPacking from './shared/didCommPacking' +import messageHandler from './shared/messageHandler' +import { JsonFileStore } from './utils/json-file-store' + +jest.setTimeout(30000) + +const infuraProjectId = '3586660d179141e3801c3895de1c2eba' +const secretKey = '29739248cad1bd1a0fc4d9b75cd4d2990de535baf5caadfdf8d8f86664aa830c' + +let agent: TAgent< + IDIDManager & + IKeyManager & + IDataStore & + IDataStoreORM & + IResolver & + IMessageHandler & + IDIDComm & + ICredentialIssuer & + ICredentialIssuerLD & + ISelectiveDisclosure +> + +let databaseFile: string + +const setup = async (options?: IAgentOptions): Promise => { + // This test suite uses a plain JSON file for storage for each agent created. + // It is important that the same object be used for `DIDStoreJson`/`KeyStoreJson` + // and `DataStoreJson` if you want to use all the query capabilities of `DataStoreJson` + databaseFile = options?.context?.databaseFile || `./tmp/local-database-${Math.random().toPrecision(5)}.json` + + const jsonFileStore = await JsonFileStore.fromFile(databaseFile) + + agent = createAgent< + IDIDManager & + IKeyManager & + IDataStore & + IDataStoreORM & + IResolver & + IMessageHandler & + IDIDComm & + ICredentialIssuer & + ICredentialIssuerLD & + ISelectiveDisclosure + >({ + ...options, + context: { + // authorizedDID: 'did:example:3456' + }, + plugins: [ + new KeyManager({ + store: new KeyStoreJson(jsonFileStore), + kms: { + local: new KeyManagementSystem(new PrivateKeyStoreJson(jsonFileStore, new SecretBox(secretKey))), + }, + }), + new DIDManager({ + store: new DIDStoreJson(jsonFileStore), + defaultProvider: 'did:ethr:rinkeby', + providers: { + 'did:ethr': new EthrDIDProvider({ + defaultKms: 'local', + network: 'mainnet', + rpcUrl: 'https://mainnet.infura.io/v3/' + infuraProjectId, + gas: 1000001, + ttl: 60 * 60 * 24 * 30 * 12 + 1, + }), + 'did:ethr:rinkeby': new EthrDIDProvider({ + defaultKms: 'local', + network: 'rinkeby', + rpcUrl: 'https://rinkeby.infura.io/v3/' + infuraProjectId, + gas: 1000001, + ttl: 60 * 60 * 24 * 30 * 12 + 1, + }), + 'did:ethr:421611': new EthrDIDProvider({ + defaultKms: 'local', + network: 421611, + rpcUrl: 'https://arbitrum-rinkeby.infura.io/v3/' + infuraProjectId, + registry: '0x8f54f62CA28D481c3C30b1914b52ef935C1dF820', + }), + 'did:web': new WebDIDProvider({ + defaultKms: 'local', + }), + 'did:key': new KeyDIDProvider({ + defaultKms: 'local', + }), + 'did:fake': new FakeDidProvider(), + }, + }), + new DIDResolverPlugin({ + resolver: new Resolver({ + ...ethrDidResolver({ infuraProjectId }), + ...webDidResolver(), + ...getDidKeyResolver(), + ...new FakeDidResolver(() => agent).getDidFakeResolver(), + }), + }), + new DataStoreJson(jsonFileStore), + new MessageHandler({ + messageHandlers: [ + new DIDCommMessageHandler(), + new JwtMessageHandler(), + new W3cMessageHandler(), + new SdrMessageHandler(), + ], + }), + new DIDComm(), + new CredentialIssuer(), + new CredentialIssuerLD({ + contextMaps: [LdDefaultContexts, credential_contexts as any], + suites: [new VeramoEcdsaSecp256k1RecoverySignature2020(), new VeramoEd25519Signature2018()], + }), + new SelectiveDisclosure(), + ...(options?.plugins || []), + ], + }) + return true +} + +const tearDown = async (): Promise => { + try { + // await (await dbConnection).dropDatabase() + // await (await dbConnection).close() + } catch (e) { + // nop + } + try { + fs.unlinkSync(databaseFile) + } catch (e) { + //nop + } + return true +} + +const getAgent = () => agent + +const testContext = { getAgent, setup, tearDown } + +describe('Local json-data-store integration tests', () => { + verifiableDataJWT(testContext) + verifiableDataLD(testContext) + handleSdrMessage(testContext) + resolveDid(testContext) + webDidFlow(testContext) + saveClaims(testContext) + documentationExamples(testContext) + keyManager(testContext) + didManager(testContext) + messageHandler(testContext) + didCommPacking(testContext) +}) diff --git a/__tests__/localMemoryStoreAgent.test.ts b/__tests__/localMemoryStoreAgent.test.ts index 0c4684da4..9b5521831 100644 --- a/__tests__/localMemoryStoreAgent.test.ts +++ b/__tests__/localMemoryStoreAgent.test.ts @@ -7,6 +7,7 @@ import { createAgent, IAgentOptions, IDataStore, + IDataStoreORM, IDIDManager, IKeyManager, IMessageHandler, @@ -37,7 +38,7 @@ import { SelectiveDisclosure, } from '../packages/selective-disclosure/src' import { KeyManagementSystem } from '../packages/kms-local/src' -import { DataStore, DataStoreORM, Entities, IDataStoreORM, migrations } from '../packages/data-store/src' +import { DataStore, DataStoreORM, Entities, migrations } from '../packages/data-store/src' import { FakeDidProvider, FakeDidResolver } from './utils/fake-did' import { Resolver } from 'did-resolver' @@ -103,7 +104,7 @@ const setup = async (options?: IAgentOptions): Promise => { >({ ...options, context: { - // authenticatedDid: 'did:example:3456' + // authorizedDID: 'did:example:3456' }, plugins: [ new KeyManager({ diff --git a/__tests__/restAgent.test.ts b/__tests__/restAgent.test.ts index 93eaefbc8..2b9e448c0 100644 --- a/__tests__/restAgent.test.ts +++ b/__tests__/restAgent.test.ts @@ -12,6 +12,7 @@ import { IAgent, IAgentOptions, IDataStore, + IDataStoreORM, IDIDManager, IKeyManager, IMessageHandler, @@ -46,7 +47,6 @@ import { DataStoreORM, DIDStore, Entities, - IDataStoreORM, KeyStore, migrations, PrivateKeyStore, diff --git a/__tests__/shared/dbInitOptions.ts b/__tests__/shared/dbInitOptions.ts index b289f4f60..6d5b3ecdf 100644 --- a/__tests__/shared/dbInitOptions.ts +++ b/__tests__/shared/dbInitOptions.ts @@ -1,6 +1,7 @@ import { IAgentOptions, IDataStore, + IDataStoreORM, IDIDManager, IIdentifier, IKey, @@ -8,9 +9,8 @@ import { IMessageHandler, IResolver, TAgent, -} from '@veramo/core/src' -import { IDataStoreORM } from '@veramo/data-store/src' -import { ICredentialIssuer } from '@veramo/credential-w3c/src' +} from '../../packages/core/src' +import { ICredentialIssuer } from '../../packages/credential-w3c/src' import { IDIDComm, IPackedDIDCommMessage } from '../../packages/did-comm/src' import { extractIssuer } from '../../packages/utils' diff --git a/__tests__/shared/didDiscovery.ts b/__tests__/shared/didDiscovery.ts index 3728d7b3f..3e781ec85 100644 --- a/__tests__/shared/didDiscovery.ts +++ b/__tests__/shared/didDiscovery.ts @@ -1,6 +1,5 @@ import { IDIDDiscovery } from '../../packages/did-discovery/src' -import { IAgentOptions, IDIDManager, TAgent } from '../../packages/core/src' -import { IDataStoreORM } from '../../packages/data-store/src' +import { IAgentOptions, IDataStoreORM, IDIDManager, TAgent } from '../../packages/core/src' import { ICredentialIssuer } from '../../packages/credential-w3c/src' import { getConnection } from 'typeorm' diff --git a/__tests__/shared/documentationExamples.ts b/__tests__/shared/documentationExamples.ts index 2f046df06..5d51112e0 100644 --- a/__tests__/shared/documentationExamples.ts +++ b/__tests__/shared/documentationExamples.ts @@ -5,10 +5,9 @@ * To document a new package, add it to docsconfig.json array and have it processed with `extract-api` or `generate-plugin-schema`. */ -import { IDataStore, IDIDManager, IMessageHandler, TAgent } from '../../packages/core/src' +import { IDataStore, IDataStoreORM, IDIDManager, IMessageHandler, TAgent } from '../../packages/core/src' import { ICredentialIssuer } from '../../packages/credential-w3c/src' import { ISelectiveDisclosure } from '../../packages/selective-disclosure/src' -import { IDataStoreORM } from '../../packages/data-store/src' type ConfiguredAgent = TAgent< IDIDManager & ICredentialIssuer & IDataStoreORM & IDataStore & IMessageHandler & ISelectiveDisclosure diff --git a/__tests__/shared/handleSdrMessage.ts b/__tests__/shared/handleSdrMessage.ts index 78653b0ea..00fcf9ef5 100644 --- a/__tests__/shared/handleSdrMessage.ts +++ b/__tests__/shared/handleSdrMessage.ts @@ -1,7 +1,13 @@ -import { IDataStore, IDIDManager, IIdentifier, IMessageHandler, TAgent } from '../../packages/core/src' +import { + IDataStore, + IDataStoreORM, + IDIDManager, + IIdentifier, + IMessageHandler, + TAgent, +} from '../../packages/core/src' import { ICredentialIssuer } from '../../packages/credential-w3c/src' import { ISelectiveDisclosure, SelectiveDisclosure } from '../../packages/selective-disclosure/src' -import { IDataStoreORM } from '../../packages/data-store/src' type ConfiguredAgent = TAgent< IDIDManager & ICredentialIssuer & IDataStoreORM & IDataStore & IMessageHandler & ISelectiveDisclosure @@ -118,7 +124,7 @@ export default (testContext: { }) expect(credentials[0].credentials[0]).toHaveProperty('hash') - expect(credentials[0].credentials[0]).toHaveProperty('verifiableCredential.proof.jwt') + expect(credentials[0].credentials[0]).toHaveProperty('verifiableCredential.proof') }) it('should create verifiable presentation', async () => { diff --git a/__tests__/shared/messageHandler.ts b/__tests__/shared/messageHandler.ts index 53dba7de3..1edf4585e 100644 --- a/__tests__/shared/messageHandler.ts +++ b/__tests__/shared/messageHandler.ts @@ -1,5 +1,4 @@ -import { IDataStore, IMessage, IMessageHandler, TAgent } from '../../packages/core/src' -import { IDataStoreORM } from '../../packages/data-store/src' +import { IDataStore, IDataStoreORM, IMessage, IMessageHandler, TAgent } from '../../packages/core/src' type ConfiguredAgent = TAgent diff --git a/__tests__/shared/saveClaims.ts b/__tests__/shared/saveClaims.ts index a6350a43b..a84f992b0 100644 --- a/__tests__/shared/saveClaims.ts +++ b/__tests__/shared/saveClaims.ts @@ -1,7 +1,14 @@ -import { IDataStore, IDIDManager, IIdentifier, IMessageHandler, TAgent } from '../../packages/core/src' +import { + FindCredentialsArgs, + IDataStore, + IDataStoreORM, + IDIDManager, + IIdentifier, + IMessageHandler, + TAgent, +} from '../../packages/core/src' import { ICredentialIssuer } from '../../packages/credential-w3c/src' import { ISelectiveDisclosure } from '../../packages/selective-disclosure/src' -import { FindCredentialsArgs, IDataStoreORM } from '../../packages/data-store/src' type ConfiguredAgent = TAgent< IDIDManager & ICredentialIssuer & IDataStoreORM & IDataStore & IMessageHandler & ISelectiveDisclosure diff --git a/__tests__/shared/verifiableDataJWT.ts b/__tests__/shared/verifiableDataJWT.ts index 4e8e1bce8..7ef85c67d 100644 --- a/__tests__/shared/verifiableDataJWT.ts +++ b/__tests__/shared/verifiableDataJWT.ts @@ -1,5 +1,11 @@ -import { TAgent, IDIDManager, IIdentifier, IDataStore, TKeyType } from '../../packages/core/src' -import { IDataStoreORM } from '../../packages/data-store/src' +import { + IDataStore, + IDataStoreORM, + IDIDManager, + IIdentifier, + TAgent, + TKeyType, +} from '../../packages/core/src' import { ICredentialIssuer } from '../../packages/credential-w3c/src' import { decodeJWT } from 'did-jwt' diff --git a/__tests__/shared/verifiableDataLD.ts b/__tests__/shared/verifiableDataLD.ts index ce3e42b15..2bd2ad159 100644 --- a/__tests__/shared/verifiableDataLD.ts +++ b/__tests__/shared/verifiableDataLD.ts @@ -1,5 +1,4 @@ -import { IDataStore, IDIDManager, IIdentifier, TAgent } from '../../packages/core/src' -import { IDataStoreORM } from '../../packages/data-store/src' +import { IDataStore, IDataStoreORM, IDIDManager, IIdentifier, TAgent } from '../../packages/core/src' import { ICredentialIssuer } from '../../packages/credential-w3c/src' import { IDIDComm } from '../../packages/did-comm/src' diff --git a/__tests__/utils/json-file-store.ts b/__tests__/utils/json-file-store.ts new file mode 100644 index 000000000..7a928842d --- /dev/null +++ b/__tests__/utils/json-file-store.ts @@ -0,0 +1,85 @@ +import { + DiffCallback, + VeramoJsonCache, + ClaimTableEntry, + CredentialTableEntry, + PresentationTableEntry, + VeramoJsonStore, +} from '../../packages/data-store-json/src' +import * as fs from 'fs' +import { IIdentifier, IMessage, ManagedKeyInfo } from '../../packages/core' +import { ManagedPrivateKey } from '../../packages/key-manager' + +/** + * A utility class that shows how a File based JSON storage system could work. + * This is not recommended for large databases since every write operation rewrites the entire database. + */ +export class JsonFileStore implements VeramoJsonStore { + notifyUpdate: DiffCallback + dids: Record + keys: Record + privateKeys: Record + credentials: Record + claims: Record + presentations: Record + messages: Record + + private constructor(private file: fs.PathLike) { + this.notifyUpdate = async (oldState: VeramoJsonCache, newState: VeramoJsonCache) => { + await this.save(newState) + } + this.dids = {} + this.keys = {} + this.privateKeys = {} + this.credentials = {} + this.claims = {} + this.presentations = {} + this.messages = {} + } + + public static async fromFile(file: fs.PathLike): Promise { + const store = new JsonFileStore(file) + return await store.load() + } + + private async load(): Promise { + await this.checkFile() + const rawCache = await fs.promises.readFile(this.file, { encoding: 'utf8' }) + let cache: VeramoJsonCache + try { + cache = JSON.parse(rawCache) + } catch (e: any) { + cache = {} + } + ;({ + dids: this.dids, + keys: this.keys, + credentials: this.credentials, + claims: this.claims, + presentations: this.presentations, + messages: this.messages, + privateKeys: this.privateKeys, + } = { + dids: {}, + keys: {}, + credentials: {}, + claims: {}, + presentations: {}, + messages: {}, + privateKeys: {}, + ...cache, + }) + return this + } + + private async save(newState: VeramoJsonCache): Promise { + await fs.promises.writeFile(this.file, JSON.stringify(newState), { + encoding: 'utf8', + }) + } + + private async checkFile() { + const file = await fs.promises.open(this.file, 'w+') + await file.close() + } +} diff --git a/package.json b/package.json index 1d9d485b0..634cde81d 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "test:ci": "jest --config=jest.json", "test": "jest --config=jest.json --coverage=false", "test:watch": "yarn test --watch --verbose", - "test:browser": "yarn link && cd ./__browser_tests__/react-sample && yarn install && yarn link veramo && yarn test:browser-integration", + "test:browser": "bash scripts/prepare-react-test.sh && cd ./__browser_tests__/react-sample && yarn install && yarn test:browser-integration", "veramo": "./packages/cli/bin/veramo.js", "prettier": "prettier --write '{packages,__tests__}/**/*.{ts,js,json,md,yml}'", "build-clean": "rimraf ./packages/*/build ./packages/*/api ./packages/*/node_modules ./packages/*/tsconfig.tsbuildinfo && jest --clearCache", diff --git a/packages/cli/src/explore/credentials.ts b/packages/cli/src/explore/credentials.ts index 43ae2eb8a..380bab7ae 100644 --- a/packages/cli/src/explore/credentials.ts +++ b/packages/cli/src/explore/credentials.ts @@ -1,5 +1,5 @@ import blessed, { Widgets } from 'blessed' -import { UniqueVerifiableCredential } from '@veramo/data-store' +import { UniqueVerifiableCredential } from '@veramo/core' import { shortDate, shortDid } from './utils' import { ConfiguredAgent } from '../setup' import { styles } from './styles' diff --git a/packages/cli/src/explore/presentations.ts b/packages/cli/src/explore/presentations.ts index e3d5ecf50..105a99bcb 100644 --- a/packages/cli/src/explore/presentations.ts +++ b/packages/cli/src/explore/presentations.ts @@ -1,5 +1,5 @@ import blessed, { Widgets } from 'blessed' -import { UniqueVerifiablePresentation } from '@veramo/data-store' +import { UniqueVerifiablePresentation } from '@veramo/core' import { shortDate, shortDid } from './utils' import { ConfiguredAgent } from '../setup' import { styles } from './styles' diff --git a/packages/cli/src/setup.ts b/packages/cli/src/setup.ts index a35595767..366d51297 100644 --- a/packages/cli/src/setup.ts +++ b/packages/cli/src/setup.ts @@ -1,14 +1,21 @@ import 'cross-fetch/polyfill' import yaml from 'yaml' -import { IDataStore, IDIDManager, IMessageHandler, IKeyManager, IResolver, TAgent } from '@veramo/core' +import { + IDataStore, + IDataStoreORM, + IDIDManager, + IKeyManager, + IMessageHandler, + IResolver, + TAgent, +} from '@veramo/core' import { ICredentialIssuer } from '@veramo/credential-w3c' import { ISelectiveDisclosure } from '@veramo/selective-disclosure' import { IDIDComm } from '@veramo/did-comm' -import { IDataStoreORM } from '@veramo/data-store' import { IDIDDiscovery } from '@veramo/did-discovery' +import { createAgentFromConfig } from './lib/agentCreator' const fs = require('fs') -import { createAgentFromConfig } from './lib/agentCreator' export const getConfig = (fileName: string): any => { if (!fs.existsSync(fileName)) { diff --git a/packages/core/package.json b/packages/core/package.json index 346c9716f..9ea3cbea4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -14,6 +14,7 @@ "IKeyManager": "./src/types/IKeyManager.ts", "IDIDManager": "./src/types/IDIDManager.ts", "IDataStore": "./src/types/IDataStore.ts", + "IDataStoreORM": "./src/types/IDataStoreORM.ts", "IMessageHandler": "./src/types/IMessageHandler.ts" } }, diff --git a/packages/core/plugin.schema.json b/packages/core/plugin.schema.json index fc169aff4..903b33323 100644 --- a/packages/core/plugin.schema.json +++ b/packages/core/plugin.schema.json @@ -1948,6 +1948,1033 @@ } } }, + "IDataStoreORM": { + "components": { + "schemas": { + "FindIdentifiersArgs": { + "$ref": "#/components/schemas/FindArgs-TIdentifiersColumns" + }, + "FindArgs-TIdentifiersColumns": { + "type": "object", + "properties": { + "where": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Where-TIdentifiersColumns" + } + }, + "order": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Order-TIdentifiersColumns" + } + }, + "take": { + "type": "number" + }, + "skip": { + "type": "number" + } + } + }, + "Where-TIdentifiersColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TIdentifiersColumns" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + }, + "not": { + "type": "boolean" + }, + "op": { + "type": "string", + "enum": [ + "LessThan", + "LessThanOrEqual", + "MoreThan", + "MoreThanOrEqual", + "Equal", + "Like", + "Between", + "In", + "Any", + "IsNull" + ] + } + }, + "required": [ + "column" + ] + }, + "TIdentifiersColumns": { + "type": "string", + "enum": [ + "did", + "alias", + "provider" + ] + }, + "Order-TIdentifiersColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TIdentifiersColumns" + }, + "direction": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + "required": [ + "column", + "direction" + ] + }, + "PartialIdentifier": { + "type": "object", + "properties": { + "did": { + "type": "string", + "description": "Decentralized identifier" + }, + "alias": { + "type": "string", + "description": "Optional. Identifier alias. Can be used to reference an object in an external system" + }, + "provider": { + "type": "string", + "description": "Identifier provider name" + }, + "controllerKeyId": { + "type": "string", + "description": "Controller key id" + }, + "keys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IKey" + }, + "description": "Array of managed keys" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IService" + }, + "description": "Array of services" + } + } + }, + "IKey": { + "type": "object", + "properties": { + "kid": { + "type": "string", + "description": "Key ID" + }, + "kms": { + "type": "string", + "description": "Key Management System" + }, + "type": { + "$ref": "#/components/schemas/TKeyType", + "description": "Key type" + }, + "publicKeyHex": { + "type": "string", + "description": "Public key" + }, + "privateKeyHex": { + "type": "string", + "description": "Optional. Private key" + }, + "meta": { + "anyOf": [ + { + "$ref": "#/components/schemas/KeyMetadata" + }, + { + "type": "null" + } + ], + "description": "Optional. Key metadata. This should be used to determine which algorithms are supported." + } + }, + "required": [ + "kid", + "kms", + "type", + "publicKeyHex" + ], + "description": "Cryptographic key" + }, + "TKeyType": { + "type": "string", + "enum": [ + "Ed25519", + "Secp256k1", + "X25519" + ], + "description": "Cryptographic key type" + }, + "KeyMetadata": { + "type": "object", + "properties": { + "algorithms": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "IService": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID" + }, + "type": { + "type": "string", + "description": "Service type" + }, + "serviceEndpoint": { + "type": "string", + "description": "Endpoint URL" + }, + "description": { + "type": "string", + "description": "Optional. Description" + } + }, + "required": [ + "id", + "type", + "serviceEndpoint" + ], + "description": "Identifier service" + }, + "FindMessagesArgs": { + "$ref": "#/components/schemas/FindArgs-TMessageColumns" + }, + "FindArgs-TMessageColumns": { + "type": "object", + "properties": { + "where": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Where-TMessageColumns" + } + }, + "order": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Order-TMessageColumns" + } + }, + "take": { + "type": "number" + }, + "skip": { + "type": "number" + } + } + }, + "Where-TMessageColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TMessageColumns" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + }, + "not": { + "type": "boolean" + }, + "op": { + "type": "string", + "enum": [ + "LessThan", + "LessThanOrEqual", + "MoreThan", + "MoreThanOrEqual", + "Equal", + "Like", + "Between", + "In", + "Any", + "IsNull" + ] + } + }, + "required": [ + "column" + ] + }, + "TMessageColumns": { + "type": "string", + "enum": [ + "from", + "to", + "id", + "createdAt", + "expiresAt", + "threadId", + "type", + "raw", + "replyTo", + "replyUrl" + ] + }, + "Order-TMessageColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TMessageColumns" + }, + "direction": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + "required": [ + "column", + "direction" + ] + }, + "IMessage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique message ID" + }, + "type": { + "type": "string", + "description": "Message type" + }, + "createdAt": { + "type": "string", + "description": "Optional. Creation date (ISO 8601)" + }, + "expiresAt": { + "type": "string", + "description": "Optional. Expiration date (ISO 8601)" + }, + "threadId": { + "type": "string", + "description": "Optional. Thread ID" + }, + "raw": { + "type": "string", + "description": "Optional. Original message raw data" + }, + "data": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Optional. Parsed data" + }, + "replyTo": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional. List of DIDs to reply to" + }, + "replyUrl": { + "type": "string", + "description": "Optional. URL to post a reply message to" + }, + "from": { + "type": "string", + "description": "Optional. Sender DID" + }, + "to": { + "type": "string", + "description": "Optional. Recipient DID" + }, + "metaData": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/IMetaData" + } + }, + { + "type": "null" + } + ], + "description": "Optional. Array of message metadata" + }, + "credentials": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VerifiableCredential" + }, + "description": "Optional. Array of attached verifiable credentials" + }, + "presentations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VerifiablePresentation" + }, + "description": "Optional. Array of attached verifiable presentations" + } + }, + "required": [ + "id", + "type" + ], + "description": "Represents a DIDComm v1 message payload, with optionally decoded credentials and presentations." + }, + "IMetaData": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type" + }, + "value": { + "type": "string", + "description": "Optional. Value" + } + }, + "required": [ + "type" + ], + "description": "Message meta data" + }, + "VerifiableCredential": { + "type": "object", + "properties": { + "proof": { + "$ref": "#/components/schemas/ProofType" + }, + "issuer": { + "$ref": "#/components/schemas/IssuerType" + }, + "credentialSubject": { + "$ref": "#/components/schemas/CredentialSubject" + }, + "type": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + "@context": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + "issuanceDate": { + "type": "string" + }, + "expirationDate": { + "type": "string" + }, + "credentialStatus": { + "$ref": "#/components/schemas/CredentialStatus" + }, + "id": { + "type": "string" + } + }, + "required": [ + "@context", + "credentialSubject", + "issuanceDate", + "issuer", + "proof" + ], + "description": "Represents a signed Verifiable Credential payload (includes proof), using a JSON representation. See {@link https://www.w3.org/TR/vc-data-model/#credentials | VC data model }" + }, + "ProofType": { + "type": "object", + "properties": { + "type": { + "type": "string" + } + }, + "description": "A proof property of a Verifiable Credential or Presentation" + }, + "IssuerType": { + "anyOf": [ + { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + { + "type": "string" + } + ], + "description": "The issuer of a Credential or the holder of a Presentation.\n\nThe value of the issuer property MUST be either a URI or an object containing an id property. It is RECOMMENDED that the URI in the issuer or its id be one which, if de-referenced, results in a document containing machine-readable information about the issuer that can be used to verify the information expressed in the credential.\n\nSee {@link https://www.w3.org/TR/vc-data-model/#issuer | Issuer data model }" + }, + "CredentialSubject": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "description": "The value of the credentialSubject property is defined as a set of objects that contain one or more properties that are each related to a subject of the verifiable credential. Each object MAY contain an id.\n\nSee {@link https://www.w3.org/TR/vc-data-model/#credential-subject | Credential Subject }" + }, + "CredentialStatus": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "description": "Used for the discovery of information about the current status of a verifiable credential, such as whether it is suspended or revoked. The precise contents of the credential status information is determined by the specific `credentialStatus` type definition, and varies depending on factors such as whether it is simple to implement or if it is privacy-enhancing.\n\nSee {@link https://www.w3.org/TR/vc-data-model/#status | Credential Status }" + }, + "VerifiablePresentation": { + "type": "object", + "properties": { + "proof": { + "$ref": "#/components/schemas/ProofType" + }, + "holder": { + "type": "string" + }, + "verifiableCredential": { + "type": "array", + "items": { + "$ref": "#/components/schemas/W3CVerifiableCredential" + } + }, + "type": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + "@context": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + "verifier": { + "type": "array", + "items": { + "type": "string" + } + }, + "issuanceDate": { + "type": "string" + }, + "expirationDate": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "@context", + "holder", + "proof" + ], + "description": "Represents a signed Verifiable Presentation (includes proof), using a JSON representation. See {@link https://www.w3.org/TR/vc-data-model/#presentations | VP data model }" + }, + "W3CVerifiableCredential": { + "anyOf": [ + { + "$ref": "#/components/schemas/VerifiableCredential" + }, + { + "$ref": "#/components/schemas/CompactJWT" + } + ], + "description": "Represents a signed Verifiable Credential (includes proof), in either JSON or compact JWT format. See {@link https://www.w3.org/TR/vc-data-model/#credentials | VC data model } \nSee {@link https://www.w3.org/TR/vc-data-model/#proof-formats | proof formats }" + }, + "CompactJWT": { + "type": "string", + "description": "Represents a Json Web Token in compact form. \"header.payload.signature\"" + }, + "FindCredentialsArgs": { + "$ref": "#/components/schemas/FindArgs-TCredentialColumns" + }, + "FindArgs-TCredentialColumns": { + "type": "object", + "properties": { + "where": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Where-TCredentialColumns" + } + }, + "order": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Order-TCredentialColumns" + } + }, + "take": { + "type": "number" + }, + "skip": { + "type": "number" + } + } + }, + "Where-TCredentialColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TCredentialColumns" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + }, + "not": { + "type": "boolean" + }, + "op": { + "type": "string", + "enum": [ + "LessThan", + "LessThanOrEqual", + "MoreThan", + "MoreThanOrEqual", + "Equal", + "Like", + "Between", + "In", + "Any", + "IsNull" + ] + } + }, + "required": [ + "column" + ] + }, + "TCredentialColumns": { + "type": "string", + "enum": [ + "context", + "type", + "id", + "issuer", + "subject", + "expirationDate", + "issuanceDate" + ] + }, + "Order-TCredentialColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TCredentialColumns" + }, + "direction": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + "required": [ + "column", + "direction" + ] + }, + "UniqueVerifiableCredential": { + "type": "object", + "properties": { + "hash": { + "type": "string" + }, + "verifiableCredential": { + "$ref": "#/components/schemas/VerifiableCredential" + } + }, + "required": [ + "hash", + "verifiableCredential" + ] + }, + "FindClaimsArgs": { + "$ref": "#/components/schemas/FindArgs-TClaimsColumns" + }, + "FindArgs-TClaimsColumns": { + "type": "object", + "properties": { + "where": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Where-TClaimsColumns" + } + }, + "order": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Order-TClaimsColumns" + } + }, + "take": { + "type": "number" + }, + "skip": { + "type": "number" + } + } + }, + "Where-TClaimsColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TClaimsColumns" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + }, + "not": { + "type": "boolean" + }, + "op": { + "type": "string", + "enum": [ + "LessThan", + "LessThanOrEqual", + "MoreThan", + "MoreThanOrEqual", + "Equal", + "Like", + "Between", + "In", + "Any", + "IsNull" + ] + } + }, + "required": [ + "column" + ] + }, + "TClaimsColumns": { + "type": "string", + "enum": [ + "context", + "credentialType", + "type", + "value", + "isObj", + "id", + "issuer", + "subject", + "expirationDate", + "issuanceDate" + ] + }, + "Order-TClaimsColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TClaimsColumns" + }, + "direction": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + "required": [ + "column", + "direction" + ] + }, + "FindPresentationsArgs": { + "$ref": "#/components/schemas/FindArgs-TPresentationColumns" + }, + "FindArgs-TPresentationColumns": { + "type": "object", + "properties": { + "where": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Where-TPresentationColumns" + } + }, + "order": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Order-TPresentationColumns" + } + }, + "take": { + "type": "number" + }, + "skip": { + "type": "number" + } + } + }, + "Where-TPresentationColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TPresentationColumns" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + }, + "not": { + "type": "boolean" + }, + "op": { + "type": "string", + "enum": [ + "LessThan", + "LessThanOrEqual", + "MoreThan", + "MoreThanOrEqual", + "Equal", + "Like", + "Between", + "In", + "Any", + "IsNull" + ] + } + }, + "required": [ + "column" + ] + }, + "TPresentationColumns": { + "type": "string", + "enum": [ + "context", + "type", + "id", + "holder", + "verifier", + "expirationDate", + "issuanceDate" + ] + }, + "Order-TPresentationColumns": { + "type": "object", + "properties": { + "column": { + "$ref": "#/components/schemas/TPresentationColumns" + }, + "direction": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + "required": [ + "column", + "direction" + ] + }, + "UniqueVerifiablePresentation": { + "type": "object", + "properties": { + "hash": { + "type": "string" + }, + "verifiablePresentation": { + "$ref": "#/components/schemas/VerifiablePresentation" + } + }, + "required": [ + "hash", + "verifiablePresentation" + ] + } + }, + "methods": { + "dataStoreORMGetIdentifiers": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindIdentifiersArgs" + }, + "returnType": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PartialIdentifier" + } + } + }, + "dataStoreORMGetIdentifiersCount": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindIdentifiersArgs" + }, + "returnType": { + "type": "number" + } + }, + "dataStoreORMGetMessages": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindMessagesArgs" + }, + "returnType": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IMessage" + } + } + }, + "dataStoreORMGetMessagesCount": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindMessagesArgs" + }, + "returnType": { + "type": "number" + } + }, + "dataStoreORMGetVerifiableCredentials": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindCredentialsArgs" + }, + "returnType": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UniqueVerifiableCredential" + } + } + }, + "dataStoreORMGetVerifiableCredentialsByClaims": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindClaimsArgs" + }, + "returnType": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UniqueVerifiableCredential" + } + } + }, + "dataStoreORMGetVerifiableCredentialsByClaimsCount": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindClaimsArgs" + }, + "returnType": { + "type": "number" + } + }, + "dataStoreORMGetVerifiableCredentialsCount": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindCredentialsArgs" + }, + "returnType": { + "type": "number" + } + }, + "dataStoreORMGetVerifiablePresentations": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindPresentationsArgs" + }, + "returnType": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UniqueVerifiablePresentation" + } + } + }, + "dataStoreORMGetVerifiablePresentationsCount": { + "description": "", + "arguments": { + "$ref": "#/components/schemas/FindPresentationsArgs" + }, + "returnType": { + "type": "number" + } + } + } + } + }, "IMessageHandler": { "components": { "schemas": { diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 4cced983d..6c35deba0 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -8,6 +8,7 @@ export { ValidationError } from './validator' export { CoreEvents } from './coreEvents' export * from './types/IAgent' export * from './types/IDataStore' +export * from './types/IDataStoreORM' export * from './types/IIdentifier' export * from './types/IDIDManager' export * from './types/IKeyManager' diff --git a/packages/core/src/types/IDataStoreORM.ts b/packages/core/src/types/IDataStoreORM.ts new file mode 100644 index 000000000..79e348826 --- /dev/null +++ b/packages/core/src/types/IDataStoreORM.ts @@ -0,0 +1,415 @@ +import { VerifiableCredential, VerifiablePresentation } from './vc-data-model' +import { IIdentifier } from './IIdentifier' +import { IAgentContext, IPluginMethodMap } from './IAgent' +import { IMessage } from './IMessage' + +/** + * Represents the sort order of results from a { @link IDataStoreORM.FindArgs } query. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export interface Order { + column: TColumns + direction: 'ASC' | 'DESC' +} + +/** + * Represents a WHERE predicate for a { @link IDataStoreORM.FindArgs } query. + * In situations where multiple WHERE predicates are present, they are combined with AND. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export interface Where { + column: TColumns + value?: string[] + not?: boolean + op?: + | 'LessThan' + | 'LessThanOrEqual' + | 'MoreThan' + | 'MoreThanOrEqual' + | 'Equal' + | 'Like' + | 'Between' + | 'In' + | 'Any' + | 'IsNull' +} + +/** + * Represents an {@link IDataStoreORM} Query. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export interface FindArgs { + /** + * Imposes constraints on the values of the given columns. + * WHERE clauses are combined using AND. + */ + where?: Where[] + + /** + * Sorts the results according to the given array of column priorities. + */ + order?: Order[] + + /** + * Ignores the first number of entries in a {@link IDataStoreORM} query result. + */ + skip?: number + + /** + * Returns at most this number of results from a {@link IDataStoreORM} query. + */ + take?: number +} + +/** + * The columns that can be queried for an {@link IIdentifier} + * + * @deprecated This type will be removed in future versions of this plugin interface. + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type TIdentifiersColumns = 'did' | 'alias' | 'provider' + +/** + * The columns that can be queried for an {@link IMessage} + * + * See {@link IDataStoreORM.dataStoreORMGetMessagesCount} + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type TMessageColumns = + | 'from' + | 'to' + | 'id' + | 'createdAt' + | 'expiresAt' + | 'threadId' + | 'type' + | 'raw' + | 'replyTo' + | 'replyUrl' + +/** + * The columns that can be searched for a {@link VerifiableCredential} + * + * See {@link IDataStoreORM.dataStoreORMGetVerifiableCredentials} + * See {@link IDataStoreORM.dataStoreORMGetVerifiableCredentialsCount} + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type TCredentialColumns = + | 'context' + | 'type' + | 'id' + | 'issuer' + | 'subject' + | 'expirationDate' + | 'issuanceDate' + +/** + * The columns that can be searched for the claims of a {@link VerifiableCredential} + * + * See {@link IDataStoreORM.dataStoreORMGetVerifiableCredentialsByClaims} + * See {@link IDataStoreORM.dataStoreORMGetVerifiableCredentialsByClaimsCount} + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type TClaimsColumns = + | 'context' + | 'credentialType' + | 'type' + | 'value' + | 'isObj' + | 'id' + | 'issuer' + | 'subject' + | 'expirationDate' + | 'issuanceDate' + +/** + * The columns that can be searched for a {@link VerifiablePresentation} + * + * See {@link IDataStoreORM.dataStoreORMGetVerifiablePresentations} + * See {@link IDataStoreORM.dataStoreORMGetVerifiablePresentationsCount} + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type TPresentationColumns = + | 'context' + | 'type' + | 'id' + | 'holder' + | 'verifier' + | 'expirationDate' + | 'issuanceDate' + +/** + * This context can be used for Veramo Agents that are created behind an authorization mechanism, that attaches a DID + * as the authorized executor of certain actions. This authorized DID is used to further filter the data that is + * available for querying. + * + * This does not constitute an authorization mechanism, but relies on an authorization mechanism existing before the + * Veramo Agent is created. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export interface AuthorizedDIDContext extends IAgentContext<{}> { + authorizedDID?: string +} + +/** + * Represents the result of a Query for {@link VerifiableCredential}s + * + * See {@link IDataStoreORM.dataStoreORMGetVerifiableCredentials} + * See {@link IDataStoreORM.dataStoreORMGetVerifiableCredentialsByClaims} + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export interface UniqueVerifiableCredential { + hash: string + verifiableCredential: VerifiableCredential +} + +/** + * Represents the result of a Query for {@link VerifiablePresentation}s + * + * See {@link IDataStoreORM.dataStoreORMGetVerifiablePresentations} + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export interface UniqueVerifiablePresentation { + hash: string + verifiablePresentation: VerifiablePresentation +} + +/** + * The filter that can be used to find {@link IIdentifier}s in the data store. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type FindIdentifiersArgs = FindArgs + +/** + * The filter that can be used to find {@link IMessage}s in the data store. + * See {@link IDataStoreORM.dataStoreORMGetMessages} + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type FindMessagesArgs = FindArgs + +/** + * The filter that can be used to find {@link VerifiableCredential}s in the data store, based on the types and values + * of their claims. + * + * See {@link IDataStoreORM.dataStoreORMGetVerifiableCredentialsByClaims} + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type FindClaimsArgs = FindArgs + +/** + * The filter that can be used to find {@link VerifiableCredential}s in the data store. + * See {@link IDataStoreORM.dataStoreORMGetVerifiableCredentials} + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type FindCredentialsArgs = FindArgs + +/** + * The filter that can be used to find {@link VerifiablePresentation}s in the data store. + * See {@link IDataStoreORM.dataStoreORMGetVerifiablePresentations} + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type FindPresentationsArgs = FindArgs + +/** + * The result of a {@link IDataStoreORM.dataStoreORMGetIdentifiers} query. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export type PartialIdentifier = Partial + +/** + * This is the default query interface for the credential data stored by a Veramo agent. + * + * Plugins implementing this interface are expected to implement this simple query functionality to filter the data + * that was saved using {@link IDataStore}. + * + * If this interface is implemented by a different plugin than {@link IDataStore}, then both plugins MUST use the same + * media for data storage. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export interface IDataStoreORM extends IPluginMethodMap { + /** + * Tries to obtain a list of {@link IIdentifier | IIdentifiers} that match the given filter. + * The origin of these identifiers is from any credential / presentation or message that was successfully processed + * by this agent. + * + * If the same database is used for implementations of {@link @veramo/did-manager#AbstractDIDStore | + * AbstractDIDStore}, then these identifiers can also come from {@link IDIDManager.didManagerCreate | + * didManagerCreate} or {@link IDIDManager.didManagerImport | didManagerImport} operations. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @deprecated This will be removed in future versions of this plugin interface. + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetIdentifiers( + args: FindIdentifiersArgs, + context: AuthorizedDIDContext, + ): Promise> + + /** + * Tries to obtain a count of {@link IIdentifier | IIdentifiers} that match the given filter. + * The origin of these identifiers is from any credential / presentation or message that was successfully processed + * by this agent. + * + * If the same database is used for implementations of {@link @veramo/did-manager#AbstractDIDStore | + * AbstractDIDStore}, then these identifiers can also come from {@link IDIDManager.didManagerCreate | + * didManagerCreate} or {@link IDIDManager.didManagerImport | didManagerImport} operations. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @deprecated This will be removed in future versions of this plugin interface. + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetIdentifiersCount(args: FindIdentifiersArgs, context: AuthorizedDIDContext): Promise + + /** + * Returns a list of {@link IMessage}s that match the given filter. + * These are messages that were stored using {IDataStore.dataStoreSaveMessage | dataStoreSaveMessage}. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetMessages(args: FindMessagesArgs, context: AuthorizedDIDContext): Promise> + + /** + * Returns a count of {@link IMessage}s that match the given filter. + * These are messages that were stored using {@link IDataStore.dataStoreSaveMessage | dataStoreSaveMessage}. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetMessagesCount(args: FindMessagesArgs, context: AuthorizedDIDContext): Promise + + /** + * Returns a list of {@link UniqueVerifiableCredential}s that match the given filter based on the claims they + * contain. + * + * These are VerifiableCredentials that were stored using + * {@link IDataStore.dataStoreSaveVerifiableCredential | dataStoreSaveVerifiableCredential}. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetVerifiableCredentialsByClaims( + args: FindClaimsArgs, + context: AuthorizedDIDContext, + ): Promise> + + /** + * Returns a count of {@link UniqueVerifiableCredential}s that match the given filter based on the claims they + * contain. + * + * These are VerifiableCredentials that were stored using + * {@link IDataStore.dataStoreSaveVerifiableCredential | dataStoreSaveVerifiableCredential}. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetVerifiableCredentialsByClaimsCount( + args: FindClaimsArgs, + context: AuthorizedDIDContext, + ): Promise + + /** + * Returns a list of {@link UniqueVerifiableCredential}s that match the given filter based on the top level + * properties of a credential. + * + * These are VerifiableCredentials that were stored using + * {@link IDataStore.dataStoreSaveVerifiableCredential | dataStoreSaveVerifiableCredential}. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetVerifiableCredentials( + args: FindCredentialsArgs, + context: AuthorizedDIDContext, + ): Promise> + + /** + * Returns a count of {@link UniqueVerifiableCredential}s that match the given filter based on the top level + * properties of a credential. + * + * These are VerifiableCredentials that were stored using + * {@link IDataStore.dataStoreSaveVerifiableCredential | dataStoreSaveVerifiableCredential}. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetVerifiableCredentialsCount( + args: FindCredentialsArgs, + context: AuthorizedDIDContext, + ): Promise + + /** + * Returns a list of {@link UniqueVerifiablePresentation}s that match the given filter based on the top level + * properties of a presentation. + * + * These are {@link VerifiablePresentation}s that were stored using + * {@link IDataStore.dataStoreSaveVerifiablePresentation | dataStoreSaveVerifiablePresentation}. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetVerifiablePresentations( + args: FindPresentationsArgs, + context: AuthorizedDIDContext, + ): Promise> + + /** + * Returns a count of {@link UniqueVerifiablePresentation}s that match the given filter based on the top level + * properties of a presentation. + * + * These are {@link VerifiablePresentation}s that were stored using + * {@link IDataStore.dataStoreSaveVerifiablePresentation | dataStoreSaveVerifiablePresentation}. + * + * @param args The filter to apply when querying + * @param context Can be sued to signal that only a particular DID is authorized to perform this operation. This will + * cause the result to only contain data that this DID should be able to access. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ + dataStoreORMGetVerifiablePresentationsCount( + args: FindPresentationsArgs, + context: AuthorizedDIDContext, + ): Promise +} diff --git a/packages/credential-ld/src/action-handler.ts b/packages/credential-ld/src/action-handler.ts index d4632f97d..14ae63061 100644 --- a/packages/credential-ld/src/action-handler.ts +++ b/packages/credential-ld/src/action-handler.ts @@ -183,7 +183,7 @@ export class CredentialIssuerLD implements IAgentPlugin { context: IRequiredContext, ): Promise { const credential = args.credential - return this.ldCredentialModule.verifyCredential(credential, args.fetchRemoteContexts || false, context) + return this.ldCredentialModule.verifyCredential(credential, args.fetchRemoteContexts || false, context) } /** {@inheritdoc ICredentialIssuerLD.verifyPresentationLD} */ @@ -192,7 +192,13 @@ export class CredentialIssuerLD implements IAgentPlugin { context: IRequiredContext, ): Promise { const presentation = args.presentation - return this.ldCredentialModule.verifyPresentation(presentation, args.challenge, args.domain, args.fetchRemoteContexts || false, context) + return this.ldCredentialModule.verifyPresentation( + presentation, + args.challenge, + args.domain, + args.fetchRemoteContexts || false, + context, + ) } private async findSigningKeyWithId( diff --git a/packages/credential-ld/src/ld-credential-module.ts b/packages/credential-ld/src/ld-credential-module.ts index 59f28706c..240427e6c 100644 --- a/packages/credential-ld/src/ld-credential-module.ts +++ b/packages/credential-ld/src/ld-credential-module.ts @@ -69,7 +69,7 @@ export class LdCredentialModule { } else { if (attemptToFetchContexts) { // attempt to fetch the remote context!!!! MEGA FAIL for JSON-LD. - debug("WARNING: attempting to fetch the doc directly for ", url) + debug('WARNING: attempting to fetch the doc directly for ', url) try { const response = await fetch(url) if (response.status === 200) { @@ -77,16 +77,18 @@ export class LdCredentialModule { return { contextUrl: null, documentUrl: url, - document + document, } } } catch (e) { - debug("WARNING: unable to fetch the doc or interpret it as JSON", e) + debug('WARNING: unable to fetch the doc or interpret it as JSON', e) } } } - debug(`WARNING: Possible unknown context/identifier for ${url} \n falling back to default documentLoader`) + debug( + `WARNING: Possible unknown context/identifier for ${url} \n falling back to default documentLoader`, + ) return vc.defaultDocumentLoader(url) }) diff --git a/packages/credential-ld/src/types.ts b/packages/credential-ld/src/types.ts index cb7c4a062..2be442498 100644 --- a/packages/credential-ld/src/types.ts +++ b/packages/credential-ld/src/types.ts @@ -160,11 +160,11 @@ export interface IVerifyCredentialLDArgs { * of the `credential` * */ - credential: VerifiableCredential, + credential: VerifiableCredential /** * Set this to true if you want the '@context' URLs to be fetched in case they are not pre-loaded. - * + * * @default false */ fetchRemoteContexts?: boolean @@ -199,10 +199,10 @@ export interface IVerifyPresentationLDArgs { /** * Set this to true if you want the '@context' URLs to be fetched in case they are not pre-loaded. - * + * * @default false */ - fetchRemoteContexts?: boolean + fetchRemoteContexts?: boolean } /** diff --git a/packages/credential-w3c/src/action-handler.ts b/packages/credential-w3c/src/action-handler.ts index cc600994e..73078346e 100644 --- a/packages/credential-w3c/src/action-handler.ts +++ b/packages/credential-w3c/src/action-handler.ts @@ -153,16 +153,16 @@ export interface IVerifyCredentialArgs { * When dealing with JSON-LD you also MUST provide the proper contexts. * Set this to `true` ONLY if you want the '@context' URLs to be fetched in case they are not pre-loaded. * The context definitions SHOULD rather be provided at startup instead of being fetched. - * + * * @default false */ - fetchRemoteContexts?: boolean + fetchRemoteContexts?: boolean /** * Other options can be specified for verification. * They will be forwarded to the lower level modules. that performt the checks */ - [x: string]: any + [x: string]: any } /** @@ -196,16 +196,16 @@ export interface IVerifyPresentationArgs { * When dealing with JSON-LD you also MUST provide the proper contexts. * Set this to `true` ONLY if you want the '@context' URLs to be fetched in case they are not pre-loaded. * The context definitions SHOULD rather be provided at startup instead of being fetched. - * + * * @default false */ - fetchRemoteContexts?: boolean + fetchRemoteContexts?: boolean /** * Other options can be specified for verification. * They will be forwarded to the lower level modules. that performt the checks */ - [x: string]: any + [x: string]: any } /** diff --git a/packages/data-store-json/LICENSE b/packages/data-store-json/LICENSE new file mode 100644 index 000000000..454ee3175 --- /dev/null +++ b/packages/data-store-json/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2022 Consensys AG + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/data-store-json/README.md b/packages/data-store-json/README.md new file mode 100644 index 000000000..cb52dbbe6 --- /dev/null +++ b/packages/data-store-json/README.md @@ -0,0 +1,16 @@ +# Veramo data store using JSON trees + +Veramo data storage based on JSON trees. +This package provides several plugins that relate to data storage that is backed up by a JSON tree. + +### `DataStoreJSON` +A plugin that exposes simple store/get methods for messages, credentials and presentations. +This implements the `@veramo/data-store#DataStore` plugin interface. + +### `DataStoreORMJson` +A plugin that provides more querying options using TypeORM. +This implements the `@veramo/data-store#DataStoreORM` plugin interface. + +### `KeyStore` and `DIDStore` + +Implementations of `AbstractKeyStore` and `AbstractDIDStore` diff --git a/packages/data-store-json/api-extractor.json b/packages/data-store-json/api-extractor.json new file mode 100644 index 000000000..409d7f16c --- /dev/null +++ b/packages/data-store-json/api-extractor.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "apiReport": { + "enabled": true, + "reportFolder": "./api", + "reportTempFolder": "./api" + }, + + "docModel": { + "enabled": true, + "apiJsonFilePath": "./api/.api.json" + }, + + "dtsRollup": { + "enabled": false + }, + "mainEntryPointFilePath": "/build/index.d.ts" +} diff --git a/packages/data-store-json/package.json b/packages/data-store-json/package.json new file mode 100644 index 000000000..a8caf7d36 --- /dev/null +++ b/packages/data-store-json/package.json @@ -0,0 +1,40 @@ +{ + "name": "@veramo/data-store-json", + "description": "Veramo date storage based on a JSON tree", + "version": "3.1.0", + "main": "build/index.js", + "types": "build/index.d.ts", + "scripts": { + "build": "tsc", + "extract-api": "yarn veramo dev extract-api" + }, + "dependencies": { + "@ungap/structured-clone": "^0.3.4", + "@veramo/core": "^3.1.0", + "@veramo/data-store": "^3.1.0", + "@veramo/did-discovery": "^3.1.0", + "@veramo/did-manager": "^3.1.0", + "@veramo/key-manager": "^3.1.0", + "@veramo/utils": "^3.1.0", + "debug": "^4.3.3" + }, + "devDependencies": { + "@types/debug": "4.1.7", + "@types/ungap__structured-clone": "^0.3.0", + "typescript": "4.5.5" + }, + "files": [ + "build/**/*", + "src/**/*", + "plugin.schema.json", + "README.md", + "LICENSE" + ], + "publishConfig": { + "access": "public" + }, + "repository": "git@github.com:uport-project/veramo.git", + "author": "Mircea Nistor ", + "license": "Apache-2.0", + "keywords": [] +} diff --git a/packages/data-store-json/src/__tests__/data-store-orm-json.test.ts b/packages/data-store-json/src/__tests__/data-store-orm-json.test.ts new file mode 100644 index 000000000..94eaeb977 --- /dev/null +++ b/packages/data-store-json/src/__tests__/data-store-orm-json.test.ts @@ -0,0 +1,387 @@ +// noinspection ES6PreferShortImport + +import { + Agent, + FindArgs, + IDataStore, + IDataStoreORM, + IMessage, + TAgent, + TCredentialColumns, + TMessageColumns, + TPresentationColumns, + VerifiableCredential, + VerifiablePresentation, +} from '../../../core/src' +import { DataStoreJson } from '../data-store-json' +import { VeramoJsonStore } from '../types' + +const did1 = 'did:test:111' +const did2 = 'did:test:222' +const did3 = 'did:test:333' +const did4 = 'did:test:444' + +async function populateDB(agent: TAgent) { + const vc1: VerifiableCredential = { + '@context': ['https://www.w3.org/2018/credentials/v1323', 'https://www.w3.org/2020/demo/4342323'], + type: ['VerifiableCredential', 'PublicProfile'], + issuer: { id: did1 }, + issuanceDate: new Date().toISOString(), + id: 'vc1', + credentialSubject: { + id: did2, + name: 'Alice', + profilePicture: 'https://example.com/a.png', + address: { + street: 'Some str.', + house: 1, + }, + }, + proof: { + jwt: 'mockJWT', + }, + } + + const vp1: VerifiablePresentation = { + '@context': ['https://www.w3.org/2018/credentials/v1323', 'https://www.w3.org/2020/demo/4342323'], + type: ['VerifiablePresentation', 'PublicProfile'], + holder: did1, + verifier: [did2], + issuanceDate: new Date().toISOString(), + verifiableCredential: [vc1], + proof: { + jwt: 'mockJWT', + }, + } + + const vp2: VerifiablePresentation = { + '@context': ['https://www.w3.org/2018/credentials/v1323', 'https://www.w3.org/2020/demo/4342323'], + type: ['VerifiablePresentation', 'PublicProfileMultiAudience'], + holder: did1, + verifier: [did2, did4], + issuanceDate: new Date().toISOString(), + verifiableCredential: [vc1], + proof: { + jwt: 'mockJWT', + }, + } + + const m1: IMessage = { + id: 'm1', + from: did1, + to: did2, + createdAt: '2020-06-16T11:06:51.680Z', + type: 'mock', + raw: 'mock', + credentials: [vc1], + presentations: [vp1], + } + + const m2: IMessage = { + id: 'm2', + from: did1, + to: did1, + createdAt: '2020-06-16T11:07:51.680Z', + type: 'mock', + raw: 'mock234', + } + + const m3: IMessage = { + id: 'm3', + from: did3, + to: did2, + createdAt: '2020-06-16T11:08:51.680Z', + type: 'mock', + raw: 'mock678', + } + + const m4: IMessage = { + id: 'm4', + from: did1, + to: did2, + createdAt: '2020-06-16T11:09:51.680Z', + type: 'mock', + raw: 'mockmoreaudienct', + credentials: [vc1], + presentations: [vp2], + } + await agent.dataStoreSaveMessage({ message: m1 }) + await agent.dataStoreSaveMessage({ message: m2 }) + await agent.dataStoreSaveMessage({ message: m3 }) + await agent.dataStoreSaveMessage({ message: m4 }) +} + +let dataStore: VeramoJsonStore + +describe('@veramo/data-store queries', () => { + function makeAgent(context?: Record): TAgent { + //@ts-ignore + return new Agent({ + context, + plugins: [new DataStoreJson(dataStore)], + }) + } + + beforeEach(async () => { + dataStore = { notifyUpdate: () => Promise.resolve() } + await populateDB(makeAgent()) + }) + + test('search presentations by verifier', async () => { + const agent = makeAgent() + const args: FindArgs = { + where: [ + { + column: 'verifier', + value: [did4], + op: 'In', + }, + ], + } + + let presentations = await makeAgent().dataStoreORMGetVerifiablePresentations(args) + expect(presentations.length).toBe(1) + let count = await agent.dataStoreORMGetVerifiablePresentationsCount(args) + expect(count).toBe(1) + // search when authenticated as the issuer + let authorizedDID = did1 + + presentations = await makeAgent({ authorizedDID }).dataStoreORMGetVerifiablePresentations(args) + expect(presentations.length).toBe(1) + count = await makeAgent({ authorizedDID }).dataStoreORMGetVerifiablePresentationsCount(args) + expect(count).toBe(1) + + // search when authenticated as another did + authorizedDID = did3 + + presentations = await makeAgent({ authorizedDID }).dataStoreORMGetVerifiablePresentations(args) + expect(presentations.length).toEqual(0) + count = await makeAgent({ authorizedDID }).dataStoreORMGetVerifiablePresentationsCount(args) + expect(count).toBe(0) + }) + + test('without auth it fetches all messages that match the query', async () => { + const args: FindArgs = { + where: [ + { + column: 'type', + value: ['mock'], + op: 'In', + }, + ], + } + + const messages = await makeAgent().dataStoreORMGetMessages(args) + expect(messages.length).toBe(4) + + const count = await makeAgent().dataStoreORMGetMessagesCount(args) + expect(count).toBe(4) + }) + + test('with auth it only gets messages for the authorized identifier', async () => { + const args: FindArgs = { + where: [ + { + column: 'type', + value: ['mock'], + op: 'In', + }, + ], + } + const authorizedDID = did1 + + const messages = await makeAgent({ authorizedDID }).dataStoreORMGetMessages(args) + expect(messages.length).toBe(3) + const count = await makeAgent({ authorizedDID }).dataStoreORMGetMessagesCount(args) + expect(count).toBe(3) + }) + + test('supports ordering', async () => { + const agent = makeAgent() + const args: FindArgs = { + where: [ + { + column: 'type', + value: ['mock'], + op: 'In', + }, + ], + order: [ + { + column: 'createdAt', + direction: 'DESC', + }, + ], + } + + const messages = await agent.dataStoreORMGetMessages(args) + expect(new Date('' + messages[0].createdAt).getTime()).toBeGreaterThan( + new Date('' + messages[1].createdAt).getTime(), + ) + + const args2: FindArgs = { + where: [ + { + column: 'type', + value: ['mock'], + op: 'In', + }, + ], + order: [ + { + column: 'createdAt', + direction: 'ASC', + }, + ], + } + + const messages2 = await agent.dataStoreORMGetMessages(args2) + expect(new Date('' + messages2[0].createdAt).getTime()).toBeLessThan( + new Date('' + messages2[1].createdAt).getTime(), + ) + }) + + test('works with relations', async () => { + const credentials = await makeAgent().dataStoreORMGetVerifiableCredentialsByClaims({}) + expect(credentials.length).toBe(1) + expect(credentials[0].verifiableCredential.id).toBe('vc1') + const count = await makeAgent().dataStoreORMGetVerifiableCredentialsByClaimsCount({}) + expect(count).toBe(1) + + const credentials2 = await makeAgent({ + authorizedDID: did3, + }).dataStoreORMGetVerifiableCredentialsByClaims({}) + expect(credentials2.length).toBe(0) + const count2 = await makeAgent({ + authorizedDID: did3, + }).dataStoreORMGetVerifiableCredentialsByClaimsCount({}) + expect(count2).toBe(0) + }) + + test('multiple audience members can retrieve a credential', async () => { + const args: FindArgs = { + where: [ + { + column: 'type', + value: ['VerifiablePresentation,PublicProfileMultiAudience'], + op: 'Equal', + }, + ], + } + + let presentations = await makeAgent({ authorizedDID: did1 }).dataStoreORMGetVerifiablePresentations(args) + expect(presentations.length).toBe(1) + + presentations = await makeAgent({ authorizedDID: did2 }).dataStoreORMGetVerifiablePresentations(args) + expect(presentations.length).toBe(1) + + presentations = await makeAgent({ authorizedDID: did4 }).dataStoreORMGetVerifiablePresentations(args) + expect(presentations.length).toBe(1) + + presentations = await makeAgent({ authorizedDID: did3 }).dataStoreORMGetVerifiablePresentations(args) + expect(presentations.length).toBe(0) + }) + + test('store credential and retrieve by id', async () => { + const vc5: VerifiableCredential = { + '@context': ['https://www.w3.org/2018/credentials/v1323', 'https://www.w3.org/2020/demo/4342323'], + type: ['VerifiableCredential', 'PublicProfile'], + issuer: { id: did1 }, + issuanceDate: new Date().toISOString(), + id: 'vc5', + credentialSubject: { + id: did2, + name: 'Alice', + profilePicture: 'https://example.com/a.png', + address: { + street: 'Some str.', + house: 1, + }, + }, + proof: { + jwt: 'mockJWT', + }, + } + + const agent = makeAgent() + await agent.dataStoreSaveVerifiableCredential({ verifiableCredential: vc5 }) + + const args: FindArgs = { + where: [ + { + column: 'id', + value: ['vc5'], + }, + ], + order: [{ column: 'issuanceDate', direction: 'DESC' }], + } + + const credentials = await agent.dataStoreORMGetVerifiableCredentials(args) + expect(credentials[0].verifiableCredential.id).toEqual('vc5') + const count = await agent.dataStoreORMGetVerifiableCredentialsCount(args) + expect(count).toEqual(1) + }) + + test('store presentation and retrieve by context and type', async () => { + const vc6: VerifiableCredential = { + '@context': ['https://www.w3.org/2018/credentials/v1323', 'https://www.w3.org/2020/demo/666'], + type: ['VerifiableCredential', 'PublicProfile6'], + issuer: { id: did1 }, + issuanceDate: new Date().toISOString(), + id: 'vc6', + credentialSubject: { + id: did2, + name: 'Alice', + profilePicture: 'https://example.com/a.png', + address: { + street: 'Some str.', + house: 1, + }, + }, + proof: { + jwt: 'mockJWT', + }, + } + + const vp6: VerifiablePresentation = { + '@context': ['https://www.w3.org/2018/credentials/v1323', 'https://www.w3.org/2020/demo/99999966666'], + type: ['VerifiablePresentation', 'PublicProfile6666'], + holder: did1, + verifier: [did2], + issuanceDate: new Date().toISOString(), + verifiableCredential: [vc6], + proof: { + jwt: 'mockJWT', + }, + } + + const agent = makeAgent() + await agent.dataStoreSaveVerifiablePresentation({ verifiablePresentation: vp6 }) + + const args: FindArgs = { + where: [ + { + column: 'type', + value: ['VerifiablePresentation,PublicProfile6666'], + }, + { + column: 'context', + value: ['https://www.w3.org/2018/credentials/v1323,https://www.w3.org/2020/demo/99999966666'], + }, + ], + } + + const presentations = await agent.dataStoreORMGetVerifiablePresentations(args) + const cred0 = presentations[0].verifiablePresentation.verifiableCredential?.[0] as VerifiableCredential + expect(cred0.id).toEqual('vc6') + }) + + it('should query identifiers', async () => { + const agent = makeAgent() + const identifiers = await agent.dataStoreORMGetIdentifiers() + expect(identifiers.length).toEqual(4) + + const count = await agent.dataStoreORMGetIdentifiersCount() + expect(count).toEqual(4) + }) +}) diff --git a/packages/data-store-json/src/data-store-json.ts b/packages/data-store-json/src/data-store-json.ts new file mode 100644 index 000000000..2266c848e --- /dev/null +++ b/packages/data-store-json/src/data-store-json.ts @@ -0,0 +1,595 @@ +import { + AuthorizedDIDContext, + FindArgs, + IAgentPlugin, + IDataStore, + IDataStoreDeleteVerifiableCredentialArgs, + IDataStoreGetMessageArgs, + IDataStoreGetVerifiableCredentialArgs, + IDataStoreGetVerifiablePresentationArgs, + IDataStoreORM, + IDataStoreSaveMessageArgs, + IDataStoreSaveVerifiableCredentialArgs, + IDataStoreSaveVerifiablePresentationArgs, + IIdentifier, + IMessage, + schema, + TClaimsColumns, + TCredentialColumns, + TIdentifiersColumns, + TMessageColumns, + TPresentationColumns, + UniqueVerifiableCredential, + UniqueVerifiablePresentation, + VerifiableCredential, + VerifiablePresentation, +} from '@veramo/core' +import { asArray, computeEntryHash, extractIssuer } from '@veramo/utils' +import structuredClone from '@ungap/structured-clone' +import { + ClaimTableEntry, + CredentialTableEntry, + DiffCallback, + PresentationTableEntry, + VeramoJsonCache, + VeramoJsonStore, +} from './types' +import { normalizeCredential } from 'did-jwt-vc' + +type LocalRecords = Required> + +/** + * A storage plugin that implements the {@link IDataStore} and {@link IDataStoreORM} methods using a JSON object as a + * backend. + * + * Each update operation triggers a callback that can be used to either save the latest state of the agent data or + * compute a diff and log only the changes. + * + * This plugin must be initialized with a {@link VeramoJsonStore}, which serves as the JSON object storing data in + * memory as well as providing an update notification callback to persist this data. + * The JSON object can be pre-populated with data from previous sessions. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export class DataStoreJson implements IAgentPlugin { + readonly methods: IDataStore & IDataStoreORM + readonly schema = { ...schema.IDataStore, ...schema.IDataStoreORM } + + private readonly cacheTree: LocalRecords + private readonly notifyUpdate: DiffCallback + + /** + * @param jsonStore a reference to the JSON object that holds the data in memory and implements an update callback. + * This object can be pre-populated with data from previous sessions, and will be used by reference. + */ + constructor(jsonStore: VeramoJsonStore) { + this.notifyUpdate = jsonStore.notifyUpdate + this.cacheTree = jsonStore as LocalRecords + const tables = ['dids', 'credentials', 'presentations', 'claims', 'messages'] as (keyof LocalRecords)[] + for (const table of tables) { + if (!this.cacheTree[table]) { + this.cacheTree[table] = {} + } + } + + this.methods = { + // IDataStore methods + dataStoreSaveMessage: this.dataStoreSaveMessage.bind(this), + dataStoreGetMessage: this.dataStoreGetMessage.bind(this), + //dataStoreDeleteMessage: this.dataStoreDeleteMessage.bind(this), + dataStoreSaveVerifiableCredential: this.dataStoreSaveVerifiableCredential.bind(this), + dataStoreGetVerifiableCredential: this.dataStoreGetVerifiableCredential.bind(this), + dataStoreDeleteVerifiableCredential: this.dataStoreDeleteVerifiableCredential.bind(this), + dataStoreSaveVerifiablePresentation: this.dataStoreSaveVerifiablePresentation.bind(this), + dataStoreGetVerifiablePresentation: this.dataStoreGetVerifiablePresentation.bind(this), + //dataStoreDeleteVerifiablePresentation: this.dataStoreDeleteVerifiablePresentation.bind(this), + + // IDataStoreORM methods + dataStoreORMGetIdentifiers: this.dataStoreORMGetIdentifiers.bind(this), + dataStoreORMGetIdentifiersCount: this.dataStoreORMGetIdentifiersCount.bind(this), + dataStoreORMGetMessages: this.dataStoreORMGetMessages.bind(this), + dataStoreORMGetMessagesCount: this.dataStoreORMGetMessagesCount.bind(this), + dataStoreORMGetVerifiableCredentialsByClaims: + this.dataStoreORMGetVerifiableCredentialsByClaims.bind(this), + dataStoreORMGetVerifiableCredentialsByClaimsCount: + this.dataStoreORMGetVerifiableCredentialsByClaimsCount.bind(this), + dataStoreORMGetVerifiableCredentials: this.dataStoreORMGetVerifiableCredentials.bind(this), + dataStoreORMGetVerifiableCredentialsCount: this.dataStoreORMGetVerifiableCredentialsCount.bind(this), + dataStoreORMGetVerifiablePresentations: this.dataStoreORMGetVerifiablePresentations.bind(this), + dataStoreORMGetVerifiablePresentationsCount: + this.dataStoreORMGetVerifiablePresentationsCount.bind(this), + } + } + + async dataStoreSaveMessage(args: IDataStoreSaveMessageArgs): Promise { + const id = args.message?.id || computeEntryHash(args.message) + const message = { ...args.message, id } + const oldTree = structuredClone(this.cacheTree, { lossy: true }) + this.cacheTree.messages[id] = message + // TODO: deprecate automatic credential and presentation saving + const credentials = asArray(message.credentials) + const presentations = asArray(message.presentations) + for (const verifiableCredential of credentials) { + await this._dataStoreSaveVerifiableCredential({ verifiableCredential }, false) + } + for (const verifiablePresentation of presentations) { + await this._dataStoreSaveVerifiablePresentation({ verifiablePresentation }, false) + } + // adding dummy DIDs is required to make `dataStoreORMGetIdentifiers` work + if (message?.from && !this.cacheTree.dids[message.from]) { + this.cacheTree.dids[message.from] = { did: message.from, provider: '', keys: [], services: [] } + } + asArray(message.to).forEach((did) => { + if (!this.cacheTree.dids[did]) { + this.cacheTree.dids[did] = { did, provider: '', keys: [], services: [] } + } + }) + await this.notifyUpdate(oldTree, this.cacheTree) + return message.id + } + + async dataStoreGetMessage(args: IDataStoreGetMessageArgs): Promise { + const message = this.cacheTree.messages[args.id] + if (message) { + return message + } else { + throw Error('Message not found') + } + } + + private async _dataStoreSaveVerifiableCredential( + args: IDataStoreSaveVerifiableCredentialArgs, + postUpdates: boolean = true, + ): Promise { + const canonicalCredential = + args?.verifiableCredential?.proof?.type === 'JwtProof2020' && + typeof args?.verifiableCredential?.proof?.jwt === 'string' + ? args?.verifiableCredential?.proof?.jwt + : args.verifiableCredential + const vc = args.verifiableCredential + const id = vc.id + const hash = computeEntryHash(canonicalCredential) + const issuer = extractIssuer(vc) + const subject = vc.credentialSubject.id + const context = asArray(vc['@context']) + const type = asArray(vc.type) + let issuanceDate: Date | undefined = undefined + let expirationDate: Date | undefined = undefined + + if (vc.issuanceDate) { + issuanceDate = new Date(vc.issuanceDate) + } + if (vc.expirationDate) { + expirationDate = new Date(vc.expirationDate) + } + + const credential: CredentialTableEntry = { + hash, + id, + parsedCredential: vc, + canonicalCredential, + issuer, + subject, + issuanceDate, + expirationDate, + context, + type, + } + + const claims: ClaimTableEntry[] = [] + + for (const claimType in vc.credentialSubject) { + if (vc.credentialSubject.hasOwnProperty(claimType)) { + const value = vc.credentialSubject[claimType] + if (claimType !== 'id') { + const claim = { + hash: computeEntryHash(hash + claimType), + type: claimType, + value, + issuer, + subject, + issuanceDate, + expirationDate, + context: context, + credentialType: type, + credentialHash: hash, + } + claims.push(claim) + } + } + } + + let oldTree: VeramoJsonCache + if (postUpdates) { + oldTree = structuredClone(this.cacheTree, { lossy: true }) + } + this.cacheTree.credentials[hash] = credential + for (const claim of claims) { + this.cacheTree.claims[claim.hash] = claim + } + // adding dummy DIDs is required to make `dataStoreORMGetIdentifiers` work + if (issuer && !this.cacheTree.dids[issuer]) { + this.cacheTree.dids[issuer] = { did: issuer, provider: '', keys: [], services: [] } + } + if (subject && !this.cacheTree.dids[subject]) { + this.cacheTree.dids[subject] = { did: subject, provider: '', keys: [], services: [] } + } + if (postUpdates) { + await this.notifyUpdate(oldTree!!, this.cacheTree) + } + return credential.hash + } + + async dataStoreSaveVerifiableCredential(args: IDataStoreSaveVerifiableCredentialArgs): Promise { + return this._dataStoreSaveVerifiableCredential(args) + } + + async dataStoreDeleteVerifiableCredential( + args: IDataStoreDeleteVerifiableCredentialArgs, + ): Promise { + const credential = this.cacheTree.credentials[args.hash] + if (credential) { + const claims = Object.values(this.cacheTree.claims) + .filter((claim) => claim.credentialHash === credential.hash) + .map((claim) => claim.hash) + const oldTree = structuredClone(this.cacheTree, { lossy: true }) + delete this.cacheTree.credentials[args.hash] + for (const claimHash of claims) { + delete this.cacheTree.claims[claimHash] + } + await this.notifyUpdate(oldTree, this.cacheTree) + return true + } + return false + } + + async dataStoreGetVerifiableCredential( + args: IDataStoreGetVerifiableCredentialArgs, + ): Promise { + const credentialEntity = this.cacheTree.credentials[args.hash] + if (credentialEntity) { + const { parsedCredential } = credentialEntity + return structuredClone(parsedCredential) + } else { + throw Error('Verifiable credential not found') + } + } + + private async _dataStoreSaveVerifiablePresentation( + args: IDataStoreSaveVerifiablePresentationArgs, + postUpdates: boolean = true, + ): Promise { + const vp = args.verifiablePresentation + const canonicalPresentation = + vp?.proof?.type === 'JwtProof2020' && typeof vp?.proof?.jwt === 'string' ? vp?.proof?.jwt : vp + + const id = vp.id + const hash = computeEntryHash(canonicalPresentation) + const holder = extractIssuer(vp) + const verifier = asArray(vp.verifier) + const context = asArray(vp['@context']) + const type = asArray(vp.type) + let issuanceDate: Date | undefined = undefined + let expirationDate: Date | undefined = undefined + + if (vp.issuanceDate) { + issuanceDate = new Date(vp.issuanceDate) + } + if (vp.expirationDate) { + expirationDate = new Date(vp.expirationDate) + } + + const credentials: VerifiableCredential[] = asArray(vp.verifiableCredential).map((cred) => { + if (typeof cred === 'string') { + return normalizeCredential(cred) + } else { + return cred + } + }) + + const presentation: PresentationTableEntry = { + hash, + id, + parsedPresentation: vp, + canonicalPresentation, + holder, + verifier, + issuanceDate, + expirationDate, + context, + type, + credentials, + } + + let oldTree: VeramoJsonCache + if (postUpdates) { + oldTree = structuredClone(this.cacheTree, { lossy: true }) + } + + this.cacheTree.presentations[hash] = presentation + for (const verifiableCredential of credentials) { + await this._dataStoreSaveVerifiableCredential({ verifiableCredential }, false) + } + // adding dummy DIDs is required to make `dataStoreORMGetIdentifiers` work + if (holder && !this.cacheTree.dids[holder]) { + this.cacheTree.dids[holder] = { did: holder, provider: '', keys: [], services: [] } + } + asArray(verifier).forEach((did) => { + if (!this.cacheTree.dids[did]) { + this.cacheTree.dids[did] = { did, provider: '', keys: [], services: [] } + } + }) + if (postUpdates) { + await this.notifyUpdate(oldTree!!, this.cacheTree) + } + return hash + } + + async dataStoreSaveVerifiablePresentation(args: IDataStoreSaveVerifiablePresentationArgs): Promise { + return this._dataStoreSaveVerifiablePresentation(args) + } + + async dataStoreGetVerifiablePresentation( + args: IDataStoreGetVerifiablePresentationArgs, + ): Promise { + const presentationEntry = this.cacheTree.presentations[args.hash] + if (presentationEntry) { + const { parsedPresentation } = presentationEntry + return parsedPresentation + } else { + throw Error('Verifiable presentation not found') + } + } + + async dataStoreORMGetIdentifiers( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { + const identifiers = buildQuery(Object.values(this.cacheTree.dids), args, ['did'], context.authorizedDID) + // FIXME: collect corresponding keys from `this.cacheTree.keys`? + return structuredClone(identifiers) + } + + async dataStoreORMGetIdentifiersCount( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { + return (await this.dataStoreORMGetIdentifiers(args, context)).length + } + + async dataStoreORMGetMessages( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { + const messages = buildQuery( + Object.values(this.cacheTree.messages), + args, + ['to', 'from'], + context.authorizedDID, + ) + return structuredClone(messages) + } + + async dataStoreORMGetMessagesCount( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { + return (await this.dataStoreORMGetMessages(args, context)).length + } + + async dataStoreORMGetVerifiableCredentialsByClaims( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise> { + const filteredClaims = buildQuery( + Object.values(this.cacheTree.claims), + args, + ['issuer', 'subject'], + context.authorizedDID, + ) + + let filteredCredentials = new Set() + filteredClaims.forEach((claim) => { + filteredCredentials.add(this.cacheTree.credentials[claim.credentialHash]) + }) + + return structuredClone( + Array.from(filteredCredentials).map((cred) => { + const { hash, parsedCredential } = cred + return { + hash, + verifiableCredential: parsedCredential, + } + }), + ) + } + + async dataStoreORMGetVerifiableCredentialsByClaimsCount( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { + return (await this.dataStoreORMGetVerifiableCredentialsByClaims(args, context)).length + } + + async dataStoreORMGetVerifiableCredentials( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise> { + const credentials = buildQuery( + Object.values(this.cacheTree.credentials), + args, + ['issuer', 'subject'], + context.authorizedDID, + ) + + return structuredClone( + credentials.map((cred: any) => { + const { hash, parsedCredential } = cred + return { + hash, + verifiableCredential: parsedCredential, + } + }), + ) + } + + async dataStoreORMGetVerifiableCredentialsCount( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { + return (await this.dataStoreORMGetVerifiableCredentials(args, context)).length + } + + async dataStoreORMGetVerifiablePresentations( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise> { + const presentations = buildQuery( + Object.values(this.cacheTree.presentations), + args, + ['holder', 'verifier'], + context.authorizedDID, + ) + + return structuredClone( + presentations.map((pres: any) => { + const { hash, parsedPresentation } = pres + return { + hash, + verifiablePresentation: parsedPresentation, + } + }), + ) + } + + async dataStoreORMGetVerifiablePresentationsCount( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { + return (await this.dataStoreORMGetVerifiablePresentations(args, context)).length + } +} + +function buildFilter>>( + target: T, + input: FindArgs, +): boolean { + let condition = true + if (input?.where) { + for (const item of input.where) { + let newCondition: boolean + const targetValue = (target as any)[item.column] + switch (item.op) { + case 'Between': + if (item.value?.length != 2) throw Error('Operation Between requires two values') + newCondition = item.value[0] <= targetValue && targetValue <= item.value[1] + break + case 'Equal': + if (item.value?.length != 1) throw Error('Operation Equal requires one value') + newCondition = item.value[0] === targetValue + if (Array.isArray(targetValue)) { + // mimicking legacy SQL data-store behavior where array values are stored as joined strings + newCondition ||= targetValue.join(',').includes(item.value[0]) + } + break + case 'IsNull': + newCondition = targetValue === null || typeof targetValue === 'undefined' + break + case 'LessThan': + if (item.value?.length != 1) throw Error('Operation LessThan requires one value') + newCondition = targetValue < item.value + break + case 'LessThanOrEqual': + if (item.value?.length != 1) throw Error('Operation LessThanOrEqual requires one value') + newCondition = targetValue <= item.value + break + case 'Like': + if (item.value?.length != 1) throw Error('Operation Like requires one value') + // FIXME: add support for escaping + const likeExpression = `^${(item.value?.[0] || '').replace(/_/g, '.').replace(/%/g, '.*')}$` + newCondition = new RegExp(likeExpression).test(targetValue) + break + case 'MoreThan': + if (item.value?.length != 1) throw Error('Operation MoreThan requires one value') + newCondition = targetValue > item.value + break + case 'MoreThanOrEqual': + if (item.value?.length != 1) throw Error('Operation MoreThanOrEqual requires one value') + newCondition = targetValue >= item.value + break + case 'Any': + case 'In': + default: + if (!Array.isArray(item.value)) throw Error('Operator Any requires value to be an array') + + if (Array.isArray(targetValue)) { + newCondition = item.value.find((val) => targetValue.includes(val)) !== undefined + // mimicking legacy SQL data-store behavior where array values are stored as joined strings + newCondition ||= targetValue.join(',').includes(item.value.join(',')) + } else { + newCondition = item.value.includes(targetValue) + } + break + } + if (item.not === true) { + newCondition = !newCondition + } + condition &&= newCondition + } + } + return condition +} + +type PossibleColumns = + | TMessageColumns + | TClaimsColumns + | TCredentialColumns + | TPresentationColumns + | TIdentifiersColumns + +function buildQuery>>( + targetCollection: T[], + input: FindArgs, + authFilterColumns: string[], + authFilterValue?: string, +): T[] { + let filteredCollection = targetCollection.filter((target) => buildFilter(target, input)) + if (authFilterValue) { + filteredCollection = filteredCollection.filter((target) => { + let columnValues: string[] = [] + for (const column of authFilterColumns) { + columnValues = [...columnValues, ...asArray((target as any)[column])] + } + return columnValues.includes(authFilterValue) + }) + } + if (input.skip) { + filteredCollection = filteredCollection.slice(input.skip) + } + if (input.take) { + filteredCollection = filteredCollection.slice(0, input.take) + } + if (input.order && input.order.length > 0) { + filteredCollection.sort((a: T, b: T) => { + let result = 0 + let orderIndex = 0 + while (result == 0 && input.order?.[orderIndex]) { + const direction = input.order?.[orderIndex].direction === 'DESC' ? -1 : 1 + const col: PossibleColumns = input.order?.[orderIndex]?.column + if (!col) { + break + } + const colA = a[col] + const colB = b[col] + if (typeof colA?.localeCompare === 'function') { + result = direction * colA.localeCompare(colB) + } else { + result = direction * (colA - colB || 0) + } + orderIndex++ + } + return result + }) + } + return filteredCollection +} diff --git a/packages/data-store-json/src/identifier/did-store.ts b/packages/data-store-json/src/identifier/did-store.ts new file mode 100644 index 000000000..aef417038 --- /dev/null +++ b/packages/data-store-json/src/identifier/did-store.ts @@ -0,0 +1,106 @@ +import { IIdentifier } from '@veramo/core' +import { AbstractDIDStore } from '@veramo/did-manager' + +import Debug from 'debug' +import { DiffCallback, VeramoJsonCache, VeramoJsonStore } from '../types' +import structuredClone from '@ungap/structured-clone' + +const debug = Debug('veramo:data-store-json:did-store') + +/** + * An implementation of {@link AbstractDIDStore} that uses a JSON object to store the relationships between DIDs, their + * providers and controllers and their keys and services as they are known and managed by a Veramo agent. + * + * An instance of this class can be used by {@link @veramo/did-manager#DIDManager} as the data storage layer. + * + * This class must be initialized with a {@link VeramoJsonStore}, which serves as the JSON object storing data in + * memory as well as providing an update notification callback to persist this data. + * For correct usage, this MUST use the same {@link VeramoJsonStore} instance as the one used by + * {@link @veramo/key-manager#KeyManager | KeyManager}. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export class DIDStoreJson extends AbstractDIDStore { + private readonly cacheTree: Required> + private readonly notifyUpdate: DiffCallback + + constructor(jsonStore: VeramoJsonStore) { + super() + this.notifyUpdate = jsonStore.notifyUpdate + this.cacheTree = jsonStore as Required> + if (!this.cacheTree.dids) { + this.cacheTree.dids = {} + } + if (!this.cacheTree.keys) { + this.cacheTree.keys = {} + } + } + + async get({ + did, + alias, + provider, + }: { + did?: string + alias?: string + provider?: string + }): Promise { + let where: { did?: string; alias?: string; provider?: string } = {} + + if (did !== undefined && alias === undefined) { + where = { did } + } else if (did === undefined && alias !== undefined && provider !== undefined) { + where = { alias, provider } + } else { + throw Error('invalid_arguments: DidStoreJson.get requires did or (alias and provider)') + } + + let identifier: IIdentifier | undefined + if (where.did) { + identifier = this.cacheTree.dids[where.did] + } else { + identifier = Object.values(this.cacheTree.dids).find( + (iid: IIdentifier) => iid.provider === where.provider && iid.alias === where.alias, + ) + } + + if (!identifier) throw Error('Identifier not found') + + return structuredClone(identifier) + } + + async delete({ did }: { did: string }) { + if (this.cacheTree.dids[did]) { + const oldTree = structuredClone(this.cacheTree, { lossy: true }) + delete this.cacheTree.dids[did] + // FIXME: delete key associations? + await this.notifyUpdate(oldTree, this.cacheTree) + return true + } + return false + } + + async import(args: IIdentifier) { + const oldTree = structuredClone(this.cacheTree, { lossy: true }) + this.cacheTree.dids[args.did] = args + args.keys.forEach((key) => { + this.cacheTree.keys[key.kid] = { + ...key, + // FIXME: keys should be able to associate with multiple DIDs + meta: { ...key.meta, did: args.did }, + } + }) + + await this.notifyUpdate(oldTree, this.cacheTree) + return true + } + + async list(args: { alias?: string; provider?: string }): Promise { + const result = Object.values(this.cacheTree.dids).filter( + (iid: IIdentifier) => + (!args.provider || (args.provider && iid.provider === args.provider)) && + (!args.alias || (args.alias && iid.alias === args.alias)), + ) + return structuredClone(result) + } +} diff --git a/packages/data-store-json/src/identifier/key-store.ts b/packages/data-store-json/src/identifier/key-store.ts new file mode 100644 index 000000000..13ed244c1 --- /dev/null +++ b/packages/data-store-json/src/identifier/key-store.ts @@ -0,0 +1,75 @@ +import { IKey, ManagedKeyInfo } from '@veramo/core' +import { AbstractKeyStore } from '@veramo/key-manager' + +import Debug from 'debug' +import { DiffCallback, VeramoJsonCache, VeramoJsonStore } from '../types' +import structuredClone from '@ungap/structured-clone' + +const debug = Debug('veramo:data-store-json:key-store') + +/** + * An implementation of {@link AbstractKeyStore} that uses a JSON object to store the relationships between keys, their + * IDs, aliases and {@link @veramo/key-manager#AbstractKeyManagementSystem | KMS implementations}, as they are known + * and managed by a Veramo agent. + * + * An instance of this class can be used by {@link @veramo/key-manager#KeyManager} as the data storage layer. + * + * This class must be initialized with a {@link VeramoJsonStore}, which serves as the JSON object storing data in + * memory as well as providing an update notification callback to persist this data. + * For correct usage, this MUST use the same {@link VeramoJsonStore} instance as the one used by + * {@link @veramo/did-manager#DIDManager | DIDManager}. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export class KeyStoreJson extends AbstractKeyStore { + private readonly cacheTree: Required> + private readonly notifyUpdate: DiffCallback + + /** + * @param jsonStore serves as the JSON object storing data in memory as well as providing an update notification + * callback to persist this data. For correct usage, this MUST use the same {@link VeramoJsonStore} instance as the + * one used by {@link @veramo/did-manager#DIDManager | DIDManager}. + */ + constructor(jsonStore: VeramoJsonStore) { + super() + this.notifyUpdate = jsonStore.notifyUpdate + this.cacheTree = jsonStore as Required> + if (!this.cacheTree.keys) { + this.cacheTree.keys = {} + } + } + + async get({ kid }: { kid: string }): Promise { + if (this.cacheTree.keys[kid]) { + return structuredClone(this.cacheTree.keys[kid]) + } else { + throw Error('not_found: Key not found') + } + } + + async delete({ kid }: { kid: string }) { + if (this.cacheTree.keys[kid]) { + const oldTree = structuredClone(this.cacheTree, { lossy: true }) + delete this.cacheTree.keys[kid] + await this.notifyUpdate(oldTree, this.cacheTree) + return true + } else { + return false + } + } + + async import(args: IKey) { + const oldTree = structuredClone(this.cacheTree, { lossy: true }) + this.cacheTree.keys[args.kid] = args + await this.notifyUpdate(oldTree, this.cacheTree) + return true + } + + async list(args: {} = {}): Promise { + const keys = Object.values(this.cacheTree.keys).map((key: IKey) => { + const { kid, publicKeyHex, type, meta, kms } = key + return { kid, publicKeyHex, type, meta: structuredClone(meta), kms } as ManagedKeyInfo + }) + return keys + } +} diff --git a/packages/data-store-json/src/identifier/private-key-store.ts b/packages/data-store-json/src/identifier/private-key-store.ts new file mode 100644 index 000000000..6ae5676a6 --- /dev/null +++ b/packages/data-store-json/src/identifier/private-key-store.ts @@ -0,0 +1,92 @@ +import { AbstractSecretBox, AbstractPrivateKeyStore } from '@veramo/key-manager' +import { ImportablePrivateKey, ManagedPrivateKey } from '@veramo/key-manager/src/abstract-private-key-store' +import { v4 as uuid4 } from 'uuid' +import Debug from 'debug' +import { DiffCallback, VeramoJsonCache, VeramoJsonStore } from '../types' +import structuredClone from '@ungap/structured-clone' + +const debug = Debug('veramo:data-store-json:private-key-store') + +/** + * An implementation of {@link AbstractPrivateKeyStore} that uses a JSON object to store the private key material + * needed by {@link @veramo/kms-local#KeyManagementSystem}. + * + * This class must be initialized with a {@link VeramoJsonStore}, which serves as the JSON object storing data in + * memory as well as providing an update notification callback to persist this data. + * The JSON object does not have to be shared with other users of {@link VeramoJsonStore}, but it can be. + * + * If an {@link AbstractSecretBox} is used, then key material is encrypted, even in memory. + * + * @beta This API is likely to change without a BREAKING CHANGE notice. + */ +export class PrivateKeyStoreJson extends AbstractPrivateKeyStore { + private readonly cacheTree: Required> + private readonly notifyUpdate: DiffCallback + + /** + * @param jsonStore This serves as the JSON object storing data in memory as well as providing an update notification + * callback to persist this data. The JSON object does not have to be shared with other users of + * {@link VeramoJsonStore}, but it can be. + * @param secretBox if this is used, then key material is encrypted, even in memory. + */ + constructor(jsonStore: VeramoJsonStore, private secretBox?: AbstractSecretBox) { + super() + this.cacheTree = jsonStore as Required> + this.notifyUpdate = jsonStore.notifyUpdate + if (!this.cacheTree.privateKeys) { + this.cacheTree.privateKeys = {} + } + if (!secretBox) { + console.warn('Please provide SecretBox to the KeyStore') + } + } + + async get({ alias }: { alias: string }): Promise { + const key = structuredClone(this.cacheTree.privateKeys[alias]) + if (!key) throw Error('not_found: PrivateKey not found') + if (this.secretBox && key.privateKeyHex) { + key.privateKeyHex = await this.secretBox.decrypt(key.privateKeyHex) + } + return key + } + + async delete({ alias }: { alias: string }) { + debug(`Deleting private key data for alias=${alias}`) + const privateKeyEntry = this.cacheTree.privateKeys[alias] + if (privateKeyEntry) { + const oldTree = structuredClone(this.cacheTree, { lossy: true }) + delete this.cacheTree.privateKeys[alias] + await this.notifyUpdate(oldTree, this.cacheTree) + } + return true + } + + async import(args: ImportablePrivateKey): Promise { + debug('Saving private key data', args.alias) + const alias = args.alias || uuid4() + const key: ManagedPrivateKey = structuredClone({ + ...args, + alias, + }) + if (this.secretBox && key.privateKeyHex) { + const copy = key.privateKeyHex + key.privateKeyHex = await this.secretBox.encrypt(copy) + } + const existingKey = this.cacheTree.privateKeys[key.alias] + if (existingKey && existingKey.privateKeyHex !== key.privateKeyHex) { + throw new Error( + `key_already_exists: A key with this alias exists but with different data. Please use a different alias.`, + ) + } + + const oldTree = structuredClone(this.cacheTree, { lossy: true }) + this.cacheTree.privateKeys[key.alias] = key + await this.notifyUpdate(oldTree, this.cacheTree) + + return key + } + + async list(): Promise> { + return structuredClone(Object.values(this.cacheTree.privateKeys)) + } +} diff --git a/packages/data-store-json/src/index.ts b/packages/data-store-json/src/index.ts new file mode 100644 index 000000000..225693bae --- /dev/null +++ b/packages/data-store-json/src/index.ts @@ -0,0 +1,23 @@ +/** + * {@link @veramo/core#Agent} {@link @veramo/data-store-json#DataStoreJson | plugin} that implements + * {@link @veramo/core#IDataStore } and + * {@link @veramo/core#IDataStoreORM }interfaces and uses a JSON tree as a backend. + * + * The JSON tree backend can be persisted to any JSON compatible media using a callback that gets called when the agent + * data is updated. + * + * @packageDocumentation + */ + +export { DataStoreJson } from './data-store-json' +export { + DiffCallback, + ClaimTableEntry, + CredentialTableEntry, + PresentationTableEntry, + VeramoJsonCache, + VeramoJsonStore, +} from './types' +export { DIDStoreJson } from './identifier/did-store' +export { KeyStoreJson } from './identifier/key-store' +export { PrivateKeyStoreJson } from './identifier/private-key-store' diff --git a/packages/data-store-json/src/types.ts b/packages/data-store-json/src/types.ts new file mode 100644 index 000000000..936b9337b --- /dev/null +++ b/packages/data-store-json/src/types.ts @@ -0,0 +1,112 @@ +import { + IIdentifier, + IMessage, + ManagedKeyInfo, + VerifiableCredential, + VerifiablePresentation, + W3CVerifiableCredential, + W3CVerifiablePresentation, +} from '@veramo/core' +import { ManagedPrivateKey } from '@veramo/key-manager' + +/** + * This is used internally by {@link @veramo/data-store-json#DataStoreJson | DataStoreJson} to represent a Verifiable + * Credential in a way that facilitates querying using the {@link @veramo/core#IDataStoreORM} interface. + * + * @beta This API may change in future versions without a BREAKING CHANGE notice. + */ +export interface CredentialTableEntry { + hash: string + issuer: string + subject?: string + id?: string + issuanceDate?: Date + expirationDate?: Date + context: string[] + type: string[] + parsedCredential: VerifiableCredential + canonicalCredential: W3CVerifiableCredential +} + +/** + * This is used internally by {@link @veramo/data-store-json#DataStoreJson | DataStoreJson} to represent the claims + * contained in a Verifiable Credential in a way that facilitates querying using the {@link @veramo/core#IDataStoreORM} + * interface. + * + * @beta This API may change in future versions without a BREAKING CHANGE notice. + */ +export interface ClaimTableEntry { + hash: string + issuer: string + subject?: string + credentialHash: string + issuanceDate?: Date + expirationDate?: Date + context: string[] + credentialType: string[] + type: string + value: any +} + +/** + * This is used internally by {@link @veramo/data-store-json#DataStoreJson | DataStoreJson} to represent a Verifiable + * Presentation in a way that facilitates querying using the {@link @veramo/core#IDataStoreORM} interface. + * + * @beta This API may change in future versions without a BREAKING CHANGE notice. + */ +export interface PresentationTableEntry { + hash: string + holder: string + verifier: string[] + parsedPresentation: VerifiablePresentation + canonicalPresentation: W3CVerifiablePresentation + id?: String + issuanceDate?: Date + expirationDate?: Date + context: string[] + type: string[] + credentials: VerifiableCredential[] +} + +/** + * A JSON data layout for data-store-json implementations. + * + * @beta This API may change in future versions without a BREAKING CHANGE notice. + */ +export interface VeramoJsonCache { + // usable for AbstractDIDStore implementations + dids?: Record + // usable for AbstractKeyStore implementations + keys?: Record + // usable for KMS implementations that opt to use the same storage for the private key material + privateKeys?: Record + + // usable for IDataStore and IDataStoreORM implementations + credentials?: Record + claims?: Record + presentations?: Record + messages?: Record +} + +/** + * An extension to {@link VeramoJsonCache} that bundles an update notification callback that allows implementors to + * persist the {@link VeramoJsonCache} and any other data it may contain to another storage medium. + * + * @beta This API may change in future versions without a BREAKING CHANGE notice. + */ +export interface VeramoJsonStore extends VeramoJsonCache { + notifyUpdate: DiffCallback +} + +/** + * A callback method that is called when the data stored in a {@link VeramoJsonCache} is updated. + * + * @param oldState the snapshot of the cache before the update. + * @param newState the new cache object, after the update. This object may reference the underlying storage. + * + * @beta This API may change in future versions without a BREAKING CHANGE notice. + */ +export type DiffCallback = ( + oldState: Partial, + newState: Partial, +) => Promise diff --git a/packages/data-store-json/tsconfig.json b/packages/data-store-json/tsconfig.json new file mode 100644 index 000000000..dd5d64e59 --- /dev/null +++ b/packages/data-store-json/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.settings.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "build" + }, + "references": [ + { "path": "../core" }, + { "path": "../did-manager" }, + { "path": "../key-manager" }, + { "path": "../utils" } + ] +} diff --git a/packages/data-store/package.json b/packages/data-store/package.json index 4d6969094..e95436541 100644 --- a/packages/data-store/package.json +++ b/packages/data-store/package.json @@ -1,17 +1,12 @@ { "name": "@veramo/data-store", - "description": "Veramo date storage based on TypeORM", + "description": "Veramo data storage plugin based on TypeORM database drivers", "version": "3.1.0", "main": "build/index.js", "types": "build/index.d.ts", "scripts": { "build": "tsc", - "generate-plugin-schema": "yarn veramo dev generate-plugin-schema" - }, - "veramo": { - "pluginInterfaces": { - "IDataStoreORM": "./src/data-store-orm.ts" - } + "generate-plugin-schema": "yarn veramo dev extract-api" }, "dependencies": { "@veramo/core": "^3.1.0", @@ -30,7 +25,6 @@ "files": [ "build/**/*", "src/**/*", - "plugin.schema.json", "README.md", "LICENSE" ], @@ -40,10 +34,7 @@ "repository": "git@github.com:uport-project/veramo.git", "author": "Simonas Karuzas ", "contributors": [ - { - "name": "Mircea Nistor", - "email": "mircea.nistor@mesh.xyz" - } + "Mircea Nistor mircea.nistor@mesh.xyz" ], "license": "Apache-2.0", "keywords": [] diff --git a/packages/data-store/plugin.schema.json b/packages/data-store/plugin.schema.json deleted file mode 100644 index fb0da69a6..000000000 --- a/packages/data-store/plugin.schema.json +++ /dev/null @@ -1,1029 +0,0 @@ -{ - "IDataStoreORM": { - "components": { - "schemas": { - "FindIdentifiersArgs": { - "$ref": "#/components/schemas/FindArgs-TIdentifiersColumns" - }, - "FindArgs-TIdentifiersColumns": { - "type": "object", - "properties": { - "where": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Where-TIdentifiersColumns" - } - }, - "order": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Order-TIdentifiersColumns" - } - }, - "take": { - "type": "number" - }, - "skip": { - "type": "number" - } - } - }, - "Where-TIdentifiersColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TIdentifiersColumns" - }, - "value": { - "type": "array", - "items": { - "type": "string" - } - }, - "not": { - "type": "boolean" - }, - "op": { - "type": "string", - "enum": [ - "LessThan", - "LessThanOrEqual", - "MoreThan", - "MoreThanOrEqual", - "Equal", - "Like", - "Between", - "In", - "Any", - "IsNull" - ] - } - }, - "required": [ - "column" - ] - }, - "TIdentifiersColumns": { - "type": "string", - "enum": [ - "did", - "alias", - "provider" - ] - }, - "Order-TIdentifiersColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TIdentifiersColumns" - }, - "direction": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - "required": [ - "column", - "direction" - ] - }, - "PartialIdentifier": { - "type": "object", - "properties": { - "did": { - "type": "string", - "description": "Decentralized identifier" - }, - "alias": { - "type": "string", - "description": "Optional. Identifier alias. Can be used to reference an object in an external system" - }, - "provider": { - "type": "string", - "description": "Identifier provider name" - }, - "controllerKeyId": { - "type": "string", - "description": "Controller key id" - }, - "keys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IKey" - }, - "description": "Array of managed keys" - }, - "services": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IService" - }, - "description": "Array of services" - } - } - }, - "IKey": { - "type": "object", - "properties": { - "kid": { - "type": "string", - "description": "Key ID" - }, - "kms": { - "type": "string", - "description": "Key Management System" - }, - "type": { - "$ref": "#/components/schemas/TKeyType", - "description": "Key type" - }, - "publicKeyHex": { - "type": "string", - "description": "Public key" - }, - "privateKeyHex": { - "type": "string", - "description": "Optional. Private key" - }, - "meta": { - "anyOf": [ - { - "$ref": "#/components/schemas/KeyMetadata" - }, - { - "type": "null" - } - ], - "description": "Optional. Key metadata. This should be used to determine which algorithms are supported." - } - }, - "required": [ - "kid", - "kms", - "type", - "publicKeyHex" - ], - "description": "Cryptographic key" - }, - "TKeyType": { - "type": "string", - "enum": [ - "Ed25519", - "Secp256k1", - "X25519" - ], - "description": "Cryptographic key type" - }, - "KeyMetadata": { - "type": "object", - "properties": { - "algorithms": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "IService": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "ID" - }, - "type": { - "type": "string", - "description": "Service type" - }, - "serviceEndpoint": { - "type": "string", - "description": "Endpoint URL" - }, - "description": { - "type": "string", - "description": "Optional. Description" - } - }, - "required": [ - "id", - "type", - "serviceEndpoint" - ], - "description": "Identifier service" - }, - "FindMessagesArgs": { - "$ref": "#/components/schemas/FindArgs-TMessageColumns" - }, - "FindArgs-TMessageColumns": { - "type": "object", - "properties": { - "where": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Where-TMessageColumns" - } - }, - "order": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Order-TMessageColumns" - } - }, - "take": { - "type": "number" - }, - "skip": { - "type": "number" - } - } - }, - "Where-TMessageColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TMessageColumns" - }, - "value": { - "type": "array", - "items": { - "type": "string" - } - }, - "not": { - "type": "boolean" - }, - "op": { - "type": "string", - "enum": [ - "LessThan", - "LessThanOrEqual", - "MoreThan", - "MoreThanOrEqual", - "Equal", - "Like", - "Between", - "In", - "Any", - "IsNull" - ] - } - }, - "required": [ - "column" - ] - }, - "TMessageColumns": { - "type": "string", - "enum": [ - "from", - "to", - "id", - "createdAt", - "expiresAt", - "threadId", - "type", - "raw", - "replyTo", - "replyUrl" - ] - }, - "Order-TMessageColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TMessageColumns" - }, - "direction": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - "required": [ - "column", - "direction" - ] - }, - "IMessage": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique message ID" - }, - "type": { - "type": "string", - "description": "Message type" - }, - "createdAt": { - "type": "string", - "description": "Optional. Creation date (ISO 8601)" - }, - "expiresAt": { - "type": "string", - "description": "Optional. Expiration date (ISO 8601)" - }, - "threadId": { - "type": "string", - "description": "Optional. Thread ID" - }, - "raw": { - "type": "string", - "description": "Optional. Original message raw data" - }, - "data": { - "anyOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Optional. Parsed data" - }, - "replyTo": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Optional. List of DIDs to reply to" - }, - "replyUrl": { - "type": "string", - "description": "Optional. URL to post a reply message to" - }, - "from": { - "type": "string", - "description": "Optional. Sender DID" - }, - "to": { - "type": "string", - "description": "Optional. Recipient DID" - }, - "metaData": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/components/schemas/IMetaData" - } - }, - { - "type": "null" - } - ], - "description": "Optional. Array of message metadata" - }, - "credentials": { - "type": "array", - "items": { - "$ref": "#/components/schemas/VerifiableCredential" - }, - "description": "Optional. Array of attached verifiable credentials" - }, - "presentations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/VerifiablePresentation" - }, - "description": "Optional. Array of attached verifiable presentations" - } - }, - "required": [ - "id", - "type" - ], - "description": "Represents a DIDComm v1 message payload, with optionally decoded credentials and presentations." - }, - "IMetaData": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type" - }, - "value": { - "type": "string", - "description": "Optional. Value" - } - }, - "required": [ - "type" - ], - "description": "Message meta data" - }, - "VerifiableCredential": { - "type": "object", - "properties": { - "proof": { - "$ref": "#/components/schemas/ProofType" - }, - "issuer": { - "$ref": "#/components/schemas/IssuerType" - }, - "credentialSubject": { - "$ref": "#/components/schemas/CredentialSubject" - }, - "type": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] - }, - "@context": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] - }, - "issuanceDate": { - "type": "string" - }, - "expirationDate": { - "type": "string" - }, - "credentialStatus": { - "$ref": "#/components/schemas/CredentialStatus" - }, - "id": { - "type": "string" - } - }, - "required": [ - "@context", - "credentialSubject", - "issuanceDate", - "issuer", - "proof" - ], - "description": "Represents a signed Verifiable Credential payload (includes proof), using a JSON representation. See {@link https://www.w3.org/TR/vc-data-model/#credentials | VC data model }" - }, - "ProofType": { - "type": "object", - "properties": { - "type": { - "type": "string" - } - }, - "description": "A proof property of a Verifiable Credential or Presentation" - }, - "IssuerType": { - "anyOf": [ - { - "type": "object", - "properties": { - "id": { - "type": "string" - } - }, - "required": [ - "id" - ] - }, - { - "type": "string" - } - ], - "description": "The issuer of a Credential or the holder of a Presentation.\n\nThe value of the issuer property MUST be either a URI or an object containing an id property. It is RECOMMENDED that the URI in the issuer or its id be one which, if de-referenced, results in a document containing machine-readable information about the issuer that can be used to verify the information expressed in the credential.\n\nSee {@link https://www.w3.org/TR/vc-data-model/#issuer | Issuer data model }" - }, - "CredentialSubject": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - }, - "description": "The value of the credentialSubject property is defined as a set of objects that contain one or more properties that are each related to a subject of the verifiable credential. Each object MAY contain an id.\n\nSee {@link https://www.w3.org/TR/vc-data-model/#credential-subject | Credential Subject }" - }, - "CredentialStatus": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "description": "Used for the discovery of information about the current status of a verifiable credential, such as whether it is suspended or revoked. The precise contents of the credential status information is determined by the specific `credentialStatus` type definition, and varies depending on factors such as whether it is simple to implement or if it is privacy-enhancing.\n\nSee {@link https://www.w3.org/TR/vc-data-model/#status | Credential Status }" - }, - "VerifiablePresentation": { - "type": "object", - "properties": { - "proof": { - "$ref": "#/components/schemas/ProofType" - }, - "holder": { - "type": "string" - }, - "verifiableCredential": { - "type": "array", - "items": { - "$ref": "#/components/schemas/W3CVerifiableCredential" - } - }, - "type": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] - }, - "@context": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] - }, - "verifier": { - "type": "array", - "items": { - "type": "string" - } - }, - "issuanceDate": { - "type": "string" - }, - "expirationDate": { - "type": "string" - }, - "id": { - "type": "string" - } - }, - "required": [ - "@context", - "holder", - "proof" - ], - "description": "Represents a signed Verifiable Presentation (includes proof), using a JSON representation. See {@link https://www.w3.org/TR/vc-data-model/#presentations | VP data model }" - }, - "W3CVerifiableCredential": { - "anyOf": [ - { - "$ref": "#/components/schemas/VerifiableCredential" - }, - { - "$ref": "#/components/schemas/CompactJWT" - } - ], - "description": "Represents a signed Verifiable Credential (includes proof), in either JSON or compact JWT format. See {@link https://www.w3.org/TR/vc-data-model/#credentials | VC data model } \nSee {@link https://www.w3.org/TR/vc-data-model/#proof-formats | proof formats }" - }, - "CompactJWT": { - "type": "string", - "description": "Represents a Json Web Token in compact form. \"header.payload.signature\"" - }, - "FindCredentialsArgs": { - "$ref": "#/components/schemas/FindArgs-TCredentialColumns" - }, - "FindArgs-TCredentialColumns": { - "type": "object", - "properties": { - "where": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Where-TCredentialColumns" - } - }, - "order": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Order-TCredentialColumns" - } - }, - "take": { - "type": "number" - }, - "skip": { - "type": "number" - } - } - }, - "Where-TCredentialColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TCredentialColumns" - }, - "value": { - "type": "array", - "items": { - "type": "string" - } - }, - "not": { - "type": "boolean" - }, - "op": { - "type": "string", - "enum": [ - "LessThan", - "LessThanOrEqual", - "MoreThan", - "MoreThanOrEqual", - "Equal", - "Like", - "Between", - "In", - "Any", - "IsNull" - ] - } - }, - "required": [ - "column" - ] - }, - "TCredentialColumns": { - "type": "string", - "enum": [ - "context", - "type", - "id", - "issuer", - "subject", - "expirationDate", - "issuanceDate" - ] - }, - "Order-TCredentialColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TCredentialColumns" - }, - "direction": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - "required": [ - "column", - "direction" - ] - }, - "UniqueVerifiableCredential": { - "type": "object", - "properties": { - "hash": { - "type": "string" - }, - "verifiableCredential": { - "$ref": "#/components/schemas/VerifiableCredential" - } - }, - "required": [ - "hash", - "verifiableCredential" - ] - }, - "FindClaimsArgs": { - "$ref": "#/components/schemas/FindArgs-TClaimsColumns" - }, - "FindArgs-TClaimsColumns": { - "type": "object", - "properties": { - "where": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Where-TClaimsColumns" - } - }, - "order": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Order-TClaimsColumns" - } - }, - "take": { - "type": "number" - }, - "skip": { - "type": "number" - } - } - }, - "Where-TClaimsColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TClaimsColumns" - }, - "value": { - "type": "array", - "items": { - "type": "string" - } - }, - "not": { - "type": "boolean" - }, - "op": { - "type": "string", - "enum": [ - "LessThan", - "LessThanOrEqual", - "MoreThan", - "MoreThanOrEqual", - "Equal", - "Like", - "Between", - "In", - "Any", - "IsNull" - ] - } - }, - "required": [ - "column" - ] - }, - "TClaimsColumns": { - "type": "string", - "enum": [ - "context", - "credentialType", - "type", - "value", - "isObj", - "id", - "issuer", - "subject", - "expirationDate", - "issuanceDate" - ] - }, - "Order-TClaimsColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TClaimsColumns" - }, - "direction": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - "required": [ - "column", - "direction" - ] - }, - "FindPresentationsArgs": { - "$ref": "#/components/schemas/FindArgs-TPresentationColumns" - }, - "FindArgs-TPresentationColumns": { - "type": "object", - "properties": { - "where": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Where-TPresentationColumns" - } - }, - "order": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Order-TPresentationColumns" - } - }, - "take": { - "type": "number" - }, - "skip": { - "type": "number" - } - } - }, - "Where-TPresentationColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TPresentationColumns" - }, - "value": { - "type": "array", - "items": { - "type": "string" - } - }, - "not": { - "type": "boolean" - }, - "op": { - "type": "string", - "enum": [ - "LessThan", - "LessThanOrEqual", - "MoreThan", - "MoreThanOrEqual", - "Equal", - "Like", - "Between", - "In", - "Any", - "IsNull" - ] - } - }, - "required": [ - "column" - ] - }, - "TPresentationColumns": { - "type": "string", - "enum": [ - "context", - "type", - "id", - "holder", - "verifier", - "expirationDate", - "issuanceDate" - ] - }, - "Order-TPresentationColumns": { - "type": "object", - "properties": { - "column": { - "$ref": "#/components/schemas/TPresentationColumns" - }, - "direction": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - "required": [ - "column", - "direction" - ] - }, - "UniqueVerifiablePresentation": { - "type": "object", - "properties": { - "hash": { - "type": "string" - }, - "verifiablePresentation": { - "$ref": "#/components/schemas/VerifiablePresentation" - } - }, - "required": [ - "hash", - "verifiablePresentation" - ] - } - }, - "methods": { - "dataStoreORMGetIdentifiers": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindIdentifiersArgs" - }, - "returnType": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PartialIdentifier" - } - } - }, - "dataStoreORMGetIdentifiersCount": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindIdentifiersArgs" - }, - "returnType": { - "type": "number" - } - }, - "dataStoreORMGetMessages": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindMessagesArgs" - }, - "returnType": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IMessage" - } - } - }, - "dataStoreORMGetMessagesCount": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindMessagesArgs" - }, - "returnType": { - "type": "number" - } - }, - "dataStoreORMGetVerifiableCredentials": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindCredentialsArgs" - }, - "returnType": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UniqueVerifiableCredential" - } - } - }, - "dataStoreORMGetVerifiableCredentialsByClaims": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindClaimsArgs" - }, - "returnType": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UniqueVerifiableCredential" - } - } - }, - "dataStoreORMGetVerifiableCredentialsByClaimsCount": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindClaimsArgs" - }, - "returnType": { - "type": "number" - } - }, - "dataStoreORMGetVerifiableCredentialsCount": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindCredentialsArgs" - }, - "returnType": { - "type": "number" - } - }, - "dataStoreORMGetVerifiablePresentations": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindPresentationsArgs" - }, - "returnType": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UniqueVerifiablePresentation" - } - } - }, - "dataStoreORMGetVerifiablePresentationsCount": { - "description": "", - "arguments": { - "$ref": "#/components/schemas/FindPresentationsArgs" - }, - "returnType": { - "type": "number" - } - } - } - } - } -} \ No newline at end of file diff --git a/packages/data-store/src/__tests__/data-store-orm.test.ts b/packages/data-store/src/__tests__/data-store-orm.test.ts index 20cb9db00..9afaea935 100644 --- a/packages/data-store/src/__tests__/data-store-orm.test.ts +++ b/packages/data-store/src/__tests__/data-store-orm.test.ts @@ -1,14 +1,18 @@ import { Agent, + FindArgs, IDataStore, + IDataStoreORM, IMessage, TAgent, + TCredentialColumns, + TMessageColumns, + TPresentationColumns, VerifiableCredential, VerifiablePresentation, -} from '@veramo/core' +} from '../../../core/src' import { Connection, createConnection } from 'typeorm' -import { DataStoreORM, IDataStoreORM } from '../data-store-orm' -import { FindArgs, TCredentialColumns, TMessageColumns, TPresentationColumns } from '../types' +import { DataStoreORM } from '../data-store-orm' import { DataStore } from '../data-store' import { Entities } from '../index' import * as fs from 'fs' @@ -156,19 +160,19 @@ describe('@veramo/data-store queries', () => { let count = await makeAgent().dataStoreORMGetVerifiablePresentationsCount(args) expect(count).toBe(1) // search when authenticated as the issuer - let authenticatedDid = did1 + let authorizedDID = did1 - presentations = await makeAgent({ authenticatedDid }).dataStoreORMGetVerifiablePresentations(args) + presentations = await makeAgent({ authorizedDID }).dataStoreORMGetVerifiablePresentations(args) expect(presentations.length).toBe(1) - count = await makeAgent({ authenticatedDid }).dataStoreORMGetVerifiablePresentationsCount(args) + count = await makeAgent({ authorizedDID }).dataStoreORMGetVerifiablePresentationsCount(args) expect(count).toBe(1) // search when authenticated as another did - authenticatedDid = did3 + authorizedDID = did3 - presentations = await makeAgent({ authenticatedDid }).dataStoreORMGetVerifiablePresentations(args) + presentations = await makeAgent({ authorizedDID }).dataStoreORMGetVerifiablePresentations(args) expect(presentations.length).toBe(0) - count = await makeAgent({ authenticatedDid }).dataStoreORMGetVerifiablePresentationsCount(args) + count = await makeAgent({ authorizedDID }).dataStoreORMGetVerifiablePresentationsCount(args) expect(count).toBe(0) }) @@ -200,11 +204,11 @@ describe('@veramo/data-store queries', () => { }, ], } - const authenticatedDid = did1 + const authorizedDID = did1 - const messages = await makeAgent({ authenticatedDid }).dataStoreORMGetMessages(args) + const messages = await makeAgent({ authorizedDID }).dataStoreORMGetMessages(args) expect(messages.length).toBe(3) - const count = await makeAgent({ authenticatedDid }).dataStoreORMGetMessagesCount(args) + const count = await makeAgent({ authorizedDID }).dataStoreORMGetMessagesCount(args) expect(count).toBe(3) }) @@ -261,11 +265,11 @@ describe('@veramo/data-store queries', () => { expect(count).toBe(3) const credentials2 = await makeAgent({ - authenticatedDid: did3, + authorizedDID: did3, }).dataStoreORMGetVerifiableCredentialsByClaims({}) expect(credentials2.length).toBe(0) const count2 = await makeAgent({ - authenticatedDid: did3, + authorizedDID: did3, }).dataStoreORMGetVerifiableCredentialsByClaimsCount({}) expect(count2).toBe(0) }) @@ -281,18 +285,16 @@ describe('@veramo/data-store queries', () => { ], } - let presentations = await makeAgent({ authenticatedDid: did1 }).dataStoreORMGetVerifiablePresentations( - args, - ) + let presentations = await makeAgent({ authorizedDID: did1 }).dataStoreORMGetVerifiablePresentations(args) expect(presentations.length).toBe(1) - presentations = await makeAgent({ authenticatedDid: did2 }).dataStoreORMGetVerifiablePresentations(args) + presentations = await makeAgent({ authorizedDID: did2 }).dataStoreORMGetVerifiablePresentations(args) expect(presentations.length).toBe(1) - presentations = await makeAgent({ authenticatedDid: did4 }).dataStoreORMGetVerifiablePresentations(args) + presentations = await makeAgent({ authorizedDID: did4 }).dataStoreORMGetVerifiablePresentations(args) expect(presentations.length).toBe(1) - presentations = await makeAgent({ authenticatedDid: did3 }).dataStoreORMGetVerifiablePresentations(args) + presentations = await makeAgent({ authorizedDID: did3 }).dataStoreORMGetVerifiablePresentations(args) expect(presentations.length).toBe(0) }) diff --git a/packages/data-store/src/data-store-orm.ts b/packages/data-store/src/data-store-orm.ts index b3044705c..bb3f73bb6 100644 --- a/packages/data-store/src/data-store-orm.ts +++ b/packages/data-store/src/data-store-orm.ts @@ -1,86 +1,42 @@ import { + AuthorizedDIDContext, + FindArgs, IAgentPlugin, - IMessage, - VerifiableCredential, - VerifiablePresentation, - IPluginMethodMap, + IDataStoreORM, IIdentifier, + IMessage, + PartialIdentifier, + schema, + TClaimsColumns, + TCredentialColumns, + TIdentifiersColumns, + TMessageColumns, + TPresentationColumns, + UniqueVerifiableCredential, + UniqueVerifiablePresentation, + Where, } from '@veramo/core' -import { Message, createMessage } from './entities/message' +import { createMessage, Message } from './entities/message' import { Claim } from './entities/claim' import { Credential } from './entities/credential' import { Presentation } from './entities/presentation' import { Identifier } from './entities/identifier' import { + Any, + Between, + Brackets, Connection, - Not, + Equal, + In, + IsNull, LessThan, LessThanOrEqual, + Like, MoreThan, MoreThanOrEqual, - Equal, - Like, - Between, - In, - Any, - IsNull, + Not, SelectQueryBuilder, - Brackets, } from 'typeorm' -import { - Where, - TClaimsColumns, - TCredentialColumns, - TMessageColumns, - TPresentationColumns, - TIdentifiersColumns, - FindArgs, -} from './types' - -import { schema } from './' - -interface IContext { - authenticatedDid?: string -} - -export interface UniqueVerifiableCredential { - hash: string - verifiableCredential: VerifiableCredential -} - -export interface UniqueVerifiablePresentation { - hash: string - verifiablePresentation: VerifiablePresentation -} - -export type FindIdentifiersArgs = FindArgs -export type FindMessagesArgs = FindArgs -export type FindClaimsArgs = FindArgs -export type FindCredentialsArgs = FindArgs -export type FindPresentationsArgs = FindArgs -export type PartialIdentifier = Partial - -export interface IDataStoreORM extends IPluginMethodMap { - dataStoreORMGetIdentifiers(args: FindIdentifiersArgs, context: IContext): Promise> - dataStoreORMGetIdentifiersCount(args: FindIdentifiersArgs, context: IContext): Promise - dataStoreORMGetMessages(args: FindMessagesArgs, context: IContext): Promise> - dataStoreORMGetMessagesCount(args: FindMessagesArgs, context: IContext): Promise - dataStoreORMGetVerifiableCredentialsByClaims( - args: FindClaimsArgs, - context: IContext, - ): Promise> - dataStoreORMGetVerifiableCredentialsByClaimsCount(args: FindClaimsArgs, context: IContext): Promise - dataStoreORMGetVerifiableCredentials( - args: FindCredentialsArgs, - context: IContext, - ): Promise> - dataStoreORMGetVerifiableCredentialsCount(args: FindCredentialsArgs, context: IContext): Promise - dataStoreORMGetVerifiablePresentations( - args: FindPresentationsArgs, - context: IContext, - ): Promise> - dataStoreORMGetVerifiablePresentationsCount(args: FindPresentationsArgs, context: IContext): Promise -} export class DataStoreORM implements IAgentPlugin { readonly methods: IDataStoreORM @@ -111,7 +67,7 @@ export class DataStoreORM implements IAgentPlugin { private async identifiersQuery( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise> { const where = createWhereObject(args) let qb = (await this.dbConnection) @@ -126,7 +82,7 @@ export class DataStoreORM implements IAgentPlugin { async dataStoreORMGetIdentifiers( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise { const identifiers = await (await this.identifiersQuery(args, context)).getMany() return identifiers.map((i) => { @@ -146,7 +102,7 @@ export class DataStoreORM implements IAgentPlugin { async dataStoreORMGetIdentifiersCount( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise { return await (await this.identifiersQuery(args, context)).getCount() } @@ -155,7 +111,7 @@ export class DataStoreORM implements IAgentPlugin { private async messagesQuery( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise> { const where = createWhereObject(args) let qb = (await this.dbConnection) @@ -167,27 +123,30 @@ export class DataStoreORM implements IAgentPlugin { .leftJoinAndSelect('message.presentations', 'presentations') .where(where) qb = decorateQB(qb, 'message', args) - if (context.authenticatedDid) { + if (context.authorizedDID) { qb = qb.andWhere( new Brackets((qb) => { - qb.where('message.to = :ident', { ident: context.authenticatedDid }).orWhere( - 'message.from = :ident', - { - ident: context.authenticatedDid, - }, - ) + qb.where('message.to = :ident', { ident: context.authorizedDID }).orWhere('message.from = :ident', { + ident: context.authorizedDID, + }) }), ) } return qb } - async dataStoreORMGetMessages(args: FindArgs, context: IContext): Promise { + async dataStoreORMGetMessages( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { const messages = await (await this.messagesQuery(args, context)).getMany() return messages.map(createMessage) } - async dataStoreORMGetMessagesCount(args: FindArgs, context: IContext): Promise { + async dataStoreORMGetMessagesCount( + args: FindArgs, + context: AuthorizedDIDContext, + ): Promise { return (await this.messagesQuery(args, context)).getCount() } @@ -195,7 +154,7 @@ export class DataStoreORM implements IAgentPlugin { private async claimsQuery( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise> { const where = createWhereObject(args) let qb = (await this.dbConnection) @@ -206,13 +165,13 @@ export class DataStoreORM implements IAgentPlugin { .where(where) qb = decorateQB(qb, 'claim', args) qb = qb.leftJoinAndSelect('claim.credential', 'credential') - if (context.authenticatedDid) { + if (context.authorizedDID) { qb = qb.andWhere( new Brackets((qb) => { - qb.where('claim.subject = :ident', { ident: context.authenticatedDid }).orWhere( + qb.where('claim.subject = :ident', { ident: context.authorizedDID }).orWhere( 'claim.issuer = :ident', { - ident: context.authenticatedDid, + ident: context.authorizedDID, }, ) }), @@ -223,7 +182,7 @@ export class DataStoreORM implements IAgentPlugin { async dataStoreORMGetVerifiableCredentialsByClaims( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise> { // FIXME this breaks if args has order param const claims = await (await this.claimsQuery(args, context)).getMany() @@ -235,7 +194,7 @@ export class DataStoreORM implements IAgentPlugin { async dataStoreORMGetVerifiableCredentialsByClaimsCount( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise { return (await this.claimsQuery(args, context)).getCount() } @@ -244,7 +203,7 @@ export class DataStoreORM implements IAgentPlugin { private async credentialsQuery( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise> { const where = createWhereObject(args) let qb = (await this.dbConnection) @@ -254,13 +213,13 @@ export class DataStoreORM implements IAgentPlugin { .leftJoinAndSelect('credential.subject', 'subject') .where(where) qb = decorateQB(qb, 'credential', args) - if (context.authenticatedDid) { + if (context.authorizedDID) { qb = qb.andWhere( new Brackets((qb) => { - qb.where('credential.subject = :ident', { ident: context.authenticatedDid }).orWhere( + qb.where('credential.subject = :ident', { ident: context.authorizedDID }).orWhere( 'credential.issuer = :ident', { - ident: context.authenticatedDid, + ident: context.authorizedDID, }, ) }), @@ -271,7 +230,7 @@ export class DataStoreORM implements IAgentPlugin { async dataStoreORMGetVerifiableCredentials( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise> { const credentials = await (await this.credentialsQuery(args, context)).getMany() return credentials.map((vc) => ({ @@ -282,7 +241,7 @@ export class DataStoreORM implements IAgentPlugin { async dataStoreORMGetVerifiableCredentialsCount( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise { return (await this.credentialsQuery(args, context)).getCount() } @@ -291,7 +250,7 @@ export class DataStoreORM implements IAgentPlugin { private async presentationsQuery( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise> { const where = createWhereObject(args) let qb = (await this.dbConnection) @@ -302,12 +261,12 @@ export class DataStoreORM implements IAgentPlugin { .where(where) qb = decorateQB(qb, 'presentation', args) qb = addVerifierQuery(args, qb) - if (context.authenticatedDid) { + if (context.authorizedDID) { qb = qb.andWhere( new Brackets((qb) => { qb.where('verifier.did = :ident', { - ident: context.authenticatedDid, - }).orWhere('presentation.holder = :ident', { ident: context.authenticatedDid }) + ident: context.authorizedDID, + }).orWhere('presentation.holder = :ident', { ident: context.authorizedDID }) }), ) } @@ -316,7 +275,7 @@ export class DataStoreORM implements IAgentPlugin { async dataStoreORMGetVerifiablePresentations( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise> { const presentations = await (await this.presentationsQuery(args, context)).getMany() return presentations.map((vp) => ({ @@ -327,7 +286,7 @@ export class DataStoreORM implements IAgentPlugin { async dataStoreORMGetVerifiablePresentationsCount( args: FindArgs, - context: IContext, + context: AuthorizedDIDContext, ): Promise { return (await this.presentationsQuery(args, context)).getCount() } diff --git a/packages/data-store/src/did-discovery-provider.ts b/packages/data-store/src/did-discovery-provider.ts index a0718d5a1..2b18f2780 100644 --- a/packages/data-store/src/did-discovery-provider.ts +++ b/packages/data-store/src/did-discovery-provider.ts @@ -1,5 +1,4 @@ -import { IAgentContext } from '@veramo/core' -import { IDataStoreORM } from './data-store-orm' +import { IAgentContext, IDataStoreORM } from '@veramo/core' import { AbstractDidDiscoveryProvider, IDIDDiscoverMatch, diff --git a/packages/data-store/src/index.ts b/packages/data-store/src/index.ts index c6614297c..91122be00 100644 --- a/packages/data-store/src/index.ts +++ b/packages/data-store/src/index.ts @@ -13,18 +13,7 @@ export { DIDStore } from './identifier/did-store' export { KeyStore } from './identifier/key-store' export { PrivateKeyStore } from './identifier/private-key-store' export { DataStore } from './data-store' -export { - DataStoreORM, - IDataStoreORM, - FindClaimsArgs, - FindCredentialsArgs, - FindIdentifiersArgs, - FindMessagesArgs, - FindPresentationsArgs, - UniqueVerifiablePresentation, - UniqueVerifiableCredential, -} from './data-store-orm' -export * from './types' +export { DataStoreORM } from './data-store-orm' export { ProfileDiscoveryProvider } from './did-discovery-provider' import { Key, KeyType } from './entities/key' import { Identifier } from './entities/identifier' @@ -60,5 +49,3 @@ export { PreMigrationKey, } export { migrations } from './migrations' -const schema = require('../plugin.schema.json') -export { schema } diff --git a/packages/data-store/src/types.ts b/packages/data-store/src/types.ts deleted file mode 100644 index 265734d92..000000000 --- a/packages/data-store/src/types.ts +++ /dev/null @@ -1,69 +0,0 @@ -export interface Order { - column: TColumns - direction: 'ASC' | 'DESC' -} - -export interface Where { - column: TColumns - value?: string[] - not?: boolean - op?: - | 'LessThan' - | 'LessThanOrEqual' - | 'MoreThan' - | 'MoreThanOrEqual' - | 'Equal' - | 'Like' - | 'Between' - | 'In' - | 'Any' - | 'IsNull' -} - -export interface FindArgs { - where?: Where[] - order?: Order[] - take?: number - skip?: number -} - -export type TIdentifiersColumns = 'did' | 'alias' | 'provider' - -export type TMessageColumns = - | 'from' - | 'to' - | 'id' - | 'createdAt' - | 'expiresAt' - | 'threadId' - | 'type' - | 'raw' - | 'replyTo' - | 'replyUrl' -export type TCredentialColumns = - | 'context' - | 'type' - | 'id' - | 'issuer' - | 'subject' - | 'expirationDate' - | 'issuanceDate' -export type TClaimsColumns = - | 'context' - | 'credentialType' - | 'type' - | 'value' - | 'isObj' - | 'id' - | 'issuer' - | 'subject' - | 'expirationDate' - | 'issuanceDate' -export type TPresentationColumns = - | 'context' - | 'type' - | 'id' - | 'holder' - | 'verifier' - | 'expirationDate' - | 'issuanceDate' diff --git a/packages/selective-disclosure/package.json b/packages/selective-disclosure/package.json index 2c447f7c1..f1dc331ec 100644 --- a/packages/selective-disclosure/package.json +++ b/packages/selective-disclosure/package.json @@ -16,7 +16,6 @@ "dependencies": { "@veramo/core": "^3.1.0", "@veramo/credential-w3c": "^3.1.0", - "@veramo/data-store": "^3.1.0", "@veramo/did-jwt": "^3.1.0", "@veramo/message-handler": "^3.1.0", "debug": "^4.3.3", @@ -40,10 +39,7 @@ "repository": "git@github.com:uport-project/veramo.git", "author": "Simonas Karuzas ", "contributors": [ - { - "name": "Mircea Nistor", - "email": "mircea.nistor@mesh.xyz" - } + "Mircea Nistor mircea.nistor@mesh.xyz" ], "license": "Apache-2.0", "keywords": [] diff --git a/packages/selective-disclosure/src/action-handler.ts b/packages/selective-disclosure/src/action-handler.ts index 0488f41c4..e3b995d07 100644 --- a/packages/selective-disclosure/src/action-handler.ts +++ b/packages/selective-disclosure/src/action-handler.ts @@ -1,5 +1,13 @@ -import { IAgentContext, IAgentPlugin, IDIDManager, IKeyManager, VerifiablePresentation } from '@veramo/core' -import { FindArgs, IDataStoreORM, TClaimsColumns } from '@veramo/data-store' +import { + FindArgs, + IAgentContext, + IAgentPlugin, + IDataStoreORM, + IDIDManager, + IKeyManager, + TClaimsColumns, + VerifiablePresentation, +} from '@veramo/core' import { ICredentialIssuer } from '@veramo/credential-w3c' import { ICreateProfileCredentialsArgs, @@ -24,8 +32,8 @@ import { /** * This class adds support for creating - * {@link https://github.com/uport-project/specs/blob/develop/flows/selectivedisclosure.md | Selective Disclosure} requests - * and interpret the responses received. + * {@link https://github.com/uport-project/specs/blob/develop/flows/selectivedisclosure.md | Selective Disclosure} + * requests and interpret the responses received. * * This implementation of the uPort protocol uses * {@link https://www.w3.org/TR/vc-data-model/#presentations | W3C Presentation} @@ -49,9 +57,11 @@ export class SelectiveDisclosure implements IAgentPlugin { /** * Creates a Selective disclosure request, encoded as a JWT. * - * @remarks See {@link https://github.com/uport-project/specs/blob/develop/flows/selectivedisclosure.md | Selective Disclosure} + * @remarks See + * {@link https://github.com/uport-project/specs/blob/develop/flows/selectivedisclosure.md | Selective Disclosure} * - * @param args - The param object with the properties necessary to create the request. See {@link ISelectiveDisclosureRequest} + * @param args - The param object with the properties necessary to create the request. See + * {@link ISelectiveDisclosureRequest} * @param context - *RESERVED* This is filled by the framework when the method is called. * * @beta @@ -156,8 +166,7 @@ export class SelectiveDisclosure implements IAgentPlugin { /** * Validates a - * {@link https://github.com/uport-project/specs/blob/develop/flows/selectivedisclosure.md | Selective Disclosure response} - * encoded as a `Presentation` + * {@link https://github.com/uport-project/specs/blob/develop/flows/selectivedisclosure.md | Selective Disclosure response} encoded as a `Presentation` * * @param args - Contains the request and the response `Presentation` that needs to be checked. * @param context - *RESERVED* This is filled by the framework when the method is called. diff --git a/packages/selective-disclosure/src/types.ts b/packages/selective-disclosure/src/types.ts index a0d5aaf4a..4536fb221 100644 --- a/packages/selective-disclosure/src/types.ts +++ b/packages/selective-disclosure/src/types.ts @@ -1,11 +1,12 @@ import { IAgentContext, + IDataStoreORM, IDIDManager, IKeyManager, IPluginMethodMap, + UniqueVerifiableCredential, VerifiablePresentation, } from '@veramo/core' -import { IDataStoreORM, UniqueVerifiableCredential } from '@veramo/data-store' import { ICredentialIssuer } from '@veramo/credential-w3c' /** @@ -29,7 +30,8 @@ export interface Issuer { /** * Represents the Selective Disclosure request parameters. * - * @remarks See {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} + * @remarks See + * {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} * * @beta */ @@ -63,7 +65,8 @@ export interface ISelectiveDisclosureRequest { /** * Describes a particular credential that is being requested * - * @remarks See {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} + * @remarks See + * {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} * * @beta */ @@ -107,7 +110,8 @@ export interface ICredentialRequestInput { /** * The credentials that make up a response of a Selective Disclosure * - * @remarks See {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} + * @remarks See + * {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} * * @beta */ @@ -128,8 +132,9 @@ export interface IPresentationValidationResult { /** * Contains the parameters of a Selective Disclosure Request. * - * @remarks See {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} - * specs + * @remarks See + * {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} + * specs * * @beta */ @@ -140,8 +145,9 @@ export interface ICreateSelectiveDisclosureRequestArgs { /** * Encapsulates the params needed to gather credentials to fulfill a Selective disclosure request. * - * @remarks See {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} - * specs + * @remarks See + * {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} + * specs * * @beta */ @@ -207,7 +213,8 @@ export interface ICreateProfileCredentialsArgs { /** * Describes the interface of a Selective Disclosure plugin. * - * @remarks See {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} + * @remarks See + * {@link https://github.com/uport-project/specs/blob/develop/messages/sharereq.md | Selective Disclosure Request} * * @beta */ @@ -216,14 +223,17 @@ export interface ISelectiveDisclosure extends IPluginMethodMap { args: ICreateSelectiveDisclosureRequestArgs, context: IAgentContext, ): Promise + getVerifiableCredentialsForSdr( args: IGetVerifiableCredentialsForSdrArgs, context: IAgentContext, ): Promise> + validatePresentationAgainstSdr( args: IValidatePresentationAgainstSdrArgs, context: IAgentContext<{}>, ): Promise + createProfilePresentation( args: ICreateProfileCredentialsArgs, context: IAgentContext, diff --git a/packages/selective-disclosure/tsconfig.json b/packages/selective-disclosure/tsconfig.json index 0f18befc7..b5d66c689 100644 --- a/packages/selective-disclosure/tsconfig.json +++ b/packages/selective-disclosure/tsconfig.json @@ -8,7 +8,6 @@ "references": [ { "path": "../core" }, { "path": "../credential-w3c" }, - { "path": "../data-store" }, { "path": "../did-jwt" }, { "path": "../message-handler" } ] diff --git a/packages/tsconfig.json b/packages/tsconfig.json index fd9100e65..9b06cdefe 100644 --- a/packages/tsconfig.json +++ b/packages/tsconfig.json @@ -5,6 +5,7 @@ { "path": "credential-ld" }, { "path": "credential-w3c" }, { "path": "data-store" }, + { "path": "data-store-json" }, { "path": "did-comm" }, { "path": "did-discovery" }, { "path": "did-jwt" }, diff --git a/scripts/prepare-integration-tests.ts b/scripts/prepare-integration-tests.ts index 995e695d4..44e8ad7f8 100644 --- a/scripts/prepare-integration-tests.ts +++ b/scripts/prepare-integration-tests.ts @@ -38,11 +38,10 @@ for (const inputFolder of inputFolders) { const apiJsonFilePath = './temp/.api.json' const agentPlugins: Record> = { - core: ['IResolver', 'IDIDManager', 'IMessageHandler', 'IDataStore', 'IKeyManager'], + core: ['IResolver', 'IDIDManager', 'IMessageHandler', 'IDataStore', 'IDataStoreORM', 'IKeyManager'], 'credential-w3c': ['ICredentialIssuer'], 'selective-disclosure': ['ISelectiveDisclosure'], 'did-comm': ['IDIDComm'], - 'data-store': ['IDataStoreORM'], } interface RestMethod { diff --git a/scripts/prepare-react-test.sh b/scripts/prepare-react-test.sh new file mode 100644 index 000000000..865e0c712 --- /dev/null +++ b/scripts/prepare-react-test.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +projectRoot=$(pwd) +reactSampleDir="$projectRoot/__browser_tests__/react-sample" + +packages=( +"core" +"credential-ld" +"credential-w3c" +"data-store" +"data-store-json" +"did-comm" +"did-discovery" +"did-jwt" +"did-manager" +"did-provider-ethr" +"did-provider-key" +"did-provider-web" +"did-resolver" +"key-manager" +"kms-local" +"message-handler" +"remote-client" +"remote-server" +"selective-disclosure" +"url-handler" +"utils" +); + +for package in "${packages[@]}"; do + path="$projectRoot/packages/$package" + cd $path + yarn link + cd - +done + +cd $reactSampleDir + +for package in "${packages[@]}"; do + yarn link "@veramo/$package" +done + +cd - \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index ff0f75a17..95f05dbd0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3012,6 +3012,11 @@ dependencies: "@types/node" "*" +"@types/ungap__structured-clone@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@types/ungap__structured-clone/-/ungap__structured-clone-0.3.0.tgz#39ef89de1f04bb1920ed99e549b885331295c47d" + integrity sha512-eBWREUhVUGPze+bUW22AgUr05k8u+vETzuYdLYSvWqGTUe0KOf+zVnOB1qER5wMcw8V6D9Ar4DfJmVvD1yu0kQ== + "@types/url-parse@1.4.8": version "1.4.8" resolved "https://registry.yarnpkg.com/@types/url-parse/-/url-parse-1.4.8.tgz#c3825047efbca1295b7f1646f38203d9145130d6" @@ -3046,6 +3051,11 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== +"@ungap/structured-clone@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-0.3.4.tgz#f6d804e185591373992781361e4aa5bb81ffba35" + integrity sha512-TSVh8CpnwNAsPC5wXcIyh92Bv1gq6E9cNDeeLu7Z4h8V4/qWtXJp7y42qljRkqcpmsve1iozwv1wr+3BNdILCg== + JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -10990,6 +11000,11 @@ typeorm@0.2.45: yargs "^17.0.1" zen-observable-ts "^1.0.0" +typescript@4.5.5, typescript@~4.5.4: + version "4.5.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" + integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== + typescript@4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" @@ -11000,11 +11015,6 @@ typescript@~4.5.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.3.tgz#afaa858e68c7103317d89eb90c5d8906268d353c" integrity sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ== -typescript@~4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" - integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== - uglify-js@^3.1.4: version "3.13.10" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.10.tgz#a6bd0d28d38f592c3adb6b180ea6e07e1e540a8d"