@shielded-x402/client 0.2.4 → 0.4.0
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/agentPaymentFetch.d.ts +56 -0
- package/dist/agentPaymentFetch.d.ts.map +1 -0
- package/dist/agentPaymentFetch.js +208 -0
- package/dist/agentPaymentFetch.js.map +1 -0
- package/dist/client.d.ts +2 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +8 -25
- package/dist/client.js.map +1 -1
- package/dist/counterpartyPolicy.d.ts +9 -0
- package/dist/counterpartyPolicy.d.ts.map +1 -0
- package/dist/counterpartyPolicy.js +87 -0
- package/dist/counterpartyPolicy.js.map +1 -0
- package/dist/creditChannel.d.ts +28 -0
- package/dist/creditChannel.d.ts.map +1 -0
- package/dist/creditChannel.js +143 -0
- package/dist/creditChannel.js.map +1 -0
- package/dist/creditClose.d.ts +13 -0
- package/dist/creditClose.d.ts.map +1 -0
- package/dist/creditClose.js +21 -0
- package/dist/creditClose.js.map +1 -0
- package/dist/creditFetch.d.ts +18 -0
- package/dist/creditFetch.d.ts.map +1 -0
- package/dist/creditFetch.js +56 -0
- package/dist/creditFetch.js.map +1 -0
- package/dist/creditSignatures.d.ts +18 -0
- package/dist/creditSignatures.d.ts.map +1 -0
- package/dist/creditSignatures.js +18 -0
- package/dist/creditSignatures.js.map +1 -0
- package/dist/crypto.d.ts +1 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +4 -7
- package/dist/crypto.js.map +1 -1
- package/dist/http.d.ts +10 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +27 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/proofProvider.d.ts +1 -1
- package/dist/proofProvider.d.ts.map +1 -1
- package/dist/proofProvider.js +40 -44
- package/dist/proofProvider.js.map +1 -1
- package/dist/requirementAdapters.d.ts +16 -0
- package/dist/requirementAdapters.d.ts.map +1 -0
- package/dist/requirementAdapters.js +277 -0
- package/dist/requirementAdapters.js.map +1 -0
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/walletState.d.ts +20 -4
- package/dist/walletState.d.ts.map +1 -1
- package/dist/walletState.js +282 -191
- package/dist/walletState.js.map +1 -1
- package/package.json +4 -3
- package/dist/relayerFetch.d.ts +0 -43
- package/dist/relayerFetch.d.ts.map +0 -1
- package/dist/relayerFetch.js +0 -313
- package/dist/relayerFetch.js.map +0 -1
- package/dist/shieldedFetch.d.ts +0 -41
- package/dist/shieldedFetch.d.ts.map +0 -1
- package/dist/shieldedFetch.js +0 -91
- package/dist/shieldedFetch.js.map +0 -1
package/dist/proofProvider.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
import { CRYPTO_SPEC } from '@shielded-x402/shared-types';
|
|
1
|
+
import { CRYPTO_SPEC, normalizeHex, toHexWord } from '@shielded-x402/shared-types';
|
|
2
2
|
import { pad } from 'viem';
|
|
3
3
|
const BN254_FIELD_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
|
|
4
4
|
const MERKLE_DEPTH = CRYPTO_SPEC.merkleTreeDepth;
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
return trimmed;
|
|
12
|
-
};
|
|
5
|
+
// UltraHonk backend can return expanded public inputs as 5 bytes32 words (32 bytes each) + amount byte.
|
|
6
|
+
const EXPANDED_PUBLIC_INPUT_LENGTH = 161;
|
|
7
|
+
const EXPANDED_PUBLIC_INPUT_AMOUNT_INDEX = 160;
|
|
8
|
+
// Runtime dynamic import keeps this module compatible across Node ESM/CJS calling environments.
|
|
9
|
+
const dynamicImport = new Function('m', 'return import(m)');
|
|
13
10
|
const hexToBytes32 = (value) => {
|
|
14
11
|
const hex = value.slice(2).padStart(64, '0');
|
|
15
12
|
const bytes = [];
|
|
@@ -38,7 +35,7 @@ const normalizePublicInputWord = (value) => {
|
|
|
38
35
|
throw new Error(`unsupported public input value type: ${typeof value}`);
|
|
39
36
|
};
|
|
40
37
|
const collapseExpandedPublicInputs = (publicInputs) => {
|
|
41
|
-
if (publicInputs.length <
|
|
38
|
+
if (publicInputs.length < EXPANDED_PUBLIC_INPUT_LENGTH)
|
|
42
39
|
return null;
|
|
43
40
|
const readWord = (start) => {
|
|
44
41
|
const bytes = [];
|
|
@@ -59,7 +56,7 @@ const collapseExpandedPublicInputs = (publicInputs) => {
|
|
|
59
56
|
readWord(64),
|
|
60
57
|
readWord(96),
|
|
61
58
|
readWord(128),
|
|
62
|
-
toHexWord(BigInt(publicInputs[
|
|
59
|
+
toHexWord(BigInt(publicInputs[EXPANDED_PUBLIC_INPUT_AMOUNT_INDEX] ?? '0x0'))
|
|
63
60
|
];
|
|
64
61
|
};
|
|
65
62
|
const normalizePublicInputs = (values) => {
|
|
@@ -134,7 +131,6 @@ const isNoirCircuitArtifact = (value) => {
|
|
|
134
131
|
typeof value.bytecode === 'string');
|
|
135
132
|
};
|
|
136
133
|
const loadBundledSpendChangeCircuit = async () => {
|
|
137
|
-
const dynamicImport = new Function('m', 'return import(m)');
|
|
138
134
|
// Node-safe path: avoid JSON module import-attribute issues by reading raw file.
|
|
139
135
|
try {
|
|
140
136
|
const fs = await dynamicImport('node:fs/promises');
|
|
@@ -153,6 +149,36 @@ const loadBundledSpendChangeCircuit = async () => {
|
|
|
153
149
|
}
|
|
154
150
|
return candidate;
|
|
155
151
|
};
|
|
152
|
+
async function initializeUltraHonkBackend(UltraHonkBackend, bbPkg, circuit) {
|
|
153
|
+
const ctorArity = UltraHonkBackend.length ?? 1;
|
|
154
|
+
if (ctorArity < 2) {
|
|
155
|
+
return new UltraHonkBackend(circuit.bytecode);
|
|
156
|
+
}
|
|
157
|
+
const Barretenberg = bbPkg.Barretenberg;
|
|
158
|
+
if (!Barretenberg) {
|
|
159
|
+
throw new Error('bb.js backend requires Barretenberg API constructor, but none was exported');
|
|
160
|
+
}
|
|
161
|
+
let api;
|
|
162
|
+
if (typeof Barretenberg.getSingleton === 'function') {
|
|
163
|
+
try {
|
|
164
|
+
api = Barretenberg.getSingleton();
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// singleton not initialized yet
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (!api && typeof Barretenberg.initSingleton === 'function') {
|
|
171
|
+
await Barretenberg.initSingleton();
|
|
172
|
+
api = Barretenberg.getSingleton?.();
|
|
173
|
+
}
|
|
174
|
+
if (!api && typeof Barretenberg.new === 'function') {
|
|
175
|
+
api = await Barretenberg.new();
|
|
176
|
+
}
|
|
177
|
+
if (!api) {
|
|
178
|
+
throw new Error('unable to initialize bb.js Barretenberg API');
|
|
179
|
+
}
|
|
180
|
+
return new UltraHonkBackend(circuit.bytecode, api);
|
|
181
|
+
}
|
|
156
182
|
export function createNoirJsProofProvider(config) {
|
|
157
183
|
return {
|
|
158
184
|
async generateProof(request) {
|
|
@@ -178,7 +204,6 @@ export function createNoirJsProofProvider(config) {
|
|
|
178
204
|
* instantiates Noir + UltraHonkBackend from a compiled Noir circuit artifact.
|
|
179
205
|
*/
|
|
180
206
|
export async function createNoirJsProofProviderFromCircuit(circuit, config) {
|
|
181
|
-
const dynamicImport = new Function('m', 'return import(m)');
|
|
182
207
|
const importFromCallerFirst = async (moduleName) => {
|
|
183
208
|
try {
|
|
184
209
|
const modulePkg = await dynamicImport('node:module');
|
|
@@ -200,36 +225,7 @@ export async function createNoirJsProofProviderFromCircuit(circuit, config) {
|
|
|
200
225
|
const noir = new Noir(circuit);
|
|
201
226
|
// bb.js v3 expects an API instance in UltraHonkBackend(bytecode, api),
|
|
202
227
|
// while older versions used UltraHonkBackend(bytecode).
|
|
203
|
-
const backend = await (
|
|
204
|
-
const ctorArity = UltraHonkBackend.length ?? 1;
|
|
205
|
-
if (ctorArity < 2) {
|
|
206
|
-
return new UltraHonkBackend(circuit.bytecode);
|
|
207
|
-
}
|
|
208
|
-
const Barretenberg = bbPkg.Barretenberg;
|
|
209
|
-
if (!Barretenberg) {
|
|
210
|
-
throw new Error('bb.js backend requires Barretenberg API constructor, but none was exported');
|
|
211
|
-
}
|
|
212
|
-
let api;
|
|
213
|
-
if (typeof Barretenberg.getSingleton === 'function') {
|
|
214
|
-
try {
|
|
215
|
-
api = Barretenberg.getSingleton();
|
|
216
|
-
}
|
|
217
|
-
catch {
|
|
218
|
-
// singleton not initialized yet
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
if (!api && typeof Barretenberg.initSingleton === 'function') {
|
|
222
|
-
await Barretenberg.initSingleton();
|
|
223
|
-
api = Barretenberg.getSingleton?.();
|
|
224
|
-
}
|
|
225
|
-
if (!api && typeof Barretenberg.new === 'function') {
|
|
226
|
-
api = await Barretenberg.new();
|
|
227
|
-
}
|
|
228
|
-
if (!api) {
|
|
229
|
-
throw new Error('unable to initialize bb.js Barretenberg API');
|
|
230
|
-
}
|
|
231
|
-
return new UltraHonkBackend(circuit.bytecode, api);
|
|
232
|
-
})();
|
|
228
|
+
const backend = await initializeUltraHonkBackend(UltraHonkBackend, bbPkg, circuit);
|
|
233
229
|
// Generated verifier contracts in this repo are ZK Honk by default.
|
|
234
230
|
// Keep SDK defaults aligned so proof byte length/transcript mode matches onchain verification.
|
|
235
231
|
const backendProofOptions = config?.backendProofOptions ?? { verifierTarget: 'evm' };
|
|
@@ -250,7 +246,7 @@ export async function createNoirJsProofProviderFromCircuit(circuit, config) {
|
|
|
250
246
|
* Highest-level convenience for agent apps:
|
|
251
247
|
* loads the bundled spend_change artifact from this package.
|
|
252
248
|
*/
|
|
253
|
-
export async function
|
|
249
|
+
export async function createProofProvider(config) {
|
|
254
250
|
const circuit = await loadBundledSpendChangeCircuit();
|
|
255
251
|
return createNoirJsProofProviderFromCircuit(circuit, config);
|
|
256
252
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proofProvider.js","sourceRoot":"","sources":["../src/proofProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAY,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"proofProvider.js","sourceRoot":"","sources":["../src/proofProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type PaymentRequirement, type RequirementAdapterContext } from '@shielded-x402/shared-types';
|
|
2
|
+
export interface RequirementAdapter {
|
|
3
|
+
name: string;
|
|
4
|
+
matches?: (ctx: RequirementAdapterContext) => boolean;
|
|
5
|
+
normalizeIncoming402?: (response: Response, ctx: RequirementAdapterContext) => Promise<Response>;
|
|
6
|
+
normalizeRequirementLike?: (value: Record<string, unknown>, ctx: RequirementAdapterContext) => Record<string, unknown> | undefined;
|
|
7
|
+
rewriteOutgoingPaymentHeaders?: (headers: Headers, ctx: RequirementAdapterContext) => HeadersInit;
|
|
8
|
+
}
|
|
9
|
+
export declare function createGenericX402V2Adapter(): RequirementAdapter;
|
|
10
|
+
export declare function normalizeIncoming402WithAdapters(response: Response, ctx: RequirementAdapterContext, adapters: RequirementAdapter[]): Promise<Response>;
|
|
11
|
+
export declare function rewriteOutgoingHeadersWithAdapters(headers: Headers, ctx: RequirementAdapterContext, adapters: RequirementAdapter[]): Headers;
|
|
12
|
+
export declare function parseRequirementFrom402Response(response: Response, ctx: RequirementAdapterContext, adapters: RequirementAdapter[]): Promise<{
|
|
13
|
+
response: Response;
|
|
14
|
+
requirement: PaymentRequirement;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=requirementAdapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirementAdapters.d.ts","sourceRoot":"","sources":["../src/requirementAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC/B,MAAM,6BAA6B,CAAC;AAMrC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,OAAO,CAAC;IACtD,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,yBAAyB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjG,wBAAwB,CAAC,EAAE,CACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,yBAAyB,KAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACzC,6BAA6B,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,yBAAyB,KAAK,WAAW,CAAC;CACnG;AAuJD,wBAAgB,0BAA0B,IAAI,kBAAkB,CA0D/D;AAED,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,yBAAyB,EAC9B,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAiBnB;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,yBAAyB,EAC9B,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,OAAO,CAcT;AAED,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,yBAAyB,EAC9B,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,kBAAkB,CAAA;CAAE,CAAC,CA6DlE"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { X402_HEADERS, encodeX402Header, getIntegerStringFromRecords, getRecord, getString, getStringFromRecords, parsePaymentRequiredEnvelope, parsePaymentRequiredHeader } from '@shielded-x402/shared-types';
|
|
2
|
+
const ZERO_BYTES32 = `0x${'0'.repeat(64)}`;
|
|
3
|
+
const ZERO_ADDRESS = `0x${'0'.repeat(40)}`;
|
|
4
|
+
const ZERO_ASSET = `0x${'0'.repeat(64)}`;
|
|
5
|
+
function normalizeRequirementLikeGeneric(value, ctx) {
|
|
6
|
+
const extra = getRecord(value.extra);
|
|
7
|
+
const scheme = (getStringFromRecords('scheme', value, extra) ?? 'exact').toLowerCase();
|
|
8
|
+
const network = getStringFromRecords('network', value, extra) ??
|
|
9
|
+
getStringFromRecords('chain', value, extra);
|
|
10
|
+
const payTo = getStringFromRecords('payTo', value, extra) ??
|
|
11
|
+
getString(value, 'to') ??
|
|
12
|
+
getStringFromRecords('recipient', value, extra) ??
|
|
13
|
+
getStringFromRecords('address', value, extra);
|
|
14
|
+
const assetRaw = getStringFromRecords('asset', value, extra) ??
|
|
15
|
+
getStringFromRecords('token', value, extra) ??
|
|
16
|
+
getStringFromRecords('assetAddress', value, extra);
|
|
17
|
+
const asset = assetRaw && assetRaw.length > 0 ? assetRaw : ZERO_ASSET;
|
|
18
|
+
const amount = getIntegerStringFromRecords('amount', value, extra) ??
|
|
19
|
+
getIntegerStringFromRecords('maxAmountRequired', value, extra) ??
|
|
20
|
+
getIntegerStringFromRecords('maxAmount', value, extra) ??
|
|
21
|
+
getIntegerStringFromRecords('price', value, extra);
|
|
22
|
+
if (!scheme || !network || !payTo || !amount)
|
|
23
|
+
return undefined;
|
|
24
|
+
const normalized = {
|
|
25
|
+
scheme,
|
|
26
|
+
network,
|
|
27
|
+
amount,
|
|
28
|
+
payTo,
|
|
29
|
+
asset
|
|
30
|
+
};
|
|
31
|
+
normalized.resource = getStringFromRecords('resource', value, extra) ?? ctx.requestUrl;
|
|
32
|
+
const description = getStringFromRecords('description', value, extra);
|
|
33
|
+
if (description)
|
|
34
|
+
normalized.description = description;
|
|
35
|
+
const mimeType = getStringFromRecords('mimeType', value, extra);
|
|
36
|
+
if (mimeType)
|
|
37
|
+
normalized.mimeType = mimeType;
|
|
38
|
+
const maxTimeoutSeconds = value.maxTimeoutSeconds ?? extra?.maxTimeoutSeconds;
|
|
39
|
+
if (typeof maxTimeoutSeconds === 'number' && Number.isFinite(maxTimeoutSeconds)) {
|
|
40
|
+
normalized.maxTimeoutSeconds = Math.trunc(maxTimeoutSeconds);
|
|
41
|
+
}
|
|
42
|
+
if (value.outputSchema !== undefined)
|
|
43
|
+
normalized.outputSchema = value.outputSchema;
|
|
44
|
+
const timeoutSeconds = typeof maxTimeoutSeconds === 'number' && Number.isFinite(maxTimeoutSeconds) && maxTimeoutSeconds > 0
|
|
45
|
+
? Math.trunc(maxTimeoutSeconds)
|
|
46
|
+
: typeof maxTimeoutSeconds === 'string'
|
|
47
|
+
? (() => {
|
|
48
|
+
const parsed = Number(maxTimeoutSeconds);
|
|
49
|
+
return Number.isFinite(parsed) && parsed > 0 ? Math.trunc(parsed) : 300;
|
|
50
|
+
})()
|
|
51
|
+
: 300;
|
|
52
|
+
const fallbackChallengeExpiry = String(Math.floor(Date.now() / 1000) + timeoutSeconds);
|
|
53
|
+
const fallbackVerifyingContract = /^0x[0-9a-fA-F]{40}$/.test(payTo) ? payTo : ZERO_ADDRESS;
|
|
54
|
+
const rail = getStringFromRecords('rail', value, extra) ?? 'x402-standard';
|
|
55
|
+
const challengeNonce = getStringFromRecords('challengeNonce', value, extra) ?? ZERO_BYTES32;
|
|
56
|
+
const challengeExpiry = getStringFromRecords('challengeExpiry', value, extra) ?? fallbackChallengeExpiry;
|
|
57
|
+
const merchantPubKey = getStringFromRecords('merchantPubKey', value, extra) ?? ZERO_BYTES32;
|
|
58
|
+
const verifyingContract = getStringFromRecords('verifyingContract', value, extra) ?? fallbackVerifyingContract;
|
|
59
|
+
normalized.rail = rail;
|
|
60
|
+
normalized.challengeNonce = challengeNonce;
|
|
61
|
+
normalized.challengeExpiry = challengeExpiry;
|
|
62
|
+
normalized.merchantPubKey = merchantPubKey;
|
|
63
|
+
normalized.verifyingContract = verifyingContract;
|
|
64
|
+
normalized.extra = {
|
|
65
|
+
...(extra ?? {}),
|
|
66
|
+
rail,
|
|
67
|
+
challengeNonce,
|
|
68
|
+
challengeExpiry,
|
|
69
|
+
merchantPubKey,
|
|
70
|
+
verifyingContract
|
|
71
|
+
};
|
|
72
|
+
return normalized;
|
|
73
|
+
}
|
|
74
|
+
function matchingAdapters(adapters, ctx) {
|
|
75
|
+
return adapters.filter((adapter) => !adapter.matches || adapter.matches(ctx));
|
|
76
|
+
}
|
|
77
|
+
function normalizeRequirementLikeWithAdapters(candidate, ctx, adapters) {
|
|
78
|
+
for (const adapter of matchingAdapters(adapters, ctx)) {
|
|
79
|
+
if (!adapter.normalizeRequirementLike)
|
|
80
|
+
continue;
|
|
81
|
+
const normalized = adapter.normalizeRequirementLike(candidate, ctx);
|
|
82
|
+
if (normalized)
|
|
83
|
+
return normalized;
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
function parseJsonRecord(text) {
|
|
88
|
+
if (text.length === 0)
|
|
89
|
+
return undefined;
|
|
90
|
+
try {
|
|
91
|
+
return getRecord(JSON.parse(text));
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function extractRequirementCandidates(bodyRecord) {
|
|
98
|
+
const candidates = [];
|
|
99
|
+
if (Array.isArray(bodyRecord.accepts))
|
|
100
|
+
candidates.push(...bodyRecord.accepts);
|
|
101
|
+
if (Array.isArray(bodyRecord.requirements))
|
|
102
|
+
candidates.push(...bodyRecord.requirements);
|
|
103
|
+
if (candidates.length === 0)
|
|
104
|
+
candidates.push(bodyRecord);
|
|
105
|
+
return candidates
|
|
106
|
+
.map((entry) => getRecord(entry))
|
|
107
|
+
.filter((entry) => Boolean(entry));
|
|
108
|
+
}
|
|
109
|
+
function pickNormalizedRequirement(bodyRecord, normalizer) {
|
|
110
|
+
return extractRequirementCandidates(bodyRecord)
|
|
111
|
+
.map((entry) => normalizer(entry))
|
|
112
|
+
.find((entry) => Boolean(entry));
|
|
113
|
+
}
|
|
114
|
+
async function parseResponseBodyRecord(response) {
|
|
115
|
+
try {
|
|
116
|
+
const text = await response.clone().text();
|
|
117
|
+
return parseJsonRecord(text);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function withHeader(response, headerValue) {
|
|
124
|
+
const headers = new Headers(response.headers);
|
|
125
|
+
headers.set(X402_HEADERS.paymentRequired, headerValue);
|
|
126
|
+
if (!headers.get('content-type')) {
|
|
127
|
+
headers.set('content-type', 'application/json');
|
|
128
|
+
}
|
|
129
|
+
return new Response(response.body, {
|
|
130
|
+
status: response.status,
|
|
131
|
+
statusText: response.statusText,
|
|
132
|
+
headers
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
export function createGenericX402V2Adapter() {
|
|
136
|
+
return {
|
|
137
|
+
name: 'generic-x402-v2',
|
|
138
|
+
normalizeRequirementLike: (value, ctx) => normalizeRequirementLikeGeneric(value, ctx),
|
|
139
|
+
normalizeIncoming402: async (response, ctx) => {
|
|
140
|
+
if (response.status !== 402)
|
|
141
|
+
return response;
|
|
142
|
+
const directHeader = response.headers.get(X402_HEADERS.paymentRequired);
|
|
143
|
+
if (directHeader) {
|
|
144
|
+
const envelope = parsePaymentRequiredEnvelope(directHeader);
|
|
145
|
+
const firstAccepted = getRecord(envelope.accepts[0]);
|
|
146
|
+
if (!firstAccepted)
|
|
147
|
+
return response;
|
|
148
|
+
const normalized = normalizeRequirementLikeGeneric(firstAccepted, ctx);
|
|
149
|
+
if (!normalized)
|
|
150
|
+
return response;
|
|
151
|
+
const normalizedEnvelope = {
|
|
152
|
+
x402Version: 2,
|
|
153
|
+
accepts: [normalized],
|
|
154
|
+
...(typeof envelope.error === 'string' ? { error: envelope.error } : {})
|
|
155
|
+
};
|
|
156
|
+
return withHeader(response, encodeX402Header(normalizedEnvelope));
|
|
157
|
+
}
|
|
158
|
+
const bodyText = await response.text();
|
|
159
|
+
const bodyRecord = parseJsonRecord(bodyText);
|
|
160
|
+
if (!bodyRecord)
|
|
161
|
+
return response;
|
|
162
|
+
const normalized = pickNormalizedRequirement(bodyRecord, (entry) => normalizeRequirementLikeGeneric(entry, ctx));
|
|
163
|
+
if (!normalized) {
|
|
164
|
+
return new Response(bodyText, {
|
|
165
|
+
status: response.status,
|
|
166
|
+
statusText: response.statusText,
|
|
167
|
+
headers: new Headers(response.headers)
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
const envelope = {
|
|
171
|
+
x402Version: 2,
|
|
172
|
+
accepts: [normalized],
|
|
173
|
+
...(typeof bodyRecord.error === 'string' ? { error: bodyRecord.error } : {})
|
|
174
|
+
};
|
|
175
|
+
const headerValue = encodeX402Header(envelope);
|
|
176
|
+
const headers = new Headers(response.headers);
|
|
177
|
+
headers.set(X402_HEADERS.paymentRequired, headerValue);
|
|
178
|
+
headers.set('content-type', 'application/json');
|
|
179
|
+
return new Response(JSON.stringify(envelope), {
|
|
180
|
+
status: response.status,
|
|
181
|
+
statusText: response.statusText,
|
|
182
|
+
headers
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
export async function normalizeIncoming402WithAdapters(response, ctx, adapters) {
|
|
188
|
+
let current = response;
|
|
189
|
+
for (const adapter of matchingAdapters(adapters, ctx)) {
|
|
190
|
+
if (!adapter.normalizeIncoming402)
|
|
191
|
+
continue;
|
|
192
|
+
try {
|
|
193
|
+
const next = await adapter.normalizeIncoming402(current, ctx);
|
|
194
|
+
if (next !== current) {
|
|
195
|
+
current = next;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
current = next;
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
202
|
+
throw new Error(`requirement adapter ${adapter.name} normalizeIncoming402 failed: ${message}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return current;
|
|
206
|
+
}
|
|
207
|
+
export function rewriteOutgoingHeadersWithAdapters(headers, ctx, adapters) {
|
|
208
|
+
let out = new Headers(headers);
|
|
209
|
+
for (const adapter of matchingAdapters(adapters, ctx)) {
|
|
210
|
+
if (!adapter.rewriteOutgoingPaymentHeaders)
|
|
211
|
+
continue;
|
|
212
|
+
try {
|
|
213
|
+
out = new Headers(adapter.rewriteOutgoingPaymentHeaders(out, ctx));
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
217
|
+
throw new Error(`requirement adapter ${adapter.name} rewriteOutgoingPaymentHeaders failed: ${message}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return out;
|
|
221
|
+
}
|
|
222
|
+
export async function parseRequirementFrom402Response(response, ctx, adapters) {
|
|
223
|
+
const normalized = await normalizeIncoming402WithAdapters(response, ctx, adapters);
|
|
224
|
+
const header = normalized.headers.get(X402_HEADERS.paymentRequired);
|
|
225
|
+
if (header) {
|
|
226
|
+
try {
|
|
227
|
+
return {
|
|
228
|
+
response: normalized,
|
|
229
|
+
requirement: parsePaymentRequiredHeader(header)
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
234
|
+
if (!message.includes('payment requirement missing shielded rail metadata')) {
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
237
|
+
const envelope = parsePaymentRequiredEnvelope(header);
|
|
238
|
+
const firstAccepted = getRecord(envelope.accepts[0]);
|
|
239
|
+
if (firstAccepted) {
|
|
240
|
+
const normalizedFallback = normalizeRequirementLikeWithAdapters(firstAccepted, ctx, adapters) ??
|
|
241
|
+
normalizeRequirementLikeGeneric(firstAccepted, ctx);
|
|
242
|
+
if (normalizedFallback) {
|
|
243
|
+
const repairedHeader = encodeX402Header({
|
|
244
|
+
x402Version: 2,
|
|
245
|
+
accepts: [normalizedFallback],
|
|
246
|
+
...(typeof envelope.error === 'string' ? { error: envelope.error } : {})
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
response: withHeader(normalized, repairedHeader),
|
|
250
|
+
requirement: parsePaymentRequiredHeader(repairedHeader)
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
throw error;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const bodyRecord = await parseResponseBodyRecord(normalized);
|
|
258
|
+
if (!bodyRecord) {
|
|
259
|
+
throw new Error(`missing ${X402_HEADERS.paymentRequired} header`);
|
|
260
|
+
}
|
|
261
|
+
const normalizedRequirement = pickNormalizedRequirement(bodyRecord, (entry) => normalizeRequirementLikeWithAdapters(entry, ctx, adapters));
|
|
262
|
+
if (!normalizedRequirement) {
|
|
263
|
+
throw new Error(`missing ${X402_HEADERS.paymentRequired} header`);
|
|
264
|
+
}
|
|
265
|
+
const envelope = {
|
|
266
|
+
x402Version: 2,
|
|
267
|
+
accepts: [normalizedRequirement],
|
|
268
|
+
...(typeof bodyRecord.error === 'string' ? { error: bodyRecord.error } : {})
|
|
269
|
+
};
|
|
270
|
+
const headerValue = encodeX402Header(envelope);
|
|
271
|
+
const withRequiredHeader = withHeader(normalized, headerValue);
|
|
272
|
+
return {
|
|
273
|
+
response: withRequiredHeader,
|
|
274
|
+
requirement: parsePaymentRequiredHeader(headerValue)
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=requirementAdapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirementAdapters.js","sourceRoot":"","sources":["../src/requirementAdapters.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export interface SpendBuildParams {
|
|
|
24
24
|
note: ShieldedNote;
|
|
25
25
|
witness: MerkleWitness;
|
|
26
26
|
nullifierSecret: Hex;
|
|
27
|
+
changeNullifierSecret?: Hex;
|
|
27
28
|
merchantPubKey: Hex;
|
|
28
29
|
merchantRho?: Hex;
|
|
29
30
|
merchantAddress: Hex;
|
|
@@ -35,6 +36,7 @@ export interface SpendBuildParams {
|
|
|
35
36
|
export interface SpendProofBundle {
|
|
36
37
|
response: ShieldedPaymentResponse;
|
|
37
38
|
changeNote: ShieldedNote;
|
|
39
|
+
changeNullifierSecret: Hex;
|
|
38
40
|
merchantRho: Hex;
|
|
39
41
|
}
|
|
40
42
|
export interface ShieldedClientConfig {
|
|
@@ -46,13 +48,11 @@ export interface ShieldedClientConfig {
|
|
|
46
48
|
}>;
|
|
47
49
|
proofProvider?: ProofProvider;
|
|
48
50
|
}
|
|
49
|
-
export interface Parsed402 {
|
|
50
|
-
requirement: PaymentRequirement;
|
|
51
|
-
}
|
|
52
51
|
export interface Prepared402Payment {
|
|
53
52
|
requirement: PaymentRequirement;
|
|
54
53
|
headers: Headers;
|
|
55
54
|
response: ShieldedPaymentResponse;
|
|
56
55
|
changeNote: ShieldedNote;
|
|
56
|
+
changeNullifierSecret: Hex;
|
|
57
57
|
}
|
|
58
58
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,kBAAkB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAClH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,GAAG,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,YAAY,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,GAAG,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC;IACrB,oBAAoB,EAAE,GAAG,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,GAAG,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,GAAG,CAAC;IACpB,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,kBAAkB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAClH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,GAAG,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,YAAY,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,GAAG,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC;IACrB,oBAAoB,EAAE,GAAG,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,GAAG,CAAC;IACrB,qBAAqB,CAAC,EAAE,GAAG,CAAC;IAC5B,cAAc,EAAE,GAAG,CAAC;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,GAAG,CAAC;IACpB,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,UAAU,EAAE,YAAY,CAAC;IACzB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,UAAU,EAAE,YAAY,CAAC;IACzB,qBAAqB,EAAE,GAAG,CAAC;CAC5B"}
|
package/dist/walletState.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { Hex, RelayerSettlementDelta, ShieldedNote } from '@shielded-x402/shared-types';
|
|
1
|
+
import type { CreditChannelId, Hex, RelayerSettlementDelta, ShieldedNote, SignedCreditState } from '@shielded-x402/shared-types';
|
|
2
2
|
import type { MerkleWitness } from './merkle.js';
|
|
3
3
|
export interface WalletNoteRecord extends ShieldedNote {
|
|
4
|
+
nullifierSecret: Hex;
|
|
4
5
|
depositBlock?: bigint;
|
|
5
6
|
spent?: boolean;
|
|
6
7
|
}
|
|
@@ -13,7 +14,7 @@ export interface WalletStateSnapshot {
|
|
|
13
14
|
export interface ShieldedSpendContext {
|
|
14
15
|
note: ShieldedNote;
|
|
15
16
|
witness: MerkleWitness;
|
|
16
|
-
|
|
17
|
+
nullifierSecret: Hex;
|
|
17
18
|
}
|
|
18
19
|
export interface WalletSyncResult {
|
|
19
20
|
fromBlock: bigint;
|
|
@@ -40,13 +41,18 @@ export declare class FileBackedWalletState {
|
|
|
40
41
|
private readonly startBlock;
|
|
41
42
|
private indexerFieldNames?;
|
|
42
43
|
private state;
|
|
44
|
+
private noteIndexesByCommitment;
|
|
45
|
+
private leafIndexByCommitment;
|
|
43
46
|
private constructor();
|
|
44
47
|
static create(config: FileBackedWalletStateConfig): Promise<FileBackedWalletState>;
|
|
45
48
|
load(): Promise<void>;
|
|
46
49
|
persist(): Promise<void>;
|
|
47
50
|
snapshot(): WalletStateSnapshot;
|
|
48
51
|
getNotes(): WalletNoteRecord[];
|
|
49
|
-
|
|
52
|
+
getCreditState(channelId: CreditChannelId): SignedCreditState | undefined;
|
|
53
|
+
setCreditState(signedState: SignedCreditState): Promise<void>;
|
|
54
|
+
clearCreditState(channelId: CreditChannelId): Promise<void>;
|
|
55
|
+
addOrUpdateNote(note: ShieldedNote, nullifierSecret: Hex, depositBlock?: bigint): Promise<void>;
|
|
50
56
|
markNoteSpent(commitment: Hex): Promise<boolean>;
|
|
51
57
|
recordSpendOutputs(params: {
|
|
52
58
|
merchantCommitment: Hex;
|
|
@@ -57,12 +63,22 @@ export declare class FileBackedWalletState {
|
|
|
57
63
|
applyRelayerSettlement(params: {
|
|
58
64
|
settlementDelta?: RelayerSettlementDelta;
|
|
59
65
|
changeNote?: ShieldedNote;
|
|
66
|
+
changeNullifierSecret?: Hex;
|
|
60
67
|
spentNoteCommitment?: Hex;
|
|
61
68
|
}): Promise<void>;
|
|
69
|
+
private applyCommitmentWrites;
|
|
70
|
+
private rebuildCommitmentIndexes;
|
|
71
|
+
private mapRpcEventsToWrites;
|
|
72
|
+
private mapIndexerEventsToWrites;
|
|
62
73
|
sync(): Promise<WalletSyncResult>;
|
|
63
74
|
private syncFromIndexer;
|
|
64
75
|
private fetchIndexerEvents;
|
|
65
|
-
|
|
76
|
+
private indexerPost;
|
|
77
|
+
private ensureIndexerFieldNames;
|
|
78
|
+
private fetchIndexerRows;
|
|
79
|
+
private computeIndexerMaxBlock;
|
|
80
|
+
getSpendContextByCommitment(commitment: Hex): ShieldedSpendContext;
|
|
81
|
+
private findNoteIndexByCommitment;
|
|
66
82
|
private findLeafIndex;
|
|
67
83
|
}
|
|
68
84
|
//# sourceMappingURL=walletState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walletState.d.ts","sourceRoot":"","sources":["../src/walletState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"walletState.d.ts","sourceRoot":"","sources":["../src/walletState.ts"],"names":[],"mappings":"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"}
|