@shielded-x402/client 0.2.1 → 0.2.3

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 (66) hide show
  1. package/dist/circuits/spend_change.json +156 -156
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/walletState.d.ts +56 -0
  7. package/dist/walletState.d.ts.map +1 -0
  8. package/dist/walletState.js +274 -0
  9. package/dist/walletState.js.map +1 -0
  10. package/package.json +3 -3
  11. package/dist/packages/shared-types/src/crypto-spec.d.ts +0 -16
  12. package/dist/packages/shared-types/src/crypto-spec.d.ts.map +0 -1
  13. package/dist/packages/shared-types/src/crypto-spec.js +0 -15
  14. package/dist/packages/shared-types/src/crypto-spec.js.map +0 -1
  15. package/dist/packages/shared-types/src/index.d.ts +0 -4
  16. package/dist/packages/shared-types/src/index.d.ts.map +0 -1
  17. package/dist/packages/shared-types/src/index.js +0 -4
  18. package/dist/packages/shared-types/src/index.js.map +0 -1
  19. package/dist/packages/shared-types/src/types.d.ts +0 -115
  20. package/dist/packages/shared-types/src/types.d.ts.map +0 -1
  21. package/dist/packages/shared-types/src/types.js +0 -2
  22. package/dist/packages/shared-types/src/types.js.map +0 -1
  23. package/dist/packages/shared-types/src/x402.d.ts +0 -20
  24. package/dist/packages/shared-types/src/x402.d.ts.map +0 -1
  25. package/dist/packages/shared-types/src/x402.js +0 -96
  26. package/dist/packages/shared-types/src/x402.js.map +0 -1
  27. package/dist/sdk/client/src/client.d.ts +0 -26
  28. package/dist/sdk/client/src/client.d.ts.map +0 -1
  29. package/dist/sdk/client/src/client.js +0 -174
  30. package/dist/sdk/client/src/client.js.map +0 -1
  31. package/dist/sdk/client/src/crypto.d.ts +0 -5
  32. package/dist/sdk/client/src/crypto.d.ts.map +0 -1
  33. package/dist/sdk/client/src/crypto.js +0 -15
  34. package/dist/sdk/client/src/crypto.js.map +0 -1
  35. package/dist/sdk/client/src/index.d.ts +0 -10
  36. package/dist/sdk/client/src/index.d.ts.map +0 -1
  37. package/dist/sdk/client/src/index.js +0 -10
  38. package/dist/sdk/client/src/index.js.map +0 -1
  39. package/dist/sdk/client/src/indexer.d.ts +0 -22
  40. package/dist/sdk/client/src/indexer.d.ts.map +0 -1
  41. package/dist/sdk/client/src/indexer.js +0 -20
  42. package/dist/sdk/client/src/indexer.js.map +0 -1
  43. package/dist/sdk/client/src/merkle.d.ts +0 -11
  44. package/dist/sdk/client/src/merkle.d.ts.map +0 -1
  45. package/dist/sdk/client/src/merkle.js +0 -63
  46. package/dist/sdk/client/src/merkle.js.map +0 -1
  47. package/dist/sdk/client/src/notes.d.ts +0 -19
  48. package/dist/sdk/client/src/notes.d.ts.map +0 -1
  49. package/dist/sdk/client/src/notes.js +0 -105
  50. package/dist/sdk/client/src/notes.js.map +0 -1
  51. package/dist/sdk/client/src/proofProvider.d.ts +0 -33
  52. package/dist/sdk/client/src/proofProvider.d.ts.map +0 -1
  53. package/dist/sdk/client/src/proofProvider.js +0 -207
  54. package/dist/sdk/client/src/proofProvider.js.map +0 -1
  55. package/dist/sdk/client/src/relayerFetch.d.ts +0 -36
  56. package/dist/sdk/client/src/relayerFetch.d.ts.map +0 -1
  57. package/dist/sdk/client/src/relayerFetch.js +0 -195
  58. package/dist/sdk/client/src/relayerFetch.js.map +0 -1
  59. package/dist/sdk/client/src/shieldedFetch.d.ts +0 -39
  60. package/dist/sdk/client/src/shieldedFetch.d.ts.map +0 -1
  61. package/dist/sdk/client/src/shieldedFetch.js +0 -88
  62. package/dist/sdk/client/src/shieldedFetch.js.map +0 -1
  63. package/dist/sdk/client/src/types.d.ts +0 -57
  64. package/dist/sdk/client/src/types.d.ts.map +0 -1
  65. package/dist/sdk/client/src/types.js +0 -2
  66. package/dist/sdk/client/src/types.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -7,4 +7,5 @@ export * from './proofProvider.js';
