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