@0xpolygonid/js-sdk 1.16.0 → 1.17.1

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 (39) hide show
  1. package/dist/browser/esm/index.js +100 -10
  2. package/dist/browser/esm/index.js.map +1 -1
  3. package/dist/browser/umd/index.js +100 -10
  4. package/dist/browser/umd/index.js.map +1 -1
  5. package/dist/node/cjs/iden3comm/handlers/credential-proposal.js +2 -1
  6. package/dist/node/cjs/iden3comm/handlers/message-handler.js +3 -3
  7. package/dist/node/cjs/iden3comm/handlers/refresh.js +1 -1
  8. package/dist/node/cjs/iden3comm/handlers/revocation-status.js +3 -3
  9. package/dist/node/cjs/identity/identity-wallet.js +8 -2
  10. package/dist/node/cjs/kms/key-providers/bjj-provider.js +8 -0
  11. package/dist/node/cjs/kms/key-providers/ed25519-provider.js +8 -0
  12. package/dist/node/cjs/kms/key-providers/secp256k1-provider.js +8 -0
  13. package/dist/node/cjs/kms/kms.js +13 -0
  14. package/dist/node/cjs/kms/store/indexed-db-key-store.js +10 -0
  15. package/dist/node/cjs/kms/store/local-storage-key-store.js +14 -0
  16. package/dist/node/cjs/kms/store/memory-key-store.js +3 -0
  17. package/dist/node/esm/iden3comm/handlers/credential-proposal.js +2 -1
  18. package/dist/node/esm/iden3comm/handlers/message-handler.js +3 -3
  19. package/dist/node/esm/iden3comm/handlers/refresh.js +1 -1
  20. package/dist/node/esm/iden3comm/handlers/revocation-status.js +3 -3
  21. package/dist/node/esm/identity/identity-wallet.js +8 -2
  22. package/dist/node/esm/kms/key-providers/bjj-provider.js +8 -0
  23. package/dist/node/esm/kms/key-providers/ed25519-provider.js +8 -0
  24. package/dist/node/esm/kms/key-providers/secp256k1-provider.js +8 -0
  25. package/dist/node/esm/kms/kms.js +13 -0
  26. package/dist/node/esm/kms/store/indexed-db-key-store.js +11 -1
  27. package/dist/node/esm/kms/store/local-storage-key-store.js +14 -0
  28. package/dist/node/esm/kms/store/memory-key-store.js +3 -0
  29. package/dist/types/iden3comm/handlers/message-handler.d.ts +1 -1
  30. package/dist/types/iden3comm/handlers/revocation-status.d.ts +2 -2
  31. package/dist/types/kms/key-providers/bjj-provider.d.ts +8 -0
  32. package/dist/types/kms/key-providers/ed25519-provider.d.ts +8 -0
  33. package/dist/types/kms/key-providers/secp256k1-provider.d.ts +8 -0
  34. package/dist/types/kms/kms.d.ts +19 -0
  35. package/dist/types/kms/store/abstract-key-store.d.ts +10 -0
  36. package/dist/types/kms/store/indexed-db-key-store.d.ts +10 -0
  37. package/dist/types/kms/store/local-storage-key-store.d.ts +10 -0
  38. package/dist/types/kms/store/memory-key-store.d.ts +4 -0
  39. package/package.json +1 -1
@@ -89,6 +89,19 @@ class KMS {
89
89
  }
90
90
  return keyProvider.verify(data, signatureHex, keyId);
91
91
  }
92
+ /**
93
+ * get all keys by key type
94
+ *
95
+ * @param keyType - Key type
96
+ * @returns list of keys
97
+ */
98
+ list(keyType) {
99
+ const keyProvider = this._registry.get(keyType);
100
+ if (!keyProvider) {
101
+ throw new Error(`keyProvider not found for: ${keyType}`);
102
+ }
103
+ return keyProvider.list();
104
+ }
92
105
  }
93
106
 
94
107
  /**
@@ -112,6 +125,9 @@ class InMemoryPrivateKeyStore {
112
125
  constructor() {
113
126
  this._data = new Map();
114
127
  }
128
+ list() {
129
+ return Promise.resolve(Array.from(this._data).map(([alias, key]) => ({ alias, key })));
130
+ }
115
131
  async get(args) {
116
132
  const privateKey = this._data.get(args.alias);
117
133
  if (!privateKey) {
@@ -145,6 +161,20 @@ var KmsKeyType;
145
161
  * @implements implements AbstractPrivateKeyStore interface
146
162
  */