7
7
  export * from './relayerFetch.js';
8
8
  export * from './shieldedFetch.js';
9
9
  export * from './types.js';
10
+ export * from './walletState.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -7,4 +7,5 @@ export * from './proofProvider.js';
7
7
  export * from './relayerFetch.js';
8
8
  export * from './shieldedFetch.js';
9
9
  export * from './types.js';
10
+ export * from './walletState.js';
10
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type { Hex, ShieldedNote } from '@shielded-x402/shared-types';
2
+ import type { MerkleWitness } from './merkle.js';
3
+ export interface WalletNoteRecord extends ShieldedNote {
4
+ depositBlock?: bigint;
5
+ }
6
+ export interface WalletStateSnapshot {
7
+ poolAddress: Hex;
8
+ lastSyncedBlock: bigint;
9
+ commitments: Hex[];
10
+ notes: WalletNoteRecord[];
11
+ }
12
+ export interface ShieldedSpendContext {
13
+ note: ShieldedNote;
14
+ witness: MerkleWitness;
15
+ payerPkHash: Hex;
16
+ }
17
+ export interface WalletSyncResult {
18
+ fromBlock: bigint;
19
+ toBlock: bigint;
20
+ depositsApplied: number;
21
+ spendsApplied: number;
22
+ }
23
+ export interface FileBackedWalletStateConfig {
24
+ filePath: string;
25
+ rpcUrl: string;
26
+ shieldedPoolAddress: Hex;
27
+ startBlock?: bigint;
28
+ confirmations?: bigint;
29
+ chunkSize?: bigint;
30
+ }
31
+ export declare class FileBackedWalletState {
32
+ private readonly filePath;
33
+ private readonly rpcUrl;
34
+ private readonly shieldedPoolAddress;
35
+ private readonly confirmations;
36
+ private readonly chunkSize;
37
+ private readonly startBlock;
38
+ private state;
39
+ private constructor();
40
+ static create(config: FileBackedWalletStateConfig): Promise<FileBackedWalletState>;
41
+ load(): Promise<void>;
42
+ persist(): Promise<void>;
43
+ snapshot(): WalletStateSnapshot;
44
+ getNotes(): WalletNoteRecord[];
45
+ addOrUpdateNote(note: ShieldedNote, depositBlock?: bigint): Promise<void>;
46
+ recordSpendOutputs(params: {
47
+ merchantCommitment: Hex;
48
+ changeCommitment: Hex;
49
+ merchantLeafIndex?: number;
50
+ changeLeafIndex?: number;
51
+ }): Promise<void>;
52
+ sync(): Promise<WalletSyncResult>;
53
+ getSpendContextByCommitment(commitment: Hex, payerPkHash: Hex): ShieldedSpendContext;
54
+ private findLeafIndex;
55
+ }
56
+ //# sourceMappingURL=walletState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletState.d.ts","sourceRoot":"","sources":["../src/walletState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA8BjD,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,GAAG,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,GAAG,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoDD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,KAAK,CAAsB;IAEnC,OAAO;WAcM,MAAM,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAMlF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,QAAQ,IAAI,mBAAmB;IAS/B,QAAQ,IAAI,gBAAgB,EAAE;IAIxB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzE,kBAAkB,CAAC,MAAM,EAAE;QAC/B,kBAAkB,EAAE,GAAG,CAAC;QACxB,gBAAgB,EAAE,GAAG,CAAC;QACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,IAAI,CAAC;IAUX,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAyHvC,2BAA2B,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,oBAAoB;IA6BpF,OAAO,CAAC,aAAa;CAStB"}
@@ -0,0 +1,274 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ import { createPublicClient, http, parseAbiItem } from 'viem';
4
+ import { deriveWitness } from './merkle.js';
5
+ const ZERO_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000000';
6
+ const depositedEvent = parseAbiItem('event Deposited(bytes32 indexed commitment, uint256 indexed leafIndex, bytes32 indexed root, uint256 amount)');
7
+ const spentEvent = parseAbiItem('event Spent(bytes32 indexed nullifier, bytes32 indexed merchantCommitment, bytes32 indexed changeCommitment, uint256 amount, bytes32 challengeHash, uint256 merchantLeafIndex, uint256 changeLeafIndex, bytes32 newRoot)');
8
+ function normalizeHex(value) {
9
+ return value.toLowerCase();
10
+ }
11
+ function serialize(state, poolAddress) {
12
+ return {
13
+ version: 1,
14
+ poolAddress,
15
+ lastSyncedBlock: state.lastSyncedBlock.toString(),
16
+ commitments: state.commitments,
17
+ notes: state.notes.map((note) => ({
18
+ amount: note.amount.toString(),
19
+ rho: note.rho,
20
+ pkHash: note.pkHash,
21
+ commitment: note.commitment,
22
+ leafIndex: note.leafIndex,
23
+ ...(note.depositBlock !== undefined ? { depositBlock: note.depositBlock.toString() } : {})
24
+ }))
25
+ };
26
+ }
27
+ function deserialize(payload) {
28
+ return {
29
+ lastSyncedBlock: BigInt(payload.lastSyncedBlock),
30
+ commitments: payload.commitments,
31
+ notes: payload.notes.map((note) => ({
32
+ amount: BigInt(note.amount),
33
+ rho: note.rho,
34
+ pkHash: note.pkHash,
35
+ commitment: note.commitment,
36
+ leafIndex: note.leafIndex,
37
+ ...(note.depositBlock !== undefined ? { depositBlock: BigInt(note.depositBlock) } : {})
38
+ }))
39
+ };
40
+ }
41
+ export class FileBackedWalletState {
42
+ filePath;
43
+ rpcUrl;
44
+ shieldedPoolAddress;
45
+ confirmations;
46
+ chunkSize;
47
+ startBlock;
48
+ state;
49
+ constructor(config) {
50
+ this.filePath = config.filePath;
51
+ this.rpcUrl = config.rpcUrl;
52
+ this.shieldedPoolAddress = config.shieldedPoolAddress;
53
+ this.confirmations = config.confirmations ?? 2n;
54
+ this.chunkSize = config.chunkSize ?? 2000n;
55
+ this.startBlock = config.startBlock ?? 0n;
56
+ this.state = {
57
+ lastSyncedBlock: this.startBlock - 1n,
58
+ commitments: [],
59
+ notes: []
60
+ };
61
+ }
62
+ static async create(config) {
63
+ const instance = new FileBackedWalletState(config);
64
+ await instance.load();
65
+ return instance;
66
+ }
67
+ async load() {
68
+ try {
69
+ const raw = await readFile(this.filePath, 'utf8');
70
+ const parsed = JSON.parse(raw);
71
+ if (parsed.version !== 1) {
72
+ throw new Error(`unsupported wallet state version: ${String(parsed.version)}`);
73
+ }
74
+ if (normalizeHex(parsed.poolAddress) !== normalizeHex(this.shieldedPoolAddress)) {
75
+ throw new Error(`wallet state pool mismatch: expected ${this.shieldedPoolAddress}, found ${parsed.poolAddress}`);
76
+ }
77
+ this.state = deserialize(parsed);
78
+ }
79
+ catch (error) {
80
+ const message = error instanceof Error ? error.message : String(error);
81
+ if (message.includes('ENOENT')) {
82
+ await this.persist();
83
+ return;
84
+ }
85
+ throw error;
86
+ }
87
+ }
88
+ async persist() {
89
+ await mkdir(dirname(this.filePath), { recursive: true });
90
+ const payload = serialize(this.state, this.shieldedPoolAddress);
91
+ await writeFile(this.filePath, JSON.stringify(payload, null, 2));
92
+ }
93
+ snapshot() {
94
+ return {
95
+ poolAddress: this.shieldedPoolAddress,
96
+ lastSyncedBlock: this.state.lastSyncedBlock,
97
+ commitments: [...this.state.commitments],
98
+ notes: this.state.notes.map((note) => ({ ...note }))
99
+ };
100
+ }
101
+ getNotes() {
102
+ return this.state.notes.map((note) => ({ ...note }));
103
+ }
104
+ async addOrUpdateNote(note, depositBlock) {
105
+ const normalizedCommitment = normalizeHex(note.commitment);
106
+ const existingIndex = this.state.notes.findIndex((candidate) => normalizeHex(candidate.commitment) === normalizedCommitment);
107
+ const record = {
108
+ ...note,
109
+ ...(depositBlock !== undefined ? { depositBlock } : {})
110
+ };
111
+ if (existingIndex >= 0) {
112
+ this.state.notes[existingIndex] = record;
113
+ }
114
+ else {
115
+ this.state.notes.push(record);
116
+ }
117
+ if (record.leafIndex >= 0) {
118
+ this.state.commitments[record.leafIndex] = record.commitment;
119
+ }
120
+ await this.persist();
121
+ }
122
+ async recordSpendOutputs(params) {
123
+ if (params.merchantLeafIndex !== undefined && params.changeLeafIndex !== undefined) {
124
+ this.state.commitments[params.merchantLeafIndex] = params.merchantCommitment;
125
+ this.state.commitments[params.changeLeafIndex] = params.changeCommitment;
126
+ }
127
+ else {
128
+ this.state.commitments.push(params.merchantCommitment, params.changeCommitment);
129
+ }
130
+ await this.persist();
131
+ }
132
+ async sync() {
133
+ const client = createPublicClient({
134
+ transport: http(this.rpcUrl)
135
+ });
136
+ const latest = await client.getBlockNumber();
137
+ const target = latest > this.confirmations ? latest - this.confirmations : 0n;
138
+ const fromCandidate = this.state.lastSyncedBlock + 1n;
139
+ const fromBlock = fromCandidate < this.startBlock ? this.startBlock : fromCandidate;
140
+ if (fromBlock > target) {
141
+ return {
142
+ fromBlock,
143
+ toBlock: target,
144
+ depositsApplied: 0,
145
+ spendsApplied: 0
146
+ };
147
+ }
148
+ let cursor = fromBlock;
149
+ let depositsApplied = 0;
150
+ let spendsApplied = 0;
151
+ while (cursor <= target) {
152
+ const toBlock = cursor + this.chunkSize - 1n > target ? target : cursor + this.chunkSize - 1n;
153
+ const [depositLogs, spendLogs] = await Promise.all([
154
+ client.getLogs({
155
+ address: this.shieldedPoolAddress,
156
+ event: depositedEvent,
157
+ fromBlock: cursor,
158
+ toBlock
159
+ }),
160
+ client.getLogs({
161
+ address: this.shieldedPoolAddress,
162
+ event: spentEvent,
163
+ fromBlock: cursor,
164
+ toBlock
165
+ })
166
+ ]);
167
+ const writes = [];
168
+ for (const log of depositLogs) {
169
+ const args = log.args;
170
+ if (args.commitment === undefined || args.leafIndex === undefined)
171
+ continue;
172
+ writes.push({
173
+ blockNumber: log.blockNumber ?? 0n,
174
+ logIndex: log.logIndex ?? 0,
175
+ order: 0,
176
+ leafIndex: Number(args.leafIndex),
177
+ commitment: args.commitment
178
+ });
179
+ depositsApplied += 1;
180
+ }
181
+ for (const log of spendLogs) {
182
+ const args = log.args;
183
+ if (args.merchantCommitment === undefined ||
184
+ args.changeCommitment === undefined ||
185
+ args.merchantLeafIndex === undefined ||
186
+ args.changeLeafIndex === undefined) {
187
+ continue;
188
+ }
189
+ writes.push({
190
+ blockNumber: log.blockNumber ?? 0n,
191
+ logIndex: log.logIndex ?? 0,
192
+ order: 0,
193
+ leafIndex: Number(args.merchantLeafIndex),
194
+ commitment: args.merchantCommitment
195
+ });
196
+ writes.push({
197
+ blockNumber: log.blockNumber ?? 0n,
198
+ logIndex: log.logIndex ?? 0,
199
+ order: 1,
200
+ leafIndex: Number(args.changeLeafIndex),
201
+ commitment: args.changeCommitment
202
+ });
203
+ spendsApplied += 1;
204
+ }
205
+ writes.sort((a, b) => {
206
+ if (a.blockNumber !== b.blockNumber)
207
+ return a.blockNumber < b.blockNumber ? -1 : 1;
208
+ if (a.logIndex !== b.logIndex)
209
+ return a.logIndex < b.logIndex ? -1 : 1;
210
+ return a.order - b.order;
211
+ });
212
+ for (const write of writes) {
213
+ if (write.leafIndex < 0)
214
+ continue;
215
+ this.state.commitments[write.leafIndex] = write.commitment;
216
+ const normalized = normalizeHex(write.commitment);
217
+ for (let i = 0; i < this.state.notes.length; i += 1) {
218
+ const note = this.state.notes[i];
219
+ if (!note)
220
+ continue;
221
+ if (normalizeHex(note.commitment) !== normalized)
222
+ continue;
223
+ note.leafIndex = write.leafIndex;
224
+ if (note.depositBlock === undefined) {
225
+ note.depositBlock = write.blockNumber;
226
+ }
227
+ }
228
+ }
229
+ this.state.lastSyncedBlock = toBlock;
230
+ await this.persist();
231
+ cursor = toBlock + 1n;
232
+ }
233
+ return {
234
+ fromBlock,
235
+ toBlock: this.state.lastSyncedBlock,
236
+ depositsApplied,
237
+ spendsApplied
238
+ };
239
+ }
240
+ getSpendContextByCommitment(commitment, payerPkHash) {
241
+ const normalized = normalizeHex(commitment);
242
+ const note = this.state.notes.find((candidate) => normalizeHex(candidate.commitment) === normalized);
243
+ if (!note) {
244
+ throw new Error(`note not found in wallet state for commitment ${commitment}; add note secrets first with addOrUpdateNote()`);
245
+ }
246
+ const leafIndex = note.leafIndex >= 0 ? note.leafIndex : this.findLeafIndex(commitment);
247
+ if (leafIndex < 0) {
248
+ throw new Error(`leaf index unknown for note ${commitment}; run sync() or set NOTE_LEAF_INDEX before proving`);
249
+ }
250
+ const commitments = [...this.state.commitments];
251
+ for (let i = 0; i < commitments.length; i += 1) {
252
+ if (!commitments[i])
253
+ commitments[i] = ZERO_BYTES32;
254
+ }
255
+ const witness = deriveWitness(commitments, leafIndex);
256
+ return {
257
+ note: { ...note, leafIndex },
258
+ witness,
259
+ payerPkHash
260
+ };
261
+ }
262
+ findLeafIndex(commitment) {
263
+ const normalized = normalizeHex(commitment);
264
+ for (let i = this.state.commitments.length - 1; i >= 0; i -= 1) {
265
+ const candidate = this.state.commitments[i];
266
+ if (!candidate)
267
+ continue;
268
+ if (normalizeHex(candidate) === normalized)
269
+ return i;
270
+ }
271
+ return -1;
272
+ }
273
+ }
274
+ //# sourceMappingURL=walletState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletState.js","sourceRoot":"","sources":["../src/walletState.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shielded-x402/client",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  "access": "public"
18
18
  },
