@docknetwork/wallet-sdk-core 1.5.14 → 1.7.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.
Files changed (91) hide show
  1. package/generate-docs.js +33 -0
  2. package/jsdoc.conf.json +28 -0
  3. package/lib/biometric-provider.d.ts +123 -31
  4. package/lib/biometric-provider.d.ts.map +1 -1
  5. package/lib/biometric-provider.js +146 -7
  6. package/lib/biometric-provider.js.map +1 -1
  7. package/lib/cloud-wallet.d.ts +7 -3
  8. package/lib/cloud-wallet.d.ts.map +1 -1
  9. package/lib/cloud-wallet.js +29 -18
  10. package/lib/cloud-wallet.js.map +1 -1
  11. package/lib/credential-provider.d.ts +58 -33
  12. package/lib/credential-provider.d.ts.map +1 -1
  13. package/lib/credential-provider.js +214 -13
  14. package/lib/credential-provider.js.map +1 -1
  15. package/lib/credentials/oidvc.js +6 -7
  16. package/lib/credentials/oidvc.js.map +1 -1
  17. package/lib/did-provider.d.ts +102 -36
  18. package/lib/did-provider.d.ts.map +1 -1
  19. package/lib/did-provider.js +186 -28
  20. package/lib/did-provider.js.map +1 -1
  21. package/lib/ecosystem-tools.js +5 -6
  22. package/lib/ecosystem-tools.js.map +1 -1
  23. package/lib/helpers.js +6 -6
  24. package/lib/helpers.js.map +1 -1
  25. package/lib/message-provider.d.ts +39 -13
  26. package/lib/message-provider.d.ts.map +1 -1
  27. package/lib/message-provider.js +146 -20
  28. package/lib/message-provider.js.map +1 -1
  29. package/lib/messages/message-helpers.js +6 -6
  30. package/lib/messages/message-helpers.js.map +1 -1
  31. package/lib/network-resolver.d.ts +1 -1
  32. package/lib/network-resolver.js +5 -5
  33. package/lib/network-resolver.js.map +1 -1
  34. package/lib/qr-handlers/builtin/index.d.ts +30 -0
  35. package/lib/qr-handlers/builtin/index.d.ts.map +1 -0
  36. package/lib/qr-handlers/builtin/index.js +46 -0
  37. package/lib/qr-handlers/builtin/index.js.map +1 -0
  38. package/lib/qr-handlers/builtin/oid4vc-handler.d.ts +137 -0
  39. package/lib/qr-handlers/builtin/oid4vc-handler.d.ts.map +1 -0
  40. package/lib/qr-handlers/builtin/oid4vc-handler.js +134 -0
  41. package/lib/qr-handlers/builtin/oid4vc-handler.js.map +1 -0
  42. package/lib/qr-handlers/index.d.ts +76 -0
  43. package/lib/qr-handlers/index.d.ts.map +1 -0
  44. package/lib/qr-handlers/index.js +92 -0
  45. package/lib/qr-handlers/index.js.map +1 -0
  46. package/lib/qr-handlers/processor.d.ts +110 -0
  47. package/lib/qr-handlers/processor.d.ts.map +1 -0
  48. package/lib/qr-handlers/processor.js +251 -0
  49. package/lib/qr-handlers/processor.js.map +1 -0
  50. package/lib/qr-handlers/types.d.ts +205 -0
  51. package/lib/qr-handlers/types.d.ts.map +1 -0
  52. package/lib/qr-handlers/types.js +10 -0
  53. package/lib/qr-handlers/types.js.map +1 -0
  54. package/lib/types.d.ts +610 -14
  55. package/lib/types.d.ts.map +1 -1
  56. package/lib/types.js +16 -0
  57. package/lib/types.js.map +1 -1
  58. package/lib/verification-controller.d.ts +0 -1
  59. package/lib/verification-controller.d.ts.map +1 -1
  60. package/lib/verification-controller.js +12 -5
  61. package/lib/verification-controller.js.map +1 -1
  62. package/lib/wallet-to-wallet-verification/walletToWalletVerificationProvider.d.ts +0 -1
  63. package/lib/wallet-to-wallet-verification/walletToWalletVerificationProvider.d.ts.map +1 -1
  64. package/lib/wallet-to-wallet-verification/walletToWalletVerificationProvider.js +3 -3
  65. package/lib/wallet-to-wallet-verification/walletToWalletVerificationProvider.js.map +1 -1
  66. package/lib/wallet-wasm.d.ts.map +1 -1
  67. package/lib/wallet-wasm.js +13 -14
  68. package/lib/wallet-wasm.js.map +1 -1
  69. package/lib/wallet.d.ts +36 -20
  70. package/lib/wallet.d.ts.map +1 -1
  71. package/lib/wallet.js +174 -28
  72. package/lib/wallet.js.map +1 -1
  73. package/package.json +17 -9
  74. package/src/biometric-provider.ts +157 -42
  75. package/src/cloud-wallet.ts +13 -0
  76. package/src/credential-provider.test.ts +191 -1
  77. package/src/credential-provider.ts +208 -27
  78. package/src/did-provider.ts +183 -34
  79. package/src/message-provider.ts +148 -34
  80. package/src/qr-handlers/builtin/index.ts +30 -0
  81. package/src/qr-handlers/builtin/oid4vc-handler.ts +198 -0
  82. package/src/qr-handlers/index.ts +76 -0
  83. package/src/qr-handlers/processor.test.ts +514 -0
  84. package/src/qr-handlers/processor.ts +311 -0
  85. package/src/qr-handlers/types.ts +228 -0
  86. package/src/types.ts +666 -11
  87. package/src/verification-controller.test.ts +1 -2
  88. package/src/verification-controller.ts +9 -1
  89. package/src/wallet-wasm.ts +1 -3
  90. package/src/wallet.ts +173 -24
  91. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,4 +1,4 @@
