From dc0a91ada8a77b5639c68c5cd775f0d56b3ee2a6 Mon Sep 17 00:00:00 2001 From: Sam Hellawell Date: Tue, 19 Aug 2025 01:05:55 +0100 Subject: [PATCH 1/4] Support DIDComm service endpoint --- examples/src/dock-did.js | 12 ++ .../cheqd-blockchain-modules/package.json | 2 +- .../src/modules/tests/did-module.js | 8 +- .../types/did/document/service-endpoint.js | 105 ++++++++++++++++-- .../src/types/generic/typed-array.js | 4 + .../src/types/generic/typed-struct.js | 9 ++ 6 files changed, 129 insertions(+), 11 deletions(-) diff --git a/examples/src/dock-did.js b/examples/src/dock-did.js index 7c73d9bc4..7d8d6c623 100644 --- a/examples/src/dock-did.js +++ b/examples/src/dock-did.js @@ -47,9 +47,21 @@ async function addServiceEndpoint() { const newEndpoint = new ServiceEndpoint(new LinkedDomains(), [ 'https://foo.example.com', ]); + + // Example of using the new DIDCommMessaging service type + const didCommEndpoint = new ServiceEndpoint('DIDCommMessaging', [ + 'https://didcomm.example.com', + ]); + + console.log('LinkedDomains endpoint type:', newEndpoint.types.constructor.name); + console.log('DIDCommMessaging endpoint type:', didCommEndpoint.types.constructor.name); + console.log('LinkedDomains endpoint toJSON:', newEndpoint.types.toJSON()); + console.log('DIDCommMessaging endpoint toJSON:', didCommEndpoint.types.toJSON()); + const doc = await didModule.getDocument(cheqdDID); doc.addServiceEndpoint(`${cheqdDID}#linked-domain`, newEndpoint); + doc.addServiceEndpoint(`${cheqdDID}#didcomm`, didCommEndpoint); return await didModule.updateDocument(doc, [didPair, controllerPair]); } diff --git a/packages/cheqd-blockchain-modules/package.json b/packages/cheqd-blockchain-modules/package.json index 36cd42ba8..a38b4e069 100644 --- a/packages/cheqd-blockchain-modules/package.json +++ b/packages/cheqd-blockchain-modules/package.json @@ -74,7 +74,7 @@ "lint": "eslint \"src/**/*.js\"", "docs": "rm -rf out && mkdir out && touch out/.nojekyll && jsdoc src -r -c ../../.jsdoc -d out/reference", "dev-node": "CHEQD_MNEMONIC=$CHEQD_MNEMONIC CHEQD_IMAGE_TAG=$CHEQD_IMAGE_TAG ../../scripts/run_cheqd_node_in_docker --dev --rpc-external --ws-external --rpc-cors=all", - "test": "NODE_ENV=production jest --verbose --forceExit ./tests/*", + "test": "NODE_ENV=production jest --verbose --forceExit ./tests/did-module.test.js", "test-with-node": "CHEQD_MNEMONIC=$CHEQD_MNEMONIC CHEQD_IMAGE_TAG=$CHEQD_IMAGE_TAG CHEQD_NETWORK=$CHEQD_NETWORK ../../scripts/with_cheqd_docker_test_node yarn test", "prepublishOnly": "yarn build" } diff --git a/packages/credential-sdk/src/modules/tests/did-module.js b/packages/credential-sdk/src/modules/tests/did-module.js index 06cd2aedd..44ea9ca4c 100644 --- a/packages/credential-sdk/src/modules/tests/did-module.js +++ b/packages/credential-sdk/src/modules/tests/did-module.js @@ -108,7 +108,7 @@ export default function generateDIDModuleTests( const service1 = new ServiceEndpoint('LinkedDomains', [ 'ServiceEndpoint#1', ]); - const service2 = new ServiceEndpoint('LinkedDomains', [ + const service2 = new ServiceEndpoint('DIDCommMessaging', [ 'ServiceEndpoint#2', ]); @@ -117,6 +117,10 @@ export default function generateDIDModuleTests( service2, }); + const documentJSON = document.toJSON(); + console.log('document service types:', documentJSON.service.map((s) => s.type)); + console.log('document', documentJSON); + await module.createDocument(document, didKeypair); expect((await module.getDocument(did)).eq(document)).toBe(true); @@ -131,7 +135,7 @@ export default function generateDIDModuleTests( const service1 = new ServiceEndpoint('LinkedDomains', [ 'ServiceEndpoint#1', ]); - const service2 = new ServiceEndpoint('LinkedDomains', [ + const service2 = new ServiceEndpoint('DIDCommMessaging', [ 'ServiceEndpoint#2', ]); diff --git a/packages/credential-sdk/src/types/did/document/service-endpoint.js b/packages/credential-sdk/src/types/did/document/service-endpoint.js index 3c0dd1224..52982d6ac 100644 --- a/packages/credential-sdk/src/types/did/document/service-endpoint.js +++ b/packages/credential-sdk/src/types/did/document/service-endpoint.js @@ -48,19 +48,54 @@ const LinkedDomainsPlaceholder = createPlaceholder((value) => { } }); +const DIDCommMessagingPlaceholder = createPlaceholder((value) => { + if ( + +maybeToNumber(value) === 0b0010 + || String(value) === 'DIDCommMessaging' + || value == null + ) { + return 0b0010; + } else { + throw new Error(`Unknown value \`${maybeToJSONString(value)}\``); + } +}); + export class ServiceEndpointType extends TypedEnum { static fromApi(value) { - return new this(value); + return this.from(value); } static fromJSON(value) { - return new this(value); + return this.from(value); } static from(value) { - return new this(value); + // Convert string values to the appropriate variant + if (typeof value === 'string') { + switch (value) { + case 'LinkedDomains': + // eslint-disable-next-line no-use-before-define + return new LinkedDomains(); + case 'DIDCommMessaging': + // eslint-disable-next-line no-use-before-define + return new DIDCommMessaging(); + default: + throw new Error(`Unknown service type: ${value}`); + } + } + + // If it's already an instance of a variant, return it + // eslint-disable-next-line no-use-before-define + if (value instanceof LinkedDomains || value instanceof DIDCommMessaging) { + return value; + } + + // Otherwise, try to create a LinkedDomains as default + // eslint-disable-next-line no-use-before-define + return new LinkedDomains(); } } + export class LinkedDomains extends ServiceEndpointType { static Type = 'LinkedDomains'; @@ -75,7 +110,22 @@ export class LinkedDomains extends ServiceEndpointType { } } -ServiceEndpointType.bindVariants(LinkedDomains); +export class DIDCommMessaging extends ServiceEndpointType { + static Type = 'DIDCommMessaging'; + + static Class = DIDCommMessagingPlaceholder; + + toJSON() { + return this.constructor.Type; + } + + apply(fn) { + return fn(this.constructor.Type); + } +} + +// Bind all variants at once to avoid conflicts +ServiceEndpointType.bindVariants(LinkedDomains, DIDCommMessaging); export class ServiceEndpointOrigin extends TypedString {} @@ -85,22 +135,53 @@ export class ServiceEndpointOrigins extends TypedArray { export class ServiceEndpoint extends TypedStruct { static Classes = { - types: LinkedDomains, + types: ServiceEndpointType, origins: ServiceEndpointOrigins, }; + + constructor(type, origins) { + // Handle string types by converting them to the appropriate service type + let serviceType; + if (typeof type === 'string') { + switch (type) { + case 'LinkedDomains': + serviceType = new LinkedDomains(); + break; + case 'DIDCommMessaging': + serviceType = new DIDCommMessaging(); + break; + default: + throw new Error(`Unknown service type: ${type}`); + } + } else if (type instanceof LinkedDomains || type instanceof DIDCommMessaging) { + serviceType = type; + } else { + throw new Error(`Invalid service type: ${type}`); + } + + super(serviceType, origins); + } } export class Service extends TypedStruct { static Classes = { id: ServiceEndpointId, - type: LinkedDomains, + type: ServiceEndpointType, serviceEndpoint: class ServiceEndpoints extends TypedArray { static Class = class ServiceEndpointString extends TypedString {}; }, }; static fromServiceEndpoint(id, serviceEndpoint) { - return new this(id, serviceEndpoint.type, serviceEndpoint.origins); + return new this(id, serviceEndpoint.types, serviceEndpoint.origins); + } + + toJSON() { + return { + id: this.id.toJSON(), + type: this.type.toJSON(), + serviceEndpoint: this.serviceEndpoint.toJSON(), + }; } // eslint-disable-next-line no-use-before-define @@ -122,7 +203,7 @@ export class CheqdService extends withFrom( ) { static Classes = { id: CheqdServiceEndpointId, - serviceType: LinkedDomains, + serviceType: ServiceEndpointType, serviceEndpoint: class ServiceEndpoints extends TypedArray { static Class = class ServiceEndpointString extends TypedString {}; }, @@ -131,6 +212,14 @@ export class CheqdService extends withFrom( static fromServiceEndpoint(id, serviceEndpoint) { return new this(id, serviceEndpoint.type, serviceEndpoint.origins); } + + toJSON() { + return { + id: this.id.toJSON(), + type: this.serviceType.toJSON(), + serviceEndpoint: this.serviceEndpoint.toJSON(), + }; + } } export class CheqdTestnetService extends withProp( diff --git a/packages/credential-sdk/src/types/generic/typed-array.js b/packages/credential-sdk/src/types/generic/typed-array.js index 737f6cddc..c594f28fa 100644 --- a/packages/credential-sdk/src/types/generic/typed-array.js +++ b/packages/credential-sdk/src/types/generic/typed-array.js @@ -94,6 +94,10 @@ class TypedArray extends withBase(ArrayWithoutPrototypeMethods) { removed: other.filter((item) => this.every((nextItem) => !maybeEq(nextItem, item))), }; } + + toJSON() { + return [...this].map((item) => (item.toJSON ? item.toJSON() : item)); + } } export default withEq( diff --git a/packages/credential-sdk/src/types/generic/typed-struct.js b/packages/credential-sdk/src/types/generic/typed-struct.js index 8a20c8290..c1ac6d923 100644 --- a/packages/credential-sdk/src/types/generic/typed-struct.js +++ b/packages/credential-sdk/src/types/generic/typed-struct.js @@ -74,6 +74,15 @@ class TypedStruct extends withBase(class StructBase {}) { toString() { return JSON.stringify(this.toJSON()); } + + toJSON() { + const result = {}; + for (const key of Object.keys(this)) { + const value = this[key]; + result[key] = value && typeof value.toJSON === 'function' ? value.toJSON() : value; + } + return result; + } } export default withEq( From de8b7b74959404b60f126ae5aa40fc168ced538f Mon Sep 17 00:00:00 2001 From: Sam Hellawell Date: Tue, 19 Aug 2025 01:06:36 +0100 Subject: [PATCH 2/4] Changeset --- examples/CHANGELOG.md | 13 +++++++++++++ examples/package.json | 8 ++++---- packages/cheqd-blockchain-api/CHANGELOG.md | 7 +++++++ packages/cheqd-blockchain-api/package.json | 6 +++--- packages/cheqd-blockchain-modules/CHANGELOG.md | 11 +++++++++++ packages/cheqd-blockchain-modules/package.json | 8 ++++---- packages/credential-sdk/CHANGELOG.md | 6 ++++++ packages/credential-sdk/package.json | 2 +- scripts/bench/CHANGELOG.md | 9 +++++++++ scripts/bench/package.json | 8 ++++---- 10 files changed, 62 insertions(+), 16 deletions(-) diff --git a/examples/CHANGELOG.md b/examples/CHANGELOG.md index c4024da9a..3eeec52d7 100644 --- a/examples/CHANGELOG.md +++ b/examples/CHANGELOG.md @@ -1,5 +1,18 @@ # @docknetwork/sdk-examples +## 0.19.0 + +### Minor Changes + +- Support DIDComm service endpoint + +### Patch Changes + +- Updated dependencies + - @docknetwork/cheqd-blockchain-modules@2.0.0 + - @docknetwork/credential-sdk@0.52.0 + - @docknetwork/cheqd-blockchain-api@2.0.0 + ## 0.18.10 ### Patch Changes diff --git a/examples/package.json b/examples/package.json index fbb5e09e4..db138af75 100644 --- a/examples/package.json +++ b/examples/package.json @@ -2,7 +2,7 @@ "name": "@docknetwork/sdk-examples", "private": true, "type": "module", - "version": "0.18.10", + "version": "0.19.0", "scripts": { "bbs-dock-example": "babel-node ./src/bbs-dock.js", "claim-deduction-example": "babel-node ./src/claim-deduction.js", @@ -18,9 +18,9 @@ "lint": "eslint \"src/**/*.js\"" }, "dependencies": { - "@docknetwork/credential-sdk": "0.51.0", - "@docknetwork/cheqd-blockchain-api": "1.0.0", - "@docknetwork/cheqd-blockchain-modules": "1.0.0" + "@docknetwork/credential-sdk": "0.52.0", + "@docknetwork/cheqd-blockchain-api": "2.0.0", + "@docknetwork/cheqd-blockchain-modules": "2.0.0" }, "devDependencies": { "babel-eslint": "^10.1.0", diff --git a/packages/cheqd-blockchain-api/CHANGELOG.md b/packages/cheqd-blockchain-api/CHANGELOG.md index 312574378..a3bab7d70 100644 --- a/packages/cheqd-blockchain-api/CHANGELOG.md +++ b/packages/cheqd-blockchain-api/CHANGELOG.md @@ -1,5 +1,12 @@ # @docknetwork/cheqd-blockchain-api +## 2.0.0 + +### Patch Changes + +- Updated dependencies + - @docknetwork/credential-sdk@0.52.0 + ## 1.0.0 ### Minor Changes diff --git a/packages/cheqd-blockchain-api/package.json b/packages/cheqd-blockchain-api/package.json index 6d7a0d722..d7d8aab5c 100644 --- a/packages/cheqd-blockchain-api/package.json +++ b/packages/cheqd-blockchain-api/package.json @@ -1,6 +1,6 @@ { "name": "@docknetwork/cheqd-blockchain-api", - "version": "1.0.0", + "version": "2.0.0", "license": "MIT", "main": "./dist/esm/index.js", "type": "module", @@ -32,7 +32,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@docknetwork/credential-sdk": "^0.51.0" + "@docknetwork/credential-sdk": "^0.52.0" }, "dependencies": { "@cheqd/sdk": "5.3.1", @@ -46,7 +46,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.24.1", "@babel/preset-env": "^7.24.3", "@comunica/types": "^1.0.0", - "@docknetwork/credential-sdk": "^0.51.0", + "@docknetwork/credential-sdk": "^0.52.0", "@helia/strings": "^3.0.1", "@rollup/plugin-alias": "^4.0.2", "@rollup/plugin-commonjs": "^24.0.0", diff --git a/packages/cheqd-blockchain-modules/CHANGELOG.md b/packages/cheqd-blockchain-modules/CHANGELOG.md index b102df6e0..cc41614b0 100644 --- a/packages/cheqd-blockchain-modules/CHANGELOG.md +++ b/packages/cheqd-blockchain-modules/CHANGELOG.md @@ -1,5 +1,16 @@ # @docknetwork/cheqd-blockchain-modules +## 2.0.0 + +### Minor Changes + +- Support DIDComm service endpoint + +### Patch Changes + +- Updated dependencies + - @docknetwork/credential-sdk@0.52.0 + ## 1.0.0 ### Minor Changes diff --git a/packages/cheqd-blockchain-modules/package.json b/packages/cheqd-blockchain-modules/package.json index a38b4e069..c4b75f928 100644 --- a/packages/cheqd-blockchain-modules/package.json +++ b/packages/cheqd-blockchain-modules/package.json @@ -1,6 +1,6 @@ { "name": "@docknetwork/cheqd-blockchain-modules", - "version": "1.0.0", + "version": "2.0.0", "type": "module", "license": "MIT", "main": "./dist/esm/index.js", @@ -32,7 +32,7 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@docknetwork/credential-sdk": "^0.51.0" + "@docknetwork/credential-sdk": "^0.52.0" }, "devDependencies": { "@babel/cli": "^7.24.1", @@ -41,8 +41,8 @@ "@babel/plugin-syntax-import-attributes": "^7.25.6", "@babel/plugin-transform-modules-commonjs": "^7.24.1", "@babel/preset-env": "^7.24.3", - "@docknetwork/cheqd-blockchain-api": "1.0.0", - "@docknetwork/credential-sdk": "^0.51.0", + "@docknetwork/cheqd-blockchain-api": "2.0.0", + "@docknetwork/credential-sdk": "^0.52.0", "@rollup/plugin-alias": "^4.0.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^24.0.0", diff --git a/packages/credential-sdk/CHANGELOG.md b/packages/credential-sdk/CHANGELOG.md index 6e2cf7b8e..164965b6e 100644 --- a/packages/credential-sdk/CHANGELOG.md +++ b/packages/credential-sdk/CHANGELOG.md @@ -1,5 +1,11 @@ # @docknetwork/credential-sdk +## 0.52.0 + +### Minor Changes + +- Support DIDComm service endpoint + ## 0.51.0 ### Minor Changes diff --git a/packages/credential-sdk/package.json b/packages/credential-sdk/package.json index a492a710c..2ccf2364c 100644 --- a/packages/credential-sdk/package.json +++ b/packages/credential-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@docknetwork/credential-sdk", - "version": "0.51.0", + "version": "0.52.0", "license": "MIT", "type": "module", "files": [ diff --git a/scripts/bench/CHANGELOG.md b/scripts/bench/CHANGELOG.md index ff42186ea..1e4fa3edc 100644 --- a/scripts/bench/CHANGELOG.md +++ b/scripts/bench/CHANGELOG.md @@ -1,5 +1,14 @@ # @docknetwork/benchmarks +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @docknetwork/cheqd-blockchain-modules@2.0.0 + - @docknetwork/credential-sdk@0.52.0 + - @docknetwork/cheqd-blockchain-api@2.0.0 + ## 0.2.0 ### Minor Changes diff --git a/scripts/bench/package.json b/scripts/bench/package.json index 9e4a02ea3..b38af970f 100644 --- a/scripts/bench/package.json +++ b/scripts/bench/package.json @@ -2,14 +2,14 @@ "name": "@docknetwork/benchmarks", "private": true, "type": "module", - "version": "0.2.0", + "version": "0.2.1", "scripts": { "bench": "babel-node src/main.js" }, "dependencies": { - "@docknetwork/cheqd-blockchain-api": "1.0.0", - "@docknetwork/cheqd-blockchain-modules": "1.0.0", - "@docknetwork/credential-sdk": "0.51.0", + "@docknetwork/cheqd-blockchain-api": "2.0.0", + "@docknetwork/cheqd-blockchain-modules": "2.0.0", + "@docknetwork/credential-sdk": "0.52.0", "@docknetwork/crypto-wasm-ts": "^0.63.0" }, "devDependencies": { From c980b01709e652d2b14eaba2d989932564a28dab Mon Sep 17 00:00:00 2001 From: Sam Hellawell Date: Tue, 19 Aug 2025 17:01:31 +0100 Subject: [PATCH 3/4] Fix service endpoint deserialization --- .../src/modules/tests/did-module.js | 4 --- .../src/types/did/document/index.js | 27 ++++++++++--------- .../types/did/document/service-endpoint.js | 12 ++++++++- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/packages/credential-sdk/src/modules/tests/did-module.js b/packages/credential-sdk/src/modules/tests/did-module.js index 44ea9ca4c..bf1181fbe 100644 --- a/packages/credential-sdk/src/modules/tests/did-module.js +++ b/packages/credential-sdk/src/modules/tests/did-module.js @@ -117,10 +117,6 @@ export default function generateDIDModuleTests( service2, }); - const documentJSON = document.toJSON(); - console.log('document service types:', documentJSON.service.map((s) => s.type)); - console.log('document', documentJSON); - await module.createDocument(document, didKeypair); expect((await module.getDocument(did)).eq(document)).toBe(true); diff --git a/packages/credential-sdk/src/types/did/document/index.js b/packages/credential-sdk/src/types/did/document/index.js index ec3c66e1f..f52263fa4 100644 --- a/packages/credential-sdk/src/types/did/document/index.js +++ b/packages/credential-sdk/src/types/did/document/index.js @@ -19,7 +19,7 @@ import { VerificationRelationship } from '../onchain/verification-relationship'; import { Service, CheqdService, - ServiceEndpointId, + ServiceEndpoint, CheqdTestnetService, CheqdMainnetService, } from './service-endpoint'; @@ -187,21 +187,15 @@ export class DIDDocument extends withFrom( const keysWithRefs = Array.isArray(keys) ? keys.map((key) => [[did, ++keyIdx], key]) : Object.entries(keys); - const serviceEndpointsWithRefs = Object.entries(serviceEndpoints).map( - ([ref, serviceEndpoint]) => { - try { - return [ServiceEndpointId.from(ref), serviceEndpoint]; - } catch { - return [ServiceEndpointId.from([did, ref]), serviceEndpoint]; - } - }, - ); for (const [keyRef, didKey] of keysWithRefs) { doc.addKey(keyRef, didKey); } - for (const [ref, serviceEndpoint] of serviceEndpointsWithRefs) { - doc.addServiceEndpoint(ref, serviceEndpoint); + if (serviceEndpoints) { + for (const [id, serviceEndpoint] of Object.entries(serviceEndpoints)) { + const serviceId = `${did}#${id}`; + doc.addServiceEndpoint(serviceId, serviceEndpoint); + } } return doc; @@ -450,6 +444,13 @@ export class CheqdDIDDocument extends TypedStruct { service, } = this; + // Convert CheqdService objects to Service objects + const convertedServices = [...service].map((cheqdService) => { + // Create a ServiceEndpoint object from the CheqdService data + const serviceEndpoint = new ServiceEndpoint(cheqdService.serviceType, cheqdService.serviceEndpoint); + return Service.fromServiceEndpoint(cheqdService.id, serviceEndpoint); + }); + const assertionMethodOffchainKeys = [...assertionMethod].filter( (keyRefOrKey) => keyRefOrKey.id, ); @@ -467,7 +468,7 @@ export class CheqdDIDDocument extends TypedStruct { alsoKnownAs, controller, verificationMethodWithOffchainKeys, - service, + convertedServices, authentication, assertionMethodOnlyRefs, keyAgreement, diff --git a/packages/credential-sdk/src/types/did/document/service-endpoint.js b/packages/credential-sdk/src/types/did/document/service-endpoint.js index 52982d6ac..c8e3cea17 100644 --- a/packages/credential-sdk/src/types/did/document/service-endpoint.js +++ b/packages/credential-sdk/src/types/did/document/service-endpoint.js @@ -209,8 +209,18 @@ export class CheqdService extends withFrom( }, }; + constructor(id, serviceType, serviceEndpoint) { + // Handle string serviceType values by converting them to ServiceEndpointType instances + let processedServiceType = serviceType; + if (typeof serviceType === 'string') { + processedServiceType = ServiceEndpointType.from(serviceType); + } + + super(id, processedServiceType, serviceEndpoint); + } + static fromServiceEndpoint(id, serviceEndpoint) { - return new this(id, serviceEndpoint.type, serviceEndpoint.origins); + return new this(id, serviceEndpoint.serviceType, serviceEndpoint.serviceEndpoint); } toJSON() { From 880e908cee6279a76b9be306258f18d71824a666 Mon Sep 17 00:00:00 2001 From: Sam Hellawell Date: Tue, 19 Aug 2025 18:13:52 +0100 Subject: [PATCH 4/4] Revert change --- packages/cheqd-blockchain-modules/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cheqd-blockchain-modules/package.json b/packages/cheqd-blockchain-modules/package.json index c4b75f928..43aa8c984 100644 --- a/packages/cheqd-blockchain-modules/package.json +++ b/packages/cheqd-blockchain-modules/package.json @@ -74,7 +74,7 @@ "lint": "eslint \"src/**/*.js\"", "docs": "rm -rf out && mkdir out && touch out/.nojekyll && jsdoc src -r -c ../../.jsdoc -d out/reference", "dev-node": "CHEQD_MNEMONIC=$CHEQD_MNEMONIC CHEQD_IMAGE_TAG=$CHEQD_IMAGE_TAG ../../scripts/run_cheqd_node_in_docker --dev --rpc-external --ws-external --rpc-cors=all", - "test": "NODE_ENV=production jest --verbose --forceExit ./tests/did-module.test.js", + "test": "NODE_ENV=production jest --verbose --forceExit ./tests/*", "test-with-node": "CHEQD_MNEMONIC=$CHEQD_MNEMONIC CHEQD_IMAGE_TAG=$CHEQD_IMAGE_TAG CHEQD_NETWORK=$CHEQD_NETWORK ../../scripts/with_cheqd_docker_test_node yarn test", "prepublishOnly": "yarn build" }