147
163
  class LocalStoragePrivateKeyStore {
164
+ /**
165
+ * get all keys
166
+ *
167
+ * @abstract
168
+ * @returns `Promise<{ alias: string; key: string }[]>`
169
+ */
170
+ list() {
171
+ const dataStr = localStorage.getItem(LocalStoragePrivateKeyStore.storageKey);
172
+ if (!dataStr) {
173
+ throw new Error('no key under given alias');
174
+ }
175
+ const data = JSON.parse(dataStr);
176
+ return data.map((i) => ({ alias: i.id, key: i.value }));
177
+ }
148
178
  /**
149
179
  * Gets key from the local storage
150
180
  *
@@ -266,6 +296,25 @@ function values(customStore = defaultGetStore()) {
266
296
  return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);
267
297
  });
268
298
  }
299
+ /**
300
+ * Get all entries in the store. Each entry is an array of `[key, value]`.
301
+ *
302
+ * @param customStore Method to get a custom store. Use with caution (see the docs).
303
+ */
304
+ function entries(customStore = defaultGetStore()) {
305
+ return customStore('readonly', (store) => {
306
+ // Fast path for modern browsers
307
+ // (although, hopefully we'll get a simpler path some day)
308
+ if (store.getAll && store.getAllKeys) {
309
+ return Promise.all([
310
+ promisifyRequest(store.getAllKeys()),
311
+ promisifyRequest(store.getAll()),
312
+ ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));
313
+ }
314
+ const items = [];
315
+ return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));
316
+ });
317
+ }
269
318
 
