@bankofai/x402-core 1.0.0-beta.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.
Files changed (72) hide show
  1. package/README.md +294 -0
  2. package/dist/cjs/client/index.d.ts +149 -0
  3. package/dist/cjs/client/index.js +909 -0
  4. package/dist/cjs/client/index.js.map +1 -0
  5. package/dist/cjs/facilitator/index.d.ts +206 -0
  6. package/dist/cjs/facilitator/index.js +431 -0
  7. package/dist/cjs/facilitator/index.js.map +1 -0
  8. package/dist/cjs/http/index.d.ts +50 -0
  9. package/dist/cjs/http/index.js +1452 -0
  10. package/dist/cjs/http/index.js.map +1 -0
  11. package/dist/cjs/index.d.ts +3 -0
  12. package/dist/cjs/index.js +31 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/schemas/index.d.ts +891 -0
  15. package/dist/cjs/schemas/index.js +216 -0
  16. package/dist/cjs/schemas/index.js.map +1 -0
  17. package/dist/cjs/server/index.d.ts +79 -0
  18. package/dist/cjs/server/index.js +2568 -0
  19. package/dist/cjs/server/index.js.map +1 -0
  20. package/dist/cjs/types/index.d.ts +1 -0
  21. package/dist/cjs/types/index.js +97 -0
  22. package/dist/cjs/types/index.js.map +1 -0
  23. package/dist/cjs/types/v1/index.d.ts +1 -0
  24. package/dist/cjs/types/v1/index.js +19 -0
  25. package/dist/cjs/types/v1/index.js.map +1 -0
  26. package/dist/cjs/utils/index.d.ts +77 -0
  27. package/dist/cjs/utils/index.js +179 -0
  28. package/dist/cjs/utils/index.js.map +1 -0
  29. package/dist/cjs/x402Client-BgegfQgE.d.ts +1807 -0
  30. package/dist/cjs/x402Client-TQHctrG7.d.ts +1807 -0
  31. package/dist/esm/chunk-ABS7D6VX.mjs +145 -0
  32. package/dist/esm/chunk-ABS7D6VX.mjs.map +1 -0
  33. package/dist/esm/chunk-AGOUMC4P.mjs +68 -0
  34. package/dist/esm/chunk-AGOUMC4P.mjs.map +1 -0
  35. package/dist/esm/chunk-BJTO5JO5.mjs +11 -0
  36. package/dist/esm/chunk-BJTO5JO5.mjs.map +1 -0
  37. package/dist/esm/chunk-FPXAE3OS.mjs +161 -0
  38. package/dist/esm/chunk-FPXAE3OS.mjs.map +1 -0
  39. package/dist/esm/chunk-IL77TMJL.mjs +1275 -0
  40. package/dist/esm/chunk-IL77TMJL.mjs.map +1 -0
  41. package/dist/esm/chunk-VE37GDG2.mjs +7 -0
  42. package/dist/esm/chunk-VE37GDG2.mjs.map +1 -0
  43. package/dist/esm/client/index.d.mts +149 -0
  44. package/dist/esm/client/index.mjs +504 -0
  45. package/dist/esm/client/index.mjs.map +1 -0
  46. package/dist/esm/facilitator/index.d.mts +206 -0
  47. package/dist/esm/facilitator/index.mjs +399 -0
  48. package/dist/esm/facilitator/index.mjs.map +1 -0
  49. package/dist/esm/http/index.d.mts +50 -0
  50. package/dist/esm/http/index.mjs +35 -0
  51. package/dist/esm/http/index.mjs.map +1 -0
  52. package/dist/esm/index.d.mts +3 -0
  53. package/dist/esm/index.mjs +8 -0
  54. package/dist/esm/index.mjs.map +1 -0
  55. package/dist/esm/schemas/index.d.mts +891 -0
  56. package/dist/esm/schemas/index.mjs +70 -0
  57. package/dist/esm/schemas/index.mjs.map +1 -0
  58. package/dist/esm/server/index.d.mts +79 -0
  59. package/dist/esm/server/index.mjs +1318 -0
  60. package/dist/esm/server/index.mjs.map +1 -0
  61. package/dist/esm/types/index.d.mts +1 -0
  62. package/dist/esm/types/index.mjs +14 -0
  63. package/dist/esm/types/index.mjs.map +1 -0
  64. package/dist/esm/types/v1/index.d.mts +1 -0
  65. package/dist/esm/types/v1/index.mjs +1 -0
  66. package/dist/esm/types/v1/index.mjs.map +1 -0
  67. package/dist/esm/utils/index.d.mts +77 -0
  68. package/dist/esm/utils/index.mjs +28 -0
  69. package/dist/esm/utils/index.mjs.map +1 -0
  70. package/dist/esm/x402Client-BgegfQgE.d.mts +1807 -0
  71. package/dist/esm/x402Client-TQHctrG7.d.mts +1807 -0
  72. package/package.json +142 -0