19
19
  "dependencies": {
20
- "@shielded-x402/shared-types": "^0.2.1",
20
+ "@shielded-x402/shared-types": "^0.2.2",
21
21
  "viem": "^2.39.3"
22
22
  },
23
23
  "peerDependencies": {
@@ -33,7 +33,7 @@
33
33
  }
34
34
  },
35
35
  "scripts": {
36
- "build": "tsc -p tsconfig.json",
36
+ "build": "bash scripts/build.sh",
37
37
  "pretest": "pnpm --filter @shielded-x402/shared-types build && pnpm run build",
38
38
  "typecheck": "tsc -p tsconfig.json --noEmit",
39
39
  "test": "vitest run",
@@ -1,16 +0,0 @@
1
- export declare const CRYPTO_SPEC: {
2
- readonly version: "v0.1.0";
3
- readonly hashFunction: "keccak256";
4
- readonly merkleTreeDepth: 24;
5
- readonly noteEncoding: "abi-packed-v1";
6
- readonly nullifierDerivation: "keccak256(nullifierSecret, noteCommitment)";
7
- readonly merchantCommitmentDerivation: "keccak256(payAmount, merchantRho, merchantPkHash)";
8
- readonly changeCommitmentDerivation: "keccak256(changeAmount, changeRho, changePkHash)";
9
- readonly challengeDomainSeparator: "shielded-x402:v1:challenge";
10
- readonly challengeDomainHash: "0xe32e24a51c351093d339c0035177dc2da5c1b8b9563e414393edd75506dcc055";
11
- readonly commitmentDomainSeparator: "shielded-x402:v1:commitment";
12
- readonly outputDomainSeparator: "shielded-x402:v1:output";
13
- readonly nullifierDomainSeparator: "shielded-x402:v1:nullifier";
14
- };
15
- export type CryptoSpec = typeof CRYPTO_SPEC;
16
- //# sourceMappingURL=crypto-spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto-spec.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared-types/src/crypto-spec.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAad,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC"}
@@ -1,15 +0,0 @@
1
- export const CRYPTO_SPEC = {
2
- version: 'v0.1.0',
3
- hashFunction: 'keccak256',
4
- merkleTreeDepth: 24,
5
- noteEncoding: 'abi-packed-v1',
6
- nullifierDerivation: 'keccak256(nullifierSecret, noteCommitment)',
7
- merchantCommitmentDerivation: 'keccak256(payAmount, merchantRho, merchantPkHash)',
8
- changeCommitmentDerivation: 'keccak256(changeAmount, changeRho, changePkHash)',
9
- challengeDomainSeparator: 'shielded-x402:v1:challenge',
10
- challengeDomainHash: '0xe32e24a51c351093d339c0035177dc2da5c1b8b9563e414393edd75506dcc055',
11
- commitmentDomainSeparator: 'shielded-x402:v1:commitment',
12
- outputDomainSeparator: 'shielded-x402:v1:output',
13
- nullifierDomainSeparator: 'shielded-x402:v1:nullifier'
14
- };
15
- //# sourceMappingURL=crypto-spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto-spec.js","sourceRoot":"","sources":["../../../../../../packages/shared-types/src/crypto-spec.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,QAAQ;IACjB,YAAY,EAAE,WAAW;IACzB,eAAe,EAAE,EAAE;IACnB,YAAY,EAAE,eAAe;IAC7B,mBAAmB,EAAE,4CAA4C;IACjE,4BAA4B,EAAE,mDAAmD;IACjF,0BAA0B,EAAE,kDAAkD;IAC9E,wBAAwB,EAAE,4BAA4B;IACtD,mBAAmB,EAAE,oEAAoE;IACzF,yBAAyB,EAAE,6BAA6B;IACxD,qBAAqB,EAAE,yBAAyB;IAChD,wBAAwB,EAAE,4BAA4B;CAC9C,CAAC"}
@@ -1,4 +0,0 @@
1
- export * from './crypto-spec.js';
2
- export * from './types.js';
3
- export * from './x402.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared-types/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -1,4 +0,0 @@
1
- export * from './crypto-spec.js';
2
- export * from './types.js';
3
- export * from './x402.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/shared-types/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -1,115 +0,0 @@
1
- export type Hex = `0x${string}`;
2
- export interface ShieldedNote {
3
- amount: bigint;
4
- rho: Hex;
5
- pkHash: Hex;
6
- commitment: Hex;
7
- leafIndex: number;
8
- }
9
- export interface SpendPublicInputs {
10
- nullifier: Hex;
11
- root: Hex;
12
- merchantCommitment: Hex;
13
- changeCommitment: Hex;
14
- challengeHash: Hex;
15
- amount: bigint;
16
- }
17
- export interface ShieldedPaymentResponse {
18
- proof: Hex;
19
- publicInputs: Hex[];
20
- nullifier: Hex;
21
- root: Hex;
22
- merchantCommitment: Hex;
23
- changeCommitment: Hex;
24
- challengeHash: Hex;
25
- encryptedReceipt: Hex;
26
- txHint?: string;
27
- }
28
- export interface PaymentRequirement {
29
- x402Version?: 2;
30
- scheme: 'exact' | string;
31
- network: string;
32
- asset: Hex | string;
33
- payTo: Hex;
34
- rail: 'shielded-usdc' | string;
35
- amount: string;
36
- challengeNonce: string;
37
- challengeExpiry: string;
38
- merchantPubKey: Hex;
39
- verifyingContract: Hex;
40
- maxTimeoutSeconds?: number;
41
- description?: string;
42
- mimeType?: string;
43
- outputSchema?: string;
44
- extra?: Record<string, string> & {
45
- rail: 'shielded-usdc' | string;
46
- challengeNonce: string;
47
- challengeExpiry: string;
48
- merchantPubKey: Hex;
49
- verifyingContract: Hex;
50
- };
51
- }
52
- export interface X402PaymentRequired {
53
- x402Version: 2;
54
- accepts: Array<Record<string, unknown>>;
55
- error?: string;
56
- }
57
- export interface X402PaymentSignaturePayload {
58
- x402Version: 2;
59
- accepted: PaymentRequirement;
60
- payload: ShieldedPaymentResponse;
61
- challengeNonce: Hex;
62
- signature: Hex;
63
- }
64
- export interface AgentRecord {
65
- did: string;
66
- endpoint: string;
67
- encryptionPubKey: Hex;
68
- capabilities: string[];
69
- supportedRails: string[];
70
- signature: Hex;
71
- }
72
- export interface ReputationSignal {
73
- successfulSettlements: number;
74
- disputes: number;
75
- uptime: number;
76
- attestationRefs: string[];
77
- }
78
- export interface RelayerMerchantRequest {
79
- url: string;
80
- method: string;
81
- headers?: Record<string, string>;
82
- bodyBase64?: string;
83
- challengeUrl?: string;
84
- }
85
- export interface RelayerPayRequest {
86
- merchantRequest: RelayerMerchantRequest;
87
- requirement: PaymentRequirement;
88
- paymentSignatureHeader: string;
89
- idempotencyKey?: string;
90
- }
91
- export interface RelayerChallengeRequest {
92
- merchantRequest: RelayerMerchantRequest;
93
- merchantPaymentRequiredHeader?: string;
94
- }
95
- export interface RelayerChallengeResponse {
96
- requirement: PaymentRequirement;
97
- paymentRequiredHeader: string;
98
- upstreamRequirementHash: Hex;
99
- }
100
- export type RelayerSettlementStatus = 'RECEIVED' | 'VERIFIED' | 'SENT_ONCHAIN' | 'CONFIRMED' | 'PAID_MERCHANT' | 'DONE' | 'FAILED';
101
- export interface RelayerMerchantResult {
102
- status: number;
103
- headers: Record<string, string>;
104
- bodyBase64: string;
105
- payoutReference?: string;
106
- }
107
- export interface RelayerPayResponse {
108
- settlementId: string;
109
- status: RelayerSettlementStatus;
110
- nullifier: Hex;
111
- settlementTxHash?: Hex;
112
- merchantResult?: RelayerMerchantResult;
113
- failureReason?: string;
114
- }
115
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared-types/src/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/shared-types/src/types.ts"],"names":[],"mappings":""}
@@ -1,20 +0,0 @@
1
- import type { PaymentRequirement, X402PaymentRequired, X402PaymentSignaturePayload } from './types.js';
2
- export declare const X402_HEADERS: {
3
- readonly paymentRequired: "PAYMENT-REQUIRED";
4
- readonly paymentSignature: "PAYMENT-SIGNATURE";
5
- readonly paymentResponse: "PAYMENT-RESPONSE";
6
- };
7
- export declare const RELAYER_ROUTES: {
8
- readonly challenge: "/v1/relay/challenge";
9
- readonly pay: "/v1/relay/pay";
10
- readonly statusPrefix: "/v1/relay/status";
11
- };
12
- export declare function encodeX402Header<T>(value: T): string;
13
- export declare function decodeX402Header<T>(rawHeader: string): T;
14
- export declare function buildPaymentRequiredHeader(requirement: PaymentRequirement): string;
15
- export declare function parsePaymentRequiredHeader(rawHeader: string): PaymentRequirement;
16
- export declare function parsePaymentRequiredEnvelope(rawHeader: string): X402PaymentRequired;
17
- export declare function buildPaymentSignatureHeader(payload: X402PaymentSignaturePayload): string;
18
- export declare function parsePaymentSignatureHeader(rawHeader: string): X402PaymentSignaturePayload;
19
- export declare function normalizeRequirement(requirement: PaymentRequirement): PaymentRequirement;
20
- //# sourceMappingURL=x402.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared-types/src/x402.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAUX,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,CAGxD;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,kBAAkB,GAAG,MAAM,CAkBlF;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAOhF;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAMnF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CAExF;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,2BAA2B,CAM1F;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,kBAAkB,GAAG,kBAAkB,CA6BxF"}