@docknetwork/wallet-sdk-wasm 1.5.14 → 1.7.6

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.
Files changed (146) hide show
  1. package/generate-docs.js +49 -0
  2. package/jsdoc.conf.json +29 -6
  3. package/lib/index.js +9 -1
  4. package/lib/index.mjs +9 -1
  5. package/lib/modules/network-manager.js +15 -12
  6. package/lib/modules/network-manager.mjs +15 -12
  7. package/lib/rpc-server.js +11 -1
  8. package/lib/rpc-server.mjs +11 -1
  9. package/lib/services/blockchain/cached-did-resolver.js +113 -0
  10. package/lib/services/blockchain/cached-did-resolver.mjs +109 -0
  11. package/lib/services/blockchain/index.js +11 -0
  12. package/lib/services/blockchain/index.mjs +11 -0
  13. package/lib/services/blockchain/service-rpc.js +12 -0
  14. package/lib/services/blockchain/service-rpc.mjs +12 -0
  15. package/lib/services/blockchain/service.js +161 -19
  16. package/lib/services/blockchain/service.mjs +162 -20
  17. package/lib/services/credential/bbs-revocation.js +11 -0
  18. package/lib/services/credential/bbs-revocation.mjs +11 -0
  19. package/lib/services/credential/bound-check.js +1 -1
  20. package/lib/services/credential/bound-check.mjs +1 -1
  21. package/lib/services/credential/config.js +4 -1
  22. package/lib/services/credential/config.mjs +4 -1
  23. package/lib/services/credential/delegatable-credentials.js +300 -0
  24. package/lib/services/credential/delegatable-credentials.mjs +263 -0
  25. package/lib/services/credential/index.js +53 -0
  26. package/lib/services/credential/index.mjs +18 -0
  27. package/lib/services/credential/pex-helpers.js +4 -4
  28. package/lib/services/credential/pex-helpers.mjs +4 -4
  29. package/lib/services/credential/sd-jwt.js +214 -0
  30. package/lib/services/credential/sd-jwt.mjs +200 -0
  31. package/lib/services/credential/service-rpc.js +9 -0
  32. package/lib/services/credential/service-rpc.mjs +9 -0
  33. package/lib/services/credential/service.js +324 -7
  34. package/lib/services/credential/service.mjs +324 -7
  35. package/lib/services/edv/index.js +1 -0
  36. package/lib/services/edv/index.mjs +1 -0
  37. package/lib/services/edv/service-rpc.js +23 -0
  38. package/lib/services/edv/service-rpc.mjs +23 -0
  39. package/lib/services/edv/service.js +226 -2
  40. package/lib/services/edv/service.mjs +223 -3
  41. package/lib/services/index.js +14 -0
  42. package/lib/services/index.mjs +14 -0
  43. package/lib/services/pex/config.js +4 -0
  44. package/lib/services/pex/config.mjs +4 -0
  45. package/lib/services/pex/service-rpc.js +4 -0
  46. package/lib/services/pex/service-rpc.mjs +4 -0
  47. package/lib/services/pex/service.js +7 -0
  48. package/lib/services/pex/service.mjs +7 -0
  49. package/lib/services/relay-service/service.js +124 -1
  50. package/lib/services/relay-service/service.mjs +124 -1
  51. package/lib/services/rpc-service-client.js +0 -3
  52. package/lib/services/rpc-service-client.mjs +0 -3
  53. package/lib/services/storage/index.js +19 -2
  54. package/lib/services/storage/index.mjs +24 -1
  55. package/lib/services/storage/service-rpc.js +7 -3
  56. package/lib/services/storage/service-rpc.mjs +7 -3
  57. package/lib/services/storage/service.js +4 -0
  58. package/lib/services/storage/service.mjs +4 -0
  59. package/lib/setup-nodejs.js +9 -1
  60. package/lib/setup-nodejs.mjs +9 -1
  61. package/lib/setup-tests.js +9 -1
  62. package/lib/setup-tests.mjs +9 -1
  63. package/lib/src/modules/event-manager.d.ts +0 -1
  64. package/lib/src/modules/event-manager.d.ts.map +1 -1
  65. package/lib/src/modules/network-manager.d.ts +2 -4
  66. package/lib/src/modules/network-manager.d.ts.map +1 -1
  67. package/lib/src/services/blockchain/cached-did-resolver.d.ts +28 -0
  68. package/lib/src/services/blockchain/cached-did-resolver.d.ts.map +1 -0
  69. package/lib/src/services/blockchain/cached-did-resolver.test.d.ts +2 -0
  70. package/lib/src/services/blockchain/cached-did-resolver.test.d.ts.map +1 -0
  71. package/lib/src/services/blockchain/configs.d.ts +1 -2
  72. package/lib/src/services/blockchain/configs.d.ts.map +1 -1
  73. package/lib/src/services/blockchain/service.d.ts +117 -19
  74. package/lib/src/services/blockchain/service.d.ts.map +1 -1
  75. package/lib/src/services/credential/bbs-revocation.d.ts +1 -1
  76. package/lib/src/services/credential/bbs-revocation.d.ts.map +1 -1
  77. package/lib/src/services/credential/bound-check.d.ts.map +1 -1
  78. package/lib/src/services/credential/config.d.ts.map +1 -1
  79. package/lib/src/services/credential/delegatable-credentials.d.ts +272 -0
  80. package/lib/src/services/credential/delegatable-credentials.d.ts.map +1 -0
  81. package/lib/src/services/credential/index.d.ts +4 -0
  82. package/lib/src/services/credential/index.d.ts.map +1 -1
  83. package/lib/src/services/credential/pex-helpers.d.ts +2 -2
  84. package/lib/src/services/credential/pex-helpers.d.ts.map +1 -1
  85. package/lib/src/services/credential/sd-jwt.test.d.ts +2 -0
  86. package/lib/src/services/credential/sd-jwt.test.d.ts.map +1 -0
  87. package/lib/src/services/credential/service.d.ts +274 -4
  88. package/lib/src/services/credential/service.d.ts.map +1 -1
  89. package/lib/src/services/dids/keypair-utils.d.ts +2 -2
  90. package/lib/src/services/dids/keypair-utils.d.ts.map +1 -1
  91. package/lib/src/services/dids/service.d.ts +35 -3
  92. package/lib/src/services/dids/service.d.ts.map +1 -1
  93. package/lib/src/services/edv/service.d.ts +201 -2
  94. package/lib/src/services/edv/service.d.ts.map +1 -1
  95. package/lib/src/services/pex/config.d.ts +1 -0
  96. package/lib/src/services/pex/config.d.ts.map +1 -1
  97. package/lib/src/services/pex/service.d.ts +1 -0
  98. package/lib/src/services/pex/service.d.ts.map +1 -1
  99. package/lib/src/services/relay-service/service.d.ts +148 -8
  100. package/lib/src/services/relay-service/service.d.ts.map +1 -1
  101. package/lib/src/services/rpc-service-client.d.ts +2 -2
  102. package/lib/src/services/rpc-service-client.d.ts.map +1 -1
  103. package/lib/src/services/storage/index.d.ts +1 -1
  104. package/lib/src/services/storage/index.d.ts.map +1 -1
  105. package/lib/src/services/storage/service-rpc.d.ts +9 -0
  106. package/lib/src/services/storage/service-rpc.d.ts.map +1 -0
  107. package/lib/src/services/storage/service.d.ts +1 -0
  108. package/lib/src/services/storage/service.d.ts.map +1 -1
  109. package/lib/src/services/util-crypto/service.d.ts +2 -2
  110. package/lib/src/services/util-crypto/service.d.ts.map +1 -1
  111. package/lib/tsconfig.tsbuildinfo +1 -1
  112. package/lib/wallet/rpc-storage-interface.js +13 -3
  113. package/lib/wallet/rpc-storage-interface.mjs +11 -1
  114. package/lib/wallet/rpc-storage-wallet.js +10 -0
  115. package/lib/wallet/rpc-storage-wallet.mjs +10 -0
  116. package/package.json +29 -16
  117. package/rollup.config.mjs +5 -3
  118. package/src/globals.d.ts +3 -0
  119. package/src/modules/network-manager.ts +15 -14
  120. package/src/services/blockchain/cached-did-resolver.test.ts +288 -0
  121. package/src/services/blockchain/cached-did-resolver.ts +126 -0
  122. package/src/services/blockchain/configs.ts +1 -2
  123. package/src/services/blockchain/service-rpc.js +12 -0
  124. package/src/services/blockchain/service.ts +167 -20
  125. package/src/services/credential/bound-check.ts +1 -1
  126. package/src/services/credential/config.ts +7 -1
  127. package/src/services/credential/delegatable-credentials.ts +409 -0
  128. package/src/services/credential/index.ts +16 -0
  129. package/src/services/credential/pex-helpers.js +4 -4
  130. package/src/services/credential/pex-helpers.test.js +2 -2
  131. package/src/services/credential/sd-jwt.test.ts +718 -0
  132. package/src/services/credential/sd-jwt.ts +231 -0
  133. package/src/services/credential/service-rpc.js +9 -0
  134. package/src/services/credential/service.ts +328 -7
  135. package/src/services/edv/index.test.js +229 -0
  136. package/src/services/edv/service-rpc.js +23 -0
  137. package/src/services/edv/service.ts +272 -1
  138. package/src/services/pex/config.ts +4 -0
  139. package/src/services/pex/service-rpc.js +4 -0
  140. package/src/services/pex/service.ts +13 -0
  141. package/src/services/pex/tests/pex-service.test.js +210 -0
  142. package/src/services/relay-service/service.ts +130 -1
  143. package/src/services/rpc-service-client.js +0 -3
  144. package/src/services/storage/index.js +15 -1
  145. package/src/services/storage/service-rpc.js +7 -3
  146. package/src/services/storage/service.ts +5 -0
