diff --git a/examples/CHANGELOG.md b/examples/CHANGELOG.md index 8a0250278..60f468821 100644 --- a/examples/CHANGELOG.md +++ b/examples/CHANGELOG.md @@ -1,5 +1,18 @@ # @docknetwork/sdk-examples +## 0.13.0 + +### Minor Changes + +- Enable auto-conversion on verification method comparison + +### Patch Changes + +- Updated dependencies + - @docknetwork/dock-blockchain-modules@0.19.0 + - @docknetwork/dock-blockchain-api@0.15.0 + - @docknetwork/credential-sdk@0.30.0 + ## 0.12.0 ### Minor Changes diff --git a/examples/package.json b/examples/package.json index 2511bffef..3d8e1516a 100644 --- a/examples/package.json +++ b/examples/package.json @@ -2,7 +2,7 @@ "name": "@docknetwork/sdk-examples", "private": true, "type": "module", - "version": "0.12.0", + "version": "0.13.0", "scripts": { "bbs-dock-example": "babel-node ./bbs-dock.js", "claim-deduction-example": "babel-node ./claim-deduction.js", @@ -19,9 +19,9 @@ "lint": "eslint \"*.js\"" }, "dependencies": { - "@docknetwork/credential-sdk": "0.29.0", - "@docknetwork/dock-blockchain-api": "0.14.0", - "@docknetwork/dock-blockchain-modules": "0.18.0" + "@docknetwork/credential-sdk": "0.30.0", + "@docknetwork/dock-blockchain-api": "0.15.0", + "@docknetwork/dock-blockchain-modules": "0.19.0" }, "devDependencies": { "babel-eslint": "^10.1.0", diff --git a/packages/cheqd-blockchain-api/CHANGELOG.md b/packages/cheqd-blockchain-api/CHANGELOG.md index 42b86c64f..5dcbccaef 100644 --- a/packages/cheqd-blockchain-api/CHANGELOG.md +++ b/packages/cheqd-blockchain-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @docknetwork/cheqd-blockchain-api +## 0.24.0 + +### Minor Changes + +- Enable auto-conversion on verification method comparison + +### Patch Changes + +- Updated dependencies + - @docknetwork/credential-sdk@0.30.0 + ## 0.23.0 ### Minor Changes diff --git a/packages/cheqd-blockchain-api/package.json b/packages/cheqd-blockchain-api/package.json index 63fc72a9b..702e56f5e 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": "0.23.0", + "version": "0.24.0", "license": "MIT", "main": "./dist/esm/index.js", "type": "module", @@ -34,7 +34,7 @@ }, "dependencies": { "@cheqd/sdk": "cjs", - "@docknetwork/credential-sdk": "0.29.0" + "@docknetwork/credential-sdk": "0.30.0" }, "devDependencies": { "@babel/cli": "^7.24.1", diff --git a/packages/cheqd-blockchain-modules/CHANGELOG.md b/packages/cheqd-blockchain-modules/CHANGELOG.md index 1fd202bd6..a51906975 100644 --- a/packages/cheqd-blockchain-modules/CHANGELOG.md +++ b/packages/cheqd-blockchain-modules/CHANGELOG.md @@ -1,5 +1,16 @@ # @docknetwork/cheqd-blockchain-modules +## 0.21.0 + +### Minor Changes + +- Enable auto-conversion on verification method comparison + +### Patch Changes + +- Updated dependencies + - @docknetwork/credential-sdk@0.30.0 + ## 0.20.0 ### Minor Changes diff --git a/packages/cheqd-blockchain-modules/package.json b/packages/cheqd-blockchain-modules/package.json index 1c2aa2af6..41375fcdd 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": "0.20.0", + "version": "0.21.0", "type": "module", "license": "MIT", "main": "./dist/esm/index.js", @@ -33,7 +33,7 @@ "node": ">=18.0.0" }, "dependencies": { - "@docknetwork/credential-sdk": "0.29.0" + "@docknetwork/credential-sdk": "0.30.0" }, "devDependencies": { "@babel/cli": "^7.24.1", @@ -42,7 +42,7 @@ "@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": "0.23.0", + "@docknetwork/cheqd-blockchain-api": "0.24.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 107cc4cdd..0f7bb5f34 100644 --- a/packages/credential-sdk/CHANGELOG.md +++ b/packages/credential-sdk/CHANGELOG.md @@ -1,5 +1,11 @@ # @docknetwork/credential-sdk +## 0.30.0 + +### Minor Changes + +- Enable auto-conversion on verification method comparison + ## 0.29.0 ### Minor Changes diff --git a/packages/credential-sdk/package.json b/packages/credential-sdk/package.json index e98fb7733..98f8e9a49 100644 --- a/packages/credential-sdk/package.json +++ b/packages/credential-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@docknetwork/credential-sdk", - "version": "0.29.0", + "version": "0.30.0", "license": "MIT", "type": "module", "files": [ diff --git a/packages/credential-sdk/src/vc/helpers.js b/packages/credential-sdk/src/vc/helpers.js index cdf182def..ecff4e2b8 100644 --- a/packages/credential-sdk/src/vc/helpers.js +++ b/packages/credential-sdk/src/vc/helpers.js @@ -24,6 +24,16 @@ import { } from './crypto/constants'; import Bls12381BBDT16MACDock2024 from './crypto/Bls12381BBDT16MACDock2024'; import { DidKeypair } from '../keypairs'; +import { + CheqdMainnetVerificationMethodRef, + CheqdTestnetVerificationMethodRef, + CheqdVerificationMethodRef, + VerificationMethodRef, +} from '../types/did/document/verification-method-ref'; +import { + CheqdMainnetDid, + CheqdTestnetDid, +} from '../types/did/onchain/typed-did'; /** * @typedef {object} KeyDoc The Options to use in the function createUser. @@ -135,6 +145,46 @@ export function potentialToArray(a) { return a ? (Array.isArray(a) ? a : [a]) : []; } +/** + * Compares a verification method reference with a key ID to determine if they are equivalent. + * The function checks if the reference might start with `did:dock:`, and converts it to a `did:cheqd` format for comparison. + * + * @param {string} ref - The verification method reference to compare. + * @param {string} keyId - The key ID to compare against. + * @returns {boolean} - Returns `true` if the references are equivalent, `false` otherwise. + */ +export const verMethodRefsEqual = (ref, keyId) => { + // If the reference matches the key ID directly, return true. + if (ref === keyId) { + return true; + } + + try { + // Parse the key ID into a Cheqd verification method reference object. + let parsedKeyId = CheqdVerificationMethodRef.from(keyId); + const { + did: { + value: { constructor: CheqdDid }, + }, + } = parsedKeyId; + + // Check if the parsed key ID corresponds to the Cheqd Testnet or Mainnet and convert accordingly. + if (CheqdDid === CheqdTestnetDid) { + parsedKeyId = CheqdTestnetVerificationMethodRef.from(keyId); + } else if (CheqdDid === CheqdMainnetDid) { + parsedKeyId = CheqdMainnetVerificationMethodRef.from(keyId); + } else { + throw new Error(`Unknown DID type: \`${CheqdDid.name}\``); + } + + // Compare the parsed reference with the provided reference using `eq`. + return parsedKeyId.eq(VerificationMethodRef.from(ref)); + } catch (err) { + // If an error occurs during parsing or comparison, assume the references are not equivalent. + return false; + } +}; + export function getKeyFromDIDDocument(didDocument, didUrl) { // Ensure not already a key doc if ( @@ -151,7 +201,8 @@ export function getKeyFromDIDDocument(didDocument, didUrl) { ...potentialToArray(didDocument.keyAgreement), ...potentialToArray(didDocument.publicKey), ]; - return possibleKeys.filter((key) => key.id === didUrl)[0]; + + return possibleKeys.find((key) => verMethodRefsEqual(didUrl, key.id)); } /** diff --git a/packages/credential-sdk/tests/document.test.js b/packages/credential-sdk/tests/document.test.js index 6de937c5d..0787f6c97 100644 --- a/packages/credential-sdk/tests/document.test.js +++ b/packages/credential-sdk/tests/document.test.js @@ -5,11 +5,13 @@ import { DockDidValue, CheqdTestnetDidValue, CheqdMainnetDidValue, + DockDid, } from "../src/types/did"; import { CheqdMainnetDIDDocument, CheqdTestnetDIDDocument, DIDDocument, + VerificationMethodRef, } from "../src/types/did/document"; import { PublicKeyEd25519, @@ -20,6 +22,8 @@ import { } from "../src/types"; import { TypedUUID } from "../src/types/generic"; import { hexToU8a, maybeToCheqdPayloadOrJSON } from "../src/utils"; +import { verMethodRefsEqual } from "../src/vc"; +import { CheqdTestnetVerificationMethodRef } from "../src/types/did/document/verification-method-ref"; const RANDOM_PKS = [ "0xa1aa6a2058dd190e284a64e72adaf4e16a9ae9fbf0673d7575924e6aca3b21dc", @@ -129,6 +133,25 @@ describe("DID document workflow", () => { const CAP_INV = new VerificationRelationship().setCapabilityInvocation(); const KEY_AGR = new VerificationRelationship().setKeyAgreement(); + test(`\`verMethodRefsEqual\` method conversion works`, () => { + const dockVerMethod = new VerificationMethodRef(DockDid.random(), 3); + const cheqdVerMethod = + CheqdTestnetVerificationMethodRef.from(dockVerMethod); + + expect( + verMethodRefsEqual(String(dockVerMethod), String(cheqdVerMethod)) + ).toBe(true); + expect( + verMethodRefsEqual( + String(dockVerMethod), + String(new VerificationMethodRef(CheqdTestnetDid.random(), 3)) + ) + ).toBe(false); + expect( + verMethodRefsEqual(String(dockVerMethod), String(dockVerMethod)) + ).toBe(true); + }); + test(`\`DIDDocument.from\` works`, () => { const doc = { "@context": ["test"], diff --git a/packages/dock-blockchain-api/CHANGELOG.md b/packages/dock-blockchain-api/CHANGELOG.md index 42427bd1d..c459cb71f 100644 --- a/packages/dock-blockchain-api/CHANGELOG.md +++ b/packages/dock-blockchain-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @docknetwork/dock-blockchain-api +## 0.15.0 + +### Minor Changes + +- Enable auto-conversion on verification method comparison + +### Patch Changes + +- Updated dependencies + - @docknetwork/credential-sdk@0.30.0 + ## 0.14.0 ### Minor Changes diff --git a/packages/dock-blockchain-api/package.json b/packages/dock-blockchain-api/package.json index f22816687..3a08d7794 100644 --- a/packages/dock-blockchain-api/package.json +++ b/packages/dock-blockchain-api/package.json @@ -1,6 +1,6 @@ { "name": "@docknetwork/dock-blockchain-api", - "version": "0.14.0", + "version": "0.15.0", "license": "MIT", "main": "./dist/esm/index.js", "type": "module", @@ -89,7 +89,7 @@ "@polkadot/api": "10.12.4" }, "dependencies": { - "@docknetwork/credential-sdk": "0.29.0", + "@docknetwork/credential-sdk": "0.30.0", "@docknetwork/node-types": "^0.17.0", "@juanelas/base64": "^1.0.5", "@polkadot/api": "10.12.4", diff --git a/packages/dock-blockchain-modules/CHANGELOG.md b/packages/dock-blockchain-modules/CHANGELOG.md index 3809f29dd..6aa3db506 100644 --- a/packages/dock-blockchain-modules/CHANGELOG.md +++ b/packages/dock-blockchain-modules/CHANGELOG.md @@ -1,5 +1,16 @@ # @docknetwork/dock-blockchain-modules +## 0.19.0 + +### Minor Changes + +- Enable auto-conversion on verification method comparison + +### Patch Changes + +- Updated dependencies + - @docknetwork/credential-sdk@0.30.0 + ## 0.18.0 ### Minor Changes diff --git a/packages/dock-blockchain-modules/package.json b/packages/dock-blockchain-modules/package.json index 333aa85d7..c930ba1e8 100644 --- a/packages/dock-blockchain-modules/package.json +++ b/packages/dock-blockchain-modules/package.json @@ -1,6 +1,6 @@ { "name": "@docknetwork/dock-blockchain-modules", - "version": "0.18.0", + "version": "0.19.0", "license": "MIT", "type": "module", "main": "./dist/esm/index.js", @@ -33,7 +33,7 @@ "node": ">=18.0.0" }, "dependencies": { - "@docknetwork/credential-sdk": "0.29.0" + "@docknetwork/credential-sdk": "0.30.0" }, "devDependencies": { "@babel/cli": "^7.24.1", @@ -42,7 +42,7 @@ "@babel/plugin-syntax-import-attributes": "^7.25.6", "@babel/plugin-transform-modules-commonjs": "^7.24.1", "@babel/preset-env": "^7.24.3", - "@docknetwork/dock-blockchain-api": "0.14.0", + "@docknetwork/dock-blockchain-api": "0.15.0", "@rollup/plugin-alias": "^4.0.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^24.0.0",