run402 4.137.0 → 4.138.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/lib/billing.mjs +2 -2
- package/lib/qr-png.mjs +359 -0
- package/lib/qr-png.test.mjs +59 -0
- package/package.json +1 -3
- package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.js +1 -6
- package/sdk/dist/namespaces/deploy.js.map +1 -1
- package/sdk/dist/namespaces/deploy.types.d.ts +3 -3
- package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/sdk/dist/node/_paid-stack.d.ts +3 -1
- package/sdk/dist/node/_paid-stack.d.ts.map +1 -1
- package/sdk/dist/node/_paid-stack.js +7 -4
- package/sdk/dist/node/_paid-stack.js.map +1 -1
- package/sdk/dist/node/deploy-manifest.d.ts.map +1 -1
- package/sdk/dist/node/deploy-manifest.js +103 -29
- package/sdk/dist/node/deploy-manifest.js.map +1 -1
- package/sdk/dist/node/vendor/x402-offer-receipt/LICENSE +201 -0
- package/sdk/dist/node/vendor/x402-offer-receipt/NOTICE +15 -0
- package/sdk/dist/node/vendor/x402-offer-receipt/VENDORED.md +25 -0
- package/sdk/dist/node/vendor/x402-offer-receipt/index.d.ts +38 -0
- package/sdk/dist/node/vendor/x402-offer-receipt/index.d.ts.map +1 -0
- package/sdk/dist/node/vendor/x402-offer-receipt/index.js +140 -0
- package/sdk/dist/node/vendor/x402-offer-receipt/index.js.map +1 -0
- package/vault-surface.json +1 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The buyer half of the x402 `offer-receipt` extension: reading signed
|
|
3
|
+
* offers from a 402 challenge and a signed receipt from a settlement
|
|
4
|
+
* response, and recovering the EIP-712 signer of each. See VENDORED.md.
|
|
5
|
+
*/
|
|
6
|
+
export const OFFER_RECEIPT = "offer-receipt";
|
|
7
|
+
const OFFER_TYPES = {
|
|
8
|
+
Offer: [
|
|
9
|
+
{ name: "version", type: "uint256" },
|
|
10
|
+
{ name: "resourceUrl", type: "string" },
|
|
11
|
+
{ name: "scheme", type: "string" },
|
|
12
|
+
{ name: "network", type: "string" },
|
|
13
|
+
{ name: "asset", type: "string" },
|
|
14
|
+
{ name: "payTo", type: "string" },
|
|
15
|
+
{ name: "amount", type: "string" },
|
|
16
|
+
{ name: "validUntil", type: "uint256" },
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
const RECEIPT_TYPES = {
|
|
20
|
+
Receipt: [
|
|
21
|
+
{ name: "version", type: "uint256" },
|
|
22
|
+
{ name: "network", type: "string" },
|
|
23
|
+
{ name: "resourceUrl", type: "string" },
|
|
24
|
+
{ name: "payer", type: "string" },
|
|
25
|
+
{ name: "issuedAt", type: "uint256" },
|
|
26
|
+
{ name: "transaction", type: "string" },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
const offerDomain = () => ({ name: "x402 offer", version: "1", chainId: 1 });
|
|
30
|
+
const receiptDomain = () => ({ name: "x402 receipt", version: "1", chainId: 1 });
|
|
31
|
+
const BASE64 = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
32
|
+
/** An EIP-712 `uint256` message field. */
|
|
33
|
+
const uint = (value) => BigInt(value);
|
|
34
|
+
export function isEIP712SignedOffer(offer) {
|
|
35
|
+
return offer?.format === "eip712";
|
|
36
|
+
}
|
|
37
|
+
export function isEIP712SignedReceipt(receipt) {
|
|
38
|
+
return receipt?.format === "eip712";
|
|
39
|
+
}
|
|
40
|
+
function extractJWSPayload(jws) {
|
|
41
|
+
const parts = jws.split(".");
|
|
42
|
+
if (parts.length !== 3)
|
|
43
|
+
throw new Error("Invalid JWS format");
|
|
44
|
+
return JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8"));
|
|
45
|
+
}
|
|
46
|
+
function extractOfferPayload(offer) {
|
|
47
|
+
if (offer.format === "jws")
|
|
48
|
+
return extractJWSPayload(String(offer.signature));
|
|
49
|
+
if (offer.format === "eip712")
|
|
50
|
+
return offer.payload ?? {};
|
|
51
|
+
throw new Error(`Unknown offer format: ${String(offer.format)}`);
|
|
52
|
+
}
|
|
53
|
+
export function extractOffersFromPaymentRequired(paymentRequired) {
|
|
54
|
+
const extensions = paymentRequired?.extensions;
|
|
55
|
+
return extensions?.[OFFER_RECEIPT]?.info?.offers ?? [];
|
|
56
|
+
}
|
|
57
|
+
export function decodeSignedOffers(offers) {
|
|
58
|
+
return offers.map((value) => {
|
|
59
|
+
const offer = value;
|
|
60
|
+
return { ...extractOfferPayload(offer), signedOffer: offer, format: offer.format, acceptIndex: offer.acceptIndex };
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export function findAcceptsObjectFromSignedOffer(offer, accepts) {
|
|
64
|
+
const record = offer;
|
|
65
|
+
const payload = "signedOffer" in record ? record : extractOfferPayload(record);
|
|
66
|
+
const matches = (candidate) => {
|
|
67
|
+
const req = candidate;
|
|
68
|
+
return req.network === payload.network && req.scheme === payload.scheme && req.asset === payload.asset &&
|
|
69
|
+
req.payTo === payload.payTo && req.amount === payload.amount;
|
|
70
|
+
};
|
|
71
|
+
const hint = record.acceptIndex;
|
|
72
|
+
if (hint !== undefined && hint < accepts.length && matches(accepts[hint]))
|
|
73
|
+
return accepts[hint];
|
|
74
|
+
return accepts.find(matches);
|
|
75
|
+
}
|
|
76
|
+
export function extractReceiptFromResponse(response) {
|
|
77
|
+
const header = response.headers.get("PAYMENT-RESPONSE") || response.headers.get("X-PAYMENT-RESPONSE");
|
|
78
|
+
if (!header || !BASE64.test(header))
|
|
79
|
+
return undefined;
|
|
80
|
+
try {
|
|
81
|
+
const settlement = JSON.parse(Buffer.from(header, "base64").toString("utf8"));
|
|
82
|
+
return settlement.extensions?.[OFFER_RECEIPT]?.info?.receipt;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function offerReceiptVerifiers(recoverTypedDataAddress) {
|
|
89
|
+
return {
|
|
90
|
+
async verifyOfferSignatureEIP712(value) {
|
|
91
|
+
const offer = value;
|
|
92
|
+
if (offer.format !== "eip712")
|
|
93
|
+
throw new Error(`Expected eip712 format, got ${String(offer.format)}`);
|
|
94
|
+
const payload = offer.payload;
|
|
95
|
+
if (!payload || !("scheme" in payload))
|
|
96
|
+
throw new Error("Invalid offer: missing or malformed payload");
|
|
97
|
+
const signer = await recoverTypedDataAddress({
|
|
98
|
+
domain: offerDomain(),
|
|
99
|
+
types: OFFER_TYPES,
|
|
100
|
+
primaryType: "Offer",
|
|
101
|
+
message: {
|
|
102
|
+
version: uint(payload.version),
|
|
103
|
+
resourceUrl: payload.resourceUrl,
|
|
104
|
+
scheme: payload.scheme,
|
|
105
|
+
network: payload.network,
|
|
106
|
+
asset: payload.asset,
|
|
107
|
+
payTo: payload.payTo,
|
|
108
|
+
amount: payload.amount,
|
|
109
|
+
validUntil: uint(payload.validUntil),
|
|
110
|
+
},
|
|
111
|
+
signature: offer.signature,
|
|
112
|
+
});
|
|
113
|
+
return { signer, payload };
|
|
114
|
+
},
|
|
115
|
+
async verifyReceiptSignatureEIP712(value) {
|
|
116
|
+
const receipt = value;
|
|
117
|
+
if (receipt.format !== "eip712")
|
|
118
|
+
throw new Error(`Expected eip712 format, got ${String(receipt.format)}`);
|
|
119
|
+
const payload = receipt.payload;
|
|
120
|
+
if (!payload || !("payer" in payload))
|
|
121
|
+
throw new Error("Invalid receipt: missing or malformed payload");
|
|
122
|
+
const signer = await recoverTypedDataAddress({
|
|
123
|
+
domain: receiptDomain(),
|
|
124
|
+
types: RECEIPT_TYPES,
|
|
125
|
+
primaryType: "Receipt",
|
|
126
|
+
message: {
|
|
127
|
+
version: uint(payload.version),
|
|
128
|
+
network: payload.network,
|
|
129
|
+
resourceUrl: payload.resourceUrl,
|
|
130
|
+
payer: payload.payer,
|
|
131
|
+
issuedAt: uint(payload.issuedAt),
|
|
132
|
+
transaction: payload.transaction,
|
|
133
|
+
},
|
|
134
|
+
signature: receipt.signature,
|
|
135
|
+
});
|
|
136
|
+
return { signer, payload };
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/node/vendor/x402-offer-receipt/index.ts"],"names":[],"mappings":"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"}
|
package/vault-surface.json
CHANGED