@@ -16,6 +16,7 @@ var assert = require('assert');
16
16
  var services_credential_bbsRevocation = require('./bbs-revocation.js');
17
17
  var services_credential_pexHelpers = require('./pex-helpers.js');
18
18
  var services_dids_service = require('../dids/service.js');
19
+ var services_credential_sdJwt = require('./sd-jwt.js');
19
20
  require('@cosmjs/proto-signing');
20
21
  require('@docknetwork/cheqd-blockchain-api');
21
22
  require('@docknetwork/cheqd-blockchain-modules');
@@ -30,6 +31,17 @@ require('@scure/bip39');
30
31
  require('@scure/bip39/wordlists/english');
31
32
  require('../util-crypto/configs.js');
32
33
  require('@docknetwork/credential-sdk/types');
34
+ require('../blockchain/cached-did-resolver.js');
35
+ require('../storage/index.js');
36
+ require('../storage/service.js');
37
+ require('../storage/service-rpc.js');
38
+ require('../rpc-service-client.js');
39
+ require('../../rpc-client.js');
40
+ require('json-rpc-2.0');
41
+ require('../../core/crypto.js');
42
+ require('crypto');
43
+ require('../../logger.js');
44
+ require('../../rpc-util.js');
33
45
  require('@docknetwork/crypto-wasm-ts/lib/legosnark');
