run402 1.40.0 → 1.40.2
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/sdk.mjs +1 -1
- package/package.json +4 -3
- package/sdk/core-dist/allowance-auth.js +129 -0
- package/sdk/core-dist/allowance.js +25 -0
- package/sdk/core-dist/client.js +42 -0
- package/sdk/core-dist/config.js +26 -0
- package/sdk/core-dist/keystore.js +97 -0
- package/sdk/core-dist/wallet-auth.js +62 -0
- package/sdk/core-dist/wallet.js +25 -0
- package/sdk/dist/credentials.d.ts +70 -0
- package/sdk/dist/credentials.d.ts.map +1 -0
- package/sdk/dist/credentials.js +19 -0
- package/sdk/dist/credentials.js.map +1 -0
- package/sdk/dist/errors.d.ts +34 -0
- package/sdk/dist/errors.d.ts.map +1 -0
- package/sdk/dist/errors.js +46 -0
- package/sdk/dist/errors.js.map +1 -0
- package/sdk/dist/index.d.ts +68 -0
- package/sdk/dist/index.d.ts.map +1 -0
- package/sdk/dist/index.js +81 -0
- package/sdk/dist/index.js.map +1 -0
- package/sdk/dist/kernel.d.ts +47 -0
- package/sdk/dist/kernel.d.ts.map +1 -0
- package/sdk/dist/kernel.js +76 -0
- package/sdk/dist/kernel.js.map +1 -0
- package/sdk/dist/namespaces/admin.d.ts +30 -0
- package/sdk/dist/namespaces/admin.d.ts.map +1 -0
- package/sdk/dist/namespaces/admin.js +36 -0
- package/sdk/dist/namespaces/admin.js.map +1 -0
- package/sdk/dist/namespaces/ai.d.ts +57 -0
- package/sdk/dist/namespaces/ai.d.ts.map +1 -0
- package/sdk/dist/namespaces/ai.js +62 -0
- package/sdk/dist/namespaces/ai.js.map +1 -0
- package/sdk/dist/namespaces/allowance.d.ts +51 -0
- package/sdk/dist/namespaces/allowance.d.ts.map +1 -0
- package/sdk/dist/namespaces/allowance.js +116 -0
- package/sdk/dist/namespaces/allowance.js.map +1 -0
- package/sdk/dist/namespaces/apps.d.ts +158 -0
- package/sdk/dist/namespaces/apps.d.ts.map +1 -0
- package/sdk/dist/namespaces/apps.js +150 -0
- package/sdk/dist/namespaces/apps.js.map +1 -0
- package/sdk/dist/namespaces/auth.d.ts +53 -0
- package/sdk/dist/namespaces/auth.d.ts.map +1 -0
- package/sdk/dist/namespaces/auth.js +106 -0
- package/sdk/dist/namespaces/auth.js.map +1 -0
- package/sdk/dist/namespaces/billing.d.ts +64 -0
- package/sdk/dist/namespaces/billing.d.ts.map +1 -0
- package/sdk/dist/namespaces/billing.js +105 -0
- package/sdk/dist/namespaces/billing.js.map +1 -0
- package/sdk/dist/namespaces/blobs.d.ts +41 -0
- package/sdk/dist/namespaces/blobs.d.ts.map +1 -0
- package/sdk/dist/namespaces/blobs.js +202 -0
- package/sdk/dist/namespaces/blobs.js.map +1 -0
- package/sdk/dist/namespaces/blobs.types.d.ts +58 -0
- package/sdk/dist/namespaces/blobs.types.d.ts.map +1 -0
- package/sdk/dist/namespaces/blobs.types.js +9 -0
- package/sdk/dist/namespaces/blobs.types.js.map +1 -0
- package/sdk/dist/namespaces/contracts.d.ts +65 -0
- package/sdk/dist/namespaces/contracts.d.ts.map +1 -0
- package/sdk/dist/namespaces/contracts.js +163 -0
- package/sdk/dist/namespaces/contracts.js.map +1 -0
- package/sdk/dist/namespaces/domains.d.ts +57 -0
- package/sdk/dist/namespaces/domains.d.ts.map +1 -0
- package/sdk/dist/namespaces/domains.js +60 -0
- package/sdk/dist/namespaces/domains.js.map +1 -0
- package/sdk/dist/namespaces/email.d.ts +131 -0
- package/sdk/dist/namespaces/email.d.ts.map +1 -0
- package/sdk/dist/namespaces/email.js +318 -0
- package/sdk/dist/namespaces/email.js.map +1 -0
- package/sdk/dist/namespaces/functions.d.ts +43 -0
- package/sdk/dist/namespaces/functions.d.ts.map +1 -0
- package/sdk/dist/namespaces/functions.js +146 -0
- package/sdk/dist/namespaces/functions.js.map +1 -0
- package/sdk/dist/namespaces/functions.types.d.ts +96 -0
- package/sdk/dist/namespaces/functions.types.d.ts.map +1 -0
- package/sdk/dist/namespaces/functions.types.js +6 -0
- package/sdk/dist/namespaces/functions.types.js.map +1 -0
- package/sdk/dist/namespaces/projects.d.ts +97 -0
- package/sdk/dist/namespaces/projects.d.ts.map +1 -0
- package/sdk/dist/namespaces/projects.js +214 -0
- package/sdk/dist/namespaces/projects.js.map +1 -0
- package/sdk/dist/namespaces/projects.types.d.ts +112 -0
- package/sdk/dist/namespaces/projects.types.d.ts.map +1 -0
- package/sdk/dist/namespaces/projects.types.js +9 -0
- package/sdk/dist/namespaces/projects.types.js.map +1 -0
- package/sdk/dist/namespaces/secrets.d.ts +23 -0
- package/sdk/dist/namespaces/secrets.d.ts.map +1 -0
- package/sdk/dist/namespaces/secrets.js +45 -0
- package/sdk/dist/namespaces/secrets.js.map +1 -0
- package/sdk/dist/namespaces/sender-domain.d.ts +40 -0
- package/sdk/dist/namespaces/sender-domain.d.ts.map +1 -0
- package/sdk/dist/namespaces/sender-domain.js +69 -0
- package/sdk/dist/namespaces/sender-domain.js.map +1 -0
- package/sdk/dist/namespaces/service.d.ts +51 -0
- package/sdk/dist/namespaces/service.d.ts.map +1 -0
- package/sdk/dist/namespaces/service.js +25 -0
- package/sdk/dist/namespaces/service.js.map +1 -0
- package/sdk/dist/namespaces/sites.d.ts +50 -0
- package/sdk/dist/namespaces/sites.d.ts.map +1 -0
- package/sdk/dist/namespaces/sites.js +38 -0
- package/sdk/dist/namespaces/sites.js.map +1 -0
- package/sdk/dist/namespaces/subdomains.d.ts +36 -0
- package/sdk/dist/namespaces/subdomains.d.ts.map +1 -0
- package/sdk/dist/namespaces/subdomains.js +54 -0
- package/sdk/dist/namespaces/subdomains.js.map +1 -0
- package/sdk/dist/namespaces/tier.d.ts +36 -0
- package/sdk/dist/namespaces/tier.d.ts.map +1 -0
- package/sdk/dist/namespaces/tier.js +31 -0
- package/sdk/dist/namespaces/tier.js.map +1 -0
- package/sdk/dist/node/credentials.d.ts +26 -0
- package/sdk/dist/node/credentials.d.ts.map +1 -0
- package/sdk/dist/node/credentials.js +69 -0
- package/sdk/dist/node/credentials.js.map +1 -0
- package/sdk/dist/node/index.d.ts +44 -0
- package/sdk/dist/node/index.d.ts.map +1 -0
- package/sdk/dist/node/index.js +43 -0
- package/sdk/dist/node/index.js.map +1 -0
- package/sdk/dist/node/paid-fetch.d.ts +22 -0
- package/sdk/dist/node/paid-fetch.d.ts.map +1 -0
- package/sdk/dist/node/paid-fetch.js +116 -0
- package/sdk/dist/node/paid-fetch.js.map +1 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node-only x402-wrapped fetch. Reads the allowance file, checks on-chain
|
|
3
|
+
* USDC balances in parallel, and returns a fetch wrapper that auto-signs 402
|
|
4
|
+
* responses when the wallet has balance.
|
|
5
|
+
*
|
|
6
|
+
* Graceful degradation: returns null if no allowance is configured or the
|
|
7
|
+
* optional payment libraries fail to load. Callers can fall back to an
|
|
8
|
+
* unwrapped fetch and let 402s surface as `PaymentRequired` errors.
|
|
9
|
+
*
|
|
10
|
+
* Never calls `process.exit` — the SDK leaves exit-code decisions to the
|
|
11
|
+
* CLI edge.
|
|
12
|
+
*/
|
|
13
|
+
import { readAllowance } from "../../core-dist/allowance.js";
|
|
14
|
+
const USDC_ABI = [
|
|
15
|
+
{
|
|
16
|
+
name: "balanceOf",
|
|
17
|
+
type: "function",
|
|
18
|
+
stateMutability: "view",
|
|
19
|
+
inputs: [{ name: "account", type: "address" }],
|
|
20
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
const USDC_MAINNET = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
|
|
24
|
+
const USDC_SEPOLIA = "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
|
|
25
|
+
async function checkBalance(publicClient, tokenAddress, walletAddress) {
|
|
26
|
+
try {
|
|
27
|
+
const raw = await publicClient.readContract({
|
|
28
|
+
address: tokenAddress,
|
|
29
|
+
abi: USDC_ABI,
|
|
30
|
+
functionName: "balanceOf",
|
|
31
|
+
args: [walletAddress],
|
|
32
|
+
});
|
|
33
|
+
return Number(raw);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function setupPaidFetch() {
|
|
40
|
+
const allowance = readAllowance();
|
|
41
|
+
if (!allowance)
|
|
42
|
+
return null;
|
|
43
|
+
try {
|
|
44
|
+
if (allowance.rail === "mpp") {
|
|
45
|
+
const mppxMod = "mppx/client";
|
|
46
|
+
const { Mppx, tempo } = (await import(/* webpackIgnore: true */ mppxMod));
|
|
47
|
+
const { privateKeyToAccount } = await import("viem/accounts");
|
|
48
|
+
const account = privateKeyToAccount(allowance.privateKey);
|
|
49
|
+
const mppx = Mppx.create({
|
|
50
|
+
polyfill: false,
|
|
51
|
+
methods: [tempo({ account })],
|
|
52
|
+
});
|
|
53
|
+
return mppx.fetch;
|
|
54
|
+
}
|
|
55
|
+
// Default: x402 on Base + Base Sepolia
|
|
56
|
+
const { privateKeyToAccount } = await import("viem/accounts");
|
|
57
|
+
const { createPublicClient, http } = await import("viem");
|
|
58
|
+
const { base, baseSepolia } = await import("viem/chains");
|
|
59
|
+
const { x402Client, wrapFetchWithPayment } = await import("@x402/fetch");
|
|
60
|
+
const { ExactEvmScheme } = await import("@x402/evm/exact/client");
|
|
61
|
+
const { toClientEvmSigner } = await import("@x402/evm");
|
|
62
|
+
const account = privateKeyToAccount(allowance.privateKey);
|
|
63
|
+
const mainnetClient = createPublicClient({ chain: base, transport: http() });
|
|
64
|
+
const sepoliaClient = createPublicClient({ chain: baseSepolia, transport: http() });
|
|
65
|
+
const [mainnetBalance, sepoliaBalance] = await Promise.all([
|
|
66
|
+
checkBalance(mainnetClient, USDC_MAINNET, allowance.address),
|
|
67
|
+
checkBalance(sepoliaClient, USDC_SEPOLIA, allowance.address),
|
|
68
|
+
]);
|
|
69
|
+
const client = new x402Client();
|
|
70
|
+
client.register("eip155:8453", new ExactEvmScheme(toClientEvmSigner(account, mainnetClient)));
|
|
71
|
+
client.register("eip155:84532", new ExactEvmScheme(toClientEvmSigner(account, sepoliaClient)));
|
|
72
|
+
if (mainnetBalance > 0 || sepoliaBalance > 0) {
|
|
73
|
+
// Compare against the requested amount, not > 0. A chain with dust below
|
|
74
|
+
// the request amount would otherwise be picked by x402Client and fail
|
|
75
|
+
// at settlement (silent 402 leak when dust sits on one chain and funds
|
|
76
|
+
// sit on another).
|
|
77
|
+
client.registerPolicy((_version, reqs) => {
|
|
78
|
+
return reqs.filter((r) => {
|
|
79
|
+
const typed = r;
|
|
80
|
+
const required = Number(typed.amount ?? 0);
|
|
81
|
+
if (typed.network === "eip155:8453")
|
|
82
|
+
return mainnetBalance >= required;
|
|
83
|
+
if (typed.network === "eip155:84532")
|
|
84
|
+
return sepoliaBalance >= required;
|
|
85
|
+
return false;
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Read `globalThis.fetch` fresh each call so test suites that swap the
|
|
90
|
+
// global fetch after setupPaidFetch has already run still see their mocks.
|
|
91
|
+
const dynamicFetch = (input, init) => globalThis.fetch(input, init);
|
|
92
|
+
return wrapFetchWithPayment(dynamicFetch, client);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Returns a fetch that lazily initializes the x402 wrapper on first call.
|
|
100
|
+
* This lets the Node `run402()` factory remain synchronous while deferring
|
|
101
|
+
* the (async) on-chain balance check until the first request.
|
|
102
|
+
*/
|
|
103
|
+
export function createLazyPaidFetch() {
|
|
104
|
+
let cached;
|
|
105
|
+
return async (input, init) => {
|
|
106
|
+
if (cached === undefined) {
|
|
107
|
+
cached = await setupPaidFetch();
|
|
108
|
+
}
|
|
109
|
+
// Read `globalThis.fetch` fresh each call so test suites that override
|
|
110
|
+
// it after the SDK is constructed still see their mocks.
|
|
111
|
+
if (cached)
|
|
112
|
+
return cached(input, init);
|
|
113
|
+
return globalThis.fetch(input, init);
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=paid-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paid-fetch.js","sourceRoot":"","sources":["../../src/node/paid-fetch.ts"],"names":[],"mappings":"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"}
|