@absol-labs/agent 0.10.0 → 0.11.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/README.md +107 -23
- package/dist/capability/invocation-capability.d.ts +18 -6
- package/dist/capability/invocation-capability.d.ts.map +1 -1
- package/dist/capability/invocation-capability.js.map +1 -1
- package/dist/cli/commands/claim.d.ts.map +1 -1
- package/dist/cli/commands/claim.js +20 -4
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.d.ts.map +1 -1
- package/dist/cli/commands/close.js +16 -4
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/invoke.d.ts.map +1 -1
- package/dist/cli/commands/invoke.js +1 -0
- package/dist/cli/commands/invoke.js.map +1 -1
- package/dist/cli/commands/open.d.ts.map +1 -1
- package/dist/cli/commands/open.js +63 -11
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/reclaim-unverified.d.ts.map +1 -1
- package/dist/cli/commands/reclaim-unverified.js +12 -4
- package/dist/cli/commands/reclaim-unverified.js.map +1 -1
- package/dist/cli/commands/reclaim.d.ts.map +1 -1
- package/dist/cli/commands/reclaim.js +16 -5
- package/dist/cli/commands/reclaim.js.map +1 -1
- package/dist/cli/commands/streams.js +1 -1
- package/dist/cli/commands/streams.js.map +1 -1
- package/dist/cli/deps.d.ts +53 -7
- package/dist/cli/deps.d.ts.map +1 -1
- package/dist/cli/deps.js +65 -15
- package/dist/cli/deps.js.map +1 -1
- package/dist/cli/privy.d.ts +83 -0
- package/dist/cli/privy.d.ts.map +1 -0
- package/dist/cli/privy.js +230 -0
- package/dist/cli/privy.js.map +1 -0
- package/dist/cli/spend-policy.d.ts +60 -0
- package/dist/cli/spend-policy.d.ts.map +1 -0
- package/dist/cli/spend-policy.js +65 -0
- package/dist/cli/spend-policy.js.map +1 -0
- package/dist/cli/wallet.d.ts +108 -39
- package/dist/cli/wallet.d.ts.map +1 -1
- package/dist/cli/wallet.js +108 -43
- package/dist/cli/wallet.js.map +1 -1
- package/dist/gateway/caller-auth-gateway.d.ts +38 -3
- package/dist/gateway/caller-auth-gateway.d.ts.map +1 -1
- package/dist/gateway/caller-auth-gateway.js +25 -1
- package/dist/gateway/caller-auth-gateway.js.map +1 -1
- package/dist/gateway/http-server.d.ts +53 -0
- package/dist/gateway/http-server.d.ts.map +1 -1
- package/dist/gateway/http-server.js +189 -4
- package/dist/gateway/http-server.js.map +1 -1
- package/dist/gateway/x402-mode.d.ts +123 -0
- package/dist/gateway/x402-mode.d.ts.map +1 -0
- package/dist/gateway/x402-mode.js +212 -0
- package/dist/gateway/x402-mode.js.map +1 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/mandates/env.d.ts +3 -2
- package/dist/mandates/env.d.ts.map +1 -1
- package/dist/mandates/env.js +3 -2
- package/dist/mandates/env.js.map +1 -1
- package/dist/mcp/server.d.ts +49 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +513 -24
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/service-invoker.d.ts +97 -0
- package/dist/mcp/service-invoker.d.ts.map +1 -0
- package/dist/mcp/service-invoker.js +167 -0
- package/dist/mcp/service-invoker.js.map +1 -0
- package/dist/sdk/invoke.d.ts +19 -4
- package/dist/sdk/invoke.d.ts.map +1 -1
- package/dist/sdk/invoke.js +69 -5
- package/dist/sdk/invoke.js.map +1 -1
- package/dist/x402/delivery-oracle.d.ts +108 -0
- package/dist/x402/delivery-oracle.d.ts.map +1 -0
- package/dist/x402/delivery-oracle.js +174 -0
- package/dist/x402/delivery-oracle.js.map +1 -0
- package/dist/x402/facilitator-server-entry.d.ts +3 -0
- package/dist/x402/facilitator-server-entry.d.ts.map +1 -0
- package/dist/x402/facilitator-server-entry.js +27 -0
- package/dist/x402/facilitator-server-entry.js.map +1 -0
- package/dist/x402/facilitator-server.d.ts +73 -0
- package/dist/x402/facilitator-server.d.ts.map +1 -0
- package/dist/x402/facilitator-server.js +305 -0
- package/dist/x402/facilitator-server.js.map +1 -0
- package/dist/x402/facilitator.d.ts +69 -17
- package/dist/x402/facilitator.d.ts.map +1 -1
- package/dist/x402/facilitator.js +76 -33
- package/dist/x402/facilitator.js.map +1 -1
- package/dist/x402/payment-requirements.d.ts +106 -0
- package/dist/x402/payment-requirements.d.ts.map +1 -0
- package/dist/x402/payment-requirements.js +138 -0
- package/dist/x402/payment-requirements.js.map +1 -0
- package/dist/x402/relayer.d.ts +41 -0
- package/dist/x402/relayer.d.ts.map +1 -0
- package/dist/x402/relayer.js +64 -0
- package/dist/x402/relayer.js.map +1 -0
- package/dist/x402/resource-index.d.ts +75 -0
- package/dist/x402/resource-index.d.ts.map +1 -0
- package/dist/x402/resource-index.js +126 -0
- package/dist/x402/resource-index.js.map +1 -0
- package/dist/x402/verified-delivery-facilitator.d.ts +285 -0
- package/dist/x402/verified-delivery-facilitator.d.ts.map +1 -0
- package/dist/x402/verified-delivery-facilitator.js +423 -0
- package/dist/x402/verified-delivery-facilitator.js.map +1 -0
- package/dist/zktls/t2-delivery-proof.d.ts +6 -6
- package/docs/agent-layer.md +12 -8
- package/docs/cli.md +158 -22
- package/docs/mcp-hosted.md +4 -3
- package/docs/mcp-reference.md +175 -0
- package/docs/quickstart.md +18 -4
- package/docs/threat-model.md +4 -3
- package/docs/x402.md +648 -0
- package/package.json +18 -7
- package/src/capability/invocation-capability.ts +17 -1
- package/src/cli/commands/claim.ts +30 -4
- package/src/cli/commands/close.ts +20 -4
- package/src/cli/commands/invoke.ts +1 -0
- package/src/cli/commands/open.ts +76 -10
- package/src/cli/commands/reclaim-unverified.ts +16 -4
- package/src/cli/commands/reclaim.ts +22 -5
- package/src/cli/commands/streams.ts +1 -1
- package/src/cli/deps.ts +115 -24
- package/src/cli/privy.ts +396 -0
- package/src/cli/spend-policy.ts +139 -0
- package/src/cli/wallet.ts +188 -57
- package/src/gateway/caller-auth-gateway.ts +77 -6
- package/src/gateway/http-server.ts +280 -6
- package/src/gateway/x402-mode.ts +350 -0
- package/src/index.ts +40 -5
- package/src/mandates/env.ts +3 -2
- package/src/mcp/server.ts +681 -29
- package/src/mcp/service-invoker.ts +285 -0
- package/src/sdk/invoke.ts +90 -12
- package/src/x402/delivery-oracle.ts +285 -0
- package/src/x402/facilitator-server-entry.ts +35 -0
- package/src/x402/facilitator-server.ts +445 -0
- package/src/x402/facilitator.ts +125 -46
- package/src/x402/payment-requirements.ts +231 -0
- package/src/x402/relayer.ts +122 -0
- package/src/x402/resource-index.ts +228 -0
- package/src/x402/verified-delivery-facilitator.ts +744 -0
package/dist/x402/facilitator.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { signedSpendMandateSchema, } from "../mandates/mandate.js";
|
|
3
3
|
import { VerifiedStreamAgentClient, } from "../sdk/client.js";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Immutable wire constant for the Metrik-native 402 scheme. The value is
|
|
6
|
+
* historical (`streamproof-*` predates the Metrik rename) and MUST NOT change:
|
|
7
|
+
* the live gateway and deployed callers depend on it.
|
|
8
|
+
*/
|
|
9
|
+
export const METRIK_STREAM_SCHEME = "streamproof-verified-stream";
|
|
10
|
+
/**
|
|
11
|
+
* Request header carrying the Metrik verified-stream payload. Deliberately NOT
|
|
12
|
+
* `x-payment`: that header belongs to the x402 protocol, which this flow does
|
|
13
|
+
* not implement.
|
|
14
|
+
*/
|
|
15
|
+
export const METRIK_PAYMENT_HEADER = "x-metrik-payment";
|
|
5
16
|
const addressSchema = z.string().regex(/^0x[0-9a-fA-F]{40}$/);
|
|
6
17
|
const bytes32Schema = z.string().regex(/^0x[0-9a-fA-F]{64}$/);
|
|
7
18
|
export const verifiedStreamRequirementsSchema = z.object({
|
|
@@ -13,12 +24,12 @@ export const verifiedStreamRequirementsSchema = z.object({
|
|
|
13
24
|
maxDurationSeconds: z.number().int().positive(),
|
|
14
25
|
maxBudgetUsdc: z.bigint().positive(),
|
|
15
26
|
});
|
|
16
|
-
export const
|
|
17
|
-
scheme: z.literal(
|
|
27
|
+
export const streamChallengeSchema = z.object({
|
|
28
|
+
scheme: z.literal(METRIK_STREAM_SCHEME),
|
|
18
29
|
requirements: verifiedStreamRequirementsSchema,
|
|
19
30
|
});
|
|
20
|
-
export const
|
|
21
|
-
challenge:
|
|
31
|
+
export const streamOpenPayloadSchema = z.object({
|
|
32
|
+
challenge: streamChallengeSchema,
|
|
22
33
|
signedMandate: signedSpendMandateSchema,
|
|
23
34
|
});
|
|
24
35
|
const warnedFacilitatorGaps = new Set();
|
|
@@ -30,9 +41,11 @@ function warnFacilitatorOnce(key, message) {
|
|
|
30
41
|
warnedFacilitatorGaps.add(key);
|
|
31
42
|
console.error(message);
|
|
32
43
|
}
|
|
33
|
-
export class
|
|
44
|
+
export class StreamPayloadError extends Error {
|
|
34
45
|
constructor(message) {
|
|
35
46
|
super(message);
|
|
47
|
+
// Unchanged on purpose: `error.name` is an observable value that existing
|
|
48
|
+
// consumers may match on. The class was renamed; its `name` was not.
|
|
36
49
|
this.name = "X402PayloadError";
|
|
37
50
|
}
|
|
38
51
|
}
|
|
@@ -55,13 +68,14 @@ export class DeliveryProofUnavailableError extends Error {
|
|
|
55
68
|
* facilitator denies the open in this case (fail-closed, buyer-favoring) rather
|
|
56
69
|
* than proceeding on an unverified assumption of "0 spent / none revoked".
|
|
57
70
|
*/
|
|
58
|
-
export class
|
|
71
|
+
export class SpendControlUnavailableError extends Error {
|
|
59
72
|
constructor(message) {
|
|
60
73
|
super(message);
|
|
74
|
+
// Unchanged on purpose: see StreamPayloadError above.
|
|
61
75
|
this.name = "X402SpendControlUnavailableError";
|
|
62
76
|
}
|
|
63
77
|
}
|
|
64
|
-
export class
|
|
78
|
+
export class VerifiedStreamFacilitator {
|
|
65
79
|
agentClient;
|
|
66
80
|
deliveryProofs;
|
|
67
81
|
sdkConfig;
|
|
@@ -87,19 +101,19 @@ export class VerifiedStreamX402Facilitator {
|
|
|
87
101
|
// can NEVER verify the cap. `open()` therefore fails CLOSED (denies) until
|
|
88
102
|
// both resolvers are wired; warn once so the reason is visible at deploy time.
|
|
89
103
|
if (options.resolveSpentSoFarUsdc === undefined) {
|
|
90
|
-
warnFacilitatorOnce("
|
|
104
|
+
warnFacilitatorOnce("metrik-stream-spent", "[metrik] Metrik verified-stream facilitator: no resolveSpentSoFarUsdc wired — the mandate cumulative cap (maxTotalUsdc) cannot be verified, so open() will DENY every spend (fail-closed) until a resolver is wired.");
|
|
91
105
|
}
|
|
92
106
|
if (options.resolveRevokedMandateIds === undefined) {
|
|
93
|
-
warnFacilitatorOnce("
|
|
107
|
+
warnFacilitatorOnce("metrik-stream-revocation", "[metrik] Metrik verified-stream facilitator: no resolveRevokedMandateIds wired — revocation state cannot be verified, so open() will DENY every spend (fail-closed) until a resolver is wired.");
|
|
94
108
|
}
|
|
95
109
|
}
|
|
96
110
|
challenge(req) {
|
|
97
111
|
const requirements = verifiedStreamRequirementsSchema.parse(req);
|
|
98
112
|
assertSettlementTarget(requirements, this.sdkConfig);
|
|
99
|
-
return { scheme:
|
|
113
|
+
return { scheme: METRIK_STREAM_SCHEME, requirements };
|
|
100
114
|
}
|
|
101
115
|
async open(payloadHeader) {
|
|
102
|
-
const payload =
|
|
116
|
+
const payload = parseStreamPayloadHeader(payloadHeader);
|
|
103
117
|
assertSettlementTarget(payload.challenge.requirements, this.sdkConfig);
|
|
104
118
|
// FAIL-CLOSED fund safety (B6). Both the cumulative-cap accounting and the
|
|
105
119
|
// revocation state must be POSITIVELY verified before any spend. A missing
|
|
@@ -107,32 +121,32 @@ export class VerifiedStreamX402Facilitator {
|
|
|
107
121
|
// returns a non-bigint/negative spend is treated as "state cannot be
|
|
108
122
|
// verified" and DENIES the open — never a silent fail-open to 0/none.
|
|
109
123
|
if (this.resolveSpentSoFarUsdc === undefined) {
|
|
110
|
-
throw new
|
|
124
|
+
throw new SpendControlUnavailableError("cannot open verified stream: no resolveSpentSoFarUsdc wired — the mandate cumulative cap (maxTotalUsdc) cannot be verified (fail-closed)");
|
|
111
125
|
}
|
|
112
126
|
if (this.resolveRevokedMandateIds === undefined) {
|
|
113
|
-
throw new
|
|
127
|
+
throw new SpendControlUnavailableError("cannot open verified stream: no resolveRevokedMandateIds wired — mandate revocation state cannot be verified (fail-closed)");
|
|
114
128
|
}
|
|
115
129
|
let spentSoFarUsdc;
|
|
116
130
|
try {
|
|
117
131
|
spentSoFarUsdc = await this.resolveSpentSoFarUsdc(payload.signedMandate);
|
|
118
132
|
}
|
|
119
133
|
catch (error) {
|
|
120
|
-
throw new
|
|
134
|
+
throw new SpendControlUnavailableError(`cannot verify mandate cumulative cap (maxTotalUsdc): ${error instanceof Error ? error.message : String(error)} (fail-closed)`);
|
|
121
135
|
}
|
|
122
136
|
if (typeof spentSoFarUsdc !== "bigint" || spentSoFarUsdc < 0n) {
|
|
123
|
-
throw new
|
|
137
|
+
throw new SpendControlUnavailableError("cannot verify mandate cumulative cap (maxTotalUsdc): resolver returned an invalid spent-so-far value (fail-closed)");
|
|
124
138
|
}
|
|
125
139
|
let revokedMandateIds;
|
|
126
140
|
try {
|
|
127
141
|
revokedMandateIds = await this.resolveRevokedMandateIds(payload.signedMandate);
|
|
128
142
|
}
|
|
129
143
|
catch (error) {
|
|
130
|
-
throw new
|
|
144
|
+
throw new SpendControlUnavailableError(`cannot verify mandate revocation state: ${error instanceof Error ? error.message : String(error)} (fail-closed)`);
|
|
131
145
|
}
|
|
132
146
|
if (revokedMandateIds === null ||
|
|
133
147
|
revokedMandateIds === undefined ||
|
|
134
148
|
typeof revokedMandateIds[Symbol.iterator] !== "function") {
|
|
135
|
-
throw new
|
|
149
|
+
throw new SpendControlUnavailableError("cannot verify mandate revocation state: resolver returned a non-iterable value (fail-closed)");
|
|
136
150
|
}
|
|
137
151
|
const result = await this.agentClient.openVerifiedStream({
|
|
138
152
|
operator: payload.challenge.requirements.operator,
|
|
@@ -149,7 +163,7 @@ export class VerifiedStreamX402Facilitator {
|
|
|
149
163
|
}
|
|
150
164
|
async proveConsumedHttpsResponse(input) {
|
|
151
165
|
if (this.deliveryProofs === undefined) {
|
|
152
|
-
throw new DeliveryProofUnavailableError("zkTLS delivery proofs are not configured on this
|
|
166
|
+
throw new DeliveryProofUnavailableError("zkTLS delivery proofs are not configured on this Metrik verified-stream facilitator");
|
|
153
167
|
}
|
|
154
168
|
return await this.deliveryProofs.proveConsumedHttpsResponse({
|
|
155
169
|
url: input.url,
|
|
@@ -184,33 +198,35 @@ export class VerifiedStreamX402Facilitator {
|
|
|
184
198
|
});
|
|
185
199
|
}
|
|
186
200
|
}
|
|
187
|
-
export function
|
|
188
|
-
const parsed =
|
|
189
|
-
const token = Buffer.from(
|
|
190
|
-
return `${
|
|
201
|
+
export function encodeStreamPayloadHeader(payload) {
|
|
202
|
+
const parsed = streamOpenPayloadSchema.parse(payload);
|
|
203
|
+
const token = Buffer.from(stringifyStreamPayload(parsed)).toString("base64url");
|
|
204
|
+
return `${METRIK_STREAM_SCHEME} ${token}`;
|
|
191
205
|
}
|
|
192
|
-
export function
|
|
193
|
-
const parsed =
|
|
206
|
+
export function parseStreamChallengeJson(value) {
|
|
207
|
+
const parsed = streamChallengeSchema.safeParse(reviveBigInts(value));
|
|
194
208
|
if (!parsed.success) {
|
|
195
|
-
throw new
|
|
209
|
+
throw new StreamPayloadError(parsed.error.issues.map((issue) => issue.message).join("; "));
|
|
196
210
|
}
|
|
197
211
|
return parsed.data;
|
|
198
212
|
}
|
|
199
|
-
export function
|
|
213
|
+
export function parseStreamPayloadHeader(payloadHeader) {
|
|
200
214
|
const [scheme, token] = payloadHeader.split(" ", 2);
|
|
201
|
-
if (scheme !==
|
|
202
|
-
|
|
215
|
+
if (scheme !== METRIK_STREAM_SCHEME ||
|
|
216
|
+
token === undefined ||
|
|
217
|
+
token.trim() === "") {
|
|
218
|
+
throw new StreamPayloadError("invalid Metrik verified-stream payload header");
|
|
203
219
|
}
|
|
204
220
|
let decoded;
|
|
205
221
|
try {
|
|
206
222
|
decoded = JSON.parse(Buffer.from(token, "base64url").toString("utf8"));
|
|
207
223
|
}
|
|
208
224
|
catch (error) {
|
|
209
|
-
throw new
|
|
225
|
+
throw new StreamPayloadError(`invalid Metrik verified-stream payload encoding: ${error instanceof Error ? error.message : String(error)}`);
|
|
210
226
|
}
|
|
211
|
-
const parsed =
|
|
227
|
+
const parsed = streamOpenPayloadSchema.safeParse(reviveBigInts(decoded));
|
|
212
228
|
if (!parsed.success) {
|
|
213
|
-
throw new
|
|
229
|
+
throw new StreamPayloadError(parsed.error.issues.map((issue) => issue.message).join("; "));
|
|
214
230
|
}
|
|
215
231
|
return parsed.data;
|
|
216
232
|
}
|
|
@@ -225,7 +241,7 @@ function assertSettlementTarget(requirements, sdkConfig) {
|
|
|
225
241
|
throw new SettlementTargetMismatchError(`challenge escrow ${requirements.escrow} does not match configured escrow ${sdkConfig.escrow}`);
|
|
226
242
|
}
|
|
227
243
|
}
|
|
228
|
-
function
|
|
244
|
+
function stringifyStreamPayload(payload) {
|
|
229
245
|
return JSON.stringify(payload, (_key, value) => typeof value === "bigint" ? `${value.toString()}n` : value);
|
|
230
246
|
}
|
|
231
247
|
function reviveBigInts(value) {
|
|
@@ -240,4 +256,31 @@ function reviveBigInts(value) {
|
|
|
240
256
|
}
|
|
241
257
|
return value;
|
|
242
258
|
}
|
|
259
|
+
/* -------------------------------------------------------------------------- */
|
|
260
|
+
/* Deprecated `x402`-flavoured aliases. */
|
|
261
|
+
/* */
|
|
262
|
+
/* These names are misleading — this flow is Metrik-native and not x402 (see */
|
|
263
|
+
/* `docs/x402.md`). They are retained as aliases bound to the SAME values and */
|
|
264
|
+
/* class objects as the canonical exports above, so existing consumers and */
|
|
265
|
+
/* `instanceof` checks keep working. Prefer the canonical names. */
|
|
266
|
+
/* -------------------------------------------------------------------------- */
|
|
267
|
+
export {
|
|
268
|
+
/** @deprecated Use {@link METRIK_STREAM_SCHEME}. This flow is not x402. */
|
|
269
|
+
METRIK_STREAM_SCHEME as X402_SCHEME,
|
|
270
|
+
/** @deprecated Use {@link VerifiedStreamFacilitator}. This flow is not x402. */
|
|
271
|
+
VerifiedStreamFacilitator as VerifiedStreamX402Facilitator,
|
|
272
|
+
/** @deprecated Use {@link StreamPayloadError}. Same class object. */
|
|
273
|
+
StreamPayloadError as X402PayloadError,
|
|
274
|
+
/** @deprecated Use {@link SpendControlUnavailableError}. Same class object. */
|
|
275
|
+
SpendControlUnavailableError as X402SpendControlUnavailableError,
|
|
276
|
+
/** @deprecated Use {@link streamChallengeSchema}. */
|
|
277
|
+
streamChallengeSchema as x402StreamChallengeSchema,
|
|
278
|
+
/** @deprecated Use {@link streamOpenPayloadSchema}. */
|
|
279
|
+
streamOpenPayloadSchema as x402OpenPayloadSchema,
|
|
280
|
+
/** @deprecated Use {@link encodeStreamPayloadHeader}. */
|
|
281
|
+
encodeStreamPayloadHeader as encodeX402PayloadHeader,
|
|
282
|
+
/** @deprecated Use {@link parseStreamPayloadHeader}. */
|
|
283
|
+
parseStreamPayloadHeader as parseX402PayloadHeader,
|
|
284
|
+
/** @deprecated Use {@link parseStreamChallengeJson}. */
|
|
285
|
+
parseStreamChallengeJson as parseX402ChallengeJson, };
|
|
243
286
|
//# sourceMappingURL=facilitator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facilitator.js","sourceRoot":"","sources":["../../src/x402/facilitator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"facilitator.js","sourceRoot":"","sources":["../../src/x402/facilitator.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,wBAAwB,GAEzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,yBAAyB,GAE1B,MAAM,kBAAkB,CAAC;AAQ1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAAsC,CAAC;AAE3E;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAA2B,CAAC;AAEjE,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAC9D,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACvD,QAAQ,EAAE,aAAa;IACvB,UAAU,EAAE,aAAa;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,aAAa;IACrB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC/C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACvC,YAAY,EAAE,gCAAgC;CAC/C,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,qBAAqB;IAChC,aAAa,EAAE,wBAAwB;CACxC,CAAC,CAAC;AAmDH,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;AAEhD,uEAAuE;AACvE,SAAS,mBAAmB,CAAC,GAAW,EAAE,OAAe;IACvD,IAAI,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO;IACT,CAAC;IACD,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,0EAA0E;QAC1E,qEAAqE;QACrE,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,sDAAsD;QACtD,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC;IACjD,CAAC;CACF;AAED,MAAM,OAAO,yBAAyB;IACnB,WAAW,CAA4B;IACvC,cAAc,CAA2C;IACzD,SAAS,CAA0B;IACnC,UAAU,CAAe;IAC1C,+EAA+E;IAC/E,0EAA0E;IAC1E,8EAA8E;IAC9E,oCAAoC;IACnB,qBAAqB,CAExB;IACG,wBAAwB,CAI3B;IAEd,YAAY,OAAyC;QACnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI,yBAAyB,CAAC,CACzE,OAAO,CAAC,SAAS,CAClB,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,UAAU;YACb,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAC3D,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;QAEjE,0EAA0E;QAC1E,6EAA6E;QAC7E,yEAAyE;QACzE,6EAA6E;QAC7E,2EAA2E;QAC3E,+EAA+E;QAC/E,IAAI,OAAO,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAChD,mBAAmB,CACjB,qBAAqB,EACrB,sNAAsN,CACvN,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YACnD,mBAAmB,CACjB,0BAA0B,EAC1B,gMAAgM,CACjM,CAAC;QACJ,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAA+B;QACvC,MAAM,YAAY,GAAG,gCAAgC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjE,sBAAsB,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,aAAqB;QAC9B,MAAM,OAAO,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;QACxD,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvE,2EAA2E;QAC3E,2EAA2E;QAC3E,0EAA0E;QAC1E,qEAAqE;QACrE,sEAAsE;QACtE,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,4BAA4B,CACpC,0IAA0I,CAC3I,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,4BAA4B,CACpC,4HAA4H,CAC7H,CAAC;QACJ,CAAC;QAED,IAAI,cAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,4BAA4B,CACpC,wDACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,GAAG,EAAE,EAAE,CAAC;YAC9D,MAAM,IAAI,4BAA4B,CACpC,oHAAoH,CACrH,CAAC;QACJ,CAAC;QAED,IAAI,iBAA0C,CAAC;QAC/C,IAAI,CAAC;YACH,iBAAiB,GAAG,MAAM,IAAI,CAAC,wBAAwB,CACrD,OAAO,CAAC,aAAa,CACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,4BAA4B,CACpC,2CACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,IACE,iBAAiB,KAAK,IAAI;YAC1B,iBAAiB,KAAK,SAAS;YAC/B,OAAQ,iBAAqD,CAC3D,MAAM,CAAC,QAAQ,CAChB,KAAK,UAAU,EAChB,CAAC;YACD,MAAM,IAAI,4BAA4B,CACpC,8FAA8F,CAC/F,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;YACvD,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,QAAyB;YAClE,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,UAA2B;YACtE,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa;YACxD,iBAAiB,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,iBAAiB;YACnE,kBAAkB,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB;YACrE,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,cAAc;YACd,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;YAC7B,iBAAiB;SAClB,CAAC,CAAC;QAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC9B,KAAsC;QAEtC,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,6BAA6B,CACrC,qFAAqF,CACtF,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC;YAC1D,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/D,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAClE,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;gBACnC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;YAC3C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,GAAG,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS;gBACxC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACrD,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/D,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACnD,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/D,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrE,QAAQ,EAAE;gBACR,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,KAAsB;gBACjD,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,SAA0B;gBACzD,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrE,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;oBAChC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;aACtC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,UAAU,yBAAyB,CAAC,OAA0B;IAClE,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAChE,WAAW,CACZ,CAAC;IACF,OAAO,GAAG,oBAAoB,IAAI,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,kBAAkB,CAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,aAAqB;IAErB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpD,IACE,MAAM,KAAK,oBAAoB;QAC/B,KAAK,KAAK,SAAS;QACnB,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EACnB,CAAC;QACD,MAAM,IAAI,kBAAkB,CAC1B,+CAA+C,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAC1B,oDACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,kBAAkB,CAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,yBAAyB,CAChC,MAA+B;IAE/B,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,sBAAsB,CAC7B,YAAwC,EACxC,SAAkC;IAElC,IAAI,YAAY,CAAC,OAAO,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,6BAA6B,CACrC,qBAAqB,YAAY,CAAC,OAAO,oCAAoC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAClG,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QACzE,MAAM,IAAI,6BAA6B,CACrC,oBAAoB,YAAY,CAAC,MAAM,qCAAqC,SAAS,CAAC,MAAM,EAAE,CAC/F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,OAA0B;IACxD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC7C,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,gFAAgF;AAEhF,OAAO;AACL,2EAA2E;AAC3E,oBAAoB,IAAI,WAAW;AACnC,gFAAgF;AAChF,yBAAyB,IAAI,6BAA6B;AAC1D,qEAAqE;AACrE,kBAAkB,IAAI,gBAAgB;AACtC,+EAA+E;AAC/E,4BAA4B,IAAI,gCAAgC;AAChE,qDAAqD;AACrD,qBAAqB,IAAI,yBAAyB;AAClD,uDAAuD;AACvD,uBAAuB,IAAI,qBAAqB;AAChD,yDAAyD;AACzD,yBAAyB,IAAI,uBAAuB;AACpD,wDAAwD;AACxD,wBAAwB,IAAI,sBAAsB;AAClD,wDAAwD;AACxD,wBAAwB,IAAI,sBAAsB,GACnD,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
import type { PaymentRequirements } from "x402/types";
|
|
3
|
+
/**
|
|
4
|
+
* Standard x402 `exact` payment requirements, built from an OPERATOR-SIGNED
|
|
5
|
+
* Metrik listing.
|
|
6
|
+
*
|
|
7
|
+
* This is the "additional way in" described in `docs/x402.md`: the Metrik
|
|
8
|
+
* verified-stream flow (`./facilitator.ts`) is unchanged and is still the only
|
|
9
|
+
* path with recoverable escrow. What this module adds is the ability for a
|
|
10
|
+
* seller's gateway to ALSO quote an ordinary, fully conformant x402 `exact`
|
|
11
|
+
* price for a single call, so an agent holding nothing but `x402-fetch` can pay
|
|
12
|
+
* without knowing Metrik exists.
|
|
13
|
+
*
|
|
14
|
+
* ## What is signed and what is not
|
|
15
|
+
*
|
|
16
|
+
* `payTo` is derived from the operator's EIP-712-signed service descriptor and
|
|
17
|
+
* from nothing else. It is never read from configuration and never read from a
|
|
18
|
+
* caller-supplied field, because `payTo` is the one field whose corruption
|
|
19
|
+
* silently redirects money.
|
|
20
|
+
*
|
|
21
|
+
* The PRICE is not signed. The descriptor schema (`@absol-labs/shared`) carries
|
|
22
|
+
* `minRatePerSecond` / `maxRatePerSecond` for metered streams and has no
|
|
23
|
+
* per-call price field, so a per-call x402 amount can only come from the seller
|
|
24
|
+
* running the gateway. That is legitimate — it is the seller's own price on the
|
|
25
|
+
* seller's own gateway — but a buyer CANNOT cross-check it against the registry
|
|
26
|
+
* the way they can cross-check `payTo`. Said plainly here so nobody assumes a
|
|
27
|
+
* guarantee that does not exist.
|
|
28
|
+
*/
|
|
29
|
+
/** The only x402 protocol version implemented by the published `x402` package. */
|
|
30
|
+
export declare const X402_VERSION: 1;
|
|
31
|
+
/** The only x402 payment scheme implemented by the published `x402` package. */
|
|
32
|
+
export declare const X402_EXACT_SCHEME: "exact";
|
|
33
|
+
/** x402 v1 uses bare network names, not CAIP-2. Metrik settles on Base only. */
|
|
34
|
+
export declare const X402_NETWORK_BY_CHAIN_ID: Readonly<Record<number, "base" | "base-sepolia">>;
|
|
35
|
+
export interface X402AssetConfig {
|
|
36
|
+
readonly address: Address;
|
|
37
|
+
/** EIP-712 domain `name` of the asset, needed to sign EIP-3009 offline. */
|
|
38
|
+
readonly eip712Name: string;
|
|
39
|
+
/** EIP-712 domain `version` of the asset. */
|
|
40
|
+
readonly eip712Version: string;
|
|
41
|
+
readonly decimals: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* USDC per Base chain. The EIP-712 domain values are what a client needs to
|
|
45
|
+
* sign `TransferWithAuthorization` WITHOUT an extra RPC round trip: the x402
|
|
46
|
+
* client falls back to reading `version()` on chain only when
|
|
47
|
+
* `PaymentRequirements.extra` omits it, so quoting them here removes a network
|
|
48
|
+
* dependency from the payer's hot path.
|
|
49
|
+
*
|
|
50
|
+
* Base Sepolia values read from the live contract on 2026-09-18
|
|
51
|
+
* (`name() == "USDC"`, `version() == "2"`).
|
|
52
|
+
*/
|
|
53
|
+
export declare const X402_USDC_BY_CHAIN_ID: Readonly<Record<number, X402AssetConfig>>;
|
|
54
|
+
export declare class X402RequirementsError extends Error {
|
|
55
|
+
constructor(message: string);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The minimum a payee must prove. Both fields MUST be projected from the
|
|
59
|
+
* operator-signed descriptor (see `../discovery/registry.ts`, which recovers the
|
|
60
|
+
* EIP-712 signer and re-derives `serviceRef` from the signed content), never
|
|
61
|
+
* from an unsigned registry column and never from a request.
|
|
62
|
+
*/
|
|
63
|
+
export interface SignedListingPayee {
|
|
64
|
+
readonly serviceRef: Hex;
|
|
65
|
+
readonly operator: Address;
|
|
66
|
+
}
|
|
67
|
+
export interface BuildMetrikPaymentRequirementsInput {
|
|
68
|
+
readonly listing: SignedListingPayee;
|
|
69
|
+
/** Absolute URL of the paid resource, as the buyer will request it. */
|
|
70
|
+
readonly resource: string;
|
|
71
|
+
/** Price for ONE call, in the asset's base units (micro-USDC at 6 decimals). */
|
|
72
|
+
readonly priceBaseUnits: bigint;
|
|
73
|
+
readonly chainId: number;
|
|
74
|
+
readonly description?: string;
|
|
75
|
+
readonly mimeType?: string;
|
|
76
|
+
/** How long the signed authorization stays valid. Default 60s. */
|
|
77
|
+
readonly maxTimeoutSeconds?: number;
|
|
78
|
+
readonly outputSchema?: Record<string, unknown>;
|
|
79
|
+
/** Override the settlement asset (defaults to USDC for `chainId`). */
|
|
80
|
+
readonly asset?: X402AssetConfig;
|
|
81
|
+
}
|
|
82
|
+
/** Default authorization validity window quoted to payers, in seconds. */
|
|
83
|
+
export declare const DEFAULT_X402_MAX_TIMEOUT_SECONDS = 60;
|
|
84
|
+
/**
|
|
85
|
+
* Builds standard-`exact` `PaymentRequirements` for one call of a Metrik-listed
|
|
86
|
+
* resource. Throws rather than emitting anything a conformant client would
|
|
87
|
+
* reject or a payer could be harmed by.
|
|
88
|
+
*/
|
|
89
|
+
export declare function buildMetrikPaymentRequirements(input: BuildMetrikPaymentRequirementsInput): PaymentRequirements;
|
|
90
|
+
/**
|
|
91
|
+
* The HTTP `402` response body a resource server returns.
|
|
92
|
+
*
|
|
93
|
+
* NOTE on `error`: the shipped `x402ResponseSchema` types `error` as the closed
|
|
94
|
+
* `ErrorReasons` enum, which no real x402 server obeys — `x402-express` and
|
|
95
|
+
* friends put human-readable text there, and `x402-fetch` never reads the field
|
|
96
|
+
* at all. Metrik follows the real-world behaviour (free text) rather than the
|
|
97
|
+
* schema; `test/x402-facilitator-conformance.test.ts` pins that divergence so it
|
|
98
|
+
* is a recorded decision and not an accident.
|
|
99
|
+
*/
|
|
100
|
+
export interface X402PaymentRequiredBody {
|
|
101
|
+
readonly x402Version: typeof X402_VERSION;
|
|
102
|
+
readonly error: string;
|
|
103
|
+
readonly accepts: readonly PaymentRequirements[];
|
|
104
|
+
}
|
|
105
|
+
export declare function buildX402PaymentRequiredBody(accepts: readonly PaymentRequirements[], error?: string): X402PaymentRequiredBody;
|
|
106
|
+
//# sourceMappingURL=payment-requirements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-requirements.d.ts","sourceRoot":"","sources":["../../src/x402/payment-requirements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAOzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,kFAAkF;AAClF,eAAO,MAAM,YAAY,EAAG,CAAU,CAAC;AAEvC,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,EAAG,OAAgB,CAAC;AAElD,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,CAIvC,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAcxE,CAAC;AAEL,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,0EAA0E;AAC1E,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,mCAAmC,GACzC,mBAAmB,CAyErB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,OAAO,YAAY,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAClD;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,KAAK,SAAiC,GACrC,uBAAuB,CAOzB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { getAddress, isAddress, isHex } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* Standard x402 `exact` payment requirements, built from an OPERATOR-SIGNED
|
|
4
|
+
* Metrik listing.
|
|
5
|
+
*
|
|
6
|
+
* This is the "additional way in" described in `docs/x402.md`: the Metrik
|
|
7
|
+
* verified-stream flow (`./facilitator.ts`) is unchanged and is still the only
|
|
8
|
+
* path with recoverable escrow. What this module adds is the ability for a
|
|
9
|
+
* seller's gateway to ALSO quote an ordinary, fully conformant x402 `exact`
|
|
10
|
+
* price for a single call, so an agent holding nothing but `x402-fetch` can pay
|
|
11
|
+
* without knowing Metrik exists.
|
|
12
|
+
*
|
|
13
|
+
* ## What is signed and what is not
|
|
14
|
+
*
|
|
15
|
+
* `payTo` is derived from the operator's EIP-712-signed service descriptor and
|
|
16
|
+
* from nothing else. It is never read from configuration and never read from a
|
|
17
|
+
* caller-supplied field, because `payTo` is the one field whose corruption
|
|
18
|
+
* silently redirects money.
|
|
19
|
+
*
|
|
20
|
+
* The PRICE is not signed. The descriptor schema (`@absol-labs/shared`) carries
|
|
21
|
+
* `minRatePerSecond` / `maxRatePerSecond` for metered streams and has no
|
|
22
|
+
* per-call price field, so a per-call x402 amount can only come from the seller
|
|
23
|
+
* running the gateway. That is legitimate — it is the seller's own price on the
|
|
24
|
+
* seller's own gateway — but a buyer CANNOT cross-check it against the registry
|
|
25
|
+
* the way they can cross-check `payTo`. Said plainly here so nobody assumes a
|
|
26
|
+
* guarantee that does not exist.
|
|
27
|
+
*/
|
|
28
|
+
/** The only x402 protocol version implemented by the published `x402` package. */
|
|
29
|
+
export const X402_VERSION = 1;
|
|
30
|
+
/** The only x402 payment scheme implemented by the published `x402` package. */
|
|
31
|
+
export const X402_EXACT_SCHEME = "exact";
|
|
32
|
+
/** x402 v1 uses bare network names, not CAIP-2. Metrik settles on Base only. */
|
|
33
|
+
export const X402_NETWORK_BY_CHAIN_ID = Object.freeze({
|
|
34
|
+
8453: "base",
|
|
35
|
+
84532: "base-sepolia",
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* USDC per Base chain. The EIP-712 domain values are what a client needs to
|
|
39
|
+
* sign `TransferWithAuthorization` WITHOUT an extra RPC round trip: the x402
|
|
40
|
+
* client falls back to reading `version()` on chain only when
|
|
41
|
+
* `PaymentRequirements.extra` omits it, so quoting them here removes a network
|
|
42
|
+
* dependency from the payer's hot path.
|
|
43
|
+
*
|
|
44
|
+
* Base Sepolia values read from the live contract on 2026-09-18
|
|
45
|
+
* (`name() == "USDC"`, `version() == "2"`).
|
|
46
|
+
*/
|
|
47
|
+
export const X402_USDC_BY_CHAIN_ID = Object.freeze({
|
|
48
|
+
8453: Object.freeze({
|
|
49
|
+
address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
50
|
+
eip712Name: "USD Coin",
|
|
51
|
+
eip712Version: "2",
|
|
52
|
+
decimals: 6,
|
|
53
|
+
}),
|
|
54
|
+
84532: Object.freeze({
|
|
55
|
+
address: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
|
|
56
|
+
eip712Name: "USDC",
|
|
57
|
+
eip712Version: "2",
|
|
58
|
+
decimals: 6,
|
|
59
|
+
}),
|
|
60
|
+
});
|
|
61
|
+
export class X402RequirementsError extends Error {
|
|
62
|
+
constructor(message) {
|
|
63
|
+
super(message);
|
|
64
|
+
this.name = "X402RequirementsError";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Default authorization validity window quoted to payers, in seconds. */
|
|
68
|
+
export const DEFAULT_X402_MAX_TIMEOUT_SECONDS = 60;
|
|
69
|
+
/**
|
|
70
|
+
* Builds standard-`exact` `PaymentRequirements` for one call of a Metrik-listed
|
|
71
|
+
* resource. Throws rather than emitting anything a conformant client would
|
|
72
|
+
* reject or a payer could be harmed by.
|
|
73
|
+
*/
|
|
74
|
+
export function buildMetrikPaymentRequirements(input) {
|
|
75
|
+
const network = X402_NETWORK_BY_CHAIN_ID[input.chainId];
|
|
76
|
+
if (network === undefined) {
|
|
77
|
+
throw new X402RequirementsError(`x402 v1 has no network name for chain ${input.chainId} (Metrik settles on Base: 8453, 84532)`);
|
|
78
|
+
}
|
|
79
|
+
const asset = input.asset ?? X402_USDC_BY_CHAIN_ID[input.chainId];
|
|
80
|
+
if (asset === undefined) {
|
|
81
|
+
throw new X402RequirementsError(`no default settlement asset known for chain ${input.chainId}`);
|
|
82
|
+
}
|
|
83
|
+
if (!isAddress(input.listing.operator)) {
|
|
84
|
+
throw new X402RequirementsError("listing.operator must be an EVM address (it becomes payTo)");
|
|
85
|
+
}
|
|
86
|
+
if (!isHex(input.listing.serviceRef, { strict: true }) ||
|
|
87
|
+
input.listing.serviceRef.length !== 66) {
|
|
88
|
+
throw new X402RequirementsError("listing.serviceRef must be a 32-byte hex value");
|
|
89
|
+
}
|
|
90
|
+
if (input.priceBaseUnits <= 0n) {
|
|
91
|
+
throw new X402RequirementsError("priceBaseUnits must be positive — a zero-priced x402 quote is not a payment");
|
|
92
|
+
}
|
|
93
|
+
let resource;
|
|
94
|
+
try {
|
|
95
|
+
resource = new URL(input.resource);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
throw new X402RequirementsError(`resource must be an absolute URL`);
|
|
99
|
+
}
|
|
100
|
+
const maxTimeoutSeconds = input.maxTimeoutSeconds ?? DEFAULT_X402_MAX_TIMEOUT_SECONDS;
|
|
101
|
+
if (!Number.isInteger(maxTimeoutSeconds) || maxTimeoutSeconds <= 0) {
|
|
102
|
+
throw new X402RequirementsError("maxTimeoutSeconds must be a positive integer");
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
scheme: X402_EXACT_SCHEME,
|
|
106
|
+
network,
|
|
107
|
+
maxAmountRequired: input.priceBaseUnits.toString(),
|
|
108
|
+
resource: resource.toString(),
|
|
109
|
+
description: input.description ??
|
|
110
|
+
"One call to a Metrik-listed service. Metrik's facilitator refuses to settle this payment while its oracle reports the service as failing.",
|
|
111
|
+
mimeType: input.mimeType ?? "application/json",
|
|
112
|
+
payTo: getAddress(input.listing.operator),
|
|
113
|
+
maxTimeoutSeconds,
|
|
114
|
+
asset: getAddress(asset.address),
|
|
115
|
+
extra: {
|
|
116
|
+
// Required by the x402 `exact` EVM binding so the payer can sign the
|
|
117
|
+
// EIP-3009 authorization offline.
|
|
118
|
+
name: asset.eip712Name,
|
|
119
|
+
version: asset.eip712Version,
|
|
120
|
+
// ADVISORY ONLY. The facilitator NEVER reads this to decide anything: it
|
|
121
|
+
// arrives inside a caller-supplied request body, so trusting it would let
|
|
122
|
+
// a caller pick which service's delivery record gets checked. The
|
|
123
|
+
// facilitator re-derives the service from `resource` against its own
|
|
124
|
+
// registry view. Published purely so a client can look the listing up.
|
|
125
|
+
metrikServiceRef: input.listing.serviceRef,
|
|
126
|
+
},
|
|
127
|
+
...(input.outputSchema === undefined
|
|
128
|
+
? {}
|
|
129
|
+
: { outputSchema: input.outputSchema }),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
export function buildX402PaymentRequiredBody(accepts, error = "X-PAYMENT header is required") {
|
|
133
|
+
if (accepts.length === 0) {
|
|
134
|
+
throw new X402RequirementsError("a 402 must advertise at least one PaymentRequirements");
|
|
135
|
+
}
|
|
136
|
+
return { x402Version: X402_VERSION, error, accepts };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=payment-requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-requirements.js","sourceRoot":"","sources":["../../src/x402/payment-requirements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Chain, type Hex } from "viem";
|
|
2
|
+
import type { PaymentSettler, PaymentVerifier } from "./verified-delivery-facilitator.js";
|
|
3
|
+
/**
|
|
4
|
+
* Chain wiring for the payment half of Metrik's x402 facilitator.
|
|
5
|
+
*
|
|
6
|
+
* Nothing here is Metrik-specific: verification and settlement are delegated
|
|
7
|
+
* VERBATIM to the real `x402/facilitator` implementation of the `exact` scheme.
|
|
8
|
+
* Metrik does not reimplement EIP-3009, and a change in the library's rules is
|
|
9
|
+
* inherited rather than drifted away from. The Metrik-specific part — the
|
|
10
|
+
* delivery gate — lives entirely in `./verified-delivery-facilitator.ts` and is
|
|
11
|
+
* layered ON TOP of whatever this returns.
|
|
12
|
+
*/
|
|
13
|
+
export declare const X402_CHAINS: Readonly<Record<number, Chain>>;
|
|
14
|
+
export interface X402ChainOptions {
|
|
15
|
+
/** Default `84532` (Base Sepolia). */
|
|
16
|
+
readonly chainId?: number;
|
|
17
|
+
/** RPC endpoint. Required: the library's default public RPCs are not operable infrastructure. */
|
|
18
|
+
readonly rpcUrl: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Read-only verifier. Needs an RPC because the `exact` scheme checks the payer's
|
|
22
|
+
* on-chain balance; it holds no key and can broadcast nothing.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createX402PaymentVerifier(options: X402ChainOptions): PaymentVerifier;
|
|
25
|
+
export interface X402RelayerOptions extends X402ChainOptions {
|
|
26
|
+
/**
|
|
27
|
+
* The relayer's private key. This wallet BROADCASTS and pays gas; it never
|
|
28
|
+
* custodies payment funds (EIP-3009 moves value directly from payer to payee).
|
|
29
|
+
* Supplied by the operator through the environment, exactly like every other
|
|
30
|
+
* wallet in this package. Never committed, never defaulted.
|
|
31
|
+
*/
|
|
32
|
+
readonly privateKey: Hex;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The settlement half. Constructing this is the ONLY place a key enters the
|
|
36
|
+
* facilitator, and there is no code path that broadcasts without one.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createX402PaymentSettler(options: X402RelayerOptions): PaymentSettler;
|
|
39
|
+
/** The relayer address, so an operator can check what they must fund with gas. */
|
|
40
|
+
export declare function relayerAddress(privateKey: Hex): `0x${string}`;
|
|
41
|
+
//# sourceMappingURL=relayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relayer.d.ts","sourceRoot":"","sources":["../../src/x402/relayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,KAAK,EACV,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;AAWd,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAE5C;;;;;;;;;GASG;AAEH,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAGtD,CAAC;AAEH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAUD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gBAAgB,GACxB,eAAe,CAkBjB;AAED,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,kBAAkB,GAC1B,cAAc,CAoBhB;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,UAAU,EAAE,GAAG,GAAG,KAAK,MAAM,EAAE,CAE7D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createPublicClient, createWalletClient, http, publicActions, } from "viem";
|
|
2
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
3
|
+
import { base, baseSepolia } from "viem/chains";
|
|
4
|
+
import { settle as x402Settle, verify as x402Verify } from "x402/facilitator";
|
|
5
|
+
/**
|
|
6
|
+
* Chain wiring for the payment half of Metrik's x402 facilitator.
|
|
7
|
+
*
|
|
8
|
+
* Nothing here is Metrik-specific: verification and settlement are delegated
|
|
9
|
+
* VERBATIM to the real `x402/facilitator` implementation of the `exact` scheme.
|
|
10
|
+
* Metrik does not reimplement EIP-3009, and a change in the library's rules is
|
|
11
|
+
* inherited rather than drifted away from. The Metrik-specific part — the
|
|
12
|
+
* delivery gate — lives entirely in `./verified-delivery-facilitator.ts` and is
|
|
13
|
+
* layered ON TOP of whatever this returns.
|
|
14
|
+
*/
|
|
15
|
+
export const X402_CHAINS = Object.freeze({
|
|
16
|
+
8453: base,
|
|
17
|
+
84532: baseSepolia,
|
|
18
|
+
});
|
|
19
|
+
function chainFor(chainId) {
|
|
20
|
+
const chain = X402_CHAINS[chainId];
|
|
21
|
+
if (chain === undefined) {
|
|
22
|
+
throw new Error(`unsupported x402 settlement chain: ${chainId}`);
|
|
23
|
+
}
|
|
24
|
+
return chain;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Read-only verifier. Needs an RPC because the `exact` scheme checks the payer's
|
|
28
|
+
* on-chain balance; it holds no key and can broadcast nothing.
|
|
29
|
+
*/
|
|
30
|
+
export function createX402PaymentVerifier(options) {
|
|
31
|
+
const chain = chainFor(options.chainId ?? 84532);
|
|
32
|
+
const client = createPublicClient({
|
|
33
|
+
chain,
|
|
34
|
+
transport: http(options.rpcUrl),
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
verify(payload, requirements) {
|
|
38
|
+
return x402Verify(client, payload, requirements);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The settlement half. Constructing this is the ONLY place a key enters the
|
|
44
|
+
* facilitator, and there is no code path that broadcasts without one.
|
|
45
|
+
*/
|
|
46
|
+
export function createX402PaymentSettler(options) {
|
|
47
|
+
const chain = chainFor(options.chainId ?? 84532);
|
|
48
|
+
const account = privateKeyToAccount(options.privateKey);
|
|
49
|
+
const signer = createWalletClient({
|
|
50
|
+
account,
|
|
51
|
+
chain,
|
|
52
|
+
transport: http(options.rpcUrl),
|
|
53
|
+
}).extend(publicActions);
|
|
54
|
+
return {
|
|
55
|
+
settle(payload, requirements) {
|
|
56
|
+
return x402Settle(signer, payload, requirements);
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** The relayer address, so an operator can check what they must fund with gas. */
|
|
61
|
+
export function relayerAddress(privateKey) {
|
|
62
|
+
return privateKeyToAccount(privateKey).address;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=relayer.js.map
|