34
46
  require('base64url');
35
47
  require('@astronautlabs/jsonpath');
@@ -44,27 +56,69 @@ require('@digitalbazaar/x25519-key-agreement-key-2019');
44
56
  require('@digitalbazaar/ed25519-verification-key-2018');
45
57
  require('@digitalbazaar/ed25519-verification-key-2020');
46
58
  require('../dids/keypair-utils.js');
59
+ require('@sd-jwt/sd-jwt-vc');
60
+ require('@sd-jwt/crypto-nodejs');
47
61
 
48
62
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
49
63
 
50
64
  var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);
51
65
 
52
66
  // @ts-nocheck
67
+ /**
68
+ * PEX (Presentation Exchange) instance for credential filtering
69
+ * @private
70
+ */
53
71
  const pex = new pex$1.PEX();
72
+ /**
73
+ * Checks if a credential uses BBS+ signature
74
+ * @param {Object} credential - The credential to check
75
+ * @returns {boolean} True if the credential uses BBS+ signature
76
+ * @example
77
+ * const isBBS = isBBSPlusCredential(credential);
78
+ * if (isBBS) {
79
+ * console.log('This credential uses BBS+ signatures');
80
+ * }
81
+ */
54
82
  function isBBSPlusCredential(credential) {
55
83
  return ((typeof credential?.proof?.type === 'string' &&
56
84
  credential.proof.type.includes('BBS+SignatureDock')) ||
57
85
  (Array.isArray(credential['@context']) &&
58
86
  credential['@context'].find(context => typeof context === 'string' && context.indexOf('bbs') > -1)));
59
87
  }