270
319
  /**
271
320
  * Allows storing keys in the indexed db storage of the browser
@@ -279,6 +328,16 @@ class IndexedDBPrivateKeyStore {
279
328
  constructor() {
280
329
  this._store = createStore(`${IndexedDBPrivateKeyStore.storageKey}-db`, IndexedDBPrivateKeyStore.storageKey);
281
330
  }
331
+ /**
332
+ * get all keys
333
+ *
334
+ * @abstract
335
+ * @returns `Promise<{ alias: string; key: string }[]>`
336
+ */
337
+ async list() {
338
+ const allEntries = await entries(this._store);
339
+ return allEntries.map(([alias, key]) => ({ alias, key: key.value }));
340
+ }
282
341
  /**
283
342
  * Gets key from the indexed db storage
284
343
  *
@@ -1743,6 +1802,14 @@ class BjjProvider {
1743
1802
  this.keyType = keyType;
1744
1803
  this.keyStore = keyStore;
1745
1804
  }
1805
+ /**
1806
+ * get all keys
1807
+ * @returns list of keys
1808
+ */
1809
+ async list() {
1810
+ const allKeysFromKeyStore = await this.keyStore.list();
1811
+ return allKeysFromKeyStore.filter((key) => key.alias.startsWith(this.keyType));
1812
+ }
1746
1813
  /**
1747
1814
  * generates a baby jub jub key from a seed phrase
1748
1815
  * @param {Uint8Array} seed - byte array seed
@@ -3631,6 +3698,14 @@ class Ed25519Provider {
3631
3698
  this.keyType = keyType;
3632
3699
  this._keyStore = _keyStore;
3633
3700
  }
3701
+ /**
3702
+ * get all keys
3703
+ * @returns list of keys
3704
+ */
3705
+ async list() {
3706
+ const allKeysFromKeyStore = await this._keyStore.list();
3707
+ return allKeysFromKeyStore.filter((key) => key.alias.startsWith(this.keyType));
3708
+ }
3634
3709
  /**
3635
3710
  * generates a ed25519 key from a seed phrase
3636
3711
  * @param {Uint8Array} seed - byte array seed
@@ -7270,6 +7345,14 @@ class Sec256k1Provider {
7270
7345
  this.keyType = keyType;
7271
7346
  this._keyStore = keyStore;
7272
7347
  }
7348
+ /**
7349
+ * get all keys
7350
+ * @returns list of keys
7351
+ */
7352
+ async list() {
7353
+ const allKeysFromKeyStore = await this._keyStore.list();
7354
+ return allKeysFromKeyStore.filter((key) => key.alias.startsWith(this.keyType));
7355
+ }
7273
7356
  /**
7274
7357
  * generates a baby jub jub key from a seed phrase
7275
7358
  * @param {Uint8Array} seed - byte array seed
@@ -55345,10 +55428,10 @@ class MessageHandler {
55345
55428
  return null;
55346
55429
  }
55347
55430
  let packerParams = {};
55348
- const senderDID = context?.senderDID;
55349
- if (unpackedMediaType === MediaType.ZKPMessage && senderDID) {
55431
+ const senderDid = context?.senderDid;
55432
+ if (unpackedMediaType === MediaType.ZKPMessage && senderDid) {
55350
55433
  packerParams = {
55351
- senderDID,
55434
+ senderDID: senderDid,
55352
55435
  provingMethodAlg: proving.provingMethodGroth16AuthV2Instance.methodAlg
55353
55436
  };
55354
55437
  return this._params.packageManager.packMessage(unpackedMediaType, response, packerParams);
@@ -55919,7 +56002,7 @@ class RefreshHandler {
55919
56002
  type: PROTOCOL_MESSAGE_TYPE.CREDENTIAL_REFRESH_MESSAGE_TYPE,
55920
56003
  thid: v4(),
55921
56004
  body: {
55922
- id: otherIdentifier,
56005
+ id: credential.id,
55923
56006
  reason: opts?.reason ?? 'credential is expired'
55924
56007
  },
55925
56008
  from: otherIdentifier,
@@ -55966,7 +56049,7 @@ class RevocationStatusHandler extends AbstractMessageHandler {
55966
56049
  this._identityWallet = _identityWallet;
55967
56050
  }
55968
56051
  handle(message, context) {
55969
- if (!context.did) {
56052
+ if (!context.senderDid) {
55970
56053
  throw new Error('DID is required');
55971
56054
  }
55972
56055
  if (!context.mediaType) {
@@ -56008,7 +56091,7 @@ class RevocationStatusHandler extends AbstractMessageHandler {
56008
56091
  type: PROTOCOL_MESSAGE_TYPE.REVOCATION_STATUS_RESPONSE_MESSAGE_TYPE,
56009
56092
  thid: rsRequest.thid ?? guid,
56010
56093
  body: revStatus,
56011
- from: context.did.string(),
56094
+ from: context.senderDid.string(),
56012
56095
  to: rsRequest.from
56013
56096
  };
56014
56097
  return response;
@@ -56038,7 +56121,7 @@ class RevocationStatusHandler extends AbstractMessageHandler {
56038
56121
  }
56039
56122
  const rsRequest = await this.parseRevocationStatusRequest(request);
56040
56123
  const response = await this.handleRevocationStatusRequestMessage(rsRequest, {
56041
- did,
56124
+ senderDid: did,
56042
56125
  mediaType: opts.mediaType,
56043
56126
  packerOptions: opts.packerOptions,
56044
56127
  treeState: opts.treeState
@@ -56169,7 +56252,8 @@ class CredentialProposalHandler extends AbstractMessageHandler {
56169
56252
  }
56170
56253
  },
56171
56254
  type: cred.type,
56172
- context: cred.context
56255
+ context: cred.context,
56256
+ allowedIssuers: [proposalRequest.to]
56173
56257
  });
56174
56258
  }
56175
56259
  catch (e) {
@@ -57931,7 +58015,7 @@ class IdentityWallet {
57931
58015
  opts.createBjjCredential = opts.createBjjCredential ?? true;
57932
58016
  let credential;
57933
58017
  const ethSigner = opts.ethSigner;
57934
- if (!ethSigner) {
58018
+ if (opts.createBjjCredential && !ethSigner) {
57935
58019
  throw new Error('Ethereum signer is required to create Ethereum identities in order to transit state');
57936
58020
  }
57937
58021
  const currentState = ZERO_HASH; // In Ethereum identities we don't have an initial state with the auth credential
@@ -57946,7 +58030,7 @@ class IdentityWallet {
57946
58030
  isStatePublished: false,
57947
58031
  isStateGenesis: true
57948
58032
  });
57949
- if (opts.createBjjCredential) {
58033
+ if (opts.createBjjCredential && ethSigner) {
57950
58034
  // Old tree state genesis state
57951
58035
  const oldTreeState = {
57952
58036
  revocationRoot: ZERO_HASH,
@@ -58430,6 +58514,12 @@ class IdentityWallet {
58430
58514
  merklizeOpts: { documentLoader: cacheLoader() }
58431
58515
  });
58432
58516
  await this._credentialWallet.saveAll(credsWithIden3MTPProof);
58517
+ await this._storage.identity.saveIdentity({
58518
+ did: did.string(),
58519
+ state: currentState,
58520
+ isStatePublished: true,
58521
+ isStateGenesis: false
58522
+ });
58433
58523
  const credRefreshed = await this._credentialWallet.findById(credential.id);
58434
58524
  if (!credRefreshed) {
58435
58525
  throw new Error('Credential not found in credential wallet');