@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.
- package/dist/account/account.d.ts +1 -1
- package/dist/account/account.d.ts.map +1 -1
- package/dist/account/account.js +29 -37
- package/dist/browser/index.js +108220 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/circuits.json +54 -6
- package/dist/clients/broadcaster.d.ts +7 -2
- package/dist/clients/broadcaster.d.ts.map +1 -1
- package/dist/clients/broadcaster.js +8 -1
- package/dist/clients/http.d.ts.map +1 -1
- package/dist/clients/http.js +16 -9
- package/dist/clients/indexer.d.ts +10 -0
- package/dist/clients/indexer.d.ts.map +1 -1
- package/dist/clients/indexer.js +39 -13
- package/dist/config.d.ts +1 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -4
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +5 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +3 -2
- package/dist/crypto-adapters/index.d.ts.map +1 -1
- package/dist/crypto-adapters/index.js +2 -1
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +26 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/keys/address.d.ts +13 -0
- package/dist/keys/address.d.ts.map +1 -0
- package/dist/keys/address.js +55 -0
- package/dist/keys/derive.d.ts +37 -0
- package/dist/keys/derive.d.ts.map +1 -0
- package/dist/keys/derive.js +112 -0
- package/dist/keys/hex.d.ts +17 -0
- package/dist/keys/hex.d.ts.map +1 -0
- package/dist/keys/hex.js +66 -0
- package/dist/keys/index.d.ts +5 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +4 -0
- package/dist/keys/mnemonic.d.ts +8 -0
- package/dist/keys/mnemonic.d.ts.map +1 -0
- package/dist/keys/mnemonic.js +23 -0
- package/dist/prover/prover.d.ts.map +1 -1
- package/dist/prover/prover.js +18 -18
- package/dist/prover/registry.d.ts +3 -30
- package/dist/prover/registry.d.ts.map +1 -1
- package/dist/prover/registry.js +12 -51
- package/dist/state/merkle/hydrator.d.ts.map +1 -1
- package/dist/state/merkle/hydrator.js +3 -2
- package/dist/state/merkle/merkle-tree.d.ts.map +1 -1
- package/dist/state/merkle/merkle-tree.js +7 -6
- package/dist/state/store/ciphertext-store.d.ts +4 -0
- package/dist/state/store/ciphertext-store.d.ts.map +1 -1
- package/dist/state/store/ciphertext-store.js +12 -0
- package/dist/state/store/job-store.d.ts.map +1 -1
- package/dist/state/store/job-store.js +51 -29
- package/dist/state/store/jobs.d.ts +33 -9
- package/dist/state/store/jobs.d.ts.map +1 -1
- package/dist/state/store/note-store.d.ts +6 -2
- package/dist/state/store/note-store.d.ts.map +1 -1
- package/dist/state/store/note-store.js +22 -4
- package/dist/state/store/nullifier-store.d.ts +9 -0
- package/dist/state/store/nullifier-store.d.ts.map +1 -1
- package/dist/state/store/nullifier-store.js +32 -0
- package/dist/state/store/records.d.ts +6 -0
- package/dist/state/store/records.d.ts.map +1 -1
- package/dist/state/store/store.d.ts +17 -1
- package/dist/state/store/store.d.ts.map +1 -1
- package/dist/state/store/store.js +89 -1
- package/dist/storage/indexeddb.js +1 -1
- package/dist/transactions/deposit.d.ts +6 -4
- package/dist/transactions/deposit.d.ts.map +1 -1
- package/dist/transactions/deposit.js +172 -81
- package/dist/transactions/index.d.ts +5 -4
- package/dist/transactions/index.d.ts.map +1 -1
- package/dist/transactions/index.js +4 -3
- package/dist/transactions/note-selection.d.ts +1 -1
- package/dist/transactions/note-selection.d.ts.map +1 -1
- package/dist/transactions/note-selection.js +14 -9
- package/dist/transactions/note-sync.d.ts +0 -5
- package/dist/transactions/note-sync.d.ts.map +1 -1
- package/dist/transactions/note-sync.js +308 -159
- package/dist/transactions/reconcile.d.ts +1 -1
- package/dist/transactions/reconcile.d.ts.map +1 -1
- package/dist/transactions/reconcile.js +9 -2
- package/dist/transactions/transact.d.ts +5 -2
- package/dist/transactions/transact.d.ts.map +1 -1
- package/dist/transactions/transact.js +194 -142
- package/dist/transactions/transaction-planner.d.ts +1 -1
- package/dist/transactions/transaction-planner.d.ts.map +1 -1
- package/dist/transactions/transaction-planner.js +9 -8
- package/dist/transactions/transfer-planner.d.ts +36 -0
- package/dist/transactions/transfer-planner.d.ts.map +1 -0
- package/dist/transactions/transfer-planner.js +85 -0
- package/dist/transactions/types/deposit.d.ts +29 -10
- package/dist/transactions/types/deposit.d.ts.map +1 -1
- package/dist/transactions/types/options.d.ts +4 -0
- package/dist/transactions/types/options.d.ts.map +1 -1
- package/dist/transactions/types/state-stores.d.ts +54 -2
- package/dist/transactions/types/state-stores.d.ts.map +1 -1
- package/dist/transactions/types/transact.d.ts +31 -16
- package/dist/transactions/types/transact.d.ts.map +1 -1
- package/dist/transactions/withdrawal-planner.d.ts +25 -28
- package/dist/transactions/withdrawal-planner.d.ts.map +1 -1
- package/dist/transactions/withdrawal-planner.js +76 -47
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsup.browser.config.d.ts +7 -0
- package/dist/tsup.browser.config.d.ts.map +1 -0
- package/dist/tsup.browser.config.js +34 -0
- package/dist/utils/amounts.d.ts +2 -2
- package/dist/utils/amounts.js +11 -11
- package/dist/utils/async.d.ts +9 -0
- package/dist/utils/async.d.ts.map +1 -1
- package/dist/utils/async.js +24 -0
- package/dist/utils/bigint.js +7 -7
- package/dist/utils/crypto.d.ts +9 -3
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +11 -5
- package/dist/utils/json-codec.js +1 -1
- package/dist/utils/polling.d.ts +5 -0
- package/dist/utils/polling.d.ts.map +1 -1
- package/dist/utils/polling.js +5 -0
- package/dist/utils/validators.d.ts +2 -2
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +14 -14
- package/dist/vitest.config.d.ts.map +1 -1
- package/dist/vitest.config.js +2 -7
- package/package.json +21 -9
- package/dist/key-derivation/bech32.d.ts +0 -22
- package/dist/key-derivation/bech32.d.ts.map +0 -1
- package/dist/key-derivation/bech32.js +0 -86
- package/dist/key-derivation/bip32.d.ts +0 -17
- package/dist/key-derivation/bip32.d.ts.map +0 -1
- package/dist/key-derivation/bip32.js +0 -41
- package/dist/key-derivation/bip39.d.ts +0 -22
- package/dist/key-derivation/bip39.d.ts.map +0 -1
- package/dist/key-derivation/bip39.js +0 -57
- package/dist/key-derivation/bytes.d.ts +0 -19
- package/dist/key-derivation/bytes.d.ts.map +0 -1
- package/dist/key-derivation/bytes.js +0 -92
- package/dist/key-derivation/hash.d.ts +0 -3
- package/dist/key-derivation/hash.d.ts.map +0 -1
- package/dist/key-derivation/hash.js +0 -10
- package/dist/key-derivation/index.d.ts +0 -7
- package/dist/key-derivation/index.d.ts.map +0 -1
- package/dist/key-derivation/index.js +0 -6
- package/dist/key-derivation/wallet-node.d.ts +0 -47
- package/dist/key-derivation/wallet-node.d.ts.map +0 -1
- package/dist/key-derivation/wallet-node.js +0 -110
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type SpendingKeyPair, type ViewingKeyPair } from "../
|
|
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":"
|
|
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"}
|
package/dist/account/account.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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
|
|
16
|
+
throw new ValidationError("accountIndex must be a non-negative integer");
|
|
16
17
|
}
|
|
17
|
-
const
|
|
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:
|
|
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
|
-
|
|
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
|
|
60
|
+
throw new ValidationError(`mnemonic entropy must be ${MNEMONIC_ENTROPY_BYTES} bytes`);
|
|
67
61
|
}
|
|
68
62
|
try {
|
|
69
|
-
const mnemonic = Mnemonic.fromEntropy(
|
|
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
|
|
84
|
+
throw new ValidationError("master seed encryptor must return Uint8Array");
|
|
91
85
|
}
|
|
92
|
-
await storage.put(MASTER_SEED_KEY,
|
|
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
|
|
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
|
|
118
|
+
throw new ValidationError("master mnemonic encryptor must return Uint8Array");
|
|
125
119
|
}
|
|
126
|
-
await storage.put(MASTER_MNEMONIC_KEY,
|
|
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
|
|
125
|
+
throw new ValidationError("master seed must be a Uint8Array");
|
|
134
126
|
}
|
|
135
127
|
if (seed.length !== MASTER_SEED_LENGTH) {
|
|
136
|
-
throw new
|
|
128
|
+
throw new ValidationError(`master seed must be ${MASTER_SEED_LENGTH} bytes`);
|
|
137
129
|
}
|
|
138
|
-
return
|
|
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
|
|
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
|
|
141
|
+
return Hex.toBytes(seedHex);
|
|
150
142
|
}
|