@zerodev/wallet-core 0.0.3 → 0.0.4

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 (124) hide show
  1. package/dist/_cjs/actions/auth/getAuthenticators.js.map +1 -1
  2. package/dist/_cjs/actions/auth/index.js +3 -1
  3. package/dist/_cjs/actions/auth/index.js.map +1 -1
  4. package/dist/_cjs/actions/auth/logout.js +23 -0
  5. package/dist/_cjs/actions/auth/logout.js.map +1 -0
  6. package/dist/_cjs/actions/index.js +2 -1
  7. package/dist/_cjs/actions/index.js.map +1 -1
  8. package/dist/_cjs/actions/wallet/signingUtils.js +23 -3
  9. package/dist/_cjs/actions/wallet/signingUtils.js.map +1 -1
  10. package/dist/_cjs/adapters/viem.js +26 -9
  11. package/dist/_cjs/adapters/viem.js.map +1 -1
  12. package/dist/_cjs/client/decorators/client.js +1 -0
  13. package/dist/_cjs/client/decorators/client.js.map +1 -1
  14. package/dist/_cjs/client/transports/rest.js.map +1 -1
  15. package/dist/_cjs/core/createZeroDevWalletCore.js +297 -168
  16. package/dist/_cjs/core/createZeroDevWalletCore.js.map +1 -1
  17. package/dist/_cjs/index.js +2 -1
  18. package/dist/_cjs/index.js.map +1 -1
  19. package/dist/_cjs/index.native.js +2 -1
  20. package/dist/_cjs/index.native.js.map +1 -1
  21. package/dist/_cjs/native/stampers/secureStore.js +94 -17
  22. package/dist/_cjs/native/stampers/secureStore.js.map +1 -1
  23. package/dist/_cjs/stampers/indexedDbStamper.js +34 -0
  24. package/dist/_cjs/stampers/indexedDbStamper.js.map +1 -1
  25. package/dist/_cjs/storage/manager.js +144 -17
  26. package/dist/_cjs/storage/manager.js.map +1 -1
  27. package/dist/_cjs/utils/buildClientSignature.js +4 -1
  28. package/dist/_cjs/utils/buildClientSignature.js.map +1 -1
  29. package/dist/_cjs/utils/derToRawSignature.js +12 -0
  30. package/dist/_cjs/utils/derToRawSignature.js.map +1 -1
  31. package/dist/_cjs/utils/exportPrivateKey.js +1 -1
  32. package/dist/_cjs/utils/exportPrivateKey.js.map +1 -1
  33. package/dist/_cjs/utils/utils.js +27 -6
  34. package/dist/_cjs/utils/utils.js.map +1 -1
  35. package/dist/_esm/actions/auth/getAuthenticators.js +3 -2
  36. package/dist/_esm/actions/auth/getAuthenticators.js.map +1 -1
  37. package/dist/_esm/actions/auth/index.js +1 -0
  38. package/dist/_esm/actions/auth/index.js.map +1 -1
  39. package/dist/_esm/actions/auth/logout.js +21 -0
  40. package/dist/_esm/actions/auth/logout.js.map +1 -0
  41. package/dist/_esm/actions/index.js +1 -1
  42. package/dist/_esm/actions/index.js.map +1 -1
  43. package/dist/_esm/actions/wallet/signingUtils.js +24 -4
  44. package/dist/_esm/actions/wallet/signingUtils.js.map +1 -1
  45. package/dist/_esm/adapters/viem.js +27 -10
  46. package/dist/_esm/adapters/viem.js.map +1 -1
  47. package/dist/_esm/client/decorators/client.js +2 -1
  48. package/dist/_esm/client/decorators/client.js.map +1 -1
  49. package/dist/_esm/client/transports/rest.js.map +1 -1
  50. package/dist/_esm/core/createZeroDevWalletCore.js +320 -186
  51. package/dist/_esm/core/createZeroDevWalletCore.js.map +1 -1
  52. package/dist/_esm/index.js +1 -1
  53. package/dist/_esm/index.js.map +1 -1
  54. package/dist/_esm/index.native.js +1 -1
  55. package/dist/_esm/index.native.js.map +1 -1
  56. package/dist/_esm/native/stampers/secureStore.js +111 -18
  57. package/dist/_esm/native/stampers/secureStore.js.map +1 -1
  58. package/dist/_esm/stampers/indexedDbStamper.js +36 -0
  59. package/dist/_esm/stampers/indexedDbStamper.js.map +1 -1
  60. package/dist/_esm/storage/manager.js +150 -22
  61. package/dist/_esm/storage/manager.js.map +1 -1
  62. package/dist/_esm/utils/buildClientSignature.js +4 -1
  63. package/dist/_esm/utils/buildClientSignature.js.map +1 -1
  64. package/dist/_esm/utils/derToRawSignature.js +12 -0
  65. package/dist/_esm/utils/derToRawSignature.js.map +1 -1
  66. package/dist/_esm/utils/exportPrivateKey.js +1 -1
  67. package/dist/_esm/utils/exportPrivateKey.js.map +1 -1
  68. package/dist/_esm/utils/utils.js +27 -6
  69. package/dist/_esm/utils/utils.js.map +1 -1
  70. package/dist/_types/actions/auth/getAuthenticators.d.ts +19 -2
  71. package/dist/_types/actions/auth/getAuthenticators.d.ts.map +1 -1
  72. package/dist/_types/actions/auth/index.d.ts +2 -1
  73. package/dist/_types/actions/auth/index.d.ts.map +1 -1
  74. package/dist/_types/actions/auth/logout.d.ts +11 -0
  75. package/dist/_types/actions/auth/logout.d.ts.map +1 -0
  76. package/dist/_types/actions/index.d.ts +1 -1
  77. package/dist/_types/actions/index.d.ts.map +1 -1
  78. package/dist/_types/actions/wallet/signingUtils.d.ts.map +1 -1
  79. package/dist/_types/adapters/viem.d.ts.map +1 -1
  80. package/dist/_types/client/decorators/client.d.ts +3 -1
  81. package/dist/_types/client/decorators/client.d.ts.map +1 -1
  82. package/dist/_types/client/transports/rest.d.ts +3 -3
  83. package/dist/_types/client/transports/rest.d.ts.map +1 -1
  84. package/dist/_types/core/createZeroDevWalletCore.d.ts +8 -1
  85. package/dist/_types/core/createZeroDevWalletCore.d.ts.map +1 -1
  86. package/dist/_types/index.d.ts +2 -2
  87. package/dist/_types/index.d.ts.map +1 -1
  88. package/dist/_types/index.native.d.ts +2 -2
  89. package/dist/_types/index.native.d.ts.map +1 -1
  90. package/dist/_types/native/stampers/secureStore.d.ts.map +1 -1
  91. package/dist/_types/stampers/indexedDbStamper.d.ts.map +1 -1
  92. package/dist/_types/stampers/types.d.ts +6 -0
  93. package/dist/_types/stampers/types.d.ts.map +1 -1
  94. package/dist/_types/storage/manager.d.ts +3 -0
  95. package/dist/_types/storage/manager.d.ts.map +1 -1
  96. package/dist/_types/types/session.d.ts +2 -0
  97. package/dist/_types/types/session.d.ts.map +1 -1
  98. package/dist/_types/utils/buildClientSignature.d.ts +1 -1
  99. package/dist/_types/utils/buildClientSignature.d.ts.map +1 -1
  100. package/dist/_types/utils/derToRawSignature.d.ts.map +1 -1
  101. package/dist/_types/utils/utils.d.ts +1 -1
  102. package/dist/_types/utils/utils.d.ts.map +1 -1
  103. package/dist/tsconfig.build.tsbuildinfo +1 -1
  104. package/package.json +1 -1
  105. package/src/actions/auth/getAuthenticators.ts +20 -2
  106. package/src/actions/auth/index.ts +6 -0
  107. package/src/actions/auth/logout.ts +35 -0
  108. package/src/actions/index.ts +4 -0
  109. package/src/actions/wallet/signingUtils.ts +43 -4
  110. package/src/adapters/viem.ts +40 -12
  111. package/src/client/decorators/client.ts +7 -0
  112. package/src/client/transports/rest.ts +4 -4
  113. package/src/core/createZeroDevWalletCore.ts +393 -205
  114. package/src/index.native.ts +4 -0
  115. package/src/index.ts +4 -0
  116. package/src/native/stampers/secureStore.ts +119 -24
  117. package/src/stampers/indexedDbStamper.ts +47 -0
  118. package/src/stampers/types.ts +6 -0
  119. package/src/storage/manager.ts +205 -25
  120. package/src/types/session.ts +2 -0
  121. package/src/utils/buildClientSignature.ts +4 -2
  122. package/src/utils/derToRawSignature.ts +16 -2
  123. package/src/utils/exportPrivateKey.ts +1 -1
  124. package/src/utils/utils.ts +30 -9
