@obbyx/sdk 0.2.0 → 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/dist/client/paying-fetch.d.ts.map +1 -1
- package/dist/client/paying-fetch.js +68 -61
- package/dist/client/paying-fetch.js.map +1 -1
- package/dist/seller/paywall.d.ts +20 -0
- package/dist/seller/paywall.d.ts.map +1 -1
- package/dist/seller/paywall.js +171 -125
- package/dist/seller/paywall.js.map +1 -1
- package/package.json +3 -3
- package/src/client/paying-fetch.ts +96 -64
- package/src/seller/paywall.ts +214 -174
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paying-fetch.d.ts","sourceRoot":"","sources":["../../src/client/paying-fetch.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
1
|
+
{"version":3,"file":"paying-fetch.js","sourceRoot":"","sources":["../../src/client/paying-fetch.ts"],"names":[],"mappings":"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"}
|
package/dist/seller/paywall.d.ts
CHANGED
|
@@ -97,9 +97,29 @@ export declare class ObytePaywall {
|
|
|
97
97
|
/** Wraps a handler so it only runs after a settled payment. */
|
|
98
98
|
paid(route: PaidRouteOptions, handler: PaidHandler): RequestHandler;
|
|
99
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;
|
|
100
116
|
/** authorization flow: verify → handler (response stored) → settle → send. */
|
|
101
117
|
private authorize;
|
|
118
|
+
/** authorization flow, after the handler: settle, then send the stored response. */
|
|
102
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. */
|
|
103
123
|
private serve;
|
|
104
124
|
private send;
|
|
105
125
|
private paymentRequired;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paywall.d.ts","sourceRoot":"","sources":["../../src/seller/paywall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAC/E,OAAO,EACL,KAAK,iBAAiB,EAIvB,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,KAAK,MAAM,EAAgC,MAAM,qBAAqB,CAAC;AAChF,OAAO,EACL,YAAY,EACZ,YAAY,EAIb,MAAM,mBAAmB,CAAC;AAgB3B,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,sBAAsB,CAAC;AAChF,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,WAAW,CAAC;AAOnB;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"paywall.d.ts","sourceRoot":"","sources":["../../src/seller/paywall.ts"],"names":[],"mappings":"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"}
|