@naulon/wayfarer 0.4.1 → 0.5.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/dist/rail.js CHANGED
@@ -10,20 +10,115 @@
10
10
  import { classifyPaymentError, classifySignerRefusal, probe, } from "./buyer.js";
11
11
  import { runPaidFetch } from "./paidFetch.js";
12
12
  import { assembleMemoPayment } from "./memo.js";
13
- import { gatewayLegPayload } from "./gateway.js";
13
+ import { gatewayLegPayload, gatewayLegPayloadsBatched } from "./gateway.js";
14
14
  import { networkByCaip2, supportsMemo } from "@naulon/shared";
15
- /** Pick the rail the GATE will settle this 402 on. Registry first: a known CAIP-2 network uses the
16
- * same predicate the gate's verifyAndSettle uses (`supportsMemo` — memo self-relay vs Circle
17
- * Gateway), so buyer and gate can never disagree. The `extra.name 'GatewayWalletBatched'` tell is
18
- * only the fallback for a network we don't know: build402 stamps that descriptor on EVERY
19
- * gateway-mode 402 — memo chains included — so on a known memo network it is noise, not a signal
20
- * (trusting it signed the Gateway envelope against Arc's memo settle: "malformed memo payload"). */
15
+ /** Pick the rail the GATE will settle this 402 on — which is now Circle Gateway on EVERY chain.
16
+ *
17
+ * This used to read `supportsMemo` and sign a raw EIP-3009 authorization for Arc, because the gate
18
+ * self-relayed Arc through the Memo predeploy. The gate stopped doing that (`verifyAndSettle`):
19
+ * memo settlement is one on-chain transaction per read at our own gas, which Circle prices out of
20
+ * the sub-cent band this product sells in. Buyer and gate must agree about the envelope or the
21
+ * settle fails as "malformed memo payload", so this predicate moves in the SAME commit as that one
22
+ * and keeps no independent opinion.
23
+ *
24
+ * It is a function rather than a constant because the fallback still means something: an UNKNOWN
25
+ * CAIP-2 network is judged by the descriptor `build402` stamps on every gateway-mode 402. A quote
26
+ * from some future non-Gateway rail would not carry it, and should not be signed as one. */
21
27
  function isGateway402(quoted) {
22
- const net = networkByCaip2(quoted.requirements.network);
23
- if (net)
24
- return !supportsMemo(net);
28
+ if (networkByCaip2(quoted.requirements.network))
29
+ return true;
25
30
  return quoted.requirements.extra?.name === "GatewayWalletBatched";
26
31
  }
