@unlink-xyz/core 0.1.3-canary.df80fa1 → 0.1.3-canary.e355339

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 (152) hide show
  1. package/dist/account/account.d.ts +1 -1
  2. package/dist/account/account.d.ts.map +1 -1
  3. package/dist/account/account.js +29 -37
  4. package/dist/browser/index.js +108220 -0
  5. package/dist/browser/index.js.map +1 -0
  6. package/dist/circuits.json +54 -6
  7. package/dist/clients/broadcaster.d.ts +7 -2
  8. package/dist/clients/broadcaster.d.ts.map +1 -1
  9. package/dist/clients/broadcaster.js +8 -1
  10. package/dist/clients/http.d.ts.map +1 -1
  11. package/dist/clients/http.js +16 -9
  12. package/dist/clients/indexer.d.ts +10 -0
  13. package/dist/clients/indexer.d.ts.map +1 -1
  14. package/dist/clients/indexer.js +39 -13
  15. package/dist/config.d.ts +1 -4
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +8 -4
  18. package/dist/constants.d.ts +6 -0
  19. package/dist/constants.d.ts.map +1 -0
  20. package/dist/constants.js +5 -0
  21. package/dist/core.d.ts.map +1 -1
  22. package/dist/core.js +3 -2
  23. package/dist/crypto-adapters/index.d.ts.map +1 -1
  24. package/dist/crypto-adapters/index.js +2 -1
  25. package/dist/errors.d.ts +14 -0
  26. package/dist/errors.d.ts.map +1 -1
  27. package/dist/errors.js +26 -0
  28. package/dist/index.d.ts +3 -3
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -4
  31. package/dist/keys/address.d.ts +13 -0
  32. package/dist/keys/address.d.ts.map +1 -0
  33. package/dist/keys/address.js +55 -0
  34. package/dist/keys/derive.d.ts +37 -0
  35. package/dist/keys/derive.d.ts.map +1 -0
  36. package/dist/keys/derive.js +112 -0
  37. package/dist/keys/hex.d.ts +17 -0
  38. package/dist/keys/hex.d.ts.map +1 -0
  39. package/dist/keys/hex.js +66 -0
  40. package/dist/keys/index.d.ts +5 -0
  41. package/dist/keys/index.d.ts.map +1 -0
  42. package/dist/keys/index.js +4 -0
  43. package/dist/keys/mnemonic.d.ts +8 -0
  44. package/dist/keys/mnemonic.d.ts.map +1 -0
  45. package/dist/keys/mnemonic.js +23 -0
  46. package/dist/prover/prover.d.ts.map +1 -1
  47. package/dist/prover/prover.js +18 -18
  48. package/dist/prover/registry.d.ts +3 -30
  49. package/dist/prover/registry.d.ts.map +1 -1
  50. package/dist/prover/registry.js +12 -51
  51. package/dist/state/merkle/hydrator.d.ts.map +1 -1
  52. package/dist/state/merkle/hydrator.js +3 -2
  53. package/dist/state/merkle/merkle-tree.d.ts.map +1 -1
  54. package/dist/state/merkle/merkle-tree.js +7 -6
  55. package/dist/state/store/ciphertext-store.d.ts +4 -0
  56. package/dist/state/store/ciphertext-store.d.ts.map +1 -1
  57. package/dist/state/store/ciphertext-store.js +12 -0
  58. package/dist/state/store/job-store.d.ts.map +1 -1
  59. package/dist/state/store/job-store.js +51 -29
  60. package/dist/state/store/jobs.d.ts +33 -9
  61. package/dist/state/store/jobs.d.ts.map +1 -1
  62. package/dist/state/store/note-store.d.ts +6 -2
  63. package/dist/state/store/note-store.d.ts.map +1 -1
  64. package/dist/state/store/note-store.js +22 -4
  65. package/dist/state/store/nullifier-store.d.ts +9 -0
  66. package/dist/state/store/nullifier-store.d.ts.map +1 -1
  67. package/dist/state/store/nullifier-store.js +32 -0
  68. package/dist/state/store/records.d.ts +6 -0
  69. package/dist/state/store/records.d.ts.map +1 -1
  70. package/dist/state/store/store.d.ts +17 -1
  71. package/dist/state/store/store.d.ts.map +1 -1
  72. package/dist/state/store/store.js +89 -1
  73. package/dist/storage/indexeddb.js +1 -1
  74. package/dist/transactions/deposit.d.ts +6 -4
  75. package/dist/transactions/deposit.d.ts.map +1 -1
  76. package/dist/transactions/deposit.js +172 -81
  77. package/dist/transactions/index.d.ts +5 -4
  78. package/dist/transactions/index.d.ts.map +1 -1
  79. package/dist/transactions/index.js +4 -3
  80. package/dist/transactions/note-selection.d.ts +1 -1
  81. package/dist/transactions/note-selection.d.ts.map +1 -1
  82. package/dist/transactions/note-selection.js +14 -9
  83. package/dist/transactions/note-sync.d.ts +0 -5
  84. package/dist/transactions/note-sync.d.ts.map +1 -1
  85. package/dist/transactions/note-sync.js +308 -159
  86. package/dist/transactions/reconcile.d.ts +1 -1
  87. package/dist/transactions/reconcile.d.ts.map +1 -1
  88. package/dist/transactions/reconcile.js +9 -2
  89. package/dist/transactions/transact.d.ts +5 -2
  90. package/dist/transactions/transact.d.ts.map +1 -1
  91. package/dist/transactions/transact.js +194 -142
  92. package/dist/transactions/transaction-planner.d.ts +1 -1
  93. package/dist/transactions/transaction-planner.d.ts.map +1 -1
  94. package/dist/transactions/transaction-planner.js +9 -8
  95. package/dist/transactions/transfer-planner.d.ts +36 -0
  96. package/dist/transactions/transfer-planner.d.ts.map +1 -0
  97. package/dist/transactions/transfer-planner.js +85 -0
  98. package/dist/transactions/types/deposit.d.ts +29 -10
  99. package/dist/transactions/types/deposit.d.ts.map +1 -1
  100. package/dist/transactions/types/options.d.ts +4 -0
  101. package/dist/transactions/types/options.d.ts.map +1 -1
  102. package/dist/transactions/types/state-stores.d.ts +54 -2
  103. package/dist/transactions/types/state-stores.d.ts.map +1 -1
  104. package/dist/transactions/types/transact.d.ts +31 -16
  105. package/dist/transactions/types/transact.d.ts.map +1 -1
  106. package/dist/transactions/withdrawal-planner.d.ts +25 -28
  107. package/dist/transactions/withdrawal-planner.d.ts.map +1 -1
  108. package/dist/transactions/withdrawal-planner.js +76 -47
  109. package/dist/tsconfig.tsbuildinfo +1 -1
  110. package/dist/tsup.browser.config.d.ts +7 -0
  111. package/dist/tsup.browser.config.d.ts.map +1 -0
  112. package/dist/tsup.browser.config.js +34 -0
  113. package/dist/utils/amounts.d.ts +2 -2
  114. package/dist/utils/amounts.js +11 -11
  115. package/dist/utils/async.d.ts +9 -0
  116. package/dist/utils/async.d.ts.map +1 -1
  117. package/dist/utils/async.js +24 -0
  118. package/dist/utils/bigint.js +7 -7
  119. package/dist/utils/crypto.d.ts +9 -3
  120. package/dist/utils/crypto.d.ts.map +1 -1
  121. package/dist/utils/crypto.js +11 -5
  122. package/dist/utils/json-codec.js +1 -1
  123. package/dist/utils/polling.d.ts +5 -0
  124. package/dist/utils/polling.d.ts.map +1 -1
  125. package/dist/utils/polling.js +5 -0
  126. package/dist/utils/validators.d.ts +2 -2
  127. package/dist/utils/validators.d.ts.map +1 -1
  128. package/dist/utils/validators.js +14 -14
  129. package/dist/vitest.config.d.ts.map +1 -1
  130. package/dist/vitest.config.js +2 -7
  131. package/package.json +21 -9
  132. package/dist/key-derivation/bech32.d.ts +0 -22
  133. package/dist/key-derivation/bech32.d.ts.map +0 -1
  134. package/dist/key-derivation/bech32.js +0 -86
  135. package/dist/key-derivation/bip32.d.ts +0 -17
  136. package/dist/key-derivation/bip32.d.ts.map +0 -1
  137. package/dist/key-derivation/bip32.js +0 -41
  138. package/dist/key-derivation/bip39.d.ts +0 -22
  139. package/dist/key-derivation/bip39.d.ts.map +0 -1
  140. package/dist/key-derivation/bip39.js +0 -57
  141. package/dist/key-derivation/bytes.d.ts +0 -19
  142. package/dist/key-derivation/bytes.d.ts.map +0 -1
  143. package/dist/key-derivation/bytes.js +0 -92
  144. package/dist/key-derivation/hash.d.ts +0 -3
  145. package/dist/key-derivation/hash.d.ts.map +0 -1
  146. package/dist/key-derivation/hash.js +0 -10
  147. package/dist/key-derivation/index.d.ts +0 -7
  148. package/dist/key-derivation/index.d.ts.map +0 -1
  149. package/dist/key-derivation/index.js +0 -6
  150. package/dist/key-derivation/wallet-node.d.ts +0 -47
  151. package/dist/key-derivation/wallet-node.d.ts.map +0 -1
  152. package/dist/key-derivation/wallet-node.js +0 -110
