@docknetwork/wallet-sdk-wasm 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.
- package/generate-docs.js +49 -0
- package/jsdoc.conf.json +29 -6
- package/lib/index.js +8 -1
- package/lib/index.mjs +8 -1
- package/lib/rpc-server.js +10 -1
- package/lib/rpc-server.mjs +10 -1
- package/lib/services/blockchain/cached-did-resolver.js +113 -0
- package/lib/services/blockchain/cached-did-resolver.mjs +109 -0
- package/lib/services/blockchain/index.js +11 -0
- package/lib/services/blockchain/index.mjs +11 -0
- package/lib/services/blockchain/service-rpc.js +12 -0
- package/lib/services/blockchain/service-rpc.mjs +12 -0
- package/lib/services/blockchain/service.js +140 -11
- package/lib/services/blockchain/service.mjs +140 -11
- package/lib/services/credential/bbs-revocation.js +11 -0
- package/lib/services/credential/bbs-revocation.mjs +11 -0
- package/lib/services/credential/config.js +4 -1
- package/lib/services/credential/config.mjs +4 -1
- package/lib/services/credential/index.js +14 -0
- package/lib/services/credential/index.mjs +14 -0
- package/lib/services/credential/sd-jwt.js +214 -0
- package/lib/services/credential/sd-jwt.mjs +200 -0
- package/lib/services/credential/service-rpc.js +9 -0
- package/lib/services/credential/service-rpc.mjs +9 -0
- package/lib/services/credential/service.js +324 -7
- package/lib/services/credential/service.mjs +324 -7
- package/lib/services/edv/service.js +145 -1
- package/lib/services/edv/service.mjs +145 -1
- package/lib/services/index.js +13 -0
- package/lib/services/index.mjs +13 -0
- package/lib/services/relay-service/service.js +124 -1
- package/lib/services/relay-service/service.mjs +124 -1
- package/lib/services/rpc-service-client.js +0 -3
- package/lib/services/rpc-service-client.mjs +0 -3
- package/lib/services/storage/index.js +19 -2
- package/lib/services/storage/index.mjs +24 -1
- package/lib/services/storage/service-rpc.js +7 -3
- package/lib/services/storage/service-rpc.mjs +7 -3
- package/lib/services/storage/service.js +4 -0
- package/lib/services/storage/service.mjs +4 -0
- package/lib/setup-nodejs.js +8 -1
- package/lib/setup-nodejs.mjs +8 -1
- package/lib/setup-tests.js +8 -1
- package/lib/setup-tests.mjs +8 -1
- package/lib/src/services/blockchain/cached-did-resolver.d.ts +28 -0
- package/lib/src/services/blockchain/cached-did-resolver.d.ts.map +1 -0
- package/lib/src/services/blockchain/cached-did-resolver.test.d.ts +2 -0
- package/lib/src/services/blockchain/cached-did-resolver.test.d.ts.map +1 -0
- package/lib/src/services/blockchain/service.d.ts +114 -17
- package/lib/src/services/blockchain/service.d.ts.map +1 -1
- package/lib/src/services/credential/config.d.ts.map +1 -1
- package/lib/src/services/credential/index.d.ts +3 -0
- package/lib/src/services/credential/index.d.ts.map +1 -1
- package/lib/src/services/credential/sd-jwt.test.d.ts +2 -0
- package/lib/src/services/credential/sd-jwt.test.d.ts.map +1 -0
- package/lib/src/services/credential/service.d.ts +274 -4
- package/lib/src/services/credential/service.d.ts.map +1 -1
- package/lib/src/services/edv/service.d.ts +151 -1
- package/lib/src/services/edv/service.d.ts.map +1 -1
- package/lib/src/services/relay-service/service.d.ts +129 -1
- package/lib/src/services/relay-service/service.d.ts.map +1 -1
- package/lib/src/services/rpc-service-client.d.ts +2 -2
- package/lib/src/services/rpc-service-client.d.ts.map +1 -1
- package/lib/src/services/storage/index.d.ts +1 -1
- package/lib/src/services/storage/index.d.ts.map +1 -1
- package/lib/src/services/storage/service-rpc.d.ts +9 -0
- package/lib/src/services/storage/service-rpc.d.ts.map +1 -0
- package/lib/src/services/storage/service.d.ts +1 -0
- package/lib/src/services/storage/service.d.ts.map +1 -1
- package/lib/src/services/util-crypto/service.d.ts +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/wallet/rpc-storage-interface.js +13 -3
- package/lib/wallet/rpc-storage-interface.mjs +11 -1
- package/lib/wallet/rpc-storage-wallet.js +10 -0
- package/lib/wallet/rpc-storage-wallet.mjs +10 -0
- package/package.json +13 -8
- package/src/services/blockchain/cached-did-resolver.test.ts +288 -0
- package/src/services/blockchain/cached-did-resolver.ts +126 -0
- package/src/services/blockchain/service-rpc.js +12 -0
- package/src/services/blockchain/service.ts +142 -11
- package/src/services/credential/config.ts +7 -1
- package/src/services/credential/sd-jwt.test.ts +718 -0
- package/src/services/credential/sd-jwt.ts +231 -0
- package/src/services/credential/service-rpc.js +9 -0
- package/src/services/credential/service.ts +328 -7
- package/src/services/edv/service.ts +153 -1
- package/src/services/relay-service/service.ts +130 -1
- package/src/services/rpc-service-client.js +0 -3
- package/src/services/storage/index.js +15 -1
- package/src/services/storage/service-rpc.js +7 -3
- package/src/services/storage/service.ts +5 -0
|
@@ -23,7 +23,10 @@ import '../dids/keypair-utils.mjs';
|
|
|
23
23
|
|
|
24
24
|
// @ts-nocheck
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Service class for managing Encrypted Data Vaults
|
|
27
|
+
* @class
|
|
28
|
+
* @description Provides methods for creating, managing, and interacting with
|
|
29
|
+
* encrypted data vaults for secure storage of sensitive wallet data
|
|
27
30
|
*/
|
|
28
31
|
class EDVService {
|
|
29
32
|
storageInterface;
|
|
@@ -39,9 +42,32 @@ class EDVService {
|
|
|
39
42
|
EDVService.prototype.insert,
|
|
40
43
|
EDVService.prototype.delete,
|
|
41
44
|
];
|
|
45
|
+
/**
|
|
46
|
+
* Creates a new EDVService instance
|
|
47
|
+
* @constructor
|
|
48
|
+
*/
|
|
42
49
|
constructor() {
|
|
43
50
|
this.name = serviceName;
|
|
44
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Initializes the EDV service with encryption keys and connection parameters
|
|
54
|
+
* @param {InitializeEDVParams} params - Initialization parameters
|
|
55
|
+
* @param {Object} params.hmacKey - HMAC key for document indexing
|
|
56
|
+
* @param {Object} params.agreementKey - Key agreement key for encryption
|
|
57
|
+
* @param {Object} params.verificationKey - Verification key for authentication
|
|
58
|
+
* @param {string} params.edvUrl - URL of the EDV server
|
|
59
|
+
* @param {string} params.authKey - Authentication key for the EDV server
|
|
60
|
+
* @returns {Promise<void>}
|
|
61
|
+
* @throws {Error} If unable to create or connect to EDV
|
|
62
|
+
* @example
|
|
63
|
+
* await edvService.initialize({
|
|
64
|
+
* hmacKey: hmacKeyData,
|
|
65
|
+
* agreementKey: agreementKeyData,
|
|
66
|
+
* verificationKey: verificationKeyData,
|
|
67
|
+
* edvUrl: 'https://edv.example.com',
|
|
68
|
+
* authKey: 'auth-token-123'
|
|
69
|
+
* });
|
|
70
|
+
*/
|
|
45
71
|
async initialize({ hmacKey, agreementKey, verificationKey, edvUrl, authKey, }) {
|
|
46
72
|
const hmac = await HMAC.create({
|
|
47
73
|
key: hmacKey,
|
|
@@ -89,6 +115,21 @@ class EDVService {
|
|
|
89
115
|
attribute: 'content.type',
|
|
90
116
|
});
|
|
91
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Generates new cryptographic keys for EDV operations
|
|
120
|
+
* @returns {Promise<Object>} Generated keys
|
|
121
|
+
* @returns {Object} returns.verificationKey - Ed25519 verification key for authentication
|
|
122
|
+
* @returns {Object} returns.agreementKey - X25519 key agreement key for encryption
|
|
123
|
+
* @returns {Object} returns.hmacKey - HMAC key for indexing
|
|
124
|
+
* @example
|
|
125
|
+
* const keys = await edvService.generateKeys();
|
|
126
|
+
* // Use keys for EDV initialization
|
|
127
|
+
* await edvService.initialize({
|
|
128
|
+
* ...keys,
|
|
129
|
+
* edvUrl: 'https://edv.example.com',
|
|
130
|
+
* authKey: 'auth-token'
|
|
131
|
+
* });
|
|
132
|
+
*/
|
|
92
133
|
async generateKeys() {
|
|
93
134
|
const keyPair = await didService.generateKeyDoc({});
|
|
94
135
|
const verificationKey = await Ed25519VerificationKey2018.generate({
|
|
@@ -101,6 +142,17 @@ class EDVService {
|
|
|
101
142
|
const hmacKey = await HMAC.exportKey(await HMAC.generateKey());
|
|
102
143
|
return { verificationKey, agreementKey, hmacKey };
|
|
103
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Derives cryptographic keys from a master key
|
|
147
|
+
* @param {Uint8Array} masterKey - Master key for derivation
|
|
148
|
+
* @returns {Promise<Object>} Derived keys
|
|
149
|
+
* @returns {Object} returns.verificationKey - Derived Ed25519 verification key
|
|
150
|
+
* @returns {Object} returns.agreementKey - Derived X25519 key agreement key
|
|
151
|
+
* @returns {Object} returns.hmacKey - Derived HMAC key
|
|
152
|
+
* @example
|
|
153
|
+
* const masterKey = new Uint8Array(32); // Your master key
|
|
154
|
+
* const keys = await edvService.deriveKeys(masterKey);
|
|
155
|
+
*/
|
|
104
156
|
async deriveKeys(masterKey) {
|
|
105
157
|
const { keyPair: pair } = new Ed25519Keypair(masterKey, 'seed');
|
|
106
158
|
const keyPair = await didService.deriveKeyDoc({ pair });
|
|
@@ -110,15 +162,63 @@ class EDVService {
|
|
|
110
162
|
const hmacKey = await HMAC.exportKey(await HMAC.deriveKey(masterKey));
|
|
111
163
|
return { verificationKey, agreementKey, hmacKey };
|
|
112
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Gets the controller identifier for the current EDV
|
|
167
|
+
* @returns {Promise<string>} The controller DID or identifier
|
|
168
|
+
* @example
|
|
169
|
+
* const controller = await edvService.getController();
|
|
170
|
+
* console.log('EDV Controller:', controller);
|
|
171
|
+
*/
|
|
113
172
|
async getController() {
|
|
114
173
|
return this.controller;
|
|
115
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Finds documents in the EDV based on query parameters
|
|
177
|
+
* @param {Object} params - Query parameters
|
|
178
|
+
* @param {Object} [params.equals] - Equality-based query conditions
|
|
179
|
+
* @param {boolean} [params.has] - Existence-based query conditions
|
|
180
|
+
* @param {number} [params.limit] - Maximum number of results
|
|
181
|
+
* @returns {Promise<Array>} Array of matching documents
|
|
182
|
+
* @example
|
|
183
|
+
* const documents = await edvService.find({
|
|
184
|
+
* equals: { 'content.type': 'VerifiableCredential' },
|
|
185
|
+
* limit: 10
|
|
186
|
+
* });
|
|
187
|
+
*/
|
|
116
188
|
find(params) {
|
|
117
189
|
return this.storageInterface.find(params);
|
|
118
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Updates a document in the EDV
|
|
193
|
+
* @param {Object} params - Update parameters
|
|
194
|
+
* @param {string} params.id - Document ID to update
|
|
195
|
+
* @param {Object} params.content - New document content
|
|
196
|
+
* @returns {Promise<Object>} Updated document
|
|
197
|
+
* @example
|
|
198
|
+
* const updated = await edvService.update({
|
|
199
|
+
* id: 'doc-123',
|
|
200
|
+
* content: { ...existingContent, updated: true }
|
|
201
|
+
* });
|
|
202
|
+
*/
|
|
119
203
|
update(params) {
|
|
120
204
|
return this.storageInterface.update(params);
|
|
121
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Inserts a new document into the EDV
|
|
208
|
+
* @param {Object} params - Insert parameters
|
|
209
|
+
* @param {string} params.id - Document ID
|
|
210
|
+
* @param {Object} params.content - Document content to store
|
|
211
|
+
* @returns {Promise<Object>} The inserted document
|
|
212
|
+
* @throws {Error} If insertion fails
|
|
213
|
+
* @example
|
|
214
|
+
* const document = await edvService.insert({
|
|
215
|
+
* id: 'doc-456',
|
|
216
|
+
* content: {
|
|
217
|
+
* type: 'VerifiableCredential',
|
|
218
|
+
* data: credentialData
|
|
219
|
+
* }
|
|
220
|
+
* });
|
|
221
|
+
*/
|
|
122
222
|
insert(params) {
|
|
123
223
|
this.insertQueue = this.insertQueue.then(() => {
|
|
124
224
|
return this.storageInterface.insert(params).catch(error => {
|
|
@@ -128,10 +228,54 @@ class EDVService {
|
|
|
128
228
|
});
|
|
129
229
|
return this.insertQueue;
|
|
130
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Deletes a document from the EDV
|
|
233
|
+
* @param {Object} params - Deletion parameters
|
|
234
|
+
* @param {string} params.id - Document ID to delete
|
|
235
|
+
* @returns {Promise<boolean>} True if deletion successful
|
|
236
|
+
* @example
|
|
237
|
+
* const deleted = await edvService.delete({
|
|
238
|
+
* id: 'doc-123'
|
|
239
|
+
* });
|
|
240
|
+
*/
|
|
131
241
|
delete(params) {
|
|
132
242
|
return this.storageInterface.delete(params);
|
|
133
243
|
}
|
|
134
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
* Singleton instance of the EDV service
|
|
247
|
+
* @type {EDVService}
|
|
248
|
+
* @example
|
|
249
|
+
* import { edvService } from '@docknetwork/wallet-sdk-wasm/services/edv';
|
|
250
|
+
*
|
|
251
|
+
* // Generate keys and initialize
|
|
252
|
+
* const keys = await edvService.generateKeys();
|
|
253
|
+
* await edvService.initialize({
|
|
254
|
+
* ...keys,
|
|
255
|
+
* edvUrl: 'https://edv.example.com',
|
|
256
|
+
* authKey: 'auth-token'
|
|
257
|
+
* });
|
|
258
|
+
*
|
|
259
|
+
* // Store encrypted data
|
|
260
|
+
* await edvService.insert({
|
|
261
|
+
* id: 'credential-1',
|
|
262
|
+
* content: {
|
|
263
|
+
* type: 'VerifiableCredential',
|
|
264
|
+
* data: credentialData
|
|
265
|
+
* }
|
|
266
|
+
* });
|
|
267
|
+
*
|
|
268
|
+
* // Query encrypted data
|
|
269
|
+
* const credentials = await edvService.find({
|
|
270
|
+
* equals: { 'content.type': 'VerifiableCredential' }
|
|
271
|
+
* });
|
|
272
|
+
*
|
|
273
|
+
* // Update encrypted data
|
|
274
|
+
* await edvService.update({
|
|
275
|
+
* id: 'credential-1',
|
|
276
|
+
* content: updatedData
|
|
277
|
+
* });
|
|
278
|
+
*/
|
|
135
279
|
const edvService = new EDVService();
|
|
136
280
|
|
|
137
281
|
export { EDVService, edvService };
|
package/lib/services/index.js
CHANGED
|
@@ -20,6 +20,16 @@ require('../core/logger.js');
|
|
|
20
20
|
require('../modules/event-manager.js');
|
|
21
21
|
require('assert');
|
|
22
22
|
require('@docknetwork/credential-sdk/types');
|
|
23
|
+
require('./blockchain/cached-did-resolver.js');
|
|
24
|
+
require('./storage/index.js');
|
|
25
|
+
require('./storage/service-rpc.js');
|
|
26
|
+
require('./rpc-service-client.js');
|
|
27
|
+
require('../rpc-client.js');
|
|
28
|
+
require('json-rpc-2.0');
|
|
29
|
+
require('../core/crypto.js');
|
|
30
|
+
require('crypto');
|
|
31
|
+
require('../logger.js');
|
|
32
|
+
require('../rpc-util.js');
|
|
23
33
|
require('../wallet/memory-storage-wallet.js');
|
|
24
34
|
require('@docknetwork/universal-wallet/storage-wallet');
|
|
25
35
|
require('../wallet/memory-storage-interface.js');
|
|
@@ -55,6 +65,9 @@ require('@docknetwork/crypto-wasm-ts/lib/legosnark');
|
|
|
55
65
|
require('./credential/pex-helpers.js');
|
|
56
66
|
require('@astronautlabs/jsonpath');
|
|
57
67
|
require('./credential/bbs-revocation.js');
|
|
68
|
+
require('./credential/sd-jwt.js');
|
|
69
|
+
require('@sd-jwt/sd-jwt-vc');
|
|
70
|
+
require('@sd-jwt/crypto-nodejs');
|
|
58
71
|
require('./relay-service/configs.js');
|
|
59
72
|
require('@docknetwork/wallet-sdk-relay-service/lib');
|
|
60
73
|
require('./pex/config.js');
|
package/lib/services/index.mjs
CHANGED
|
@@ -18,6 +18,16 @@ import '../core/logger.mjs';
|
|
|
18
18
|
import '../modules/event-manager.mjs';
|
|
19
19
|
import 'assert';
|
|
20
20
|
import '@docknetwork/credential-sdk/types';
|
|
21
|
+
import './blockchain/cached-did-resolver.mjs';
|
|
22
|
+
import './storage/index.mjs';
|
|
23
|
+
import './storage/service-rpc.mjs';
|
|
24
|
+
import './rpc-service-client.mjs';
|
|
25
|
+
import '../rpc-client.mjs';
|
|
26
|
+
import 'json-rpc-2.0';
|
|
27
|
+
import '../core/crypto.mjs';
|
|
28
|
+
import 'crypto';
|
|
29
|
+
import '../logger.mjs';
|
|
30
|
+
import '../rpc-util.mjs';
|
|
21
31
|
import '../wallet/memory-storage-wallet.mjs';
|
|
22
32
|
import '@docknetwork/universal-wallet/storage-wallet';
|
|
23
33
|
import '../wallet/memory-storage-interface.mjs';
|
|
@@ -53,6 +63,9 @@ import '@docknetwork/crypto-wasm-ts/lib/legosnark';
|
|
|
53
63
|
import './credential/pex-helpers.mjs';
|
|
54
64
|
import '@astronautlabs/jsonpath';
|
|
55
65
|
import './credential/bbs-revocation.mjs';
|
|
66
|
+
import './credential/sd-jwt.mjs';
|
|
67
|
+
import '@sd-jwt/sd-jwt-vc';
|
|
68
|
+
import '@sd-jwt/crypto-nodejs';
|
|
56
69
|
import './relay-service/configs.mjs';
|
|
57
70
|
import '@docknetwork/wallet-sdk-relay-service/lib';
|
|
58
71
|
import './pex/config.mjs';
|
|
@@ -9,7 +9,16 @@ require('../../core/validation.js');
|
|
|
9
9
|
require('../../types.js');
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* @module relay-service
|
|
13
|
+
* @description DIDComm message relay service for the Wallet SDK.
|
|
14
|
+
* This module provides functionality for sending, receiving, and managing DIDComm messages
|
|
15
|
+
* through a relay service, including push notification support.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Service class for managing DIDComm message relay operations
|
|
19
|
+
* @class
|
|
20
|
+
* @description Provides methods for sending, receiving, and acknowledging DIDComm messages
|
|
21
|
+
* through a relay service infrastructure
|
|
13
22
|
*/
|
|
14
23
|
class RelayService {
|
|
15
24
|
name;
|
|
@@ -21,33 +30,147 @@ class RelayService {
|
|
|
21
30
|
RelayService.prototype.sendMessage,
|
|
22
31
|
RelayService.prototype.signJwt,
|
|
23
32
|
];
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new RelayService instance
|
|
35
|
+
* @constructor
|
|
36
|
+
*/
|
|
24
37
|
constructor() {
|
|
25
38
|
this.name = services_relayService_configs.serviceName;
|
|
26
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Sends a DIDComm message through the relay service
|
|
42
|
+
* @param {SendMessageParams} params - Message parameters
|
|
43
|
+
* @param {Object} params.keyPairDoc - Key pair document for message encryption
|
|
44
|
+
* @param {Object} params.message - The message payload to send
|
|
45
|
+
* @param {string} params.recipientDid - DID of the message recipient
|
|
46
|
+
* @param {string} [params.type] - Message type identifier
|
|
47
|
+
* @returns {Promise<Object>} Result of the send operation
|
|
48
|
+
* @throws {Error} If validation fails or sending fails
|
|
49
|
+
* @example
|
|
50
|
+
* const result = await relayService.sendMessage({
|
|
51
|
+
* keyPairDoc: senderKeyPair,
|
|
52
|
+
* message: { content: 'Hello' },
|
|
53
|
+
* recipientDid: 'did:key:recipient123',
|
|
54
|
+
* type: 'basic-message'
|
|
55
|
+
* });
|
|
56
|
+
*/
|
|
27
57
|
sendMessage(params) {
|
|
28
58
|
services_relayService_configs.validation.sendMessage(params);
|
|
29
59
|
return src.RelayService.sendMessage(params);
|
|
30
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Acknowledges receipt of messages from the relay service
|
|
63
|
+
* @param {AckMessagesParams} params - Acknowledgment parameters
|
|
64
|
+
* @param {string} params.did - DID acknowledging the messages
|
|
65
|
+
* @param {Array<string>} params.messageIds - Array of message IDs to acknowledge
|
|
66
|
+
* @returns {Promise<Object>} Result of the acknowledgment operation
|
|
67
|
+
* @example
|
|
68
|
+
* await relayService.ackMessages({
|
|
69
|
+
* did: 'did:key:holder123',
|
|
70
|
+
* messageIds: ['msg-1', 'msg-2']
|
|
71
|
+
* });
|
|
72
|
+
*/
|
|
31
73
|
ackMessages(params) {
|
|
32
74
|
return src.RelayService.ackMessages(params);
|
|
33
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolves and decrypts a DIDComm message
|
|
78
|
+
* @param {ResolveDidcommMessageParams} params - Resolution parameters
|
|
79
|
+
* @param {Object} params.encryptedMessage - The encrypted message to resolve
|
|
80
|
+
* @param {Object} params.keyPairDoc - Key pair document for decryption
|
|
81
|
+
* @returns {Promise<Object>} The decrypted and resolved message
|
|
82
|
+
* @throws {Error} If validation fails or resolution fails
|
|
83
|
+
* @example
|
|
84
|
+
* const decrypted = await relayService.resolveDidcommMessage({
|
|
85
|
+
* encryptedMessage: encryptedData,
|
|
86
|
+
* keyPairDoc: recipientKeyPair
|
|
87
|
+
* });
|
|
88
|
+
*/
|
|
34
89
|
resolveDidcommMessage(params) {
|
|
35
90
|
services_relayService_configs.validation.resolveDidcommMessage(params);
|
|
36
91
|
return src.RelayService.resolveDidcommMessage(params);
|
|
37
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Signs a JWT using the provided key pair
|
|
95
|
+
* @param {ResolveDidcommMessageParams} params - Signing parameters
|
|
96
|
+
* @param {Object} params.payload - JWT payload to sign
|
|
97
|
+
* @param {Object} params.keyPairDoc - Key pair document for signing
|
|
98
|
+
* @returns {Promise<string>} The signed JWT token
|
|
99
|
+
* @throws {Error} If validation fails or signing fails
|
|
100
|
+
* @example
|
|
101
|
+
* const jwt = await relayService.signJwt({
|
|
102
|
+
* payload: { sub: 'did:key:123', iat: Date.now() },
|
|
103
|
+
* keyPairDoc: signerKeyPair
|
|
104
|
+
* });
|
|
105
|
+
*/
|
|
38
106
|
signJwt(params) {
|
|
39
107
|
services_relayService_configs.validation.signJwt(params);
|
|
40
108
|
return src.RelayService.signJwt(params);
|
|
41
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Retrieves messages from the relay service
|
|
112
|
+
* @param {GetMessagesParams} params - Retrieval parameters
|
|
113
|
+
* @param {Object} params.keyPairDocs - Key pair documents for decryption
|
|
114
|
+
* @param {number} [params.limit] - Maximum number of messages to retrieve
|
|
115
|
+
* @param {boolean} [params.skipMessageResolution] - Whether to skip message resolution
|
|
116
|
+
* @returns {Promise<Array>} Array of retrieved messages
|
|
117
|
+
* @throws {Error} If validation fails or retrieval fails
|
|
118
|
+
* @example
|
|
119
|
+
* const messages = await relayService.getMessages({
|
|
120
|
+
* keyPairDocs: [keyPairDoc1, keyPairDoc2],
|
|
121
|
+
* limit: 50,
|
|
122
|
+
* skipMessageResolution: false
|
|
123
|
+
* });
|
|
124
|
+
*/
|
|
42
125
|
getMessages(params) {
|
|
43
126
|
services_relayService_configs.validation.getMessages(params);
|
|
44
127
|
return src.RelayService.getMessages(params);
|
|
45
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Registers a DID for push notifications
|
|
131
|
+
* @param {RegisterDIDPushNotificationParams} params - Registration parameters
|
|
132
|
+
* @param {string} params.did - The DID to register for notifications
|
|
133
|
+
* @param {string} params.deviceToken - Device token for push notifications
|
|
134
|
+
* @param {string} [params.platform] - Platform identifier (ios, android, etc.)
|
|
135
|
+
* @returns {Promise<Object>} Result of the registration
|
|
136
|
+
* @throws {Error} If validation fails or registration fails
|
|
137
|
+
* @example
|
|
138
|
+
* await relayService.registerDIDPushNotification({
|
|
139
|
+
* did: 'did:key:holder123',
|
|
140
|
+
* deviceToken: 'fcm-token-123',
|
|
141
|
+
* platform: 'android'
|
|
142
|
+
* });
|
|
143
|
+
*/
|
|
46
144
|
registerDIDPushNotification(params) {
|
|
47
145
|
services_relayService_configs.validation.registerDIDPushNotification(params);
|
|
48
146
|
return src.RelayService.registerDIDPushNotification(params);
|
|
49
147
|
}
|
|
50
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Singleton instance of the relay service
|
|
151
|
+
* @type {RelayService}
|
|
152
|
+
* @example
|
|
153
|
+
* import { relayService } from '@docknetwork/wallet-sdk-wasm/services/relay-service';
|
|
154
|
+
*
|
|
155
|
+
* // Send a DIDComm message
|
|
156
|
+
* await relayService.sendMessage({
|
|
157
|
+
* keyPairDoc: senderKeyPair,
|
|
158
|
+
* message: { type: 'greeting', content: 'Hello!' },
|
|
159
|
+
* recipientDid: 'did:key:recipient123'
|
|
160
|
+
* });
|
|
161
|
+
*
|
|
162
|
+
* // Retrieve messages
|
|
163
|
+
* const messages = await relayService.getMessages({
|
|
164
|
+
* keyPairDocs: [recipientKeyPair],
|
|
165
|
+
* limit: 10
|
|
166
|
+
* });
|
|
167
|
+
*
|
|
168
|
+
* // Acknowledge messages
|
|
169
|
+
* await relayService.ackMessages({
|
|
170
|
+
* did: 'did:key:recipient123',
|
|
171
|
+
* messageIds: messages.map(m => m.id)
|
|
172
|
+
* });
|
|
173
|
+
*/
|
|
51
174
|
const relayService = new RelayService();
|
|
52
175
|
|
|
53
176
|
Object.defineProperty(exports, 'relayServiceClient', {
|
|
@@ -6,7 +6,16 @@ import '../../core/validation.mjs';
|
|
|
6
6
|
import '../../types.mjs';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* @module relay-service
|
|
10
|
+
* @description DIDComm message relay service for the Wallet SDK.
|
|
11
|
+
* This module provides functionality for sending, receiving, and managing DIDComm messages
|
|
12
|
+
* through a relay service, including push notification support.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Service class for managing DIDComm message relay operations
|
|
16
|
+
* @class
|
|
17
|
+
* @description Provides methods for sending, receiving, and acknowledging DIDComm messages
|
|
18
|
+
* through a relay service infrastructure
|
|
10
19
|
*/
|
|
11
20
|
class RelayService {
|
|
12
21
|
name;
|
|
@@ -18,33 +27,147 @@ class RelayService {
|
|
|
18
27
|
RelayService.prototype.sendMessage,
|
|
19
28
|
RelayService.prototype.signJwt,
|
|
20
29
|
];
|
|
30
|
+
/**
|
|
31
|
+
* Creates a new RelayService instance
|
|
32
|
+
* @constructor
|
|
33
|
+
*/
|
|
21
34
|
constructor() {
|
|
22
35
|
this.name = serviceName;
|
|
23
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Sends a DIDComm message through the relay service
|
|
39
|
+
* @param {SendMessageParams} params - Message parameters
|
|
40
|
+
* @param {Object} params.keyPairDoc - Key pair document for message encryption
|
|
41
|
+
* @param {Object} params.message - The message payload to send
|
|
42
|
+
* @param {string} params.recipientDid - DID of the message recipient
|
|
43
|
+
* @param {string} [params.type] - Message type identifier
|
|
44
|
+
* @returns {Promise<Object>} Result of the send operation
|
|
45
|
+
* @throws {Error} If validation fails or sending fails
|
|
46
|
+
* @example
|
|
47
|
+
* const result = await relayService.sendMessage({
|
|
48
|
+
* keyPairDoc: senderKeyPair,
|
|
49
|
+
* message: { content: 'Hello' },
|
|
50
|
+
* recipientDid: 'did:key:recipient123',
|
|
51
|
+
* type: 'basic-message'
|
|
52
|
+
* });
|
|
53
|
+
*/
|
|
24
54
|
sendMessage(params) {
|
|
25
55
|
validation.sendMessage(params);
|
|
26
56
|
return RelayService$1.sendMessage(params);
|
|
27
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Acknowledges receipt of messages from the relay service
|
|
60
|
+
* @param {AckMessagesParams} params - Acknowledgment parameters
|
|
61
|
+
* @param {string} params.did - DID acknowledging the messages
|
|
62
|
+
* @param {Array<string>} params.messageIds - Array of message IDs to acknowledge
|
|
63
|
+
* @returns {Promise<Object>} Result of the acknowledgment operation
|
|
64
|
+
* @example
|
|
65
|
+
* await relayService.ackMessages({
|
|
66
|
+
* did: 'did:key:holder123',
|
|
67
|
+
* messageIds: ['msg-1', 'msg-2']
|
|
68
|
+
* });
|
|
69
|
+
*/
|
|
28
70
|
ackMessages(params) {
|
|
29
71
|
return RelayService$1.ackMessages(params);
|
|
30
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolves and decrypts a DIDComm message
|
|
75
|
+
* @param {ResolveDidcommMessageParams} params - Resolution parameters
|
|
76
|
+
* @param {Object} params.encryptedMessage - The encrypted message to resolve
|
|
77
|
+
* @param {Object} params.keyPairDoc - Key pair document for decryption
|
|
78
|
+
* @returns {Promise<Object>} The decrypted and resolved message
|
|
79
|
+
* @throws {Error} If validation fails or resolution fails
|
|
80
|
+
* @example
|
|
81
|
+
* const decrypted = await relayService.resolveDidcommMessage({
|
|
82
|
+
* encryptedMessage: encryptedData,
|
|
83
|
+
* keyPairDoc: recipientKeyPair
|
|
84
|
+
* });
|
|
85
|
+
*/
|
|
31
86
|
resolveDidcommMessage(params) {
|
|
32
87
|
validation.resolveDidcommMessage(params);
|
|
33
88
|
return RelayService$1.resolveDidcommMessage(params);
|
|
34
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Signs a JWT using the provided key pair
|
|
92
|
+
* @param {ResolveDidcommMessageParams} params - Signing parameters
|
|
93
|
+
* @param {Object} params.payload - JWT payload to sign
|
|
94
|
+
* @param {Object} params.keyPairDoc - Key pair document for signing
|
|
95
|
+
* @returns {Promise<string>} The signed JWT token
|
|
96
|
+
* @throws {Error} If validation fails or signing fails
|
|
97
|
+
* @example
|
|
98
|
+
* const jwt = await relayService.signJwt({
|
|
99
|
+
* payload: { sub: 'did:key:123', iat: Date.now() },
|
|
100
|
+
* keyPairDoc: signerKeyPair
|
|
101
|
+
* });
|
|
102
|
+
*/
|
|
35
103
|
signJwt(params) {
|
|
36
104
|
validation.signJwt(params);
|
|
37
105
|
return RelayService$1.signJwt(params);
|
|
38
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Retrieves messages from the relay service
|
|
109
|
+
* @param {GetMessagesParams} params - Retrieval parameters
|
|
110
|
+
* @param {Object} params.keyPairDocs - Key pair documents for decryption
|
|
111
|
+
* @param {number} [params.limit] - Maximum number of messages to retrieve
|
|
112
|
+
* @param {boolean} [params.skipMessageResolution] - Whether to skip message resolution
|
|
113
|
+
* @returns {Promise<Array>} Array of retrieved messages
|
|
114
|
+
* @throws {Error} If validation fails or retrieval fails
|
|
115
|
+
* @example
|
|
116
|
+
* const messages = await relayService.getMessages({
|
|
117
|
+
* keyPairDocs: [keyPairDoc1, keyPairDoc2],
|
|
118
|
+
* limit: 50,
|
|
119
|
+
* skipMessageResolution: false
|
|
120
|
+
* });
|
|
121
|
+
*/
|
|
39
122
|
getMessages(params) {
|
|
40
123
|
validation.getMessages(params);
|
|
41
124
|
return RelayService$1.getMessages(params);
|
|
42
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Registers a DID for push notifications
|
|
128
|
+
* @param {RegisterDIDPushNotificationParams} params - Registration parameters
|
|
129
|
+
* @param {string} params.did - The DID to register for notifications
|
|
130
|
+
* @param {string} params.deviceToken - Device token for push notifications
|
|
131
|
+
* @param {string} [params.platform] - Platform identifier (ios, android, etc.)
|
|
132
|
+
* @returns {Promise<Object>} Result of the registration
|
|
133
|
+
* @throws {Error} If validation fails or registration fails
|
|
134
|
+
* @example
|
|
135
|
+
* await relayService.registerDIDPushNotification({
|
|
136
|
+
* did: 'did:key:holder123',
|
|
137
|
+
* deviceToken: 'fcm-token-123',
|
|
138
|
+
* platform: 'android'
|
|
139
|
+
* });
|
|
140
|
+
*/
|
|
43
141
|
registerDIDPushNotification(params) {
|
|
44
142
|
validation.registerDIDPushNotification(params);
|
|
45
143
|
return RelayService$1.registerDIDPushNotification(params);
|
|
46
144
|
}
|
|
47
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Singleton instance of the relay service
|
|
148
|
+
* @type {RelayService}
|
|
149
|
+
* @example
|
|
150
|
+
* import { relayService } from '@docknetwork/wallet-sdk-wasm/services/relay-service';
|
|
151
|
+
*
|
|
152
|
+
* // Send a DIDComm message
|
|
153
|
+
* await relayService.sendMessage({
|
|
154
|
+
* keyPairDoc: senderKeyPair,
|
|
155
|
+
* message: { type: 'greeting', content: 'Hello!' },
|
|
156
|
+
* recipientDid: 'did:key:recipient123'
|
|
157
|
+
* });
|
|
158
|
+
*
|
|
159
|
+
* // Retrieve messages
|
|
160
|
+
* const messages = await relayService.getMessages({
|
|
161
|
+
* keyPairDocs: [recipientKeyPair],
|
|
162
|
+
* limit: 10
|
|
163
|
+
* });
|
|
164
|
+
*
|
|
165
|
+
* // Acknowledge messages
|
|
166
|
+
* await relayService.ackMessages({
|
|
167
|
+
* did: 'did:key:recipient123',
|
|
168
|
+
* messageIds: messages.map(m => m.id)
|
|
169
|
+
* });
|
|
170
|
+
*/
|
|
48
171
|
const relayService = new RelayService();
|
|
49
172
|
|
|
50
173
|
export { RelayService, relayService };
|
|
@@ -16,9 +16,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
16
16
|
var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);
|
|
17
17
|
|
|
18
18
|
class RpcService {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
19
|
constructor(serviceName) {
|
|
23
20
|
assert__default["default"](!!serviceName, 'serviceName is required');
|
|
24
21
|
|
|
@@ -3,7 +3,24 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var services_storage_service = require('./service.js');
|
|
6
|
+
var services_storage_serviceRpc = require('./service-rpc.js');
|
|
7
|
+
require('../rpc-service-client.js');
|
|
8
|
+
require('assert');
|
|
9
|
+
require('../../rpc-client.js');
|
|
10
|
+
require('json-rpc-2.0');
|
|
11
|
+
require('../../core/crypto.js');
|
|
12
|
+
require('crypto');
|
|
13
|
+
require('../../core/logger.js');
|
|
14
|
+
require('../../logger.js');
|
|
15
|
+
require('../../rpc-util.js');
|
|
6
16
|
|
|
17
|
+
exports.storageService = void 0;
|
|
7
18
|
|
|
8
|
-
|
|
9
|
-
|
|
19
|
+
if (typeof window !== 'undefined' && window.ReactNativeWebView) {
|
|
20
|
+
// Detect if we are running inside the webview
|
|
21
|
+
// then route the calls to the service-rpc
|
|
22
|
+
exports.storageService = new services_storage_serviceRpc.StorageServiceRpc();
|
|
23
|
+
} else {
|
|
24
|
+
// use the service directly for non-webview environments
|
|
25
|
+
exports.storageService = services_storage_service.storageService;
|
|
26
|
+
}
|
|
@@ -1 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
import { storageService as storageService$1 } from './service.mjs';
|
|
2
|
+
import { StorageServiceRpc } from './service-rpc.mjs';
|
|
3
|
+
import '../rpc-service-client.mjs';
|
|
4
|
+
import 'assert';
|
|
5
|
+
import '../../rpc-client.mjs';
|
|
6
|
+
import 'json-rpc-2.0';
|
|
7
|
+
import '../../core/crypto.mjs';
|
|
8
|
+
import 'crypto';
|
|
9
|
+
import '../../core/logger.mjs';
|
|
10
|
+
import '../../logger.mjs';
|
|
11
|
+
import '../../rpc-util.mjs';
|
|
12
|
+
|
|
13
|
+
let storageService;
|
|
14
|
+
|
|
15
|
+
if (typeof window !== 'undefined' && window.ReactNativeWebView) {
|
|
16
|
+
// Detect if we are running inside the webview
|
|
17
|
+
// then route the calls to the service-rpc
|
|
18
|
+
storageService = new StorageServiceRpc();
|
|
19
|
+
} else {
|
|
20
|
+
// use the service directly for non-webview environments
|
|
21
|
+
storageService = storageService$1;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { storageService };
|
|
@@ -17,17 +17,21 @@ class StorageServiceRpc extends services_rpcServiceClient.RpcService {
|
|
|
17
17
|
super('storage');
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
setItem(...args)
|
|
20
|
+
setItem(...args) {
|
|
21
21
|
return this.call('setItem', ...args);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
removeItem(...args)
|
|
24
|
+
removeItem(...args) {
|
|
25
25
|
return this.call('removeItem', ...args);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
getItem(...args)
|
|
28
|
+
getItem(...args) {
|
|
29
29
|
return this.call('getItem', ...args);
|
|
30
30
|
}
|
|
31
|
+
|
|
32
|
+
getAllKeys() {
|
|
33
|
+
return this.call('getAllKeys');
|
|
34
|
+
}
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
exports.StorageServiceRpc = StorageServiceRpc;
|