@obbyx/sdk 0.1.1 → 0.2.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 CHANGED
@@ -65,6 +65,20 @@ app.use(
65
65
  );
66
66
  ```
67
67
 
68
+ Channel payments: register `ObyteBatchServer` the same way, with
69
+ `minChannelTimeoutSeconds` equal to the facilitator's
70
+ `MIN_CHANNEL_TIMEOUT_SECONDS`, and accept `scheme: 'batch-settlement'`.
71
+
72
+ ## Browser clients (CORS)
73
+
74
+ ```ts
75
+ const paywall = new ObytePaywall({ ...options, cors: { origins: ['https://app.example'] } });
76
+ app.use(paywall.preflight()); // answers OPTIONS without payment
77
+ ```
78
+
79
+ The 402 then carries `Access-Control-Allow-Origin` and exposes
80
+ `PAYMENT-REQUIRED` / `PAYMENT-RESPONSE`; preflights allow `PAYMENT-SIGNATURE`.
81
+
68
82
  ## Buy: `payingFetch` with budgets
69
83
 
70
84
  ```ts
@@ -1 +1 @@
1
- {"version":3,"file":"paying-fetch.d.ts","sourceRoot":"","sources":["../../src/client/paying-fetch.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAuC,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAC9F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,iFAAiF;IACjF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,mBAAoB,SAAQ,UAAU;IAE/C,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM;gBADnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM;CAO/B;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,GAAG;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAsGvB"}
1
+ {"version":3,"file":"paying-fetch.d.ts","sourceRoot":"","sources":["../../src/client/paying-fetch.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAKV,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAC9F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,iFAAiF;IACjF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,mBAAoB,SAAQ,UAAU;IAE/C,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM;gBADnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM;CAO/B;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,GAAG;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA+CvB"}
@@ -29,73 +29,14 @@ export async function payingFetch(url, init, options) {
29
29
  const required = response.headers.get('PAYMENT-REQUIRED');
30
30
  if (required === null)
31
31
  throw new ObbyxError('invalid_402', '402 without PAYMENT-REQUIRED header');
32
- const offer = decodePaymentRequiredHeader(required);
33
- // Offers in preference order (channel first). A channel that turns out to
34
- // be unusable before anything is signed (not funded, closing, exhausted,
35
- // busy) falls through to the next offer, normally `exact`.
36
- let accepted;
37
- let result;
38
- let lastChannelError;
39
- for (const candidate of chooseOffers(offer.accepts, options)) {
40
- const mechanism = candidate.scheme === BATCH_SCHEME ? options.mechanisms.batch : options.mechanisms.exact;
41
- if (mechanism === undefined)
42
- continue;
43
- log.info({
44
- url,
45
- scheme: candidate.scheme,
46
- payTo: candidate.payTo,
47
- asset: candidate.asset,
48
- amount: candidate.amount,
49
- }, 'paying for request');
50
- // Reserve the price BEFORE signing: concurrent calls cannot overshoot the budget.
51
- reservation = options.budget?.reserve(candidate.asset, BigInt(candidate.amount));
52
- try {
53
- result = await mechanism.createPaymentPayload(2, candidate);
54
- accepted = candidate;
55
- break;
56
- }
57
- catch (err) {
58
- if (reservation)
59
- options.budget?.release(reservation); // nothing was signed or sent
60
- reservation = undefined;
61
- if (err instanceof ObbyxError && CHANNEL_UNUSABLE.has(err.code)) {
62
- lastChannelError = err;
63
- log.info({ reason: err.code, detail: err.message }, 'channel unusable; trying the next offer');
64
- continue;
65
- }
66
- throw err;
67
- }
68
- }
69
- if (accepted === undefined || result === undefined) {
70
- // Nothing else to pay with: report why the channel could not (e.g. payment_pending).
71
- throw lastChannelError ?? new ObbyxError('no_acceptable_offer', 'No offer could be paid');
72
- }
73
- const payload = {
74
- x402Version: 2,
75
- resource: offer.resource,
76
- accepted,
77
- payload: result.payload,
78
- ...(offer.extensions ? { extensions: withPaymentId(offer.extensions, init.paymentId) } : {}),
79
- };
80
- header = encodePaymentSignatureHeader(payload);
32
+ ({ header, reservation } = await signPayment(decodePaymentRequiredHeader(required), init.paymentId, url, options, log));
81
33
  response = await request(header);
82
34
  }
83
35
  const deadline = Date.now() + (options.pendingTimeoutMs ?? 120_000);
84
36
  for (;;) {
85
37
  const settle = readSettle(response);
86
38
  if (response.status !== 402 || settle?.errorReason !== 'settlement_pending') {
87
- const accepted = acceptedOf(header);
88
- if (accepted?.scheme === BATCH_SCHEME)
89
- options.mechanisms.batch?.onSettled(accepted, settle);
90
- if (reservation !== undefined && options.budget !== undefined) {
91
- // I7: spend on success; release ONLY on a definite refusal (402: the
92
- // payment was not used). Anything else (5xx, 409, no settlement info)
93
- // is an unknown outcome: the reservation stays counted.
94
- if (settle?.success === true || (response.ok && settle === undefined))
95
- options.budget.spend(reservation);
96
- else if (response.status === 402)
97
- options.budget.release(reservation);
98
- }
39
+ recordOutcome(response, settle, header, reservation, options);
99
40
  return { response, ...(settle ? { payment: settle } : {}), paymentHeader: header };
100
41
  }
101
42
  if (Date.now() > deadline)
@@ -108,6 +49,72 @@ export async function payingFetch(url, init, options) {
108
49
  response = await request(header);
109
50
  }
110
51
  }
52
+ /**
53
+ * Signs a payment for the first usable offer, in preference order (channel
54
+ * first). A channel that turns out to be unusable before anything is signed
55
+ * (not funded, closing, exhausted, busy) falls through to the next offer,
56
+ * normally `exact`. The price is reserved in the budget BEFORE signing, so
57
+ * concurrent calls cannot overshoot it.
58
+ */
59
+ async function signPayment(offer, paymentId, url, options, log) {
60
+ let lastChannelError;
61
+ for (const candidate of chooseOffers(offer.accepts, options)) {
62
+ const mechanism = candidate.scheme === BATCH_SCHEME ? options.mechanisms.batch : options.mechanisms.exact;
63
+ if (mechanism === undefined)
64
+ continue;
65
+ log.info({
66
+ url,
67
+ scheme: candidate.scheme,
68
+ payTo: candidate.payTo,
69
+ asset: candidate.asset,
70
+ amount: candidate.amount,
71
+ }, 'paying for request');
72
+ const reservation = options.budget?.reserve(candidate.asset, BigInt(candidate.amount));
73
+ let result;
74
+ try {
75
+ result = await mechanism.createPaymentPayload(2, candidate);
76
+ }
77
+ catch (err) {
78
+ if (reservation)
79
+ options.budget?.release(reservation); // nothing was signed or sent
80
+ if (err instanceof ObbyxError && CHANNEL_UNUSABLE.has(err.code)) {
81
+ lastChannelError = err;
82
+ log.info({ reason: err.code, detail: err.message }, 'channel unusable; trying the next offer');
83
+ continue;
84
+ }
85
+ throw err;
86
+ }
87
+ const payload = {
88
+ x402Version: 2,
89
+ resource: offer.resource,
90
+ accepted: candidate,
91
+ payload: result.payload,
92
+ ...(offer.extensions ? { extensions: withPaymentId(offer.extensions, paymentId) } : {}),
93
+ };
94
+ return { header: encodePaymentSignatureHeader(payload), reservation };
95
+ }
96
+ // Nothing else to pay with: report why the channel could not (e.g. payment_pending).
97
+ throw lastChannelError ?? new ObbyxError('no_acceptable_offer', 'No offer could be paid');
98
+ }
99
+ /**
100
+ * Applies the final answer: the channel voucher is confirmed or released, and
101
+ * the budget reservation is spent on success and released ONLY on a definite
102
+ * refusal (402: the payment was not used). Anything else (5xx, 409, no
103
+ * settlement info) is an unknown outcome: the reservation stays counted (I7).
104
+ */
105
+ function recordOutcome(response, settle, header, reservation, options) {
106
+ const accepted = acceptedOf(header);
107
+ if (accepted?.scheme === BATCH_SCHEME)
108
+ options.mechanisms.batch?.onSettled(accepted, settle);
109
+ if (reservation === undefined || options.budget === undefined)
110
+ return;
111
+ if (settle?.success === true || (response.ok && settle === undefined)) {
112
+ options.budget.spend(reservation);
113
+ }
114
+ else if (response.status === 402) {
115
+ options.budget.release(reservation);
116
+ }
117
+ }
111
118
  /** An offer from an untrusted seller: integer amount in smallest units, strings elsewhere. */
112
119
  const offerShape = z
113
120
  .object({
@@ -1 +1 @@
1
- {"version":3,"file":"paying-fetch.js","sourceRoot":"","sources":["../../src/client/paying-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAe,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EACL,YAAY,EAEZ,YAAY,GAEb,MAAM,mBAAmB,CAAC;AA+B3B,MAAM,OAAO,mBAAoB,SAAQ,UAAU;IAEtC;IACA;IAFX,YACW,aAAqB,EACrB,WAAmB;QAE5B,KAAK,CACH,oBAAoB,EACpB,WAAW,WAAW,uEAAuE,CAC9F,CAAC;QANO,kBAAa,GAAb,aAAa,CAAQ;QACrB,gBAAW,GAAX,WAAW,CAAQ;IAM9B,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAW,EACX,IAIC,EACD,OAA2B;IAE3B,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,MAAe,EAAE,EAAE,CAClC,OAAO,CAAC,GAAG,EAAE;QACX,GAAG,IAAI;QACP,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KAC5F,CAAC,CAAC;IAEL,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;IAChC,IAAI,WAA0C,CAAC;IAC/C,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAEzE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC1D,IAAI,QAAQ,KAAK,IAAI;YACnB,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE,qCAAqC,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QACpD,0EAA0E;QAC1E,yEAAyE;QACzE,2DAA2D;QAC3D,IAAI,QAAyC,CAAC;QAC9C,IAAI,MAAiF,CAAC;QACtF,IAAI,gBAAwC,CAAC;QAC7C,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YAC7D,MAAM,SAAS,GACb,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;YAC1F,IAAI,SAAS,KAAK,SAAS;gBAAE,SAAS;YACtC,GAAG,CAAC,IAAI,CACN;gBACE,GAAG;gBACH,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,EACD,oBAAoB,CACrB,CAAC;YACF,kFAAkF;YAClF,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACjF,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC5D,QAAQ,GAAG,SAAS,CAAC;gBACrB,MAAM;YACR,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,WAAW;oBAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,6BAA6B;gBACpF,WAAW,GAAG,SAAS,CAAC;gBACxB,IAAI,GAAG,YAAY,UAAU,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChE,gBAAgB,GAAG,GAAG,CAAC;oBACvB,GAAG,CAAC,IAAI,CACN,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,EACzC,yCAAyC,CAC1C,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACnD,qFAAqF;YACrF,MAAM,gBAAgB,IAAI,IAAI,UAAU,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,OAAO,GAAmB;YAC9B,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ;YACR,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7F,CAAC;QACF,MAAM,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAC/C,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,CAAC;IACpE,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE,WAAW,KAAK,oBAAoB,EAAE,CAAC;YAC5E,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,QAAQ,EAAE,MAAM,KAAK,YAAY;gBAAE,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7F,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9D,qEAAqE;gBACrE,sEAAsE;gBACtE,wDAAwD;gBACxD,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,MAAM,KAAK,SAAS,CAAC;oBACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;qBAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;oBAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QACrF,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;YAAE,MAAM,IAAI,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxE,GAAG,CAAC,IAAI,CACN,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EACjD,oDAAoD,CACrD,CAAC;QACF,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;CACzC,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,gFAAgF;AAChF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;CAClB,CAAC,CAAC;AAEH,2FAA2F;AAC3F,SAAS,YAAY,CACnB,OAA8B,EAC9B,OAA2B;IAE3B,MAAM,MAAM,GAAG,CAAC,CAAsB,EAAE,EAAE,CACxC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO;QAC/B,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;QAC7B,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAC9E,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG;QACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC;QACnD,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC;KACpD,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,qBAAqB,EAAE,sBAAsB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAC1D,CAAC,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,IAAI,UAAU,CAAC,mBAAmB,EAAE,UAAU,MAAM,+BAA+B,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,mFAAmF;AACnF,SAAS,aAAa,CACpB,UAAmC,EACnC,EAAsB;IAEtB,MAAM,QAAQ,GAAG,UAAU,CAAC,oBAAoB,CACA,CAAC;IACjD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC9C,MAAM,SAAS,GAAG,EAAE,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IACpF,OAAO;QACL,GAAG,UAAU;QACb,oBAAoB,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;KACjF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,CAAC;QACH,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAAkB;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAA+B;IAChD,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"paying-fetch.js","sourceRoot":"","sources":["../../src/client/paying-fetch.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,5 +3,6 @@ export { ConsumedProofsStore, type ProofRecord, type ProofState, type StoredResp
3
3
  export { ObytePaywall, type ObytePaywallOptions, type PaidHandler, type PaidResult, type PaidRouteOptions, type PaywallScheme, type RoutePrice, } from './seller/paywall.js';
4
4
  export { type PaidResponse, PaymentPendingError, type PayingFetchOptions, payingFetch, } from './client/paying-fetch.js';
5
5
  export { type BudgetLimits, BudgetExceededError, type BudgetReservation, SpendingBudget, } from './client/budget.js';
6
- export { ObyteExactServer, type ObyteExactServerOptions } from './seller/x402-server.js';
6
+ export { ObyteBatchServer, type ObyteBatchServerOptions, ObyteExactServer, type ObyteExactServerOptions, ObyteSchemeServer, type ObyteSchemeSpec, type ObyteSchemeServerOptions, } from './seller/x402-server.js';
7
+ export type { PaywallCorsOptions } from './seller/cors.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,aAAa,EACb,cAAc,EACd,UAAU,EACV,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,YAAY,EACjB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,YAAY,EACjB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,aAAa,EACb,cAAc,EACd,UAAU,EACV,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,YAAY,EACjB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,YAAY,EACjB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -3,5 +3,5 @@ export { ConsumedProofsStore, } from './seller/consumed-proofs.js';
3
3
  export { ObytePaywall, } from './seller/paywall.js';
4
4
  export { PaymentPendingError, payingFetch, } from './client/paying-fetch.js';
5
5
  export { BudgetExceededError, SpendingBudget, } from './client/budget.js';
6
- export { ObyteExactServer } from './seller/x402-server.js';
6
+ export { ObyteBatchServer, ObyteExactServer, ObyteSchemeServer, } from './seller/x402-server.js';
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,cAAc,EACd,UAAU,EACV,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,GAIpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,YAAY,GAOb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,mBAAmB,EAEnB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,mBAAmB,EAEnB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAgC,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,cAAc,EACd,UAAU,EACV,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,GAIpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,YAAY,GAOb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,mBAAmB,EAEnB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,mBAAmB,EAEnB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAEhB,gBAAgB,EAEhB,iBAAiB,GAGlB,MAAM,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"consumed-proofs.d.ts","sourceRoot":"","sources":["../../src/seller/consumed-proofs.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,iBAAiB,GACjB,SAAS,GACT,QAAQ,GACR,QAAQ;AACV,kFAAkF;GAChF,iBAAiB,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAaD,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;gBAGhC,IAAI,EAAE,MAAM,EACK,GAAG,GAAE,MAAM,MAA4C;IA2B1E;;;OAGG;IACH,aAAa,CACX,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAmB9D,wFAAwF;IACxF,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO7E,KAAK,IAAI,IAAI;IAIb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMzC,mFAAmF;IACnF,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE;IAa9E,oEAAoE;IACpE,UAAU,CACR,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,KAAK,GAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAO,GAClE,OAAO;IAwBV;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,UAAU;IAuB9E;;;;;OAKG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAYxD,sFAAsF;IACtF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;CAG7C"}
1
+ {"version":3,"file":"consumed-proofs.d.ts","sourceRoot":"","sources":["../../src/seller/consumed-proofs.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,iBAAiB,GACjB,SAAS,GACT,QAAQ,GACR,QAAQ;AACV,kFAAkF;GAChF,iBAAiB,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAaD,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;gBAGhC,IAAI,EAAE,MAAM,EACK,GAAG,GAAE,MAAM,MAA4C;IA2B1E;;;OAGG;IACH,aAAa,CACX,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAmB9D,wFAAwF;IACxF,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO7E,KAAK,IAAI,IAAI;IAIb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMzC,mFAAmF;IACnF,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE;IAa9E,oEAAoE;IACpE,UAAU,CACR,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,KAAK,GAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAO,GAClE,OAAO;IAwBV;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,UAAU;IAiB9E;;;;;OAKG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAYxD,sFAAsF;IACtF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;CAG7C"}
@@ -91,21 +91,14 @@ export class ConsumedProofsStore {
91
91
  */
92
92
  markSettled(key, binding, paymentResponse) {
93
93
  const ts = this.now();
94
- this.db.exec('BEGIN IMMEDIATE');
95
- try {
96
- this.db
97
- .prepare(`INSERT INTO consumed_proofs (key, binding, state, payment_response, created_at, updated_at)
98
- VALUES (?, ?, 'paid_not_served', ?, ?, ?)
99
- ON CONFLICT(key) DO UPDATE SET state = 'paid_not_served', payment_response = excluded.payment_response,
100
- updated_at = excluded.updated_at
101
- WHERE consumed_proofs.state = 'settling'`)
102
- .run(key, binding, paymentResponse, ts, ts);
103
- this.db.exec('COMMIT');
104
- }
105
- catch (err) {
106
- this.db.exec('ROLLBACK');
107
- throw err;
108
- }
94
+ // One UPSERT statement: atomic on its own.
95
+ this.db
96
+ .prepare(`INSERT INTO consumed_proofs (key, binding, state, payment_response, created_at, updated_at)
97
+ VALUES (?, ?, 'paid_not_served', ?, ?, ?)
98
+ ON CONFLICT(key) DO UPDATE SET state = 'paid_not_served', payment_response = excluded.payment_response,
99
+ updated_at = excluded.updated_at
100
+ WHERE consumed_proofs.state = 'settling'`)
101
+ .run(key, binding, paymentResponse, ts, ts);
109
102
  const record = this.get(key);
110
103
  if (record === undefined)
111
104
  throw new Error(`consumed proof ${key} vanished`);
@@ -1 +1 @@
1
- {"version":3,"file":"consumed-proofs.js","sourceRoot":"","sources":["../../src/seller/consumed-proofs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consumed-proofs.js","sourceRoot":"","sources":["../../src/seller/consumed-proofs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Request, RequestHandler, Response } from 'express';
2
+ /**
3
+ * CORS for browser clients of a paid route (x402 `transports-v2/http.md`,
4
+ * "Browser clients"). None of the x402 headers is CORS-safelisted: without
5
+ * these headers a cross-origin page cannot read the price (402) or send the
6
+ * payment. CORS decides who may READ a response; it is not a payment control.
7
+ */
8
+ export interface PaywallCorsOptions {
9
+ /** Allowed origins (exact `scheme://host[:port]`), or `'*'` for any. */
10
+ readonly origins: readonly string[] | '*';
11
+ /** Whether requests may carry credentials (cookies); origins are then reflected, never `*`. */
12
+ readonly credentials?: boolean;
13
+ /** Preflight cache lifetime (default 600 s). */
14
+ readonly maxAgeSeconds?: number;
15
+ }
16
+ /** Response headers a browser client must read: the price and the settlement. */
17
+ export declare const EXPOSED_HEADERS: readonly ["PAYMENT-REQUIRED", "PAYMENT-RESPONSE"];
18
+ /** Request headers a browser client sends: the payment, and Content-Type for a JSON body. */
19
+ export declare const ALLOWED_HEADERS: readonly ["PAYMENT-SIGNATURE", "Content-Type"];
20
+ /** Merges header names into a comma-separated list, keeping existing ones (case-insensitive). */
21
+ export declare function mergeHeaderList(existing: string | number | readonly string[] | undefined, add: readonly string[]): string;
22
+ /** Always: lets a cross-origin page read the x402 headers (merged with any value already set). */
23
+ export declare function exposePaymentHeaders(res: Response): void;
24
+ /** Sets `Access-Control-Allow-Origin` for an allowed calling origin; false when not allowed. */
25
+ export declare function allowOrigin(req: Request, res: Response, cors: PaywallCorsOptions): boolean;
26
+ /**
27
+ * Answers the CORS preflight (`OPTIONS`) of paid routes without requiring
28
+ * payment. Allows the x402 request headers plus whatever else the browser
29
+ * announces: x402 client SDKs have added request headers of their own, and an
30
+ * allow list naming exactly the protocol headers would refuse their retry.
31
+ */
32
+ export declare function preflightHandler(cors: PaywallCorsOptions): RequestHandler;
33
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/seller/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC;IAC1C,+FAA+F;IAC/F,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,iFAAiF;AACjF,eAAO,MAAM,eAAe,mDAAoD,CAAC;AACjF,6FAA6F;AAC7F,eAAO,MAAM,eAAe,gDAAiD,CAAC;AAG9E,iGAAiG;AACjG,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,EACzD,GAAG,EAAE,SAAS,MAAM,EAAE,GACrB,MAAM,CAgBR;AAED,kGAAkG;AAClG,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAKxD;AAED,gGAAgG;AAChG,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAc1F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CA6BzE"}
@@ -0,0 +1,77 @@
1
+ /** Response headers a browser client must read: the price and the settlement. */
2
+ export const EXPOSED_HEADERS = ['PAYMENT-REQUIRED', 'PAYMENT-RESPONSE'];
3
+ /** Request headers a browser client sends: the payment, and Content-Type for a JSON body. */
4
+ export const ALLOWED_HEADERS = ['PAYMENT-SIGNATURE', 'Content-Type'];
5
+ const DEFAULT_MAX_AGE_SECONDS = 600;
6
+ /** Merges header names into a comma-separated list, keeping existing ones (case-insensitive). */
7
+ export function mergeHeaderList(existing, add) {
8
+ const current = existing === undefined
9
+ ? []
10
+ : (Array.isArray(existing) ? existing.join(',') : String(existing))
11
+ .split(',')
12
+ .map((h) => h.trim())
13
+ .filter((h) => h.length > 0);
14
+ const seen = new Set(current.map((h) => h.toLowerCase()));
15
+ for (const h of add) {
16
+ if (!seen.has(h.toLowerCase())) {
17
+ current.push(h);
18
+ seen.add(h.toLowerCase());
19
+ }
20
+ }
21
+ return current.join(', ');
22
+ }
23
+ /** Always: lets a cross-origin page read the x402 headers (merged with any value already set). */
24
+ export function exposePaymentHeaders(res) {
25
+ res.setHeader('Access-Control-Expose-Headers', mergeHeaderList(res.getHeader('Access-Control-Expose-Headers'), EXPOSED_HEADERS));
26
+ }
27
+ /** Sets `Access-Control-Allow-Origin` for an allowed calling origin; false when not allowed. */
28
+ export function allowOrigin(req, res, cors) {
29
+ const origin = req.get('origin');
30
+ if (origin === undefined)
31
+ return false;
32
+ const anyOrigin = cors.origins === '*';
33
+ if (!anyOrigin && !cors.origins.includes(origin))
34
+ return false;
35
+ if (anyOrigin && cors.credentials !== true) {
36
+ res.setHeader('Access-Control-Allow-Origin', '*');
37
+ }
38
+ else {
39
+ // A reflected origin varies per request: shared caches must key on it.
40
+ res.setHeader('Access-Control-Allow-Origin', origin);
41
+ res.setHeader('Vary', mergeHeaderList(res.getHeader('Vary'), ['Origin']));
42
+ }
43
+ if (cors.credentials === true)
44
+ res.setHeader('Access-Control-Allow-Credentials', 'true');
45
+ return true;
46
+ }
47
+ /**
48
+ * Answers the CORS preflight (`OPTIONS`) of paid routes without requiring
49
+ * payment. Allows the x402 request headers plus whatever else the browser
50
+ * announces: x402 client SDKs have added request headers of their own, and an
51
+ * allow list naming exactly the protocol headers would refuse their retry.
52
+ */
53
+ export function preflightHandler(cors) {
54
+ return (req, res, next) => {
55
+ if (req.method !== 'OPTIONS' || req.get('access-control-request-method') === undefined) {
56
+ next();
57
+ return;
58
+ }
59
+ if (!allowOrigin(req, res, cors)) {
60
+ res.status(204).end(); // no CORS headers: the browser refuses the call
61
+ return;
62
+ }
63
+ const requested = (req.get('access-control-request-headers') ?? '')
64
+ .split(',')
65
+ .map((h) => h.trim())
66
+ .filter((h) => h.length > 0);
67
+ res.setHeader('Access-Control-Allow-Headers', mergeHeaderList(undefined, [...ALLOWED_HEADERS, ...requested]));
68
+ res.setHeader('Access-Control-Allow-Methods', mergeHeaderList(undefined, [
69
+ req.get('access-control-request-method') ?? 'POST',
70
+ 'GET',
71
+ 'POST',
72
+ ]));
73
+ res.setHeader('Access-Control-Max-Age', String(cors.maxAgeSeconds ?? DEFAULT_MAX_AGE_SECONDS));
74
+ res.status(204).end();
75
+ };
76
+ }
77
+ //# sourceMappingURL=cors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../src/seller/cors.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { type FacilitatorClient } from '@x402/core/http';
3
3
  import { type Logger } from '@obbyx/obyte/logger';
4
4
  import { BATCH_SCHEME, EXACT_SCHEME } from '@obbyx/x402-obyte';
5
5
  import type { ConsumedProofsStore } from './consumed-proofs.js';
6
+ import { type PaywallCorsOptions } from './cors.js';
6
7
  /**
7
8
  * Express paywall for x402 `exact` payments on Obyte (seller side).
8
9
  *
@@ -75,6 +76,12 @@ export interface ObytePaywallOptions {
75
76
  readonly batch?: {
76
77
  readonly minChannelTimeoutSeconds: number;
77
78
  };
79
+ /**
80
+ * CORS for browser clients on another origin (x402 HTTP transport, "Browser
81
+ * clients"). Also mount {@link ObytePaywall.preflight} before the routes.
82
+ * Without it, same-origin pages and non-browser clients work as before.
83
+ */
84
+ readonly cors?: PaywallCorsOptions;
78
85
  readonly now?: () => number;
79
86
  }
80
87
  export declare class ObytePaywall {
@@ -82,12 +89,37 @@ export declare class ObytePaywall {
82
89
  private readonly log;
83
90
  private readonly now;
84
91
  constructor(options: ObytePaywallOptions);
92
+ /**
93
+ * Answers CORS preflight requests (`app.use(paywall.preflight())`); a no-op
94
+ * without the `cors` option. Preflights never require payment.
95
+ */
96
+ preflight(): RequestHandler;
85
97
  /** Wraps a handler so it only runs after a settled payment. */
86
98
  paid(route: PaidRouteOptions, handler: PaidHandler): RequestHandler;
87
99
  private handle;
100
+ /**
101
+ * Decodes the payment and checks it against THIS offer: our scheme, network,
102
+ * price and payee, and a binding we issued for this very request.
103
+ */
104
+ private parsePayment;
105
+ /** Registers the proof, then continues from its state: one payment, one operation. */
106
+ private process;
107
+ /**
108
+ * x402 payment-identifier: one client id = one operation. Decided AFTER the
109
+ * proof row exists, so a concurrent request always sees this proof as in
110
+ * progress (never as "absent") and cannot take the id over. True when the
111
+ * response was already sent (refused, or the stored response replayed).
112
+ */
113
+ private paymentIdentifierAnswered;
114
+ /** upfront flow: settle to finality, then run the handler once. */
115
+ private settleUpfront;
88
116
  /** authorization flow: verify → handler (response stored) → settle → send. */
89
117
  private authorize;
118
+ /** authorization flow, after the handler: settle, then send the stored response. */
90
119
  private settleServed;
120
+ /** Not final yet: the client retries with the same payment. */
121
+ private answerPending;
122
+ /** Runs the handler once for a settled payment and stores its response. */
91
123
  private serve;
92
124
  private send;
93
125
  private paymentRequired;
@@ -1 +1 @@
1
- {"version":3,"file":"paywall.d.ts","sourceRoot":"","sources":["../../src/seller/paywall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paywall.d.ts","sourceRoot":"","sources":["../../src/seller/paywall.ts"],"names":[],"mappings":"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"}