@guveno/wallet-sdk 1.0.0 → 1.0.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 (59) hide show
  1. package/README.md +2 -1
  2. package/dist/api/client.d.ts +3 -17
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/client.js +15 -76
  5. package/dist/api/client.js.map +1 -1
  6. package/dist/api/types.d.ts +9 -31
  7. package/dist/api/types.d.ts.map +1 -1
  8. package/dist/api/types.js.map +1 -1
  9. package/dist/config/file-store.d.ts +40 -0
  10. package/dist/config/file-store.d.ts.map +1 -0
  11. package/dist/config/file-store.js +118 -0
  12. package/dist/config/file-store.js.map +1 -0
  13. package/dist/constants.d.ts +8 -1
  14. package/dist/constants.d.ts.map +1 -1
  15. package/dist/constants.js +17 -1
  16. package/dist/constants.js.map +1 -1
  17. package/dist/crypto/sealed-box.d.ts +7 -0
  18. package/dist/crypto/sealed-box.d.ts.map +1 -1
  19. package/dist/crypto/sealed-box.js +36 -1
  20. package/dist/crypto/sealed-box.js.map +1 -1
  21. package/dist/crypto/user-keys.d.ts +31 -0
  22. package/dist/crypto/user-keys.d.ts.map +1 -0
  23. package/dist/crypto/user-keys.js +36 -0
  24. package/dist/crypto/user-keys.js.map +1 -0
  25. package/dist/encryption-session.d.ts +33 -0
  26. package/dist/encryption-session.d.ts.map +1 -0
  27. package/dist/encryption-session.js +59 -0
  28. package/dist/encryption-session.js.map +1 -0
  29. package/dist/hot-wallet.d.ts +19 -2
  30. package/dist/hot-wallet.d.ts.map +1 -1
  31. package/dist/hot-wallet.js +26 -3
  32. package/dist/hot-wallet.js.map +1 -1
  33. package/dist/index.d.ts +12 -8
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +6 -6
  36. package/dist/index.js.map +1 -1
  37. package/dist/types.d.ts +1 -177
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/wallet-service.d.ts +75 -0
  40. package/dist/wallet-service.d.ts.map +1 -0
  41. package/dist/wallet-service.js +113 -0
  42. package/dist/wallet-service.js.map +1 -0
  43. package/package.json +5 -4
  44. package/dist/manager.d.ts +0 -28
  45. package/dist/manager.d.ts.map +0 -1
  46. package/dist/manager.js +0 -499
  47. package/dist/manager.js.map +0 -1
  48. package/dist/session/file-store.d.ts +0 -10
  49. package/dist/session/file-store.d.ts.map +0 -1
  50. package/dist/session/file-store.js +0 -88
  51. package/dist/session/file-store.js.map +0 -1
  52. package/dist/storage/crypto.d.ts +0 -7
  53. package/dist/storage/crypto.d.ts.map +0 -1
  54. package/dist/storage/crypto.js +0 -80
  55. package/dist/storage/crypto.js.map +0 -1
  56. package/dist/storage/file-store.d.ts +0 -21
  57. package/dist/storage/file-store.d.ts.map +0 -1
  58. package/dist/storage/file-store.js +0 -219
  59. package/dist/storage/file-store.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sealed-box.d.ts","sourceRoot":"","sources":["../../src/crypto/sealed-box.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAiED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,GAAG,gBAAgB,CAmB/F"}
1
+ {"version":3,"file":"sealed-box.d.ts","sourceRoot":"","sources":["../../src/crypto/sealed-box.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AA6ED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,GAAG,gBAAgB,CAmB/F;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,UAAU,GAAG,MAAM,CAe9F"}
@@ -1,4 +1,7 @@
1
- import { createCipheriv, createPublicKey, diffieHellman, generateKeyPairSync, hkdfSync, randomBytes } from 'node:crypto';
1
+ import { createCipheriv, createDecipheriv, createPrivateKey, createPublicKey, diffieHellman, generateKeyPairSync, hkdfSync, randomBytes } from 'node:crypto';
2
+ // PKCS#8 DER prefix for an X25519 private key (OID 1.3.101.110), followed by the
3
+ // raw 32-byte scalar. Lets us build a KeyObject from raw key bytes.
4
+ const X25519_PKCS8_PREFIX = Buffer.from('302e020100300506032b656e04220420', 'hex');
2
5
  function toBase64Url(raw) {
3
6
  return raw.toString('base64url');
4
7
  }
@@ -21,6 +24,16 @@ function createRawPublicKey(rawPublicKey) {
21
24
  }
22
25
  });
