@wtflabs/x402 0.0.1-beta.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 +60 -0
- package/dist/cjs/client/index.d.ts +64 -0
- package/dist/cjs/client/index.js +832 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/config-CFBSAuxW.d.ts +10 -0
- package/dist/cjs/config-Dfuvno71.d.ts +19 -0
- package/dist/cjs/facilitator/index.d.ts +42 -0
- package/dist/cjs/facilitator/index.js +2574 -0
- package/dist/cjs/facilitator/index.js.map +1 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.js +2974 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/middleware-6_1ApcJn.d.ts +93 -0
- package/dist/cjs/middleware-B_ewwsQp.d.ts +93 -0
- package/dist/cjs/middleware-Brgsx32F.d.ts +93 -0
- package/dist/cjs/middleware-BwfW7mAs.d.ts +93 -0
- package/dist/cjs/middleware-CQb61c1k.d.ts +93 -0
- package/dist/cjs/middleware-DB9lqy9f.d.ts +93 -0
- package/dist/cjs/middleware-DcHctwQV.d.ts +93 -0
- package/dist/cjs/middleware-De0jD3Bp.d.ts +93 -0
- package/dist/cjs/middleware-HoFOmpgv.d.ts +93 -0
- package/dist/cjs/middleware-Y8AiAfYw.d.ts +93 -0
- package/dist/cjs/middleware-pnres9YM.d.ts +93 -0
- package/dist/cjs/network-FrFmmiyj.d.ts +11 -0
- package/dist/cjs/network-RtNddYQk.d.ts +11 -0
- package/dist/cjs/paywall/index.d.ts +30 -0
- package/dist/cjs/paywall/index.js +131 -0
- package/dist/cjs/paywall/index.js.map +1 -0
- package/dist/cjs/rpc-BMvnNNHd.d.ts +35 -0
- package/dist/cjs/rpc-Ca8eHCWz.d.ts +35 -0
- package/dist/cjs/schemes/index.d.ts +533 -0
- package/dist/cjs/schemes/index.js +3144 -0
- package/dist/cjs/schemes/index.js.map +1 -0
- package/dist/cjs/shared/evm/index.d.ts +71 -0
- package/dist/cjs/shared/evm/index.js +947 -0
- package/dist/cjs/shared/evm/index.js.map +1 -0
- package/dist/cjs/shared/index.d.ts +182 -0
- package/dist/cjs/shared/index.js +674 -0
- package/dist/cjs/shared/index.js.map +1 -0
- package/dist/cjs/types/index.d.ts +1515 -0
- package/dist/cjs/types/index.js +1645 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/verify/index.d.ts +7 -0
- package/dist/cjs/verify/index.js +438 -0
- package/dist/cjs/verify/index.js.map +1 -0
- package/dist/cjs/wallet-BRWfOM5D.d.ts +153 -0
- package/dist/cjs/wallet-BTqCm9Zp.d.ts +27 -0
- package/dist/cjs/wallet-BYRAGtOB.d.ts +153 -0
- package/dist/cjs/wallet-BmEtlgEf.d.ts +48 -0
- package/dist/cjs/wallet-CNOAmyZ6.d.ts +48 -0
- package/dist/cjs/wallet-CQ0Fe_M5.d.ts +88 -0
- package/dist/cjs/wallet-D1SoxFTw.d.ts +48 -0
- package/dist/cjs/wallet-SJ-hbjm9.d.ts +153 -0
- package/dist/cjs/wallet-SJKJpUgQ.d.ts +167 -0
- package/dist/cjs/wallet-ecnda4Aj.d.ts +48 -0
- package/dist/cjs/wallet-gP8Qoi-c.d.ts +74 -0
- package/dist/cjs/x402Specs-B7InXo2L.d.ts +1065 -0
- package/dist/cjs/x402Specs-BLH3j34O.d.ts +1696 -0
- package/dist/cjs/x402Specs-C7LipAZg.d.ts +1715 -0
- package/dist/cjs/x402Specs-CYq5tSY1.d.ts +1745 -0
- package/dist/cjs/x402Specs-CeajqonG.d.ts +1696 -0
- package/dist/cjs/x402Specs-qMujgEV5.d.ts +1715 -0
- package/dist/cjs/x402Specs-qUBCpcuz.d.ts +1715 -0
- package/dist/esm/chunk-34YNR4LY.mjs +106 -0
- package/dist/esm/chunk-34YNR4LY.mjs.map +1 -0
- package/dist/esm/chunk-57UEJN5U.mjs +1416 -0
- package/dist/esm/chunk-57UEJN5U.mjs.map +1 -0
- package/dist/esm/chunk-5LTKIVOA.mjs +858 -0
- package/dist/esm/chunk-5LTKIVOA.mjs.map +1 -0
- package/dist/esm/chunk-AQQR4PXH.mjs +80 -0
- package/dist/esm/chunk-AQQR4PXH.mjs.map +1 -0
- package/dist/esm/chunk-LGXWNXCO.mjs +76 -0
- package/dist/esm/chunk-LGXWNXCO.mjs.map +1 -0
- package/dist/esm/chunk-RX2JKK4O.mjs +349 -0
- package/dist/esm/chunk-RX2JKK4O.mjs.map +1 -0
- package/dist/esm/chunk-UCBE7FDY.mjs +1041 -0
- package/dist/esm/chunk-UCBE7FDY.mjs.map +1 -0
- package/dist/esm/client/index.mjs +17 -0
- package/dist/esm/client/index.mjs.map +1 -0
- package/dist/esm/facilitator/index.mjs +14 -0
- package/dist/esm/facilitator/index.mjs.map +1 -0
- package/dist/esm/index.mjs +28 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/paywall/index.mjs +46 -0
- package/dist/esm/paywall/index.mjs.map +1 -0
- package/dist/esm/schemes/index.mjs +16 -0
- package/dist/esm/schemes/index.mjs.map +1 -0
- package/dist/esm/shared/evm/index.mjs +20 -0
- package/dist/esm/shared/evm/index.mjs.map +1 -0
- package/dist/esm/shared/index.mjs +31 -0
- package/dist/esm/shared/index.mjs.map +1 -0
- package/dist/esm/types/index.mjs +87 -0
- package/dist/esm/types/index.mjs.map +1 -0
- package/dist/esm/verify/index.mjs +105 -0
- package/dist/esm/verify/index.mjs.map +1 -0
- package/package.json +148 -0
|
@@ -0,0 +1,1041 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getUsdcChainConfigForChain,
|
|
3
|
+
usdcABI
|
|
4
|
+
} from "./chunk-5LTKIVOA.mjs";
|
|
5
|
+
import {
|
|
6
|
+
__export,
|
|
7
|
+
config
|
|
8
|
+
} from "./chunk-AQQR4PXH.mjs";
|
|
9
|
+
|
|
10
|
+
// src/types/shared/money.ts
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
var moneySchema = z.union([z.string().transform((x) => x.replace(/[^0-9.-]+/g, "")), z.number()]).pipe(z.coerce.number().min(1e-4).max(999999999));
|
|
13
|
+
|
|
14
|
+
// src/types/shared/network.ts
|
|
15
|
+
import { z as z2 } from "zod";
|
|
16
|
+
var NetworkSchema = z2.enum([
|
|
17
|
+
"base-sepolia",
|
|
18
|
+
"base",
|
|
19
|
+
"avalanche-fuji",
|
|
20
|
+
"avalanche",
|
|
21
|
+
"iotex",
|
|
22
|
+
"solana-devnet",
|
|
23
|
+
"solana",
|
|
24
|
+
"sei",
|
|
25
|
+
"sei-testnet",
|
|
26
|
+
"polygon",
|
|
27
|
+
"polygon-amoy",
|
|
28
|
+
"peaq",
|
|
29
|
+
"bsc",
|
|
30
|
+
"bsc-testnet"
|
|
31
|
+
]);
|
|
32
|
+
var SupportedEVMNetworks = [
|
|
33
|
+
"base-sepolia",
|
|
34
|
+
"base",
|
|
35
|
+
"avalanche-fuji",
|
|
36
|
+
"avalanche",
|
|
37
|
+
"iotex",
|
|
38
|
+
"sei",
|
|
39
|
+
"sei-testnet",
|
|
40
|
+
"polygon",
|
|
41
|
+
"polygon-amoy",
|
|
42
|
+
"peaq",
|
|
43
|
+
"bsc",
|
|
44
|
+
"bsc-testnet"
|
|
45
|
+
];
|
|
46
|
+
var EvmNetworkToChainId = /* @__PURE__ */ new Map([
|
|
47
|
+
["base-sepolia", 84532],
|
|
48
|
+
["base", 8453],
|
|
49
|
+
["avalanche-fuji", 43113],
|
|
50
|
+
["avalanche", 43114],
|
|
51
|
+
["iotex", 4689],
|
|
52
|
+
["sei", 1329],
|
|
53
|
+
["sei-testnet", 1328],
|
|
54
|
+
["polygon", 137],
|
|
55
|
+
["polygon-amoy", 80002],
|
|
56
|
+
["peaq", 3338],
|
|
57
|
+
["bsc", 56],
|
|
58
|
+
["bsc-testnet", 97]
|
|
59
|
+
]);
|
|
60
|
+
var SupportedSVMNetworks = ["solana-devnet", "solana"];
|
|
61
|
+
var SvmNetworkToChainId = /* @__PURE__ */ new Map([
|
|
62
|
+
["solana-devnet", 103],
|
|
63
|
+
["solana", 101]
|
|
64
|
+
]);
|
|
65
|
+
var ChainIdToNetwork = Object.fromEntries(
|
|
66
|
+
[...SupportedEVMNetworks, ...SupportedSVMNetworks].map((network) => [
|
|
67
|
+
EvmNetworkToChainId.get(network),
|
|
68
|
+
network
|
|
69
|
+
])
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// src/types/shared/evm/wallet.ts
|
|
73
|
+
import { createPublicClient, createWalletClient, http, publicActions, defineChain } from "viem";
|
|
74
|
+
import {
|
|
75
|
+
baseSepolia,
|
|
76
|
+
avalancheFuji,
|
|
77
|
+
base,
|
|
78
|
+
sei,
|
|
79
|
+
seiTestnet,
|
|
80
|
+
polygon,
|
|
81
|
+
polygonAmoy,
|
|
82
|
+
peaq,
|
|
83
|
+
avalanche,
|
|
84
|
+
iotexTestnet,
|
|
85
|
+
iotex,
|
|
86
|
+
bsc,
|
|
87
|
+
bscTestnet
|
|
88
|
+
} from "viem/chains";
|
|
89
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
90
|
+
function createConnectedClient(networkOrConfig, customRpcUrl) {
|
|
91
|
+
const chain = typeof networkOrConfig === "string" ? withChain(networkOrConfig, customRpcUrl) : withChain(networkOrConfig);
|
|
92
|
+
return createPublicClient({
|
|
93
|
+
chain,
|
|
94
|
+
transport: http(customRpcUrl || chain.rpcUrls.default.http[0])
|
|
95
|
+
}).extend(publicActions);
|
|
96
|
+
}
|
|
97
|
+
function createClientSepolia() {
|
|
98
|
+
return createConnectedClient("base-sepolia");
|
|
99
|
+
}
|
|
100
|
+
function createClientAvalancheFuji() {
|
|
101
|
+
return createConnectedClient("avalanche-fuji");
|
|
102
|
+
}
|
|
103
|
+
function createSigner(networkOrConfig, privateKey, customRpcUrl) {
|
|
104
|
+
const chain = typeof networkOrConfig === "string" ? withChain(networkOrConfig, customRpcUrl) : withChain(networkOrConfig);
|
|
105
|
+
return createWalletClient({
|
|
106
|
+
chain,
|
|
107
|
+
transport: http(customRpcUrl || chain.rpcUrls.default.http[0]),
|
|
108
|
+
account: privateKeyToAccount(privateKey)
|
|
109
|
+
}).extend(publicActions);
|
|
110
|
+
}
|
|
111
|
+
function createSignerSepolia(privateKey) {
|
|
112
|
+
return createSigner("base-sepolia", privateKey);
|
|
113
|
+
}
|
|
114
|
+
function createSignerAvalancheFuji(privateKey) {
|
|
115
|
+
return createSigner("avalanche-fuji", privateKey);
|
|
116
|
+
}
|
|
117
|
+
function isSignerWallet(wallet) {
|
|
118
|
+
return typeof wallet === "object" && wallet !== null && "chain" in wallet && "transport" in wallet;
|
|
119
|
+
}
|
|
120
|
+
function isAccount(wallet) {
|
|
121
|
+
const w = wallet;
|
|
122
|
+
return typeof wallet === "object" && wallet !== null && typeof w.address === "string" && typeof w.type === "string" && // Check for essential signing capabilities
|
|
123
|
+
typeof w.sign === "function" && typeof w.signMessage === "function" && typeof w.signTypedData === "function" && // Check for transaction signing (required by LocalAccount)
|
|
124
|
+
typeof w.signTransaction === "function";
|
|
125
|
+
}
|
|
126
|
+
function getChainFromNetwork(network) {
|
|
127
|
+
if (!network) {
|
|
128
|
+
throw new Error("NETWORK environment variable is not set");
|
|
129
|
+
}
|
|
130
|
+
switch (network) {
|
|
131
|
+
case "base":
|
|
132
|
+
return base;
|
|
133
|
+
case "base-sepolia":
|
|
134
|
+
return baseSepolia;
|
|
135
|
+
case "avalanche":
|
|
136
|
+
return avalanche;
|
|
137
|
+
case "avalanche-fuji":
|
|
138
|
+
return avalancheFuji;
|
|
139
|
+
case "sei":
|
|
140
|
+
return sei;
|
|
141
|
+
case "sei-testnet":
|
|
142
|
+
return seiTestnet;
|
|
143
|
+
case "polygon":
|
|
144
|
+
return polygon;
|
|
145
|
+
case "polygon-amoy":
|
|
146
|
+
return polygonAmoy;
|
|
147
|
+
case "peaq":
|
|
148
|
+
return peaq;
|
|
149
|
+
case "iotex":
|
|
150
|
+
return iotex;
|
|
151
|
+
case "iotex-testnet":
|
|
152
|
+
return iotexTestnet;
|
|
153
|
+
case "bsc":
|
|
154
|
+
return bsc;
|
|
155
|
+
case "bsc-testnet":
|
|
156
|
+
return bscTestnet;
|
|
157
|
+
default:
|
|
158
|
+
throw new Error(`Unsupported network: ${network}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function withChain(config2, customRpcUrl) {
|
|
162
|
+
if (typeof config2 === "object" && "id" in config2 && "name" in config2) {
|
|
163
|
+
if (!customRpcUrl) {
|
|
164
|
+
return config2;
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
...config2,
|
|
168
|
+
rpcUrls: {
|
|
169
|
+
default: { http: [customRpcUrl] },
|
|
170
|
+
public: { http: [customRpcUrl] }
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
if (typeof config2 === "string") {
|
|
175
|
+
const chain = getChainFromNetwork(config2);
|
|
176
|
+
if (!customRpcUrl) {
|
|
177
|
+
return chain;
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
...chain,
|
|
181
|
+
rpcUrls: {
|
|
182
|
+
default: { http: [customRpcUrl] },
|
|
183
|
+
public: { http: [customRpcUrl] }
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return defineChain({
|
|
188
|
+
id: config2.chainId,
|
|
189
|
+
name: config2.name,
|
|
190
|
+
nativeCurrency: config2.nativeCurrency || {
|
|
191
|
+
name: "Ether",
|
|
192
|
+
symbol: "ETH",
|
|
193
|
+
decimals: 18
|
|
194
|
+
},
|
|
195
|
+
rpcUrls: {
|
|
196
|
+
default: { http: [config2.rpcUrl] },
|
|
197
|
+
public: { http: [config2.rpcUrl] }
|
|
198
|
+
},
|
|
199
|
+
blockExplorers: config2.blockExplorer ? {
|
|
200
|
+
default: {
|
|
201
|
+
name: config2.blockExplorer.name,
|
|
202
|
+
url: config2.blockExplorer.url
|
|
203
|
+
}
|
|
204
|
+
} : void 0
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// src/shared/svm/wallet.ts
|
|
209
|
+
import {
|
|
210
|
+
createKeyPairSignerFromBytes,
|
|
211
|
+
createKeyPairSignerFromPrivateKeyBytes,
|
|
212
|
+
isKeyPairSigner
|
|
213
|
+
} from "@solana/kit";
|
|
214
|
+
import { base58 } from "@scure/base";
|
|
215
|
+
|
|
216
|
+
// src/shared/svm/rpc.ts
|
|
217
|
+
import {
|
|
218
|
+
createSolanaRpc,
|
|
219
|
+
devnet,
|
|
220
|
+
mainnet,
|
|
221
|
+
createSolanaRpcSubscriptions
|
|
222
|
+
} from "@solana/kit";
|
|
223
|
+
var DEVNET_RPC_URL = "https://api.devnet.solana.com";
|
|
224
|
+
var MAINNET_RPC_URL = "https://api.mainnet-beta.solana.com";
|
|
225
|
+
var DEVNET_WS_URL = "wss://api.devnet.solana.com";
|
|
226
|
+
var MAINNET_WS_URL = "wss://api.mainnet-beta.solana.com";
|
|
227
|
+
function createDevnetRpcClient(url) {
|
|
228
|
+
return createSolanaRpc(
|
|
229
|
+
url ? devnet(url) : devnet(DEVNET_RPC_URL)
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
function createMainnetRpcClient(url) {
|
|
233
|
+
return createSolanaRpc(
|
|
234
|
+
url ? mainnet(url) : mainnet(MAINNET_RPC_URL)
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
function getRpcClient(network, url) {
|
|
238
|
+
if (network === "solana-devnet") {
|
|
239
|
+
return createDevnetRpcClient(url);
|
|
240
|
+
} else if (network === "solana") {
|
|
241
|
+
return createMainnetRpcClient(url);
|
|
242
|
+
} else {
|
|
243
|
+
throw new Error("Invalid network");
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function getRpcSubscriptions(network, url) {
|
|
247
|
+
if (network === "solana-devnet") {
|
|
248
|
+
return createSolanaRpcSubscriptions(devnet(url ? httpToWs(url) : DEVNET_WS_URL));
|
|
249
|
+
} else if (network === "solana") {
|
|
250
|
+
return createSolanaRpcSubscriptions(mainnet(url ? httpToWs(url) : MAINNET_WS_URL));
|
|
251
|
+
} else {
|
|
252
|
+
throw new Error("Invalid network");
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function httpToWs(url) {
|
|
256
|
+
if (url.startsWith("http")) {
|
|
257
|
+
return url.replace("http", "ws");
|
|
258
|
+
}
|
|
259
|
+
return url;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// src/shared/svm/wallet.ts
|
|
263
|
+
function createSvmConnectedClient(network) {
|
|
264
|
+
if (!SupportedSVMNetworks.find((n) => n === network)) {
|
|
265
|
+
throw new Error(`Unsupported SVM network: ${network}`);
|
|
266
|
+
}
|
|
267
|
+
return getRpcClient(network);
|
|
268
|
+
}
|
|
269
|
+
async function createSignerFromBase58(privateKey) {
|
|
270
|
+
const bytes = base58.decode(privateKey);
|
|
271
|
+
if (bytes.length === 64) {
|
|
272
|
+
return await createKeyPairSignerFromBytes(bytes);
|
|
273
|
+
}
|
|
274
|
+
if (bytes.length === 32) {
|
|
275
|
+
return await createKeyPairSignerFromPrivateKeyBytes(bytes);
|
|
276
|
+
}
|
|
277
|
+
throw new Error(`Unexpected key length: ${bytes.length}. Expected 32 or 64 bytes.`);
|
|
278
|
+
}
|
|
279
|
+
function isSignerWallet2(wallet) {
|
|
280
|
+
return isKeyPairSigner(wallet);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// src/types/shared/wallet.ts
|
|
284
|
+
function createConnectedClient2(networkOrConfig, customRpcUrl) {
|
|
285
|
+
if (typeof networkOrConfig === "string") {
|
|
286
|
+
if (SupportedEVMNetworks.find((n) => n === networkOrConfig)) {
|
|
287
|
+
return createConnectedClient(networkOrConfig, customRpcUrl);
|
|
288
|
+
}
|
|
289
|
+
if (SupportedSVMNetworks.find((n) => n === networkOrConfig)) {
|
|
290
|
+
return createSvmConnectedClient(networkOrConfig);
|
|
291
|
+
}
|
|
292
|
+
throw new Error(`Unsupported network: ${networkOrConfig}`);
|
|
293
|
+
}
|
|
294
|
+
return createConnectedClient(networkOrConfig, customRpcUrl);
|
|
295
|
+
}
|
|
296
|
+
function createSigner2(networkOrConfig, privateKey, customRpcUrl) {
|
|
297
|
+
if (typeof networkOrConfig === "string") {
|
|
298
|
+
if (SupportedEVMNetworks.find((n) => n === networkOrConfig)) {
|
|
299
|
+
return Promise.resolve(createSigner(networkOrConfig, privateKey, customRpcUrl));
|
|
300
|
+
}
|
|
301
|
+
if (SupportedSVMNetworks.find((n) => n === networkOrConfig)) {
|
|
302
|
+
return createSignerFromBase58(privateKey);
|
|
303
|
+
}
|
|
304
|
+
throw new Error(`Unsupported network: ${networkOrConfig}`);
|
|
305
|
+
}
|
|
306
|
+
return Promise.resolve(createSigner(networkOrConfig, privateKey, customRpcUrl));
|
|
307
|
+
}
|
|
308
|
+
function isEvmSignerWallet(wallet) {
|
|
309
|
+
return isSignerWallet(wallet) || isAccount(wallet);
|
|
310
|
+
}
|
|
311
|
+
function isSvmSignerWallet(wallet) {
|
|
312
|
+
return isSignerWallet2(wallet);
|
|
313
|
+
}
|
|
314
|
+
function isMultiNetworkSigner(wallet) {
|
|
315
|
+
return "evm" in wallet && "svm" in wallet;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// src/types/shared/evm/index.ts
|
|
319
|
+
var evm_exports = {};
|
|
320
|
+
__export(evm_exports, {
|
|
321
|
+
PERMIT2_ADDRESS: () => PERMIT2_ADDRESS,
|
|
322
|
+
authorizationPrimaryType: () => authorizationPrimaryType,
|
|
323
|
+
authorizationTypes: () => authorizationTypes,
|
|
324
|
+
config: () => config,
|
|
325
|
+
createClientAvalancheFuji: () => createClientAvalancheFuji,
|
|
326
|
+
createClientSepolia: () => createClientSepolia,
|
|
327
|
+
createConnectedClient: () => createConnectedClient,
|
|
328
|
+
createSigner: () => createSigner,
|
|
329
|
+
createSignerAvalancheFuji: () => createSignerAvalancheFuji,
|
|
330
|
+
createSignerSepolia: () => createSignerSepolia,
|
|
331
|
+
erc20PermitABI: () => erc20PermitABI,
|
|
332
|
+
getChainFromNetwork: () => getChainFromNetwork,
|
|
333
|
+
isAccount: () => isAccount,
|
|
334
|
+
isSignerWallet: () => isSignerWallet,
|
|
335
|
+
permit2ABI: () => permit2ABI,
|
|
336
|
+
permit2PrimaryType: () => permit2PrimaryType,
|
|
337
|
+
permit2Types: () => permit2Types,
|
|
338
|
+
permitPrimaryType: () => permitPrimaryType,
|
|
339
|
+
permitTypes: () => permitTypes,
|
|
340
|
+
usdcABI: () => usdcABI,
|
|
341
|
+
withChain: () => withChain
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
// src/types/shared/evm/eip3009.ts
|
|
345
|
+
var authorizationTypes = {
|
|
346
|
+
TransferWithAuthorization: [
|
|
347
|
+
{ name: "from", type: "address" },
|
|
348
|
+
{ name: "to", type: "address" },
|
|
349
|
+
{ name: "value", type: "uint256" },
|
|
350
|
+
{ name: "validAfter", type: "uint256" },
|
|
351
|
+
{ name: "validBefore", type: "uint256" },
|
|
352
|
+
{ name: "nonce", type: "bytes32" }
|
|
353
|
+
]
|
|
354
|
+
};
|
|
355
|
+
var authorizationPrimaryType = "TransferWithAuthorization";
|
|
356
|
+
|
|
357
|
+
// src/types/shared/evm/eip2612.ts
|
|
358
|
+
var permitTypes = {
|
|
359
|
+
Permit: [
|
|
360
|
+
{ name: "owner", type: "address" },
|
|
361
|
+
{ name: "spender", type: "address" },
|
|
362
|
+
{ name: "value", type: "uint256" },
|
|
363
|
+
{ name: "nonce", type: "uint256" },
|
|
364
|
+
{ name: "deadline", type: "uint256" }
|
|
365
|
+
]
|
|
366
|
+
};
|
|
367
|
+
var permitPrimaryType = "Permit";
|
|
368
|
+
var erc20PermitABI = [
|
|
369
|
+
{
|
|
370
|
+
inputs: [
|
|
371
|
+
{ internalType: "address", name: "owner", type: "address" },
|
|
372
|
+
{ internalType: "address", name: "spender", type: "address" },
|
|
373
|
+
{ internalType: "uint256", name: "value", type: "uint256" },
|
|
374
|
+
{ internalType: "uint256", name: "deadline", type: "uint256" },
|
|
375
|
+
{ internalType: "uint8", name: "v", type: "uint8" },
|
|
376
|
+
{ internalType: "bytes32", name: "r", type: "bytes32" },
|
|
377
|
+
{ internalType: "bytes32", name: "s", type: "bytes32" }
|
|
378
|
+
],
|
|
379
|
+
name: "permit",
|
|
380
|
+
outputs: [],
|
|
381
|
+
stateMutability: "nonpayable",
|
|
382
|
+
type: "function"
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
inputs: [{ internalType: "address", name: "owner", type: "address" }],
|
|
386
|
+
name: "nonces",
|
|
387
|
+
outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
|
|
388
|
+
stateMutability: "view",
|
|
389
|
+
type: "function"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
inputs: [],
|
|
393
|
+
name: "name",
|
|
394
|
+
outputs: [{ internalType: "string", name: "", type: "string" }],
|
|
395
|
+
stateMutability: "view",
|
|
396
|
+
type: "function"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
inputs: [],
|
|
400
|
+
name: "DOMAIN_SEPARATOR",
|
|
401
|
+
outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
|
|
402
|
+
stateMutability: "view",
|
|
403
|
+
type: "function"
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
inputs: [{ internalType: "address", name: "account", type: "address" }],
|
|
407
|
+
name: "balanceOf",
|
|
408
|
+
outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
|
|
409
|
+
stateMutability: "view",
|
|
410
|
+
type: "function"
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
inputs: [
|
|
414
|
+
{ internalType: "address", name: "from", type: "address" },
|
|
415
|
+
{ internalType: "address", name: "to", type: "address" },
|
|
416
|
+
{ internalType: "uint256", name: "amount", type: "uint256" }
|
|
417
|
+
],
|
|
418
|
+
name: "transferFrom",
|
|
419
|
+
outputs: [{ internalType: "bool", name: "", type: "bool" }],
|
|
420
|
+
stateMutability: "nonpayable",
|
|
421
|
+
type: "function"
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
inputs: [
|
|
425
|
+
{ internalType: "address", name: "owner", type: "address" },
|
|
426
|
+
{ internalType: "address", name: "spender", type: "address" }
|
|
427
|
+
],
|
|
428
|
+
name: "allowance",
|
|
429
|
+
outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
|
|
430
|
+
stateMutability: "view",
|
|
431
|
+
type: "function"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
inputs: [],
|
|
435
|
+
name: "version",
|
|
436
|
+
outputs: [{ internalType: "string", name: "", type: "string" }],
|
|
437
|
+
stateMutability: "view",
|
|
438
|
+
type: "function"
|
|
439
|
+
}
|
|
440
|
+
];
|
|
441
|
+
|
|
442
|
+
// src/types/shared/evm/permit2.ts
|
|
443
|
+
var PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
444
|
+
var permit2Types = {
|
|
445
|
+
PermitTransferFrom: [
|
|
446
|
+
{ name: "permitted", type: "TokenPermissions" },
|
|
447
|
+
{ name: "spender", type: "address" },
|
|
448
|
+
{ name: "nonce", type: "uint256" },
|
|
449
|
+
{ name: "deadline", type: "uint256" }
|
|
450
|
+
],
|
|
451
|
+
TokenPermissions: [
|
|
452
|
+
{ name: "token", type: "address" },
|
|
453
|
+
{ name: "amount", type: "uint256" }
|
|
454
|
+
]
|
|
455
|
+
};
|
|
456
|
+
var permit2PrimaryType = "PermitTransferFrom";
|
|
457
|
+
var permit2ABI = [
|
|
458
|
+
{
|
|
459
|
+
inputs: [
|
|
460
|
+
{
|
|
461
|
+
components: [
|
|
462
|
+
{
|
|
463
|
+
components: [
|
|
464
|
+
{ internalType: "address", name: "token", type: "address" },
|
|
465
|
+
{ internalType: "uint256", name: "amount", type: "uint256" }
|
|
466
|
+
],
|
|
467
|
+
internalType: "struct ISignatureTransfer.TokenPermissions",
|
|
468
|
+
name: "permitted",
|
|
469
|
+
type: "tuple"
|
|
470
|
+
},
|
|
471
|
+
{ internalType: "uint256", name: "nonce", type: "uint256" },
|
|
472
|
+
{ internalType: "uint256", name: "deadline", type: "uint256" }
|
|
473
|
+
],
|
|
474
|
+
internalType: "struct ISignatureTransfer.PermitTransferFrom",
|
|
475
|
+
name: "permit",
|
|
476
|
+
type: "tuple"
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
components: [
|
|
480
|
+
{ internalType: "address", name: "to", type: "address" },
|
|
481
|
+
{ internalType: "uint256", name: "requestedAmount", type: "uint256" }
|
|
482
|
+
],
|
|
483
|
+
internalType: "struct ISignatureTransfer.SignatureTransferDetails",
|
|
484
|
+
name: "transferDetails",
|
|
485
|
+
type: "tuple"
|
|
486
|
+
},
|
|
487
|
+
{ internalType: "address", name: "owner", type: "address" },
|
|
488
|
+
{ internalType: "bytes", name: "signature", type: "bytes" }
|
|
489
|
+
],
|
|
490
|
+
name: "permitTransferFrom",
|
|
491
|
+
outputs: [],
|
|
492
|
+
stateMutability: "nonpayable",
|
|
493
|
+
type: "function"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
inputs: [
|
|
497
|
+
{ internalType: "address", name: "owner", type: "address" },
|
|
498
|
+
{ internalType: "address", name: "token", type: "address" },
|
|
499
|
+
{ internalType: "address", name: "spender", type: "address" }
|
|
500
|
+
],
|
|
501
|
+
name: "allowance",
|
|
502
|
+
outputs: [
|
|
503
|
+
{ internalType: "uint160", name: "amount", type: "uint160" },
|
|
504
|
+
{ internalType: "uint48", name: "expiration", type: "uint48" },
|
|
505
|
+
{ internalType: "uint48", name: "nonce", type: "uint48" }
|
|
506
|
+
],
|
|
507
|
+
stateMutability: "view",
|
|
508
|
+
type: "function"
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
inputs: [],
|
|
512
|
+
name: "DOMAIN_SEPARATOR",
|
|
513
|
+
outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
|
|
514
|
+
stateMutability: "view",
|
|
515
|
+
type: "function"
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
inputs: [
|
|
519
|
+
{ internalType: "address", name: "owner", type: "address" },
|
|
520
|
+
{ internalType: "uint256", name: "wordPos", type: "uint256" }
|
|
521
|
+
],
|
|
522
|
+
name: "nonceBitmap",
|
|
523
|
+
outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
|
|
524
|
+
stateMutability: "view",
|
|
525
|
+
type: "function"
|
|
526
|
+
}
|
|
527
|
+
];
|
|
528
|
+
|
|
529
|
+
// src/types/shared/svm/index.ts
|
|
530
|
+
var svm_exports = {};
|
|
531
|
+
__export(svm_exports, {
|
|
532
|
+
SvmAddressRegex: () => SvmAddressRegex
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
// src/types/shared/svm/regex.ts
|
|
536
|
+
var SvmAddressRegex = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
|
|
537
|
+
|
|
538
|
+
// src/types/verify/x402Specs.ts
|
|
539
|
+
import { z as z3 } from "zod";
|
|
540
|
+
|
|
541
|
+
// src/shared/base64.ts
|
|
542
|
+
var Base64EncodedRegex = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
543
|
+
function safeBase64Encode(data) {
|
|
544
|
+
if (typeof globalThis !== "undefined" && typeof globalThis.btoa === "function") {
|
|
545
|
+
return globalThis.btoa(data);
|
|
546
|
+
}
|
|
547
|
+
return Buffer.from(data).toString("base64");
|
|
548
|
+
}
|
|
549
|
+
function safeBase64Decode(data) {
|
|
550
|
+
if (typeof globalThis !== "undefined" && typeof globalThis.atob === "function") {
|
|
551
|
+
return globalThis.atob(data);
|
|
552
|
+
}
|
|
553
|
+
return Buffer.from(data, "base64").toString("utf-8");
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// src/types/verify/x402Specs.ts
|
|
557
|
+
var EvmMaxAtomicUnits = 40;
|
|
558
|
+
var EvmAddressRegex = /^0x[0-9a-fA-F]{40}$/;
|
|
559
|
+
var MixedAddressRegex = /^0x[a-fA-F0-9]{40}|[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$/;
|
|
560
|
+
var HexEncoded64ByteRegex = /^0x[0-9a-fA-F]{64}$/;
|
|
561
|
+
var EvmSignatureRegex = /^0x[0-9a-fA-F]+$/;
|
|
562
|
+
var schemes = ["exact"];
|
|
563
|
+
var x402Versions = [1];
|
|
564
|
+
var ErrorReasons = [
|
|
565
|
+
"insufficient_funds",
|
|
566
|
+
"invalid_exact_evm_payload_authorization_valid_after",
|
|
567
|
+
"invalid_exact_evm_payload_authorization_valid_before",
|
|
568
|
+
"invalid_exact_evm_payload_authorization_value",
|
|
569
|
+
"invalid_exact_evm_payload_signature",
|
|
570
|
+
"invalid_exact_evm_payload_recipient_mismatch",
|
|
571
|
+
"invalid_exact_svm_payload_transaction",
|
|
572
|
+
"invalid_exact_svm_payload_transaction_amount_mismatch",
|
|
573
|
+
"invalid_exact_svm_payload_transaction_create_ata_instruction",
|
|
574
|
+
"invalid_exact_svm_payload_transaction_create_ata_instruction_incorrect_payee",
|
|
575
|
+
"invalid_exact_svm_payload_transaction_create_ata_instruction_incorrect_asset",
|
|
576
|
+
"invalid_exact_svm_payload_transaction_instructions",
|
|
577
|
+
"invalid_exact_svm_payload_transaction_instructions_length",
|
|
578
|
+
"invalid_exact_svm_payload_transaction_instructions_compute_limit_instruction",
|
|
579
|
+
"invalid_exact_svm_payload_transaction_instructions_compute_price_instruction",
|
|
580
|
+
"invalid_exact_svm_payload_transaction_instructions_compute_price_instruction_too_high",
|
|
581
|
+
"invalid_exact_svm_payload_transaction_instruction_not_spl_token_transfer_checked",
|
|
582
|
+
"invalid_exact_svm_payload_transaction_instruction_not_token_2022_transfer_checked",
|
|
583
|
+
"invalid_exact_svm_payload_transaction_not_a_transfer_instruction",
|
|
584
|
+
"invalid_exact_svm_payload_transaction_receiver_ata_not_found",
|
|
585
|
+
"invalid_exact_svm_payload_transaction_sender_ata_not_found",
|
|
586
|
+
"invalid_exact_svm_payload_transaction_simulation_failed",
|
|
587
|
+
"invalid_exact_svm_payload_transaction_transfer_to_incorrect_ata",
|
|
588
|
+
"invalid_network",
|
|
589
|
+
"invalid_payload",
|
|
590
|
+
"invalid_payment_requirements",
|
|
591
|
+
"invalid_scheme",
|
|
592
|
+
"invalid_payment",
|
|
593
|
+
"payment_expired",
|
|
594
|
+
"unsupported_scheme",
|
|
595
|
+
"invalid_x402_version",
|
|
596
|
+
"invalid_transaction_state",
|
|
597
|
+
"settle_exact_svm_block_height_exceeded",
|
|
598
|
+
"settle_exact_svm_transaction_confirmation_timed_out",
|
|
599
|
+
"unexpected_settle_error",
|
|
600
|
+
"unexpected_verify_error",
|
|
601
|
+
// New error reasons for Permit and Permit2
|
|
602
|
+
"unsupported_authorization_type",
|
|
603
|
+
"invalid_authorization_type",
|
|
604
|
+
"invalid_permit_signature",
|
|
605
|
+
"invalid_permit2_signature",
|
|
606
|
+
"permit_expired",
|
|
607
|
+
"permit2_expired",
|
|
608
|
+
"permit2_not_approved",
|
|
609
|
+
"invalid_token_address",
|
|
610
|
+
"invalid_spender_address",
|
|
611
|
+
"token_mismatch",
|
|
612
|
+
"insufficient_payment_amount",
|
|
613
|
+
"transaction_failed",
|
|
614
|
+
"settlement_failed"
|
|
615
|
+
];
|
|
616
|
+
var isInteger = (value) => Number.isInteger(Number(value)) && Number(value) >= 0;
|
|
617
|
+
var hasMaxLength = (maxLength) => (value) => value.length <= maxLength;
|
|
618
|
+
var EvmOrSvmAddress = z3.string().regex(EvmAddressRegex).or(z3.string().regex(SvmAddressRegex));
|
|
619
|
+
var mixedAddressOrSvmAddress = z3.string().regex(MixedAddressRegex).or(z3.string().regex(SvmAddressRegex));
|
|
620
|
+
var PaymentRequirementsSchema = z3.object({
|
|
621
|
+
scheme: z3.enum(schemes),
|
|
622
|
+
network: NetworkSchema,
|
|
623
|
+
maxAmountRequired: z3.string().refine(isInteger),
|
|
624
|
+
resource: z3.string().url(),
|
|
625
|
+
description: z3.string(),
|
|
626
|
+
mimeType: z3.string(),
|
|
627
|
+
outputSchema: z3.record(z3.any()).optional(),
|
|
628
|
+
payTo: EvmOrSvmAddress,
|
|
629
|
+
maxTimeoutSeconds: z3.number().int(),
|
|
630
|
+
asset: mixedAddressOrSvmAddress,
|
|
631
|
+
paymentType: z3.enum(["eip3009", "permit", "permit2"]).optional(),
|
|
632
|
+
extra: z3.record(z3.any()).optional()
|
|
633
|
+
});
|
|
634
|
+
var ExactEvmPayloadAuthorizationSchema = z3.object({
|
|
635
|
+
from: z3.string().regex(EvmAddressRegex),
|
|
636
|
+
to: z3.string().regex(EvmAddressRegex),
|
|
637
|
+
value: z3.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
|
|
638
|
+
validAfter: z3.string().refine(isInteger),
|
|
639
|
+
validBefore: z3.string().refine(isInteger),
|
|
640
|
+
nonce: z3.string().regex(HexEncoded64ByteRegex)
|
|
641
|
+
});
|
|
642
|
+
var PermitEvmPayloadAuthorizationSchema = z3.object({
|
|
643
|
+
owner: z3.string().regex(EvmAddressRegex),
|
|
644
|
+
spender: z3.string().regex(EvmAddressRegex),
|
|
645
|
+
value: z3.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
|
|
646
|
+
deadline: z3.string().refine(isInteger),
|
|
647
|
+
nonce: z3.string().refine(isInteger)
|
|
648
|
+
});
|
|
649
|
+
var Permit2EvmPayloadAuthorizationSchema = z3.object({
|
|
650
|
+
owner: z3.string().regex(EvmAddressRegex),
|
|
651
|
+
spender: z3.string().regex(EvmAddressRegex),
|
|
652
|
+
token: z3.string().regex(EvmAddressRegex),
|
|
653
|
+
amount: z3.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
|
|
654
|
+
deadline: z3.string().refine(isInteger),
|
|
655
|
+
nonce: z3.string().refine(isInteger)
|
|
656
|
+
});
|
|
657
|
+
var ExactEvmPayloadSchema = z3.discriminatedUnion("authorizationType", [
|
|
658
|
+
z3.object({
|
|
659
|
+
authorizationType: z3.literal("eip3009"),
|
|
660
|
+
signature: z3.string().regex(EvmSignatureRegex),
|
|
661
|
+
authorization: ExactEvmPayloadAuthorizationSchema
|
|
662
|
+
}),
|
|
663
|
+
z3.object({
|
|
664
|
+
authorizationType: z3.literal("permit"),
|
|
665
|
+
signature: z3.string().regex(EvmSignatureRegex),
|
|
666
|
+
authorization: PermitEvmPayloadAuthorizationSchema
|
|
667
|
+
}),
|
|
668
|
+
z3.object({
|
|
669
|
+
authorizationType: z3.literal("permit2"),
|
|
670
|
+
signature: z3.string().regex(EvmSignatureRegex),
|
|
671
|
+
authorization: Permit2EvmPayloadAuthorizationSchema
|
|
672
|
+
})
|
|
673
|
+
]);
|
|
674
|
+
var ExactSvmPayloadSchema = z3.object({
|
|
675
|
+
transaction: z3.string().regex(Base64EncodedRegex)
|
|
676
|
+
});
|
|
677
|
+
var PaymentPayloadSchema = z3.object({
|
|
678
|
+
x402Version: z3.number().refine((val) => x402Versions.includes(val)),
|
|
679
|
+
scheme: z3.enum(schemes),
|
|
680
|
+
network: NetworkSchema,
|
|
681
|
+
payload: z3.union([ExactEvmPayloadSchema, ExactSvmPayloadSchema])
|
|
682
|
+
});
|
|
683
|
+
var x402ResponseSchema = z3.object({
|
|
684
|
+
x402Version: z3.number().refine((val) => x402Versions.includes(val)),
|
|
685
|
+
error: z3.enum(ErrorReasons).optional(),
|
|
686
|
+
accepts: z3.array(PaymentRequirementsSchema).optional(),
|
|
687
|
+
payer: z3.string().regex(MixedAddressRegex).optional()
|
|
688
|
+
});
|
|
689
|
+
var HTTPVerbsSchema = z3.enum(["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]);
|
|
690
|
+
var HTTPRequestStructureSchema = z3.object({
|
|
691
|
+
type: z3.literal("http"),
|
|
692
|
+
method: HTTPVerbsSchema,
|
|
693
|
+
queryParams: z3.record(z3.string(), z3.string()).optional(),
|
|
694
|
+
bodyType: z3.enum(["json", "form-data", "multipart-form-data", "text", "binary"]).optional(),
|
|
695
|
+
bodyFields: z3.record(z3.string(), z3.any()).optional(),
|
|
696
|
+
headerFields: z3.record(z3.string(), z3.any()).optional()
|
|
697
|
+
});
|
|
698
|
+
var RequestStructureSchema = z3.discriminatedUnion("type", [
|
|
699
|
+
HTTPRequestStructureSchema
|
|
700
|
+
// MCPRequestStructureSchema,
|
|
701
|
+
// OpenAPIRequestStructureSchema,
|
|
702
|
+
]);
|
|
703
|
+
var DiscoveredResourceSchema = z3.object({
|
|
704
|
+
resource: z3.string(),
|
|
705
|
+
type: z3.enum(["http"]),
|
|
706
|
+
x402Version: z3.number().refine((val) => x402Versions.includes(val)),
|
|
707
|
+
accepts: z3.array(PaymentRequirementsSchema),
|
|
708
|
+
lastUpdated: z3.date(),
|
|
709
|
+
metadata: z3.record(z3.any()).optional()
|
|
710
|
+
});
|
|
711
|
+
var SettleRequestSchema = z3.object({
|
|
712
|
+
paymentPayload: PaymentPayloadSchema,
|
|
713
|
+
paymentRequirements: PaymentRequirementsSchema
|
|
714
|
+
});
|
|
715
|
+
var VerifyRequestSchema = z3.object({
|
|
716
|
+
paymentPayload: PaymentPayloadSchema,
|
|
717
|
+
paymentRequirements: PaymentRequirementsSchema
|
|
718
|
+
});
|
|
719
|
+
var VerifyResponseSchema = z3.object({
|
|
720
|
+
isValid: z3.boolean(),
|
|
721
|
+
invalidReason: z3.enum(ErrorReasons).optional(),
|
|
722
|
+
payer: EvmOrSvmAddress.optional()
|
|
723
|
+
});
|
|
724
|
+
var SettleResponseSchema = z3.object({
|
|
725
|
+
success: z3.boolean(),
|
|
726
|
+
errorReason: z3.enum(ErrorReasons).optional(),
|
|
727
|
+
payer: EvmOrSvmAddress.optional(),
|
|
728
|
+
transaction: z3.string().regex(MixedAddressRegex),
|
|
729
|
+
network: NetworkSchema
|
|
730
|
+
});
|
|
731
|
+
var ListDiscoveryResourcesRequestSchema = z3.object({
|
|
732
|
+
type: z3.string().optional(),
|
|
733
|
+
limit: z3.number().optional(),
|
|
734
|
+
offset: z3.number().optional()
|
|
735
|
+
});
|
|
736
|
+
var ListDiscoveryResourcesResponseSchema = z3.object({
|
|
737
|
+
x402Version: z3.number().refine((val) => x402Versions.includes(val)),
|
|
738
|
+
items: z3.array(DiscoveredResourceSchema),
|
|
739
|
+
pagination: z3.object({
|
|
740
|
+
limit: z3.number(),
|
|
741
|
+
offset: z3.number(),
|
|
742
|
+
total: z3.number()
|
|
743
|
+
})
|
|
744
|
+
});
|
|
745
|
+
var SupportedPaymentKindSchema = z3.object({
|
|
746
|
+
x402Version: z3.number().refine((val) => x402Versions.includes(val)),
|
|
747
|
+
scheme: z3.enum(schemes),
|
|
748
|
+
network: NetworkSchema,
|
|
749
|
+
extra: z3.record(z3.any()).optional()
|
|
750
|
+
});
|
|
751
|
+
var SupportedPaymentKindsResponseSchema = z3.object({
|
|
752
|
+
kinds: z3.array(SupportedPaymentKindSchema)
|
|
753
|
+
});
|
|
754
|
+
|
|
755
|
+
// src/types/verify/facilitator.ts
|
|
756
|
+
import { z as z4 } from "zod";
|
|
757
|
+
|
|
758
|
+
// src/shared/json.ts
|
|
759
|
+
function toJsonSafe(data) {
|
|
760
|
+
if (typeof data !== "object") {
|
|
761
|
+
throw new Error("Data is not an object");
|
|
762
|
+
}
|
|
763
|
+
function convert(value) {
|
|
764
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
765
|
+
return Object.fromEntries(Object.entries(value).map(([key, val]) => [key, convert(val)]));
|
|
766
|
+
}
|
|
767
|
+
if (Array.isArray(value)) {
|
|
768
|
+
return value.map(convert);
|
|
769
|
+
}
|
|
770
|
+
if (typeof value === "bigint") {
|
|
771
|
+
return value.toString();
|
|
772
|
+
}
|
|
773
|
+
return value;
|
|
774
|
+
}
|
|
775
|
+
return convert(data);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
// src/shared/network.ts
|
|
779
|
+
function getNetworkId(network) {
|
|
780
|
+
if (EvmNetworkToChainId.has(network)) {
|
|
781
|
+
return EvmNetworkToChainId.get(network);
|
|
782
|
+
}
|
|
783
|
+
if (SvmNetworkToChainId.has(network)) {
|
|
784
|
+
return SvmNetworkToChainId.get(network);
|
|
785
|
+
}
|
|
786
|
+
throw new Error(`Unsupported network: ${network}`);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
// src/shared/middleware.ts
|
|
790
|
+
function computeRoutePatterns(routes) {
|
|
791
|
+
const normalizedRoutes = Object.fromEntries(
|
|
792
|
+
Object.entries(routes).map(([pattern, value]) => [
|
|
793
|
+
pattern,
|
|
794
|
+
typeof value === "string" || typeof value === "number" ? { price: value, network: "base-sepolia" } : value
|
|
795
|
+
])
|
|
796
|
+
);
|
|
797
|
+
return Object.entries(normalizedRoutes).map(([pattern, routeConfig]) => {
|
|
798
|
+
const [verb, path] = pattern.includes(" ") ? pattern.split(/\s+/) : ["*", pattern];
|
|
799
|
+
if (!path) {
|
|
800
|
+
throw new Error(`Invalid route pattern: ${pattern}`);
|
|
801
|
+
}
|
|
802
|
+
return {
|
|
803
|
+
verb: verb.toUpperCase(),
|
|
804
|
+
pattern: new RegExp(
|
|
805
|
+
`^${path.replace(/[$()+.?^{|}]/g, "\\$&").replace(/\*/g, ".*?").replace(/\[([^\]]+)\]/g, "[^/]+").replace(/\//g, "\\/")}$`,
|
|
806
|
+
"i"
|
|
807
|
+
),
|
|
808
|
+
config: routeConfig
|
|
809
|
+
};
|
|
810
|
+
});
|
|
811
|
+
}
|
|
812
|
+
function findMatchingRoute(routePatterns, path, method) {
|
|
813
|
+
let normalizedPath;
|
|
814
|
+
try {
|
|
815
|
+
const pathWithoutQuery = path.split(/[?#]/)[0];
|
|
816
|
+
const decodedPath = decodeURIComponent(pathWithoutQuery);
|
|
817
|
+
normalizedPath = decodedPath.replace(/\\/g, "/").replace(/\/+/g, "/").replace(/(.+?)\/+$/, "$1");
|
|
818
|
+
} catch {
|
|
819
|
+
return void 0;
|
|
820
|
+
}
|
|
821
|
+
const matchingRoutes = routePatterns.filter(({ pattern, verb }) => {
|
|
822
|
+
const matchesPath = pattern.test(normalizedPath);
|
|
823
|
+
const upperMethod = method.toUpperCase();
|
|
824
|
+
const matchesVerb = verb === "*" || upperMethod === verb;
|
|
825
|
+
const result = matchesPath && matchesVerb;
|
|
826
|
+
return result;
|
|
827
|
+
});
|
|
828
|
+
if (matchingRoutes.length === 0) {
|
|
829
|
+
return void 0;
|
|
830
|
+
}
|
|
831
|
+
const matchingRoute = matchingRoutes.reduce(
|
|
832
|
+
(a, b) => b.pattern.source.length > a.pattern.source.length ? b : a
|
|
833
|
+
);
|
|
834
|
+
return matchingRoute;
|
|
835
|
+
}
|
|
836
|
+
function getDefaultAsset(network) {
|
|
837
|
+
const chainId = getNetworkId(network);
|
|
838
|
+
const usdc = getUsdcChainConfigForChain(chainId);
|
|
839
|
+
if (!usdc) {
|
|
840
|
+
throw new Error(`Unable to get default asset on ${network}`);
|
|
841
|
+
}
|
|
842
|
+
return {
|
|
843
|
+
address: usdc.usdcAddress,
|
|
844
|
+
decimals: 6,
|
|
845
|
+
eip712: {
|
|
846
|
+
name: usdc.usdcName,
|
|
847
|
+
version: "2"
|
|
848
|
+
}
|
|
849
|
+
};
|
|
850
|
+
}
|
|
851
|
+
function processPriceToAtomicAmount(price, network) {
|
|
852
|
+
let maxAmountRequired;
|
|
853
|
+
let asset;
|
|
854
|
+
if (typeof price === "string" || typeof price === "number") {
|
|
855
|
+
const parsedAmount = moneySchema.safeParse(price);
|
|
856
|
+
if (!parsedAmount.success) {
|
|
857
|
+
return {
|
|
858
|
+
error: `Invalid price (price: ${price}). Must be in the form "$3.10", 0.10, "0.001", ${parsedAmount.error}`
|
|
859
|
+
};
|
|
860
|
+
}
|
|
861
|
+
const parsedUsdAmount = parsedAmount.data;
|
|
862
|
+
asset = getDefaultAsset(network);
|
|
863
|
+
maxAmountRequired = (parsedUsdAmount * 10 ** asset.decimals).toString();
|
|
864
|
+
} else {
|
|
865
|
+
maxAmountRequired = price.amount;
|
|
866
|
+
asset = price.asset;
|
|
867
|
+
}
|
|
868
|
+
return {
|
|
869
|
+
maxAmountRequired,
|
|
870
|
+
asset
|
|
871
|
+
};
|
|
872
|
+
}
|
|
873
|
+
function findMatchingPaymentRequirements(paymentRequirements, payment) {
|
|
874
|
+
return paymentRequirements.find((value) => {
|
|
875
|
+
if (value.scheme !== payment.scheme || value.network !== payment.network) {
|
|
876
|
+
return false;
|
|
877
|
+
}
|
|
878
|
+
if (value.paymentType && "authorizationType" in payment.payload) {
|
|
879
|
+
return value.paymentType === payment.payload.authorizationType;
|
|
880
|
+
}
|
|
881
|
+
return true;
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
function decodeXPaymentResponse(header) {
|
|
885
|
+
const decoded = safeBase64Decode(header);
|
|
886
|
+
return JSON.parse(decoded);
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
// src/shared/svm/index.ts
|
|
890
|
+
var svm_exports2 = {};
|
|
891
|
+
__export(svm_exports2, {
|
|
892
|
+
createDevnetRpcClient: () => createDevnetRpcClient,
|
|
893
|
+
createMainnetRpcClient: () => createMainnetRpcClient,
|
|
894
|
+
createSignerFromBase58: () => createSignerFromBase58,
|
|
895
|
+
createSvmConnectedClient: () => createSvmConnectedClient,
|
|
896
|
+
decodeTransactionFromPayload: () => decodeTransactionFromPayload,
|
|
897
|
+
getRpcClient: () => getRpcClient,
|
|
898
|
+
getRpcSubscriptions: () => getRpcSubscriptions,
|
|
899
|
+
getTokenPayerFromTransaction: () => getTokenPayerFromTransaction,
|
|
900
|
+
isSignerWallet: () => isSignerWallet2,
|
|
901
|
+
signAndSimulateTransaction: () => signAndSimulateTransaction
|
|
902
|
+
});
|
|
903
|
+
|
|
904
|
+
// src/shared/svm/transaction.ts
|
|
905
|
+
import {
|
|
906
|
+
getBase64EncodedWireTransaction,
|
|
907
|
+
getBase64Encoder,
|
|
908
|
+
getTransactionDecoder,
|
|
909
|
+
getCompiledTransactionMessageDecoder,
|
|
910
|
+
partiallySignTransaction
|
|
911
|
+
} from "@solana/kit";
|
|
912
|
+
import { TOKEN_PROGRAM_ADDRESS } from "@solana-program/token";
|
|
913
|
+
import { TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022";
|
|
914
|
+
function decodeTransactionFromPayload(svmPayload) {
|
|
915
|
+
try {
|
|
916
|
+
const base64Encoder = getBase64Encoder();
|
|
917
|
+
const transactionBytes = base64Encoder.encode(svmPayload.transaction);
|
|
918
|
+
const transactionDecoder = getTransactionDecoder();
|
|
919
|
+
return transactionDecoder.decode(transactionBytes);
|
|
920
|
+
} catch (error) {
|
|
921
|
+
console.error("error", error);
|
|
922
|
+
throw new Error("invalid_exact_svm_payload_transaction");
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
function getTokenPayerFromTransaction(transaction) {
|
|
926
|
+
const compiled = getCompiledTransactionMessageDecoder().decode(
|
|
927
|
+
transaction.messageBytes
|
|
928
|
+
);
|
|
929
|
+
const staticAccounts = compiled.staticAccounts ?? [];
|
|
930
|
+
const instructions = compiled.instructions ?? [];
|
|
931
|
+
for (const ix of instructions) {
|
|
932
|
+
const programIndex = ix.programAddressIndex;
|
|
933
|
+
const programAddress = staticAccounts[programIndex].toString();
|
|
934
|
+
if (programAddress === TOKEN_PROGRAM_ADDRESS.toString() || programAddress === TOKEN_2022_PROGRAM_ADDRESS.toString()) {
|
|
935
|
+
const accountIndices = ix.accountIndices ?? [];
|
|
936
|
+
if (accountIndices.length >= 4) {
|
|
937
|
+
const ownerIndex = accountIndices[3];
|
|
938
|
+
const ownerAddress = staticAccounts[ownerIndex].toString();
|
|
939
|
+
if (ownerAddress) return ownerAddress;
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
return "";
|
|
944
|
+
}
|
|
945
|
+
async function signAndSimulateTransaction(signer, transaction, rpc) {
|
|
946
|
+
const signedTransaction = await partiallySignTransaction([signer.keyPair], transaction);
|
|
947
|
+
const base64EncodedTransaction = getBase64EncodedWireTransaction(signedTransaction);
|
|
948
|
+
const simulateTxConfig = {
|
|
949
|
+
sigVerify: true,
|
|
950
|
+
replaceRecentBlockhash: false,
|
|
951
|
+
commitment: "confirmed",
|
|
952
|
+
encoding: "base64",
|
|
953
|
+
accounts: void 0,
|
|
954
|
+
innerInstructions: void 0,
|
|
955
|
+
minContextSlot: void 0
|
|
956
|
+
};
|
|
957
|
+
const simulateResult = await rpc.simulateTransaction(base64EncodedTransaction, simulateTxConfig).send();
|
|
958
|
+
return simulateResult;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
// src/types/verify/facilitator.ts
|
|
962
|
+
var facilitatorRequestSchema = z4.object({
|
|
963
|
+
paymentHeader: z4.string(),
|
|
964
|
+
paymentRequirements: PaymentRequirementsSchema
|
|
965
|
+
});
|
|
966
|
+
function settleResponseHeader(response) {
|
|
967
|
+
return safeBase64Encode(JSON.stringify(response));
|
|
968
|
+
}
|
|
969
|
+
function settleResponseFromHeader(header) {
|
|
970
|
+
const decoded = safeBase64Decode(header);
|
|
971
|
+
return JSON.parse(decoded);
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
export {
|
|
975
|
+
authorizationTypes,
|
|
976
|
+
permitTypes,
|
|
977
|
+
erc20PermitABI,
|
|
978
|
+
PERMIT2_ADDRESS,
|
|
979
|
+
permit2Types,
|
|
980
|
+
permit2ABI,
|
|
981
|
+
isSignerWallet,
|
|
982
|
+
isAccount,
|
|
983
|
+
withChain,
|
|
984
|
+
evm_exports,
|
|
985
|
+
toJsonSafe,
|
|
986
|
+
Base64EncodedRegex,
|
|
987
|
+
safeBase64Encode,
|
|
988
|
+
safeBase64Decode,
|
|
989
|
+
moneySchema,
|
|
990
|
+
NetworkSchema,
|
|
991
|
+
SupportedEVMNetworks,
|
|
992
|
+
EvmNetworkToChainId,
|
|
993
|
+
SupportedSVMNetworks,
|
|
994
|
+
SvmNetworkToChainId,
|
|
995
|
+
ChainIdToNetwork,
|
|
996
|
+
getRpcClient,
|
|
997
|
+
getRpcSubscriptions,
|
|
998
|
+
createConnectedClient2 as createConnectedClient,
|
|
999
|
+
createSigner2 as createSigner,
|
|
1000
|
+
isEvmSignerWallet,
|
|
1001
|
+
isSvmSignerWallet,
|
|
1002
|
+
isMultiNetworkSigner,
|
|
1003
|
+
svm_exports,
|
|
1004
|
+
getNetworkId,
|
|
1005
|
+
schemes,
|
|
1006
|
+
x402Versions,
|
|
1007
|
+
ErrorReasons,
|
|
1008
|
+
PaymentRequirementsSchema,
|
|
1009
|
+
ExactEvmPayloadAuthorizationSchema,
|
|
1010
|
+
PermitEvmPayloadAuthorizationSchema,
|
|
1011
|
+
Permit2EvmPayloadAuthorizationSchema,
|
|
1012
|
+
ExactEvmPayloadSchema,
|
|
1013
|
+
ExactSvmPayloadSchema,
|
|
1014
|
+
PaymentPayloadSchema,
|
|
1015
|
+
x402ResponseSchema,
|
|
1016
|
+
HTTPRequestStructureSchema,
|
|
1017
|
+
RequestStructureSchema,
|
|
1018
|
+
DiscoveredResourceSchema,
|
|
1019
|
+
SettleRequestSchema,
|
|
1020
|
+
VerifyRequestSchema,
|
|
1021
|
+
VerifyResponseSchema,
|
|
1022
|
+
SettleResponseSchema,
|
|
1023
|
+
ListDiscoveryResourcesRequestSchema,
|
|
1024
|
+
ListDiscoveryResourcesResponseSchema,
|
|
1025
|
+
SupportedPaymentKindSchema,
|
|
1026
|
+
SupportedPaymentKindsResponseSchema,
|
|
1027
|
+
facilitatorRequestSchema,
|
|
1028
|
+
settleResponseHeader,
|
|
1029
|
+
settleResponseFromHeader,
|
|
1030
|
+
computeRoutePatterns,
|
|
1031
|
+
findMatchingRoute,
|
|
1032
|
+
getDefaultAsset,
|
|
1033
|
+
processPriceToAtomicAmount,
|
|
1034
|
+
findMatchingPaymentRequirements,
|
|
1035
|
+
decodeXPaymentResponse,
|
|
1036
|
+
decodeTransactionFromPayload,
|
|
1037
|
+
getTokenPayerFromTransaction,
|
|
1038
|
+
signAndSimulateTransaction,
|
|
1039
|
+
svm_exports2
|
|
1040
|
+
};
|
|
1041
|
+
//# sourceMappingURL=chunk-UCBE7FDY.mjs.map
|