@@ -1,4 +1,4 @@
1
- import { type SpendingKeyPair, type ViewingKeyPair } from "../key-derivation/wallet-node.js";
1
+ import { type SpendingKeyPair, type ViewingKeyPair } from "../keys/derive.js";
2
2
  import type { Storage } from "../types.js";
3
3
  export type MasterSeedCrypto = {
4
4
  encrypt(seed: Uint8Array): Promise<Uint8Array> | Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../account/account.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IAC5D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAC3D,eAAO,MAAM,mBAAmB,kCAAkC,CAAC;AAOnE,MAAM,MAAM,OAAO,GAAG;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,YAAY,GAAE,MAAU,GACvB,OAAO,CAAC,OAAO,CAAC,CA2BlB;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,MAAU,EACxB,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAWD,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,GAAG,EACH,MAAiC,EACjC,SAAiB,EACjB,kBAAkB,GACnB,EAAE,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8BjD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAK5B;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,EACzC,OAAO,EACP,QAAQ,EACR,MAAiC,EACjC,SAAiB,EACjB,QAAa,GACd,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,CAAC,CAenD;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,IAAI,CAAC,CAOf"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../account/account.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IAC5D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAC3D,eAAO,MAAM,mBAAmB,kCAAkC,CAAC;AAOnE,MAAM,MAAM,OAAO,GAAG;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,YAAY,GAAE,MAAU,GACvB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,MAAU,EACxB,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAQD,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,GAAG,EACH,MAAiC,EACjC,SAAiB,EACjB,kBAAkB,GACnB,EAAE,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgCjD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAK5B;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,EACzC,OAAO,EACP,QAAQ,EACR,MAAiC,EACjC,SAAiB,EACjB,QAAa,GACd,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,CAAC,CAenD;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -1,7 +1,8 @@
1
- import { encodeAddress } from "../key-derivation/bech32.js";
2
- import { Mnemonic } from "../key-derivation/bip39.js";
3
- import { ByteUtils } from "../key-derivation/bytes.js";
4
- import { deriveNodesFromSeed, WalletNode, } from "../key-derivation/wallet-node.js";
1
+ import { ValidationError } from "../errors.js";
2
+ import { encodeAddress } from "../keys/address.js";
3
+ import { deriveAccountKeys, } from "../keys/derive.js";
4
+ import { Hex } from "../keys/hex.js";
5
+ import { Mnemonic } from "../keys/mnemonic.js";
5
6
  import { zeroize } from "../utils/secure-memory.js";
6
7
  export const MASTER_SEED_LENGTH = 64;
7
8
  export const MASTER_SEED_KEY = "cfg:wallet:master_seed/v1";
@@ -12,22 +13,18 @@ const textDecoder = new TextDecoder();
12
13
  export async function deriveAccount(masterSeed, accountIndex = 0) {
13
14
  const seed = normalizeMasterSeed(masterSeed);
14
15
  if (!Number.isInteger(accountIndex) || accountIndex < 0) {
15
- throw new Error("accountIndex must be a non-negative integer");
16
+ throw new ValidationError("accountIndex must be a non-negative integer");
16
17
  }
17
- const { spending, viewing } = deriveNodesFromSeed(seed, accountIndex);
18
- const spendingKeyPair = spending.getSpendingKeyPair();
19
- const viewingKeyPair = await viewing.getViewingKeyPair();
20
- const nullifyingKey = WalletNode.getNullifyingKey(viewingKeyPair.privateKey);
21
- const masterPublicKey = WalletNode.getMasterPublicKey(spendingKeyPair.pubkey, nullifyingKey);
18
+ const keys = await deriveAccountKeys(seed, accountIndex);
22
19
  const address = encodeAddress({
23
- masterPublicKey,
24
- viewingPublicKey: viewingKeyPair.pubkey,
20
+ masterPublicKey: keys.masterPublicKey,
21
+ viewingPublicKey: keys.viewing.pubkey,
25
22
  });
26
23
  return {
27
- spendingKeyPair,
28
- viewingKeyPair,
29
- nullifyingKey,
30
- masterPublicKey,
24
+ spendingKeyPair: keys.spending,
25
+ viewingKeyPair: keys.viewing,
26
+ nullifyingKey: keys.nullifyingKey,
27
+ masterPublicKey: keys.masterPublicKey,
31
28
  address,
32
29
  };
33
30
  }
@@ -41,13 +38,10 @@ export async function deriveAccountFromMnemonic(mnemonic, accountIndex = 0, pass
41
38
  zeroize(seed);
42
39
  }
43
40
  }