23
26
  }
27
+ function createRawPrivateKey(rawPrivateKey) {
28
+ if (rawPrivateKey.length !== 32) {
29
+ throw new Error('An X25519 private key must be exactly 32 bytes.');
30
+ }
31
+ return createPrivateKey({
32
+ format: 'der',
33
+ type: 'pkcs8',
34
+ key: Buffer.concat([X25519_PKCS8_PREFIX, rawPrivateKey])
35
+ });
36
+ }
24
37
  function exportRawPublicKey(publicKey) {
25
38
  const jwk = publicKey.export({ format: 'jwk' });
26
39
  if (typeof jwk.x !== 'string') {
@@ -63,4 +76,26 @@ export function sealSecret(mnemonic, recipientPublicKeyBase64) {
63
76
  aesKey.fill(0);
64
77
  }
65
78
  }
79
+ /**
80
+ * Reverse of {@link sealSecret}: recover the mnemonic from a sealed box using the
81
+ * recipient's raw 32-byte X25519 private key (decrypted from the user's
82
+ * `encryptedPrivateKeyJson` with their encryption password). Throws if the box
83
+ * was sealed to a different key or has been tampered with (GCM auth failure).
84
+ */
85
+ export function unsealSecret(sealed, recipientPrivateKey) {
86
+ const payload = JSON.parse(fromBase64(sealed.ciphertext).toString('utf8'));
87
+ const privateKey = createRawPrivateKey(Buffer.from(recipientPrivateKey));
88
+ const ephemeralPublicKey = createRawPublicKey(fromBase64(payload.ephemeralPublicKey));
89
+ const aesKey = deriveSharedAesKey(privateKey, ephemeralPublicKey);
90
+ try {
91
+ const decipher = createDecipheriv('aes-256-gcm', aesKey, fromBase64(payload.iv));
92
+ decipher.setAuthTag(fromBase64(payload.tag));
93
+ const decrypted = Buffer.concat([decipher.update(fromBase64(payload.ciphertext)), decipher.final()]);
94
+ const parsed = JSON.parse(decrypted.toString('utf8'));
95
+ return parsed.mnemonic;
96
+ }
97
+ finally {
98
+ aesKey.fill(0);
99
+ }
100
+ }
66
101
  //# sourceMappingURL=sealed-box.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sealed-box.js","sourceRoot":"","sources":["../../src/crypto/sealed-box.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sealed-box.js","sourceRoot":"","sources":["../../src/crypto/sealed-box.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Password-encrypted X25519 private key as produced by the web client during
3
+ * encryption-key setup (`PUT /me/encryption-key`) and returned by `GET /me`. The
4
+ * server only ever stores this encrypted blob; the password never leaves the
5
+ * client, so the server cannot decrypt it.
6
+ */
7
+ export interface EncryptedPrivateKeyJson {
8
+ version: number;
9
+ type: 'password-encrypted-x25519-private-key';
10
+ algorithm: string;
11
+ kdf: string;
12
+ salt: string;
13
+ iv: string;
14
+ tag: string;
15
+ ciphertext: string;
16
+ kdfParams: {
17
+ cost: number;
18
+ blockSize: number;
19
+ parallelization: number;
20
+ keyLength: number;
21
+ };
22
+ }
23
+ /**
24
+ * Decrypt the user's raw X25519 private key (32 bytes) from the
25
+ * `encryptedPrivateKeyJson` blob using their encryption password. Wire-compatible
26
+ * with the web client's scrypt + AES-256-GCM envelope (the plaintext is the
27
+ * base64-encoded private key). Throws {@link WrongPasswordError} on a bad
28
+ * password (GCM auth failure).
29
+ */
30
+ export declare function decryptUserPrivateKey(encrypted: EncryptedPrivateKeyJson, password: string): Uint8Array;
31
+ //# sourceMappingURL=user-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-keys.d.ts","sourceRoot":"","sources":["../../src/crypto/user-keys.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,uCAAuC,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CA4BtG"}
@@ -0,0 +1,36 @@
1
+ import { createDecipheriv, scryptSync } from 'node:crypto';
2
+ import { WrongPasswordError } from '../errors.js';
3
+ /**
4
+ * Decrypt the user's raw X25519 private key (32 bytes) from the
5
+ * `encryptedPrivateKeyJson` blob using their encryption password. Wire-compatible
6
+ * with the web client's scrypt + AES-256-GCM envelope (the plaintext is the
7
+ * base64-encoded private key). Throws {@link WrongPasswordError} on a bad
8
+ * password (GCM auth failure).
9
+ */
10
+ export function decryptUserPrivateKey(encrypted, password) {
11
+ if (!password || password.trim().length === 0) {
12
+ throw new WrongPasswordError('An encryption password is required to unlock your key.');
13
+ }
14
+ const salt = Buffer.from(encrypted.salt, 'base64');
15
+ const iv = Buffer.from(encrypted.iv, 'base64');
16
+ const tag = Buffer.from(encrypted.tag, 'base64');
17
+ const ciphertext = Buffer.from(encrypted.ciphertext, 'base64');
18
+ const key = scryptSync(password, salt, encrypted.kdfParams.keyLength, {
19
+ N: encrypted.kdfParams.cost,
20
+ r: encrypted.kdfParams.blockSize,
21
+ p: encrypted.kdfParams.parallelization
22
+ });
23
+ try {
24
+ const decipher = createDecipheriv('aes-256-gcm', key, iv);
25
+ decipher.setAuthTag(tag);
26
+ const plaintextBase64 = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
27
+ return new Uint8Array(Buffer.from(plaintextBase64, 'base64'));
28
+ }
29
+ catch (error) {
30
+ throw new WrongPasswordError('Incorrect encryption password. Use the password that unlocks your key (set during setup), not your account login password.', { cause: error });
31
+ }
32
+ finally {
33
+ key.fill(0);
34
+ }
35
+ }
36
+ //# sourceMappingURL=user-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-keys.js","sourceRoot":"","sources":["../../src/crypto/user-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAyBlD;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAkC,EAAE,QAAgB;IACxF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,kBAAkB,CAAC,wDAAwD,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE;QACpE,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI;QAC3B,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS;QAChC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,eAAe;KACvC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1D,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxG,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAC1B,4HAA4H,EAC5H,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { GuvenoApiClient } from './api/client.js';
2
+ import { type SealedSecretJson } from './crypto/sealed-box.js';
3
+ /**
4
+ * In-memory unlock of the user's X25519 encryption key — the SDK equivalent of
5
+ * the web client's EncryptionSession. The server is the source of truth: the
6
+ * mnemonic lives there sealed to this key. To create or read a wallet secret the
7
+ * SDK fetches the user's key blob from `GET /me`, decrypts the private key with
8
+ * the encryption password (held only in memory), and seals/unseals locally.
9
+ *
10
+ * The password and decrypted private key never leave the process and never reach
11
+ * the server. Call {@link lock} when done to wipe the key from memory.
12
+ */
13
+ export declare class EncryptionSession {
14
+ /** The user's X25519 public key (base64), used to seal new wallet secrets. */
15
+ readonly publicKey: string;
16
+ private privateKey;
17
+ private constructor();
18
+ /**
19
+ * Fetch the caller's encryption key via `GET /me` and decrypt its private key
20
+ * with the encryption password. Throws {@link EncryptionRequiredError} if the
21
+ * account has no encryption key yet (set one up in the Guveno dashboard first),
22
+ * or {@link WrongPasswordError} on a bad password.
23
+ */
24
+ static unlock(api: GuvenoApiClient, encryptionPassword: string): Promise<EncryptionSession>;
25
+ /** Seal a mnemonic to the user's public key, ready to push to the server. */
26
+ seal(mnemonic: string): SealedSecretJson;
27
+ /** Unseal a wallet's `encryptedSecretJson` (from `GET /wallets/:id/secret`). */
28
+ unsealRecord(encryptedSecretJson: Record<string, unknown>): string;
29
+ /** Wipe the private key from memory. The session cannot be used afterwards. */
30
+ lock(): void;
31
+ private assertUnlocked;
32
+ }
33
+ //# sourceMappingURL=encryption-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption-session.d.ts","sourceRoot":"","sources":["../src/encryption-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAIzF;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,UAAU,CAAoB;IAEtC,OAAO;IAKP;;;;;OAKG;WACU,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBjG,6EAA6E;IAC7E,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;IAKxC,gFAAgF;IAChF,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAIlE,+EAA+E;IAC/E,IAAI,IAAI,IAAI;IAOZ,OAAO,CAAC,cAAc;CAMvB"}
@@ -0,0 +1,59 @@
1
+ import { sealSecret, unsealSecret } from './crypto/sealed-box.js';
2
+ import { decryptUserPrivateKey } from './crypto/user-keys.js';
3
+ import { EncryptionRequiredError, WalletSdkError } from './errors.js';
4
+ /**
5
+ * In-memory unlock of the user's X25519 encryption key — the SDK equivalent of
6
+ * the web client's EncryptionSession. The server is the source of truth: the
7
+ * mnemonic lives there sealed to this key. To create or read a wallet secret the
8
+ * SDK fetches the user's key blob from `GET /me`, decrypts the private key with
9
+ * the encryption password (held only in memory), and seals/unseals locally.
10
+ *
11
+ * The password and decrypted private key never leave the process and never reach
12
+ * the server. Call {@link lock} when done to wipe the key from memory.
13
+ */
14
+ export class EncryptionSession {
15
+ /** The user's X25519 public key (base64), used to seal new wallet secrets. */
16
+ publicKey;
17
+ privateKey;
18
+ constructor(publicKey, privateKey) {
19
+ this.publicKey = publicKey;
20
+ this.privateKey = privateKey;
21
+ }
22
+ /**
23
+ * Fetch the caller's encryption key via `GET /me` and decrypt its private key
24
+ * with the encryption password. Throws {@link EncryptionRequiredError} if the
25
+ * account has no encryption key yet (set one up in the Guveno dashboard first),
26
+ * or {@link WrongPasswordError} on a bad password.
27
+ */
28
+ static async unlock(api, encryptionPassword) {
29
+ const user = await api.getCurrentUser();
30
+ if (user.encryptionKey == null) {
31
+ throw new EncryptionRequiredError('This account has no encryption key. Set one up in the Guveno dashboard before using the SDK.');
32
+ }
33
+ const privateKey = decryptUserPrivateKey(user.encryptionKey.encryptedPrivateKeyJson, encryptionPassword);
34
+ return new EncryptionSession(user.encryptionKey.publicKey, privateKey);
35
+ }
36
+ /** Seal a mnemonic to the user's public key, ready to push to the server. */
37
+ seal(mnemonic) {
38
+ this.assertUnlocked();
39
+ return sealSecret(mnemonic, this.publicKey);
40
+ }
41
+ /** Unseal a wallet's `encryptedSecretJson` (from `GET /wallets/:id/secret`). */
42
+ unsealRecord(encryptedSecretJson) {
43
+ return unsealSecret(encryptedSecretJson, this.assertUnlocked());
44
+ }
45
+ /** Wipe the private key from memory. The session cannot be used afterwards. */
46
+ lock() {
47
+ if (this.privateKey != null) {
48
+ this.privateKey.fill(0);
49
+ this.privateKey = null;
50
+ }
51
+ }
52
+ assertUnlocked() {
53
+ if (this.privateKey == null) {
54
+ throw new WalletSdkError('ENCRYPTION_REQUIRED', 'This encryption session has been locked.');
55
+ }
56
+ return this.privateKey;
57
+ }
58
+ }
59
+ //# sourceMappingURL=encryption-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption-session.js","sourceRoot":"","sources":["../src/encryption-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAyB,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAgC,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtE;;;;;;;;;GASG;AACH,MAAM,OAAO,iBAAiB;IAC5B,8EAA8E;IACrE,SAAS,CAAS;IACnB,UAAU,CAAoB;IAEtC,YAAoB,SAAiB,EAAE,UAAsB;QAC3D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAoB,EAAE,kBAA0B;QAClE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;QAExC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,uBAAuB,CAC/B,8FAA8F,CAC/F,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,qBAAqB,CACtC,IAAI,CAAC,aAAa,CAAC,uBAA6D,EAChF,kBAAkB,CACnB,CAAC;QAEF,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzE,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,QAAgB;QACnB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,gFAAgF;IAChF,YAAY,CAAC,mBAA4C;QACvD,OAAO,YAAY,CAAC,mBAAkD,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,+EAA+E;IAC/E,IAAI;QACF,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,cAAc,CAAC,qBAAqB,EAAE,0CAA0C,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -1,13 +1,23 @@
1
1
  import type { GuvenoApiClient } from './api/client.js';
2
2
  import type { ApiWithdrawal } from './api/types.js';
3
+ import type { EncryptionSession } from './encryption-session.js';
3
4
  import type { KeyProvider } from './keyprovider/index.js';
4
5
  import type { EthereumGasOverrides } from './signing/sign-ethereum.js';
5
6
  import type { BitcoinOutput } from './signing/types.js';
6
7
  export interface HotWalletOptions {
7
8
  /** API client authenticated with an API key whose role is in WITHDRAWAL_ROLES (owner/admin/manager/signer). */
8
9
  api: GuvenoApiClient;
9
- /** Resolves the mnemonic for a wallet's key — plaintext file or KMS/HSM-wrapped. */
10
- keys: KeyProvider;
10
+ /**
11
+ * Source the recovery phrase from the server (sealed) and unseal it locally —
12
+ * the server-source-of-truth path. Mutually usable with `keys`; provide one.
13
+ */
14
+ session?: EncryptionSession;
15
+ /**
16
+ * Alternative key source: resolve the mnemonic from a KMS/HSM-wrapped blob or a
17
+ * local file ({@link KeyProvider}) instead of the server. Use for headless
18
+ * signers that manage their own key material.
19
+ */
20
+ keys?: KeyProvider;
11
21
  }
12
22
  export interface WithdrawInput {
13
23
  addressId: number;
@@ -39,6 +49,7 @@ export interface WithdrawInput {
39
49
  export declare class HotWallet {
40
50
  private readonly api;
41
51
  private readonly keys;
52
+ private readonly session;
42
53
  private readonly addressContexts;
43
54
  private readonly queues;
44
55
  private fullyIndexed;
@@ -48,6 +59,12 @@ export declare class HotWallet {
48
59
  /** Fetch the current state of a withdrawal (e.g. to poll for confirmation). */
49
60
  getWithdrawal(withdrawalId: number): Promise<ApiWithdrawal>;
50
61
  private runWithdraw;
62
+ /**
63
+ * Resolve the recovery phrase for a withdrawal: from the server (sealed, then
64
+ * unsealed via the encryption session) when in session mode, else from the
65
+ * configured key provider. Session mode needs the address's wallet id.
66
+ */
67
+ private resolveMnemonic;
51
68
  private resolveAddress;
52
69
  private indexWallet;
53
70
  private indexAllWallets;
@@ -1 +1 @@
1
- {"version":3,"file":"hot-wallet.d.ts","sourceRoot":"","sources":["../src/hot-wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,+GAA+G;IAC/G,GAAG,EAAE,eAAe,CAAC;IACrB,oFAAoF;IACpF,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,0GAA0G;IAC1G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAUD;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,gBAAgB;IAKrC,8FAA8F;IACxF,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAI5D,+EAA+E;IACzE,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAInD,WAAW;YAgDX,cAAc;YA4Bd,WAAW;YAqBX,eAAe;IAY7B,yFAAyF;IACzF,OAAO,CAAC,SAAS;CAYlB"}
1
+ {"version":3,"file":"hot-wallet.d.ts","sourceRoot":"","sources":["../src/hot-wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,+GAA+G;IAC/G,GAAG,EAAE,eAAe,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,0GAA0G;IAC1G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAYD;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,gBAAgB;IASrC,8FAA8F;IACxF,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAI5D,+EAA+E;IACzE,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAInD,WAAW;IAgDzB;;;;OAIG;YACW,eAAe;YAef,cAAc;YA6Bd,WAAW;YAsBX,eAAe;IAY7B,yFAAyF;IACzF,OAAO,CAAC,SAAS;CAYlB"}
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { NotFoundError, SigningError } from './errors.js';
2
+ import { NotFoundError, SigningError, ValidationError } from './errors.js';
3
3
  import { fingerprintMnemonic } from './mnemonic.js';
4
4
  import { canSignChain, signWithdrawal } from './signing/sign-withdrawal.js';
5
5
  /**
@@ -12,12 +12,17 @@ import { canSignChain, signWithdrawal } from './signing/sign-withdrawal.js';
12
12
  export class HotWallet {
13
13
  api;
14
14
  keys;
15
+ session;
15
16
  addressContexts = new Map();
16
17
  queues = new Map();
17
18
  fullyIndexed = false;
18
19
  constructor(options) {
20
+ if (options.keys == null && options.session == null) {
21
+ throw new ValidationError('A HotWallet needs either a `session` or a `keys` provider to source signing keys.');
22
+ }
19
23
  this.api = options.api;
20
24
  this.keys = options.keys;
25
+ this.session = options.session;
21
26
  }
22
27
  /** Prepare, sign, and broadcast a withdrawal. Resolves to the broadcast withdrawal record. */
23
28
  async withdraw(input) {
@@ -44,7 +49,7 @@ export class HotWallet {
44
49
  if (!canSignChain(signingPayload.chain)) {
45
50
  throw new SigningError(`The hot wallet cannot sign ${signingPayload.chain} withdrawals.`);
46
51
  }
47
- let mnemonic = (await this.keys.getMnemonic(context.keyFingerprint)).trim();
52
+ let mnemonic = (await this.resolveMnemonic(context, input)).trim();
48
53
  try {
49
54
  const actual = fingerprintMnemonic(mnemonic);
50
55
  if (actual !== context.keyFingerprint) {
@@ -67,11 +72,28 @@ export class HotWallet {
67
72
  mnemonic = '';
68
73
  }
69
74
  }
75
+ /**
76
+ * Resolve the recovery phrase for a withdrawal: from the server (sealed, then
77
+ * unsealed via the encryption session) when in session mode, else from the
78
+ * configured key provider. Session mode needs the address's wallet id.
79
+ */
80
+ async resolveMnemonic(context, input) {
81
+ if (this.keys != null) {
82
+ return this.keys.getMnemonic(context.keyFingerprint);
83
+ }
84
+ const walletId = context.walletId ?? input.walletId;
85
+ if (walletId == null) {
86
+ throw new SigningError('Session-mode withdrawals need the source address’s wallet id; pass `walletId` to withdraw().');
87
+ }
88
+ const secret = await this.api.getWalletKeySecret(walletId);
89
+ return this.session.unsealRecord(secret.encryptedSecretJson);
90
+ }
70
91
  async resolveAddress(input) {
71
92
  if (input.derivationPath != null && input.keyFingerprint != null) {
72
93
  const context = {
73
94
  derivationPath: input.derivationPath,
74
- keyFingerprint: input.keyFingerprint
95
+ keyFingerprint: input.keyFingerprint,
96
+ ...(input.walletId != null ? { walletId: input.walletId } : {})
75
97
  };
76
98
  this.addressContexts.set(input.addressId, context);
77
99
  return context;
@@ -105,6 +127,7 @@ export class HotWallet {
105
127
  this.addressContexts.set(address.id, {
106
128
  derivationPath: address.derivationPath,
107
129
  keyFingerprint,
130
+ walletId,
108
131
  chain: address.chain
109
132
  });
110
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hot-wallet.js","sourceRoot":"","sources":["../src/hot-wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hot-wallet.js","sourceRoot":"","sources":["../src/hot-wallet.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,16 @@
1
1
  export { GuvenoApiClient } from './api/client.js';
2
2
  export { WEBHOOK_EVENT_TYPES } from './api/types.js';
3
- export { FileSystemApiSessionStore } from './session/file-store.js';
4
- export { WalletManager, EthereumWalletManager } from './manager.js';
5
- export { FileSystemWalletStore, resolveStorageDir } from './storage/file-store.js';
6
- export { decryptSecretsJson } from './storage/crypto.js';
7
- export { sealSecret } from './crypto/sealed-box.js';
3
+ export { FileSystemConfigStore, init, loadConfig, createClientFromConfig } from './config/file-store.js';
4
+ export type { GuvenoConfig } from './config/file-store.js';
5
+ export { WalletService } from './wallet-service.js';
6
+ export type { CreateWalletOptions, CreateWalletResult, DeriveAddressOptions, DeriveAddressResult, ImportWalletOptions, WalletServiceOptions } from './wallet-service.js';
7
+ export { EncryptionSession } from './encryption-session.js';
8
+ export { sealSecret, unsealSecret } from './crypto/sealed-box.js';
9
+ export type { SealedSecretJson } from './crypto/sealed-box.js';
10
+ export { decryptUserPrivateKey } from './crypto/user-keys.js';
11
+ export type { EncryptedPrivateKeyJson } from './crypto/user-keys.js';
8
12
  export { DEFAULT_CHAIN, CHAIN_DEFINITIONS, POLKADOT_SS58_FORMAT, SUPPORTED_CHAINS, SUPPORTED_NETWORKS } from './chains.js';
9
- export { DEFAULT_API_BASE_URL, DEFAULT_API_BASE_URL_ENV_VAR } from './constants.js';
13
+ export { DEFAULT_API_BASE_URL, DEFAULT_API_BASE_URL_ENV_VAR, DEFAULT_API_KEY_ENV_VAR, resolveStorageDir } from './constants.js';
10
14
  export { buildDerivationPath, deriveAddress, deriveBitcoinAddress, deriveEthereumAddress, derivePolkadotAddress, deriveXrpAddress } from './derivation.js';
11
15
  export { assertValidMnemonic, fingerprintMnemonic, generateRandomMnemonic, getMnemonicWordCount, normalizeMnemonic } from './mnemonic.js';
12
16
  export { HotWallet } from './hot-wallet.js';
@@ -24,6 +28,6 @@ export type { MnemonicMap } from './keyprovider/file-provider.js';
24
28
  export type { SignWithdrawalInput } from './signing/sign-withdrawal.js';
25
29
  export type { EthereumGasOverrides } from './signing/sign-ethereum.js';
26
30
  export type { BitcoinChainState, BitcoinOutput, ChainState, EthereumChainState, PolkadotChainState, SigningAsset, SigningPayload, XrpChainState } from './signing/types.js';
27
- export type { CreateWalletGroupOptions, CreateWalletGroupResult, DeriveAddressOptions, DerivedAccount, EncryptedStoredSecretRecord, EncryptionStatus, ImportWalletGroupOptions, ImportWalletGroupResult, LabelAccountOptions, MnemonicWordCount, SupportedChain, SupportedNetwork, WalletGroup, WalletGroupMetadataJson, WalletGroupMetadataExport, WalletGroupRecordExport, WalletKeySummary, WalletRecordAddressExport, WalletGroupSecretsJson, WalletGroupSummary, WalletManagerOptions, WalletManagerOptions as HdWalletManagerOptions } from './types.js';
28
- export type { ApiAuthResponse, ApiChain, ApiClientOptions, ApiCompanyMembership, ApiCompanyRole, ApiKeyAccess, ApiKeySummary, ApiNetwork, ApiPageInfo, ApiRecordStatus, ApiSession, ApiSessionStore, ApiSignupResponse, ApiUser, ApiUserEncryptionKey, ApiVerifyEmailInput, ApiWalletAddress, ApiWalletDetail, ApiWalletKeySecret, ApiWalletSummary, ApiWalletType, ApiWebhook, ApiWebhookDelivery, ApiWebhookDeliveryStatus, ApiWebhookEventType, ApiWebhookType, ApiWebhookWithSecret, ApiWithdrawal, ApiWithdrawalStatus, BroadcastWithdrawalInput, CreateApiWalletInput, CreateApiWebhookInput, ListApiAddressOptions, ListApiWalletOptions, ListApiWebhookDeliveryOptions, ListApiWithdrawalOptions, PrepareWithdrawalInput, PrepareWithdrawalResult, UpdateApiWalletInput, ApiAuthResponse as ApiAuthPayload, ApiClientOptions as ApiClientConfig, ApiSession as SavedApiSession, ApiSessionStore as SavedApiSessionStore, ApiUser as AuthenticatedApiUser, ApiWalletDetail as RemoteWalletDetail, ApiWalletSummary as RemoteWalletSummary, CreateApiWalletInput as CreateRemoteWalletInput, UpdateApiWalletInput as UpdateRemoteWalletInput } from './api/types.js';
31
+ export type { MnemonicWordCount, SupportedChain, SupportedNetwork, WalletRecordAddressExport } from './types.js';
32
+ export type { ApiChain, ApiClientOptions, ApiCompanyMembership, ApiCompanyRole, ApiKeyAccess, ApiKeySummary, ApiNetwork, ApiPageInfo, ApiRecordStatus, ApiUser, ApiUserEncryptionKey, ApiWalletAddress, ApiWalletDetail, ApiWalletKeySecret, ApiWalletSummary, ApiWalletType, ApiWebhook, ApiWebhookDelivery, ApiWebhookDeliveryStatus, ApiWebhookEventType, ApiWebhookType, ApiWebhookWithSecret, ApiWithdrawal, ApiWithdrawalStatus, BroadcastWithdrawalInput, CreateApiWalletInput, CreateApiWebhookInput, ListApiAddressOptions, ListApiWalletOptions, ListApiWebhookDeliveryOptions, ListApiWithdrawalOptions, PrepareWithdrawalInput, PrepareWithdrawalResult, UpdateApiWalletInput, ApiClientOptions as ApiClientConfig, ApiUser as AuthenticatedApiUser, ApiWalletDetail as RemoteWalletDetail, ApiWalletSummary as RemoteWalletSummary, CreateApiWalletInput as CreateRemoteWalletInput, UpdateApiWalletInput as UpdateRemoteWalletInput } from './api/types.js';
29
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  export { GuvenoApiClient } from './api/client.js';
2
2
  export { WEBHOOK_EVENT_TYPES } from './api/types.js';
3
- export { FileSystemApiSessionStore } from './session/file-store.js';
4
- export { WalletManager, EthereumWalletManager } from './manager.js';
5
- export { FileSystemWalletStore, resolveStorageDir } from './storage/file-store.js';
6
- export { decryptSecretsJson } from './storage/crypto.js';
7
- export { sealSecret } from './crypto/sealed-box.js';
3
+ export { FileSystemConfigStore, init, loadConfig, createClientFromConfig } from './config/file-store.js';
4
+ export { WalletService } from './wallet-service.js';
5
+ export { EncryptionSession } from './encryption-session.js';
6
+ export { sealSecret, unsealSecret } from './crypto/sealed-box.js';
7
+ export { decryptUserPrivateKey } from './crypto/user-keys.js';
8
8
  export { DEFAULT_CHAIN, CHAIN_DEFINITIONS, POLKADOT_SS58_FORMAT, SUPPORTED_CHAINS, SUPPORTED_NETWORKS } from './chains.js';
9
- export { DEFAULT_API_BASE_URL, DEFAULT_API_BASE_URL_ENV_VAR } from './constants.js';
9
+ export { DEFAULT_API_BASE_URL, DEFAULT_API_BASE_URL_ENV_VAR, DEFAULT_API_KEY_ENV_VAR, resolveStorageDir } from './constants.js';
10
10
  export { buildDerivationPath, deriveAddress, deriveBitcoinAddress, deriveEthereumAddress, derivePolkadotAddress, deriveXrpAddress } from './derivation.js';
11
11
  export { assertValidMnemonic, fingerprintMnemonic, generateRandomMnemonic, getMnemonicWordCount, normalizeMnemonic } from './mnemonic.js';
12
12
  export { HotWallet } from './hot-wallet.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,aAAa,CAAC"}