88
+ /**
89
+ * Checks if a credential uses KVAC (BBDT16) signature
90
+ * @param {Object} credential - The credential to check
91
+ * @returns {boolean} True if the credential uses KVAC signature
92
+ * @example
93
+ * const isKVAC = isKvacCredential(credential);
94
+ */
60
95
  function isKvacCredential(credential) {
61
96
  return (typeof credential?.proof?.type === 'string' &&
62
97
  credential.proof.type.toLowerCase().includes('bbdt16'));
63
98
  }
99
+ /**
100
+ * Checks if a credential is anonymous (BBS+ or KVAC)
101
+ * @param {Object} credential - The credential to check
102
+ * @returns {boolean} True if the credential is anonymous
103
+ * @example
104
+ * if (isAnnonymousCredential(credential)) {
105
+ * console.log('This credential supports selective disclosure');
106
+ * }
107
+ */
64
108
  function isAnnonymousCredential(credential) {
65
109
  return isBBSPlusCredential(credential) || isKvacCredential(credential);
66
110
  }
111
+ /**
112
+ * Service class for managing verifiable credentials
113
+ * @class
114
+ * @description Provides methods for creating, signing, verifying, and presenting
115
+ * verifiable credentials with support for various signature types
116
+ */
67
117
  class CredentialService {
118
+ /**
119
+ * Creates a new CredentialService instance
120
+ * @constructor
121
+ */
68
122
  constructor() {
69
123
  this.name = services_credential_config.serviceName;
70
124
  }
@@ -77,8 +131,25 @@ class CredentialService {
77
131
  CredentialService.prototype.deriveVCFromPresentation,
78
132
  CredentialService.prototype.isBBSPlusCredential,
79
133
  CredentialService.prototype.isKvacCredential,
134
+ CredentialService.prototype.isSDJWTCredential,
135
+ CredentialService.prototype.credentialToW3C,
136
+ CredentialService.prototype.createSDJWTPresentation,
80
137
  CredentialService.prototype.acquireOIDCredential,
81
138
  ];
139
+ createSDJWTPresentation(params) {
140
+ const { attributesToReveal, credential } = params;
141
+ return services_credential_sdJwt.createSDJWTPresentation({ attributesToReveal, credential });
142
+ }
143
+ /**
144
+ * Generates a new verifiable credential template
145
+ * @param {Object} [params={}] - Generation parameters
146
+ * @param {Object} [params.subject] - The credential subject
147
+ * @returns {VerifiableCredential} A new verifiable credential instance
148
+ * @example
149
+ * const credential = credentialService.generateCredential({
150
+ * subject: { id: 'did:example:123', name: 'Alice' }
151
+ * });
152
+ */
82
153
  generateCredential(params = {}) {
83
154
  services_credential_config.validation.generateCredential(params);
84
155
  const { subject } = params;
@@ -96,6 +167,19 @@ class CredentialService {
96
167
  }
97
168
  return vc$1;
98
169
  }
170
+ /**
171
+ * Signs a verifiable credential
172
+ * @param {Object} params - Signing parameters
173
+ * @param {Object} params.vcJson - The credential JSON to sign
174
+ * @param {Object} params.keyDoc - The key document for signing
175
+ * @returns {Promise<VerifiableCredential>} The signed verifiable credential
176
+ * @throws {Error} If validation fails or signing fails
177
+ * @example
178
+ * const signedCredential = await credentialService.signCredential({
179
+ * vcJson: credentialData,
180
+ * keyDoc: issuerKeyDocument
181
+ * });
182
+ */
99
183
  async signCredential(params) {
100
184
  services_credential_config.validation.signCredential(params);
101
185
  const { vcJson, keyDoc } = params;
@@ -108,13 +192,38 @@ class CredentialService {
108
192
  await verifiableCredential.sign(suite);
109
193
  return verifiableCredential;
110
194
  }
195
+ /**
196
+ * Creates a verifiable presentation from credentials
197
+ * @param {Object} params - Presentation parameters
198
+ * @param {Array<Object>} params.credentials - Array of verifiable credentials to include
199
+ * @param {Object} params.keyDoc - The key document for signing the presentation
200
+ * @param {string} [params.challenge] - Challenge string for the presentation proof
201
+ * @param {string} [params.id] - Presentation identifier
202
+ * @param {string} [params.domain] - Domain for the presentation proof
203
+ * @returns {Promise<Object>} The signed verifiable presentation
204
+ * @throws {Error} If validation fails
205
+ * @example
206
+ * const presentation = await credentialService.createPresentation({
207
+ * credentials: [credential1, credential2],
208
+ * keyDoc: holderKeyDocument,
209
+ * challenge: 'abc123',
210
+ * domain: 'example.com'
211
+ * });
212
+ */
111
213
  async createPresentation(params) {
112
214
  services_credential_config.validation.createPresentation(params);
113
215
  const { credentials, keyDoc, challenge, id, domain } = params;
114
216
  const vp = new vc.VerifiablePresentation(id);
115
217
  let shouldSkipSigning = false;
218
+ let jwtCredentials = [];
116
219
  for (const signedVC of credentials) {
117
- vp.addCredential(signedVC);
220
+ if (typeof signedVC === 'string') {
221
+ jwtCredentials.push(signedVC);
222
+ shouldSkipSigning = true;
223
+ }
224
+ else {
225
+ vp.addCredential(signedVC);
226
+ }
118
227
  shouldSkipSigning = shouldSkipSigning || isAnnonymousCredential(signedVC);
119
228
  }
120
229
  if (!shouldSkipSigning) {
@@ -124,16 +233,54 @@ class CredentialService {
124
233
  keyPair.signer = keyPair.signer();
125
234
  const suite = await vc.getSuiteFromKeyDoc(keyPair);
126
235
  if (shouldSkipSigning) {
127
- return vp.toJSON();
236
+ const result = vp.toJSON();
237
+ result.verifiableCredential.push(...jwtCredentials);
238
+ return result;
128
239
  }
129
240
  return vp.sign(suite, challenge, domain, services_blockchain_service.blockchainService.resolver);
130
241
  }
242
+ /**
243
+ * Verifies a verifiable presentation
244
+ * @param {Object} params - Verification parameters
245
+ * @param {Object} params.presentation - The presentation to verify
246
+ * @param {Object} [params.options] - Verification options
247
+ * @returns {Promise<Object>} Verification result with verified status and any errors
248
+ * @example
249
+ * const result = await credentialService.verifyPresentation({
250
+ * presentation: presentationData
251
+ * });
252
+ * console.log('Verified:', result.verified);
253
+ */
131
254
  async verifyPresentation({ presentation, options }) {
132
255
  return vc.verifyPresentation(presentation, options);
133
256
  }
257
+ /**
258
+ * Verifies a verifiable credential including revocation check
259
+ * @param {Object} params - Verification parameters
260
+ * @param {Object} params.credential - The credential to verify
261
+ * @param {Object} [params.membershipWitness] - Membership witness for revocation check
262
+ * @returns {Promise<Object>} Verification result
263
+ * @returns {boolean} returns.verified - Whether the credential is valid
264
+ * @returns {string} [returns.error] - Error message if verification failed
265
+ * @throws {Error} If validation fails
266
+ * @example
267
+ * const result = await credentialService.verifyCredential({
268
+ * credential: credentialData,
269
+ * membershipWitness: witnessData
270
+ * });
271
+ * if (!result.verified) {
272
+ * console.error('Verification failed:', result.error);
273
+ * }
274
+ */
134
275
  async verifyCredential(params) {
135
276
  services_credential_config.validation.verifyCredential(params);
136
- const { credential, membershipWitness } = params;
277
+ let { credential, membershipWitness } = params;
278
+ if (credential._sd_jwt) {
279
+ credential = credential?._sd_jwt?.encoded;
280
+ }
281
+ if (typeof credential === 'string' && services_credential_sdJwt.isSDJWTCredential(credential)) {
282
+ return services_credential_sdJwt.verifySDJWT(credential);
283
+ }
137
284
  const result = await vc.verifyCredential(credential, {
138
285
  resolver: services_blockchain_service.blockchainService.resolver,
139
286
  revocationApi: { dock: services_blockchain_service.blockchainService.dock },
@@ -154,24 +301,113 @@ class CredentialService {
154
301
  }
155
302
  return result;
156
303
  }
304
+ /**
305
+ * Filters credentials based on a presentation definition
306
+ * @param {Object} params - Filter parameters
307
+ * @param {Array<Object>} params.credentials - Array of credentials to filter
308
+ * @param {Object} params.presentationDefinition - PEX presentation definition
309
+ * @param {string} [params.holderDid] - DID of the credential holder
310
+ * @returns {Object} Filtered credentials matching the presentation definition
311
+ * @example
312
+ * const filtered = credentialService.filterCredentials({
313
+ * credentials: allCredentials,
314
+ * presentationDefinition: definition,
315
+ * holderDid: 'did:example:holder'
316
+ * });
317
+ */
157
318
  filterCredentials(params) {
158
319
  const { credentials, presentationDefinition, holderDid } = params;
159
320
  const result = pex.selectFrom(presentationDefinition, credentials, holderDid);
160
321
  return result;
161
322
  }
323
+ /**
324
+ * Evaluates a presentation against a presentation definition
325
+ * @param {Object} params - Evaluation parameters
326
+ * @param {Object} params.presentation - The presentation to evaluate
327
+ * @param {Object} params.presentationDefinition - PEX presentation definition
328
+ * @returns {Object} Evaluation result with validation details
329
+ * @example
330
+ * const evaluation = credentialService.evaluatePresentation({
331
+ * presentation: presentationData,
332
+ * presentationDefinition: definition
333
+ * });
334
+ */
162
335
  evaluatePresentation(params) {
163
336
  const { presentation, presentationDefinition } = params;
164
337
  const result = pex.evaluatePresentation(presentationDefinition, presentation);
165
338
  return result;
166
339
  }
340
+ /**
341
+ * Checks if a credential uses BBS+ signature
342
+ * @param {Object} params - Check parameters
343
+ * @param {Object} params.credential - The credential to check
344
+ * @returns {boolean} True if the credential uses BBS+ signature
345
+ */
167
346
  isBBSPlusCredential(params) {
168
347
  const { credential } = params;
169
348
  return isBBSPlusCredential(credential);
170
349
  }
350
+ /**
351
+ * Checks if a credential uses KVAC signature
352
+ * @param {Object} params - Check parameters
353
+ * @param {Object} params.credential - The credential to check
354
+ * @returns {boolean} True if the credential uses KVAC signature
355
+ */
171
356
  isKvacCredential(params) {
172
357
  const { credential } = params;
173
358
  return isKvacCredential(credential);
174
359
  }
360
+ /**
361
+ * Checks if a credential is an SD-JWT (Selective Disclosure JWT) credential
362
+ * @param {Object} params - Check parameters
363
+ * @param {string} params.credential - The JWT string to check
364
+ * @returns {boolean} True if the credential is an SD-JWT credential
365
+ * @example
366
+ * const isSDJWT = credentialService.isSDJWTCredential({
367
+ * credential: 'eyJ0eXAiOiJ2YytzZC1qd3Q...'
368
+ * });
369
+ */
370
+ isSDJWTCredential(params) {
371
+ const { credential } = params;
372
+ return services_credential_sdJwt.isSDJWTCredential(credential);
373
+ }
374
+ /**
375
+ * Converts a credential to W3C Verifiable Credential format
376
+ * @description Handles both SD-JWT credentials (needs decoding) and regular W3C credentials (returns as-is)
377
+ * @param {Object} params - Conversion parameters
378
+ * @param {string|Object} params.credential - Either an SD-JWT string or a credential object
379
+ * @returns {Promise<Object>} W3C Verifiable Credential format
380
+ * @throws {Error} If credential cannot be converted to W3C format
381
+ * @example
382
+ * // Convert SD-JWT to W3C format
383
+ * const w3cCredential = await credentialService.credentialToW3C({
384
+ * credential: 'eyJ0eXAiOiJ2YytzZC1qd3Q...'
385
+ * });
386
+ *
387
+ * // Returns W3C credential as-is
388
+ * const w3cCredential = await credentialService.credentialToW3C({
389
+ * credential: { '@context': [...], type: [...], ... }
390
+ * });
391
+ */
392
+ async credentialToW3C(params) {
393
+ const { credential } = params;
394
+ return services_credential_sdJwt.credentialToW3C(credential);
395
+ }
396
+ /**
397
+ * Acquires a credential through OpenID for Verifiable Credentials (OID4VC)
398
+ * @param {Object} params - Acquisition parameters
399
+ * @param {string} params.uri - The credential offer URI
400
+ * @param {string} [params.authorizationCode] - Authorization code if required
401
+ * @param {Object} params.holderKeyDocument - Key document for the credential holder
402
+ * @returns {Promise<Object>} Result containing the credential or authorization URL
403
+ * @returns {Object} [returns.credential] - The acquired credential
404
+ * @returns {string} [returns.authorizationURL] - Authorization URL if auth is required
405
+ * @example
406
+ * const result = await credentialService.acquireOIDCredential({
407
+ * uri: 'openid-credential-offer://...',
408
+ * holderKeyDocument: keyDoc
409
+ * });
410
+ */
175
411
  async acquireOIDCredential({ uri, authorizationCode, holderKeyDocument, }) {
176
412
  const searchParams = new URL(uri).searchParams;
177
413
  new URLSearchParams(searchParams);
@@ -181,6 +417,8 @@ class CredentialService {
181
417
  authorizationRequest: {
182
418
  redirectUri: 'dock-wallet://credentials/callback',
183
419
  clientId: 'dock.wallet',
420
+ // Hack: we need the scope property to avoid 'CredentialOffer format is wrong.' error
421
+ scope: []
184
422
  },
185
423
  });
186
424
  const format = 'ldp_vc';
@@ -231,6 +469,22 @@ class CredentialService {
231
469
  console.error(err);
232
470
  }
233
471
  }
472
+ /**
473
+ * Creates a BBS+ presentation with selective disclosure
474
+ * @param {Object} params - Presentation parameters
475
+ * @param {Array<Object>} params.credentials - Array of credentials with attributes to reveal
476
+ * @param {Object} params.credentials[].credential - The BBS+ credential
477
+ * @param {Array<string>} [params.credentials[].attributesToReveal] - Attributes to reveal
478
+ * @returns {Promise<Object>} The BBS+ presentation
479
+ * @throws {Error} If validation fails
480
+ * @example
481
+ * const presentation = await credentialService.createBBSPresentation({
482
+ * credentials: [{
483
+ * credential: bbsCredential,
484
+ * attributesToReveal: ['name', 'age']
485
+ * }]
486
+ * });
487
+ */
234
488
  async createBBSPresentation(params) {
235
489
  services_credential_config.validation.createBBSPresentation(params);
236
490
  const { credentials } = params;
@@ -245,6 +499,13 @@ class CredentialService {
245
499
  }
246
500
  return bbsPlusPresentation.createPresentation();
247
501
  }
502
+ /**
503
+ * Gets the accumulator ID from a credential's status
504
+ * @param {Object} params - Parameters
505
+ * @param {Object} params.credential - The credential to get accumulator ID from
506
+ * @returns {string|null} The accumulator ID or null if not present
507
+ * @throws {Error} If credential is not provided
508
+ */
248
509
  getAccumulatorId({ credential }) {
249
510
  assert__default["default"](!!credential, `credential is required`);
250
511
  if (!credential?.credentialStatus) {
@@ -252,6 +513,13 @@ class CredentialService {
252
513
  }
253
514
  return credential?.credentialStatus.id;
254
515
  }
516
+ /**
517
+ * Gets accumulator data from the blockchain for a credential
518
+ * @param {Object} params - Parameters
519
+ * @param {Object} params.credential - The credential to get accumulator data for
520
+ * @returns {Promise<Object|null>} The accumulator data or null if not found
521
+ * @throws {Error} If credential is not provided
522
+ */
255
523
  async getAccumulatorData({ credential }) {
256
524
  assert__default["default"](!!credential, `credential is required`);
257
525
  const accumulatorId = await this.getAccumulatorId({ credential });
@@ -261,10 +529,15 @@ class CredentialService {
261
529
  return services_blockchain_service.blockchainService.dock.accumulatorModule.getAccumulator(accumulatorId, false);
262
530
  }
263
531
  /**
264
- * Fetch the latest accumulator witness updates for a given credential and membership witness
265
- * The witness is generated by the issuer when the credential is created and is stored in the wallet when the credential is imported
266
- *
267
- * @param param0
532
+ * Updates the membership witness with the latest accumulator state
533
+ * @description The witness is generated by the issuer when the credential is created
534
+ * and is stored in the wallet when the credential is imported. This method updates
535
+ * it with the latest accumulator changes from the blockchain.
536
+ * @param {Object} params - Update parameters
537
+ * @param {Object} params.credential - The credential with revocation status
538
+ * @param {Object} params.membershipWitnessJSON - Current membership witness in JSON format
539
+ * @returns {Promise<Object>} Updated membership witness in JSON format
540
+ * @throws {Error} If updates cannot be fetched or applied
268
541
  */
269
542
  async updateMembershipWitness({ credential, membershipWitnessJSON }) {
270
543
  const revocationId = credential.credentialStatus.revocationId;
@@ -301,6 +574,25 @@ class CredentialService {
301
574
  witness.updateUsingPublicInfoPostBatchUpdate(member, additions, removals, queriedWitnessInfo);
302
575
  return witness.toJSON();
303
576
  }
577
+ /**
578
+ * Derives verifiable credentials from a presentation with selective disclosure
579
+ * @param {Object} params - Derivation parameters
580
+ * @param {Array<Object>} params.credentials - Array of credential objects
581
+ * @param {Object} params.credentials[].credential - The credential
582
+ * @param {Array<string>} params.credentials[].attributesToReveal - Attributes to reveal
583
+ * @param {Object} [params.credentials[].witness] - Membership witness for revocation
584
+ * @param {Object} [params.options={}] - Additional options for derivation
585
+ * @param {Object} [params.proofRequest] - Proof request with constraints
586
+ * @returns {Promise<Array>} Array of derived credentials
587
+ * @throws {Error} If validation fails
588
+ * @example
589
+ * const derivedCredentials = await credentialService.deriveVCFromPresentation({
590
+ * credentials: [{
591
+ * credential: bbsCredential,
592
+ * attributesToReveal: ['name', 'dateOfBirth']
593
+ * }]
594
+ * });
595
+ */
304
596
  async deriveVCFromPresentation(params) {
305
597
  services_credential_config.validation.deriveVCFromPresentation(params);
306
598
  const { credentials, options = {}, proofRequest } = params;
@@ -354,10 +646,35 @@ class CredentialService {
354
646
  const credentialsFromPresentation = await presentation.deriveCredentials(options);
355
647
  return credentialsFromPresentation;
356
648
  }
649
+ /**
650
+ * Test method for range proofs
651
+ * @private
652
+ * @returns {Promise<void>}
653
+ */
357
654
  async testRangeProof() {
358
655
  console.log('test');
359
656
  }
360
657
  }
658
+ /**
659
+ * Singleton instance of the credential service
660
+ * @type {CredentialService}
661
+ * @example
662
+ * import { credentialService } from '@docknetwork/wallet-sdk-wasm/services/credential';
663
+ *
664
+ * // Create and sign a credential
665
+ * const credential = credentialService.generateCredential({
666
+ * subject: { id: 'did:example:123' }
667
+ * });
668
+ * const signed = await credentialService.signCredential({
669
+ * vcJson: credential,
670
+ * keyDoc: issuerKey
671
+ * });
672
+ *
673
+ * // Verify a credential
674
+ * const result = await credentialService.verifyCredential({
675
+ * credential: signedCredential
676
+ * });
677
+ */
361
678
  const credentialService = new CredentialService();
362
679
 
363
680
  exports.credentialService = credentialService;