@docknetwork/wallet-sdk-wasm 1.7.6 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -7
- package/rollup.config.mjs +1 -0
- package/src/globals.d.ts +4 -1
- package/src/services/blockchain/cached-did-resolver.ts +4 -3
- package/src/services/blockchain/normalize-did-document.ts +73 -0
- package/src/services/blockchain/service.ts +0 -2
- package/src/services/credential/bbs-revocation.test.js +147 -0
- package/src/services/credential/bbs-revocation.ts +65 -18
- package/src/services/credential/config.ts +7 -0
- package/src/services/credential/index.test.js +261 -17
- package/src/services/credential/oid4vci.js +44 -0
- package/src/services/credential/oid4vci.test.js +162 -0
- package/src/services/credential/pex-helpers.js +77 -31
- package/src/services/credential/pex-helpers.test.js +4 -4
- package/src/services/credential/sd-jwt.ts +41 -5
- package/src/services/credential/service-rpc.js +6 -0
- package/src/services/credential/service.ts +171 -16
- package/src/services/credential/utils.js +3 -5
- package/src/services/delegation/index.android.js +3 -0
- package/src/services/delegation/index.ios.js +3 -0
- package/src/services/delegation/index.ts +1 -0
- package/src/services/delegation/service-rpc.ts +21 -0
- package/src/services/delegation/service.ts +59 -0
- package/src/services/edv/service-rpc.js +18 -2
- package/src/services/edv/service.test.js +327 -0
- package/src/services/edv/service.ts +103 -13
- package/src/services/index.js +2 -0
- package/src/wallet/rpc-storage-interface.js +9 -4
- package/lib/core/crypto.js +0 -45
- package/lib/core/crypto.mjs +0 -33
- package/lib/core/format-utils.js +0 -51
- package/lib/core/format-utils.mjs +0 -42
- package/lib/core/keychain.js +0 -61
- package/lib/core/keychain.mjs +0 -37
- package/lib/core/logger.js +0 -13
- package/lib/core/logger.mjs +0 -9
- package/lib/core/storage.js +0 -14
- package/lib/core/storage.mjs +0 -9
- package/lib/core/validation.js +0 -29
- package/lib/core/validation.mjs +0 -16
- package/lib/core/webview-logger.js +0 -49
- package/lib/core/webview-logger.mjs +0 -41
- package/lib/errors.js +0 -17
- package/lib/errors.mjs +0 -12
- package/lib/events.js +0 -18
- package/lib/events.mjs +0 -13
- package/lib/index.js +0 -146
- package/lib/index.mjs +0 -144
- package/lib/logger.js +0 -22
- package/lib/logger.mjs +0 -17
- package/lib/modules/event-manager.js +0 -46
- package/lib/modules/event-manager.mjs +0 -37
- package/lib/modules/network-manager.js +0 -80
- package/lib/modules/network-manager.mjs +0 -71
- package/lib/mrklt.js +0 -2
- package/lib/mrklt.mjs +0 -1
- package/lib/rpc-client.js +0 -83
- package/lib/rpc-client.mjs +0 -73
- package/lib/rpc-server.js +0 -97
- package/lib/rpc-server.mjs +0 -95
- package/lib/rpc-util.js +0 -113
- package/lib/rpc-util.mjs +0 -103
- package/lib/sandbox-rpc-server.js +0 -28
- package/lib/sandbox-rpc-server.mjs +0 -26
- package/lib/sandbox.js +0 -102
- package/lib/sandbox.mjs +0 -100
- package/lib/services/blockchain/cached-did-resolver.js +0 -113
- package/lib/services/blockchain/cached-did-resolver.mjs +0 -109
- package/lib/services/blockchain/configs.js +0 -7
- package/lib/services/blockchain/configs.mjs +0 -3
- package/lib/services/blockchain/index.android.js +0 -18
- package/lib/services/blockchain/index.android.mjs +0 -14
- package/lib/services/blockchain/index.ios.js +0 -18
- package/lib/services/blockchain/index.ios.mjs +0 -14
- package/lib/services/blockchain/index.js +0 -36
- package/lib/services/blockchain/index.mjs +0 -28
- package/lib/services/blockchain/service-rpc.js +0 -72
- package/lib/services/blockchain/service-rpc.mjs +0 -68
- package/lib/services/blockchain/service.js +0 -312
- package/lib/services/blockchain/service.mjs +0 -306
- package/lib/services/credential/bbs-revocation.js +0 -92
- package/lib/services/credential/bbs-revocation.mjs +0 -87
- package/lib/services/credential/bound-check.js +0 -77
- package/lib/services/credential/bound-check.mjs +0 -64
- package/lib/services/credential/config.js +0 -56
- package/lib/services/credential/config.mjs +0 -47
- package/lib/services/credential/delegatable-credentials.js +0 -300
- package/lib/services/credential/delegatable-credentials.mjs +0 -263
- package/lib/services/credential/index.android.js +0 -19
- package/lib/services/credential/index.android.mjs +0 -15
- package/lib/services/credential/index.ios.js +0 -19
- package/lib/services/credential/index.ios.mjs +0 -15
- package/lib/services/credential/index.js +0 -106
- package/lib/services/credential/index.mjs +0 -67
- package/lib/services/credential/pex-helpers.js +0 -333
- package/lib/services/credential/pex-helpers.mjs +0 -319
- package/lib/services/credential/range-proofs-example.js +0 -107
- package/lib/services/credential/range-proofs-example.mjs +0 -103
- package/lib/services/credential/sd-jwt.js +0 -214
- package/lib/services/credential/sd-jwt.mjs +0 -200
- package/lib/services/credential/service-rpc.js +0 -61
- package/lib/services/credential/service-rpc.mjs +0 -57
- package/lib/services/credential/service.js +0 -683
- package/lib/services/credential/service.mjs +0 -672
- package/lib/services/credential/utils.js +0 -103
- package/lib/services/credential/utils.mjs +0 -78
- package/lib/services/dids/config.js +0 -40
- package/lib/services/dids/config.mjs +0 -31
- package/lib/services/dids/index.android.js +0 -19
- package/lib/services/dids/index.android.mjs +0 -15
- package/lib/services/dids/index.ios.js +0 -19
- package/lib/services/dids/index.ios.mjs +0 -15
- package/lib/services/dids/index.js +0 -23
- package/lib/services/dids/index.mjs +0 -19
- package/lib/services/dids/keypair-utils.js +0 -142
- package/lib/services/dids/keypair-utils.mjs +0 -113
- package/lib/services/dids/service-rpc.js +0 -37
- package/lib/services/dids/service-rpc.mjs +0 -33
- package/lib/services/dids/service.js +0 -100
- package/lib/services/dids/service.mjs +0 -92
- package/lib/services/edv/configs.js +0 -25
- package/lib/services/edv/configs.mjs +0 -16
- package/lib/services/edv/hmac.js +0 -88
- package/lib/services/edv/hmac.mjs +0 -63
- package/lib/services/edv/index.android.js +0 -19
- package/lib/services/edv/index.android.mjs +0 -15
- package/lib/services/edv/index.ios.js +0 -19
- package/lib/services/edv/index.ios.mjs +0 -15
- package/lib/services/edv/index.js +0 -32
- package/lib/services/edv/index.mjs +0 -24
- package/lib/services/edv/service-rpc.js +0 -78
- package/lib/services/edv/service-rpc.mjs +0 -74
- package/lib/services/edv/service.js +0 -370
- package/lib/services/edv/service.mjs +0 -357
- package/lib/services/index.js +0 -94
- package/lib/services/index.mjs +0 -92
- package/lib/services/pex/config.js +0 -29
- package/lib/services/pex/config.mjs +0 -20
- package/lib/services/pex/index.android.js +0 -19
- package/lib/services/pex/index.android.mjs +0 -15
- package/lib/services/pex/index.ios.js +0 -19
- package/lib/services/pex/index.ios.mjs +0 -15
- package/lib/services/pex/index.js +0 -12
- package/lib/services/pex/index.mjs +0 -4
- package/lib/services/pex/service-rpc.js +0 -39
- package/lib/services/pex/service-rpc.mjs +0 -35
- package/lib/services/pex/service.js +0 -91
- package/lib/services/pex/service.mjs +0 -86
- package/lib/services/pex/tests/jest.config.js +0 -25
- package/lib/services/pex/tests/jest.config.mjs +0 -23
- package/lib/services/relay-service/configs.js +0 -45
- package/lib/services/relay-service/configs.mjs +0 -36
- package/lib/services/relay-service/index.android.js +0 -21
- package/lib/services/relay-service/index.android.mjs +0 -17
- package/lib/services/relay-service/index.ios.js +0 -21
- package/lib/services/relay-service/index.ios.mjs +0 -17
- package/lib/services/relay-service/index.js +0 -14
- package/lib/services/relay-service/index.mjs +0 -6
- package/lib/services/relay-service/service-rpc.js +0 -47
- package/lib/services/relay-service/service-rpc.mjs +0 -43
- package/lib/services/relay-service/service.js +0 -181
- package/lib/services/relay-service/service.mjs +0 -173
- package/lib/services/rpc-service-client.js +0 -36
- package/lib/services/rpc-service-client.mjs +0 -28
- package/lib/services/sandbox.js +0 -10
- package/lib/services/sandbox.mjs +0 -8
- package/lib/services/storage/configs.js +0 -7
- package/lib/services/storage/configs.mjs +0 -3
- package/lib/services/storage/index.android.js +0 -18
- package/lib/services/storage/index.android.mjs +0 -14
- package/lib/services/storage/index.ios.js +0 -18
- package/lib/services/storage/index.ios.mjs +0 -14
- package/lib/services/storage/index.js +0 -26
- package/lib/services/storage/index.mjs +0 -24
- package/lib/services/storage/service-rpc.js +0 -37
- package/lib/services/storage/service-rpc.mjs +0 -33
- package/lib/services/storage/service.js +0 -32
- package/lib/services/storage/service.mjs +0 -27
- package/lib/services/test-utils.js +0 -98
- package/lib/services/test-utils.mjs +0 -84
- package/lib/services/util-crypto/configs.js +0 -23
- package/lib/services/util-crypto/configs.mjs +0 -15
- package/lib/services/util-crypto/index.android.js +0 -19
- package/lib/services/util-crypto/index.android.mjs +0 -15
- package/lib/services/util-crypto/index.ios.js +0 -19
- package/lib/services/util-crypto/index.ios.mjs +0 -15
- package/lib/services/util-crypto/index.js +0 -14
- package/lib/services/util-crypto/index.mjs +0 -6
- package/lib/services/util-crypto/service-rpc.js +0 -42
- package/lib/services/util-crypto/service-rpc.mjs +0 -38
- package/lib/services/util-crypto/service.js +0 -108
- package/lib/services/util-crypto/service.mjs +0 -83
- package/lib/services/wallet/configs.js +0 -32
- package/lib/services/wallet/configs.mjs +0 -23
- package/lib/services/wallet/index.android.js +0 -21
- package/lib/services/wallet/index.android.mjs +0 -17
- package/lib/services/wallet/index.ios.js +0 -21
- package/lib/services/wallet/index.ios.mjs +0 -17
- package/lib/services/wallet/index.js +0 -17
- package/lib/services/wallet/index.mjs +0 -9
- package/lib/services/wallet/service-rpc.js +0 -33
- package/lib/services/wallet/service-rpc.mjs +0 -29
- package/lib/services/wallet/service.js +0 -62
- package/lib/services/wallet/service.mjs +0 -57
- package/lib/setup-nodejs.js +0 -93
- package/lib/setup-nodejs.mjs +0 -91
- package/lib/setup-tests.js +0 -92
- package/lib/setup-tests.mjs +0 -90
- package/lib/src/core/crypto.d.ts +0 -8
- package/lib/src/core/crypto.d.ts.map +0 -1
- package/lib/src/core/format-utils.d.ts +0 -26
- package/lib/src/core/format-utils.d.ts.map +0 -1
- package/lib/src/core/logger.d.ts +0 -3
- package/lib/src/core/logger.d.ts.map +0 -1
- package/lib/src/core/storage.d.ts +0 -8
- package/lib/src/core/storage.d.ts.map +0 -1
- package/lib/src/core/validation.d.ts +0 -6
- package/lib/src/core/validation.d.ts.map +0 -1
- package/lib/src/errors.d.ts +0 -7
- package/lib/src/errors.d.ts.map +0 -1
- package/lib/src/logger.d.ts +0 -5
- package/lib/src/logger.d.ts.map +0 -1
- package/lib/src/modules/event-manager.d.ts +0 -12
- package/lib/src/modules/event-manager.d.ts.map +0 -1
- package/lib/src/modules/network-manager.d.ts +0 -32
- package/lib/src/modules/network-manager.d.ts.map +0 -1
- package/lib/src/rpc-client.d.ts +0 -4
- package/lib/src/rpc-client.d.ts.map +0 -1
- package/lib/src/rpc-util.d.ts +0 -11
- package/lib/src/rpc-util.d.ts.map +0 -1
- package/lib/src/services/blockchain/cached-did-resolver.d.ts +0 -28
- package/lib/src/services/blockchain/cached-did-resolver.d.ts.map +0 -1
- package/lib/src/services/blockchain/cached-did-resolver.test.d.ts +0 -2
- package/lib/src/services/blockchain/cached-did-resolver.test.d.ts.map +0 -1
- package/lib/src/services/blockchain/configs.d.ts +0 -7
- package/lib/src/services/blockchain/configs.d.ts.map +0 -1
- package/lib/src/services/blockchain/service.d.ts +0 -155
- package/lib/src/services/blockchain/service.d.ts.map +0 -1
- package/lib/src/services/credential/bbs-revocation.d.ts +0 -10
- package/lib/src/services/credential/bbs-revocation.d.ts.map +0 -1
- package/lib/src/services/credential/bound-check.d.ts +0 -61
- package/lib/src/services/credential/bound-check.d.ts.map +0 -1
- package/lib/src/services/credential/bound-check.test.d.ts +0 -2
- package/lib/src/services/credential/bound-check.test.d.ts.map +0 -1
- package/lib/src/services/credential/config.d.ts +0 -10
- package/lib/src/services/credential/config.d.ts.map +0 -1
- package/lib/src/services/credential/delegatable-credentials.d.ts +0 -272
- package/lib/src/services/credential/delegatable-credentials.d.ts.map +0 -1
- package/lib/src/services/credential/index.d.ts +0 -35
- package/lib/src/services/credential/index.d.ts.map +0 -1
- package/lib/src/services/credential/pex-helpers.d.ts +0 -23
- package/lib/src/services/credential/pex-helpers.d.ts.map +0 -1
- package/lib/src/services/credential/range-proofs-example.d.ts +0 -2
- package/lib/src/services/credential/range-proofs-example.d.ts.map +0 -1
- package/lib/src/services/credential/sd-jwt.test.d.ts +0 -2
- package/lib/src/services/credential/sd-jwt.test.d.ts.map +0 -1
- package/lib/src/services/credential/service.d.ts +0 -313
- package/lib/src/services/credential/service.d.ts.map +0 -1
- package/lib/src/services/credential/utils.d.ts +0 -3
- package/lib/src/services/credential/utils.d.ts.map +0 -1
- package/lib/src/services/dids/config.d.ts +0 -24
- package/lib/src/services/dids/config.d.ts.map +0 -1
- package/lib/src/services/dids/keypair-utils.d.ts +0 -15
- package/lib/src/services/dids/keypair-utils.d.ts.map +0 -1
- package/lib/src/services/dids/service-rpc.d.ts +0 -11
- package/lib/src/services/dids/service-rpc.d.ts.map +0 -1
- package/lib/src/services/dids/service.d.ts +0 -70
- package/lib/src/services/dids/service.d.ts.map +0 -1
- package/lib/src/services/edv/configs.d.ts +0 -12
- package/lib/src/services/edv/configs.d.ts.map +0 -1
- package/lib/src/services/edv/hmac.d.ts +0 -29
- package/lib/src/services/edv/hmac.d.ts.map +0 -1
- package/lib/src/services/edv/service.d.ts +0 -229
- package/lib/src/services/edv/service.d.ts.map +0 -1
- package/lib/src/services/pex/config.d.ts +0 -21
- package/lib/src/services/pex/config.d.ts.map +0 -1
- package/lib/src/services/pex/service.d.ts +0 -21
- package/lib/src/services/pex/service.d.ts.map +0 -1
- package/lib/src/services/relay-service/configs.d.ts +0 -35
- package/lib/src/services/relay-service/configs.d.ts.map +0 -1
- package/lib/src/services/relay-service/service-rpc.d.ts +0 -12
- package/lib/src/services/relay-service/service-rpc.d.ts.map +0 -1
- package/lib/src/services/relay-service/service.d.ts +0 -159
- package/lib/src/services/relay-service/service.d.ts.map +0 -1
- package/lib/src/services/rpc-service-client.d.ts +0 -7
- package/lib/src/services/rpc-service-client.d.ts.map +0 -1
- package/lib/src/services/storage/configs.d.ts +0 -2
- package/lib/src/services/storage/configs.d.ts.map +0 -1
- package/lib/src/services/storage/index.d.ts +0 -2
- package/lib/src/services/storage/index.d.ts.map +0 -1
- package/lib/src/services/storage/service-rpc.d.ts +0 -9
- package/lib/src/services/storage/service-rpc.d.ts.map +0 -1
- package/lib/src/services/storage/service.d.ts +0 -10
- package/lib/src/services/storage/service.d.ts.map +0 -1
- package/lib/src/services/util-crypto/configs.d.ts +0 -5
- package/lib/src/services/util-crypto/configs.d.ts.map +0 -1
- package/lib/src/services/util-crypto/index.d.ts +0 -2
- package/lib/src/services/util-crypto/index.d.ts.map +0 -1
- package/lib/src/services/util-crypto/service.d.ts +0 -10
- package/lib/src/services/util-crypto/service.d.ts.map +0 -1
- package/lib/src/services/wallet/configs.d.ts +0 -13
- package/lib/src/services/wallet/configs.d.ts.map +0 -1
- package/lib/src/services/wallet/service.d.ts +0 -13
- package/lib/src/services/wallet/service.d.ts.map +0 -1
- package/lib/src/types.d.ts +0 -12
- package/lib/src/types.d.ts.map +0 -1
- package/lib/src/wallet/memory-storage-interface.d.ts +0 -31
- package/lib/src/wallet/memory-storage-interface.d.ts.map +0 -1
- package/lib/src/wallet/memory-storage-wallet.d.ts +0 -6
- package/lib/src/wallet/memory-storage-wallet.d.ts.map +0 -1
- package/lib/src/wallet/rpc-storage-interface.d.ts +0 -32
- package/lib/src/wallet/rpc-storage-interface.d.ts.map +0 -1
- package/lib/src/wallet/rpc-storage-wallet.d.ts +0 -6
- package/lib/src/wallet/rpc-storage-wallet.d.ts.map +0 -1
- package/lib/test-utils.js +0 -46
- package/lib/test-utils.mjs +0 -38
- package/lib/tsconfig.tsbuildinfo +0 -1
- package/lib/types.js +0 -7
- package/lib/types.mjs +0 -3
- package/lib/wallet/memory-storage-interface.js +0 -101
- package/lib/wallet/memory-storage-interface.mjs +0 -95
- package/lib/wallet/memory-storage-wallet.js +0 -30
- package/lib/wallet/memory-storage-wallet.mjs +0 -24
- package/lib/wallet/rpc-storage-interface.js +0 -134
- package/lib/wallet/rpc-storage-interface.mjs +0 -128
- package/lib/wallet/rpc-storage-wallet.js +0 -46
- package/lib/wallet/rpc-storage-wallet.mjs +0 -40
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@docknetwork/wallet-sdk-wasm",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"license": "https://github.com/docknetwork/wallet-sdk/LICENSE",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
"directory": "packages/wasm"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
-
"prepublishOnly": "npm run build",
|
|
12
11
|
"build:babel": "rm -rf lib && NODE_ENV=production babel src/ --out-dir lib --copy-files",
|
|
13
12
|
"build": "rm -rf lib && rollup -c && node ../../scripts/fix-build-imports.js ./lib",
|
|
14
13
|
"docs": "node generate-docs.js",
|
|
@@ -21,12 +20,12 @@
|
|
|
21
20
|
"@astronautlabs/jsonpath": "^1.1.2",
|
|
22
21
|
"@cedar-policy/cedar-wasm": "^4.5.0",
|
|
23
22
|
"@cosmjs/proto-signing": "^0.32.4",
|
|
24
|
-
"@docknetwork/cheqd-blockchain-api": "4.
|
|
25
|
-
"@docknetwork/cheqd-blockchain-modules": "4.0.
|
|
26
|
-
"@docknetwork/credential-sdk": "0.54.
|
|
23
|
+
"@docknetwork/cheqd-blockchain-api": "4.2.2",
|
|
24
|
+
"@docknetwork/cheqd-blockchain-modules": "4.0.9",
|
|
25
|
+
"@docknetwork/credential-sdk": "0.54.19",
|
|
27
26
|
"@docknetwork/universal-wallet": "^2.0.1",
|
|
28
|
-
"@docknetwork/vc-delegation-engine": "1.0.
|
|
29
|
-
"@docknetwork/wallet-sdk-dids": "^1.
|
|
27
|
+
"@docknetwork/vc-delegation-engine": "1.0.4",
|
|
28
|
+
"@docknetwork/wallet-sdk-dids": "^1.9.0",
|
|
30
29
|
"@noble/hashes": "1.8.0",
|
|
31
30
|
"@scure/bip39": "^1.6.0",
|
|
32
31
|
"@sd-jwt/crypto-nodejs": "^0.15.0",
|
package/rollup.config.mjs
CHANGED
package/src/globals.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
// CryptoKey is available globally in Node.js 15+ but TypeScript needs
|
|
2
2
|
// the DOM lib to recognize it. Declare it here to avoid pulling in all DOM types.
|
|
3
|
-
|
|
3
|
+
declare global {
|
|
4
|
+
type CryptoKey = import('crypto').webcrypto.CryptoKey;
|
|
5
|
+
}
|
|
6
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { storageService } from '../storage';
|
|
2
|
+
import { normalizeDIDDocument } from './normalize-did-document';
|
|
2
3
|
|
|
3
4
|
interface CacheEntry {
|
|
4
5
|
value: any;
|
|
@@ -76,7 +77,7 @@ export class CachedDIDResolver {
|
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
console.log('Cache miss, resolving:', did);
|
|
79
|
-
const result = await this.router.resolve(did);
|
|
80
|
+
const result = normalizeDIDDocument(await this.router.resolve(did));
|
|
80
81
|
|
|
81
82
|
await this.setCacheEntry(result.id, {
|
|
82
83
|
value: result,
|
|
@@ -90,8 +91,8 @@ export class CachedDIDResolver {
|
|
|
90
91
|
private async refreshInBackground(did: string): Promise<void> {
|
|
91
92
|
try {
|
|
92
93
|
console.log('Refreshing cache in background for:', did);
|
|
93
|
-
const result = await this.router.resolve(did);
|
|
94
|
-
|
|
94
|
+
const result = normalizeDIDDocument(await this.router.resolve(did));
|
|
95
|
+
|
|
95
96
|
await this.setCacheEntry(did, {
|
|
96
97
|
value: result,
|
|
97
98
|
id: did,
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// The universal resolver returns cheqd offchain (BBS+) keys as stringified
|
|
2
|
+
// blobs in the relationship arrays instead of objects in verificationMethod,
|
|
3
|
+
// leaving publicKeyBase58 unreachable. Lift them out, matching the on-chain
|
|
4
|
+
// resolver's CheqdDIDDocument.toDIDDocument behaviour.
|
|
5
|
+
|
|
6
|
+
const RELATIONSHIP_PROPS = [
|
|
7
|
+
'assertionMethod',
|
|
8
|
+
'authentication',
|
|
9
|
+
'capabilityInvocation',
|
|
10
|
+
'capabilityDelegation',
|
|
11
|
+
'keyAgreement',
|
|
12
|
+
] as const;
|
|
13
|
+
|
|
14
|
+
function parseInlineVerificationMethod(entry: string): any | null {
|
|
15
|
+
let parsed: unknown = entry;
|
|
16
|
+
|
|
17
|
+
// cheqd offchain keys are double-JSON-stringified, so unwrap up to twice.
|
|
18
|
+
for (let i = 0; i < 2 && typeof parsed === 'string'; i++) {
|
|
19
|
+
try {
|
|
20
|
+
parsed = JSON.parse(parsed);
|
|
21
|
+
} catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (parsed && typeof parsed === 'object' && typeof (parsed as any).id === 'string') {
|
|
27
|
+
return parsed;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function normalizeDIDDocument(doc: any): any {
|
|
34
|
+
if (!doc || typeof doc !== 'object') {
|
|
35
|
+
return doc;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const liftedMethods: any[] = [];
|
|
39
|
+
|
|
40
|
+
for (const prop of RELATIONSHIP_PROPS) {
|
|
41
|
+
if (!Array.isArray(doc[prop])) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
doc[prop] = doc[prop].map((entry: any) => {
|
|
46
|
+
if (typeof entry !== 'string') {
|
|
47
|
+
return entry;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const method = parseInlineVerificationMethod(entry);
|
|
51
|
+
if (!method) {
|
|
52
|
+
return entry;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
liftedMethods.push(method);
|
|
56
|
+
return method.id;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (liftedMethods.length) {
|
|
61
|
+
const existing = Array.isArray(doc.verificationMethod)
|
|
62
|
+
? doc.verificationMethod
|
|
63
|
+
: [];
|
|
64
|
+
const existingIds = new Set(existing.map((method: any) => method?.id));
|
|
65
|
+
const newMethods = liftedMethods.filter(
|
|
66
|
+
method => !existingIds.has(method.id),
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
doc.verificationMethod = [...existing, ...newMethods];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return doc;
|
|
73
|
+
}
|
|
@@ -236,11 +236,9 @@ export class BlockchainService {
|
|
|
236
236
|
});
|
|
237
237
|
Logger.info(`Cheqd initialized at: ${checkdApiUrl}`);
|
|
238
238
|
} catch (err) {
|
|
239
|
-
debugger
|
|
240
239
|
Logger.error(`Failed to initialize cheqd at: ${checkdApiUrl}`, err);
|
|
241
240
|
}
|
|
242
241
|
|
|
243
|
-
|
|
244
242
|
// Re-create the resolver with the new blockchain connection
|
|
245
243
|
this._resolver = this.createDIDResolver(true);
|
|
246
244
|
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import {initializeWasm} from '@docknetwork/crypto-wasm-ts/lib/index';
|
|
2
|
+
|
|
3
|
+
const {blockchainService} = require('../blockchain/service');
|
|
4
|
+
const {
|
|
5
|
+
getWitnessDetails,
|
|
6
|
+
clearWitnessCache,
|
|
7
|
+
getWitnessCacheTTL,
|
|
8
|
+
setWitnessCacheTTL,
|
|
9
|
+
} = require('./bbs-revocation');
|
|
10
|
+
|
|
11
|
+
const mockAccumulatorResult = {
|
|
12
|
+
accumulated: {bytes: new Uint8Array([1, 2, 3])},
|
|
13
|
+
keyRef: ['key1', 1],
|
|
14
|
+
lastModified: 100,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const mockPublicKeyResult = {
|
|
18
|
+
bytes: new Uint8Array([4, 5, 6]),
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const mockHistoryResult = {
|
|
22
|
+
updates: [{id: {toString: () => '1'}}],
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const createCredential = (statusId = 'dock:accumulator:test-registry-1') => ({
|
|
26
|
+
credentialStatus: {
|
|
27
|
+
id: statusId,
|
|
28
|
+
revocationId: '42',
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const membershipWitness = JSON.stringify({
|
|
33
|
+
witness: '0xaabbcc',
|
|
34
|
+
blockNo: '1',
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
describe('bbs-revocation witness cache', () => {
|
|
38
|
+
let originalModules;
|
|
39
|
+
let originalGetTypes;
|
|
40
|
+
|
|
41
|
+
beforeAll(async () => {
|
|
42
|
+
await initializeWasm();
|
|
43
|
+
originalModules = blockchainService.modules;
|
|
44
|
+
originalGetTypes = blockchainService.getTypesForDIDOrAccumulator;
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
afterAll(() => {
|
|
48
|
+
blockchainService.modules = originalModules;
|
|
49
|
+
blockchainService.getTypesForDIDOrAccumulator = originalGetTypes;
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
clearWitnessCache();
|
|
54
|
+
setWitnessCacheTTL(120_000); // Enable cache for unit tests
|
|
55
|
+
|
|
56
|
+
blockchainService.modules = {
|
|
57
|
+
accumulator: {
|
|
58
|
+
getAccumulator: jest.fn().mockResolvedValue(mockAccumulatorResult),
|
|
59
|
+
getPublicKey: jest.fn().mockResolvedValue(mockPublicKeyResult),
|
|
60
|
+
accumulatorHistory: jest.fn().mockResolvedValue(mockHistoryResult),
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
blockchainService.getTypesForDIDOrAccumulator = jest.fn().mockReturnValue({
|
|
65
|
+
AccumulatorId: {from: jest.fn().mockReturnValue('acc-id')},
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('should call blockchain on first request', async () => {
|
|
70
|
+
const credential = createCredential();
|
|
71
|
+
await getWitnessDetails(credential, membershipWitness);
|
|
72
|
+
|
|
73
|
+
expect(
|
|
74
|
+
blockchainService.modules.accumulator.getAccumulator,
|
|
75
|
+
).toHaveBeenCalledTimes(1);
|
|
76
|
+
expect(
|
|
77
|
+
blockchainService.modules.accumulator.getPublicKey,
|
|
78
|
+
).toHaveBeenCalledTimes(1);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('should return cached result on second call with same credential', async () => {
|
|
82
|
+
const credential = createCredential();
|
|
83
|
+
|
|
84
|
+
const result1 = await getWitnessDetails(credential, membershipWitness);
|
|
85
|
+
const result2 = await getWitnessDetails(credential, membershipWitness);
|
|
86
|
+
|
|
87
|
+
expect(result1).toEqual(result2);
|
|
88
|
+
expect(
|
|
89
|
+
blockchainService.modules.accumulator.getAccumulator,
|
|
90
|
+
).toHaveBeenCalledTimes(1);
|
|
91
|
+
expect(
|
|
92
|
+
blockchainService.modules.accumulator.getPublicKey,
|
|
93
|
+
).toHaveBeenCalledTimes(1);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it('should not share cache between different credentials', async () => {
|
|
97
|
+
const credential1 = createCredential('dock:accumulator:registry-1');
|
|
98
|
+
const credential2 = createCredential('dock:accumulator:registry-2');
|
|
99
|
+
|
|
100
|
+
await getWitnessDetails(credential1, membershipWitness);
|
|
101
|
+
await getWitnessDetails(credential2, membershipWitness);
|
|
102
|
+
|
|
103
|
+
expect(
|
|
104
|
+
blockchainService.modules.accumulator.getAccumulator,
|
|
105
|
+
).toHaveBeenCalledTimes(2);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it('should refresh cache after TTL expires', async () => {
|
|
109
|
+
const credential = createCredential();
|
|
110
|
+
const originalTTL = getWitnessCacheTTL();
|
|
111
|
+
|
|
112
|
+
await getWitnessDetails(credential, membershipWitness);
|
|
113
|
+
|
|
114
|
+
setWitnessCacheTTL(0); // expire immediately
|
|
115
|
+
|
|
116
|
+
await getWitnessDetails(credential, membershipWitness);
|
|
117
|
+
|
|
118
|
+
expect(
|
|
119
|
+
blockchainService.modules.accumulator.getAccumulator,
|
|
120
|
+
).toHaveBeenCalledTimes(2);
|
|
121
|
+
|
|
122
|
+
setWitnessCacheTTL(originalTTL);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('should clear cache when clearWitnessCache is called', async () => {
|
|
126
|
+
const credential = createCredential();
|
|
127
|
+
|
|
128
|
+
await getWitnessDetails(credential, membershipWitness);
|
|
129
|
+
clearWitnessCache();
|
|
130
|
+
await getWitnessDetails(credential, membershipWitness);
|
|
131
|
+
|
|
132
|
+
expect(
|
|
133
|
+
blockchainService.modules.accumulator.getAccumulator,
|
|
134
|
+
).toHaveBeenCalledTimes(2);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('should bypass cache when credential has no credentialStatus.id', async () => {
|
|
138
|
+
const credential = {credentialStatus: {id: undefined, revocationId: '42'}};
|
|
139
|
+
|
|
140
|
+
await getWitnessDetails(credential, membershipWitness);
|
|
141
|
+
await getWitnessDetails(credential, membershipWitness);
|
|
142
|
+
|
|
143
|
+
expect(
|
|
144
|
+
blockchainService.modules.accumulator.getAccumulator,
|
|
145
|
+
).toHaveBeenCalledTimes(2);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
@@ -22,7 +22,14 @@ const trimHexID = id => {
|
|
|
22
22
|
return id.substr(2);
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
const blockchainCache = new Map<string, {data: any; timestamp: number}>();
|
|
26
|
+
let WITNESS_CACHE_TTL = 0; // Disabled — accumulator can change between cache time and verification
|
|
27
|
+
|
|
28
|
+
export const getWitnessCacheTTL = () => WITNESS_CACHE_TTL;
|
|
29
|
+
export const setWitnessCacheTTL = (ms: number) => { WITNESS_CACHE_TTL = ms; };
|
|
30
|
+
export const clearWitnessCache = () => blockchainCache.clear();
|
|
31
|
+
|
|
32
|
+
async function fetchBlockchainData(credential, _membershipWitness) {
|
|
26
33
|
let witness = _membershipWitness;
|
|
27
34
|
let blockNo;
|
|
28
35
|
|
|
@@ -34,7 +41,6 @@ export const getWitnessDetails = async (credential, _membershipWitness) => {
|
|
|
34
41
|
|
|
35
42
|
const {credentialStatus} = credential;
|
|
36
43
|
const registryId = credentialStatus?.id;
|
|
37
|
-
const revocationIndex = credentialStatus.revocationId;
|
|
38
44
|
|
|
39
45
|
const queriedAccumulator =
|
|
40
46
|
await blockchainService.modules.accumulator.getAccumulator(
|
|
@@ -46,22 +52,12 @@ export const getWitnessDetails = async (credential, _membershipWitness) => {
|
|
|
46
52
|
throw new Error('Accumulator not found');
|
|
47
53
|
}
|
|
48
54
|
|
|
49
|
-
const accumulator = PositiveAccumulator.fromAccumulated(
|
|
50
|
-
queriedAccumulator.accumulated.bytes,
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
const encodedRevId = Encoder.defaultEncodeFunc()(revocationIndex.toString());
|
|
54
|
-
|
|
55
55
|
const publicKey = await blockchainService.modules.accumulator.getPublicKey(
|
|
56
56
|
queriedAccumulator.keyRef[0],
|
|
57
57
|
queriedAccumulator.keyRef[1],
|
|
58
58
|
);
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
const pk = new AccumulatorPublicKey(publicKey.bytes);
|
|
62
|
-
|
|
63
|
-
const membershipWitness = new VBMembershipWitness(hexToU8a(witness));
|
|
64
|
-
|
|
60
|
+
let updatedWitness = witness;
|
|
65
61
|
try {
|
|
66
62
|
const credentialStatusId = credential.credentialStatus.id;
|
|
67
63
|
const accumulatorId = blockchainService
|
|
@@ -80,6 +76,10 @@ export const getWitnessDetails = async (credential, _membershipWitness) => {
|
|
|
80
76
|
const nextBlockNo = history.updates[blockNoIndex + 1]?.id?.toString();
|
|
81
77
|
|
|
82
78
|
if (nextBlockNo) {
|
|
79
|
+
const revocationIndex = credentialStatus.revocationId;
|
|
80
|
+
const encodedRevId = Encoder.defaultEncodeFunc()(revocationIndex.toString());
|
|
81
|
+
const membershipWitness = new VBMembershipWitness(hexToU8a(witness));
|
|
82
|
+
|
|
83
83
|
await blockchainService.modules.accumulator.updateWitness(
|
|
84
84
|
registryId,
|
|
85
85
|
encodedRevId,
|
|
@@ -87,20 +87,67 @@ export const getWitnessDetails = async (credential, _membershipWitness) => {
|
|
|
87
87
|
nextBlockNo,
|
|
88
88
|
queriedAccumulator.lastModified,
|
|
89
89
|
);
|
|
90
|
+
updatedWitness = witness;
|
|
90
91
|
}
|
|
91
92
|
} catch (err) {
|
|
92
93
|
console.error(err);
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
return {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
97
|
+
accumulatedBytes: queriedAccumulator.accumulated.bytes,
|
|
98
|
+
publicKeyBytes: publicKey.bytes,
|
|
99
|
+
witness: updatedWitness,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export const getWitnessDetails = async (credential, _membershipWitness) => {
|
|
104
|
+
const cacheKey = credential?.credentialStatus?.id;
|
|
105
|
+
let rawData;
|
|
106
|
+
|
|
107
|
+
if (cacheKey) {
|
|
108
|
+
const cached = blockchainCache.get(cacheKey);
|
|
109
|
+
if (cached) {
|
|
110
|
+
if (Date.now() - cached.timestamp < WITNESS_CACHE_TTL) {
|
|
111
|
+
rawData = cached.data;
|
|
112
|
+
} else {
|
|
113
|
+
blockchainCache.delete(cacheKey);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (!rawData) {
|
|
119
|
+
rawData = await fetchBlockchainData(credential, _membershipWitness);
|
|
120
|
+
if (cacheKey) {
|
|
121
|
+
blockchainCache.set(cacheKey, {data: rawData, timestamp: Date.now()});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const {credentialStatus} = credential;
|
|
126
|
+
const revocationIndex = credentialStatus.revocationId;
|
|
127
|
+
|
|
128
|
+
return {
|
|
129
|
+
encodedRevId: Encoder.defaultEncodeFunc()(revocationIndex.toString()),
|
|
130
|
+
membershipWitness: new VBMembershipWitness(hexToU8a(rawData.witness)),
|
|
131
|
+
pk: new AccumulatorPublicKey(rawData.publicKeyBytes),
|
|
132
|
+
params: dockAccumulatorParams(),
|
|
133
|
+
accumulator: PositiveAccumulator.fromAccumulated(rawData.accumulatedBytes),
|
|
101
134
|
};
|
|
102
135
|
};
|
|
103
136
|
|
|
137
|
+
export const prefetchWitnessCache = async (credential, _membershipWitness) => {
|
|
138
|
+
const cacheKey = credential?.credentialStatus?.id;
|
|
139
|
+
if (!cacheKey || !_membershipWitness) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
const rawData = await fetchBlockchainData(credential, _membershipWitness);
|
|
145
|
+
blockchainCache.set(cacheKey, {data: rawData, timestamp: Date.now()});
|
|
146
|
+
} catch (err) {
|
|
147
|
+
console.warn('Failed to prefetch witness cache:', err.message);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
|
|
104
151
|
export const getIsRevoked = async (credential, _membershipWitness) => {
|
|
105
152
|
const {encodedRevId, membershipWitness, pk, params, accumulator} =
|
|
106
153
|
await getWitnessDetails(credential, _membershipWitness);
|
|
@@ -40,6 +40,13 @@ export const validation = {
|
|
|
40
40
|
'publicKeyBase58 is not present',
|
|
41
41
|
);
|
|
42
42
|
},
|
|
43
|
+
generatePresentationFromPex: params => {
|
|
44
|
+
const {credentials, pexRequest, challenge} = params;
|
|
45
|
+
assert(Array.isArray(credentials), 'invalid credentials');
|
|
46
|
+
assert(credentials.length > 0, 'no credential found');
|
|
47
|
+
assert(pexRequest, 'pexRequest is required');
|
|
48
|
+
assert(challenge, 'challenge is required');
|
|
49
|
+
},
|
|
43
50
|
createPresentation: params => {
|
|
44
51
|
const {credentials, keyDoc, challenge, id} = params;
|
|
45
52
|
assert(typeof id === 'string', 'invalid id');
|