@absol-labs/agent 0.9.1 → 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 +184 -26
- 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/amounts.d.ts +26 -0
- package/dist/cli/amounts.d.ts.map +1 -0
- package/dist/cli/amounts.js +71 -0
- package/dist/cli/amounts.js.map +1 -0
- package/dist/cli/args.d.ts +32 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +119 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/attesters.d.ts +51 -0
- package/dist/cli/attesters.d.ts.map +1 -0
- package/dist/cli/attesters.js +58 -0
- package/dist/cli/attesters.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +5 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/claim.d.ts +13 -0
- package/dist/cli/commands/claim.d.ts.map +1 -0
- package/dist/cli/commands/claim.js +102 -0
- package/dist/cli/commands/claim.js.map +1 -0
- package/dist/cli/commands/close.d.ts +3 -0
- package/dist/cli/commands/close.d.ts.map +1 -0
- package/dist/cli/commands/close.js +55 -0
- package/dist/cli/commands/close.js.map +1 -0
- package/dist/cli/commands/discover.d.ts +3 -0
- package/dist/cli/commands/discover.d.ts.map +1 -0
- package/dist/cli/commands/discover.js +183 -0
- package/dist/cli/commands/discover.js.map +1 -0
- package/dist/cli/commands/invoke.d.ts +3 -0
- package/dist/cli/commands/invoke.d.ts.map +1 -0
- package/dist/cli/commands/invoke.js +142 -0
- package/dist/cli/commands/invoke.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +113 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/open.d.ts +3 -0
- package/dist/cli/commands/open.d.ts.map +1 -0
- package/dist/cli/commands/open.js +331 -0
- package/dist/cli/commands/open.js.map +1 -0
- package/dist/cli/commands/reclaim-unverified.d.ts +3 -0
- package/dist/cli/commands/reclaim-unverified.d.ts.map +1 -0
- package/dist/cli/commands/reclaim-unverified.js +172 -0
- package/dist/cli/commands/reclaim-unverified.js.map +1 -0
- package/dist/cli/commands/reclaim.d.ts +33 -0
- package/dist/cli/commands/reclaim.d.ts.map +1 -0
- package/dist/cli/commands/reclaim.js +308 -0
- package/dist/cli/commands/reclaim.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +43 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/streams.d.ts +3 -0
- package/dist/cli/commands/streams.d.ts.map +1 -0
- package/dist/cli/commands/streams.js +257 -0
- package/dist/cli/commands/streams.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +3 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +55 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/config.d.ts +61 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +140 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/context.d.ts +29 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +2 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/deps.d.ts +191 -0
- package/dist/cli/deps.d.ts.map +1 -0
- package/dist/cli/deps.js +277 -0
- package/dist/cli/deps.js.map +1 -0
- package/dist/cli/descriptor.d.ts +61 -0
- package/dist/cli/descriptor.d.ts.map +1 -0
- package/dist/cli/descriptor.js +78 -0
- package/dist/cli/descriptor.js.map +1 -0
- package/dist/cli/errors.d.ts +48 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +129 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/escape-hatch.d.ts +50 -0
- package/dist/cli/escape-hatch.d.ts.map +1 -0
- package/dist/cli/escape-hatch.js +45 -0
- package/dist/cli/escape-hatch.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/listings.d.ts +15 -0
- package/dist/cli/listings.d.ts.map +1 -0
- package/dist/cli/listings.js +56 -0
- package/dist/cli/listings.js.map +1 -0
- package/dist/cli/mandate.d.ts +66 -0
- package/dist/cli/mandate.d.ts.map +1 -0
- package/dist/cli/mandate.js +61 -0
- package/dist/cli/mandate.js.map +1 -0
- package/dist/cli/output.d.ts +33 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +34 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/preflight.d.ts +38 -0
- package/dist/cli/preflight.d.ts.map +1 -0
- package/dist/cli/preflight.js +72 -0
- package/dist/cli/preflight.js.map +1 -0
- 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/progress.d.ts +36 -0
- package/dist/cli/progress.d.ts.map +1 -0
- package/dist/cli/progress.js +40 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/cli/run.d.ts +25 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +173 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/scan-range.d.ts +55 -0
- package/dist/cli/scan-range.d.ts.map +1 -0
- package/dist/cli/scan-range.js +57 -0
- package/dist/cli/scan-range.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/status.d.ts +90 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +252 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/timeout.d.ts +30 -0
- package/dist/cli/timeout.d.ts.map +1 -0
- package/dist/cli/timeout.js +55 -0
- package/dist/cli/timeout.js.map +1 -0
- package/dist/cli/version.d.ts +12 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +22 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli/wallet.d.ts +164 -0
- package/dist/cli/wallet.d.ts.map +1 -0
- package/dist/cli/wallet.js +234 -0
- package/dist/cli/wallet.js.map +1 -0
- package/dist/frameworks/crewai.d.ts +10 -0
- package/dist/frameworks/crewai.d.ts.map +1 -1
- package/dist/frameworks/crewai.js +12 -2
- package/dist/frameworks/crewai.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/server-entry.d.ts +1 -0
- package/dist/gateway/server-entry.js +1 -0
- package/dist/gateway/server-entry.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/http-server.d.ts +1 -0
- package/dist/mcp/http-server.js +1 -0
- package/dist/mcp/http-server.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 +533 -25
- 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/mcp/stdio.d.ts +1 -0
- package/dist/mcp/stdio.js +1 -0
- package/dist/mcp/stdio.js.map +1 -1
- package/dist/sdk/client.d.ts +25 -1
- package/dist/sdk/client.d.ts.map +1 -1
- package/dist/sdk/client.js +20 -1
- package/dist/sdk/client.js.map +1 -1
- 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 +14 -9
- package/docs/cli.md +705 -0
- package/docs/crewai.md +6 -2
- package/docs/eliza.md +6 -1
- package/docs/mcp-hosted.md +7 -5
- package/docs/mcp-reference.md +175 -0
- package/docs/quickstart.md +36 -9
- package/docs/threat-model.md +4 -3
- package/docs/x402.md +648 -0
- package/package.json +33 -10
- package/src/capability/invocation-capability.ts +17 -1
- package/src/cli/amounts.ts +102 -0
- package/src/cli/args.ts +150 -0
- package/src/cli/attesters.ts +86 -0
- package/src/cli/bin.ts +5 -0
- package/src/cli/commands/claim.ts +126 -0
- package/src/cli/commands/close.ts +69 -0
- package/src/cli/commands/discover.ts +228 -0
- package/src/cli/commands/invoke.ts +178 -0
- package/src/cli/commands/mcp.ts +135 -0
- package/src/cli/commands/open.ts +397 -0
- package/src/cli/commands/reclaim-unverified.ts +218 -0
- package/src/cli/commands/reclaim.ts +377 -0
- package/src/cli/commands/status.ts +56 -0
- package/src/cli/commands/streams.ts +344 -0
- package/src/cli/commands/watch.ts +70 -0
- package/src/cli/config.ts +208 -0
- package/src/cli/context.ts +30 -0
- package/src/cli/deps.ts +528 -0
- package/src/cli/descriptor.ts +133 -0
- package/src/cli/errors.ts +162 -0
- package/src/cli/escape-hatch.ts +92 -0
- package/src/cli/index.ts +27 -0
- package/src/cli/listings.ts +77 -0
- package/src/cli/mandate.ts +126 -0
- package/src/cli/output.ts +63 -0
- package/src/cli/preflight.ts +88 -0
- package/src/cli/privy.ts +396 -0
- package/src/cli/progress.ts +75 -0
- package/src/cli/run.ts +209 -0
- package/src/cli/scan-range.ts +76 -0
- package/src/cli/spend-policy.ts +139 -0
- package/src/cli/status.ts +381 -0
- package/src/cli/timeout.ts +64 -0
- package/src/cli/version.ts +21 -0
- package/src/cli/wallet.ts +372 -0
- package/src/frameworks/crewai.ts +13 -2
- package/src/gateway/caller-auth-gateway.ts +77 -6
- package/src/gateway/http-server.ts +280 -6
- package/src/gateway/server-entry.ts +1 -0
- package/src/gateway/x402-mode.ts +350 -0
- package/src/index.ts +40 -5
- package/src/mandates/env.ts +3 -2
- package/src/mcp/http-server.ts +1 -0
- package/src/mcp/server.ts +706 -30
- package/src/mcp/service-invoker.ts +285 -0
- package/src/mcp/stdio.ts +1 -0
- package/src/sdk/client.ts +33 -1
- 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/sdk/invoke.js
CHANGED
|
@@ -52,8 +52,8 @@ export class InvokeAccessUrlError extends Error {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
export class InvokePathError extends Error {
|
|
55
|
-
constructor(
|
|
56
|
-
super(
|
|
55
|
+
constructor(message) {
|
|
56
|
+
super(message);
|
|
57
57
|
this.name = "InvokePathError";
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -95,6 +95,10 @@ export async function invoke(streamId, request, options) {
|
|
|
95
95
|
throw new InvokeStreamExpiredError(streamId, stream.expiresAt);
|
|
96
96
|
}
|
|
97
97
|
const serviceBaseUrl = await resolveInvocationBaseUrl(stream.serviceRef, options);
|
|
98
|
+
// Resolve BEFORE signing. A path that escapes the signed base must never
|
|
99
|
+
// cause a buyer-signed capability to exist at all, let alone be sent
|
|
100
|
+
// somewhere the operator did not sign.
|
|
101
|
+
const url = resolveInvocationUrl(serviceBaseUrl, request.path);
|
|
98
102
|
const capability = await capabilityFor(streamId, request, {
|
|
99
103
|
buyer: options.buyer,
|
|
100
104
|
domain: options.domain,
|
|
@@ -106,7 +110,6 @@ export async function invoke(streamId, request, options) {
|
|
|
106
110
|
nowSeconds,
|
|
107
111
|
});
|
|
108
112
|
const header = encodeCapabilityHeader(capability);
|
|
109
|
-
const url = new URL(request.path, ensureTrailingSlash(serviceBaseUrl)).toString();
|
|
110
113
|
const fetchImpl = options.fetchImpl ?? fetch;
|
|
111
114
|
const response = await fetchImpl(url, {
|
|
112
115
|
method: request.method,
|
|
@@ -263,10 +266,71 @@ function requireHttpUrl(value, label) {
|
|
|
263
266
|
}
|
|
264
267
|
return parsed.toString();
|
|
265
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Characters that must never appear in an invocation path.
|
|
271
|
+
*
|
|
272
|
+
* The backslash is the important one. The WHATWG URL parser treats `\` as `/`
|
|
273
|
+
* for special schemes, so `/\evil.com/x` resolved against `https://good/`
|
|
274
|
+
* yields `https://evil.com/x` — a prefix check for `//` does not see it. C0
|
|
275
|
+
* controls and DEL are rejected alongside it because a header- or log-splitting
|
|
276
|
+
* character has no business in a path either.
|
|
277
|
+
*/
|
|
278
|
+
const FORBIDDEN_PATH_CHARACTERS = /[\\\u0000-\u001f\u007f]/;
|
|
266
279
|
function assertOriginRelativePath(path) {
|
|
267
|
-
if (!path.startsWith("/") || path.startsWith("//")
|
|
268
|
-
throw new InvokePathError(path);
|
|
280
|
+
if (!path.startsWith("/") || path.startsWith("//")) {
|
|
281
|
+
throw new InvokePathError(`invocation path must be origin-relative and start with one slash: ${JSON.stringify(path)}`);
|
|
282
|
+
}
|
|
283
|
+
if (path.includes("#")) {
|
|
284
|
+
throw new InvokePathError(`invocation path must not contain a fragment: ${JSON.stringify(path)}`);
|
|
285
|
+
}
|
|
286
|
+
if (FORBIDDEN_PATH_CHARACTERS.test(path)) {
|
|
287
|
+
throw new InvokePathError(`invocation path must not contain a backslash or a control character: ${JSON.stringify(path)}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Resolves `path` against the operator-signed base URL and PROVES the result
|
|
292
|
+
* did not leave it.
|
|
293
|
+
*
|
|
294
|
+
* Prefix checks on the raw path are not sufficient and never were: the URL
|
|
295
|
+
* parser decides where a string points, so the only trustworthy check is to
|
|
296
|
+
* resolve first and then compare what came out. `/\evil.com/x` and
|
|
297
|
+
* `/a/../../b` both look origin-relative and both leave the signed base.
|
|
298
|
+
*
|
|
299
|
+
* What escaping would cost, concretely: the buyer's signed EIP-712 capability
|
|
300
|
+
* is handed to an attacker-controlled host, the attacker's response is
|
|
301
|
+
* returned to the caller as if it were the paid service's answer, and the
|
|
302
|
+
* MCP host's own network becomes reachable from a tool argument.
|
|
303
|
+
*/
|
|
304
|
+
export function resolveInvocationUrl(serviceBaseUrl, path) {
|
|
305
|
+
assertOriginRelativePath(path);
|
|
306
|
+
const base = new URL(ensureTrailingSlash(serviceBaseUrl));
|
|
307
|
+
let resolved;
|
|
308
|
+
try {
|
|
309
|
+
resolved = new URL(path, base);
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
throw new InvokePathError(`invocation path does not resolve against the signed service URL: ${JSON.stringify(path)}`);
|
|
313
|
+
}
|
|
314
|
+
if (resolved.origin !== base.origin || resolved.origin === "null") {
|
|
315
|
+
throw new InvokePathError(`invocation path resolves to ${resolved.origin}, which is not the operator-signed origin ${base.origin}`);
|
|
316
|
+
}
|
|
317
|
+
if (resolved.username !== "" || resolved.password !== "") {
|
|
318
|
+
throw new InvokePathError("invocation path must not carry credentials in the resolved URL");
|
|
319
|
+
}
|
|
320
|
+
// `base.pathname` always ends in `/` (ensureTrailingSlash), so a prefix match
|
|
321
|
+
// on the RESOLVED pathname is a true containment check — `..` segments have
|
|
322
|
+
// already been collapsed by the parser.
|
|
323
|
+
//
|
|
324
|
+
// An absolute-path reference replaces the whole path, so this ALSO rejects a
|
|
325
|
+
// signed base URL carrying a sub-path (`https://host/base/`). That is
|
|
326
|
+
// deliberate: the previous behaviour silently discarded the operator's signed
|
|
327
|
+
// `/base/` and called the origin root instead — an origin path the operator
|
|
328
|
+
// never signed, and one the gateway's own pathHash check could not match.
|
|
329
|
+
// Refusing says so instead of quietly calling the wrong place.
|
|
330
|
+
if (!resolved.pathname.startsWith(base.pathname)) {
|
|
331
|
+
throw new InvokePathError(`invocation path ${JSON.stringify(path)} resolves to ${resolved.pathname}, which is outside the operator-signed base path ${base.pathname}. An origin-relative path replaces the whole path, so a signed base URL with a sub-path cannot be addressed this way.`);
|
|
269
332
|
}
|
|
333
|
+
return resolved.toString();
|
|
270
334
|
}
|
|
271
335
|
function ensureTrailingSlash(value) {
|
|
272
336
|
return value.endsWith("/") ? value : `${value}/`;
|
package/dist/sdk/invoke.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/sdk/invoke.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/sdk/invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Metrik delivery signal, as consumed by the x402 facilitator.
|
|
3
|
+
*
|
|
4
|
+
* ## Where the signal comes from
|
|
5
|
+
*
|
|
6
|
+
* The oracle publishes `GET /services` — one row per `serviceRef`, reduced from
|
|
7
|
+
* the oracle's own settlement-path verdicts for the active streams of that
|
|
8
|
+
* service (`streamproof-oracle/src/service-status.ts`). Its three states are
|
|
9
|
+
* already buyer-favouring at the source: a FRESH failing stream beats a fresh
|
|
10
|
+
* delivering sibling, and absent/stale evidence is reported as `unverified`
|
|
11
|
+
* rather than folded into "fine".
|
|
12
|
+
*
|
|
13
|
+
* ## Why this module re-checks freshness the oracle already checked
|
|
14
|
+
*
|
|
15
|
+
* The oracle's own bound is 5 minutes (`DEFAULT_SERVICE_STATUS_TTL_MS`), which
|
|
16
|
+
* is a sensible bound for a dashboard and far too loose for a payment gate. On
|
|
17
|
+
* top of that the HTTP response itself can be cached or served by a stale
|
|
18
|
+
* replica, and `lastCheckedAt` is the only field that dates the EVIDENCE rather
|
|
19
|
+
* than the response. So the age of `lastCheckedAt` is re-derived here against
|
|
20
|
+
* this module's own, much tighter window.
|
|
21
|
+
*
|
|
22
|
+
* ## The freshness window: 90 seconds, and why
|
|
23
|
+
*
|
|
24
|
+
* The oracle checkpoints every ~15–22 s, and a service's recorded status is
|
|
25
|
+
* refreshed on that cadence. A window has to be wide enough that ordinary
|
|
26
|
+
* jitter does not flap the gate, and narrow enough that "verified" still means
|
|
27
|
+
* "now":
|
|
28
|
+
*
|
|
29
|
+
* - 3 worst-case probe intervals (3 x 22 s = 66 s) absorbs two consecutive
|
|
30
|
+
* missed or slow ticks, which is normal operational noise, not evidence of
|
|
31
|
+
* a dead service.
|
|
32
|
+
* - plus the oracle's own record-and-serve latency and this process's fetch
|
|
33
|
+
* round trip, rounded up: **90 s**.
|
|
34
|
+
*
|
|
35
|
+
* Tighter (e.g. 30 s) and a single slow tick turns a healthy service's gate
|
|
36
|
+
* indeterminate. Looser (e.g. the oracle's own 300 s) and a service that died
|
|
37
|
+
* four minutes ago still reads `delivering`, which is exactly the claim this
|
|
38
|
+
* gate exists to avoid making.
|
|
39
|
+
*
|
|
40
|
+
* Note this window is strictly stricter than the oracle's: a verdict aged
|
|
41
|
+
* between 90 s and 300 s is `delivering` at the source and `indeterminate`
|
|
42
|
+
* here.
|
|
43
|
+
*/
|
|
44
|
+
export declare const DEFAULT_DELIVERY_FRESHNESS_SECONDS = 90;
|
|
45
|
+
/** How long a fetched `/services` snapshot may be reused. See `verdictFor`. */
|
|
46
|
+
export declare const DEFAULT_DELIVERY_SNAPSHOT_TTL_MS = 10000;
|
|
47
|
+
/** Request timeout for the oracle read. Short: this sits in a payment hot path. */
|
|
48
|
+
export declare const DEFAULT_DELIVERY_ORACLE_TIMEOUT_MS = 4000;
|
|
49
|
+
export declare const DEFAULT_METRIK_ORACLE_URL = "https://oracle.metrik.live";
|
|
50
|
+
/**
|
|
51
|
+
* Three states, never two.
|
|
52
|
+
*
|
|
53
|
+
* `indeterminate` is deliberately NOT collapsed into either of the others: the
|
|
54
|
+
* facilitator's policy for "no fresh evidence" is a separate, configurable
|
|
55
|
+
* decision (see `./verified-delivery-facilitator.ts`), and folding it into
|
|
56
|
+
* `failing` would make Metrik refuse every payment whenever its own oracle is
|
|
57
|
+
* quiet or unreachable.
|
|
58
|
+
*/
|
|
59
|
+
export type DeliveryVerdict = "delivering" | "failing" | "indeterminate";
|
|
60
|
+
/** Why the verdict is what it is — machine-readable, for logs and for tests. */
|
|
61
|
+
export type DeliveryVerdictReason = "fresh-delivering" | "fresh-failing" | "no-fresh-evidence" | "verdict-stale" | "service-not-listed" | "oracle-unreachable" | "oracle-malformed";
|
|
62
|
+
export interface DeliveryAssessment {
|
|
63
|
+
readonly serviceRef: string;
|
|
64
|
+
readonly verdict: DeliveryVerdict;
|
|
65
|
+
readonly reason: DeliveryVerdictReason;
|
|
66
|
+
/** Unix ms of the newest recorded check for this service, when known. */
|
|
67
|
+
readonly lastCheckedAt: number | null;
|
|
68
|
+
/** Age of `lastCheckedAt` in seconds, when known. */
|
|
69
|
+
readonly ageSeconds: number | null;
|
|
70
|
+
/** The freshness window applied, in seconds. */
|
|
71
|
+
readonly freshnessWindowSeconds: number;
|
|
72
|
+
}
|
|
73
|
+
export interface MetrikDeliveryOracle {
|
|
74
|
+
/** Never throws: an unreachable oracle is an `indeterminate` verdict, not an exception. */
|
|
75
|
+
verdictFor(serviceRef: string): Promise<DeliveryAssessment>;
|
|
76
|
+
}
|
|
77
|
+
export type FetchLike = (input: string, init?: {
|
|
78
|
+
signal?: AbortSignal;
|
|
79
|
+
headers?: Record<string, string>;
|
|
80
|
+
}) => Promise<{
|
|
81
|
+
ok: boolean;
|
|
82
|
+
status: number;
|
|
83
|
+
json(): Promise<unknown>;
|
|
84
|
+
}>;
|
|
85
|
+
export interface OracleDeliveryOracleOptions {
|
|
86
|
+
/** Oracle base URL. Default {@link DEFAULT_METRIK_ORACLE_URL}. */
|
|
87
|
+
readonly oracleUrl?: string;
|
|
88
|
+
/** Default {@link DEFAULT_DELIVERY_FRESHNESS_SECONDS}. */
|
|
89
|
+
readonly freshnessWindowSeconds?: number;
|
|
90
|
+
/** Default {@link DEFAULT_DELIVERY_SNAPSHOT_TTL_MS}. */
|
|
91
|
+
readonly snapshotTtlMs?: number;
|
|
92
|
+
readonly timeoutMs?: number;
|
|
93
|
+
readonly fetch?: FetchLike;
|
|
94
|
+
/** Injectable clock (unix ms), for tests. */
|
|
95
|
+
readonly now?: () => number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Reads `GET {oracleUrl}/services` and projects one row onto a
|
|
99
|
+
* {@link DeliveryAssessment}.
|
|
100
|
+
*
|
|
101
|
+
* The snapshot is cached for {@link DEFAULT_DELIVERY_SNAPSHOT_TTL_MS} so a burst
|
|
102
|
+
* of payments does not become a burst of oracle reads. The cache is SHORTER than
|
|
103
|
+
* the freshness window by design, and caching cannot make a verdict look fresher
|
|
104
|
+
* than it is: freshness is computed from the row's own `lastCheckedAt`, never
|
|
105
|
+
* from when we fetched it.
|
|
106
|
+
*/
|
|
107
|
+
export declare function createOracleDeliveryOracle(options?: OracleDeliveryOracleOptions): MetrikDeliveryOracle;
|
|
108
|
+
//# sourceMappingURL=delivery-oracle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-oracle.d.ts","sourceRoot":"","sources":["../../src/x402/delivery-oracle.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,+EAA+E;AAC/E,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD,mFAAmF;AACnF,eAAO,MAAM,kCAAkC,OAAQ,CAAC;AAExD,eAAO,MAAM,yBAAyB,+BAA+B,CAAC;AAEtE;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,eAAe,CAAC;AAEzE,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAC7B,kBAAkB,GAClB,eAAe,GACf,mBAAmB,GACnB,eAAe,GACf,oBAAoB,GACpB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gDAAgD;IAChD,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,oBAAoB;IACnC,2FAA2F;IAC3F,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC7D;AAeD,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KAC9D,OAAO,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,WAAW,2BAA2B;IAC1C,kEAAkE;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CA+HtB"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* The Metrik delivery signal, as consumed by the x402 facilitator.
|
|
4
|
+
*
|
|
5
|
+
* ## Where the signal comes from
|
|
6
|
+
*
|
|
7
|
+
* The oracle publishes `GET /services` — one row per `serviceRef`, reduced from
|
|
8
|
+
* the oracle's own settlement-path verdicts for the active streams of that
|
|
9
|
+
* service (`streamproof-oracle/src/service-status.ts`). Its three states are
|
|
10
|
+
* already buyer-favouring at the source: a FRESH failing stream beats a fresh
|
|
11
|
+
* delivering sibling, and absent/stale evidence is reported as `unverified`
|
|
12
|
+
* rather than folded into "fine".
|
|
13
|
+
*
|
|
14
|
+
* ## Why this module re-checks freshness the oracle already checked
|
|
15
|
+
*
|
|
16
|
+
* The oracle's own bound is 5 minutes (`DEFAULT_SERVICE_STATUS_TTL_MS`), which
|
|
17
|
+
* is a sensible bound for a dashboard and far too loose for a payment gate. On
|
|
18
|
+
* top of that the HTTP response itself can be cached or served by a stale
|
|
19
|
+
* replica, and `lastCheckedAt` is the only field that dates the EVIDENCE rather
|
|
20
|
+
* than the response. So the age of `lastCheckedAt` is re-derived here against
|
|
21
|
+
* this module's own, much tighter window.
|
|
22
|
+
*
|
|
23
|
+
* ## The freshness window: 90 seconds, and why
|
|
24
|
+
*
|
|
25
|
+
* The oracle checkpoints every ~15–22 s, and a service's recorded status is
|
|
26
|
+
* refreshed on that cadence. A window has to be wide enough that ordinary
|
|
27
|
+
* jitter does not flap the gate, and narrow enough that "verified" still means
|
|
28
|
+
* "now":
|
|
29
|
+
*
|
|
30
|
+
* - 3 worst-case probe intervals (3 x 22 s = 66 s) absorbs two consecutive
|
|
31
|
+
* missed or slow ticks, which is normal operational noise, not evidence of
|
|
32
|
+
* a dead service.
|
|
33
|
+
* - plus the oracle's own record-and-serve latency and this process's fetch
|
|
34
|
+
* round trip, rounded up: **90 s**.
|
|
35
|
+
*
|
|
36
|
+
* Tighter (e.g. 30 s) and a single slow tick turns a healthy service's gate
|
|
37
|
+
* indeterminate. Looser (e.g. the oracle's own 300 s) and a service that died
|
|
38
|
+
* four minutes ago still reads `delivering`, which is exactly the claim this
|
|
39
|
+
* gate exists to avoid making.
|
|
40
|
+
*
|
|
41
|
+
* Note this window is strictly stricter than the oracle's: a verdict aged
|
|
42
|
+
* between 90 s and 300 s is `delivering` at the source and `indeterminate`
|
|
43
|
+
* here.
|
|
44
|
+
*/
|
|
45
|
+
export const DEFAULT_DELIVERY_FRESHNESS_SECONDS = 90;
|
|
46
|
+
/** How long a fetched `/services` snapshot may be reused. See `verdictFor`. */
|
|
47
|
+
export const DEFAULT_DELIVERY_SNAPSHOT_TTL_MS = 10_000;
|
|
48
|
+
/** Request timeout for the oracle read. Short: this sits in a payment hot path. */
|
|
49
|
+
export const DEFAULT_DELIVERY_ORACLE_TIMEOUT_MS = 4_000;
|
|
50
|
+
export const DEFAULT_METRIK_ORACLE_URL = "https://oracle.metrik.live";
|
|
51
|
+
/** The subset of the oracle's `/services` row this module relies on. */
|
|
52
|
+
const serviceStatusRowSchema = z
|
|
53
|
+
.object({
|
|
54
|
+
serviceRef: z.string(),
|
|
55
|
+
status: z.enum(["delivering", "failing", "unverified"]),
|
|
56
|
+
lastCheckedAt: z.number().nullable().optional(),
|
|
57
|
+
})
|
|
58
|
+
.passthrough();
|
|
59
|
+
const servicesResponseSchema = z.object({
|
|
60
|
+
services: z.array(serviceStatusRowSchema),
|
|
61
|
+
});
|
|
62
|
+
/**
|
|
63
|
+
* Reads `GET {oracleUrl}/services` and projects one row onto a
|
|
64
|
+
* {@link DeliveryAssessment}.
|
|
65
|
+
*
|
|
66
|
+
* The snapshot is cached for {@link DEFAULT_DELIVERY_SNAPSHOT_TTL_MS} so a burst
|
|
67
|
+
* of payments does not become a burst of oracle reads. The cache is SHORTER than
|
|
68
|
+
* the freshness window by design, and caching cannot make a verdict look fresher
|
|
69
|
+
* than it is: freshness is computed from the row's own `lastCheckedAt`, never
|
|
70
|
+
* from when we fetched it.
|
|
71
|
+
*/
|
|
72
|
+
export function createOracleDeliveryOracle(options = {}) {
|
|
73
|
+
const oracleUrl = (options.oracleUrl ?? DEFAULT_METRIK_ORACLE_URL).replace(/\/+$/, "");
|
|
74
|
+
const freshnessWindowSeconds = options.freshnessWindowSeconds ?? DEFAULT_DELIVERY_FRESHNESS_SECONDS;
|
|
75
|
+
if (!Number.isFinite(freshnessWindowSeconds) || freshnessWindowSeconds <= 0) {
|
|
76
|
+
throw new Error("freshnessWindowSeconds must be a positive number");
|
|
77
|
+
}
|
|
78
|
+
const snapshotTtlMs = options.snapshotTtlMs ?? DEFAULT_DELIVERY_SNAPSHOT_TTL_MS;
|
|
79
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_DELIVERY_ORACLE_TIMEOUT_MS;
|
|
80
|
+
const doFetch = (options.fetch ??
|
|
81
|
+
((input, init) => globalThis.fetch(input, init)));
|
|
82
|
+
const now = options.now ?? (() => Date.now());
|
|
83
|
+
let snapshot;
|
|
84
|
+
let inFlight;
|
|
85
|
+
async function loadSnapshot() {
|
|
86
|
+
const controller = new AbortController();
|
|
87
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
88
|
+
try {
|
|
89
|
+
const response = await doFetch(`${oracleUrl}/services`, {
|
|
90
|
+
signal: controller.signal,
|
|
91
|
+
headers: { accept: "application/json", "cache-control": "no-cache" },
|
|
92
|
+
});
|
|
93
|
+
if (!response.ok) {
|
|
94
|
+
return {
|
|
95
|
+
fetchedAtMs: now(),
|
|
96
|
+
rows: null,
|
|
97
|
+
failure: "oracle-unreachable",
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const parsed = servicesResponseSchema.safeParse(await response.json());
|
|
101
|
+
if (!parsed.success) {
|
|
102
|
+
return { fetchedAtMs: now(), rows: null, failure: "oracle-malformed" };
|
|
103
|
+
}
|
|
104
|
+
const rows = new Map();
|
|
105
|
+
for (const row of parsed.data.services) {
|
|
106
|
+
rows.set(row.serviceRef.toLowerCase(), row);
|
|
107
|
+
}
|
|
108
|
+
return { fetchedAtMs: now(), rows, failure: null };
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return { fetchedAtMs: now(), rows: null, failure: "oracle-unreachable" };
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
clearTimeout(timer);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function currentSnapshot() {
|
|
118
|
+
const cached = snapshot;
|
|
119
|
+
if (cached !== undefined && now() - cached.fetchedAtMs < snapshotTtlMs) {
|
|
120
|
+
return cached;
|
|
121
|
+
}
|
|
122
|
+
// Collapse concurrent misses onto one request.
|
|
123
|
+
inFlight ??= loadSnapshot().finally(() => {
|
|
124
|
+
inFlight = undefined;
|
|
125
|
+
});
|
|
126
|
+
const loaded = await inFlight;
|
|
127
|
+
snapshot = loaded;
|
|
128
|
+
return loaded;
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
async verdictFor(serviceRef) {
|
|
132
|
+
const key = serviceRef.toLowerCase();
|
|
133
|
+
const loaded = await currentSnapshot();
|
|
134
|
+
if (loaded.rows === null) {
|
|
135
|
+
return indeterminate(serviceRef, loaded.failure ?? "oracle-unreachable", null, freshnessWindowSeconds);
|
|
136
|
+
}
|
|
137
|
+
const row = loaded.rows.get(key);
|
|
138
|
+
if (row === undefined) {
|
|
139
|
+
return indeterminate(serviceRef, "service-not-listed", null, freshnessWindowSeconds);
|
|
140
|
+
}
|
|
141
|
+
const lastCheckedAt = row.lastCheckedAt ?? null;
|
|
142
|
+
const ageSeconds = lastCheckedAt === null
|
|
143
|
+
? null
|
|
144
|
+
: Math.max(0, Math.round((now() - lastCheckedAt) / 1000));
|
|
145
|
+
if (row.status === "unverified") {
|
|
146
|
+
return indeterminate(serviceRef, "no-fresh-evidence", lastCheckedAt, freshnessWindowSeconds, ageSeconds);
|
|
147
|
+
}
|
|
148
|
+
// The oracle dated its own verdict; if it cannot be shown to be recent it
|
|
149
|
+
// is not evidence of anything, in EITHER direction.
|
|
150
|
+
if (ageSeconds === null || ageSeconds > freshnessWindowSeconds) {
|
|
151
|
+
return indeterminate(serviceRef, "verdict-stale", lastCheckedAt, freshnessWindowSeconds, ageSeconds);
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
serviceRef,
|
|
155
|
+
verdict: row.status === "failing" ? "failing" : "delivering",
|
|
156
|
+
reason: row.status === "failing" ? "fresh-failing" : "fresh-delivering",
|
|
157
|
+
lastCheckedAt,
|
|
158
|
+
ageSeconds,
|
|
159
|
+
freshnessWindowSeconds,
|
|
160
|
+
};
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function indeterminate(serviceRef, reason, lastCheckedAt, freshnessWindowSeconds, ageSeconds = null) {
|
|
165
|
+
return {
|
|
166
|
+
serviceRef,
|
|
167
|
+
verdict: "indeterminate",
|
|
168
|
+
reason,
|
|
169
|
+
lastCheckedAt,
|
|
170
|
+
ageSeconds,
|
|
171
|
+
freshnessWindowSeconds,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=delivery-oracle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-oracle.js","sourceRoot":"","sources":["../../src/x402/delivery-oracle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facilitator-server-entry.d.ts","sourceRoot":"","sources":["../../src/x402/facilitator-server-entry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { startMetrikFacilitatorServerFromEnv } from "./facilitator-server.js";
|
|
3
|
+
/**
|
|
4
|
+
* Runnable entrypoint for Metrik's x402 facilitator (`metrik-x402-facilitator`).
|
|
5
|
+
* All configuration comes from the environment; see
|
|
6
|
+
* {@link parseMetrikFacilitatorEnvConfig}. Refuses to start without a
|
|
7
|
+
* settlement relayer unless `METRIK_X402_ALLOW_VERIFY_ONLY=true`.
|
|
8
|
+
*/
|
|
9
|
+
async function main() {
|
|
10
|
+
const server = await startMetrikFacilitatorServerFromEnv();
|
|
11
|
+
const host = process.env.METRIK_X402_HOST ?? "0.0.0.0";
|
|
12
|
+
console.error(`[metrik-x402-facilitator] listening on http://${host}:${server.boundPort}`);
|
|
13
|
+
const shutdown = (signal) => {
|
|
14
|
+
console.error(`[metrik-x402-facilitator] ${signal} received — shutting down`);
|
|
15
|
+
server
|
|
16
|
+
.close()
|
|
17
|
+
.then(() => process.exit(0))
|
|
18
|
+
.catch(() => process.exit(1));
|
|
19
|
+
};
|
|
20
|
+
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
21
|
+
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
22
|
+
}
|
|
23
|
+
main().catch((error) => {
|
|
24
|
+
console.error(error instanceof Error ? error.message : "failed to start x402 facilitator");
|
|
25
|
+
process.exit(1);
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=facilitator-server-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facilitator-server-entry.js","sourceRoot":"","sources":["../../src/x402/facilitator-server-entry.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAC;AAE9E;;;;;GAKG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,mCAAmC,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS,CAAC;IACvD,OAAO,CAAC,KAAK,CACX,iDAAiD,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAC5E,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE;QAClC,OAAO,CAAC,KAAK,CACX,6BAA6B,MAAM,2BAA2B,CAC/D,CAAC;QACF,MAAM;aACH,KAAK,EAAE;aACP,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,CAC5E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type Server } from "node:http";
|
|
2
|
+
import { type Hex } from "viem";
|
|
3
|
+
import { MetrikVerifiedDeliveryFacilitator, type IndeterminatePolicy, type SettlementScope } from "./verified-delivery-facilitator.js";
|
|
4
|
+
export interface MetrikFacilitatorServerConfig {
|
|
5
|
+
readonly facilitator: MetrikVerifiedDeliveryFacilitator;
|
|
6
|
+
/** Present only to report settlement availability on `/supported`. */
|
|
7
|
+
readonly settlementEnabled: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Shared secret required on `POST /settle`.
|
|
10
|
+
*
|
|
11
|
+
* `/settle` spends the operator's gas: it makes the relayer sign and
|
|
12
|
+
* broadcast. It is not a public read, and leaving it open on `0.0.0.0` makes
|
|
13
|
+
* it a permissionless "make the relayer broadcast for me" endpoint. `/verify`
|
|
14
|
+
* and `/supported` stay public — they cost nothing and are genuinely useful
|
|
15
|
+
* to anyone.
|
|
16
|
+
*
|
|
17
|
+
* Omit ONLY for a verify-only server. `startMetrikFacilitatorServerFromEnv`
|
|
18
|
+
* refuses to start a settling facilitator without one.
|
|
19
|
+
*/
|
|
20
|
+
readonly settlementToken?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface MetrikFacilitatorServer {
|
|
23
|
+
readonly httpServer: Server;
|
|
24
|
+
listen(port: number, host?: string): Promise<{
|
|
25
|
+
port: number;
|
|
26
|
+
host: string;
|
|
27
|
+
}>;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export declare function createMetrikFacilitatorServer(config: MetrikFacilitatorServerConfig): MetrikFacilitatorServer;
|
|
31
|
+
export interface MetrikFacilitatorEnvConfig {
|
|
32
|
+
readonly host: string;
|
|
33
|
+
readonly port: number;
|
|
34
|
+
readonly chainId: number;
|
|
35
|
+
readonly rpcUrl: string;
|
|
36
|
+
readonly oracleUrl: string;
|
|
37
|
+
readonly registryUrl?: string;
|
|
38
|
+
readonly freshnessWindowSeconds: number;
|
|
39
|
+
readonly indeterminatePolicy: IndeterminatePolicy;
|
|
40
|
+
/** `undefined` means settlement is DISABLED — `/settle` will refuse loudly. */
|
|
41
|
+
readonly relayerPrivateKey?: Hex;
|
|
42
|
+
/** Required whenever a relayer is configured. Guards `POST /settle`. */
|
|
43
|
+
readonly settlementToken?: string;
|
|
44
|
+
/** Token contracts the relayer may be asked to call. Defaults to chain USDC. */
|
|
45
|
+
readonly settlementAssetAllowlist?: readonly string[];
|
|
46
|
+
readonly settlementScope: SettlementScope;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Env contract:
|
|
50
|
+
* - `METRIK_X402_RPC_URL` (required) — RPC for balance checks and, when a relayer
|
|
51
|
+
* is configured, for broadcasting.
|
|
52
|
+
* - `METRIK_X402_RELAYER_PRIVATE_KEY` (required unless
|
|
53
|
+
* `METRIK_X402_ALLOW_VERIFY_ONLY=true`) — the relayer that broadcasts EIP-3009
|
|
54
|
+
* transfers and pays gas.
|
|
55
|
+
* - `METRIK_X402_ALLOW_VERIFY_ONLY` (optional) — explicit opt-in to booting a
|
|
56
|
+
* verify-only facilitator. Without it, a missing relayer key is a STARTUP
|
|
57
|
+
* FAILURE rather than a server that silently never settles.
|
|
58
|
+
* - `METRIK_X402_CHAIN_ID` (optional) — default `84532`.
|
|
59
|
+
* - `METRIK_X402_ORACLE_URL` (optional) — default the public Metrik oracle.
|
|
60
|
+
* - `METRIK_X402_REGISTRY_URL` (optional) — listing source; default the oracle's
|
|
61
|
+
* public credential-free registry.
|
|
62
|
+
* - `METRIK_X402_FRESHNESS_SECONDS` (optional) — default
|
|
63
|
+
* {@link DEFAULT_DELIVERY_FRESHNESS_SECONDS}.
|
|
64
|
+
* - `METRIK_X402_INDETERMINATE_POLICY` (optional) — `allow` (default) or `deny`.
|
|
65
|
+
* - `PORT` / `METRIK_X402_PORT` (optional) — default `8788`.
|
|
66
|
+
* - `METRIK_X402_HOST` (optional) — default `0.0.0.0`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseMetrikFacilitatorEnvConfig(env?: NodeJS.ProcessEnv): MetrikFacilitatorEnvConfig;
|
|
69
|
+
export declare function buildMetrikFacilitatorFromEnvConfig(config: MetrikFacilitatorEnvConfig): MetrikVerifiedDeliveryFacilitator;
|
|
70
|
+
export declare function startMetrikFacilitatorServerFromEnv(env?: NodeJS.ProcessEnv): Promise<MetrikFacilitatorServer & {
|
|
71
|
+
readonly boundPort: number;
|
|
72
|
+
}>;
|
|
73
|
+
//# sourceMappingURL=facilitator-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facilitator-server.d.ts","sourceRoot":"","sources":["../../src/x402/facilitator-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,EAEZ,MAAM,WAAW,CAAC;AAKnB,OAAO,EAAoB,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAalD,OAAO,EAEL,iCAAiC,EAEjC,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,oCAAoC,CAAC;AAc5C,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,iCAAiC,CAAC;IACxD,sEAAsE;IACtE,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,6BAA6B,GACpC,uBAAuB,CAkCzB;AAsHD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,+EAA+E;IAC/E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACjC,wEAAwE;IACxE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,gFAAgF;IAChF,QAAQ,CAAC,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,0BAA0B,CA4G5B;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,0BAA0B,GACjC,iCAAiC,CA+BnC;AAED,wBAAsB,mCAAmC,CACvD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,uBAAuB,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAmCnE"}
|