@absol-labs/agent 0.11.0 → 0.12.0-rc.1
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 +42 -50
- package/dist/capability/invocation-capability.d.ts +2 -2
- package/dist/capability/probe-capability.d.ts +225 -0
- package/dist/capability/probe-capability.d.ts.map +1 -0
- package/dist/capability/probe-capability.js +248 -0
- package/dist/capability/probe-capability.js.map +1 -0
- package/dist/cli/args.d.ts +11 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +23 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/claim.js +1 -1
- 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 +35 -3
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/invoke.d.ts +2 -0
- package/dist/cli/commands/invoke.d.ts.map +1 -1
- package/dist/cli/commands/invoke.js +2 -2
- package/dist/cli/commands/invoke.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +15 -2
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/open.d.ts.map +1 -1
- package/dist/cli/commands/open.js +58 -4
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/pay.d.ts +19 -0
- package/dist/cli/commands/pay.d.ts.map +1 -0
- package/dist/cli/commands/pay.js +355 -0
- package/dist/cli/commands/pay.js.map +1 -0
- package/dist/cli/commands/reclaim-unverified.d.ts.map +1 -1
- package/dist/cli/commands/reclaim-unverified.js +3 -2
- package/dist/cli/commands/reclaim-unverified.js.map +1 -1
- package/dist/cli/commands/reclaim.d.ts +23 -2
- package/dist/cli/commands/reclaim.d.ts.map +1 -1
- package/dist/cli/commands/reclaim.js +184 -16
- package/dist/cli/commands/reclaim.js.map +1 -1
- package/dist/cli/commands/refund.d.ts +13 -0
- package/dist/cli/commands/refund.d.ts.map +1 -0
- package/dist/cli/commands/refund.js +224 -0
- package/dist/cli/commands/refund.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +10 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/streams.js +8 -12
- package/dist/cli/commands/streams.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +2 -1
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/config.d.ts +44 -26
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +88 -38
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/deps.d.ts +33 -0
- package/dist/cli/deps.d.ts.map +1 -1
- package/dist/cli/deps.js +37 -1
- package/dist/cli/deps.js.map +1 -1
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/errors.js +21 -1
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/escape-hatch.d.ts +6 -4
- package/dist/cli/escape-hatch.d.ts.map +1 -1
- package/dist/cli/escape-hatch.js +6 -2
- package/dist/cli/escape-hatch.js.map +1 -1
- package/dist/cli/listings.d.ts +18 -0
- package/dist/cli/listings.d.ts.map +1 -1
- package/dist/cli/listings.js +22 -12
- package/dist/cli/listings.js.map +1 -1
- package/dist/cli/preflight.d.ts +20 -14
- package/dist/cli/preflight.d.ts.map +1 -1
- package/dist/cli/preflight.js +34 -20
- package/dist/cli/preflight.js.map +1 -1
- package/dist/cli/privy.d.ts.map +1 -1
- package/dist/cli/privy.js +4 -2
- package/dist/cli/privy.js.map +1 -1
- package/dist/cli/reclaimability.d.ts +82 -0
- package/dist/cli/reclaimability.d.ts.map +1 -0
- package/dist/cli/reclaimability.js +80 -0
- package/dist/cli/reclaimability.js.map +1 -0
- package/dist/cli/run.d.ts +2 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +40 -11
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/scan-range.d.ts +2 -2
- package/dist/cli/scan-range.js +2 -2
- package/dist/cli/status.d.ts +3 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +15 -3
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/wallet.d.ts +1 -1
- package/dist/cli/wallet.js +2 -2
- package/dist/cli/wallet.js.map +1 -1
- package/dist/discovery/rate-band.d.ts +74 -0
- package/dist/discovery/rate-band.d.ts.map +1 -0
- package/dist/discovery/rate-band.js +114 -0
- package/dist/discovery/rate-band.js.map +1 -0
- package/dist/escrow-generation.d.ts +81 -0
- package/dist/escrow-generation.d.ts.map +1 -0
- package/dist/escrow-generation.js +76 -0
- package/dist/escrow-generation.js.map +1 -0
- package/dist/frameworks/agentkit.d.ts +8 -4
- package/dist/frameworks/agentkit.d.ts.map +1 -1
- package/dist/frameworks/agentkit.js +27 -10
- package/dist/frameworks/agentkit.js.map +1 -1
- package/dist/frameworks/eliza.d.ts +3 -3
- package/dist/frameworks/eliza.d.ts.map +1 -1
- package/dist/frameworks/eliza.js +15 -6
- package/dist/frameworks/eliza.js.map +1 -1
- package/dist/frameworks/langchain.d.ts.map +1 -1
- package/dist/frameworks/langchain.js +8 -0
- package/dist/frameworks/langchain.js.map +1 -1
- package/dist/gateway/caller-auth-gateway.d.ts +83 -31
- package/dist/gateway/caller-auth-gateway.d.ts.map +1 -1
- package/dist/gateway/caller-auth-gateway.js +180 -27
- package/dist/gateway/caller-auth-gateway.js.map +1 -1
- package/dist/gateway/http-server.d.ts +111 -44
- package/dist/gateway/http-server.d.ts.map +1 -1
- package/dist/gateway/http-server.js +439 -155
- package/dist/gateway/http-server.js.map +1 -1
- package/dist/gateway/probe-auth.d.ts +112 -0
- package/dist/gateway/probe-auth.d.ts.map +1 -0
- package/dist/gateway/probe-auth.js +127 -0
- package/dist/gateway/probe-auth.js.map +1 -0
- package/dist/gateway/signed-rate-bounds.d.ts +51 -0
- package/dist/gateway/signed-rate-bounds.d.ts.map +1 -0
- package/dist/gateway/signed-rate-bounds.js +94 -0
- package/dist/gateway/signed-rate-bounds.js.map +1 -0
- package/dist/gateway/x402-opener-mode.d.ts +215 -0
- package/dist/gateway/x402-opener-mode.d.ts.map +1 -0
- package/dist/gateway/x402-opener-mode.js +639 -0
- package/dist/gateway/x402-opener-mode.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +52 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +228 -37
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/x402-tools.d.ts +104 -0
- package/dist/mcp/x402-tools.d.ts.map +1 -0
- package/dist/mcp/x402-tools.js +434 -0
- package/dist/mcp/x402-tools.js.map +1 -0
- package/dist/network.d.ts +119 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +199 -0
- package/dist/network.js.map +1 -0
- package/dist/sdk/invoke.d.ts +4 -0
- package/dist/sdk/invoke.d.ts.map +1 -1
- package/dist/sdk/invoke.js +2 -5
- package/dist/sdk/invoke.js.map +1 -1
- package/dist/wallet/autonomous-wallet-broker.d.ts +3 -0
- package/dist/wallet/autonomous-wallet-broker.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet-broker.js +27 -23
- package/dist/wallet/autonomous-wallet-broker.js.map +1 -1
- package/dist/wallet/autonomous-wallet-protocol.d.ts +8 -2
- package/dist/wallet/autonomous-wallet-protocol.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet-protocol.js +9 -2
- package/dist/wallet/autonomous-wallet-protocol.js.map +1 -1
- package/dist/wallet/autonomous-wallet.d.ts.map +1 -1
- package/dist/wallet/autonomous-wallet.js +3 -2
- package/dist/wallet/autonomous-wallet.js.map +1 -1
- package/dist/wallet/broker-escrows.d.ts +222 -0
- package/dist/wallet/broker-escrows.d.ts.map +1 -0
- package/dist/wallet/broker-escrows.js +36 -0
- package/dist/wallet/broker-escrows.js.map +1 -0
- package/dist/wallet/lifecycle.d.ts +21 -5
- package/dist/wallet/lifecycle.d.ts.map +1 -1
- package/dist/wallet/lifecycle.js +32 -12
- package/dist/wallet/lifecycle.js.map +1 -1
- package/dist/wallet/privy-broker-server.d.ts.map +1 -1
- package/dist/wallet/privy-broker-server.js +31 -26
- package/dist/wallet/privy-broker-server.js.map +1 -1
- package/dist/wallet/privy-session-broker.d.ts +14 -5
- package/dist/wallet/privy-session-broker.d.ts.map +1 -1
- package/dist/wallet/privy-session-broker.js +29 -17
- package/dist/wallet/privy-session-broker.js.map +1 -1
- package/dist/wallet/privy-session-provider.d.ts +3 -1
- package/dist/wallet/privy-session-provider.d.ts.map +1 -1
- package/dist/wallet/privy-session-provider.js +5 -3
- package/dist/wallet/privy-session-provider.js.map +1 -1
- package/dist/wallet/provider.d.ts.map +1 -1
- package/dist/wallet/provider.js +15 -8
- package/dist/wallet/provider.js.map +1 -1
- package/dist/x402/facilitator.d.ts +3 -30
- package/dist/x402/facilitator.d.ts.map +1 -1
- package/dist/x402/facilitator.js +0 -27
- package/dist/x402/facilitator.js.map +1 -1
- package/dist/x402-buyer/guarded-fetch.d.ts +51 -0
- package/dist/x402-buyer/guarded-fetch.d.ts.map +1 -0
- package/dist/x402-buyer/guarded-fetch.js +147 -0
- package/dist/x402-buyer/guarded-fetch.js.map +1 -0
- package/dist/x402-buyer/index.d.ts +10 -0
- package/dist/x402-buyer/index.d.ts.map +1 -0
- package/dist/x402-buyer/index.js +10 -0
- package/dist/x402-buyer/index.js.map +1 -0
- package/dist/x402-buyer/pay.d.ts +135 -0
- package/dist/x402-buyer/pay.d.ts.map +1 -0
- package/dist/x402-buyer/pay.js +336 -0
- package/dist/x402-buyer/pay.js.map +1 -0
- package/dist/x402-opener/abi.d.ts +684 -0
- package/dist/x402-opener/abi.d.ts.map +1 -0
- package/dist/x402-opener/abi.js +880 -0
- package/dist/x402-opener/abi.js.map +1 -0
- package/dist/x402-opener/facilitator-entry.d.ts +3 -0
- package/dist/x402-opener/facilitator-entry.d.ts.map +1 -0
- package/dist/x402-opener/facilitator-entry.js +37 -0
- package/dist/x402-opener/facilitator-entry.js.map +1 -0
- package/dist/x402-opener/facilitator-server.d.ts +180 -0
- package/dist/x402-opener/facilitator-server.d.ts.map +1 -0
- package/dist/x402-opener/facilitator-server.js +696 -0
- package/dist/x402-opener/facilitator-server.js.map +1 -0
- package/dist/x402-opener/index.d.ts +14 -0
- package/dist/x402-opener/index.d.ts.map +1 -0
- package/dist/x402-opener/index.js +14 -0
- package/dist/x402-opener/index.js.map +1 -0
- package/dist/x402-opener/listing-resolver.d.ts +55 -0
- package/dist/x402-opener/listing-resolver.d.ts.map +1 -0
- package/dist/x402-opener/listing-resolver.js +125 -0
- package/dist/x402-opener/listing-resolver.js.map +1 -0
- package/dist/x402-opener/refund-relay.d.ts +240 -0
- package/dist/x402-opener/refund-relay.d.ts.map +1 -0
- package/dist/x402-opener/refund-relay.js +1240 -0
- package/dist/x402-opener/refund-relay.js.map +1 -0
- package/dist/x402-opener/relayer-queue.d.ts +14 -0
- package/dist/x402-opener/relayer-queue.d.ts.map +1 -0
- package/dist/x402-opener/relayer-queue.js +18 -0
- package/dist/x402-opener/relayer-queue.js.map +1 -0
- package/dist/x402-opener/scheme.d.ts +217 -0
- package/dist/x402-opener/scheme.d.ts.map +1 -0
- package/dist/x402-opener/scheme.js +749 -0
- package/dist/x402-opener/scheme.js.map +1 -0
- package/dist/x402-opener/terms.d.ts +105 -0
- package/dist/x402-opener/terms.d.ts.map +1 -0
- package/dist/x402-opener/terms.js +212 -0
- package/dist/x402-opener/terms.js.map +1 -0
- package/dist/zktls/reclaim.d.ts +2 -2
- package/dist/zktls/t2-delivery-proof.d.ts +6 -6
- package/docs/agent-layer.md +3 -2
- package/docs/autonomous-privy-wallet.md +188 -0
- package/docs/cli.md +184 -31
- package/docs/langchain.md +5 -0
- package/docs/mcp-reference.md +75 -5
- package/docs/probe-capability.md +191 -0
- package/docs/quickstart.md +36 -1
- package/docs/threat-model.md +20 -0
- package/docs/x402.md +628 -595
- package/package.json +19 -17
- package/src/capability/probe-capability.ts +355 -0
- package/src/cli/args.ts +29 -0
- package/src/cli/commands/claim.ts +1 -1
- package/src/cli/commands/close.ts +36 -3
- package/src/cli/commands/invoke.ts +5 -2
- package/src/cli/commands/mcp.ts +18 -2
- package/src/cli/commands/open.ts +75 -4
- package/src/cli/commands/pay.ts +442 -0
- package/src/cli/commands/reclaim-unverified.ts +8 -2
- package/src/cli/commands/reclaim.ts +252 -14
- package/src/cli/commands/refund.ts +277 -0
- package/src/cli/commands/status.ts +17 -1
- package/src/cli/commands/streams.ts +10 -14
- package/src/cli/commands/watch.ts +7 -1
- package/src/cli/config.ts +139 -52
- package/src/cli/deps.ts +74 -1
- package/src/cli/errors.ts +24 -1
- package/src/cli/escape-hatch.ts +19 -5
- package/src/cli/listings.ts +43 -10
- package/src/cli/preflight.ts +36 -21
- package/src/cli/privy.ts +4 -2
- package/src/cli/reclaimability.ts +154 -0
- package/src/cli/run.ts +54 -11
- package/src/cli/scan-range.ts +2 -2
- package/src/cli/status.ts +14 -1
- package/src/cli/wallet.ts +2 -2
- package/src/discovery/rate-band.ts +172 -0
- package/src/escrow-generation.ts +135 -0
- package/src/frameworks/agentkit.ts +45 -11
- package/src/frameworks/eliza.ts +27 -5
- package/src/frameworks/langchain.ts +14 -0
- package/src/gateway/caller-auth-gateway.ts +320 -68
- package/src/gateway/http-server.ts +629 -220
- package/src/gateway/probe-auth.ts +191 -0
- package/src/gateway/signed-rate-bounds.ts +164 -0
- package/src/gateway/x402-opener-mode.ts +974 -0
- package/src/index.ts +82 -19
- package/src/mcp/server.ts +319 -42
- package/src/mcp/x402-tools.ts +621 -0
- package/src/network.ts +302 -0
- package/src/sdk/invoke.ts +6 -5
- package/src/wallet/autonomous-wallet-broker.ts +46 -20
- package/src/wallet/autonomous-wallet-protocol.ts +11 -2
- package/src/wallet/autonomous-wallet.ts +4 -2
- package/src/wallet/broker-escrows.ts +66 -0
- package/src/wallet/lifecycle.ts +53 -18
- package/src/wallet/privy-broker-server.ts +35 -25
- package/src/wallet/privy-session-broker.ts +58 -25
- package/src/wallet/privy-session-provider.ts +7 -3
- package/src/wallet/provider.ts +20 -15
- package/src/x402/facilitator.ts +3 -43
- package/src/x402-buyer/guarded-fetch.ts +213 -0
- package/src/x402-buyer/index.ts +9 -0
- package/src/x402-buyer/pay.ts +517 -0
- package/src/x402-opener/abi.ts +881 -0
- package/src/x402-opener/facilitator-entry.ts +45 -0
- package/src/x402-opener/facilitator-server.ts +1014 -0
- package/src/x402-opener/index.ts +13 -0
- package/src/x402-opener/listing-resolver.ts +202 -0
- package/src/x402-opener/refund-relay.ts +1743 -0
- package/src/x402-opener/relayer-queue.ts +18 -0
- package/src/x402-opener/scheme.ts +1133 -0
- package/src/x402-opener/terms.ts +300 -0
- package/dist/gateway/x402-mode.d.ts +0 -123
- package/dist/gateway/x402-mode.d.ts.map +0 -1
- package/dist/gateway/x402-mode.js +0 -212
- package/dist/gateway/x402-mode.js.map +0 -1
- package/dist/x402/delivery-oracle.d.ts +0 -108
- package/dist/x402/delivery-oracle.d.ts.map +0 -1
- package/dist/x402/delivery-oracle.js +0 -174
- package/dist/x402/delivery-oracle.js.map +0 -1
- package/dist/x402/facilitator-server-entry.d.ts +0 -3
- package/dist/x402/facilitator-server-entry.d.ts.map +0 -1
- package/dist/x402/facilitator-server-entry.js +0 -27
- package/dist/x402/facilitator-server-entry.js.map +0 -1
- package/dist/x402/facilitator-server.d.ts +0 -73
- package/dist/x402/facilitator-server.d.ts.map +0 -1
- package/dist/x402/facilitator-server.js +0 -305
- package/dist/x402/facilitator-server.js.map +0 -1
- package/dist/x402/payment-requirements.d.ts +0 -106
- package/dist/x402/payment-requirements.d.ts.map +0 -1
- package/dist/x402/payment-requirements.js +0 -138
- package/dist/x402/payment-requirements.js.map +0 -1
- package/dist/x402/relayer.d.ts +0 -41
- package/dist/x402/relayer.d.ts.map +0 -1
- package/dist/x402/relayer.js +0 -64
- package/dist/x402/relayer.js.map +0 -1
- package/dist/x402/resource-index.d.ts +0 -75
- package/dist/x402/resource-index.d.ts.map +0 -1
- package/dist/x402/resource-index.js +0 -126
- package/dist/x402/resource-index.js.map +0 -1
- package/dist/x402/verified-delivery-facilitator.d.ts +0 -285
- package/dist/x402/verified-delivery-facilitator.d.ts.map +0 -1
- package/dist/x402/verified-delivery-facilitator.js +0 -423
- package/dist/x402/verified-delivery-facilitator.js.map +0 -1
- package/src/gateway/x402-mode.ts +0 -350
- package/src/x402/delivery-oracle.ts +0 -285
- package/src/x402/facilitator-server-entry.ts +0 -35
- package/src/x402/facilitator-server.ts +0 -445
- package/src/x402/payment-requirements.ts +0 -231
- package/src/x402/relayer.ts +0 -122
- package/src/x402/resource-index.ts +0 -228
- package/src/x402/verified-delivery-facilitator.ts +0 -744
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { x402HTTPResourceServer, type FacilitatorClient } from "@x402/core/server";
|
|
2
|
+
import type { Network } from "@x402/core/types";
|
|
3
|
+
import { type Address, type PublicClient } from "viem";
|
|
4
|
+
import { type OperatorSignedListingResolver } from "../x402-opener/listing-resolver.js";
|
|
5
|
+
import { type OpenerTerms, type X402SchemaDeclaration } from "../x402-opener/terms.js";
|
|
6
|
+
/**
|
|
7
|
+
* The gateway's x402 v2 mode (metrik-agent#116): answer an uncapabilitied
|
|
8
|
+
* request with a standard x402 v2 `402` whose `payTo` is the listing's
|
|
9
|
+
* `X402StreamOpener` address, and settle every accepted payment INTO a
|
|
10
|
+
* `StreamEscrowV2` stream through the Metrik opener facilitator.
|
|
11
|
+
*
|
|
12
|
+
* The wire format is the official `@x402/core` resource server's, not a
|
|
13
|
+
* re-implementation: `x402HTTPResourceServer` builds `PAYMENT-REQUIRED`,
|
|
14
|
+
* matches `PAYMENT-SIGNATURE`, verifies and settles through the facilitator and
|
|
15
|
+
* builds `PAYMENT-RESPONSE`.
|
|
16
|
+
*
|
|
17
|
+
* ## The opener payTo must ONLY ever be settled by the Metrik opener facilitator
|
|
18
|
+
*
|
|
19
|
+
* A stock x402 `exact` facilitator settles by calling
|
|
20
|
+
* `USDC.transferWithAuthorization(to = payTo)` directly. Pointed at an opener,
|
|
21
|
+
* that strands 100% of the payer's funds in the opener permanently (there is,
|
|
22
|
+
* deliberately, no sweep). So this mode:
|
|
23
|
+
*
|
|
24
|
+
* - refuses to START unless the configured facilitator's `GET /supported`
|
|
25
|
+
* advertises the opener marker for exactly this factory, escrow, token and
|
|
26
|
+
* chain; and re-checks that marker on a timer, failing CLOSED (503, no
|
|
27
|
+
* `payTo` quoted, nothing verified or settled) whenever it cannot;
|
|
28
|
+
* - uses exactly one facilitator client, never a fallback list;
|
|
29
|
+
* - registers no discovery (Bazaar) extension and never submits the route to
|
|
30
|
+
* any catalog. When (and only when) the operator configures an input/output
|
|
31
|
+
* schema, it is DECLARED in the 402 in the standard `extensions.bazaar`
|
|
32
|
+
* shape so a client can read what to send; only the Metrik opener
|
|
33
|
+
* facilitator ever sees the payment, and it catalogs nothing;
|
|
34
|
+
* - states plainly in the 402 `description` what is bought (the stream
|
|
35
|
+
* window, rate, that the seller earns only verified seconds, and that
|
|
36
|
+
* unearned money is refundable without ETH through the facilitator's
|
|
37
|
+
* refund relay) and refuses to start unless that facilitator advertises
|
|
38
|
+
* the relay (`refundRelay: true` in its marker) — the 402 never promises a
|
|
39
|
+
* refund path that is not there. Refunds are not automatic;
|
|
40
|
+
* - authenticates the opener only as `factory.predict(terms)` — never by code
|
|
41
|
+
* or codehash, which a clone outside the factory can reproduce;
|
|
42
|
+
* - serves one EIP-3009 authorization at most once: a `PAYMENT-SIGNATURE`
|
|
43
|
+
* whose authorization is in flight or already settled gets `409` WITHOUT an
|
|
44
|
+
* upstream call (in-memory, per gateway instance). A retry after
|
|
45
|
+
* `settlement_pending` is let through so it can reconcile;
|
|
46
|
+
* - refuses to start if its price is below the facilitator's advertised
|
|
47
|
+
* minimum, or if its facilitator timeout would not outlast the facilitator's
|
|
48
|
+
* receipt wait.
|
|
49
|
+
*/
|
|
50
|
+
/** How long a successful `/supported` marker check is trusted, seconds. */
|
|
51
|
+
export declare const DEFAULT_FACILITATOR_MARKER_TTL_SECONDS = 300;
|
|
52
|
+
/** Default per-request facilitator HTTP timeout. Must outlast its receipt wait. */
|
|
53
|
+
export declare const DEFAULT_FACILITATOR_TIMEOUT_MS = 120000;
|
|
54
|
+
export interface GatewayX402OpenerModeConfig {
|
|
55
|
+
/** Base URL of the Metrik opener facilitator (e.g. `https://facilitator.example`). */
|
|
56
|
+
readonly facilitatorUrl: string;
|
|
57
|
+
/** Bearer token the facilitator requires on `/settle`. */
|
|
58
|
+
readonly facilitatorToken: string;
|
|
59
|
+
/** CAIP-2 network (`eip155:<chainId>`), as the registry gives it. */
|
|
60
|
+
readonly network: Network;
|
|
61
|
+
readonly factoryAddress: Address;
|
|
62
|
+
/** The escrow this gateway checks streams against; the factory must point at it. */
|
|
63
|
+
readonly escrowAddress: Address;
|
|
64
|
+
/** Settlement token; must equal the factory's. */
|
|
65
|
+
readonly asset: Address;
|
|
66
|
+
/** EIP-712 domain of the token (Circle USDC: `USDC` / `2`). */
|
|
67
|
+
readonly assetName: string;
|
|
68
|
+
readonly assetVersion: string;
|
|
69
|
+
/** Opener terms. `operator` + `serviceRef` must resolve to one operator-signed listing. */
|
|
70
|
+
readonly terms: OpenerTerms;
|
|
71
|
+
/** Price per paid request in token base units. Becomes the stream deposit. */
|
|
72
|
+
readonly price: bigint;
|
|
73
|
+
/** Authorization validity the client signs for. Default 300s. */
|
|
74
|
+
readonly maxTimeoutSeconds?: number;
|
|
75
|
+
/** Public origin clients reach this gateway at, for the 402 `resource.url`. */
|
|
76
|
+
readonly resourceBaseUrl?: string;
|
|
77
|
+
/**
|
|
78
|
+
* What the service does, in one sentence. Prefixed to the fixed disclosure
|
|
79
|
+
* of what the payment buys ({@link describeOpenerPurchase}); it can never
|
|
80
|
+
* replace that disclosure.
|
|
81
|
+
*/
|
|
82
|
+
readonly description?: string;
|
|
83
|
+
/**
|
|
84
|
+
* Public base URL of the facilitator's refund relay (`/streams/:streamId`).
|
|
85
|
+
* Default `facilitatorUrl`. When different, its `/supported` must advertise
|
|
86
|
+
* the same opener marker with `refundRelay: true` (checked at startup).
|
|
87
|
+
*/
|
|
88
|
+
readonly refundBaseUrl?: string;
|
|
89
|
+
/** Docs link carried in the 402. Default {@link DEFAULT_OPENER_DOCS_URL}. */
|
|
90
|
+
readonly docsUrl?: string;
|
|
91
|
+
/** Token decimals for the human-readable amounts in the description. Default 6 (USDC). */
|
|
92
|
+
readonly assetDecimals?: number;
|
|
93
|
+
/**
|
|
94
|
+
* Optional input/output schema, declared in the 402 as
|
|
95
|
+
* `extensions.bazaar` (`{info: {input, output}, schema}`). Declared only;
|
|
96
|
+
* never registered with any discovery catalog.
|
|
97
|
+
*/
|
|
98
|
+
readonly schemaDeclaration?: X402SchemaDeclaration;
|
|
99
|
+
/** Registry used to prove the listing at startup. Default the public registry. */
|
|
100
|
+
readonly registryUrl?: string;
|
|
101
|
+
readonly markerTtlSeconds?: number;
|
|
102
|
+
/**
|
|
103
|
+
* Per-request facilitator HTTP timeout, ms. Default
|
|
104
|
+
* {@link DEFAULT_FACILITATOR_TIMEOUT_MS}. Must exceed the facilitator's
|
|
105
|
+
* advertised receipt timeout by 30 s, so the gateway never gives up on a
|
|
106
|
+
* settlement the facilitator is still waiting for.
|
|
107
|
+
*/
|
|
108
|
+
readonly facilitatorTimeoutMs?: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The plain statement of what one payment buys, used as the 402 resource
|
|
112
|
+
* `description`. It names the window, the rate, that the seller earns only for
|
|
113
|
+
* seconds Metrik's verifier confirms, and where unearned money is refundable
|
|
114
|
+
* without ETH. It says that refunds are not automatic, because they are not:
|
|
115
|
+
* someone has to call the refund relay.
|
|
116
|
+
*/
|
|
117
|
+
export declare function describeOpenerPurchase(input: {
|
|
118
|
+
readonly terms: OpenerTerms;
|
|
119
|
+
readonly price: bigint;
|
|
120
|
+
readonly assetDecimals: number;
|
|
121
|
+
readonly assetSymbol: string;
|
|
122
|
+
/** Refund URL template containing `{streamId}`. */
|
|
123
|
+
readonly refundUrlTemplate: string;
|
|
124
|
+
readonly docsUrl: string;
|
|
125
|
+
readonly serviceDescription?: string;
|
|
126
|
+
}): string;
|
|
127
|
+
export interface GatewayX402OpenerModeDeps {
|
|
128
|
+
/** Read client for the factory. Default built from `rpcUrl`. */
|
|
129
|
+
readonly publicClient?: PublicClient;
|
|
130
|
+
readonly rpcUrl?: string;
|
|
131
|
+
readonly listingResolver?: OperatorSignedListingResolver;
|
|
132
|
+
/** Override the facilitator transport (tests). Default {@link HTTPFacilitatorClient}. */
|
|
133
|
+
readonly facilitatorClient?: FacilitatorClient;
|
|
134
|
+
readonly now?: () => number;
|
|
135
|
+
/** HTTP client for checking a separate `refundBaseUrl`. Default global fetch. */
|
|
136
|
+
readonly fetch?: typeof fetch;
|
|
137
|
+
}
|
|
138
|
+
export interface GatewayX402OpenerMode {
|
|
139
|
+
/** The predicted opener address quoted as `payTo`. */
|
|
140
|
+
readonly payTo: Address;
|
|
141
|
+
readonly network: Network;
|
|
142
|
+
readonly terms: OpenerTerms;
|
|
143
|
+
readonly price: bigint;
|
|
144
|
+
readonly resourceBaseUrl: string | undefined;
|
|
145
|
+
/** The 402 `description` (what the payment buys). */
|
|
146
|
+
readonly description: string;
|
|
147
|
+
/** Refund relay base; a stream's refund page is `${refundBaseUrl}/streams/:streamId`. */
|
|
148
|
+
readonly refundBaseUrl: string;
|
|
149
|
+
readonly httpServer: x402HTTPResourceServer;
|
|
150
|
+
/** One-use accounting of authorizations this gateway has seen. */
|
|
151
|
+
readonly authorizations: GatewayAuthorizationLedger;
|
|
152
|
+
/**
|
|
153
|
+
* Resolves once the facilitator is proven to be the Metrik opener
|
|
154
|
+
* facilitator for this factory (cached for the marker TTL) and the resource
|
|
155
|
+
* server is initialized. Rejects otherwise — callers must fail closed.
|
|
156
|
+
*/
|
|
157
|
+
ready(): Promise<void>;
|
|
158
|
+
/** Serves one x402-mode request over the supplied transport. Never throws. */
|
|
159
|
+
handle(io: X402GatewayRequestIO): Promise<void>;
|
|
160
|
+
}
|
|
161
|
+
/** JSON reasons the x402 path can answer with, beyond the gateway's own. */
|
|
162
|
+
export type X402GatewayResponseReason = "x402-facilitator-unavailable" | "x402-settlement-failed" | "internal-error" | "upstream-unavailable" | "x402-payment-already-used";
|
|
163
|
+
export interface X402UpstreamResult {
|
|
164
|
+
readonly status: number;
|
|
165
|
+
readonly headers: Record<string, string>;
|
|
166
|
+
readonly body: Buffer;
|
|
167
|
+
}
|
|
168
|
+
/** The transport the HTTP server hands the x402 path. */
|
|
169
|
+
export interface X402GatewayRequestIO {
|
|
170
|
+
readonly requestUrl: URL;
|
|
171
|
+
readonly method: string;
|
|
172
|
+
/** Lower-cased request headers. */
|
|
173
|
+
readonly headers: Readonly<Record<string, string | undefined>>;
|
|
174
|
+
/** Proxies the request upstream (payment headers stripped) and buffers the response. */
|
|
175
|
+
callUpstream(): Promise<X402UpstreamResult>;
|
|
176
|
+
writeJson(status: number, reason: X402GatewayResponseReason): void;
|
|
177
|
+
write(status: number, headers: Record<string, string>, body: Buffer | string): void;
|
|
178
|
+
logError(context: string, error: unknown): void;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Per-gateway, in-memory record of EIP-3009 authorizations (chain + asset +
|
|
182
|
+
* payer + nonce): `in-flight` while a request is being verified/served/
|
|
183
|
+
* settled, `pending` after a `settlement_pending` (a retry may reconcile), and
|
|
184
|
+
* `settled` once a success was delivered. In-flight and settled
|
|
185
|
+
* authorizations are refused before the upstream is ever called. Entries are
|
|
186
|
+
* dropped once the authorization's `validBefore` has passed (plus a grace).
|
|
187
|
+
*/
|
|
188
|
+
export declare class GatewayAuthorizationLedger {
|
|
189
|
+
private readonly now;
|
|
190
|
+
private readonly maxEntries;
|
|
191
|
+
private readonly entries;
|
|
192
|
+
constructor(now: () => number, maxEntries?: number);
|
|
193
|
+
/** Claims the authorization for one request; false if it is in flight or settled. */
|
|
194
|
+
claim(key: string, validBefore: bigint): boolean;
|
|
195
|
+
release(key: string): void;
|
|
196
|
+
markPending(key: string, validBefore: bigint): void;
|
|
197
|
+
markSettled(key: string, validBefore: bigint): void;
|
|
198
|
+
private prune;
|
|
199
|
+
}
|
|
200
|
+
export declare class X402OpenerModeConfigError extends Error {
|
|
201
|
+
constructor(message: string);
|
|
202
|
+
}
|
|
203
|
+
export declare class X402OpenerFacilitatorUnverifiedError extends Error {
|
|
204
|
+
constructor(message: string, options?: {
|
|
205
|
+
readonly cause?: unknown;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Builds the x402 mode and proves, before returning, every fact it will quote:
|
|
210
|
+
* valid terms and price, one operator-signed listing for the terms, the
|
|
211
|
+
* factory's escrow and token, the predicted `payTo`, and the facilitator's
|
|
212
|
+
* opener marker. Throws on any doubt; the gateway then refuses to start.
|
|
213
|
+
*/
|
|
214
|
+
export declare function buildGatewayX402OpenerMode(config: GatewayX402OpenerModeConfig, deps?: GatewayX402OpenerModeDeps): Promise<GatewayX402OpenerMode>;
|
|
215
|
+
//# sourceMappingURL=x402-opener-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x402-opener-mode.d.ts","sourceRoot":"","sources":["../../src/gateway/x402-opener-mode.ts"],"names":[],"mappings":"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"}
|