@runflame/wallet-wasm 0.0.1-rc.7 → 0.0.1-rc.8

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.
@@ -3,6 +3,13 @@
3
3
  /** Which network addresses are encoded for: `f1…` or `tf1…`. */
4
4
  export type Network = "mainnet" | "testnet";
5
5
 
6
+ /**
7
+ * What a `Wallet` was built from, and so what it can do: `spend` (seed or
8
+ * mnemonic) finds, opens and spends; `view` (view key) finds and opens;
9
+ * `receive` (receiving key) only finds.
10
+ */
11
+ export type WalletKind = "spend" | "view" | "receive";
12
+
6
13
  /** `m/35263'/network'/0'/branch/index`; branch 0 is receiving, 1 is change. */
7
14
  export interface KeyPath {
8
15
  branch: number;
@@ -107,6 +114,8 @@ export interface FlameError extends Error {
107
114
  kind:
108
115
  | "invalidMnemonic"
109
116
  | "invalidSeed"
117
+ | "invalidKey"
118
+ | "notPermitted"
110
119
  | "invalidAddress"
111
120
  | "invalidKeyPath"
112
121
  | "invalidBytes"
@@ -120,6 +129,10 @@ export interface FlameError extends Error {
120
129
  input?: number;
121
130
  /** For `note`: how it failed. */
122
131
  failure?: NoteFailure;
132
+ /** For `notPermitted`: the wallet that refused. */
133
+ wallet?: WalletKind;
134
+ /** For `notPermitted`: the least kind of wallet that could. */
135
+ needs?: WalletKind;
123
136
  }
124
137
 
125
138
 
@@ -127,7 +140,10 @@ export interface FlameError extends Error {
127
140
  /**
128
141
  * One account, `m/35263'/network'/0'`. Its keys live in this module's
129
142
  * memory until `free()` — or `using` — drops the handle, which zeroizes
130
- * them; nothing a caller receives is key material.
143
+ * them. Two calls hand key material to JavaScript, where nothing can wipe
144
+ * it, so keep what they return as secret as the wallet: `viewKey()` reads
145
+ * every amount and memo, and `receivingKey()` links every address.
146
+ * Neither can spend.
131
147
  */
132
148
  export class Wallet {
133
149
  private constructor();
@@ -146,11 +162,29 @@ export class Wallet {
146
162
  * seeing the seed.
147
163
  */
148
164
  static fromMnemonic(phrase: string, passphrase: string, network: Network, nextIndex: number): Wallet;
165
+ /**
166
+ * A receive wallet from its bech32f receiving key, as `receivingKey`
167
+ * gives it. It issues addresses and finds payments; `viewKey`,
168
+ * `openNote` and `buildTransfer` throw `notPermitted`. Only the key
169
+ * `receivingKey` exports will do, as with `fromViewKey`.
170
+ */
171
+ static fromReceivingKey(receivingKey: string, network: Network, nextIndex: number): Wallet;
149
172
  /**
150
173
  * The account below a 64-byte seed, with `nextIndex` receiving
151
174
  * addresses already issued; a new wallet passes 0.
152
175
  */
153
176
  static fromSeed(seed: Uint8Array, network: Network, nextIndex: number): Wallet;
177
+ /**
178
+ * A view wallet from its bech32f view key, as `viewKey` gives it.
179
+ * Everything works except `buildTransfer`, which throws
180
+ * `notPermitted`. Only the key `viewKey` exports will do: a key from
181
+ * another node is accepted and silently owns nothing.
182
+ */
183
+ static fromViewKey(viewKey: string, network: Network, nextIndex: number): Wallet;
184
+ /**
185
+ * What this wallet was built from: `spend`, `view` or `receive`.
186
+ */
187
+ kind(): WalletKind;
154
188
  network(): Network;
155
189
  /**
156
190
  * Issues the next receiving address and advances the counter.
@@ -174,8 +208,9 @@ export class Wallet {
174
208
  */
175
209
  receivingKey(): string;
176
210
  /**
177
- * The bech32f view key a watch-only wallet is given: it reads every
178
- * amount and memo but cannot spend, so store it as a secret.
211
+ * The bech32f view key a view wallet is built from: it reads every
212
+ * amount and memo but cannot spend, so store it as a secret. A
213
+ * receive wallet throws `notPermitted`.
179
214
  */
180
215
  viewKey(): string;
181
216
  }
@@ -224,7 +259,10 @@ export interface InitOutput {
224
259
  readonly wallet_address: (a: number, b: number, c: number) => void;
225
260
  readonly wallet_buildTransfer: (a: number, b: number, c: number) => void;
226
261
  readonly wallet_fromMnemonic: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
262
+ readonly wallet_fromReceivingKey: (a: number, b: number, c: number, d: number, e: number) => void;
227
263
  readonly wallet_fromSeed: (a: number, b: number, c: number, d: number, e: number) => void;
264
+ readonly wallet_fromViewKey: (a: number, b: number, c: number, d: number, e: number) => void;
265
+ readonly wallet_kind: (a: number) => number;
228
266
  readonly wallet_network: (a: number, b: number) => void;
229
267
  readonly wallet_nextAddress: (a: number, b: number) => void;
230
268
  readonly wallet_nextIndex: (a: number) => number;
@@ -279,6 +317,12 @@ export interface InitOutput {
279
317
  readonly uniffi_flamewallet_ffi_checksum_constructor_wallet_new: () => number;
280
318
  readonly uniffi_flamewallet_ffi_fn_constructor_wallet_from_mnemonic: (a: number, b: number, c: number, d: number, e: number) => bigint;
281
319
  readonly uniffi_flamewallet_ffi_checksum_constructor_wallet_from_mnemonic: () => number;
320
+ readonly uniffi_flamewallet_ffi_fn_constructor_wallet_from_view_key: (a: number, b: number, c: number, d: number) => bigint;
321
+ readonly uniffi_flamewallet_ffi_checksum_constructor_wallet_from_view_key: () => number;
322
+ readonly uniffi_flamewallet_ffi_fn_constructor_wallet_from_receiving_key: (a: number, b: number, c: number, d: number) => bigint;
323
+ readonly uniffi_flamewallet_ffi_checksum_constructor_wallet_from_receiving_key: () => number;
324
+ readonly uniffi_flamewallet_ffi_fn_method_wallet_kind: (a: number, b: bigint, c: number) => void;
325
+ readonly uniffi_flamewallet_ffi_checksum_method_wallet_kind: () => number;
282
326
  readonly uniffi_flamewallet_ffi_fn_method_wallet_network: (a: number, b: bigint, c: number) => void;
283
327
  readonly uniffi_flamewallet_ffi_checksum_method_wallet_network: () => number;
284
328
  readonly uniffi_flamewallet_ffi_fn_method_wallet_address: (a: number, b: bigint, c: number, d: number) => void;
@@ -3,7 +3,10 @@
3
3
  /**
4
4
  * One account, `m/35263'/network'/0'`. Its keys live in this module's
5
5
  * memory until `free()` — or `using` — drops the handle, which zeroizes
6
- * them; nothing a caller receives is key material.
6
+ * them. Two calls hand key material to JavaScript, where nothing can wipe
7
+ * it, so keep what they return as secret as the wallet: `viewKey()` reads
8
+ * every amount and memo, and `receivingKey()` links every address.
9
+ * Neither can spend.
7
10
  */
8
11
  export class Wallet {
9
12
  static __wrap(ptr) {
@@ -90,6 +93,33 @@ export class Wallet {
90
93
  wasm.__wbindgen_add_to_stack_pointer(16);
91
94
  }
92
95
  }
96
+ /**
97
+ * A receive wallet from its bech32f receiving key, as `receivingKey`
98
+ * gives it. It issues addresses and finds payments; `viewKey`,
99
+ * `openNote` and `buildTransfer` throw `notPermitted`. Only the key
100
+ * `receivingKey` exports will do, as with `fromViewKey`.
101
+ * @param {string} receivingKey
102
+ * @param {Network} network
103
+ * @param {number} nextIndex
104
+ * @returns {Wallet}
105
+ */
106
+ static fromReceivingKey(receivingKey, network, nextIndex) {
107
+ try {
108
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
109
+ const ptr0 = passStringToWasm0(receivingKey, wasm.__wbindgen_export, wasm.__wbindgen_export2);
110
+ const len0 = WASM_VECTOR_LEN;
111
+ wasm.wallet_fromReceivingKey(retptr, ptr0, len0, addHeapObject(network), nextIndex);
112
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
113
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
114
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
115
+ if (r2) {
116
+ throw takeObject(r1);
117
+ }
118
+ return Wallet.__wrap(r0);
119
+ } finally {
120
+ wasm.__wbindgen_add_to_stack_pointer(16);
121
+ }
122
+ }
93
123
  /**
94
124
  * The account below a 64-byte seed, with `nextIndex` receiving
95
125
  * addresses already issued; a new wallet passes 0.
@@ -115,6 +145,41 @@ export class Wallet {
115
145
  wasm.__wbindgen_add_to_stack_pointer(16);
116
146
  }
117
147
  }
148
+ /**
149
+ * A view wallet from its bech32f view key, as `viewKey` gives it.
150
+ * Everything works except `buildTransfer`, which throws
151
+ * `notPermitted`. Only the key `viewKey` exports will do: a key from
152
+ * another node is accepted and silently owns nothing.
153
+ * @param {string} viewKey
154
+ * @param {Network} network
155
+ * @param {number} nextIndex
156
+ * @returns {Wallet}
157
+ */
158
+ static fromViewKey(viewKey, network, nextIndex) {
159
+ try {
160
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
161
+ const ptr0 = passStringToWasm0(viewKey, wasm.__wbindgen_export, wasm.__wbindgen_export2);
162
+ const len0 = WASM_VECTOR_LEN;
163
+ wasm.wallet_fromViewKey(retptr, ptr0, len0, addHeapObject(network), nextIndex);
164
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
165
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
166
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
167
+ if (r2) {
168
+ throw takeObject(r1);
169
+ }
170
+ return Wallet.__wrap(r0);
171
+ } finally {
172
+ wasm.__wbindgen_add_to_stack_pointer(16);
173
+ }
174
+ }
175
+ /**
176
+ * What this wallet was built from: `spend`, `view` or `receive`.
177
+ * @returns {WalletKind}
178
+ */
179
+ kind() {
180
+ const ret = wasm.wallet_kind(this.__wbg_ptr);
181
+ return takeObject(ret);
182
+ }
118
183
  /**
119
184
  * @returns {Network}
120
185
  */
@@ -231,24 +296,33 @@ export class Wallet {
231
296
  }
232
297
  }
233
298
  /**
234
- * The bech32f view key a watch-only wallet is given: it reads every
235
- * amount and memo but cannot spend, so store it as a secret.
299
+ * The bech32f view key a view wallet is built from: it reads every
300
+ * amount and memo but cannot spend, so store it as a secret. A
301
+ * receive wallet throws `notPermitted`.
236
302
  * @returns {string}
237
303
  */
238
304
  viewKey() {
239
- let deferred1_0;
240
- let deferred1_1;
305
+ let deferred2_0;
306
+ let deferred2_1;
241
307
  try {
242
308
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
243
309
  wasm.wallet_viewKey(retptr, this.__wbg_ptr);
244
310
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
245
311
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
246
- deferred1_0 = r0;
247
- deferred1_1 = r1;
248
- return getStringFromWasm0(r0, r1);
312
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
313
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
314
+ var ptr1 = r0;
315
+ var len1 = r1;
316
+ if (r3) {
317
+ ptr1 = 0; len1 = 0;
318
+ throw takeObject(r2);
319
+ }
320
+ deferred2_0 = ptr1;
321
+ deferred2_1 = len1;
322
+ return getStringFromWasm0(ptr1, len1);
249
323
  } finally {
250
324
  wasm.__wbindgen_add_to_stack_pointer(16);
251
- wasm.__wbindgen_export4(deferred1_0, deferred1_1, 1);
325
+ wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);
252
326
  }
253
327
  }
254
328
  }
Binary file
@@ -11,7 +11,10 @@ export const validateMnemonic: (a: number, b: number) => number;
11
11
  export const wallet_address: (a: number, b: number, c: number) => void;
12
12
  export const wallet_buildTransfer: (a: number, b: number, c: number) => void;
13
13
  export const wallet_fromMnemonic: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
14
+ export const wallet_fromReceivingKey: (a: number, b: number, c: number, d: number, e: number) => void;
14
15
  export const wallet_fromSeed: (a: number, b: number, c: number, d: number, e: number) => void;
16
+ export const wallet_fromViewKey: (a: number, b: number, c: number, d: number, e: number) => void;
17
+ export const wallet_kind: (a: number) => number;
15
18
  export const wallet_network: (a: number, b: number) => void;
16
19
  export const wallet_nextAddress: (a: number, b: number) => void;
17
20
  export const wallet_nextIndex: (a: number) => number;
@@ -66,6 +69,12 @@ export const uniffi_flamewallet_ffi_fn_constructor_wallet_new: (a: number, b: nu
66
69
  export const uniffi_flamewallet_ffi_checksum_constructor_wallet_new: () => number;
67
70
  export const uniffi_flamewallet_ffi_fn_constructor_wallet_from_mnemonic: (a: number, b: number, c: number, d: number, e: number) => bigint;
68
71
  export const uniffi_flamewallet_ffi_checksum_constructor_wallet_from_mnemonic: () => number;
72
+ export const uniffi_flamewallet_ffi_fn_constructor_wallet_from_view_key: (a: number, b: number, c: number, d: number) => bigint;
73
+ export const uniffi_flamewallet_ffi_checksum_constructor_wallet_from_view_key: () => number;
74
+ export const uniffi_flamewallet_ffi_fn_constructor_wallet_from_receiving_key: (a: number, b: number, c: number, d: number) => bigint;
75
+ export const uniffi_flamewallet_ffi_checksum_constructor_wallet_from_receiving_key: () => number;
76
+ export const uniffi_flamewallet_ffi_fn_method_wallet_kind: (a: number, b: bigint, c: number) => void;
77
+ export const uniffi_flamewallet_ffi_checksum_method_wallet_kind: () => number;
69
78
  export const uniffi_flamewallet_ffi_fn_method_wallet_network: (a: number, b: bigint, c: number) => void;
70
79
  export const uniffi_flamewallet_ffi_checksum_method_wallet_network: () => number;
71
80
  export const uniffi_flamewallet_ffi_fn_method_wallet_address: (a: number, b: bigint, c: number, d: number) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runflame/wallet-wasm",
3
- "version": "0.0.1-rc.7",
3
+ "version": "0.0.1-rc.8",
4
4
  "description": "Flame wallet keys and confidential transfers, compiled to WebAssembly",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
package/sbom.cdx.json CHANGED
@@ -2,9 +2,9 @@
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.3",
4
4
  "version": 1,
5
- "serialNumber": "urn:uuid:f6c82bfb-9c6a-450a-bee9-dda4f09491a9",
5
+ "serialNumber": "urn:uuid:d458b8c6-abb2-4b2b-ac9d-4da15edf4cef",
6
6
  "metadata": {
7
- "timestamp": "2026-10-07T17:11:15.624378000Z",
7
+ "timestamp": "2026-10-08T12:25:09.625584000Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "CycloneDX",