41
+ /** Passthrough crypto, storage handles buffer isolation */
44
42
  const identityMasterSeedCrypto = {
45
- encrypt(seed) {
46
- return clone(seed);
47
- },
48
- decrypt(payload) {
49
- return clone(payload);
50
- },
43
+ encrypt: (seed) => seed,
44
+ decrypt: (payload) => payload,
51
45
  };
52
46
  export async function generateMasterSeed({ storage, rng, crypto = identityMasterSeedCrypto, overwrite = false, mnemonicPassphrase, }) {
53
47
  if (!overwrite) {
@@ -63,10 +57,10 @@ export async function generateMasterSeed({ storage, rng, crypto = identityMaster
63
57
  }
64
58
  const entropy = rng(MNEMONIC_ENTROPY_BYTES);
65
59
  if (entropy.length !== MNEMONIC_ENTROPY_BYTES) {
66
- throw new Error(`mnemonic entropy must be ${MNEMONIC_ENTROPY_BYTES} bytes`);
60
+ throw new ValidationError(`mnemonic entropy must be ${MNEMONIC_ENTROPY_BYTES} bytes`);
67
61
  }
68
62
  try {
69
- const mnemonic = Mnemonic.fromEntropy(ByteUtils.bytesToHex(entropy));
63
+ const mnemonic = Mnemonic.fromEntropy(Hex.fromBytes(entropy));
70
64
  await storeMasterMnemonic(storage, mnemonic, crypto);
71
65
  const seed = mnemonicToSeed(mnemonic, mnemonicPassphrase);
72
66
  await storeMasterSeed(storage, seed, crypto);
@@ -87,9 +81,9 @@ export async function storeMasterSeed(storage, seed, crypto = identityMasterSeed
87
81
  const normalized = normalizeMasterSeed(seed);
88
82
  const encrypted = await crypto.encrypt(normalized);
89
83
  if (!(encrypted instanceof Uint8Array)) {
90
- throw new Error("master seed encryptor must return Uint8Array");
84
+ throw new ValidationError("master seed encryptor must return Uint8Array");
91
85
  }
92
- await storage.put(MASTER_SEED_KEY, clone(encrypted));
86
+ await storage.put(MASTER_SEED_KEY, encrypted);
93
87
  }
94
88
  export async function loadMasterMnemonic(storage, crypto = identityMasterSeedCrypto) {
95
89
  const stored = await storage.get(MASTER_MNEMONIC_KEY);
@@ -108,7 +102,7 @@ export async function importMasterMnemonic({ storage, mnemonic, crypto = identit
108
102
  if (!overwrite) {
109
103
  const existing = await loadMasterMnemonic(storage, crypto);
110
104
  if (existing) {
111
- throw new Error("master mnemonic already exists; set overwrite to true to replace it");
105
+ throw new ValidationError("master mnemonic already exists; set overwrite to true to replace it");
112
106
  }
113
107
  }
114
108
  const normalized = normalizeMnemonic(mnemonic);
@@ -121,30 +115,28 @@ export async function storeMasterMnemonic(storage, mnemonic, crypto = identityMa
121
115
  const normalized = normalizeMnemonic(mnemonic);
122
116
  const encrypted = await crypto.encrypt(textEncoder.encode(normalized));
123
117
  if (!(encrypted instanceof Uint8Array)) {
124
- throw new Error("master mnemonic encryptor must return Uint8Array");
118
+ throw new ValidationError("master mnemonic encryptor must return Uint8Array");
125
119
  }
126
- await storage.put(MASTER_MNEMONIC_KEY, clone(encrypted));
127
- }
128
- function clone(bytes) {
129
- return new Uint8Array(bytes);
120
+ await storage.put(MASTER_MNEMONIC_KEY, encrypted);
130
121
  }
122
+ /** Validates seed format. Storage handles buffer isolation on put/get. */
131
123
  function normalizeMasterSeed(seed) {
132
124
  if (!(seed instanceof Uint8Array)) {
133
- throw new Error("master seed must be a Uint8Array");
125
+ throw new ValidationError("master seed must be a Uint8Array");
134
126
  }
135
127
  if (seed.length !== MASTER_SEED_LENGTH) {
136
- throw new Error(`master seed must be ${MASTER_SEED_LENGTH} bytes`);
128
+ throw new ValidationError(`master seed must be ${MASTER_SEED_LENGTH} bytes`);
137
129
  }
138
- return clone(seed);
130
+ return seed;
139
131
  }
140
132
  function normalizeMnemonic(mnemonic) {
141
133
  const formatted = mnemonic.trim().replace(/\s+/g, " ");
142
134
  if (!Mnemonic.validate(formatted)) {
143
- throw new Error("invalid BIP-39 mnemonic phrase");
135
+ throw new ValidationError("invalid BIP-39 mnemonic phrase");
144
136
  }
145
137
  return formatted;
146
138
  }
147
139
  function mnemonicToSeed(mnemonic, password = "") {
148
140
  const seedHex = Mnemonic.toSeed(mnemonic, password);
149
- return ByteUtils.hexStringToBytes(seedHex);
141
+ return Hex.toBytes(seedHex);
150
142
  }