@@ -8,7 +8,7 @@ export {
8
8
  // Auth actions
9
9
  authenticateWithEmail, authenticateWithOAuth, getAuthenticators,
10
10
  // Wallet actions
11
- getUserWallet, getWhoami, loginWithOTP, registerWithOTP, sign7702Authorization, signMessage, signTransaction, signTypedDataV4, signUserOperation, } from './actions/index.js';
11
+ getUserWallet, getWhoami, loginWithOTP, logout, registerWithOTP, sign7702Authorization, signMessage, signTransaction, signTypedDataV4, signUserOperation, } from './actions/index.js';
12
12
  // Adapters
13
13
  export { toViemAccount } from './adapters/viem.js';
14
14
  // Client decorators
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,IAAI,aAAa,EAAE,EAAE,CAAC;IACpB,0GAA0G;IAC1G,OAAO,CAAC,IAAI,CACV,wMAAwM,CACzM,CAAA;AACH,CAAC;AAoCD,UAAU;AACV,OAAO;AACL,eAAe;AACf,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB;AACjB,iBAAiB;AACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAE3B,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAOpE,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAK/C,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAcjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,OAAO,EACL,mBAAmB,GAEpB,MAAM,8BAA8B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,IAAI,aAAa,EAAE,EAAE,CAAC;IACpB,0GAA0G;IAC1G,OAAO,CAAC,IAAI,CACV,wMAAwM,CACzM,CAAA;AACH,CAAC;AAuCD,UAAU;AACV,OAAO;AACL,eAAe;AACf,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB;AACjB,iBAAiB;AACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,MAAM,EACN,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAE3B,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAOpE,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAK/C,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAcjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,OAAO,EACL,mBAAmB,GAEpB,MAAM,8BAA8B,CAAA"}
@@ -3,7 +3,7 @@ if (!isReactNative()) {
3
3
  // biome-ignore lint/suspicious/noConsole: Warning users if they try to use the web entry on React Native.
4
4
  console.warn('@zerodev/wallet-core/react-native: the React Native entry was loaded outside a React Native runtime. If this is a non-RN context, import `@zerodev/wallet-core` (the bare specifier) instead.');
5
5
  }
