thirdweb 5.116.0 → 5.116.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/react/core/hooks/x402/useFetchWithPaymentCore.js +5 -1
- package/dist/cjs/react/core/hooks/x402/useFetchWithPaymentCore.js.map +1 -1
- package/dist/cjs/react/native/hooks/x402/useFetchWithPayment.js +6 -1
- package/dist/cjs/react/native/hooks/x402/useFetchWithPayment.js.map +1 -1
- package/dist/cjs/react/web/hooks/x402/useFetchWithPayment.js +7 -1
- package/dist/cjs/react/web/hooks/x402/useFetchWithPayment.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/x402/fetchWithPayment.js +13 -1
- package/dist/cjs/x402/fetchWithPayment.js.map +1 -1
- package/dist/cjs/x402/permitSignatureStorage.js +70 -0
- package/dist/cjs/x402/permitSignatureStorage.js.map +1 -0
- package/dist/cjs/x402/sign.js +51 -4
- package/dist/cjs/x402/sign.js.map +1 -1
- package/dist/esm/react/core/hooks/x402/useFetchWithPaymentCore.js +5 -1
- package/dist/esm/react/core/hooks/x402/useFetchWithPaymentCore.js.map +1 -1
- package/dist/esm/react/native/hooks/x402/useFetchWithPayment.js +6 -1
- package/dist/esm/react/native/hooks/x402/useFetchWithPayment.js.map +1 -1
- package/dist/esm/react/web/hooks/x402/useFetchWithPayment.js +8 -2
- package/dist/esm/react/web/hooks/x402/useFetchWithPayment.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/x402/fetchWithPayment.js +13 -1
- package/dist/esm/x402/fetchWithPayment.js.map +1 -1
- package/dist/esm/x402/permitSignatureStorage.js +65 -0
- package/dist/esm/x402/permitSignatureStorage.js.map +1 -0
- package/dist/esm/x402/sign.js +51 -4
- package/dist/esm/x402/sign.js.map +1 -1
- package/dist/scripts/bridge-widget.js +2 -2
- package/dist/types/react/core/hooks/x402/useFetchWithPaymentCore.d.ts +6 -0
- package/dist/types/react/core/hooks/x402/useFetchWithPaymentCore.d.ts.map +1 -1
- package/dist/types/react/native/hooks/x402/useFetchWithPayment.d.ts +1 -0
- package/dist/types/react/native/hooks/x402/useFetchWithPayment.d.ts.map +1 -1
- package/dist/types/react/web/hooks/x402/useFetchWithPayment.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/x402/fetchWithPayment.d.ts +6 -0
- package/dist/types/x402/fetchWithPayment.d.ts.map +1 -1
- package/dist/types/x402/permitSignatureStorage.d.ts +43 -0
- package/dist/types/x402/permitSignatureStorage.d.ts.map +1 -0
- package/dist/types/x402/sign.d.ts +3 -1
- package/dist/types/x402/sign.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/react/core/hooks/x402/useFetchWithPaymentCore.ts +11 -1
- package/src/react/native/hooks/x402/useFetchWithPayment.ts +6 -1
- package/src/react/web/hooks/x402/useFetchWithPayment.tsx +12 -2
- package/src/version.ts +1 -1
- package/src/x402/fetchWithPayment.ts +21 -0
- package/src/x402/permitSignatureStorage.ts +99 -0
- package/src/x402/sign.ts +76 -1
|
@@ -40,7 +40,11 @@ function useFetchWithPaymentCore(client, options, showErrorModal, showConnectMod
|
|
|
40
40
|
// If no connect modal handler, throw an error
|
|
41
41
|
throw new Error("No wallet connected. Please connect your wallet to make paid API calls.");
|
|
42
42
|
}
|
|
43
|
-
const wrappedFetch = (0, fetchWithPayment_js_1.wrapFetchWithPayment)(globalThis.fetch, client, currentWallet,
|
|
43
|
+
const wrappedFetch = (0, fetchWithPayment_js_1.wrapFetchWithPayment)(globalThis.fetch, client, currentWallet, {
|
|
44
|
+
maxValue: options?.maxValue,
|
|
45
|
+
paymentRequirementsSelector: options?.paymentRequirementsSelector,
|
|
46
|
+
storage: options?.storage,
|
|
47
|
+
});
|
|
44
48
|
const response = await wrappedFetch(input, init);
|
|
45
49
|
// Check if we got a 402 response (payment error)
|
|
46
50
|
if (response.status === 402) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchWithPaymentCore.js","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/x402/useFetchWithPaymentCore.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"useFetchWithPaymentCore.js","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/x402/useFetchWithPaymentCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.useFetchWithPayment = useFetchWithPayment;
|
|
5
|
+
const nativeStorage_js_1 = require("../../../../utils/storage/nativeStorage.js");
|
|
5
6
|
const useFetchWithPaymentCore_js_1 = require("../../../core/hooks/x402/useFetchWithPaymentCore.js");
|
|
6
7
|
/**
|
|
7
8
|
* A React hook that wraps the native fetch API to automatically handle 402 Payment Required responses
|
|
@@ -24,6 +25,7 @@ const useFetchWithPaymentCore_js_1 = require("../../../core/hooks/x402/useFetchW
|
|
|
24
25
|
* @param options.maxValue - The maximum allowed payment amount in base units
|
|
25
26
|
* @param options.paymentRequirementsSelector - Custom function to select payment requirements from available options
|
|
26
27
|
* @param options.parseAs - How to parse the response: "json" (default), "text", or "raw"
|
|
28
|
+
* @param options.storage - Storage for caching permit signatures (for "upto" scheme). Provide your own AsyncStorage implementation for React Native.
|
|
27
29
|
* @returns An object containing:
|
|
28
30
|
* - `fetchWithPayment`: Function to make fetch requests with automatic payment handling (returns parsed data)
|
|
29
31
|
* - `isPending`: Boolean indicating if a request is in progress
|
|
@@ -84,6 +86,9 @@ const useFetchWithPaymentCore_js_1 = require("../../../core/hooks/x402/useFetchW
|
|
|
84
86
|
*/
|
|
85
87
|
function useFetchWithPayment(client, options) {
|
|
86
88
|
// Native version doesn't show modal, errors bubble up naturally
|
|
87
|
-
return (0, useFetchWithPaymentCore_js_1.useFetchWithPaymentCore)(client,
|
|
89
|
+
return (0, useFetchWithPaymentCore_js_1.useFetchWithPaymentCore)(client, {
|
|
90
|
+
...options,
|
|
91
|
+
storage: options?.storage ?? nativeStorage_js_1.nativeLocalStorage,
|
|
92
|
+
});
|
|
88
93
|
}
|
|
89
94
|
//# sourceMappingURL=useFetchWithPayment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/native/hooks/x402/useFetchWithPayment.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/native/hooks/x402/useFetchWithPayment.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AA2Fb,kDASC;AAjGD,iFAAgF;AAChF,oGAG6D;AAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,SAAgB,mBAAmB,CACjC,MAAsB,EACtB,OAAoC;IAEpC,gEAAgE;IAChE,OAAO,IAAA,oDAAuB,EAAC,MAAM,EAAE;QACrC,GAAG,OAAO;QACV,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,qCAAkB;KAChD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.useFetchWithPayment = useFetchWithPayment;
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const react_1 = require("react");
|
|
7
|
+
const webStorage_js_1 = require("../../../../utils/storage/webStorage.js");
|
|
7
8
|
const useFetchWithPaymentCore_js_1 = require("../../../core/hooks/x402/useFetchWithPaymentCore.js");
|
|
8
9
|
const RootElementContext_js_1 = require("../../../core/providers/RootElementContext.js");
|
|
9
10
|
const useConnectModal_js_1 = require("../../ui/ConnectWallet/useConnectModal.js");
|
|
@@ -175,6 +176,11 @@ function useFetchWithPayment(client, options) {
|
|
|
175
176
|
} }));
|
|
176
177
|
}
|
|
177
178
|
: undefined;
|
|
178
|
-
|
|
179
|
+
// Default to webLocalStorage for permit signature caching
|
|
180
|
+
const resolvedOptions = (0, react_1.useMemo)(() => ({
|
|
181
|
+
...(options ?? {}),
|
|
182
|
+
storage: options?.storage ?? webStorage_js_1.webLocalStorage,
|
|
183
|
+
}), [options]);
|
|
184
|
+
return (0, useFetchWithPaymentCore_js_1.useFetchWithPaymentCore)(client, resolvedOptions, showErrorModal, showConnectModal);
|
|
179
185
|
}
|
|
180
186
|
//# sourceMappingURL=useFetchWithPayment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/web/hooks/x402/useFetchWithPayment.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/web/hooks/x402/useFetchWithPayment.tsx"],"names":[],"mappings":"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"}
|
package/dist/cjs/version.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.wrapFetchWithPayment = wrapFetchWithPayment;
|
|
4
4
|
const utils_js_1 = require("../chains/utils.js");
|
|
5
|
+
const address_js_1 = require("../utils/address.js");
|
|
6
|
+
const webStorage_js_1 = require("../utils/storage/webStorage.js");
|
|
7
|
+
const permitSignatureStorage_js_1 = require("./permitSignatureStorage.js");
|
|
5
8
|
const schemas_js_1 = require("./schemas.js");
|
|
6
9
|
const sign_js_1 = require("./sign.js");
|
|
7
10
|
/**
|
|
@@ -80,7 +83,7 @@ function wrapFetchWithPayment(fetch, client, wallet, options) {
|
|
|
80
83
|
throw new Error(`Failed to switch chain (${paymentChainId})`);
|
|
81
84
|
}
|
|
82
85
|
}
|
|
83
|
-
const paymentHeader = await (0, sign_js_1.createPaymentHeader)(client, account, selectedPaymentRequirements, x402Version);
|
|
86
|
+
const paymentHeader = await (0, sign_js_1.createPaymentHeader)(client, account, selectedPaymentRequirements, x402Version, options?.storage ?? webStorage_js_1.webLocalStorage);
|
|
84
87
|
const initParams = init || {};
|
|
85
88
|
if (initParams.__is402Retry) {
|
|
86
89
|
throw new Error("Payment already attempted");
|
|
@@ -95,6 +98,15 @@ function wrapFetchWithPayment(fetch, client, wallet, options) {
|
|
|
95
98
|
__is402Retry: true,
|
|
96
99
|
};
|
|
97
100
|
const secondResponse = await fetch(input, newInit);
|
|
101
|
+
// If payment was rejected (still 402), clear cached signature
|
|
102
|
+
if (secondResponse.status === 402 && options?.storage) {
|
|
103
|
+
await (0, permitSignatureStorage_js_1.clearPermitSignatureFromCache)(options.storage, {
|
|
104
|
+
chainId: paymentChainId,
|
|
105
|
+
asset: selectedPaymentRequirements.asset,
|
|
106
|
+
owner: (0, address_js_1.getAddress)(account.address),
|
|
107
|
+
spender: (0, address_js_1.getAddress)(selectedPaymentRequirements.payTo),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
98
110
|
return secondResponse;
|
|
99
111
|
};
|
|
100
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchWithPayment.js","sourceRoot":"","sources":["../../../src/x402/fetchWithPayment.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"fetchWithPayment.js","sourceRoot":"","sources":["../../../src/x402/fetchWithPayment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPermitSignatureFromCache = getPermitSignatureFromCache;
|
|
4
|
+
exports.savePermitSignatureToCache = savePermitSignatureToCache;
|
|
5
|
+
exports.clearPermitSignatureFromCache = clearPermitSignatureFromCache;
|
|
6
|
+
const CACHE_KEY_PREFIX = "x402:permit";
|
|
7
|
+
/**
|
|
8
|
+
* Generates a cache key for permit signature storage
|
|
9
|
+
* @param params - The parameters to generate the cache key from
|
|
10
|
+
* @returns The cache key string
|
|
11
|
+
*/
|
|
12
|
+
function getPermitCacheKey(params) {
|
|
13
|
+
return `${CACHE_KEY_PREFIX}:${params.chainId}:${params.asset.toLowerCase()}:${params.owner.toLowerCase()}:${params.spender.toLowerCase()}`;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Retrieves a cached permit signature from storage
|
|
17
|
+
* @param storage - The AsyncStorage instance to use
|
|
18
|
+
* @param params - The parameters identifying the cached signature
|
|
19
|
+
* @returns The cached signature data or null if not found
|
|
20
|
+
*/
|
|
21
|
+
async function getPermitSignatureFromCache(storage, params) {
|
|
22
|
+
try {
|
|
23
|
+
const key = getPermitCacheKey(params);
|
|
24
|
+
const cached = await storage.getItem(key);
|
|
25
|
+
if (!cached) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return JSON.parse(cached);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Saves a permit signature to storage cache
|
|
36
|
+
* @param storage - The AsyncStorage instance to use
|
|
37
|
+
* @param params - The parameters identifying the signature
|
|
38
|
+
* @param payload - The signed payment payload to cache
|
|
39
|
+
* @param deadline - The deadline timestamp of the permit
|
|
40
|
+
* @param maxAmount - The maximum amount authorized
|
|
41
|
+
*/
|
|
42
|
+
async function savePermitSignatureToCache(storage, params, payload, deadline, maxAmount) {
|
|
43
|
+
try {
|
|
44
|
+
const key = getPermitCacheKey(params);
|
|
45
|
+
const data = {
|
|
46
|
+
payload,
|
|
47
|
+
deadline,
|
|
48
|
+
maxAmount,
|
|
49
|
+
};
|
|
50
|
+
await storage.setItem(key, JSON.stringify(data));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Silently fail - caching is optional
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Clears a cached permit signature from storage
|
|
58
|
+
* @param storage - The AsyncStorage instance to use
|
|
59
|
+
* @param params - The parameters identifying the cached signature
|
|
60
|
+
*/
|
|
61
|
+
async function clearPermitSignatureFromCache(storage, params) {
|
|
62
|
+
try {
|
|
63
|
+
const key = getPermitCacheKey(params);
|
|
64
|
+
await storage.removeItem(key);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Silently fail
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=permitSignatureStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permitSignatureStorage.js","sourceRoot":"","sources":["../../../src/x402/permitSignatureStorage.ts"],"names":[],"mappings":";;AAuCA,kEAcC;AAUD,gEAkBC;AAOD,sEAUC;AA5ED,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,MAA4B;IACrD,OAAO,GAAG,gBAAgB,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAC7I,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,2BAA2B,CAC/C,OAAqB,EACrB,MAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAA0B,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,0BAA0B,CAC9C,OAAqB,EACrB,MAA4B,EAC5B,OAAgC,EAChC,QAAgB,EAChB,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,GAA0B;YAClC,OAAO;YACP,QAAQ;YACR,SAAS;SACV,CAAC;QACF,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,6BAA6B,CACjD,OAAqB,EACrB,MAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC"}
|
package/dist/cjs/x402/sign.js
CHANGED
|
@@ -4,11 +4,13 @@ exports.createPaymentHeader = createPaymentHeader;
|
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
5
|
const utils_js_1 = require("../chains/utils.js");
|
|
6
6
|
const contract_js_1 = require("../contract/contract.js");
|
|
7
|
+
const allowance_js_1 = require("../extensions/erc20/__generated__/IERC20/read/allowance.js");
|
|
7
8
|
const nonces_js_1 = require("../extensions/erc20/__generated__/IERC20Permit/read/nonces.js");
|
|
8
9
|
const address_js_1 = require("../utils/address.js");
|
|
9
10
|
const hex_js_1 = require("../utils/encoding/hex.js");
|
|
10
11
|
const common_js_1 = require("./common.js");
|
|
11
12
|
const encode_js_1 = require("./encode.js");
|
|
13
|
+
const permitSignatureStorage_js_1 = require("./permitSignatureStorage.js");
|
|
12
14
|
const schemas_js_1 = require("./schemas.js");
|
|
13
15
|
/**
|
|
14
16
|
* Prepares an unsigned payment header with the given sender address and payment requirements.
|
|
@@ -44,9 +46,10 @@ function preparePaymentHeader(from, x402Version, paymentRequirements, nonce) {
|
|
|
44
46
|
* @param client - The signer wallet instance used to sign the payment header
|
|
45
47
|
* @param paymentRequirements - The payment requirements containing scheme and network information
|
|
46
48
|
* @param unsignedPaymentHeader - The unsigned payment payload to be signed
|
|
49
|
+
* @param storage - Optional storage for caching permit signatures (for "upto" scheme)
|
|
47
50
|
* @returns A promise that resolves to the signed payment payload
|
|
48
51
|
*/
|
|
49
|
-
async function signPaymentHeader(client, account, paymentRequirements, x402Version) {
|
|
52
|
+
async function signPaymentHeader(client, account, paymentRequirements, x402Version, storage) {
|
|
50
53
|
const from = (0, address_js_1.getAddress)(account.address);
|
|
51
54
|
const caip2ChainId = (0, schemas_js_1.networkToCaip2ChainId)(paymentRequirements.network);
|
|
52
55
|
const chainId = (0, schemas_js_1.extractEvmChainId)(caip2ChainId);
|
|
@@ -62,6 +65,44 @@ async function signPaymentHeader(client, account, paymentRequirements, x402Versi
|
|
|
62
65
|
});
|
|
63
66
|
switch (supportedSignatureType) {
|
|
64
67
|
case "Permit": {
|
|
68
|
+
const shouldCache = paymentRequirements.scheme === "upto" && storage !== undefined;
|
|
69
|
+
const spender = (0, address_js_1.getAddress)(paymentRequirements.payTo);
|
|
70
|
+
const cacheParams = {
|
|
71
|
+
chainId,
|
|
72
|
+
asset: paymentRequirements.asset,
|
|
73
|
+
owner: from,
|
|
74
|
+
spender,
|
|
75
|
+
};
|
|
76
|
+
// Try to reuse cached signature for "upto" scheme
|
|
77
|
+
if (shouldCache && storage) {
|
|
78
|
+
const cached = await (0, permitSignatureStorage_js_1.getPermitSignatureFromCache)(storage, cacheParams);
|
|
79
|
+
if (cached) {
|
|
80
|
+
// Validate deadline hasn't passed
|
|
81
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
82
|
+
if (BigInt(cached.deadline) > now) {
|
|
83
|
+
// Check on-chain allowance
|
|
84
|
+
const currentAllowance = await (0, allowance_js_1.allowance)({
|
|
85
|
+
contract: (0, contract_js_1.getContract)({
|
|
86
|
+
address: paymentRequirements.asset,
|
|
87
|
+
chain: (0, utils_js_1.getCachedChain)(chainId),
|
|
88
|
+
client,
|
|
89
|
+
}),
|
|
90
|
+
owner: from,
|
|
91
|
+
spender,
|
|
92
|
+
});
|
|
93
|
+
// Determine threshold - use minAmountRequired if present, else maxAmountRequired
|
|
94
|
+
const extra = paymentRequirements.extra;
|
|
95
|
+
const threshold = extra?.minAmountRequired
|
|
96
|
+
? BigInt(extra.minAmountRequired)
|
|
97
|
+
: BigInt(paymentRequirements.maxAmountRequired);
|
|
98
|
+
// If allowance >= threshold, reuse signature
|
|
99
|
+
if (currentAllowance >= threshold) {
|
|
100
|
+
return cached.payload;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Generate new signature
|
|
65
106
|
const nonce = await (0, nonces_js_1.nonces)({
|
|
66
107
|
contract: (0, contract_js_1.getContract)({
|
|
67
108
|
address: paymentRequirements.asset,
|
|
@@ -72,13 +113,18 @@ async function signPaymentHeader(client, account, paymentRequirements, x402Versi
|
|
|
72
113
|
});
|
|
73
114
|
const unsignedPaymentHeader = preparePaymentHeader(from, x402Version, paymentRequirements, (0, hex_js_1.toHex)(nonce, { size: 32 }));
|
|
74
115
|
const { signature } = await signERC2612Permit(account, unsignedPaymentHeader.payload.authorization, paymentRequirements);
|
|
75
|
-
|
|
116
|
+
const signedPayload = {
|
|
76
117
|
...unsignedPaymentHeader,
|
|
77
118
|
payload: {
|
|
78
119
|
...unsignedPaymentHeader.payload,
|
|
79
120
|
signature,
|
|
80
121
|
},
|
|
81
122
|
};
|
|
123
|
+
// Cache the signature for "upto" scheme
|
|
124
|
+
if (shouldCache && storage) {
|
|
125
|
+
await (0, permitSignatureStorage_js_1.savePermitSignatureToCache)(storage, cacheParams, signedPayload, unsignedPaymentHeader.payload.authorization.validBefore, paymentRequirements.maxAmountRequired);
|
|
126
|
+
}
|
|
127
|
+
return signedPayload;
|
|
82
128
|
}
|
|
83
129
|
case "TransferWithAuthorization": {
|
|
84
130
|
// default to transfer with authorization
|
|
@@ -103,10 +149,11 @@ async function signPaymentHeader(client, account, paymentRequirements, x402Versi
|
|
|
103
149
|
* @param client - The signer wallet instance used to create the payment header
|
|
104
150
|
* @param x402Version - The version of the X402 protocol to use
|
|
105
151
|
* @param paymentRequirements - The payment requirements containing scheme and network information
|
|
152
|
+
* @param storage - Optional storage for caching permit signatures (for "upto" scheme)
|
|
106
153
|
* @returns A promise that resolves to the encoded payment header string
|
|
107
154
|
*/
|
|
108
|
-
async function createPaymentHeader(client, account, paymentRequirements, x402Version) {
|
|
109
|
-
const payment = await signPaymentHeader(client, account, paymentRequirements, x402Version);
|
|
155
|
+
async function createPaymentHeader(client, account, paymentRequirements, x402Version, storage) {
|
|
156
|
+
const payment = await signPaymentHeader(client, account, paymentRequirements, x402Version, storage);
|
|
110
157
|
return (0, encode_js_1.encodePayment)(payment);
|
|
111
158
|
}
|
|
112
159
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../../../src/x402/sign.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../../../src/x402/sign.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,11 @@ export function useFetchWithPaymentCore(client, options, showErrorModal, showCon
|
|
|
37
37
|
// If no connect modal handler, throw an error
|
|
38
38
|
throw new Error("No wallet connected. Please connect your wallet to make paid API calls.");
|
|
39
39
|
}
|
|
40
|
-
const wrappedFetch = wrapFetchWithPayment(globalThis.fetch, client, currentWallet,
|
|
40
|
+
const wrappedFetch = wrapFetchWithPayment(globalThis.fetch, client, currentWallet, {
|
|
41
|
+
maxValue: options?.maxValue,
|
|
42
|
+
paymentRequirementsSelector: options?.paymentRequirementsSelector,
|
|
43
|
+
storage: options?.storage,
|
|
44
|
+
});
|
|
41
45
|
const response = await wrappedFetch(input, init);
|
|
42
46
|
// Check if we got a 402 response (payment error)
|
|
43
47
|
if (response.status === 402) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchWithPaymentCore.js","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/x402/useFetchWithPaymentCore.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useFetchWithPaymentCore.js","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/x402/useFetchWithPaymentCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { nativeLocalStorage } from "../../../../utils/storage/nativeStorage.js";
|
|
2
3
|
import { useFetchWithPaymentCore, } from "../../../core/hooks/x402/useFetchWithPaymentCore.js";
|
|
3
4
|
/**
|
|
4
5
|
* A React hook that wraps the native fetch API to automatically handle 402 Payment Required responses
|
|
@@ -21,6 +22,7 @@ import { useFetchWithPaymentCore, } from "../../../core/hooks/x402/useFetchWithP
|
|
|
21
22
|
* @param options.maxValue - The maximum allowed payment amount in base units
|
|
22
23
|
* @param options.paymentRequirementsSelector - Custom function to select payment requirements from available options
|
|
23
24
|
* @param options.parseAs - How to parse the response: "json" (default), "text", or "raw"
|
|
25
|
+
* @param options.storage - Storage for caching permit signatures (for "upto" scheme). Provide your own AsyncStorage implementation for React Native.
|
|
24
26
|
* @returns An object containing:
|
|
25
27
|
* - `fetchWithPayment`: Function to make fetch requests with automatic payment handling (returns parsed data)
|
|
26
28
|
* - `isPending`: Boolean indicating if a request is in progress
|
|
@@ -81,6 +83,9 @@ import { useFetchWithPaymentCore, } from "../../../core/hooks/x402/useFetchWithP
|
|
|
81
83
|
*/
|
|
82
84
|
export function useFetchWithPayment(client, options) {
|
|
83
85
|
// Native version doesn't show modal, errors bubble up naturally
|
|
84
|
-
return useFetchWithPaymentCore(client,
|
|
86
|
+
return useFetchWithPaymentCore(client, {
|
|
87
|
+
...options,
|
|
88
|
+
storage: options?.storage ?? nativeLocalStorage,
|
|
89
|
+
});
|
|
85
90
|
}
|
|
86
91
|
//# sourceMappingURL=useFetchWithPayment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/native/hooks/x402/useFetchWithPayment.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAEL,uBAAuB,GACxB,MAAM,qDAAqD,CAAC;AAI7D
|
|
1
|
+
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/native/hooks/x402/useFetchWithPayment.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAEL,uBAAuB,GACxB,MAAM,qDAAqD,CAAC;AAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAsB,EACtB,OAAoC;IAEpC,gEAAgE;IAChE,OAAO,uBAAuB,CAAC,MAAM,EAAE;QACrC,GAAG,OAAO;QACV,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,kBAAkB;KAChD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useContext } from "react";
|
|
3
|
+
import { useContext, useMemo } from "react";
|
|
4
|
+
import { webLocalStorage } from "../../../../utils/storage/webStorage.js";
|
|
4
5
|
import { useFetchWithPaymentCore, } from "../../../core/hooks/x402/useFetchWithPaymentCore.js";
|
|
5
6
|
import { SetRootElementContext } from "../../../core/providers/RootElementContext.js";
|
|
6
7
|
import { useConnectModal, } from "../../ui/ConnectWallet/useConnectModal.js";
|
|
@@ -172,6 +173,11 @@ export function useFetchWithPayment(client, options) {
|
|
|
172
173
|
} }));
|
|
173
174
|
}
|
|
174
175
|
: undefined;
|
|
175
|
-
|
|
176
|
+
// Default to webLocalStorage for permit signature caching
|
|
177
|
+
const resolvedOptions = useMemo(() => ({
|
|
178
|
+
...(options ?? {}),
|
|
179
|
+
storage: options?.storage ?? webLocalStorage,
|
|
180
|
+
}), [options]);
|
|
181
|
+
return useFetchWithPaymentCore(client, resolvedOptions, showErrorModal, showConnectModal);
|
|
176
182
|
}
|
|
177
183
|
//# sourceMappingURL=useFetchWithPayment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/web/hooks/x402/useFetchWithPayment.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/web/hooks/x402/useFetchWithPayment.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = "5.116.
|
|
1
|
+
export const version = "5.116.1";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { getCachedChain } from "../chains/utils.js";
|
|
2
|
+
import { getAddress } from "../utils/address.js";
|
|
3
|
+
import { webLocalStorage } from "../utils/storage/webStorage.js";
|
|
4
|
+
import { clearPermitSignatureFromCache } from "./permitSignatureStorage.js";
|
|
2
5
|
import { extractEvmChainId, networkToCaip2ChainId, RequestedPaymentRequirementsSchema, } from "./schemas.js";
|
|
3
6
|
import { createPaymentHeader } from "./sign.js";
|
|
4
7
|
/**
|
|
@@ -77,7 +80,7 @@ export function wrapFetchWithPayment(fetch, client, wallet, options) {
|
|
|
77
80
|
throw new Error(`Failed to switch chain (${paymentChainId})`);
|
|
78
81
|
}
|
|
79
82
|
}
|
|
80
|
-
const paymentHeader = await createPaymentHeader(client, account, selectedPaymentRequirements, x402Version);
|
|
83
|
+
const paymentHeader = await createPaymentHeader(client, account, selectedPaymentRequirements, x402Version, options?.storage ?? webLocalStorage);
|
|
81
84
|
const initParams = init || {};
|
|
82
85
|
if (initParams.__is402Retry) {
|
|
83
86
|
throw new Error("Payment already attempted");
|
|
@@ -92,6 +95,15 @@ export function wrapFetchWithPayment(fetch, client, wallet, options) {
|
|
|
92
95
|
__is402Retry: true,
|
|
93
96
|
};
|
|
94
97
|
const secondResponse = await fetch(input, newInit);
|
|
98
|
+
// If payment was rejected (still 402), clear cached signature
|
|
99
|
+
if (secondResponse.status === 402 && options?.storage) {
|
|
100
|
+
await clearPermitSignatureFromCache(options.storage, {
|
|
101
|
+
chainId: paymentChainId,
|
|
102
|
+
asset: selectedPaymentRequirements.asset,
|
|
103
|
+
owner: getAddress(account.address),
|
|
104
|
+
spender: getAddress(selectedPaymentRequirements.payTo),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
95
107
|
return secondResponse;
|
|
96
108
|
};
|
|
97
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchWithPayment.js","sourceRoot":"","sources":["../../../src/x402/fetchWithPayment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"fetchWithPayment.js","sourceRoot":"","sources":["../../../src/x402/fetchWithPayment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const CACHE_KEY_PREFIX = "x402:permit";
|
|
2
|
+
/**
|
|
3
|
+
* Generates a cache key for permit signature storage
|
|
4
|
+
* @param params - The parameters to generate the cache key from
|
|
5
|
+
* @returns The cache key string
|
|
6
|
+
*/
|
|
7
|
+
function getPermitCacheKey(params) {
|
|
8
|
+
return `${CACHE_KEY_PREFIX}:${params.chainId}:${params.asset.toLowerCase()}:${params.owner.toLowerCase()}:${params.spender.toLowerCase()}`;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves a cached permit signature from storage
|
|
12
|
+
* @param storage - The AsyncStorage instance to use
|
|
13
|
+
* @param params - The parameters identifying the cached signature
|
|
14
|
+
* @returns The cached signature data or null if not found
|
|
15
|
+
*/
|
|
16
|
+
export async function getPermitSignatureFromCache(storage, params) {
|
|
17
|
+
try {
|
|
18
|
+
const key = getPermitCacheKey(params);
|
|
19
|
+
const cached = await storage.getItem(key);
|
|
20
|
+
if (!cached) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return JSON.parse(cached);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Saves a permit signature to storage cache
|
|
31
|
+
* @param storage - The AsyncStorage instance to use
|
|
32
|
+
* @param params - The parameters identifying the signature
|
|
33
|
+
* @param payload - The signed payment payload to cache
|
|
34
|
+
* @param deadline - The deadline timestamp of the permit
|
|
35
|
+
* @param maxAmount - The maximum amount authorized
|
|
36
|
+
*/
|
|
37
|
+
export async function savePermitSignatureToCache(storage, params, payload, deadline, maxAmount) {
|
|
38
|
+
try {
|
|
39
|
+
const key = getPermitCacheKey(params);
|
|
40
|
+
const data = {
|
|
41
|
+
payload,
|
|
42
|
+
deadline,
|
|
43
|
+
maxAmount,
|
|
44
|
+
};
|
|
45
|
+
await storage.setItem(key, JSON.stringify(data));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Silently fail - caching is optional
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Clears a cached permit signature from storage
|
|
53
|
+
* @param storage - The AsyncStorage instance to use
|
|
54
|
+
* @param params - The parameters identifying the cached signature
|
|
55
|
+
*/
|
|
56
|
+
export async function clearPermitSignatureFromCache(storage, params) {
|
|
57
|
+
try {
|
|
58
|
+
const key = getPermitCacheKey(params);
|
|
59
|
+
await storage.removeItem(key);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Silently fail
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=permitSignatureStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permitSignatureStorage.js","sourceRoot":"","sources":["../../../src/x402/permitSignatureStorage.ts"],"names":[],"mappings":"AAsBA,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,MAA4B;IACrD,OAAO,GAAG,gBAAgB,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAC7I,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAAqB,EACrB,MAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAA0B,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAqB,EACrB,MAA4B,EAC5B,OAAgC,EAChC,QAAgB,EAChB,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,GAA0B;YAClC,OAAO;YACP,QAAQ;YACR,SAAS;SACV,CAAC;QACF,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAqB,EACrB,MAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC"}
|