32
+ /**
33
+ * Sign a 402 the caller already holds, on the rail the GATE will settle it on — the payment
34
+ * builder `railBuyer` runs inside its fetch loop, exposed on its own for a host that never needs
35
+ * the loop: one that built the 402 itself and is now paying it from the buyer's session signers
36
+ * (the cloud selling a licence it just offered). Picking the rail here, once, is what keeps a
37
+ * sale and a toll on the same envelope for the same tenant chain.
38
+ *
39
+ * Throws on a rail with no signer, and lets `gatewayLegPayload` / the signer throw their own
40
+ * coded refusals (N-leg on the Circle SDK, a grant refusal) — the caller owns the mapping.
41
+ */
42
+ export async function assembleRailPayment(quoted, nowMs, signers) {
43
+ if (isGateway402(quoted)) {
44
+ if (!signers.gateway) {
45
+ throw new Error("no gateway signer for a Circle Gateway 402 (this tenant settles on a memo-less chain)");
46
+ }
47
+ return Buffer.from(JSON.stringify(await gatewayEnvelopes(signers.gateway, quoted))).toString("base64");
48
+ }
49
+ if (!signers.memo) {
50
+ throw new Error("no memo signer for a memo-rail 402 (this tenant settles on a memo chain)");
51
+ }
52
+ // Reached only for an UNKNOWN CAIP-2 that also lacks the Gateway descriptor — every chain in the
53
+ // registry settles through Circle now (`isGateway402`). Kept because a caller may still hold a
54
+ // memo signer for a network we do not ship, and silently signing that as a Circle envelope would
55
+ // produce a payment no facilitator can verify.
56
+ const net = networkByCaip2(quoted.requirements.network);
57
+ return assembleMemoPayment(quoted, nowMs, signers.memo, net);
58
+ }
59
+ /**
60
+ * One Circle envelope per leg the 402 advertised — the multi-leg Gateway payment.
61
+ *
62
+ * ## Why this is a loop and not one SDK call
63
+ *
64
+ * `BatchEvmScheme.createPaymentPayload(x402Version, paymentRequirements)` takes ONE requirement
65
+ * (verified against `@circle-fin/x402-batching` 3.4.0). Signing a two-leg toll with it would
66
+ * authorize the author leg and silently drop the operator fee, so `gatewayLegPayload` refuses a
67
+ * multi-leg quote outright — correctly, as a single-leg builder.
68
+ *
69
+ * That guard used to mean multi-leg tolls were memo-rail-only, which made the operator fee
70
+ * collectable on exactly one chain. It was never an SDK limit on what the RAIL can carry: the gate
71
+ * parses an ARRAY of per-leg payloads (`verifyAndSettle`) and `settleGateway` verifies each leg
72
+ * against its own requirements. So N legs settle fine on Gateway; the buyer simply has to sign N
73
+ * envelopes rather than asking the SDK for one that covers them all.
74
+ *
75
+ * Each leg is signed as its own single-leg quote — same `requirements` with that leg's `payTo` and
76
+ * `amount`, exactly how `build402` assembled them — so `gatewayLegPayload`'s descriptor guard still
77
+ * runs on every one, and its N-leg guard stays meaningful for anyone calling it directly.
78
+ *
79
+ * A single-leg quote returns the bare envelope, not a one-element array: that is the shape stock
80
+ * x402 clients send and the gate still accepts either, so there is no reason to change what the
81
+ * common case puts on the wire.
82
+ *
83
+ * ## Why a batch-capable signer takes a different path
84
+ *
85
+ * The loop above signs each leg through a SEPARATE call, and for a plain key that is nothing — the
86
+ * same account signs N times. For a HOSTED signer it is not nothing: signing there also debits a
87
+ * spending grant and enforces the buyer's per-read ceilings, and a signer asked one leg at a time
88
+ * can only reason about one leg. Two independent debits for one toll, and the moment a sibling leg
89
+ * trips a ceiling the author leg is already debited and signed while this function throws and NO
90
+ * payment goes out at all. The buyer's "never pay more than $X for one read" degrades to a per-leg
91
+ * bound in the same move.
92
+ *
93
+ * So when the signer offers `signTypedDataBatch`, every leg's authorization is built first and the
94
+ * whole set is signed in ONE call — which is the only shape in which a hosted signer can reserve a
95
+ * toll atomically and bound it as a citation. The SDK still builds every authorization; only the
96
+ * moment of signing moves (`gatewayLegPayloadsBatched`).
97
+ */
98
+ async function gatewayEnvelopes(signer, quoted) {
99
+ const legs = quoted.legs;
100
+ if (!legs || legs.length <= 1)
101
+ return gatewayLegPayload(signer, quoted, 2);
102
+ // Leg order is the contract: the gate pairs payloads[i] with its own legs[i] and refuses on a
103
+ // count mismatch, so this must stay a sequential map over `quoted.legs` and never a filter.
104
+ const legQuotes = legs.map((leg) => ({
105
+ ...quoted,
106
+ amountAtomic: leg.amount,
107
+ requirements: { ...quoted.requirements, payTo: leg.payTo, amount: leg.amount },
108
+ legs: undefined,
109
+ }));
110
+ // A batch-capable signer gets the whole toll in one call. A plain one (a viem account, the
111
+ // self-host path) keeps the per-leg loop unchanged — it has no grant to protect, and requiring
112
+ // the method would make an ordinary key unusable.
113
+ if (signer.signTypedDataBatch) {
114
+ return gatewayLegPayloadsBatched(signer, legQuotes, 2);
115
+ }
116
+ const out = [];
117
+ for (const legQuote of legQuotes) {
118
+ out.push(await gatewayLegPayload(signer, legQuote, 2));
119
+ }
120
+ return out;
121
+ }
27
122
  export function railBuyer(signers) {
28
123
  const address = (signers.memo?.address ?? signers.gateway?.address ?? "0x");
29
124
  return {
@@ -35,28 +130,7 @@ export function railBuyer(signers) {
35
130
  return probe(url, kind, address).then((o) => (o.status === "gated" ? o.quoted : null));
36
131
  },
37
132
  async fetch(url, kind, guard) {
38
- const buildPayment = async (quoted, nowMs) => {
39
- if (isGateway402(quoted)) {
40
- if (!signers.gateway) {
41
- throw new Error("no gateway signer for a Circle Gateway 402 (this tenant settles on a memo-less chain)");
42
- }
43
- // gatewayLegPayload owns the N-leg + GatewayWalletBatched guards, so the mixed-fleet
44
- // rail gets the same loud, actionable refusals gatewayBuyer gives (it previously had
45
- // neither, silently dropping extra legs until the gate rejected on leg-count mismatch).
46
- const payload = await gatewayLegPayload(signers.gateway, quoted, 2);
47
- return Buffer.from(JSON.stringify(payload)).toString("base64");
48
- }
49
- if (!signers.memo) {
50
- throw new Error("no memo signer for a memo-rail 402 (this tenant settles on a memo chain)");
51
- }
52
- // Resolve the memo chain from the 402's advertised network so a non-fleet memo chain signs
53
- // against the right USDC domain (registry: memo = arcTestnet today, but keep it honest). An
54
- // unknown CAIP-2 falls back to activeNetwork() inside assembleMemoPayment (undefined triggers the
55
- // default). A multi-leg toll signed by a batch-capable injected signer reserves atomically here;
56
- // a single leg or a batch-less signer takes the per-leg path — same framing either way.
57
- const net = networkByCaip2(quoted.requirements.network);
58
- return assembleMemoPayment(quoted, nowMs, signers.memo, net);
59
- };
133
+ const buildPayment = (quoted, nowMs) => assembleRailPayment(quoted, nowMs, signers);
60
134
  const onSignError = (error) => {
61
135
  // Parity with memoBuyer/gatewayBuyer: a hosted session signer throws a coded refusal
62
136
  // (grant exhausted/expired/no session) → typed so the agent can act; any other throw (incl.
package/dist/rail.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rail.js","sourceRoot":"","sources":["../src/rail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rail.js","sourceRoot":"","sources":["../src/rail.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -77,6 +77,11 @@ export interface Source {
77
77
  settlementRef?: string;
78
78
  /** Citation License `jti` proving this read was paid for (verifiable at the gate). */
79
79
  licenseId?: string;
80
+ /** The page a reader opens to see this record checked against the issuer's published keys, in
81
+ * their own browser. THIS is what a citation carries beside the source. */
82
+ proofUrl?: string;
83
+ /** The gate's record route for the same settlement — the machine document behind `proofUrl`. */
84
+ recordUrl?: string;
80
85
  }
81
86
  export interface RunResult {
82
87
  topic: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;mFACmF;AACnF,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,KAAK,EAAE,IAAI,CAAC;CACb;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd;iFAC6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8EAA8E;AAC9E,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;mFACmF;AACnF,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,KAAK,EAAE,IAAI,CAAC;CACb;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd;iFAC6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8EAA8E;AAC9E,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;gFAC4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naulon/wayfarer",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "The naulon paying agent: discover \u2192 quote \u2192 appraise \u2192 decide \u2192 pay \u2192 ground. Budgeted x402 buying over Circle Gateway on Arc, with reusable Citation Licenses (pay once, re-read free).",
5
5
  "keywords": [
6
6
  "x402",
@@ -42,10 +42,10 @@
42
42
  "test": "node --import tsx --test \"src/**/*.test.ts\""
43
43
  },
44
44
  "dependencies": {
45
- "@circle-fin/x402-batching": "^3.4.0",
45
+ "@circle-fin/x402-batching": "^3.5.0",
46
46
  "@langchain/core": "^1.2.9",
47
47
  "@langchain/openai": "^1.5.10",
48
- "@naulon/shared": "^0.4.0",
48
+ "@naulon/shared": "^0.5.0",
49
49
  "@x402/core": "^2.23.0",
50
50
  "@x402/evm": "^2.23.0",
51
51
  "viem": "^2.56.0"