6
- export { authenticateWithEmail, authenticateWithOAuth, getAuthenticators, getUserWallet, getWhoami, loginWithOTP, registerWithOTP, sign7702Authorization, signMessage, signTransaction, signTypedDataV4, signUserOperation, } from './actions/index.js';
6
+ export { authenticateWithEmail, authenticateWithOAuth, getAuthenticators, getUserWallet, getWhoami, loginWithOTP, logout, registerWithOTP, sign7702Authorization, signMessage, signTransaction, signTypedDataV4, signUserOperation, } from './actions/index.js';
7
7
  export { toViemAccount } from './adapters/viem.js';
8
8
  export { zeroDevWalletActions } from './client/decorators/client.js';
9
9
  export { createBaseClient, createClient, zeroDevWalletTransport, } from './client/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.native.js","sourceRoot":"","sources":["../../src/index.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;IACrB,0GAA0G;IAC1G,OAAO,CAAC,IAAI,CACV,+LAA+L,CAChM,CAAA;AACH,CAAC;AAsCD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAOpE,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAK/C,mEAAmE;AACnE,8EAA8E;AAC9E,4EAA4E;AAC5E,oEAAoE;AACpE,OAAO,EACL,mBAAmB,GAEpB,MAAM,iCAAiC,CAAA;AAYxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.native.js","sourceRoot":"","sources":["../../src/index.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;IACrB,0GAA0G;IAC1G,OAAO,CAAC,IAAI,CACV,+LAA+L,CAChM,CAAA;AACH,CAAC;AAyCD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,MAAM,EACN,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAOpE,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAK/C,mEAAmE;AACnE,8EAA8E;AAC9E,4EAA4E;AAC5E,oEAAoE;AACpE,OAAO,EACL,mBAAmB,GAEpB,MAAM,iCAAiC,CAAA;AAYxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -1,8 +1,27 @@
1
1
  import { ApiKeyStamper, SignatureFormat } from '@turnkey/api-key-stamper';
2
- import { generateP256KeyPair } from '@turnkey/crypto';
2
+ import { generateP256KeyPair, verifyStampSignature } from '@turnkey/crypto';
3
3
  import * as SecureStore from 'expo-secure-store';
