agentpay-mcp 4.1.7 → 4.1.10

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 (55) hide show
  1. package/README.md +17 -3
  2. package/dist/index.js +2 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/session/types.d.ts +1 -1
  5. package/dist/session/types.d.ts.map +1 -1
  6. package/dist/tools/budget.d.ts +14 -0
  7. package/dist/tools/budget.d.ts.map +1 -1
  8. package/dist/tools/budget.js +45 -15
  9. package/dist/tools/budget.js.map +1 -1
  10. package/dist/tools/deploy.js.map +1 -1
  11. package/dist/tools/history.d.ts.map +1 -1
  12. package/dist/tools/history.js.map +1 -1
  13. package/dist/tools/payments.d.ts.map +1 -1
  14. package/dist/tools/payments.js.map +1 -1
  15. package/dist/tools/session.d.ts.map +1 -1
  16. package/dist/tools/session.js +12 -19
  17. package/dist/tools/session.js.map +1 -1
  18. package/dist/tools/x402.d.ts.map +1 -1
  19. package/dist/tools/x402.js +9 -12
  20. package/dist/tools/x402.js.map +1 -1
  21. package/dist/utils/hosted-proxy-verification.d.ts +48 -0
  22. package/dist/utils/hosted-proxy-verification.d.ts.map +1 -0
  23. package/dist/utils/hosted-proxy-verification.js +147 -0
  24. package/dist/utils/hosted-proxy-verification.js.map +1 -0
  25. package/dist/utils/paid-mcp-gateway-hardening.d.ts +51 -0
  26. package/dist/utils/paid-mcp-gateway-hardening.d.ts.map +1 -0
  27. package/dist/utils/paid-mcp-gateway-hardening.js +60 -0
  28. package/dist/utils/paid-mcp-gateway-hardening.js.map +1 -0
  29. package/dist/utils/paid-provider-health-proof.d.ts +294 -0
  30. package/dist/utils/paid-provider-health-proof.d.ts.map +1 -0
  31. package/dist/utils/paid-provider-health-proof.js +191 -0
  32. package/dist/utils/paid-provider-health-proof.js.map +1 -0
  33. package/dist/utils/x402-buyer-flow.d.ts +81 -0
  34. package/dist/utils/x402-buyer-flow.d.ts.map +1 -0
  35. package/dist/utils/x402-buyer-flow.js +188 -0
  36. package/dist/utils/x402-buyer-flow.js.map +1 -0
  37. package/dist/utils/x402-v211-compatibility.d.ts +29 -0
  38. package/dist/utils/x402-v211-compatibility.d.ts.map +1 -0
  39. package/dist/utils/x402-v211-compatibility.js +71 -0
  40. package/dist/utils/x402-v211-compatibility.js.map +1 -0
  41. package/docs/agentpay-buyer-flow-parity.md +149 -0
  42. package/docs/dependency-pin-policy.md +53 -0
  43. package/docs/fixtures/paid-provider-health-proof-voidly-2026-05-02.json +104 -0
  44. package/docs/hosted-x402-proxy-verification.md +79 -0
  45. package/docs/mcp-registry-listing-proof.md +62 -0
  46. package/docs/mcp-registry-listing.json +40 -0
  47. package/docs/paid-mcp-gateway-hardening.md +121 -0
  48. package/docs/paid-provider-health-proof.md +71 -0
  49. package/docs/paid-provider-health-proof.schema.json +89 -0
  50. package/docs/settlegrid-paid-mcp-discovery-response.md +61 -0
  51. package/docs/x402-ecosystem-submission.md +22 -0
  52. package/docs/x402-native-vs-stripe-proxy.md +1 -1
  53. package/docs/x402-v211-paid-mcp-compatibility.md +75 -0
  54. package/llms.txt +21 -0
  55. package/package.json +10 -5
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Paid-provider health proof verification helpers.
3
+ *
4
+ * Buyer agents should not route paid work from a marketplace-level "up" flag.
5
+ * They need provider-level success, stale streak, receipt, and x402 payment
6
+ * metadata checks before a wallet signs. These helpers validate that proof and
7
+ * fail closed when the feed is stale, incomplete, inconsistent, or points at an
8
+ * unexpected network, asset, or recipient.
9
+ */
10
+ import { z } from 'zod';
11
+ export declare const X402ProviderPaymentMetadataSchema: z.ZodObject<{
12
+ scheme: z.ZodDefault<z.ZodLiteral<"exact">>;
13
+ network: z.ZodString;
14
+ asset: z.ZodString;
15
+ payTo: z.ZodEffects<z.ZodString, string, string>;
16
+ amountRequired: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
17
+ maxAmountRequired: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
18
+ resource: z.ZodOptional<z.ZodString>;
19
+ facilitator: z.ZodOptional<z.ZodString>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ scheme: "exact";
22
+ network: string;
23
+ asset: string;
24
+ payTo: string;
25
+ resource?: string | undefined;
26
+ maxAmountRequired?: string | undefined;
27
+ amountRequired?: string | undefined;
28
+ facilitator?: string | undefined;
29
+ }, {
30
+ network: string;
31
+ asset: string;
32
+ payTo: string;
33
+ scheme?: "exact" | undefined;
34
+ resource?: string | undefined;
35
+ maxAmountRequired?: string | undefined;
36
+ amountRequired?: string | undefined;
37
+ facilitator?: string | undefined;
38
+ }>;
39
+ export declare const PaidProviderHealthProofSchema: z.ZodObject<{
40
+ schema: z.ZodLiteral<"agentpay-paid-provider-health-proof/v1">;
41
+ generated_at: z.ZodEffects<z.ZodString, string, string>;
42
+ source: z.ZodObject<{
43
+ name: z.ZodString;
44
+ url: z.ZodOptional<z.ZodString>;
45
+ commit: z.ZodOptional<z.ZodString>;
46
+ raw_schema: z.ZodOptional<z.ZodString>;
47
+ }, "strip", z.ZodTypeAny, {
48
+ name: string;
49
+ url?: string | undefined;
50
+ commit?: string | undefined;
51
+ raw_schema?: string | undefined;
52
+ }, {
53
+ name: string;
54
+ url?: string | undefined;
55
+ commit?: string | undefined;
56
+ raw_schema?: string | undefined;
57
+ }>;
58
+ health: z.ZodObject<{
59
+ ok: z.ZodBoolean;
60
+ latency_ms: z.ZodOptional<z.ZodNumber>;
61
+ }, "strip", z.ZodTypeAny, {
62
+ ok: boolean;
63
+ latency_ms?: number | undefined;
64
+ }, {
65
+ ok: boolean;
66
+ latency_ms?: number | undefined;
67
+ }>;
68
+ ok: z.ZodBoolean;
69
+ summary: z.ZodObject<{
70
+ providers_probed: z.ZodNumber;
71
+ providers_ok: z.ZodNumber;
72
+ providers_failing: z.ZodNumber;
73
+ success_rate: z.ZodNumber;
74
+ }, "strip", z.ZodTypeAny, {
75
+ providers_probed: number;
76
+ providers_ok: number;
77
+ providers_failing: number;
78
+ success_rate: number;
79
+ }, {
80
+ providers_probed: number;
81
+ providers_ok: number;
82
+ providers_failing: number;
83
+ success_rate: number;
84
+ }>;
85
+ providers: z.ZodArray<z.ZodObject<{
86
+ provider_id: z.ZodString;
87
+ capability: z.ZodOptional<z.ZodString>;
88
+ capability_id: z.ZodOptional<z.ZodString>;
89
+ status: z.ZodEnum<["ok", "failed", "stale", "unknown"]>;
90
+ stale_streak: z.ZodNumber;
91
+ receipt_state: z.ZodEnum<["verified", "pending_acceptance_verified", "missing", "invalid", "unverified"]>;
92
+ receipt_id: z.ZodOptional<z.ZodString>;
93
+ verified: z.ZodBoolean;
94
+ latency_ms: z.ZodOptional<z.ZodNumber>;
95
+ error: z.ZodOptional<z.ZodString>;
96
+ x402_payment: z.ZodOptional<z.ZodObject<{
97
+ scheme: z.ZodDefault<z.ZodLiteral<"exact">>;
98
+ network: z.ZodString;
99
+ asset: z.ZodString;
100
+ payTo: z.ZodEffects<z.ZodString, string, string>;
101
+ amountRequired: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
102
+ maxAmountRequired: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
103
+ resource: z.ZodOptional<z.ZodString>;
104
+ facilitator: z.ZodOptional<z.ZodString>;
105
+ }, "strip", z.ZodTypeAny, {
106
+ scheme: "exact";
107
+ network: string;
108
+ asset: string;
109
+ payTo: string;
110
+ resource?: string | undefined;
111
+ maxAmountRequired?: string | undefined;
112
+ amountRequired?: string | undefined;
113
+ facilitator?: string | undefined;
114
+ }, {
115
+ network: string;
116
+ asset: string;
117
+ payTo: string;
118
+ scheme?: "exact" | undefined;
119
+ resource?: string | undefined;
120
+ maxAmountRequired?: string | undefined;
121
+ amountRequired?: string | undefined;
122
+ facilitator?: string | undefined;
123
+ }>>;
124
+ }, "strip", z.ZodTypeAny, {
125
+ status: "unknown" | "ok" | "failed" | "stale";
126
+ provider_id: string;
127
+ stale_streak: number;
128
+ receipt_state: "verified" | "pending_acceptance_verified" | "missing" | "invalid" | "unverified";
129
+ verified: boolean;
130
+ error?: string | undefined;
131
+ latency_ms?: number | undefined;
132
+ capability?: string | undefined;
133
+ capability_id?: string | undefined;
134
+ receipt_id?: string | undefined;
135
+ x402_payment?: {
136
+ scheme: "exact";
137
+ network: string;
138
+ asset: string;
139
+ payTo: string;
140
+ resource?: string | undefined;
141
+ maxAmountRequired?: string | undefined;
142
+ amountRequired?: string | undefined;
143
+ facilitator?: string | undefined;
144
+ } | undefined;
145
+ }, {
146
+ status: "unknown" | "ok" | "failed" | "stale";
147
+ provider_id: string;
148
+ stale_streak: number;
149
+ receipt_state: "verified" | "pending_acceptance_verified" | "missing" | "invalid" | "unverified";
150
+ verified: boolean;
151
+ error?: string | undefined;
152
+ latency_ms?: number | undefined;
153
+ capability?: string | undefined;
154
+ capability_id?: string | undefined;
155
+ receipt_id?: string | undefined;
156
+ x402_payment?: {
157
+ network: string;
158
+ asset: string;
159
+ payTo: string;
160
+ scheme?: "exact" | undefined;
161
+ resource?: string | undefined;
162
+ maxAmountRequired?: string | undefined;
163
+ amountRequired?: string | undefined;
164
+ facilitator?: string | undefined;
165
+ } | undefined;
166
+ }>, "many">;
167
+ routing: z.ZodObject<{
168
+ fail_closed: z.ZodLiteral<true>;
169
+ decision: z.ZodEnum<["allow", "deny", "degraded"]>;
170
+ reason: z.ZodArray<z.ZodString, "many">;
171
+ }, "strip", z.ZodTypeAny, {
172
+ reason: string[];
173
+ fail_closed: true;
174
+ decision: "allow" | "deny" | "degraded";
175
+ }, {
176
+ reason: string[];
177
+ fail_closed: true;
178
+ decision: "allow" | "deny" | "degraded";
179
+ }>;
180
+ }, "strip", z.ZodTypeAny, {
181
+ source: {
182
+ name: string;
183
+ url?: string | undefined;
184
+ commit?: string | undefined;
185
+ raw_schema?: string | undefined;
186
+ };
187
+ health: {
188
+ ok: boolean;
189
+ latency_ms?: number | undefined;
190
+ };
191
+ ok: boolean;
192
+ schema: "agentpay-paid-provider-health-proof/v1";
193
+ generated_at: string;
194
+ summary: {
195
+ providers_probed: number;
196
+ providers_ok: number;
197
+ providers_failing: number;
198
+ success_rate: number;
199
+ };
200
+ providers: {
201
+ status: "unknown" | "ok" | "failed" | "stale";
202
+ provider_id: string;
203
+ stale_streak: number;
204
+ receipt_state: "verified" | "pending_acceptance_verified" | "missing" | "invalid" | "unverified";
205
+ verified: boolean;
206
+ error?: string | undefined;
207
+ latency_ms?: number | undefined;
208
+ capability?: string | undefined;
209
+ capability_id?: string | undefined;
210
+ receipt_id?: string | undefined;
211
+ x402_payment?: {
212
+ scheme: "exact";
213
+ network: string;
214
+ asset: string;
215
+ payTo: string;
216
+ resource?: string | undefined;
217
+ maxAmountRequired?: string | undefined;
218
+ amountRequired?: string | undefined;
219
+ facilitator?: string | undefined;
220
+ } | undefined;
221
+ }[];
222
+ routing: {
223
+ reason: string[];
224
+ fail_closed: true;
225
+ decision: "allow" | "deny" | "degraded";
226
+ };
227
+ }, {
228
+ source: {
229
+ name: string;
230
+ url?: string | undefined;
231
+ commit?: string | undefined;
232
+ raw_schema?: string | undefined;
233
+ };
234
+ health: {
235
+ ok: boolean;
236
+ latency_ms?: number | undefined;
237
+ };
238
+ ok: boolean;
239
+ schema: "agentpay-paid-provider-health-proof/v1";
240
+ generated_at: string;
241
+ summary: {
242
+ providers_probed: number;
243
+ providers_ok: number;
244
+ providers_failing: number;
245
+ success_rate: number;
246
+ };
247
+ providers: {
248
+ status: "unknown" | "ok" | "failed" | "stale";
249
+ provider_id: string;
250
+ stale_streak: number;
251
+ receipt_state: "verified" | "pending_acceptance_verified" | "missing" | "invalid" | "unverified";
252
+ verified: boolean;
253
+ error?: string | undefined;
254
+ latency_ms?: number | undefined;
255
+ capability?: string | undefined;
256
+ capability_id?: string | undefined;
257
+ receipt_id?: string | undefined;
258
+ x402_payment?: {
259
+ network: string;
260
+ asset: string;
261
+ payTo: string;
262
+ scheme?: "exact" | undefined;
263
+ resource?: string | undefined;
264
+ maxAmountRequired?: string | undefined;
265
+ amountRequired?: string | undefined;
266
+ facilitator?: string | undefined;
267
+ } | undefined;
268
+ }[];
269
+ routing: {
270
+ reason: string[];
271
+ fail_closed: true;
272
+ decision: "allow" | "deny" | "degraded";
273
+ };
274
+ }>;
275
+ export type PaidProviderHealthProof = z.infer<typeof PaidProviderHealthProofSchema>;
276
+ export type X402ProviderPaymentMetadata = z.infer<typeof X402ProviderPaymentMetadataSchema>;
277
+ export type PaidProviderHealthPolicy = {
278
+ minimumSuccessRate: number;
279
+ maxProofAgeMs: number;
280
+ maxProviderStaleStreak: number;
281
+ allowedNetworks: string[];
282
+ allowedAssets: string[];
283
+ allowedPayTo: string[];
284
+ requireVerifiedReceipt: boolean;
285
+ requireX402PaymentMetadata: boolean;
286
+ };
287
+ export type PaidProviderHealthVerificationResult = {
288
+ ok: boolean;
289
+ failures: string[];
290
+ warnings: string[];
291
+ eligibleProviders: string[];
292
+ };
293
+ export declare function verifyPaidProviderHealthProof(proofInput: unknown, policy: PaidProviderHealthPolicy, now?: Date): PaidProviderHealthVerificationResult;
294
+ //# sourceMappingURL=paid-provider-health-proof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paid-provider-health-proof.d.ts","sourceRoot":"","sources":["../../src/utils/paid-provider-health-proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5C,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,MAAM,MAAM,wBAAwB,GAAG;IACrC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sBAAsB,EAAE,OAAO,CAAC;IAChC,0BAA0B,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAmBF,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,wBAAwB,EAChC,GAAG,OAAa,GACf,oCAAoC,CAiItC"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ /**
3
+ * Paid-provider health proof verification helpers.
4
+ *
5
+ * Buyer agents should not route paid work from a marketplace-level "up" flag.
6
+ * They need provider-level success, stale streak, receipt, and x402 payment
7
+ * metadata checks before a wallet signs. These helpers validate that proof and
8
+ * fail closed when the feed is stale, incomplete, inconsistent, or points at an
9
+ * unexpected network, asset, or recipient.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PaidProviderHealthProofSchema = exports.X402ProviderPaymentMetadataSchema = void 0;
13
+ exports.verifyPaidProviderHealthProof = verifyPaidProviderHealthProof;
14
+ const zod_1 = require("zod");
15
+ const isoDateString = zod_1.z.string().refine((value) => !Number.isNaN(Date.parse(value)), {
16
+ message: 'must be an ISO-8601 timestamp',
17
+ });
18
+ const nonZeroEvmAddress = zod_1.z
19
+ .string()
20
+ .regex(/^0x[a-fA-F0-9]{40}$/)
21
+ .refine((value) => value.toLowerCase() !== '0x0000000000000000000000000000000000000000', {
22
+ message: 'payTo must not be the zero address',
23
+ });
24
+ const positiveIntegerString = zod_1.z
25
+ .string()
26
+ .regex(/^\d+$/)
27
+ .refine((value) => BigInt(value) > 0n, { message: 'amount must be greater than zero' });
28
+ exports.X402ProviderPaymentMetadataSchema = zod_1.z.object({
29
+ scheme: zod_1.z.literal('exact').default('exact'),
30
+ network: zod_1.z.string().min(1),
31
+ asset: zod_1.z.string().min(1),
32
+ payTo: nonZeroEvmAddress,
33
+ amountRequired: positiveIntegerString.optional(),
34
+ maxAmountRequired: positiveIntegerString.optional(),
35
+ resource: zod_1.z.string().url().optional(),
36
+ facilitator: zod_1.z.string().min(1).optional(),
37
+ });
38
+ exports.PaidProviderHealthProofSchema = zod_1.z.object({
39
+ schema: zod_1.z.literal('agentpay-paid-provider-health-proof/v1'),
40
+ generated_at: isoDateString,
41
+ source: zod_1.z.object({
42
+ name: zod_1.z.string().min(1),
43
+ url: zod_1.z.string().url().optional(),
44
+ commit: zod_1.z.string().min(7).optional(),
45
+ raw_schema: zod_1.z.string().min(1).optional(),
46
+ }),
47
+ health: zod_1.z.object({
48
+ ok: zod_1.z.boolean(),
49
+ latency_ms: zod_1.z.number().nonnegative().optional(),
50
+ }),
51
+ ok: zod_1.z.boolean(),
52
+ summary: zod_1.z.object({
53
+ providers_probed: zod_1.z.number().int().nonnegative(),
54
+ providers_ok: zod_1.z.number().int().nonnegative(),
55
+ providers_failing: zod_1.z.number().int().nonnegative(),
56
+ success_rate: zod_1.z.number().min(0).max(1),
57
+ }),
58
+ providers: zod_1.z.array(zod_1.z.object({
59
+ provider_id: zod_1.z.string().min(1),
60
+ capability: zod_1.z.string().min(1).optional(),
61
+ capability_id: zod_1.z.string().min(1).optional(),
62
+ status: zod_1.z.enum(['ok', 'failed', 'stale', 'unknown']),
63
+ stale_streak: zod_1.z.number().int().nonnegative(),
64
+ receipt_state: zod_1.z.enum(['verified', 'pending_acceptance_verified', 'missing', 'invalid', 'unverified']),
65
+ receipt_id: zod_1.z.string().min(1).optional(),
66
+ verified: zod_1.z.boolean(),
67
+ latency_ms: zod_1.z.number().nonnegative().optional(),
68
+ error: zod_1.z.string().min(1).optional(),
69
+ x402_payment: exports.X402ProviderPaymentMetadataSchema.optional(),
70
+ })),
71
+ routing: zod_1.z.object({
72
+ fail_closed: zod_1.z.literal(true),
73
+ decision: zod_1.z.enum(['allow', 'deny', 'degraded']),
74
+ reason: zod_1.z.array(zod_1.z.string().min(1)),
75
+ }),
76
+ });
77
+ function paymentAmount(payment) {
78
+ const rawAmount = payment.maxAmountRequired ?? payment.amountRequired;
79
+ return rawAmount ? BigInt(rawAmount) : null;
80
+ }
81
+ function successRate(providersOk, providersProbed) {
82
+ return providersProbed === 0 ? 0 : providersOk / providersProbed;
83
+ }
84
+ function closeEnough(left, right) {
85
+ return Math.abs(left - right) < 0.000001;
86
+ }
87
+ function includesCaseInsensitive(values, value) {
88
+ return values.map((entry) => entry.toLowerCase()).includes(value.toLowerCase());
89
+ }
90
+ function verifyPaidProviderHealthProof(proofInput, policy, now = new Date()) {
91
+ const parsed = exports.PaidProviderHealthProofSchema.safeParse(proofInput);
92
+ const failures = [];
93
+ const warnings = [];
94
+ const eligibleProviders = [];
95
+ if (!parsed.success) {
96
+ return {
97
+ ok: false,
98
+ failures: parsed.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`),
99
+ warnings,
100
+ eligibleProviders,
101
+ };
102
+ }
103
+ const proof = parsed.data;
104
+ const proofAgeMs = now.getTime() - Date.parse(proof.generated_at);
105
+ if (proofAgeMs < 0) {
106
+ failures.push('Health proof timestamp is in the future.');
107
+ }
108
+ if (proofAgeMs > policy.maxProofAgeMs) {
109
+ failures.push(`Health proof is stale: age ${proofAgeMs}ms exceeds ${policy.maxProofAgeMs}ms.`);
110
+ }
111
+ if (!proof.health.ok) {
112
+ failures.push('Base health flag is false.');
113
+ }
114
+ if (!proof.ok) {
115
+ failures.push('Top-level provider health flag is false.');
116
+ }
117
+ if (!proof.routing.fail_closed) {
118
+ failures.push('Routing proof must set fail_closed=true.');
119
+ }
120
+ if (proof.routing.decision === 'allow' && !proof.ok) {
121
+ failures.push('Routing decision cannot allow paid work when top-level ok=false.');
122
+ }
123
+ const providersOk = proof.providers.filter((provider) => provider.status === 'ok').length;
124
+ const providersFailing = proof.providers.length - providersOk;
125
+ const expectedSuccessRate = successRate(providersOk, proof.providers.length);
126
+ if (proof.summary.providers_probed !== proof.providers.length) {
127
+ failures.push('summary.providers_probed does not match providers.length.');
128
+ }
129
+ if (proof.summary.providers_ok !== providersOk) {
130
+ failures.push('summary.providers_ok does not match providers with status ok.');
131
+ }
132
+ if (proof.summary.providers_failing !== providersFailing) {
133
+ failures.push('summary.providers_failing does not match providers without status ok.');
134
+ }
135
+ if (!closeEnough(proof.summary.success_rate, expectedSuccessRate)) {
136
+ failures.push('summary.success_rate does not match providers_ok / providers_probed.');
137
+ }
138
+ if (proof.summary.success_rate < policy.minimumSuccessRate) {
139
+ failures.push(`Provider success_rate ${proof.summary.success_rate} is below required ${policy.minimumSuccessRate}.`);
140
+ }
141
+ for (const provider of proof.providers) {
142
+ const providerFailures = [];
143
+ if (provider.status !== 'ok') {
144
+ providerFailures.push(`status=${provider.status}`);
145
+ }
146
+ if (provider.stale_streak > policy.maxProviderStaleStreak) {
147
+ providerFailures.push(`stale_streak=${provider.stale_streak}`);
148
+ }
149
+ if (policy.requireVerifiedReceipt && !provider.verified) {
150
+ providerFailures.push(`receipt_state=${provider.receipt_state}`);
151
+ }
152
+ if (policy.requireX402PaymentMetadata && !provider.x402_payment) {
153
+ providerFailures.push('missing x402_payment metadata');
154
+ }
155
+ if (provider.x402_payment) {
156
+ const payment = provider.x402_payment;
157
+ const amount = paymentAmount(payment);
158
+ if (!policy.allowedNetworks.includes(payment.network)) {
159
+ providerFailures.push(`network=${payment.network} is not allowed`);
160
+ }
161
+ if (!includesCaseInsensitive(policy.allowedAssets, payment.asset)) {
162
+ providerFailures.push(`asset=${payment.asset} is not allowed`);
163
+ }
164
+ if (!includesCaseInsensitive(policy.allowedPayTo, payment.payTo)) {
165
+ providerFailures.push(`payTo=${payment.payTo} is not allowed`);
166
+ }
167
+ if (amount === null) {
168
+ providerFailures.push('missing x402 amountRequired or maxAmountRequired');
169
+ }
170
+ }
171
+ if (providerFailures.length > 0) {
172
+ failures.push(`${provider.provider_id}: ${providerFailures.join('; ')}.`);
173
+ }
174
+ else {
175
+ eligibleProviders.push(provider.provider_id);
176
+ }
177
+ }
178
+ if (eligibleProviders.length === 0) {
179
+ failures.push('No provider passed status, stale streak, receipt, and x402 payment metadata checks.');
180
+ }
181
+ if (proof.routing.decision === 'degraded') {
182
+ warnings.push('Routing decision is degraded; buyers should require explicit fallback policy before payment.');
183
+ }
184
+ return {
185
+ ok: failures.length === 0,
186
+ failures,
187
+ warnings,
188
+ eligibleProviders,
189
+ };
190
+ }
191
+ //# sourceMappingURL=paid-provider-health-proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paid-provider-health-proof.js","sourceRoot":"","sources":["../../src/utils/paid-provider-health-proof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ export type X402BuyerChallenge = {
2
+ network?: string;
3
+ asset?: string;
4
+ amountRequired?: string;
5
+ payTo?: string;
6
+ };
7
+ export type X402TypedPaymentErrorName = 'PaymentRequiredError' | 'QuotaExceededError' | 'TokenExpiredError' | 'ValidationFailureError' | 'SpendLimitExceededError' | 'UnknownPaymentError';
8
+ export type X402Retryability = 'retry_after_payment' | 'retry_after_quota_reset' | 'refresh_token_then_retry' | 'do_not_retry' | 'operator_review';
9
+ export type X402TypedPaymentError = {
10
+ name: X402TypedPaymentErrorName;
11
+ message?: string;
12
+ noCharge: boolean;
13
+ retryAfterSeconds?: number;
14
+ };
15
+ export type X402QuotaEnvelope = {
16
+ limit?: string | number;
17
+ remaining?: string | number;
18
+ resetAt?: string;
19
+ sourceHeaders?: Record<string, string | undefined>;
20
+ };
21
+ export type X402SpendEnvelope = {
22
+ maxSpendAtomic: string;
23
+ amountRequiredAtomic?: string;
24
+ remainingAfterPaymentAtomic?: string;
25
+ };
26
+ export type X402BuyerFlowInput = {
27
+ method: string;
28
+ url: string;
29
+ body?: string;
30
+ signer: string;
31
+ challengeSource: 'directory' | 'payment-required-header' | 'x-payment-required-header' | 'body' | 'manual' | 'none';
32
+ challenge?: X402BuyerChallenge;
33
+ allowedNetworks: string[];
34
+ allowedAssets: string[];
35
+ maxSpendAtomic: string | bigint;
36
+ dryRunCompleted: boolean;
37
+ approvalState: 'approved' | 'pending' | 'declined' | 'not_required';
38
+ idempotencyKey?: string;
39
+ typedError?: X402TypedPaymentError;
40
+ quota?: X402QuotaEnvelope;
41
+ mcpTools: string[];
42
+ audit: {
43
+ destination?: string;
44
+ correlationId?: string;
45
+ receiptSink?: string;
46
+ };
47
+ };
48
+ export type X402BuyerFlowResult = {
49
+ ok: boolean;
50
+ idempotencyKey: string;
51
+ failures: string[];
52
+ warnings: string[];
53
+ parity: {
54
+ discover: boolean;
55
+ check: boolean;
56
+ dryRun: boolean;
57
+ pay: boolean;
58
+ spendLimit: boolean;
59
+ idempotency: boolean;
60
+ mcpExposure: boolean;
61
+ audit: boolean;
62
+ typedErrors: boolean;
63
+ retryability: boolean;
64
+ quotaEnvelope: boolean;
65
+ noChargeFailures: boolean;
66
+ };
67
+ recovery: {
68
+ errorName?: X402TypedPaymentErrorName;
69
+ retryability: X402Retryability;
70
+ noCharge: boolean;
71
+ quotaVisible: boolean;
72
+ };
73
+ envelope: {
74
+ quota?: X402QuotaEnvelope;
75
+ spend: X402SpendEnvelope;
76
+ };
77
+ };
78
+ export declare function createX402IdempotencyKey(input: Pick<X402BuyerFlowInput, 'method' | 'url' | 'body' | 'signer'>): string;
79
+ export declare function classifyX402PaymentError(error?: X402TypedPaymentError, quota?: X402QuotaEnvelope): X402Retryability;
80
+ export declare function verifyX402BuyerFlow(input: X402BuyerFlowInput): X402BuyerFlowResult;
81
+ //# sourceMappingURL=x402-buyer-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-buyer-flow.d.ts","sourceRoot":"","sources":["../../src/utils/x402-buyer-flow.ts"],"names":[],"mappings":"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"}