@@ -0,0 +1,206 @@
1
+ import { P as PaymentPayload, a as PaymentRequirements, V as VerifyResponse, S as SettleResponse, N as Network, b as SchemeNetworkFacilitator, F as FacilitatorExtension } from '../x402Client-TQHctrG7.mjs';
2
+
3
+ /**
4
+ * Facilitator Hook Context Interfaces
5
+ */
6
+ interface FacilitatorVerifyContext {
7
+ paymentPayload: PaymentPayload;
8
+ requirements: PaymentRequirements;
9
+ }
10
+ interface FacilitatorVerifyResultContext extends FacilitatorVerifyContext {
11
+ result: VerifyResponse;
12
+ }
13
+ interface FacilitatorVerifyFailureContext extends FacilitatorVerifyContext {
14
+ error: Error;
15
+ }
16
+ interface FacilitatorSettleContext {
17
+ paymentPayload: PaymentPayload;
18
+ requirements: PaymentRequirements;
19
+ }
20
+ interface FacilitatorSettleResultContext extends FacilitatorSettleContext {
21
+ result: SettleResponse;
22
+ }
23
+ interface FacilitatorSettleFailureContext extends FacilitatorSettleContext {
24
+ error: Error;
25
+ }
26
+ /**
27
+ * Facilitator Hook Type Definitions
28
+ */
29
+ type FacilitatorBeforeVerifyHook = (context: FacilitatorVerifyContext) => Promise<void | {
30
+ abort: true;
31
+ reason: string;
32
+ }>;
33
+ type FacilitatorAfterVerifyHook = (context: FacilitatorVerifyResultContext) => Promise<void>;
34
+ type FacilitatorOnVerifyFailureHook = (context: FacilitatorVerifyFailureContext) => Promise<void | {
35
+ recovered: true;
36
+ result: VerifyResponse;
37
+ }>;
38
+ type FacilitatorBeforeSettleHook = (context: FacilitatorSettleContext) => Promise<void | {
39
+ abort: true;
40
+ reason: string;
41
+ }>;
42
+ type FacilitatorAfterSettleHook = (context: FacilitatorSettleResultContext) => Promise<void>;
43
+ type FacilitatorOnSettleFailureHook = (context: FacilitatorSettleFailureContext) => Promise<void | {
44
+ recovered: true;
45
+ result: SettleResponse;
46
+ }>;
47
+ /**
48
+ * Facilitator client for the x402 payment protocol.
49
+ * Manages payment scheme registration, verification, and settlement.
50
+ */
51
+ declare class x402Facilitator {
52
+ private readonly registeredFacilitatorSchemes;
53
+ private readonly extensions;
54
+ private beforeVerifyHooks;
55
+ private afterVerifyHooks;
56
+ private onVerifyFailureHooks;
57
+ private beforeSettleHooks;
58
+ private afterSettleHooks;
59
+ private onSettleFailureHooks;
60
+ /**
61
+ * Registers a scheme facilitator for the current x402 version.
62
+ * Networks are stored and used for getSupported() - no need to specify them later.
63
+ *
64
+ * @param networks - Single network or array of networks this facilitator supports
65
+ * @param facilitator - The scheme network facilitator to register
66
+ * @returns The x402Facilitator instance for chaining
67
+ */
68
+ register(networks: Network | Network[], facilitator: SchemeNetworkFacilitator): x402Facilitator;
69
+ /**
70
+ * Registers a scheme facilitator for x402 version 1.
71
+ * Networks are stored and used for getSupported() - no need to specify them later.
72
+ *
73
+ * @param networks - Single network or array of networks this facilitator supports
74
+ * @param facilitator - The scheme network facilitator to register
75
+ * @returns The x402Facilitator instance for chaining
76
+ */
77
+ registerV1(networks: Network | Network[], facilitator: SchemeNetworkFacilitator): x402Facilitator;
78
+ /**
79
+ * Registers a protocol extension.
80
+ *
81
+ * @param extension - The extension object to register
82
+ * @returns The x402Facilitator instance for chaining
83
+ */
84
+ registerExtension(extension: FacilitatorExtension): x402Facilitator;
85
+ /**
86
+ * Gets the list of registered extension keys.
87
+ *
88
+ * @returns Array of extension key strings
89
+ */
90
+ getExtensions(): string[];
91
+ /**
92
+ * Gets a registered extension by key.
93
+ *
94
+ * @param key - The extension key to look up
95
+ * @returns The extension object, or undefined if not registered
96
+ */
97
+ getExtension<T extends FacilitatorExtension = FacilitatorExtension>(key: string): T | undefined;
98
+ /**
99
+ * Register a hook to execute before facilitator payment verification.
100
+ * Can abort verification by returning { abort: true, reason: string }
101
+ *
102
+ * @param hook - The hook function to register
103
+ * @returns The x402Facilitator instance for chaining
104
+ */
105
+ onBeforeVerify(hook: FacilitatorBeforeVerifyHook): x402Facilitator;
106
+ /**
107
+ * Register a hook to execute after successful facilitator payment verification (isValid: true).
108
+ * This hook is NOT called when verification fails (isValid: false) - use onVerifyFailure for that.
109
+ *
110
+ * @param hook - The hook function to register
111
+ * @returns The x402Facilitator instance for chaining
112
+ */
113
+ onAfterVerify(hook: FacilitatorAfterVerifyHook): x402Facilitator;
114
+ /**
115
+ * Register a hook to execute when facilitator payment verification fails.
116
+ * Called when: verification returns isValid: false, or an exception is thrown during verification.
117
+ * Can recover from failure by returning { recovered: true, result: VerifyResponse }
118
+ *
119
+ * @param hook - The hook function to register
120
+ * @returns The x402Facilitator instance for chaining
121
+ */
122
+ onVerifyFailure(hook: FacilitatorOnVerifyFailureHook): x402Facilitator;
123
+ /**
124
+ * Register a hook to execute before facilitator payment settlement.
125
+ * Can abort settlement by returning { abort: true, reason: string }
126
+ *
127
+ * @param hook - The hook function to register
128
+ * @returns The x402Facilitator instance for chaining
129
+ */
130
+ onBeforeSettle(hook: FacilitatorBeforeSettleHook): x402Facilitator;
131
+ /**
132
+ * Register a hook to execute after successful facilitator payment settlement.
133
+ *
134
+ * @param hook - The hook function to register
135
+ * @returns The x402Facilitator instance for chaining
136
+ */
137
+ onAfterSettle(hook: FacilitatorAfterSettleHook): x402Facilitator;
138
+ /**
139
+ * Register a hook to execute when facilitator payment settlement fails.
140
+ * Can recover from failure by returning { recovered: true, result: SettleResponse }
141
+ *
142
+ * @param hook - The hook function to register
143
+ * @returns The x402Facilitator instance for chaining
144
+ */
145
+ onSettleFailure(hook: FacilitatorOnSettleFailureHook): x402Facilitator;
146
+ /**
147
+ * Gets supported payment kinds, extensions, and signers.
148
+ * Uses networks registered during register() calls - no parameters needed.
149
+ * Returns flat array format for backward compatibility with V1 clients.
150
+ *
151
+ * @returns Supported response with kinds as array (with version in each element), extensions, and signers
152
+ */
153
+ getSupported(): {
154
+ kinds: Array<{
155
+ x402Version: number;
156
+ scheme: string;
157
+ network: string;
158
+ extra?: Record<string, unknown>;
159
+ }>;
160
+ extensions: string[];
161
+ signers: Record<string, string[]>;
162
+ };
163
+ /**
164
+ * Verifies a payment payload against requirements.
165
+ *
166
+ * @param paymentPayload - The payment payload to verify
167
+ * @param paymentRequirements - The payment requirements to verify against
168
+ * @returns Promise resolving to the verification response
169
+ */
170
+ verify(paymentPayload: PaymentPayload, paymentRequirements: PaymentRequirements): Promise<VerifyResponse>;
171
+ /**
172
+ * Settles a payment based on the payload and requirements.
173
+ *
174
+ * @param paymentPayload - The payment payload to settle
175
+ * @param paymentRequirements - The payment requirements for settlement
176
+ * @returns Promise resolving to the settlement response
177
+ */
178
+ settle(paymentPayload: PaymentPayload, paymentRequirements: PaymentRequirements): Promise<SettleResponse>;
179
+ /**
180
+ * Builds a FacilitatorContext from the registered extensions map.
181
+ * Passed to mechanism verify/settle so they can access extension capabilities.
182
+ *
183
+ * @returns A FacilitatorContext backed by this facilitator's registered extensions
184
+ */
185
+ private buildFacilitatorContext;
186
+ /**
187
+ * Internal method to register a scheme facilitator.
188
+ *
189
+ * @param x402Version - The x402 protocol version
190
+ * @param networks - Array of concrete networks this facilitator supports
191
+ * @param facilitator - The scheme network facilitator to register
192
+ * @returns The x402Facilitator instance for chaining
193
+ */
194
+ private _registerScheme;
195
+ /**
196
+ * Derives a wildcard pattern from an array of networks.
197
+ * If all networks share the same namespace, returns wildcard pattern.
198
+ * Otherwise returns the first network for exact matching.
199
+ *
200
+ * @param networks - Array of networks
201
+ * @returns Derived pattern for matching
202
+ */
203
+ private derivePattern;
204
+ }
205
+
206
+ export { type FacilitatorAfterSettleHook, type FacilitatorAfterVerifyHook, type FacilitatorBeforeSettleHook, type FacilitatorBeforeVerifyHook, type FacilitatorOnSettleFailureHook, type FacilitatorOnVerifyFailureHook, type FacilitatorSettleContext, type FacilitatorSettleFailureContext, type FacilitatorSettleResultContext, type FacilitatorVerifyContext, type FacilitatorVerifyFailureContext, type FacilitatorVerifyResultContext, x402Facilitator };
@@ -0,0 +1,399 @@
1
+ import {
2
+ x402Version
3
+ } from "../chunk-VE37GDG2.mjs";
4
+ import {
5
+ networkMatchesPattern
6
+ } from "../chunk-ABS7D6VX.mjs";
7
+ import "../chunk-BJTO5JO5.mjs";
8
+
9
+ // src/facilitator/x402Facilitator.ts
10
+ var x402Facilitator = class {
11
+ constructor() {
12
+ this.registeredFacilitatorSchemes = /* @__PURE__ */ new Map();
13
+ this.extensions = /* @__PURE__ */ new Map();
14
+ this.beforeVerifyHooks = [];
15
+ this.afterVerifyHooks = [];
16
+ this.onVerifyFailureHooks = [];
17
+ this.beforeSettleHooks = [];
18
+ this.afterSettleHooks = [];
19
+ this.onSettleFailureHooks = [];
20
+ }
21
+ /**
22
+ * Registers a scheme facilitator for the current x402 version.
23
+ * Networks are stored and used for getSupported() - no need to specify them later.
24
+ *
25
+ * @param networks - Single network or array of networks this facilitator supports
26
+ * @param facilitator - The scheme network facilitator to register
27
+ * @returns The x402Facilitator instance for chaining
28
+ */
29
+ register(networks, facilitator) {
30
+ const networksArray = Array.isArray(networks) ? networks : [networks];
31
+ return this._registerScheme(x402Version, networksArray, facilitator);
32
+ }
33
+ /**
34
+ * Registers a scheme facilitator for x402 version 1.
35
+ * Networks are stored and used for getSupported() - no need to specify them later.
36
+ *
37
+ * @param networks - Single network or array of networks this facilitator supports
38
+ * @param facilitator - The scheme network facilitator to register
39
+ * @returns The x402Facilitator instance for chaining
40
+ */
41
+ registerV1(networks, facilitator) {
42
+ const networksArray = Array.isArray(networks) ? networks : [networks];
43
+ return this._registerScheme(1, networksArray, facilitator);
44
+ }
45
+ /**
46
+ * Registers a protocol extension.
47
+ *
48
+ * @param extension - The extension object to register
49
+ * @returns The x402Facilitator instance for chaining
50
+ */
51
+ registerExtension(extension) {
52
+ this.extensions.set(extension.key, extension);
53
+ return this;
54
+ }
55
+ /**
56
+ * Gets the list of registered extension keys.
57
+ *
58
+ * @returns Array of extension key strings
59
+ */
60
+ getExtensions() {
61
+ return Array.from(this.extensions.keys());
62
+ }
63
+ /**
64
+ * Gets a registered extension by key.
65
+ *
66
+ * @param key - The extension key to look up
67
+ * @returns The extension object, or undefined if not registered
68
+ */
69
+ getExtension(key) {
70
+ return this.extensions.get(key);
71
+ }
72
+ /**
73
+ * Register a hook to execute before facilitator payment verification.
74
+ * Can abort verification by returning { abort: true, reason: string }
75
+ *
76
+ * @param hook - The hook function to register
77
+ * @returns The x402Facilitator instance for chaining
78
+ */
79
+ onBeforeVerify(hook) {
80
+ this.beforeVerifyHooks.push(hook);
81
+ return this;
82
+ }
83
+ /**
84
+ * Register a hook to execute after successful facilitator payment verification (isValid: true).
85
+ * This hook is NOT called when verification fails (isValid: false) - use onVerifyFailure for that.
86
+ *
87
+ * @param hook - The hook function to register
88
+ * @returns The x402Facilitator instance for chaining
89
+ */
90
+ onAfterVerify(hook) {
91
+ this.afterVerifyHooks.push(hook);
92
+ return this;
93
+ }
94
+ /**
95
+ * Register a hook to execute when facilitator payment verification fails.
96
+ * Called when: verification returns isValid: false, or an exception is thrown during verification.
97
+ * Can recover from failure by returning { recovered: true, result: VerifyResponse }
98
+ *
99
+ * @param hook - The hook function to register
100
+ * @returns The x402Facilitator instance for chaining
101
+ */
102
+ onVerifyFailure(hook) {
103
+ this.onVerifyFailureHooks.push(hook);
104
+ return this;
105
+ }
106
+ /**
107
+ * Register a hook to execute before facilitator payment settlement.
108
+ * Can abort settlement by returning { abort: true, reason: string }
109
+ *
110
+ * @param hook - The hook function to register
111
+ * @returns The x402Facilitator instance for chaining
112
+ */
113
+ onBeforeSettle(hook) {
114
+ this.beforeSettleHooks.push(hook);
115
+ return this;
116
+ }
117
+ /**
118
+ * Register a hook to execute after successful facilitator payment settlement.
119
+ *
120
+ * @param hook - The hook function to register
121
+ * @returns The x402Facilitator instance for chaining
122
+ */
123
+ onAfterSettle(hook) {
124
+ this.afterSettleHooks.push(hook);
125
+ return this;
126
+ }
127
+ /**
128
+ * Register a hook to execute when facilitator payment settlement fails.
129
+ * Can recover from failure by returning { recovered: true, result: SettleResponse }
130
+ *
131
+ * @param hook - The hook function to register
132
+ * @returns The x402Facilitator instance for chaining
133
+ */
134
+ onSettleFailure(hook) {
135
+ this.onSettleFailureHooks.push(hook);
136
+ return this;
137
+ }
138
+ /**
139
+ * Gets supported payment kinds, extensions, and signers.
140
+ * Uses networks registered during register() calls - no parameters needed.
141
+ * Returns flat array format for backward compatibility with V1 clients.
142
+ *
143
+ * @returns Supported response with kinds as array (with version in each element), extensions, and signers
144
+ */
145
+ getSupported() {
146
+ const kinds = [];
147
+ const signersByFamily = {};
148
+ for (const [version, schemeDataArray] of this.registeredFacilitatorSchemes) {
149
+ for (const schemeData of schemeDataArray) {
150
+ const { facilitator, networks } = schemeData;
151
+ const scheme = facilitator.scheme;
152
+ for (const network of networks) {
153
+ const extra = facilitator.getExtra(network);
154
+ kinds.push({
155
+ x402Version: version,
156
+ scheme,
157
+ network,
158
+ ...extra && { extra }
159
+ });
160
+ const family = facilitator.caipFamily;
161
+ if (!signersByFamily[family]) {
162
+ signersByFamily[family] = /* @__PURE__ */ new Set();
163
+ }
164
+ facilitator.getSigners(network).forEach((signer) => signersByFamily[family].add(signer));
165
+ }
166
+ }
167
+ }
168
+ const signers = {};
169
+ for (const [family, signerSet] of Object.entries(signersByFamily)) {
170
+ signers[family] = Array.from(signerSet);
171
+ }
172
+ return {
173
+ kinds,
174
+ extensions: this.getExtensions(),
175
+ signers
176
+ };
177
+ }
178
+ /**
179
+ * Verifies a payment payload against requirements.
180
+ *
181
+ * @param paymentPayload - The payment payload to verify
182
+ * @param paymentRequirements - The payment requirements to verify against
183
+ * @returns Promise resolving to the verification response
184
+ */
185
+ async verify(paymentPayload, paymentRequirements) {
186
+ const context = {
187
+ paymentPayload,
188
+ requirements: paymentRequirements
189
+ };
190
+ for (const hook of this.beforeVerifyHooks) {
191
+ const result = await hook(context);
192
+ if (result && "abort" in result && result.abort) {
193
+ return {
194
+ isValid: false,
195
+ invalidReason: result.reason
196
+ };
197
+ }
198
+ }
199
+ try {
200
+ const schemeDataArray = this.registeredFacilitatorSchemes.get(paymentPayload.x402Version);
201
+ if (!schemeDataArray) {
202
+ throw new Error(
203
+ `No facilitator registered for x402 version: ${paymentPayload.x402Version}`
204
+ );
205
+ }
206
+ let schemeNetworkFacilitator;
207
+ for (const schemeData of schemeDataArray) {
208
+ if (schemeData.facilitator.scheme === paymentRequirements.scheme) {
209
+ if (schemeData.networks.has(paymentRequirements.network)) {
210
+ schemeNetworkFacilitator = schemeData.facilitator;
211
+ break;
212
+ }
213
+ if (networkMatchesPattern(schemeData.pattern, paymentRequirements.network)) {
214
+ schemeNetworkFacilitator = schemeData.facilitator;
215
+ break;
216
+ }
217
+ }
218
+ }
219
+ if (!schemeNetworkFacilitator) {
220
+ throw new Error(
221
+ `No facilitator registered for scheme: ${paymentRequirements.scheme} and network: ${paymentRequirements.network}`
222
+ );
223
+ }
224
+ const facilitatorContext = this.buildFacilitatorContext();
225
+ const verifyResult = await schemeNetworkFacilitator.verify(
226
+ paymentPayload,
227
+ paymentRequirements,
228
+ facilitatorContext
229
+ );
230
+ if (!verifyResult.isValid) {
231
+ const failureContext = {
232
+ ...context,
233
+ error: new Error(verifyResult.invalidReason || "Verification failed")
234
+ };
235
+ for (const hook of this.onVerifyFailureHooks) {
236
+ const result = await hook(failureContext);
237
+ if (result && "recovered" in result && result.recovered) {
238
+ const recoveredContext = {
239
+ ...context,
240
+ result: result.result
241
+ };
242
+ for (const hook2 of this.afterVerifyHooks) {
243
+ await hook2(recoveredContext);
244
+ }
245
+ return result.result;
246
+ }
247
+ }
248
+ return verifyResult;
249
+ }
250
+ const resultContext = {
251
+ ...context,
252
+ result: verifyResult
253
+ };
254
+ for (const hook of this.afterVerifyHooks) {
255
+ await hook(resultContext);
256
+ }
257
+ return verifyResult;
258
+ } catch (error) {
259
+ const failureContext = {
260
+ ...context,
261
+ error
262
+ };
263
+ for (const hook of this.onVerifyFailureHooks) {
264
+ const result = await hook(failureContext);
265
+ if (result && "recovered" in result && result.recovered) {
266
+ return result.result;
267
+ }
268
+ }
269
+ throw error;
270
+ }
271
+ }
272
+ /**
273
+ * Settles a payment based on the payload and requirements.
274
+ *
275
+ * @param paymentPayload - The payment payload to settle
276
+ * @param paymentRequirements - The payment requirements for settlement
277
+ * @returns Promise resolving to the settlement response
278
+ */
279
+ async settle(paymentPayload, paymentRequirements) {
280
+ const context = {
281
+ paymentPayload,
282
+ requirements: paymentRequirements
283
+ };
284
+ for (const hook of this.beforeSettleHooks) {
285
+ const result = await hook(context);
286
+ if (result && "abort" in result && result.abort) {
287
+ throw new Error(`Settlement aborted: ${result.reason}`);
288
+ }
289
+ }
290
+ try {
291
+ const schemeDataArray = this.registeredFacilitatorSchemes.get(paymentPayload.x402Version);
292
+ if (!schemeDataArray) {
293
+ throw new Error(
294
+ `No facilitator registered for x402 version: ${paymentPayload.x402Version}`
295
+ );
296
+ }
297
+ let schemeNetworkFacilitator;
298
+ for (const schemeData of schemeDataArray) {
299
+ if (schemeData.facilitator.scheme === paymentRequirements.scheme) {
300
+ if (schemeData.networks.has(paymentRequirements.network)) {
301
+ schemeNetworkFacilitator = schemeData.facilitator;
302
+ break;
303
+ }
304
+ if (networkMatchesPattern(schemeData.pattern, paymentRequirements.network)) {
305
+ schemeNetworkFacilitator = schemeData.facilitator;
306
+ break;
307
+ }
308
+ }
309
+ }
310
+ if (!schemeNetworkFacilitator) {
311
+ throw new Error(
312
+ `No facilitator registered for scheme: ${paymentRequirements.scheme} and network: ${paymentRequirements.network}`
313
+ );
314
+ }
315
+ const facilitatorContext = this.buildFacilitatorContext();
316
+ const settleResult = await schemeNetworkFacilitator.settle(
317
+ paymentPayload,
318
+ paymentRequirements,
319
+ facilitatorContext
320
+ );
321
+ const resultContext = {
322
+ ...context,
323
+ result: settleResult
324
+ };
325
+ for (const hook of this.afterSettleHooks) {
326
+ await hook(resultContext);
327
+ }
328
+ return settleResult;
329
+ } catch (error) {
330
+ const failureContext = {
331
+ ...context,
332
+ error
333
+ };
334
+ for (const hook of this.onSettleFailureHooks) {
335
+ const result = await hook(failureContext);
336
+ if (result && "recovered" in result && result.recovered) {
337
+ return result.result;
338
+ }
339
+ }
340
+ throw error;
341
+ }
342
+ }
343
+ /**
344
+ * Builds a FacilitatorContext from the registered extensions map.
345
+ * Passed to mechanism verify/settle so they can access extension capabilities.
346
+ *
347
+ * @returns A FacilitatorContext backed by this facilitator's registered extensions
348
+ */
349
+ buildFacilitatorContext() {
350
+ const extensionsMap = this.extensions;
351
+ return {
352
+ getExtension(key) {
353
+ return extensionsMap.get(key);
354
+ }
355
+ };
356
+ }
357
+ /**
358
+ * Internal method to register a scheme facilitator.
359
+ *
360
+ * @param x402Version - The x402 protocol version
361
+ * @param networks - Array of concrete networks this facilitator supports
362
+ * @param facilitator - The scheme network facilitator to register
363
+ * @returns The x402Facilitator instance for chaining
364
+ */
365
+ _registerScheme(x402Version2, networks, facilitator) {
366
+ if (!this.registeredFacilitatorSchemes.has(x402Version2)) {
367
+ this.registeredFacilitatorSchemes.set(x402Version2, []);
368
+ }
369
+ const schemeDataArray = this.registeredFacilitatorSchemes.get(x402Version2);
370
+ schemeDataArray.push({
371
+ facilitator,
372
+ networks: new Set(networks),
373
+ pattern: this.derivePattern(networks)
374
+ });
375
+ return this;
376
+ }
377
+ /**
378
+ * Derives a wildcard pattern from an array of networks.
379
+ * If all networks share the same namespace, returns wildcard pattern.
380
+ * Otherwise returns the first network for exact matching.
381
+ *
382
+ * @param networks - Array of networks
383
+ * @returns Derived pattern for matching
384
+ */
385
+ derivePattern(networks) {
386
+ if (networks.length === 0) return "";
387
+ if (networks.length === 1) return networks[0];
388
+ const namespaces = networks.map((n) => n.split(":")[0]);
389
+ const uniqueNamespaces = new Set(namespaces);
390
+ if (uniqueNamespaces.size === 1) {
391
+ return `${namespaces[0]}:*`;
392
+ }
393
+ return networks[0];
394
+ }
395
+ };
396
+ export {
397
+ x402Facilitator
398
+ };
399
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/facilitator/x402Facilitator.ts"],"sourcesContent":["import { x402Version } from \"..\";\nimport { SettleResponse, VerifyResponse } from \"../types/facilitator\";\nimport { FacilitatorExtension } from \"../types/extensions\";\nimport { SchemeNetworkFacilitator, FacilitatorContext } from \"../types/mechanisms\";\nimport { PaymentPayload, PaymentRequirements } from \"../types/payments\";\nimport { Network } from \"../types\";\nimport { networkMatchesPattern, type SchemeData } from \"../utils\";\n\n/**\n * Facilitator Hook Context Interfaces\n */\n\nexport interface FacilitatorVerifyContext {\n paymentPayload: PaymentPayload;\n requirements: PaymentRequirements;\n}\n\nexport interface FacilitatorVerifyResultContext extends FacilitatorVerifyContext {\n result: VerifyResponse;\n}\n\nexport interface FacilitatorVerifyFailureContext extends FacilitatorVerifyContext {\n error: Error;\n}\n\nexport interface FacilitatorSettleContext {\n paymentPayload: PaymentPayload;\n requirements: PaymentRequirements;\n}\n\nexport interface FacilitatorSettleResultContext extends FacilitatorSettleContext {\n result: SettleResponse;\n}\n\nexport interface FacilitatorSettleFailureContext extends FacilitatorSettleContext {\n error: Error;\n}\n\n/**\n * Facilitator Hook Type Definitions\n */\n\nexport type FacilitatorBeforeVerifyHook = (\n context: FacilitatorVerifyContext,\n) => Promise<void | { abort: true; reason: string }>;\n\nexport type FacilitatorAfterVerifyHook = (context: FacilitatorVerifyResultContext) => Promise<void>;\n\nexport type FacilitatorOnVerifyFailureHook = (\n context: FacilitatorVerifyFailureContext,\n) => Promise<void | { recovered: true; result: VerifyResponse }>;\n\nexport type FacilitatorBeforeSettleHook = (\n context: FacilitatorSettleContext,\n) => Promise<void | { abort: true; reason: string }>;\n\nexport type FacilitatorAfterSettleHook = (context: FacilitatorSettleResultContext) => Promise<void>;\n\nexport type FacilitatorOnSettleFailureHook = (\n context: FacilitatorSettleFailureContext,\n) => Promise<void | { recovered: true; result: SettleResponse }>;\n\n/**\n * Facilitator client for the x402 payment protocol.\n * Manages payment scheme registration, verification, and settlement.\n */\nexport class x402Facilitator {\n private readonly registeredFacilitatorSchemes: Map<\n number,\n SchemeData<SchemeNetworkFacilitator>[] // Array to support multiple facilitators per version\n > = new Map();\n private readonly extensions: Map<string, FacilitatorExtension> = new Map();\n\n private beforeVerifyHooks: FacilitatorBeforeVerifyHook[] = [];\n private afterVerifyHooks: FacilitatorAfterVerifyHook[] = [];\n private onVerifyFailureHooks: FacilitatorOnVerifyFailureHook[] = [];\n private beforeSettleHooks: FacilitatorBeforeSettleHook[] = [];\n private afterSettleHooks: FacilitatorAfterSettleHook[] = [];\n private onSettleFailureHooks: FacilitatorOnSettleFailureHook[] = [];\n\n /**\n * Registers a scheme facilitator for the current x402 version.\n * Networks are stored and used for getSupported() - no need to specify them later.\n *\n * @param networks - Single network or array of networks this facilitator supports\n * @param facilitator - The scheme network facilitator to register\n * @returns The x402Facilitator instance for chaining\n */\n register(networks: Network | Network[], facilitator: SchemeNetworkFacilitator): x402Facilitator {\n const networksArray = Array.isArray(networks) ? networks : [networks];\n return this._registerScheme(x402Version, networksArray, facilitator);\n }\n\n /**\n * Registers a scheme facilitator for x402 version 1.\n * Networks are stored and used for getSupported() - no need to specify them later.\n *\n * @param networks - Single network or array of networks this facilitator supports\n * @param facilitator - The scheme network facilitator to register\n * @returns The x402Facilitator instance for chaining\n */\n registerV1(\n networks: Network | Network[],\n facilitator: SchemeNetworkFacilitator,\n ): x402Facilitator {\n const networksArray = Array.isArray(networks) ? networks : [networks];\n return this._registerScheme(1, networksArray, facilitator);\n }\n\n /**\n * Registers a protocol extension.\n *\n * @param extension - The extension object to register\n * @returns The x402Facilitator instance for chaining\n */\n registerExtension(extension: FacilitatorExtension): x402Facilitator {\n this.extensions.set(extension.key, extension);\n return this;\n }\n\n /**\n * Gets the list of registered extension keys.\n *\n * @returns Array of extension key strings\n */\n getExtensions(): string[] {\n return Array.from(this.extensions.keys());\n }\n\n /**\n * Gets a registered extension by key.\n *\n * @param key - The extension key to look up\n * @returns The extension object, or undefined if not registered\n */\n getExtension<T extends FacilitatorExtension = FacilitatorExtension>(key: string): T | undefined {\n return this.extensions.get(key) as T | undefined;\n }\n\n /**\n * Register a hook to execute before facilitator payment verification.\n * Can abort verification by returning { abort: true, reason: string }\n *\n * @param hook - The hook function to register\n * @returns The x402Facilitator instance for chaining\n */\n onBeforeVerify(hook: FacilitatorBeforeVerifyHook): x402Facilitator {\n this.beforeVerifyHooks.push(hook);\n return this;\n }\n\n /**\n * Register a hook to execute after successful facilitator payment verification (isValid: true).\n * This hook is NOT called when verification fails (isValid: false) - use onVerifyFailure for that.\n *\n * @param hook - The hook function to register\n * @returns The x402Facilitator instance for chaining\n */\n onAfterVerify(hook: FacilitatorAfterVerifyHook): x402Facilitator {\n this.afterVerifyHooks.push(hook);\n return this;\n }\n\n /**\n * Register a hook to execute when facilitator payment verification fails.\n * Called when: verification returns isValid: false, or an exception is thrown during verification.\n * Can recover from failure by returning { recovered: true, result: VerifyResponse }\n *\n * @param hook - The hook function to register\n * @returns The x402Facilitator instance for chaining\n */\n onVerifyFailure(hook: FacilitatorOnVerifyFailureHook): x402Facilitator {\n this.onVerifyFailureHooks.push(hook);\n return this;\n }\n\n /**\n * Register a hook to execute before facilitator payment settlement.\n * Can abort settlement by returning { abort: true, reason: string }\n *\n * @param hook - The hook function to register\n * @returns The x402Facilitator instance for chaining\n */\n onBeforeSettle(hook: FacilitatorBeforeSettleHook): x402Facilitator {\n this.beforeSettleHooks.push(hook);\n return this;\n }\n\n /**\n * Register a hook to execute after successful facilitator payment settlement.\n *\n * @param hook - The hook function to register\n * @returns The x402Facilitator instance for chaining\n */\n onAfterSettle(hook: FacilitatorAfterSettleHook): x402Facilitator {\n this.afterSettleHooks.push(hook);\n return this;\n }\n\n /**\n * Register a hook to execute when facilitator payment settlement fails.\n * Can recover from failure by returning { recovered: true, result: SettleResponse }\n *\n * @param hook - The hook function to register\n * @returns The x402Facilitator instance for chaining\n */\n onSettleFailure(hook: FacilitatorOnSettleFailureHook): x402Facilitator {\n this.onSettleFailureHooks.push(hook);\n return this;\n }\n\n /**\n * Gets supported payment kinds, extensions, and signers.\n * Uses networks registered during register() calls - no parameters needed.\n * Returns flat array format for backward compatibility with V1 clients.\n *\n * @returns Supported response with kinds as array (with version in each element), extensions, and signers\n */\n getSupported(): {\n kinds: Array<{\n x402Version: number;\n scheme: string;\n network: string;\n extra?: Record<string, unknown>;\n }>;\n extensions: string[];\n signers: Record<string, string[]>;\n } {\n const kinds: Array<{\n x402Version: number;\n scheme: string;\n network: string;\n extra?: Record<string, unknown>;\n }> = [];\n const signersByFamily: Record<string, Set<string>> = {};\n\n // Iterate over registered scheme data (array supports multiple facilitators per version)\n for (const [version, schemeDataArray] of this.registeredFacilitatorSchemes) {\n for (const schemeData of schemeDataArray) {\n const { facilitator, networks } = schemeData;\n const scheme = facilitator.scheme;\n\n // Iterate over stored concrete networks\n for (const network of networks) {\n const extra = facilitator.getExtra(network);\n kinds.push({\n x402Version: version,\n scheme,\n network,\n ...(extra && { extra }),\n });\n\n // Collect signers by CAIP family for this network\n const family = facilitator.caipFamily;\n if (!signersByFamily[family]) {\n signersByFamily[family] = new Set();\n }\n facilitator.getSigners(network).forEach(signer => signersByFamily[family].add(signer));\n }\n }\n }\n\n // Convert signer sets to arrays\n const signers: Record<string, string[]> = {};\n for (const [family, signerSet] of Object.entries(signersByFamily)) {\n signers[family] = Array.from(signerSet);\n }\n\n return {\n kinds,\n extensions: this.getExtensions(),\n signers,\n };\n }\n\n /**\n * Verifies a payment payload against requirements.\n *\n * @param paymentPayload - The payment payload to verify\n * @param paymentRequirements - The payment requirements to verify against\n * @returns Promise resolving to the verification response\n */\n async verify(\n paymentPayload: PaymentPayload,\n paymentRequirements: PaymentRequirements,\n ): Promise<VerifyResponse> {\n const context: FacilitatorVerifyContext = {\n paymentPayload,\n requirements: paymentRequirements,\n };\n\n // Execute beforeVerify hooks\n for (const hook of this.beforeVerifyHooks) {\n const result = await hook(context);\n if (result && \"abort\" in result && result.abort) {\n return {\n isValid: false,\n invalidReason: result.reason,\n };\n }\n }\n\n try {\n const schemeDataArray = this.registeredFacilitatorSchemes.get(paymentPayload.x402Version);\n if (!schemeDataArray) {\n throw new Error(\n `No facilitator registered for x402 version: ${paymentPayload.x402Version}`,\n );\n }\n\n // Find matching facilitator from array\n let schemeNetworkFacilitator: SchemeNetworkFacilitator | undefined;\n for (const schemeData of schemeDataArray) {\n if (schemeData.facilitator.scheme === paymentRequirements.scheme) {\n // Check if network matches\n if (schemeData.networks.has(paymentRequirements.network)) {\n schemeNetworkFacilitator = schemeData.facilitator;\n break;\n }\n // Try pattern matching\n if (networkMatchesPattern(schemeData.pattern, paymentRequirements.network)) {\n schemeNetworkFacilitator = schemeData.facilitator;\n break;\n }\n }\n }\n\n if (!schemeNetworkFacilitator) {\n throw new Error(\n `No facilitator registered for scheme: ${paymentRequirements.scheme} and network: ${paymentRequirements.network}`,\n );\n }\n\n const facilitatorContext = this.buildFacilitatorContext();\n const verifyResult = await schemeNetworkFacilitator.verify(\n paymentPayload,\n paymentRequirements,\n facilitatorContext,\n );\n\n // Check if verification failed (isValid: false)\n if (!verifyResult.isValid) {\n const failureContext: FacilitatorVerifyFailureContext = {\n ...context,\n error: new Error(verifyResult.invalidReason || \"Verification failed\"),\n };\n\n // Execute onVerifyFailure hooks\n for (const hook of this.onVerifyFailureHooks) {\n const result = await hook(failureContext);\n if (result && \"recovered\" in result && result.recovered) {\n // If recovered, execute afterVerify hooks with recovered result\n const recoveredContext: FacilitatorVerifyResultContext = {\n ...context,\n result: result.result,\n };\n for (const hook of this.afterVerifyHooks) {\n await hook(recoveredContext);\n }\n return result.result;\n }\n }\n\n return verifyResult;\n }\n\n // Execute afterVerify hooks only for successful verification\n const resultContext: FacilitatorVerifyResultContext = {\n ...context,\n result: verifyResult,\n };\n\n for (const hook of this.afterVerifyHooks) {\n await hook(resultContext);\n }\n\n return verifyResult;\n } catch (error) {\n const failureContext: FacilitatorVerifyFailureContext = {\n ...context,\n error: error as Error,\n };\n\n // Execute onVerifyFailure hooks\n for (const hook of this.onVerifyFailureHooks) {\n const result = await hook(failureContext);\n if (result && \"recovered\" in result && result.recovered) {\n return result.result;\n }\n }\n\n throw error;\n }\n }\n\n /**\n * Settles a payment based on the payload and requirements.\n *\n * @param paymentPayload - The payment payload to settle\n * @param paymentRequirements - The payment requirements for settlement\n * @returns Promise resolving to the settlement response\n */\n async settle(\n paymentPayload: PaymentPayload,\n paymentRequirements: PaymentRequirements,\n ): Promise<SettleResponse> {\n const context: FacilitatorSettleContext = {\n paymentPayload,\n requirements: paymentRequirements,\n };\n\n // Execute beforeSettle hooks\n for (const hook of this.beforeSettleHooks) {\n const result = await hook(context);\n if (result && \"abort\" in result && result.abort) {\n throw new Error(`Settlement aborted: ${result.reason}`);\n }\n }\n\n try {\n const schemeDataArray = this.registeredFacilitatorSchemes.get(paymentPayload.x402Version);\n if (!schemeDataArray) {\n throw new Error(\n `No facilitator registered for x402 version: ${paymentPayload.x402Version}`,\n );\n }\n\n // Find matching facilitator from array\n let schemeNetworkFacilitator: SchemeNetworkFacilitator | undefined;\n for (const schemeData of schemeDataArray) {\n if (schemeData.facilitator.scheme === paymentRequirements.scheme) {\n // Check if network matches\n if (schemeData.networks.has(paymentRequirements.network)) {\n schemeNetworkFacilitator = schemeData.facilitator;\n break;\n }\n // Try pattern matching\n if (networkMatchesPattern(schemeData.pattern, paymentRequirements.network)) {\n schemeNetworkFacilitator = schemeData.facilitator;\n break;\n }\n }\n }\n\n if (!schemeNetworkFacilitator) {\n throw new Error(\n `No facilitator registered for scheme: ${paymentRequirements.scheme} and network: ${paymentRequirements.network}`,\n );\n }\n\n const facilitatorContext = this.buildFacilitatorContext();\n const settleResult = await schemeNetworkFacilitator.settle(\n paymentPayload,\n paymentRequirements,\n facilitatorContext,\n );\n\n // Execute afterSettle hooks\n const resultContext: FacilitatorSettleResultContext = {\n ...context,\n result: settleResult,\n };\n\n for (const hook of this.afterSettleHooks) {\n await hook(resultContext);\n }\n\n return settleResult;\n } catch (error) {\n const failureContext: FacilitatorSettleFailureContext = {\n ...context,\n error: error as Error,\n };\n\n // Execute onSettleFailure hooks\n for (const hook of this.onSettleFailureHooks) {\n const result = await hook(failureContext);\n if (result && \"recovered\" in result && result.recovered) {\n return result.result;\n }\n }\n\n throw error;\n }\n }\n\n /**\n * Builds a FacilitatorContext from the registered extensions map.\n * Passed to mechanism verify/settle so they can access extension capabilities.\n *\n * @returns A FacilitatorContext backed by this facilitator's registered extensions\n */\n private buildFacilitatorContext(): FacilitatorContext {\n const extensionsMap = this.extensions;\n return {\n getExtension<T extends FacilitatorExtension = FacilitatorExtension>(\n key: string,\n ): T | undefined {\n return extensionsMap.get(key) as T | undefined;\n },\n };\n }\n\n /**\n * Internal method to register a scheme facilitator.\n *\n * @param x402Version - The x402 protocol version\n * @param networks - Array of concrete networks this facilitator supports\n * @param facilitator - The scheme network facilitator to register\n * @returns The x402Facilitator instance for chaining\n */\n private _registerScheme(\n x402Version: number,\n networks: Network[],\n facilitator: SchemeNetworkFacilitator,\n ): x402Facilitator {\n if (!this.registeredFacilitatorSchemes.has(x402Version)) {\n this.registeredFacilitatorSchemes.set(x402Version, []);\n }\n const schemeDataArray = this.registeredFacilitatorSchemes.get(x402Version)!;\n\n // Add new scheme data (supports multiple facilitators with same scheme name)\n schemeDataArray.push({\n facilitator,\n networks: new Set(networks),\n pattern: this.derivePattern(networks),\n });\n\n return this;\n }\n\n /**\n * Derives a wildcard pattern from an array of networks.\n * If all networks share the same namespace, returns wildcard pattern.\n * Otherwise returns the first network for exact matching.\n *\n * @param networks - Array of networks\n * @returns Derived pattern for matching\n */\n private derivePattern(networks: Network[]): Network {\n if (networks.length === 0) return \"\" as Network;\n if (networks.length === 1) return networks[0];\n\n // Extract namespaces (e.g., \"eip155\" from \"eip155:84532\")\n const namespaces = networks.map(n => n.split(\":\")[0]);\n const uniqueNamespaces = new Set(namespaces);\n\n // If all same namespace, use wildcard\n if (uniqueNamespaces.size === 1) {\n return `${namespaces[0]}:*` as Network;\n }\n\n // Mixed namespaces - use first network for exact matching\n return networks[0];\n }\n}\n"],"mappings":"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","names":["hook","x402Version"]}