@agent-score/commerce 2.0.2 → 2.1.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/README.md +26 -11
- package/dist/_core-kI7FRAiZ.d.mts +10 -0
- package/dist/_core-kI7FRAiZ.d.ts +10 -0
- package/dist/challenge/index.d.mts +3 -3
- package/dist/challenge/index.d.ts +3 -3
- package/dist/challenge/index.js +21 -14
- package/dist/challenge/index.js.map +1 -1
- package/dist/challenge/index.mjs +21 -14
- package/dist/challenge/index.mjs.map +1 -1
- package/dist/{checkout-DhSj_h94.d.ts → checkout-BH-I_Ns8.d.ts} +13 -12
- package/dist/{checkout-jNUIql6D.d.mts → checkout-Bd_4aQ6c.d.mts} +13 -12
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/core.mjs +1 -1
- package/dist/core.mjs.map +1 -1
- package/dist/default_rails-BWAquZeu.d.mts +188 -0
- package/dist/default_rails-BxBzcCA1.d.ts +188 -0
- package/dist/discovery/index.d.mts +5 -5
- package/dist/discovery/index.d.ts +5 -5
- package/dist/discovery/index.js +14 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/index.mjs +14 -1
- package/dist/discovery/index.mjs.map +1 -1
- package/dist/identity/express.d.mts +7 -3
- package/dist/identity/express.d.ts +7 -3
- package/dist/identity/express.js +39 -96
- package/dist/identity/express.js.map +1 -1
- package/dist/identity/express.mjs +37 -87
- package/dist/identity/express.mjs.map +1 -1
- package/dist/identity/fastify.d.mts +4 -4
- package/dist/identity/fastify.d.ts +4 -4
- package/dist/identity/fastify.js +60 -96
- package/dist/identity/fastify.js.map +1 -1
- package/dist/identity/fastify.mjs +58 -87
- package/dist/identity/fastify.mjs.map +1 -1
- package/dist/identity/hono.d.mts +11 -3
- package/dist/identity/hono.d.ts +11 -3
- package/dist/identity/hono.js +39 -93
- package/dist/identity/hono.js.map +1 -1
- package/dist/identity/hono.mjs +37 -84
- package/dist/identity/hono.mjs.map +1 -1
- package/dist/identity/nextjs.d.mts +10 -3
- package/dist/identity/nextjs.d.ts +10 -3
- package/dist/identity/nextjs.js +49 -93
- package/dist/identity/nextjs.js.map +1 -1
- package/dist/identity/nextjs.mjs +46 -84
- package/dist/identity/nextjs.mjs.map +1 -1
- package/dist/identity/policy.js +185 -139
- package/dist/identity/policy.js.map +1 -1
- package/dist/identity/policy.mjs +187 -141
- package/dist/identity/policy.mjs.map +1 -1
- package/dist/identity/web.d.mts +9 -3
- package/dist/identity/web.d.ts +9 -3
- package/dist/identity/web.js +45 -93
- package/dist/identity/web.js.map +1 -1
- package/dist/identity/web.mjs +42 -84
- package/dist/identity/web.mjs.map +1 -1
- package/dist/index.d.mts +554 -90
- package/dist/index.d.ts +554 -90
- package/dist/index.js +916 -162
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +904 -162
- package/dist/index.mjs.map +1 -1
- package/dist/middleware/express.d.mts +10 -0
- package/dist/middleware/express.d.ts +10 -0
- package/dist/middleware/express.js +128 -0
- package/dist/middleware/express.js.map +1 -0
- package/dist/middleware/express.mjs +91 -0
- package/dist/middleware/express.mjs.map +1 -0
- package/dist/middleware/fastify.d.mts +10 -0
- package/dist/middleware/fastify.d.ts +10 -0
- package/dist/middleware/fastify.js +127 -0
- package/dist/middleware/fastify.js.map +1 -0
- package/dist/middleware/fastify.mjs +90 -0
- package/dist/middleware/fastify.mjs.map +1 -0
- package/dist/middleware/hono.d.mts +10 -0
- package/dist/middleware/hono.d.ts +10 -0
- package/dist/middleware/hono.js +122 -0
- package/dist/middleware/hono.js.map +1 -0
- package/dist/middleware/hono.mjs +85 -0
- package/dist/middleware/hono.mjs.map +1 -0
- package/dist/middleware/nextjs.d.mts +22 -0
- package/dist/middleware/nextjs.d.ts +22 -0
- package/dist/middleware/nextjs.js +143 -0
- package/dist/middleware/nextjs.js.map +1 -0
- package/dist/middleware/nextjs.mjs +105 -0
- package/dist/middleware/nextjs.mjs.map +1 -0
- package/dist/middleware/web.d.mts +25 -0
- package/dist/middleware/web.d.ts +25 -0
- package/dist/middleware/web.js +128 -0
- package/dist/middleware/web.js.map +1 -0
- package/dist/middleware/web.mjs +91 -0
- package/dist/middleware/web.mjs.map +1 -0
- package/dist/payment/index.d.mts +21 -6
- package/dist/payment/index.d.ts +21 -6
- package/dist/payment/index.js +136 -9
- package/dist/payment/index.js.map +1 -1
- package/dist/payment/index.mjs +127 -9
- package/dist/payment/index.mjs.map +1 -1
- package/dist/{pricing-CxzwyiO6.d.mts → pricing-4n5Ota0D.d.mts} +14 -4
- package/dist/{pricing-CQ9DIFaw.d.ts → pricing-DHfH3ogG.d.ts} +14 -4
- package/dist/{rail_spec-XP0wKgJV.d.mts → rail_spec-D6qzh3J0.d.mts} +1 -1
- package/dist/{rail_spec-XP0wKgJV.d.ts → rail_spec-D6qzh3J0.d.ts} +1 -1
- package/dist/stripe-multichain/index.d.mts +150 -47
- package/dist/stripe-multichain/index.d.ts +150 -47
- package/dist/stripe-multichain/index.js +19749 -42
- package/dist/stripe-multichain/index.js.map +1 -1
- package/dist/stripe-multichain/index.mjs +19758 -27
- package/dist/stripe-multichain/index.mjs.map +1 -1
- package/dist/{x402_server-hgQzWQwB.d.mts → x402_server-Ciz2mls2.d.mts} +1 -1
- package/dist/{x402_server-hgQzWQwB.d.ts → x402_server-Ciz2mls2.d.ts} +1 -1
- package/package.json +40 -2
- package/dist/_response-BFYN3b6i.d.mts +0 -142
- package/dist/_response-_iPD5AIj.d.ts +0 -142
- package/dist/solana-Cds87OTu.d.mts +0 -67
- package/dist/solana-Cds87OTu.d.ts +0 -67
package/dist/identity/policy.js
CHANGED
|
@@ -33,64 +33,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
33
33
|
));
|
|
34
34
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
35
35
|
|
|
36
|
-
// src/payment/usdc.ts
|
|
37
|
-
var USDC;
|
|
38
|
-
var init_usdc = __esm({
|
|
39
|
-
"src/payment/usdc.ts"() {
|
|
40
|
-
"use strict";
|
|
41
|
-
USDC = {
|
|
42
|
-
base: {
|
|
43
|
-
mainnet: { address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", decimals: 6 },
|
|
44
|
-
sepolia: { address: "0x036CbD53842c5426634e7929541eC2318f3dCF7e", decimals: 6 }
|
|
45
|
-
},
|
|
46
|
-
solana: {
|
|
47
|
-
mainnet: { mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", decimals: 6 },
|
|
48
|
-
devnet: { mint: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU", decimals: 6 }
|
|
49
|
-
},
|
|
50
|
-
tempo: {
|
|
51
|
-
mainnet: { address: "0x20C000000000000000000000b9537d11c60E8b50", decimals: 6 },
|
|
52
|
-
testnet: { address: "0x20c0000000000000000000000000000000000000", decimals: 6 }
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
// src/payment/wwwauthenticate.ts
|
|
59
|
-
function paymentRequiredHeader({
|
|
60
|
-
x402Version,
|
|
61
|
-
accepts,
|
|
62
|
-
resource
|
|
63
|
-
}) {
|
|
64
|
-
return Buffer.from(JSON.stringify({ x402Version, accepts, ...resource ? { resource } : {} })).toString("base64");
|
|
65
|
-
}
|
|
66
|
-
var init_wwwauthenticate = __esm({
|
|
67
|
-
"src/payment/wwwauthenticate.ts"() {
|
|
68
|
-
"use strict";
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
// src/payment/networks.ts
|
|
73
|
-
var networks;
|
|
74
|
-
var init_networks = __esm({
|
|
75
|
-
"src/payment/networks.ts"() {
|
|
76
|
-
"use strict";
|
|
77
|
-
networks = {
|
|
78
|
-
base: {
|
|
79
|
-
mainnet: { caip2: "eip155:8453", chainId: 8453 },
|
|
80
|
-
sepolia: { caip2: "eip155:84532", chainId: 84532 }
|
|
81
|
-
},
|
|
82
|
-
solana: {
|
|
83
|
-
mainnet: { caip2: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp" },
|
|
84
|
-
devnet: { caip2: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1" }
|
|
85
|
-
},
|
|
86
|
-
tempo: {
|
|
87
|
-
mainnet: { caip2: "eip155:4217", chainId: 4217 },
|
|
88
|
-
testnet: { caip2: "eip155:42431", chainId: 42431 }
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
|
|
94
36
|
// node_modules/ox/_esm/core/Abi.js
|
|
95
37
|
var init_Abi = __esm({
|
|
96
38
|
"node_modules/ox/_esm/core/Abi.js"() {
|
|
@@ -19206,11 +19148,11 @@ __export(Errors_exports2, {
|
|
|
19206
19148
|
PaymentExpiredError: () => PaymentExpiredError,
|
|
19207
19149
|
PaymentInsufficientError: () => PaymentInsufficientError,
|
|
19208
19150
|
PaymentMethodUnsupportedError: () => PaymentMethodUnsupportedError,
|
|
19209
|
-
PaymentRequiredError: () =>
|
|
19151
|
+
PaymentRequiredError: () => PaymentRequiredError,
|
|
19210
19152
|
SignerMismatchError: () => SignerMismatchError,
|
|
19211
19153
|
VerificationFailedError: () => VerificationFailedError
|
|
19212
19154
|
});
|
|
19213
|
-
var PaymentError, MalformedCredentialError, InvalidChallengeError, VerificationFailedError, PaymentActionRequiredError, PaymentExpiredError,
|
|
19155
|
+
var PaymentError, MalformedCredentialError, InvalidChallengeError, VerificationFailedError, PaymentActionRequiredError, PaymentExpiredError, PaymentRequiredError, InvalidPayloadError, BadRequestError, PaymentInsufficientError, PaymentMethodUnsupportedError, InsufficientBalanceError, InvalidSignatureError, SignerMismatchError, AmountExceedsDepositError, DeltaTooSmallError, ChannelNotFoundError, ChannelClosedError;
|
|
19214
19156
|
var init_Errors2 = __esm({
|
|
19215
19157
|
"node_modules/mppx/dist/Errors.js"() {
|
|
19216
19158
|
"use strict";
|
|
@@ -19277,7 +19219,7 @@ var init_Errors2 = __esm({
|
|
|
19277
19219
|
super(expires ? `Payment expired at ${expires}.` : "Payment has expired.");
|
|
19278
19220
|
}
|
|
19279
19221
|
};
|
|
19280
|
-
|
|
19222
|
+
PaymentRequiredError = class extends PaymentError {
|
|
19281
19223
|
name = "PaymentRequiredError";
|
|
19282
19224
|
title = "Payment Required";
|
|
19283
19225
|
type = "https://paymentauth.org/problems/payment-required";
|
|
@@ -19702,6 +19644,85 @@ var init_dist2 = __esm({
|
|
|
19702
19644
|
}
|
|
19703
19645
|
});
|
|
19704
19646
|
|
|
19647
|
+
// src/payment/usdc.ts
|
|
19648
|
+
var USDC;
|
|
19649
|
+
var init_usdc = __esm({
|
|
19650
|
+
"src/payment/usdc.ts"() {
|
|
19651
|
+
"use strict";
|
|
19652
|
+
USDC = {
|
|
19653
|
+
base: {
|
|
19654
|
+
mainnet: { address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", decimals: 6 },
|
|
19655
|
+
sepolia: { address: "0x036CbD53842c5426634e7929541eC2318f3dCF7e", decimals: 6 }
|
|
19656
|
+
},
|
|
19657
|
+
solana: {
|
|
19658
|
+
mainnet: { mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", decimals: 6 },
|
|
19659
|
+
devnet: { mint: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU", decimals: 6 }
|
|
19660
|
+
},
|
|
19661
|
+
tempo: {
|
|
19662
|
+
mainnet: { address: "0x20C000000000000000000000b9537d11c60E8b50", decimals: 6 },
|
|
19663
|
+
testnet: { address: "0x20c0000000000000000000000000000000000000", decimals: 6 }
|
|
19664
|
+
}
|
|
19665
|
+
};
|
|
19666
|
+
}
|
|
19667
|
+
});
|
|
19668
|
+
|
|
19669
|
+
// src/payment/wwwauthenticate.ts
|
|
19670
|
+
function paymentRequiredHeader({
|
|
19671
|
+
x402Version,
|
|
19672
|
+
accepts,
|
|
19673
|
+
resource
|
|
19674
|
+
}) {
|
|
19675
|
+
return Buffer.from(JSON.stringify({ x402Version, accepts, ...resource ? { resource } : {} })).toString("base64");
|
|
19676
|
+
}
|
|
19677
|
+
var init_wwwauthenticate = __esm({
|
|
19678
|
+
"src/payment/wwwauthenticate.ts"() {
|
|
19679
|
+
"use strict";
|
|
19680
|
+
}
|
|
19681
|
+
});
|
|
19682
|
+
|
|
19683
|
+
// src/payment/networks.ts
|
|
19684
|
+
var networks;
|
|
19685
|
+
var init_networks = __esm({
|
|
19686
|
+
"src/payment/networks.ts"() {
|
|
19687
|
+
"use strict";
|
|
19688
|
+
networks = {
|
|
19689
|
+
base: {
|
|
19690
|
+
mainnet: { caip2: "eip155:8453", chainId: 8453 },
|
|
19691
|
+
sepolia: { caip2: "eip155:84532", chainId: 84532 }
|
|
19692
|
+
},
|
|
19693
|
+
solana: {
|
|
19694
|
+
mainnet: { caip2: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp" },
|
|
19695
|
+
devnet: { caip2: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1" }
|
|
19696
|
+
},
|
|
19697
|
+
tempo: {
|
|
19698
|
+
mainnet: { caip2: "eip155:4217", chainId: 4217 },
|
|
19699
|
+
testnet: { caip2: "eip155:42431", chainId: 42431 }
|
|
19700
|
+
}
|
|
19701
|
+
};
|
|
19702
|
+
}
|
|
19703
|
+
});
|
|
19704
|
+
|
|
19705
|
+
// src/payment/network_kind.ts
|
|
19706
|
+
function readNetwork(input) {
|
|
19707
|
+
if (typeof input === "string") return input;
|
|
19708
|
+
if (input && typeof input === "object") {
|
|
19709
|
+
const network = input.network;
|
|
19710
|
+
return typeof network === "string" ? network : "";
|
|
19711
|
+
}
|
|
19712
|
+
return "";
|
|
19713
|
+
}
|
|
19714
|
+
function isEvmNetwork(input) {
|
|
19715
|
+
return readNetwork(input).startsWith("eip155:");
|
|
19716
|
+
}
|
|
19717
|
+
function isSolanaNetwork(input) {
|
|
19718
|
+
return readNetwork(input).startsWith("solana:");
|
|
19719
|
+
}
|
|
19720
|
+
var init_network_kind = __esm({
|
|
19721
|
+
"src/payment/network_kind.ts"() {
|
|
19722
|
+
"use strict";
|
|
19723
|
+
}
|
|
19724
|
+
});
|
|
19725
|
+
|
|
19705
19726
|
// src/payment/rails.ts
|
|
19706
19727
|
function lookupRail(name) {
|
|
19707
19728
|
return rails[name];
|
|
@@ -20084,7 +20105,7 @@ function isTempoSessionRailSpec2(s) {
|
|
|
20084
20105
|
}
|
|
20085
20106
|
function mppRailToNetworkEntry(spec) {
|
|
20086
20107
|
if (isTempoSessionRailSpec2(spec)) return tempoSessionToNetworkEntry(spec);
|
|
20087
|
-
if ("rpcUrl" in spec || "tokenProgram" in spec || (spec
|
|
20108
|
+
if ("rpcUrl" in spec || "tokenProgram" in spec || isSolanaNetwork(spec)) {
|
|
20088
20109
|
return solanaMppToNetworkEntry(spec);
|
|
20089
20110
|
}
|
|
20090
20111
|
if (isTempoRailSpec(spec)) return tempoToNetworkEntry(spec);
|
|
@@ -20141,6 +20162,7 @@ var UCPSigningKey, DEFAULT_VERSION, AGENTSCORE_CAPABILITY_NAME, AGENTSCORE_CAPAB
|
|
|
20141
20162
|
var init_ucp = __esm({
|
|
20142
20163
|
"src/identity/ucp.ts"() {
|
|
20143
20164
|
"use strict";
|
|
20165
|
+
init_network_kind();
|
|
20144
20166
|
UCPSigningKey = {
|
|
20145
20167
|
fromJWK: ucpSigningKeyFromJWKImpl
|
|
20146
20168
|
};
|
|
@@ -20653,6 +20675,34 @@ module.exports = __toCommonJS(policy_exports);
|
|
|
20653
20675
|
// src/checkout.ts
|
|
20654
20676
|
var import_node_crypto = require("crypto");
|
|
20655
20677
|
|
|
20678
|
+
// src/_headers.ts
|
|
20679
|
+
function normalizeHeadersToLowercase(headers) {
|
|
20680
|
+
const out = {};
|
|
20681
|
+
for (const [k, v] of Object.entries(headers)) out[k.toLowerCase()] = v;
|
|
20682
|
+
return out;
|
|
20683
|
+
}
|
|
20684
|
+
|
|
20685
|
+
// src/_mppx_receipt.ts
|
|
20686
|
+
function extractMppxReceiptHeaderFromRaw(raw) {
|
|
20687
|
+
if (!raw || typeof raw !== "object" || !("withReceipt" in raw)) return null;
|
|
20688
|
+
const fn = raw.withReceipt;
|
|
20689
|
+
if (typeof fn !== "function") return null;
|
|
20690
|
+
try {
|
|
20691
|
+
const wrapped = fn.call(raw, new Response());
|
|
20692
|
+
return wrapped.headers.get("Payment-Receipt");
|
|
20693
|
+
} catch {
|
|
20694
|
+
return null;
|
|
20695
|
+
}
|
|
20696
|
+
}
|
|
20697
|
+
async function extractMppxReceiptMethod(header) {
|
|
20698
|
+
try {
|
|
20699
|
+
const { Receipt } = await Promise.resolve().then(() => (init_dist2(), dist_exports));
|
|
20700
|
+
return Receipt.deserialize(header).method;
|
|
20701
|
+
} catch {
|
|
20702
|
+
return void 0;
|
|
20703
|
+
}
|
|
20704
|
+
}
|
|
20705
|
+
|
|
20656
20706
|
// src/_response.ts
|
|
20657
20707
|
var WALLET_NOT_TRUSTED_INSTRUCTIONS = JSON.stringify({
|
|
20658
20708
|
action: "contact_support",
|
|
@@ -21062,7 +21112,7 @@ function createAgentScoreCore(options) {
|
|
|
21062
21112
|
} = options;
|
|
21063
21113
|
const baseUrl = stripTrailingSlashes(rawBaseUrl);
|
|
21064
21114
|
const agentMemoryHint = buildAgentMemoryHint();
|
|
21065
|
-
const defaultUa = `@agent-score/commerce@${"2.0
|
|
21115
|
+
const defaultUa = `@agent-score/commerce@${"2.1.0"}`;
|
|
21066
21116
|
const userAgentHeader = userAgent ? `${userAgent} (${defaultUa})` : defaultUa;
|
|
21067
21117
|
const sdk = new import_sdk.AgentScore({ apiKey, baseUrl, userAgent: userAgentHeader });
|
|
21068
21118
|
const sessionSdkCache = /* @__PURE__ */ new Map();
|
|
@@ -21428,10 +21478,13 @@ function buildHowToPay({
|
|
|
21428
21478
|
totalUsd,
|
|
21429
21479
|
rails: rails2,
|
|
21430
21480
|
opTokenPlaceholder,
|
|
21431
|
-
maxSpend
|
|
21481
|
+
maxSpend,
|
|
21482
|
+
decimals
|
|
21432
21483
|
}) {
|
|
21433
21484
|
const totalNum = typeof totalUsd === "string" ? Number(totalUsd) : totalUsd;
|
|
21434
|
-
const
|
|
21485
|
+
const d = decimals ?? 2;
|
|
21486
|
+
const defaultMaxSpend = totalNum >= 1 ? (Math.ceil(totalNum) + 1).toFixed(d) : totalNum.toFixed(d);
|
|
21487
|
+
const maxSpendStr = String(maxSpend ?? defaultMaxSpend);
|
|
21435
21488
|
const opToken = opTokenPlaceholder ?? "<your_opc_token>";
|
|
21436
21489
|
const block = {};
|
|
21437
21490
|
if (rails2.tempo) {
|
|
@@ -21524,26 +21577,26 @@ function buildPricingBlock({
|
|
|
21524
21577
|
totalCents,
|
|
21525
21578
|
taxRate,
|
|
21526
21579
|
taxState,
|
|
21527
|
-
currency
|
|
21580
|
+
currency,
|
|
21581
|
+
decimals
|
|
21528
21582
|
}) {
|
|
21529
21583
|
const shipping = shippingCents ?? 0;
|
|
21530
21584
|
const discount = discountCents ?? 0;
|
|
21531
21585
|
const total = totalCents ?? Math.max(0, subtotalCents + taxCents + shipping - discount);
|
|
21586
|
+
const d = decimals ?? 2;
|
|
21587
|
+
const fmt = (cents) => (cents / 100).toFixed(d);
|
|
21532
21588
|
const block = {
|
|
21533
|
-
subtotal:
|
|
21534
|
-
tax:
|
|
21535
|
-
total:
|
|
21589
|
+
subtotal: fmt(subtotalCents),
|
|
21590
|
+
tax: fmt(taxCents),
|
|
21591
|
+
total: fmt(total)
|
|
21536
21592
|
};
|
|
21537
|
-
if (shippingCents !== void 0) block.shipping =
|
|
21538
|
-
if (discountCents !== void 0) block.discount =
|
|
21593
|
+
if (shippingCents !== void 0) block.shipping = fmt(shipping);
|
|
21594
|
+
if (discountCents !== void 0) block.discount = fmt(discount);
|
|
21539
21595
|
if (taxRate !== void 0) block.tax_rate = taxRate;
|
|
21540
21596
|
if (taxState !== void 0) block.tax_state = taxState;
|
|
21541
21597
|
if (currency !== void 0) block.currency = currency;
|
|
21542
21598
|
return block;
|
|
21543
21599
|
}
|
|
21544
|
-
function formatCents(cents) {
|
|
21545
|
-
return (cents / 100).toFixed(2);
|
|
21546
|
-
}
|
|
21547
21600
|
|
|
21548
21601
|
// src/challenge/respond_402.ts
|
|
21549
21602
|
init_wwwauthenticate();
|
|
@@ -21552,10 +21605,7 @@ function respond402({
|
|
|
21552
21605
|
body,
|
|
21553
21606
|
x402
|
|
21554
21607
|
}) {
|
|
21555
|
-
const headers =
|
|
21556
|
-
for (const [k, v] of Object.entries(mppxChallengeHeaders)) {
|
|
21557
|
-
headers[k.toLowerCase()] = v;
|
|
21558
|
-
}
|
|
21608
|
+
const headers = normalizeHeadersToLowercase(mppxChallengeHeaders);
|
|
21559
21609
|
headers["content-type"] = "application/json";
|
|
21560
21610
|
if (x402) {
|
|
21561
21611
|
headers["payment-required"] = paymentRequiredHeader(x402);
|
|
@@ -21618,7 +21668,8 @@ function isSolanaMppRailSpec(s) {
|
|
|
21618
21668
|
return s.network?.startsWith("solana:") ?? false;
|
|
21619
21669
|
}
|
|
21620
21670
|
function solanaNetworkFromCAIP2(caip2) {
|
|
21621
|
-
if (caip2 === networks.solana.devnet.caip2) return "devnet";
|
|
21671
|
+
if (caip2 === "devnet" || caip2 === networks.solana.devnet.caip2) return "devnet";
|
|
21672
|
+
if (caip2 === "localnet") return "localnet";
|
|
21622
21673
|
return "mainnet-beta";
|
|
21623
21674
|
}
|
|
21624
21675
|
function solanaDefaultRpcUrl(network) {
|
|
@@ -21902,6 +21953,35 @@ function lazyMppxServer(opts) {
|
|
|
21902
21953
|
};
|
|
21903
21954
|
}
|
|
21904
21955
|
|
|
21956
|
+
// src/checkout.ts
|
|
21957
|
+
init_network_kind();
|
|
21958
|
+
|
|
21959
|
+
// src/payment/payment_header.ts
|
|
21960
|
+
function toTitleCase(name) {
|
|
21961
|
+
return name.replace(/(^|-)([a-z])/g, (_m, sep, c) => sep + c.toUpperCase());
|
|
21962
|
+
}
|
|
21963
|
+
function readHeader(headers, name) {
|
|
21964
|
+
if (typeof headers.get === "function") {
|
|
21965
|
+
return headers.get(name);
|
|
21966
|
+
}
|
|
21967
|
+
const rec = headers;
|
|
21968
|
+
const v = rec[name] ?? rec[name.toLowerCase()] ?? rec[toTitleCase(name)];
|
|
21969
|
+
if (typeof v === "string") return v;
|
|
21970
|
+
if (Array.isArray(v) && typeof v[0] === "string") return v[0];
|
|
21971
|
+
return null;
|
|
21972
|
+
}
|
|
21973
|
+
function asHeaders(input) {
|
|
21974
|
+
return typeof input.headers === "object" && input instanceof Request ? input.headers : input;
|
|
21975
|
+
}
|
|
21976
|
+
function hasX402Header(input) {
|
|
21977
|
+
const headers = asHeaders(input);
|
|
21978
|
+
return Boolean(readHeader(headers, "payment-signature") || readHeader(headers, "x-payment"));
|
|
21979
|
+
}
|
|
21980
|
+
function hasMppxHeader(input) {
|
|
21981
|
+
const headers = asHeaders(input);
|
|
21982
|
+
return Boolean(readHeader(headers, "authorization")?.startsWith("Payment "));
|
|
21983
|
+
}
|
|
21984
|
+
|
|
21905
21985
|
// src/payment/x402_settle.ts
|
|
21906
21986
|
function classifyX402SettleResult(result) {
|
|
21907
21987
|
if (result.success) return null;
|
|
@@ -22272,21 +22352,8 @@ var CheckoutValidationError = class extends Error {
|
|
|
22272
22352
|
this.extra = opts.extra;
|
|
22273
22353
|
}
|
|
22274
22354
|
};
|
|
22275
|
-
function lowerHeaders(headers) {
|
|
22276
|
-
const out = {};
|
|
22277
|
-
for (const [k, v] of Object.entries(headers)) out[k.toLowerCase()] = v;
|
|
22278
|
-
return out;
|
|
22279
|
-
}
|
|
22280
|
-
function hasX402Header(headers) {
|
|
22281
|
-
const h = lowerHeaders(headers);
|
|
22282
|
-
return Boolean(h["payment-signature"] ?? h["x-payment"]);
|
|
22283
|
-
}
|
|
22284
|
-
function hasMppxHeader(headers) {
|
|
22285
|
-
const h = lowerHeaders(headers);
|
|
22286
|
-
return (h["authorization"] ?? "").startsWith("Payment ");
|
|
22287
|
-
}
|
|
22288
22355
|
function resolveIdentityMetadata(ctx) {
|
|
22289
|
-
const h =
|
|
22356
|
+
const h = normalizeHeadersToLowercase(ctx.request.headers);
|
|
22290
22357
|
const wallet = h["x-wallet-address"];
|
|
22291
22358
|
if (!wallet) return void 0;
|
|
22292
22359
|
let linkedWallets;
|
|
@@ -22315,26 +22382,24 @@ function isTempoSessionRailSpec3(s) {
|
|
|
22315
22382
|
function specRailKey(spec) {
|
|
22316
22383
|
if (isStripeRailSpec2(spec)) return "stripe";
|
|
22317
22384
|
if (isTempoSessionRailSpec3(spec)) return "tempo_mpp";
|
|
22318
|
-
|
|
22319
|
-
if (
|
|
22320
|
-
if (network.startsWith("solana:") || "rpcUrl" in spec) return "solana_mpp";
|
|
22385
|
+
if (isEvmNetwork(spec)) return "x402_base";
|
|
22386
|
+
if (isSolanaNetwork(spec) || "rpcUrl" in spec) return "solana_mpp";
|
|
22321
22387
|
return "tempo_mpp";
|
|
22322
22388
|
}
|
|
22323
22389
|
function specMethodName(spec) {
|
|
22324
22390
|
if (isStripeRailSpec2(spec)) return "stripe/spt";
|
|
22325
22391
|
if (isTempoSessionRailSpec3(spec)) return "tempo/charge";
|
|
22326
|
-
|
|
22327
|
-
if (
|
|
22328
|
-
if (network.startsWith("solana:") || "rpcUrl" in spec) return "solana/charge";
|
|
22392
|
+
if (isEvmNetwork(spec)) return "x402/exact (base)";
|
|
22393
|
+
if (isSolanaNetwork(spec) || "rpcUrl" in spec) return "solana/charge";
|
|
22329
22394
|
return "tempo/charge";
|
|
22330
22395
|
}
|
|
22331
22396
|
function makeMppxComposeHook(opts) {
|
|
22332
22397
|
return async (ctx) => {
|
|
22333
22398
|
if (ctx.pricing === null) return { status: 402 };
|
|
22334
22399
|
const mpp = await opts.serverGetter();
|
|
22335
|
-
const lower =
|
|
22400
|
+
const lower = normalizeHeadersToLowercase(ctx.request.headers);
|
|
22336
22401
|
const authorization = lower["authorization"];
|
|
22337
|
-
const amountStr = ctx.pricing.amountUsd.toFixed(2);
|
|
22402
|
+
const amountStr = ctx.pricing.amountUsd.toFixed(ctx.pricing.decimals ?? 2);
|
|
22338
22403
|
let result;
|
|
22339
22404
|
try {
|
|
22340
22405
|
result = await mpp.charge({ authorization, amount: amountStr });
|
|
@@ -22418,7 +22483,7 @@ var Checkout = class {
|
|
|
22418
22483
|
let x402ServerGetter;
|
|
22419
22484
|
if (x402Server === void 0) {
|
|
22420
22485
|
const baseSpec = Object.values(opts.rails).find(
|
|
22421
|
-
(s) => !isTempoSessionRailSpec3(s) && !isStripeRailSpec2(s) && "recipient" in s && (s
|
|
22486
|
+
(s) => !isTempoSessionRailSpec3(s) && !isStripeRailSpec2(s) && "recipient" in s && isEvmNetwork(s)
|
|
22422
22487
|
);
|
|
22423
22488
|
if (baseSpec !== void 0) {
|
|
22424
22489
|
x402ServerGetter = lazyX402Server({
|
|
@@ -22508,7 +22573,7 @@ var Checkout = class {
|
|
|
22508
22573
|
* `"x402_base"` when no match found. */
|
|
22509
22574
|
x402RailKey() {
|
|
22510
22575
|
for (const [k, v] of Object.entries(this.rails)) {
|
|
22511
|
-
if (!isStripeRailSpec2(v) && !isTempoSessionRailSpec3(v) && (v
|
|
22576
|
+
if (!isStripeRailSpec2(v) && !isTempoSessionRailSpec3(v) && isEvmNetwork(v)) {
|
|
22512
22577
|
return k;
|
|
22513
22578
|
}
|
|
22514
22579
|
}
|
|
@@ -22517,8 +22582,7 @@ var Checkout = class {
|
|
|
22517
22582
|
/** Return the rails-dict key for the primary MPP rail. */
|
|
22518
22583
|
mppRailKey() {
|
|
22519
22584
|
for (const [k, v] of Object.entries(this.rails)) {
|
|
22520
|
-
|
|
22521
|
-
if (!isStripeRailSpec2(v) && !network.startsWith("eip155:")) return k;
|
|
22585
|
+
if (!isStripeRailSpec2(v) && !isEvmNetwork(v)) return k;
|
|
22522
22586
|
}
|
|
22523
22587
|
return "tempo";
|
|
22524
22588
|
}
|
|
@@ -22537,17 +22601,15 @@ var Checkout = class {
|
|
|
22537
22601
|
if (method === "solana") {
|
|
22538
22602
|
for (const [k, v] of Object.entries(this.rails)) {
|
|
22539
22603
|
if (isStripeRailSpec2(v) || isTempoSessionRailSpec3(v)) continue;
|
|
22540
|
-
|
|
22541
|
-
if (network.startsWith("solana:") || "rpcUrl" in v || "tokenProgram" in v) return k;
|
|
22604
|
+
if (isSolanaNetwork(v) || "rpcUrl" in v || "tokenProgram" in v) return k;
|
|
22542
22605
|
}
|
|
22543
22606
|
return void 0;
|
|
22544
22607
|
}
|
|
22545
22608
|
if (method === "tempo") {
|
|
22546
22609
|
for (const [k, v] of Object.entries(this.rails)) {
|
|
22547
22610
|
if (isStripeRailSpec2(v)) continue;
|
|
22548
|
-
|
|
22549
|
-
if (
|
|
22550
|
-
if (network.startsWith("eip155:")) continue;
|
|
22611
|
+
if (isSolanaNetwork(v) || "rpcUrl" in v || "tokenProgram" in v) continue;
|
|
22612
|
+
if (isEvmNetwork(v)) continue;
|
|
22551
22613
|
return k;
|
|
22552
22614
|
}
|
|
22553
22615
|
return void 0;
|
|
@@ -22560,7 +22622,7 @@ var Checkout = class {
|
|
|
22560
22622
|
get x402BaseNetwork() {
|
|
22561
22623
|
if (!this.x402ServerAvailable()) return null;
|
|
22562
22624
|
for (const spec of Object.values(this.rails)) {
|
|
22563
|
-
if (!isStripeRailSpec2(spec) && !isTempoSessionRailSpec3(spec) && (spec
|
|
22625
|
+
if (!isStripeRailSpec2(spec) && !isTempoSessionRailSpec3(spec) && isEvmNetwork(spec)) {
|
|
22564
22626
|
return spec.network ?? "eip155:8453";
|
|
22565
22627
|
}
|
|
22566
22628
|
}
|
|
@@ -22703,7 +22765,7 @@ var Checkout = class {
|
|
|
22703
22765
|
...policyOverride ?? {}
|
|
22704
22766
|
};
|
|
22705
22767
|
const core = createAgentScoreCore(coreOpts);
|
|
22706
|
-
const headers =
|
|
22768
|
+
const headers = normalizeHeadersToLowercase(ctx.request.headers);
|
|
22707
22769
|
const walletAddress = headers["x-wallet-address"];
|
|
22708
22770
|
const operatorToken = headers["x-operator-token"];
|
|
22709
22771
|
const identity = walletAddress !== void 0 || operatorToken !== void 0 ? {
|
|
@@ -22765,7 +22827,7 @@ var Checkout = class {
|
|
|
22765
22827
|
if (!this.zeroSettleCarveOut || ctx.pricing === null) return null;
|
|
22766
22828
|
const cents = Math.round(ctx.pricing.amountUsd * 100);
|
|
22767
22829
|
if (cents !== 0) return null;
|
|
22768
|
-
const headers =
|
|
22830
|
+
const headers = normalizeHeadersToLowercase(ctx.request.headers);
|
|
22769
22831
|
let zero;
|
|
22770
22832
|
if (rail === "x402-base") {
|
|
22771
22833
|
const x402Header = headers["payment-signature"] ?? headers["x-payment"];
|
|
@@ -22839,7 +22901,7 @@ var Checkout = class {
|
|
|
22839
22901
|
resourceConfig: {
|
|
22840
22902
|
scheme: "exact",
|
|
22841
22903
|
network: verified.signedNetwork,
|
|
22842
|
-
price: `$${ctx.pricing.amountUsd.toFixed(2)}`,
|
|
22904
|
+
price: `$${ctx.pricing.amountUsd.toFixed(ctx.pricing.decimals ?? 2)}`,
|
|
22843
22905
|
payTo: verified.signedPayTo,
|
|
22844
22906
|
maxTimeoutSeconds: 300
|
|
22845
22907
|
},
|
|
@@ -22948,15 +23010,18 @@ var Checkout = class {
|
|
|
22948
23010
|
howToPayRails[k] = v;
|
|
22949
23011
|
}
|
|
22950
23012
|
}
|
|
23013
|
+
const pricingDecimals = ctx.pricing.decimals ?? 2;
|
|
22951
23014
|
const howToPay = buildHowToPay({
|
|
22952
23015
|
url: this.url,
|
|
22953
23016
|
retryBodyJson: JSON.stringify(ctx.request.body),
|
|
22954
|
-
totalUsd: ctx.pricing.amountUsd.toFixed(
|
|
22955
|
-
rails: howToPayRails
|
|
23017
|
+
totalUsd: ctx.pricing.amountUsd.toFixed(pricingDecimals),
|
|
23018
|
+
rails: howToPayRails,
|
|
23019
|
+
...ctx.pricing.decimals !== void 0 && { decimals: ctx.pricing.decimals }
|
|
22956
23020
|
});
|
|
22957
23021
|
const pricingBlock = ctx.pricing.block ?? buildPricingBlock({
|
|
22958
|
-
subtotalCents:
|
|
22959
|
-
currency: ctx.pricing.currency ?? "USD"
|
|
23022
|
+
subtotalCents: ctx.pricing.amountUsd * 100,
|
|
23023
|
+
currency: ctx.pricing.currency ?? "USD",
|
|
23024
|
+
...ctx.pricing.decimals !== void 0 && { decimals: ctx.pricing.decimals }
|
|
22960
23025
|
});
|
|
22961
23026
|
let x402Accepts = [];
|
|
22962
23027
|
let x402Resource;
|
|
@@ -22969,7 +23034,7 @@ var Checkout = class {
|
|
|
22969
23034
|
try {
|
|
22970
23035
|
x402Accepts = await buildX402AcceptsFor402(x402Server, {
|
|
22971
23036
|
network: baseNetwork,
|
|
22972
|
-
price: `$${ctx.pricing.amountUsd.toFixed(
|
|
23037
|
+
price: `$${ctx.pricing.amountUsd.toFixed(pricingDecimals)}`,
|
|
22973
23038
|
payTo: recipient,
|
|
22974
23039
|
maxTimeoutSeconds: 300
|
|
22975
23040
|
});
|
|
@@ -22985,7 +23050,7 @@ var Checkout = class {
|
|
|
22985
23050
|
agentInstructions: buildAgentInstructions({ howToPay }),
|
|
22986
23051
|
...identityMetadata !== void 0 ? { identityMetadata } : {},
|
|
22987
23052
|
pricing: pricingBlock,
|
|
22988
|
-
amountUsd: ctx.pricing.amountUsd.toFixed(
|
|
23053
|
+
amountUsd: ctx.pricing.amountUsd.toFixed(pricingDecimals),
|
|
22989
23054
|
retryBody: ctx.request.body,
|
|
22990
23055
|
agentMemory: firstEncounterAgentMemory({ firstEncounter: true }),
|
|
22991
23056
|
...ctx.pricing.product ? { product: ctx.pricing.product } : {},
|
|
@@ -23067,25 +23132,6 @@ function stripContentType(headers) {
|
|
|
23067
23132
|
}
|
|
23068
23133
|
return out;
|
|
23069
23134
|
}
|
|
23070
|
-
function extractMppxReceiptHeaderFromRaw(raw) {
|
|
23071
|
-
if (!raw || typeof raw !== "object" || !("withReceipt" in raw)) return null;
|
|
23072
|
-
const fn = raw.withReceipt;
|
|
23073
|
-
if (typeof fn !== "function") return null;
|
|
23074
|
-
try {
|
|
23075
|
-
const wrapped = fn.call(raw, new Response());
|
|
23076
|
-
return wrapped.headers.get("Payment-Receipt");
|
|
23077
|
-
} catch {
|
|
23078
|
-
return null;
|
|
23079
|
-
}
|
|
23080
|
-
}
|
|
23081
|
-
async function extractMppxReceiptMethod(header) {
|
|
23082
|
-
try {
|
|
23083
|
-
const { Receipt } = await Promise.resolve().then(() => (init_dist2(), dist_exports));
|
|
23084
|
-
return Receipt.deserialize(header).method;
|
|
23085
|
-
} catch {
|
|
23086
|
-
return void 0;
|
|
23087
|
-
}
|
|
23088
|
-
}
|
|
23089
23135
|
function headersToRecord(h) {
|
|
23090
23136
|
if (h === void 0) return {};
|
|
23091
23137
|
if (h instanceof Headers) {
|