4
- const PUBLIC_KEY = 'zerodev.publicKey';
5
- const PRIVATE_KEY = 'zerodev.privateKey';
4
+ const KEY_PAIR = 'zerodev.keyPair';
5
+ const LEGACY_PUBLIC_KEY = 'zerodev.publicKey';
6
+ const LEGACY_PRIVATE_KEY = 'zerodev.privateKey';
7
+ const KEY_PAIR_CHECK = 'ZeroDev Wallet key-pair ownership check';
8
+ function parseKeyPair(value) {
9
+ if (!value)
10
+ return null;
11
+ try {
12
+ const pair = JSON.parse(value);
13
+ if (typeof pair.publicKey !== 'string' ||
14
+ !pair.publicKey ||
15
+ typeof pair.privateKey !== 'string' ||
16
+ !pair.privateKey) {
17
+ return null;
18
+ }
19
+ return pair;
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
6
25
  class SecureStoreStamperInner {
7
26
  constructor() {
8
27
  Object.defineProperty(this, "publicKeyHex", {
@@ -13,36 +32,85 @@ class SecureStoreStamperInner {
13
32
  });
14
33
  }
15
34
  async init() {
16
- const publicKey = await SecureStore.getItemAsync(PUBLIC_KEY);
17
- const privateKey = await SecureStore.getItemAsync(PRIVATE_KEY);
18
- if (publicKey && privateKey) {
19
- this.publicKeyHex = publicKey;
35
+ const storedPair = parseKeyPair(await SecureStore.getItemAsync(KEY_PAIR));
36
+ if (storedPair && (await this.isUsable(storedPair))) {
37
+ this.publicKeyHex = storedPair.publicKey;
38
+ return;
20
39
  }
21
- else {
22
- await this.resetKeyPair();
40
+ const publicKey = await SecureStore.getItemAsync(LEGACY_PUBLIC_KEY);
41
+ const privateKey = await SecureStore.getItemAsync(LEGACY_PRIVATE_KEY);
42
+ if (publicKey &&
43
+ privateKey &&
44
+ (await this.isUsable({ publicKey, privateKey }))) {
45
+ await this.persistKeyPair({ publicKey, privateKey });
46
+ await Promise.all([
47
+ SecureStore.deleteItemAsync(LEGACY_PUBLIC_KEY),
48
+ SecureStore.deleteItemAsync(LEGACY_PRIVATE_KEY),
49
+ ]);
50
+ return;
51
+ }
52
+ // No usable stored credential — missing, corrupt, or mismatched (e.g. a
53
+ // broken key written before this validation existed). Mint a fresh pair
54
+ // rather than throwing: a key that fails the ownership check can't produce
55
+ // a valid stamp anyway, and a thrown init would brick the app — it could
56
+ // neither log out nor reset the stamper (both need a constructed SDK). The
57
+ // user simply re-authenticates from a clean state. Only validation failures
58
+ // land here; SecureStore I/O errors still propagate (we never discard a key
59
+ // just because a read/write transiently failed).
60
+ await this.resetKeyPair();
61
+ }
62
+ // True if the stored pair passes the ownership check. Isolates validation
63
+ // (pure crypto) from I/O so init() can distinguish an unusable key (reset)
64
+ // from a transient SecureStore failure (propagate).
65
+ async isUsable(pair) {
66
+ try {
67
+ await this.validateKeyPair(pair);
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
23
72
  }
24
73
  }
25
74
  async getPublicKey() {
26
75
  return this.publicKeyHex;
27
76
  }
28
77
  async resetKeyPair(externalKeyPair) {
29
- await this.clear();
30
78
  const pair = externalKeyPair ?? generateP256KeyPair();
31
- await SecureStore.setItemAsync(PUBLIC_KEY, pair.publicKey);
32
- await SecureStore.setItemAsync(PRIVATE_KEY, pair.privateKey);
79
+ await this.persistKeyPair(pair);
80
+ }
81
+ async persistKeyPair(pair) {
82
+ await this.validateKeyPair(pair);
83
+ // SecureStore replaces one value atomically. Update memory only after the
84
+ // durable write succeeds, so a failed rotation preserves the live pair.
85
+ await SecureStore.setItemAsync(KEY_PAIR, JSON.stringify(pair));
33
86
  this.publicKeyHex = pair.publicKey;
34
87
  }
88
+ async validateKeyPair(pair) {
89
+ try {
90
+ const signature = await new ApiKeyStamper({
91
+ apiPublicKey: pair.publicKey,
92
+ apiPrivateKey: pair.privateKey,
93
+ }).sign(KEY_PAIR_CHECK, SignatureFormat.Der);
94
+ if (await verifyStampSignature(pair.publicKey, signature, KEY_PAIR_CHECK)) {
95
+ return;
96
+ }
97
+ }
98
+ catch {
99
+ // Normalize invalid encoding and mismatched-key failures below.
100
+ }
101
+ throw new Error('Stored public and private keys do not match.');
102
+ }
35
103
  async getTurnkeyApiKeyStamper() {
36
104
  if (!this.publicKeyHex) {
37
105
  throw new Error('Key not initialized. Call init() or resetKeyPair() first.');
38
106
  }
39
- const privateKey = await SecureStore.getItemAsync(PRIVATE_KEY);
40
- if (!privateKey) {
41
- throw new Error('No private key found in secure store.');
107
+ const pair = parseKeyPair(await SecureStore.getItemAsync(KEY_PAIR));
108
+ if (!pair || pair.publicKey !== this.publicKeyHex) {
109
+ throw new Error('No matching key pair found in secure store.');
42
110
  }
43
111
  return new ApiKeyStamper({
44
112
  apiPublicKey: this.publicKeyHex,
45
- apiPrivateKey: privateKey,
113
+ apiPrivateKey: pair.privateKey,
46
114
  });
47
115
  }
48
116
  async stamp(payload) {
@@ -55,8 +123,13 @@ class SecureStoreStamperInner {
55
123
  return stamper.sign(payload, SignatureFormat.Der);
56
124
  }
57
125
  async clear() {
58
- await SecureStore.deleteItemAsync(PUBLIC_KEY);
59
- await SecureStore.deleteItemAsync(PRIVATE_KEY);
126
+ // Remove legacy recovery sources first. If this fails, keep the atomic
127
+ // record authoritative so a later init cannot resurrect a revoked key.
128
+ await Promise.all([
129
+ SecureStore.deleteItemAsync(LEGACY_PUBLIC_KEY),
130
+ SecureStore.deleteItemAsync(LEGACY_PRIVATE_KEY),
131
+ ]);
132
+ await SecureStore.deleteItemAsync(KEY_PAIR);
60
133
  this.publicKeyHex = null;
61
134
  }
62
135
  }
@@ -97,6 +170,7 @@ export async function createSecureStoreStamper() {
97
170
  return inner.sign(payload);
98
171
  },
99
172
  async clear() {
173
+ pendingKeyPair = null;
100
174
  await inner.clear();
101
175
  },
102
176
  async resetKeyPair() {
@@ -108,6 +182,22 @@ export async function createSecureStoreStamper() {
108
182
  pendingKeyPair = keyPair;
109
183
  return keyPair.publicKey;
110
184
  },
185
+ async stampPending(payload) {
186
+ if (!pendingKeyPair)
187
+ throw new Error('No pending key rotation');
188
+ return new ApiKeyStamper({
189
+ apiPublicKey: pendingKeyPair.publicKey,
190
+ apiPrivateKey: pendingKeyPair.privateKey,
191
+ }).stamp(payload);
192
+ },
193
+ async signPending(payload) {
194
+ if (!pendingKeyPair)
195
+ throw new Error('No pending key rotation');
196
+ return new ApiKeyStamper({
197
+ apiPublicKey: pendingKeyPair.publicKey,
198
+ apiPrivateKey: pendingKeyPair.privateKey,
199
+ }).sign(payload, SignatureFormat.Der);
200
+ },
111
201
  async commitKeyRotation() {
112
202
  if (!pendingKeyPair) {
113
203
  throw new Error('No pending key rotation to commit');
@@ -115,6 +205,9 @@ export async function createSecureStoreStamper() {
115
205
  await inner.resetKeyPair(pendingKeyPair);
116
206
  pendingKeyPair = null;
117
207
  },
208
+ async discardKeyRotation() {
209
+ pendingKeyPair = null;
210
+ },
118
211
  };
119
212
  }
120
213
  //# sourceMappingURL=secureStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"secureStore.js","sourceRoot":"","sources":["../../../../src/native/stampers/secureStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secureStore.js","sourceRoot":"","sources":["../../../../src/native/stampers/secureStore.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,29 @@
1
+ import { p256 } from '@noble/curves/nist.js';
1
2
  import { IndexedDbStamper as TurnkeyIndexedDbStamper } from '@turnkey/indexed-db-stamper';
2
3
  import { generateCompressedPublicKeyFromKeyPair } from '../utils/utils.js';
4
+ async function signWithKeyPair(keyPair, payload) {
5
+ const rawSignature = new Uint8Array(await crypto.subtle.sign({ name: 'ECDSA', hash: 'SHA-256' }, keyPair.privateKey, new TextEncoder().encode(payload)));
6
+ return p256.Signature.fromBytes(rawSignature, 'compact').toHex('der');
7
+ }
8
+ function encodeStamp(publicKey, signature) {
9
+ const json = JSON.stringify({
10
+ publicKey,
11
+ scheme: 'SIGNATURE_SCHEME_TK_API_P256',
12
+ signature,
13
+ });
14
+ return btoa(json).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
15
+ }
3
16
  export async function createIndexedDbStamper() {
4
17
  const inner = new TurnkeyIndexedDbStamper();
5
18
  await inner.init();
6
19
  let pendingKeyPair = null;
20
+ // A rotation must be prepared before it can be stamped/signed with; centralize
21
+ // the guard so the pending-key paths don't each repeat it.
22
+ const requirePending = () => {
23
+ if (!pendingKeyPair)
24
+ throw new Error('No pending key rotation');
25
+ return pendingKeyPair;
26
+ };
7
27
  return {
8
28
  async getPublicKey() {
9
29
  return await inner.getPublicKey();
@@ -15,6 +35,7 @@ export async function createIndexedDbStamper() {
15
35
  return await inner.sign(payload);
16
36
  },
17
37
  async clear() {
38
+ pendingKeyPair = null;
18
39
  await inner.clear();
19
40
  },
20
41
  async resetKeyPair() {
@@ -26,6 +47,18 @@ export async function createIndexedDbStamper() {
26
47
  pendingKeyPair = keyPair;
27
48
  return await generateCompressedPublicKeyFromKeyPair(keyPair);
28
49
  },
50
+ async stampPending(payload) {
51
+ const keyPair = requirePending();
52
+ const publicKey = await generateCompressedPublicKeyFromKeyPair(keyPair);
53
+ const signature = await signWithKeyPair(keyPair, payload);
54
+ return {
55
+ stampHeaderName: 'X-Stamp',
56
+ stampHeaderValue: encodeStamp(publicKey, signature),
57
+ };
58
+ },
59
+ async signPending(payload) {
60
+ return signWithKeyPair(requirePending(), payload);
61
+ },
29
62
  async commitKeyRotation() {
30
63
  if (!pendingKeyPair) {
31
64
  throw new Error('No pending key rotation to commit');
@@ -33,6 +66,9 @@ export async function createIndexedDbStamper() {
33
66
  await inner.resetKeyPair(pendingKeyPair);
34
67
  pendingKeyPair = null;
35
68
  },
69
+ async discardKeyRotation() {
70
+ pendingKeyPair = null;
71
+ },
36
72
  };
37
73
  }
38
74
  //# sourceMappingURL=indexedDbStamper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"indexedDbStamper.js","sourceRoot":"","sources":["../../../src/stampers/indexedDbStamper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AACzF,OAAO,EAAE,sCAAsC,EAAE,MAAM,mBAAmB,CAAA;AAG1E,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,KAAK,GAAG,IAAI,uBAAuB,EAAE,CAAA;IAC3C,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;IAElB,IAAI,cAAc,GAAyB,IAAI,CAAA;IAE/C,OAAO;QACL,KAAK,CAAC,YAAY;YAChB,OAAO,MAAM,KAAK,CAAC,YAAY,EAAE,CAAA;QACnC,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAe;YACzB,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAe;YACxB,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QACD,KAAK,CAAC,YAAY;YAChB,cAAc,GAAG,IAAI,CAAA;YACrB,MAAM,KAAK,CAAC,YAAY,EAAE,CAAA;QAC5B,CAAC;QACD,KAAK,CAAC,kBAAkB;YACtB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAC7C,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EACtC,KAAK,EACL,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAA;YACD,cAAc,GAAG,OAAO,CAAA;YACxB,OAAO,MAAM,sCAAsC,CAAC,OAAO,CAAC,CAAA;QAC9D,CAAC;QACD,KAAK,CAAC,iBAAiB;YACrB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;YACtD,CAAC;YACD,MAAM,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;YACxC,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"indexedDbStamper.js","sourceRoot":"","sources":["../../../src/stampers/indexedDbStamper.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,82 @@
1
1
  import { normalizeTimestamp } from '../utils/utils.js';
2
+ // Process-wide serialization queue for storage mutations. Every mutating op
3
+ // runs through `withMutation`, which chains onto this tail so read-modify-write
4
+ // sequences over the shared active-session pointer and session list can't
5
+ // interleave and corrupt each other. Module-level (not per-manager) so
6
+ // concurrent managers over the same storage still serialize; the tail swallows
7
+ // each outcome so one failed mutation never jams the queue.
8
+ let mutationTail = Promise.resolve();
9
+ function isStoredSession(value) {
10
+ if (!value || typeof value !== 'object')
11
+ return false;
12
+ const session = value;
13
+ return (typeof session.id === 'string' &&
14
+ typeof session.userId === 'string' &&
15
+ typeof session.organizationId === 'string' &&
16
+ (session.stamperType === 'apiKey' || session.stamperType === 'passkey') &&
17
+ typeof session.token === 'string' &&
18
+ session.token.length > 0 &&
19
+ typeof session.expiry === 'number' &&
20
+ Number.isFinite(session.expiry) &&
21
+ session.expiry > 0 &&
22
+ typeof session.createdAt === 'number' &&
23
+ Number.isFinite(session.createdAt));
24
+ }
2
25
  export function createStorageManager(adapter) {
3
26
  const ACTIVE_SESSION_KEY = '@zerodev/active_session';
4
27
  const ALL_SESSIONS_KEY = '@zerodev/sessions';
5
- const storeSession = async (sessionData, sessionKey) => {
6
- // Store the session data
7
- await adapter.setItem(sessionKey, JSON.stringify(sessionData));
8
- // Add to sessions list if not already present
9
- const sessionsStr = await adapter.getItem(ALL_SESSIONS_KEY);
10
- const sessions = JSON.parse(sessionsStr || '[]');
11
- if (!sessions.includes(sessionKey)) {
12
- sessions.push(sessionKey);
28
+ const SESSION_TRANSITION_KEY = '@zerodev/session_transition';
29
+ const withMutation = async (mutation) => {
30
+ const result = mutationTail.then(mutation);
31
+ mutationTail = result.then(() => undefined, () => undefined);
32
+ return result;
33
+ };
34
+ const parseSessionKeys = (value) => {
35
+ if (!value)
36
+ return [];
37
+ try {
38
+ const parsed = JSON.parse(value);
39
+ if (!Array.isArray(parsed) ||
40
+ !parsed.every((key) => typeof key === 'string')) {
41
+ return undefined;
42
+ }
43
+ return parsed;
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
48
+ };
49
+ const restoreItem = async (key, value) => {
50
+ if (value === null)
51
+ await adapter.removeItem(key);
52
+ else
53
+ await adapter.setItem(key, value);
54
+ };
55
+ const storeSessionUnlocked = async (sessionData, sessionKey) => {
56
+ const recordKey = sessionKey;
57
+ const [previousRecord, previousIndex, previousActive] = await Promise.all([
58
+ adapter.getItem(recordKey),
59
+ adapter.getItem(ALL_SESSIONS_KEY),
60
+ adapter.getItem(ACTIVE_SESSION_KEY),
61
+ ]);
62
+ try {
63
+ await adapter.setItem(recordKey, JSON.stringify(sessionData));
64
+ const sessions = parseSessionKeys(previousIndex) ?? [];
65
+ if (!sessions.includes(sessionKey))
66
+ sessions.push(sessionKey);
13
67
  await adapter.setItem(ALL_SESSIONS_KEY, JSON.stringify(sessions));
68
+ await adapter.setItem(ACTIVE_SESSION_KEY, sessionKey);
69
+ }
70
+ catch (error) {
71
+ await Promise.allSettled([
72
+ restoreItem(recordKey, previousRecord),
73
+ restoreItem(ALL_SESSIONS_KEY, previousIndex),
74
+ restoreItem(ACTIVE_SESSION_KEY, previousActive),
75
+ ]);
76
+ throw error;
14
77
  }
15
- // Set as active session
16
- await adapter.setItem(ACTIVE_SESSION_KEY, sessionKey);
17
78
  };
79
+ const storeSession = async (sessionData, sessionKey) => withMutation(() => storeSessionUnlocked(sessionData, sessionKey));
18
80
  const getActiveSession = async () => {
19
81
  const activeKey = await adapter.getItem(ACTIVE_SESSION_KEY);
20
82
  if (!activeKey)
@@ -31,8 +93,12 @@ export function createStorageManager(adapter) {
31
93
  return undefined;
32
94
  try {
33
95
  const session = JSON.parse(sessionStr);
96
+ if (!isStoredSession(session)) {
97
+ await clearSession(sessionKey);
98
+ return undefined;
99
+ }
34
100
  // Check if session is expired
35
- if (session.expiry && normalizeTimestamp(session.expiry) < Date.now()) {
101
+ if (normalizeTimestamp(session.expiry) < Date.now()) {
36
102
  await clearSession(sessionKey);
37
103
  return undefined;
38
104
  }
@@ -44,23 +110,28 @@ export function createStorageManager(adapter) {
44
110
  return undefined;
45
111
  }
46
112
  };
47
- const listSessionKeys = async () => {
113
+ const listSessionKeysUnlocked = async () => {
48
114
  const sessionsStr = await adapter.getItem(ALL_SESSIONS_KEY);
49
- const sessionKeys = JSON.parse(sessionsStr || '[]');
115
+ const parsedKeys = parseSessionKeys(sessionsStr);
116
+ if (!parsedKeys) {
117
+ await adapter.removeItem(ALL_SESSIONS_KEY);
118
+ return [];
119
+ }
50
120
  // Clean up any keys that don't have corresponding sessions
51
121
  const validKeys = [];
52
- for (const key of sessionKeys) {
122
+ for (const key of parsedKeys) {
53
123
  const exists = await adapter.getItem(key);
54
124
  if (exists) {
55
125
  validKeys.push(key);
56
126
  }
57
127
  }
58
128
  // Update the list if we found invalid keys
59
- if (validKeys.length !== sessionKeys.length) {
129
+ if (validKeys.length !== parsedKeys.length) {
60
130
  await adapter.setItem(ALL_SESSIONS_KEY, JSON.stringify(validKeys));
61
131
  }
62
132
  return validKeys;
63
133
  };
134
+ const listSessionKeys = async () => withMutation(listSessionKeysUnlocked);
64
135
  const listSessions = async () => {
65
136
  const sessionKeys = await listSessionKeys();
66
137
  const sessions = [];
@@ -78,13 +149,15 @@ export function createStorageManager(adapter) {
78
149
  if (!session) {
79
150
  throw new Error(`Session not found: ${sessionKey}`);
80
151
  }
81
- await adapter.setItem(ACTIVE_SESSION_KEY, sessionKey);
152
+ await withMutation(async () => {
153
+ await adapter.setItem(ACTIVE_SESSION_KEY, sessionKey);
154
+ });
82
155
  };
83
- const clearSession = async (sessionKey) => {
156
+ const clearSessionUnlocked = async (sessionKey) => {
84
157
  // Remove the session data
85
158
  await adapter.removeItem(sessionKey);
86
159
  // Remove from sessions list
87
- const sessions = await listSessionKeys();
160
+ const sessions = await listSessionKeysUnlocked();
88
161
  const updated = sessions.filter((k) => k !== sessionKey);
89
162
  await adapter.setItem(ALL_SESSIONS_KEY, JSON.stringify(updated));
90
163
  // Clear active session if it was the cleared one
@@ -93,15 +166,67 @@ export function createStorageManager(adapter) {
93
166
  await adapter.removeItem(ACTIVE_SESSION_KEY);
94
167
  }
95
168
  };
96
- const clearAllSessions = async () => {
97
- const sessions = await listSessionKeys();
98
- // Remove all session data
169
+ const clearSession = async (sessionKey) => withMutation(() => clearSessionUnlocked(sessionKey));
170
+ const clearAllSessions = async () => withMutation(async () => {
171
+ await clearAllSessionsUnlocked();
172
+ await adapter.removeItem(SESSION_TRANSITION_KEY);
173
+ });
174
+ async function clearAllSessionsUnlocked() {
175
+ const sessions = await listSessionKeysUnlocked();
99
176
  for (const key of sessions) {
100
177
  await adapter.removeItem(key);
101
178
  }
102
- // Clear the metadata
103
179
  await adapter.removeItem(ALL_SESSIONS_KEY);
104
180
  await adapter.removeItem(ACTIVE_SESSION_KEY);
181
+ }
182
+ const parseTransition = (value) => {
183
+ if (!value)
184
+ return null;
185
+ try {
186
+ const parsed = JSON.parse(value);
187
+ if (!isStoredSession(parsed.sessionData) ||
188
+ typeof parsed.publicKey !== 'string' ||
189
+ !parsed.publicKey) {
190
+ return null;
191
+ }
192
+ return parsed;
193
+ }
194
+ catch {
195
+ return null;
196
+ }
197
+ };
198
+ const stageSessionTransition = async (sessionData, publicKey) => withMutation(async () => {
199
+ await adapter.setItem(SESSION_TRANSITION_KEY, JSON.stringify({ sessionData, publicKey }));
200
+ });
201
+ const commitSessionTransition = async () => withMutation(async () => {
202
+ const transition = parseTransition(await adapter.getItem(SESSION_TRANSITION_KEY));
203
+ if (!transition) {
204
+ await adapter.removeItem(SESSION_TRANSITION_KEY);
205
+ return undefined;
206
+ }
207
+ await clearAllSessionsUnlocked();
208
+ await storeSessionUnlocked(transition.sessionData, transition.sessionData.id);
209
+ await adapter.removeItem(SESSION_TRANSITION_KEY);
210
+ return transition.sessionData;
211
+ });
212
+ const normalizeKey = (key) => key.replace(/^0x/, '').toLowerCase();
213
+ const recoverSessionTransition = async (activePublicKey) => {
214
+ const transition = parseTransition(await adapter.getItem(SESSION_TRANSITION_KEY));
215
+ if (!transition) {
216
+ if (await adapter.getItem(SESSION_TRANSITION_KEY)) {
217
+ await adapter.removeItem(SESSION_TRANSITION_KEY);
218
+ }
219
+ return undefined;
220
+ }
221
+ if (!activePublicKey) {
222
+ await adapter.removeItem(SESSION_TRANSITION_KEY);
223
+ return undefined;
224
+ }
225
+ if (normalizeKey(activePublicKey) !== normalizeKey(transition.publicKey)) {
226
+ await adapter.removeItem(SESSION_TRANSITION_KEY);
227
+ return undefined;
228
+ }
229
+ return commitSessionTransition();
105
230
  };
106
231
  return {
107
232
  storeSession,
@@ -113,6 +238,9 @@ export function createStorageManager(adapter) {
113
238
  setActiveSession,
114
239
  clearSession,
115
240
  clearAllSessions,
241
+ stageSessionTransition,
242
+ commitSessionTransition,
243
+ recoverSessionTransition,
116
244
  };
117
245
  }
118
246
  //# sourceMappingURL=manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/storage/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/storage/manager.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,10 @@ function extractTokenIdFromJwt(jwt) {
43
43
  if (parts.length !== 3) {
44
44
  throw new Error('Invalid JWT format');
45
45
  }
46
- const payload = JSON.parse(base64UrlDecode(parts[1]));
46
+ const encodedPayload = parts[1];
47
+ if (!encodedPayload)
48
+ throw new Error('Invalid JWT format');
49
+ const payload = JSON.parse(base64UrlDecode(encodedPayload));
47
50
  if (!payload.id) {
48
51
  throw new Error('JWT payload missing id field');
49
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"buildClientSignature.js","sourceRoot":"","sources":["../../../src/utils/buildClientSignature.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAW1D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAkC;IAElC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAExD,8DAA8D;IAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,CAAA;IAExD,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG;QACvB,KAAK,EAAE,EAAE,SAAS,EAAE;QACpB,OAAO;QACP,IAAI,EAAE,kBAAkB;KACzB,CAAA;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IAEhD,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAE1C,uDAAuD;IACvD,0EAA0E;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACrE,MAAM,eAAe,GAAW,SAAS,CAAC,SAAS,CAAA;IAEnD,mDAAmD;IACnD,MAAM,YAAY,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;IAEvD,mCAAmC;IACnC,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAA;IACtD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,OAAO,CAAC,EAAE,CAAA;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,2BAA2B;IAC3B,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IACjC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC"}
1
+ {"version":3,"file":"buildClientSignature.js","sourceRoot":"","sources":["../../../src/utils/buildClientSignature.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAW1D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAkC;IAElC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAExD,8DAA8D;IAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,CAAA;IAExD,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG;QACvB,KAAK,EAAE,EAAE,SAAS,EAAE;QACpB,OAAO;QACP,IAAI,EAAE,kBAAkB;KACzB,CAAA;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IAEhD,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAE1C,uDAAuD;IACvD,0EAA0E;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACrE,MAAM,eAAe,GAAW,SAAS,CAAC,SAAS,CAAA;IAEnD,mDAAmD;IACnD,MAAM,YAAY,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;IAEvD,mCAAmC;IACnC,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/B,IAAI,CAAC,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;IAC3D,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,OAAO,CAAC,EAAE,CAAA;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,2BAA2B;IAC3B,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IACjC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC"}