@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
@@ -1,96 +0,0 @@
1
- export const X402_HEADERS = {
2
- paymentRequired: 'PAYMENT-REQUIRED',
3
- paymentSignature: 'PAYMENT-SIGNATURE',
4
- paymentResponse: 'PAYMENT-RESPONSE'
5
- };
6
- export const RELAYER_ROUTES = {
7
- challenge: '/v1/relay/challenge',
8
- pay: '/v1/relay/pay',
9
- statusPrefix: '/v1/relay/status'
10
- };
11
- function toBase64(value) {
12
- return Buffer.from(value, 'utf8').toString('base64');
13
- }
14
- function fromBase64(value) {
15
- return Buffer.from(value, 'base64').toString('utf8');
16
- }
17
- export function encodeX402Header(value) {
18
- return toBase64(JSON.stringify(value));
19
- }
20
- export function decodeX402Header(rawHeader) {
21
- const decoded = fromBase64(rawHeader.trim());
22
- return JSON.parse(decoded);
23
- }
24
- export function buildPaymentRequiredHeader(requirement) {
25
- const envelope = {
26
- x402Version: 2,
27
- accepts: [
28
- {
29
- ...requirement,
30
- x402Version: 2,
31
- extra: requirement.extra ?? {
32
- rail: requirement.rail,
33
- challengeNonce: requirement.challengeNonce,
34
- challengeExpiry: requirement.challengeExpiry,
35
- merchantPubKey: requirement.merchantPubKey,
36
- verifyingContract: requirement.verifyingContract
37
- }
38
- }
39
- ]
40
- };
41
- return encodeX402Header(envelope);
42
- }
43
- export function parsePaymentRequiredHeader(rawHeader) {
44
- const envelope = parsePaymentRequiredEnvelope(rawHeader);
45
- const accepted = envelope.accepts[0];
46
- if (!accepted || typeof accepted !== 'object') {
47
- throw new Error('x402 PAYMENT-REQUIRED has no accepted payment requirements');
48
- }
49
- return normalizeRequirement(accepted);
50
- }
51
- export function parsePaymentRequiredEnvelope(rawHeader) {
52
- const envelope = decodeX402Header(rawHeader);
53
- if (envelope.x402Version !== 2) {
54
- throw new Error('unsupported x402 version in PAYMENT-REQUIRED');
55
- }
56
- return envelope;
57
- }
58
- export function buildPaymentSignatureHeader(payload) {
59
- return encodeX402Header(payload);
60
- }
61
- export function parsePaymentSignatureHeader(rawHeader) {
62
- const envelope = decodeX402Header(rawHeader);
63
- if (envelope.x402Version !== 2) {
64
- throw new Error('unsupported x402 version in PAYMENT-SIGNATURE');
65
- }
66
- return envelope;
67
- }
68
- export function normalizeRequirement(requirement) {
69
- const extra = requirement.extra ?? undefined;
70
- const rail = requirement.rail ?? extra?.rail;
71
- const challengeNonce = requirement.challengeNonce ?? extra?.challengeNonce;
72
- const challengeExpiry = requirement.challengeExpiry ?? extra?.challengeExpiry;
73
- const merchantPubKey = requirement.merchantPubKey ?? extra?.merchantPubKey;
74
- const verifyingContract = requirement.verifyingContract ?? extra?.verifyingContract;
75
- if (!rail || !challengeNonce || !challengeExpiry || !merchantPubKey || !verifyingContract) {
76
- throw new Error('payment requirement missing shielded rail metadata');
77
- }
78
- return {
79
- ...requirement,
80
- x402Version: 2,
81
- rail,
82
- challengeNonce,
83
- challengeExpiry,
84
- merchantPubKey,
85
- verifyingContract,
86
- extra: {
87
- ...(extra ?? {}),
88
- rail,
89
- challengeNonce,
90
- challengeExpiry,
91
- merchantPubKey,
92
- verifyingContract
93
- }
94
- };
95
- }
96
- //# sourceMappingURL=x402.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"x402.js","sourceRoot":"","sources":["../../../../../../packages/shared-types/src/x402.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { type Hex, type PaymentRequirement, type ShieldedNote, type ShieldedPaymentResponse } from '@shielded-x402/shared-types';
2
- import { type MerkleWitness } from './merkle.js';
3
- import type { Parsed402, Prepared402Payment, ShieldedClientConfig, SpendBuildParams, SpendProofBundle } from './types.js';
4
- export declare class ShieldedClientSDK {
5
- private readonly config;
6
- constructor(config: ShieldedClientConfig);
7
- deposit(amount: bigint, ownerPkHash: Hex): Promise<{
8
- note: ShieldedNote;
9
- txHash?: Hex;
10
- leafIndex: number;
11
- }>;
12
- buildSpendProof(params: SpendBuildParams): SpendProofBundle;
13
- buildSpendProofWithProvider(params: SpendBuildParams): Promise<SpendProofBundle>;
14
- private attachRealProof;
15
- pay402(paymentResponse: ShieldedPaymentResponse, requirement: PaymentRequirement, challengeNonce: Hex): Promise<{
16
- payload: string;
17
- signature: string;
18
- paymentSignatureHeader: string;
19
- }>;
20
- parse402Response(response: Response): Parsed402;
21
- prepare402Payment(requirement: PaymentRequirement, note: ShieldedNote, witness: MerkleWitness, payerPkHash: Hex, baseHeaders?: HeadersInit): Promise<Prepared402Payment>;
22
- complete402Payment(input: string, init: RequestInit, requirement: PaymentRequirement, note: ShieldedNote, witness: MerkleWitness, payerPkHash: Hex, fetchFn?: typeof fetch): Promise<Response>;
23
- fetchWithShieldedPayment(input: string, init: RequestInit, note: ShieldedNote, witness: MerkleWitness, payerPkHash: Hex): Promise<Response>;
24
- }
25
- export declare function buildWitnessFromCommitments(commitments: Hex[], targetIndex: number): MerkleWitness;
26
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC7B,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAcpB,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,oBAAoB;IAEnD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBjH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB;IA8CrD,2BAA2B,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAKxE,eAAe;IA8BvB,MAAM,CACV,eAAe,EAAE,uBAAuB,EACxC,WAAW,EAAE,kBAAkB,EAC/B,cAAc,EAAE,GAAG,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,sBAAsB,EAAE,MAAM,CAAA;KAAE,CAAC;IAalF,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS;IAMzC,iBAAiB,CACrB,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,GAAG,EAChB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,kBAAkB,CAAC;IAoCxB,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,GAAG,EAChB,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,QAAQ,CAAC;IAed,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;CAOlJ;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CAElG"}
@@ -1,174 +0,0 @@
1
- import { X402_HEADERS, buildPaymentSignatureHeader, normalizeRequirement, parsePaymentRequiredHeader } from '@shielded-x402/shared-types';
2
- import { randomBytes } from 'node:crypto';
3
- import { deriveChallengeHash, deriveCommitment, deriveNullifier } from './crypto.js';
4
- import { deriveWitness } from './merkle.js';
5
- const BN254_FIELD_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
6
- function randomFieldHex() {
7
- while (true) {
8
- const candidate = BigInt(`0x${randomBytes(32).toString('hex')}`);
9
- if (candidate < BN254_FIELD_MODULUS) {
10
- return (`0x${candidate.toString(16).padStart(64, '0')}`);
11
- }
12
- }
13
- }
14
- export class ShieldedClientSDK {
15
- config;
16
- constructor(config) {
17
- this.config = config;
18
- }
19
- async deposit(amount, ownerPkHash) {
20
- const rho = randomFieldHex();
21
- const commitment = deriveCommitment(amount, rho, ownerPkHash);
22
- const tx = this.config.depositFn ? await this.config.depositFn(amount, commitment) : undefined;
23
- const result = {
24
- note: {
25
- amount,
26
- rho,
27
- pkHash: ownerPkHash,
28
- commitment,
29
- leafIndex: tx?.leafIndex ?? -1
30
- },
31
- leafIndex: tx?.leafIndex ?? -1
32
- };
33
- if (tx?.txHash) {
34
- result.txHash = tx.txHash;
35
- }
36
- return result;
37
- }
38
- buildSpendProof(params) {
39
- if (params.amount > params.note.amount) {
40
- throw new Error('insufficient note amount');
41
- }
42
- const nullifier = deriveNullifier(params.nullifierSecret, params.note.commitment);
43
- const merchantRho = params.merchantRho ?? randomFieldHex();
44
- const merchantCommitment = deriveCommitment(params.amount, merchantRho, params.merchantPubKey);
45
- const changeAmount = params.note.amount - params.amount;
46
- const changeRho = params.changeRho ?? randomFieldHex();
47
- const changeCommitment = deriveCommitment(changeAmount, changeRho, params.note.pkHash);
48
- const challengeHash = deriveChallengeHash(params.challengeNonce, params.amount, params.merchantAddress);
49
- const amountHex = `0x${params.amount.toString(16).padStart(64, '0')}`;
50
- const response = {
51
- proof: '0x00',
52
- publicInputs: [
53
- nullifier,
54
- params.witness.root,
55
- merchantCommitment,
56
- changeCommitment,
57
- challengeHash,
58
- amountHex
59
- ],
60
- nullifier,
61
- root: params.witness.root,
62
- merchantCommitment,
63
- changeCommitment,
64
- challengeHash,
65
- encryptedReceipt: params.encryptedReceipt,
66
- txHint: `leaf:${params.note.leafIndex}`
67
- };
68
- return {
69
- merchantRho,
70
- response,
71
- changeNote: {
72
- amount: changeAmount,
73
- rho: changeRho,
74
- pkHash: params.note.pkHash,
75
- commitment: changeCommitment,
76
- leafIndex: -1
77
- }
78
- };
79
- }
80
- async buildSpendProofWithProvider(params) {
81
- const bundle = this.buildSpendProof(params);
82
- return this.attachRealProof(bundle, params);
83
- }
84
- async attachRealProof(bundle, params) {
85
- if (!this.config.proofProvider) {
86
- return bundle;
87
- }
88
- const proofResult = await this.config.proofProvider.generateProof({
89
- note: params.note,
90
- witness: params.witness,
91
- nullifierSecret: params.nullifierSecret,
92
- merchantPubKey: params.merchantPubKey,
93
- merchantRho: bundle.merchantRho,
94
- changePkHash: params.note.pkHash,
95
- changeRho: bundle.changeNote.rho,
96
- amount: params.amount,
97
- challengeNonce: params.challengeNonce,
98
- merchantAddress: params.merchantAddress,
99
- expectedPublicInputs: bundle.response.publicInputs
100
- });
101
- const publicInputs = proofResult.publicInputs ?? bundle.response.publicInputs;
102
- return {
103
- ...bundle,
104
- response: {
105
- ...bundle.response,
106
- proof: proofResult.proof,
107
- publicInputs
108
- }
109
- };
110
- }
111
- async pay402(paymentResponse, requirement, challengeNonce) {
112
- const payload = JSON.stringify(paymentResponse);
113
- const signature = await this.config.signer(payload);
114
- const paymentSignatureHeader = buildPaymentSignatureHeader({
115
- x402Version: 2,
116
- accepted: normalizeRequirement(requirement),
117
- payload: paymentResponse,
118
- challengeNonce,
119
- signature: signature
120
- });
121
- return { payload, signature, paymentSignatureHeader };
122
- }
123
- parse402Response(response) {
124
- const header = response.headers.get(X402_HEADERS.paymentRequired);
125
- if (!header)
126
- throw new Error(`missing ${X402_HEADERS.paymentRequired} header`);
127
- return { requirement: parsePaymentRequiredHeader(header) };
128
- }
129
- async prepare402Payment(requirement, note, witness, payerPkHash, baseHeaders) {
130
- if (requirement.rail !== 'shielded-usdc') {
131
- throw new Error(`unsupported rail: ${requirement.rail}`);
132
- }
133
- const nonce = requirement.challengeNonce;
134
- const merchant = requirement.verifyingContract;
135
- const amount = BigInt(requirement.amount);
136
- const spendParams = {
137
- note,
138
- witness,
139
- nullifierSecret: payerPkHash,
140
- merchantPubKey: requirement.merchantPubKey,
141
- merchantAddress: merchant,
142
- amount,
143
- challengeNonce: nonce,
144
- encryptedReceipt: '0x'
145
- };
146
- const bundleWithProof = await this.buildSpendProofWithProvider(spendParams);
147
- const signed = await this.pay402(bundleWithProof.response, requirement, requirement.challengeNonce);
148
- const headers = new Headers(baseHeaders);
149
- headers.set(X402_HEADERS.paymentSignature, signed.paymentSignatureHeader);
150
- return {
151
- requirement,
152
- headers,
153
- response: bundleWithProof.response
154
- };
155
- }
156
- async complete402Payment(input, init, requirement, note, witness, payerPkHash, fetchFn = fetch) {
157
- const prepared = await this.prepare402Payment(requirement, note, witness, payerPkHash, init.headers);
158
- return fetchFn(input, {
159
- ...init,
160
- headers: prepared.headers
161
- });
162
- }
163
- async fetchWithShieldedPayment(input, init, note, witness, payerPkHash) {
164
- const first = await fetch(input, init);
165
- if (first.status !== 402)
166
- return first;
167
- const parsed = this.parse402Response(first);
168
- return this.complete402Payment(input, init, parsed.requirement, note, witness, payerPkHash);
169
- }
170
- }
171
- export function buildWitnessFromCommitments(commitments, targetIndex) {
172
- return deriveWitness(commitments, targetIndex);
173
- }
174
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { type Hex } from 'viem';
2
- export declare function deriveCommitment(amount: bigint, rho: Hex, pkHash: Hex): Hex;
3
- export declare function deriveNullifier(nullifierSecret: Hex, commitment: Hex): Hex;
4
- export declare function deriveChallengeHash(challengeNonce: Hex, amount: bigint, merchant: Hex): Hex;
5
- //# sourceMappingURL=crypto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../../src/crypto.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAG3E;AAED,wBAAgB,eAAe,CAAC,eAAe,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,GAAG,CAE1E;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG,CAM3F"}
@@ -1,15 +0,0 @@
1
- import { CRYPTO_SPEC } from '@shielded-x402/shared-types';
2
- import { concatHex, keccak256, pad } from 'viem';
3
- export function deriveCommitment(amount, rho, pkHash) {
4
- const amountWord = `0x${amount.toString(16).padStart(64, '0')}`;
5
- return keccak256(concatHex([amountWord, rho, pkHash]));
6
- }
7
- export function deriveNullifier(nullifierSecret, commitment) {
8
- return keccak256(concatHex([nullifierSecret, commitment]));
9
- }
10
- export function deriveChallengeHash(challengeNonce, amount, merchant) {
11
- const amountWord = `0x${amount.toString(16).padStart(64, '0')}`;
12
- const merchantWord = pad(merchant, { size: 32 });
13
- return keccak256(concatHex([CRYPTO_SPEC.challengeDomainHash, challengeNonce, amountWord, merchantWord]));
14
- }
15
- //# sourceMappingURL=crypto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAY,MAAM,MAAM,CAAC;AAE3D,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,GAAQ,EAAE,MAAW;IACpE,MAAM,UAAU,GAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAU,CAAC;IACzE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,eAAoB,EAAE,UAAe;IACnE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,cAAmB,EAAE,MAAc,EAAE,QAAa;IACpF,MAAM,UAAU,GAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAU,CAAC;IACzE,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,SAAS,CACd,SAAS,CAAC,CAAC,WAAW,CAAC,mBAA0B,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC9F,CAAC;AACJ,CAAC"}
@@ -1,10 +0,0 @@
1
- export * from './client.js';
2
- export * from './crypto.js';
3
- export * from './indexer.js';
4
- export * from './merkle.js';
5
- export * from './notes.js';
6
- export * from './proofProvider.js';
7
- export * from './relayerFetch.js';
8
- export * from './shieldedFetch.js';
9
- export * from './types.js';
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,10 +0,0 @@
1
- export * from './client.js';
2
- export * from './crypto.js';
3
- export * from './indexer.js';
4
- export * from './merkle.js';
5
- export * from './notes.js';
6
- export * from './proofProvider.js';
7
- export * from './relayerFetch.js';
8
- export * from './shieldedFetch.js';
9
- export * from './types.js';
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
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,22 +0,0 @@
1
- import type { Hex, ShieldedNote } from '@shielded-x402/shared-types';
2
- export interface DepositEvent {
3
- commitment: Hex;
4
- leafIndex: number;
5
- amount: bigint;
6
- }
7
- export interface SpendEvent {
8
- merchantCommitment: Hex;
9
- changeCommitment: Hex;
10
- }
11
- export interface NoteState {
12
- commitments: Hex[];
13
- notes: ShieldedNote[];
14
- }
15
- export declare class LocalNoteIndexer {
16
- private readonly state;
17
- ingestDeposit(event: DepositEvent, note: ShieldedNote): void;
18
- ingestSpend(event: SpendEvent): void;
19
- getCommitments(): Hex[];
20
- getNotes(): ShieldedNote[];
21
- }
22
- //# sourceMappingURL=indexer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../../../src/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,GAAG,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE,GAAG,CAAC;IACxB,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGpB;IAEF,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;IAK5D,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIpC,cAAc,IAAI,GAAG,EAAE;IAIvB,QAAQ,IAAI,YAAY,EAAE;CAG3B"}
@@ -1,20 +0,0 @@
1
- export class LocalNoteIndexer {
2
- state = {
3
- commitments: [],
4
- notes: []
5
- };
6
- ingestDeposit(event, note) {
7
- this.state.commitments[event.leafIndex] = event.commitment;
8
- this.state.notes.push(note);
9
- }
10
- ingestSpend(event) {
11
- this.state.commitments.push(event.merchantCommitment, event.changeCommitment);
12
- }
13
- getCommitments() {
14
- return [...this.state.commitments];
15
- }
16
- getNotes() {
17
- return [...this.state.notes];
18
- }
19
- }
20
- //# sourceMappingURL=indexer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../../../src/indexer.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,gBAAgB;IACV,KAAK,GAAc;QAClC,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,aAAa,CAAC,KAAmB,EAAE,IAAkB;QACnD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,KAAiB;QAC3B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAChF,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -1,11 +0,0 @@
1
- import { type Hex } from 'viem';
2
- export interface MerkleWitness {
3
- root: Hex;
4
- path: Hex[];
5
- indexBits: number[];
6
- }
7
- export declare function buildZeroes(depth: number): Hex[];
8
- export declare function emptyRoot(depth?: number): Hex;
9
- export declare function deriveWitness(commitments: Hex[], targetIndex: number): MerkleWitness;
10
- export declare function deriveRootFromCommitments(commitments: Hex[]): Hex;
11
- //# sourceMappingURL=merkle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../../../src/merkle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAKtD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAMD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,CAOhD;AAED,wBAAgB,SAAS,CAAC,KAAK,GAAE,MAAoC,GAAG,GAAG,CAM1E;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CA2CpF;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,CAKjE"}
@@ -1,63 +0,0 @@
1
- import { concatHex, keccak256 } from 'viem';
2
- import { CRYPTO_SPEC } from '@shielded-x402/shared-types';
3
- const ZERO_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000000';
4
- function hashPair(left, right) {
5
- return keccak256(concatHex([left, right]));
6
- }
7
- export function buildZeroes(depth) {
8
- const zeroes = [ZERO_BYTES32];
9
- for (let i = 1; i < depth; i += 1) {
10
- const prev = zeroes[i - 1] ?? ZERO_BYTES32;
11
- zeroes.push(hashPair(prev, prev));
12
- }
13
- return zeroes;
14
- }
15
- export function emptyRoot(depth = CRYPTO_SPEC.merkleTreeDepth) {
16
- let current = ZERO_BYTES32;
17
- for (let i = 0; i < depth; i += 1) {
18
- current = hashPair(current, current);
19
- }
20
- return current;
21
- }
22
- export function deriveWitness(commitments, targetIndex) {
23
- const depth = CRYPTO_SPEC.merkleTreeDepth;
24
- if (targetIndex < 0 || targetIndex >= commitments.length) {
25
- throw new Error('targetIndex out of range');
26
- }
27
- if (commitments.length >= 2 ** depth) {
28
- throw new Error('commitment set exceeds tree capacity');
29
- }
30
- const zeroes = buildZeroes(depth);
31
- const path = [];
32
- const indexBits = [];
33
- let levelNodes = [...commitments];
34
- let idx = targetIndex;
35
- for (let level = 0; level < depth; level += 1) {
36
- const bit = idx & 1;
37
- indexBits.push(bit);
38
- const siblingIndex = bit === 0 ? idx + 1 : idx - 1;
39
- const sibling = siblingIndex < levelNodes.length
40
- ? (levelNodes[siblingIndex] ?? zeroes[level] ?? ZERO_BYTES32)
41
- : (zeroes[level] ?? ZERO_BYTES32);
42
- path.push(sibling);
43
- const nextLevel = [];
44
- for (let i = 0; i < levelNodes.length; i += 2) {
45
- const left = levelNodes[i] ?? ZERO_BYTES32;
46
- const right = i + 1 < levelNodes.length
47
- ? (levelNodes[i + 1] ?? zeroes[level] ?? ZERO_BYTES32)
48
- : (zeroes[level] ?? ZERO_BYTES32);
49
- nextLevel.push(hashPair(left, right));
50
- }
51
- levelNodes = nextLevel;
52
- idx = idx >> 1;
53
- }
54
- const root = levelNodes[0] ?? emptyRoot(depth);
55
- return { root, path, indexBits };
56
- }
57
- export function deriveRootFromCommitments(commitments) {
58
- if (commitments.length === 0) {
59
- return emptyRoot(CRYPTO_SPEC.merkleTreeDepth);
60
- }
61
- return deriveWitness(commitments, 0).root;
62
- }
63
- //# sourceMappingURL=merkle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../../../src/merkle.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import type { Hex, ShieldedNote } from '@shielded-x402/shared-types';
2
- export interface StoredNote {
3
- note: ShieldedNote;
4
- ciphertext?: Hex;
5
- }
6
- export interface NoteEncryptionKeyPair {
7
- privateKey: Hex;
8
- publicKey: Hex;
9
- }
10
- export declare function generateNoteEncryptionKeyPair(): NoteEncryptionKeyPair;
11
- export declare function serializeNote(note: ShieldedNote): string;
12
- export declare function deserializeNote(value: string): ShieldedNote;
13
- export declare function encryptNoteSymmetric(note: ShieldedNote, key: Buffer): Hex;
14
- export declare function decryptNoteSymmetric(ciphertext: Hex, key: Buffer): ShieldedNote;
15
- export declare function encryptNoteForPublicKey(note: ShieldedNote, recipientPublicKey: Hex, aad?: Uint8Array): Hex;
16
- export declare function decryptNoteWithPrivateKey(envelopeCiphertext: Hex, recipientPrivateKey: Hex, aad?: Uint8Array): ShieldedNote;
17
- export declare const encryptNote: typeof encryptNoteSymmetric;
18
- export declare const decryptNote: typeof decryptNoteSymmetric;
19
- //# sourceMappingURL=notes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../../../src/notes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAYrE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,GAAG,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC;CAChB;AAED,wBAAgB,6BAA6B,IAAI,qBAAqB,CAOrE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAQxD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAgB3D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAOzE;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAU/E;AAOD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,YAAY,EAClB,kBAAkB,EAAE,GAAG,EACvB,GAAG,CAAC,EAAE,UAAU,GACf,GAAG,CA4BL;AAED,wBAAgB,yBAAyB,CACvC,kBAAkB,EAAE,GAAG,EACvB,mBAAmB,EAAE,GAAG,EACxB,GAAG,CAAC,EAAE,UAAU,GACf,YAAY,CA6Bd;AAGD,eAAO,MAAM,WAAW,6BAAuB,CAAC;AAChD,eAAO,MAAM,WAAW,6BAAuB,CAAC"}