1
- import {IWallet} from './types';
1
+ import {IWallet, WalletEvents} from './types';
2
2
  import {
3
3
  createVerificationController,
4
4
  VerificationStatus,
@@ -11,7 +11,6 @@ import iiwTemplate from './fixtures/iiw-template.json';
11
11
  import anyCredentialProofRequest from './fixtures/any-credential-proof-request.json';
12
12
  import universityDegreeProofRequest from './fixtures/university-degree-proof-request.json';
13
13
  import {createDIDProvider, IDIDProvider} from './did-provider';
14
- import {WalletEvents} from '@docknetwork/wallet-sdk-core/src/wallet';
15
14
  import {replaceResponseURL} from './helpers';
16
15
  import {createDataStore} from '@docknetwork/wallet-sdk-data-store-typeorm/src';
17
16
 
@@ -169,7 +169,15 @@ export function createVerificationController({
169
169
  const isBBS = await isBBSPlusCredential(credentialSelection.credential);
170
170
  const isKVAC = await isKvacCredential(credentialSelection.credential);
171
171
 
172
- if (isBBS || isKVAC) {
172
+ if (credentialSelection.credential._sd_jwt) {
173
+ const derivedCredential =
174
+ await credentialServiceRPC.createSDJWTPresentation({
175
+ attributesToReveal: credentialSelection.attributesToReveal,
176
+ credential: credentialSelection.credential._sd_jwt.encoded,
177
+ });
178
+
179
+ credentials.push(derivedCredential);
180
+ } else if (isBBS || isKVAC) {
173
181
  // derive credential
174
182
  const derivedCredentials =
175
183
  await credentialServiceRPC.deriveVCFromPresentation({
@@ -1,10 +1,8 @@
1
1
  import { blockchainService } from '@docknetwork/wallet-sdk-wasm/src/services/blockchain';
2
2
  import { utilCryptoService } from '@docknetwork/wallet-sdk-wasm/src/services/util-crypto';
3
-
4
3
  import { Network } from '@docknetwork/wallet-sdk-data-store/src/types';
5
- import { WalletEvents } from '@docknetwork/wallet-sdk-core/src/wallet';
6
4
  import { captureException } from './helpers';
7
- import { IWallet } from './types';
5
+ import { IWallet, WalletEvents } from './types';
8
6
 
9
7
  function isBlockchainNetwork(network: Network) {
10
8
  return !!(network.configs.substrateUrl || network.configs.cheqdApiUrl);
package/src/wallet.ts CHANGED
@@ -1,4 +1,12 @@
1
- import {CreateWalletProps, IWallet} from './types';
1
+ /**
2
+ * @module wallet
3
+ * @description Core wallet functionality for the Dock Wallet SDK.
4
+ * This module provides the main wallet creation and management functions.
5
+ */
6
+
7
+ import {CreateWalletProps, IWallet, WalletEvents} from './types';
8
+
9
+
2
10
  import {initWalletWasm} from './wallet-wasm';
3
11
  import {EventEmitter} from 'events';
4
12
  import {walletService} from '@docknetwork/wallet-sdk-wasm/src/services/wallet';
@@ -10,6 +18,19 @@ function once(emitter: EventEmitter, eventName: string) {
10
18
  return new Promise(resolve => emitter.once(eventName, resolve));
11
19
  }
12
20
 
21
+ export {
22
+ /**
23
+ * @deprecated Please use WalletEvents from ./types.ts instead
24
+ */
25
+ WalletEvents,
26
+ };
27
+
28
+ /**
29
+ * Ensures a document has the proper @context for Universal Wallet compatibility
30
+ * @param {Object} document - The document to add context to
31
+ * @returns {Object} The document with @context added if it was missing
32
+ * @private
33
+ */
13
34
  export function ensureDocumentContext(document) {
14
35
  if (document['@context']) {
15
36
  return document;
@@ -22,30 +43,27 @@ export function ensureDocumentContext(document) {
22
43
  }
23
44
 
24
45
 
25
- export type WalletStatus = 'closed' | 'loading' | 'ready' | 'error';
26
-
27
- export type KeypairType = 'sr25519' | 'ed25519' | 'ecdsa';
28
-
29
- export const WalletEvents = {
30
- ready: 'ready',
31
- error: 'error',
32
- migrated: 'migrated',
33
- statusUpdated: 'status-updated',
34
- documentAdded: 'document-added',
35
- documentUpdated: 'document-updated',
36
- documentRemoved: 'document-removed',
37
- walletDeleted: 'wallet-deleted',
38
- walletImported: 'wallet-imported',
39
- networkUpdated: 'network-updated',
40
- networkConnected: 'network-connected',
41
- networkError: 'network-error',
42
- };
43
-
44
46
  /**
45
- * Create wallet
46
- *
47
- * @param createWalletProps
48
- * @returns {Promise<IWallet>}
47
+ * Creates a new wallet instance with the provided data store.
48
+ * The wallet provides secure storage and management of DIDs, credentials, keys, and other documents.
49
+ *
50
+ * @param {CreateWalletProps} props - Configuration options for wallet creation
51
+ * @param {DataStore} props.dataStore - The data store implementation to use for persistence
52
+ * @returns {Promise<IWallet>} A promise that resolves to the created wallet instance
53
+ * @see {@link IWallet} - The interface defining all available wallet methods
54
+ *
55
+ * @example
56
+ * import { createWallet } from '@docknetwork/wallet-sdk-core';
57
+ * import { createDataStore } from '@docknetwork/wallet-sdk-data-store';
58
+ *
59
+ * const dataStore = await createDataStore();
60
+ * const wallet = await createWallet({ dataStore });
61
+ *
62
+ * // The wallet implements the IWallet interface
63
+ * await wallet.addDocument(myCredential);
64
+ * const documents = await wallet.getAllDocuments();
65
+ *
66
+ * @throws {Error} If the data store is not properly initialized
49
67
  */
50
68
  export async function createWallet({
51
69
  dataStore,
@@ -67,37 +85,118 @@ export async function createWallet({
67
85
  dataStore,
68
86
  });
69
87
  },
88
+ /**
89
+ * Deletes the entire wallet and all its documents
90
+ * @memberof IWallet
91
+ * @returns {Promise<void>}
92
+ * @fires WalletEvents.walletDeleted
93
+ */
70
94
  deleteWallet: async () => {
71
95
  await dataStore.documents.removeAllDocuments();
72
96
 
73
97
  eventEmitter.emit(WalletEvents.walletDeleted);
74
98
  },
99
+ /**
100
+ * Sets the wallet status
101
+ * @memberof IWallet
102
+ * @param {string} newStatus - The new status to set
103
+ */
75
104
  setStatus(newStatus: string) {
76
105
  status = newStatus;
77
106
  },
107
+ /**
108
+ * Sets the active network for the wallet
109
+ * @memberof IWallet
110
+ * @param {string} networkId - The network identifier to switch to
111
+ * @returns {Promise<void>}
112
+ * @fires WalletEvents.networkUpdated
113
+ */
78
114
  setNetwork: async (networkId: string) => {
79
115
  await dataStore.setNetwork(networkId);
80
116
  eventEmitter.emit(WalletEvents.networkUpdated, networkId);
81
117
  },
118
+ /**
119
+ * Gets the current network ID
120
+ * @memberof IWallet
121
+ * @returns {string} The current network identifier
122
+ */
82
123
  getNetworkId: () => {
83
124
  return dataStore.networkId;
84
125
  },
126
+ /**
127
+ * Retrieves a document by its ID
128
+ * @memberof IWallet
129
+ * @param {string} id - The unique identifier of the document
130
+ * @returns {Promise<WalletDocument>} The document with the specified ID
131
+ * @throws {Error} If document is not found
132
+ */
85
133
  getDocumentById: (id) => dataStore.documents.getDocumentById(id),
134
+ /**
135
+ * Retrieves all documents stored in the wallet
136
+ * @memberof IWallet
137
+ * @returns {Promise<WalletDocument[]>} Array of all documents in the wallet
138
+ */
86
139
  getAllDocuments: () => dataStore.documents.getAllDocuments(),
140
+ /**
141
+ * Retrieves multiple documents by their IDs
142
+ * @memberof IWallet
143
+ * @param {string[]} idList - Array of document IDs to retrieve
144
+ * @returns {Promise<WalletDocument[]>} Array of documents matching the provided IDs
145
+ */
87
146
  getDocumentsById: (idList) => dataStore.documents.getDocumentsById(idList),
147
+ /**
148
+ * Retrieves all documents of a specific type
149
+ * @memberof IWallet
150
+ * @param {string} type - The document type to filter by (e.g., 'VerifiableCredential', 'DIDDocument')
151
+ * @returns {Promise<WalletDocument[]>} Array of documents matching the specified type
152
+ */
88
153
  getDocumentsByType: (type) => dataStore.documents.getDocumentsByType(type),
154
+ /**
155
+ * Adds a new document to the wallet
156
+ * @memberof IWallet
157
+ * @param {any} json - The document to add (must have valid JSON-LD structure)
158
+ * @param {any} [options] - Optional parameters for document creation
159
+ * @returns {Promise<WalletDocument>} The created document with generated metadata
160
+ * @fires WalletEvents.documentAdded
161
+ * @example
162
+ * const credential = {
163
+ * "@context": ["https://www.w3.org/2018/credentials/v1"],
164
+ * "type": ["VerifiableCredential"],
165
+ * "issuer": "did:dock:123",
166
+ * "credentialSubject": { "name": "John Doe" }
167
+ * };
168
+ * const addedDoc = await wallet.addDocument(credential);
169
+ */
89
170
  addDocument: (json: any) => {
90
171
  return dataStore.documents.addDocument(json).then(result => {
91
172
  eventEmitter.emit(WalletEvents.documentAdded, result);
92
173
  return result;
93
174
  });
94
175
  },
176
+ /**
177
+ * Updates an existing document
178
+ * @memberof IWallet
179
+ * @param {any} document - The document with updated data (must include ID)
180
+ * @param {any} [options] - Optional parameters for document update
181
+ * @returns {Promise<WalletDocument>} The updated document
182
+ * @fires WalletEvents.documentUpdated
183
+ * @throws {Error} If document doesn't exist
184
+ */
95
185
  updateDocument: (document: any) => {
96
186
  return dataStore.documents.updateDocument(document).then(result => {
97
187
  eventEmitter.emit(WalletEvents.documentUpdated, result);
98
188
  return result;
99
189
  });
100
190
  },
191
+ /**
192
+ * Removes a document from the wallet
193
+ * @memberof IWallet
194
+ * @param {string} id - The ID of the document to remove
195
+ * @param {any} [options] - Optional parameters for document removal
196
+ * @returns {Promise<void>}
197
+ * @fires WalletEvents.documentRemoved
198
+ * @throws {Error} If document is not found
199
+ */
101
200
  removeDocument: async (id: string) => {
102
201
  const document = await wallet.getDocumentById(id);
103
202
 
@@ -106,9 +205,21 @@ export async function createWallet({
106
205
  return result;
107
206
  });
108
207
  },
208
+ /**
209
+ * Gets all documents correlated to a specific document
210
+ * @memberof IWallet
211
+ * @param {string} documentId - The ID of the document to find correlations for
212
+ * @returns {Promise<WalletDocument[]>} Array of correlated documents
213
+ */
109
214
  getDocumentCorrelations: (documentId: string) => {
110
215
  return dataStore.documents.getDocumentCorrelations(documentId);
111
216
  },
217
+ /**
218
+ * Retrieves the keypair associated with an account
219
+ * @memberof IWallet
220
+ * @param {string} accountId - The account ID to get the keypair for
221
+ * @returns {Promise<any>} The keypair associated with the account
222
+ */
112
223
  getAccountKeyPair: async (accountId: string) => {
113
224
  const correlations = await dataStore.documents.getDocumentCorrelations(accountId);
114
225
 
@@ -118,12 +229,31 @@ export async function createWallet({
118
229
 
119
230
  return keyPair?.value;
120
231
  },
232
+ /**
233
+ * Decrypts and retrieves documents from an encrypted wallet without importing
234
+ * @memberof IWallet
235
+ * @param {any} json - The encrypted wallet JSON
236
+ * @param {string} password - Password to decrypt the wallet
237
+ * @returns {Promise<any>} Array of decrypted documents
238
+ */
121
239
  getDocumentsFromEncryptedWallet: async (json: any, password: string) => {
122
240
  return walletService.getDocumentsFromEncryptedWallet({
123
241
  encryptedJSONWallet: json,
124
242
  password,
125
243
  });
126
244
  },
245
+ /**
246
+ * Imports documents from an encrypted Universal Wallet 2020 JSON
247
+ * @memberof IWallet
248
+ * @param {any} json - The encrypted wallet JSON
249
+ * @param {string} password - Password to decrypt the wallet
250
+ * @returns {Promise<void>}
251
+ * @see {@link https://w3c-ccg.github.io/universal-wallet-interop-spec/}
252
+ * @example
253
+ * // Import from encrypted wallet backup
254
+ * const walletBackup = { ... }; // encrypted wallet JSON
255
+ * await wallet.importUniversalWalletJSON(walletBackup, 'mypassword');
256
+ */
127
257
  importUniversalWalletJSON: async (json: any, password: string) => {
128
258
  const documents = await walletService.getDocumentsFromEncryptedWallet({
129
259
  encryptedJSONWallet: json,
@@ -137,6 +267,14 @@ export async function createWallet({
137
267
 
138
268
  return documents;
139
269
  },
270
+ /**
271
+ * Exports specified documents as an encrypted JSON (test)
272
+ * @memberof IWallet
273
+ * @param {Object} params - Export parameters
274
+ * @param {any[]} params.documents - Documents to export
275
+ * @param {string} params.password - Password for encryption
276
+ * @returns {Promise<any>} Encrypted wallet JSON
277
+ */
140
278
  exportDocuments: async (params: {documents: any; password: string}) => {
141
279
  const documents = params.documents.map(ensureDocumentContext);
142
280
  return walletService.exportDocuments({
@@ -144,6 +282,17 @@ export async function createWallet({
144
282
  password: params.password,
145
283
  });
146
284
  },
285
+ /**
286
+ * Exports the entire wallet as an encrypted Universal Wallet 2020 JSON
287
+ * @memberof IWallet
288
+ * @param {string} password - Password for encryption
289
+ * @returns {any} Encrypted Universal Wallet JSON representation
290
+ * @see {@link https://w3c-ccg.github.io/universal-wallet-interop-spec/}
291
+ * @example
292
+ * // Create encrypted backup of entire wallet
293
+ * const backup = await wallet.exportUniversalWalletJSON('mypassword');
294
+ * // Save backup to file or cloud storage
295
+ */
147
296
  exportUniversalWalletJSON: async (password: string) => {
148
297
  let documents = await dataStore.documents.getAllDocuments(true);
149
298