thirdweb 5.121.1 → 5.121.3
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 +1 -0
- package/dist/cjs/react/core/hooks/x402/useFetchWithPaymentCore.js.map +1 -1
- package/dist/cjs/react/native/hooks/x402/useFetchWithPayment.js +1 -1
- package/dist/cjs/react/web/hooks/x402/useFetchWithPayment.js +2 -2
- package/dist/cjs/react/web/hooks/x402/useFetchWithPayment.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/common/token-query.js +4 -1
- package/dist/cjs/react/web/ui/Bridge/common/token-query.js.map +1 -1
- package/dist/cjs/react/web/ui/x402/PaymentErrorModal.js +4 -4
- package/dist/cjs/react/web/ui/x402/PaymentErrorModal.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/x402/encode.js +41 -2
- package/dist/cjs/x402/encode.js.map +1 -1
- package/dist/cjs/x402/fetchWithPayment.js +56 -33
- package/dist/cjs/x402/fetchWithPayment.js.map +1 -1
- package/dist/cjs/x402/schemas.js +134 -2
- package/dist/cjs/x402/schemas.js.map +1 -1
- package/dist/cjs/x402/sign.js +56 -15
- package/dist/cjs/x402/sign.js.map +1 -1
- package/dist/esm/react/core/hooks/x402/useFetchWithPaymentCore.js +2 -1
- package/dist/esm/react/core/hooks/x402/useFetchWithPaymentCore.js.map +1 -1
- package/dist/esm/react/native/hooks/x402/useFetchWithPayment.js +1 -1
- package/dist/esm/react/web/hooks/x402/useFetchWithPayment.js +2 -2
- package/dist/esm/react/web/hooks/x402/useFetchWithPayment.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/common/token-query.js +4 -1
- package/dist/esm/react/web/ui/Bridge/common/token-query.js.map +1 -1
- package/dist/esm/react/web/ui/x402/PaymentErrorModal.js +5 -5
- package/dist/esm/react/web/ui/x402/PaymentErrorModal.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/x402/encode.js +40 -2
- package/dist/esm/x402/encode.js.map +1 -1
- package/dist/esm/x402/fetchWithPayment.js +57 -35
- package/dist/esm/x402/fetchWithPayment.js.map +1 -1
- package/dist/esm/x402/schemas.js +129 -1
- package/dist/esm/x402/schemas.js.map +1 -1
- package/dist/esm/x402/sign.js +57 -16
- package/dist/esm/x402/sign.js.map +1 -1
- package/dist/scripts/bridge-widget.js +3 -3
- package/dist/types/react/core/hooks/x402/useFetchWithPaymentCore.d.ts +1 -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 -1
- package/dist/types/react/web/hooks/x402/useFetchWithPayment.d.ts +1 -1
- package/dist/types/react/web/hooks/x402/useFetchWithPayment.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/common/token-query.d.ts.map +1 -1
- package/dist/types/react/web/ui/x402/PaymentErrorModal.d.ts +1 -0
- package/dist/types/react/web/ui/x402/PaymentErrorModal.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/x402/encode.d.ts +7 -0
- package/dist/types/x402/encode.d.ts.map +1 -1
- package/dist/types/x402/fetchWithPayment.d.ts +10 -1
- package/dist/types/x402/fetchWithPayment.d.ts.map +1 -1
- package/dist/types/x402/schemas.d.ts +60 -2
- package/dist/types/x402/schemas.d.ts.map +1 -1
- package/dist/types/x402/sign.d.ts +13 -1
- package/dist/types/x402/sign.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/contract/actions/resolve-abi.test.ts +3 -5
- package/src/extensions/airdrop/write/airdropERC721WithSignature.test.ts +4 -5
- package/src/extensions/erc1155/drop1155.test.ts +1 -1
- package/src/extensions/erc1155/write/sigMint1155.test.ts +189 -187
- package/src/extensions/erc20/drop20.test.ts +1 -1
- package/src/extensions/erc721/write/sigMint721.test.ts +4 -6
- package/src/extensions/modules/ClaimableERC1155/claimableERC1155.test.ts +180 -178
- package/src/extensions/modules/ClaimableERC20/claimableERC20.test.ts +1 -1
- package/src/extensions/modules/ClaimableERC721/claimableERC721.test.ts +1 -1
- package/src/extensions/prebuilts/process-ref-deployments.test.ts +1 -1
- package/src/react/core/hooks/x402/useFetchWithPaymentCore.ts +6 -1
- package/src/react/native/hooks/x402/useFetchWithPayment.ts +1 -1
- package/src/react/web/hooks/x402/useFetchWithPayment.tsx +3 -1
- package/src/react/web/ui/Bridge/common/token-query.test.tsx +117 -0
- package/src/react/web/ui/Bridge/common/token-query.ts +4 -1
- package/src/react/web/ui/x402/PaymentErrorModal.tsx +9 -4
- package/src/version.ts +1 -1
- package/src/x402/encode.ts +46 -2
- package/src/x402/fetchWithPayment.test.ts +1173 -104
- package/src/x402/fetchWithPayment.ts +72 -54
- package/src/x402/schemas.test.ts +123 -0
- package/src/x402/schemas.ts +199 -6
- package/src/x402/sign.ts +86 -10
|
@@ -55,6 +55,7 @@ function useFetchWithPaymentCore(client, options, showErrorModal, showConnectMod
|
|
|
55
55
|
return new Promise((resolve, reject) => {
|
|
56
56
|
showErrorModal({
|
|
57
57
|
errorData: errorBody,
|
|
58
|
+
requestUrl: (0, fetchWithPayment_js_1.getRequestUrl)(input),
|
|
58
59
|
onRetry: async () => {
|
|
59
60
|
// Retry the entire fetch+error handling logic recursively
|
|
60
61
|
// Pass currentWallet to avoid re-showing connect modal with stale wallet state
|
|
@@ -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":";AAAA,YAAY,CAAC;;AA4Cb,0DAuHC;AAjKD,uDAAoD;AAIpD,8EAG8C;AAG9C,sEAAgE;AA2BhE;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,MAAsB,EACtB,OAAoC,EACpC,cAAuC,EACvC,gBAA2C;IAE3C,MAAM,MAAM,GAAG,IAAA,oCAAe,GAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,IAAA,yBAAW,EAAC;QAC3B,UAAU,EAAE,KAAK,EAAE,EACjB,KAAK,EACL,IAAI,GAIL,EAAE,EAAE;YACH,4DAA4D;YAC5D,MAAM,YAAY,GAAG,KAAK,EAAE,aAAa,GAAG,MAAM,EAAoB,EAAE;gBACtE,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,iEAAiE;oBACjE,IAAI,gBAAgB,EAAE,CAAC;wBACrB,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;4BAC9C,gBAAgB,CAAC;gCACf,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;oCAC7B,oEAAoE;oCACpE,IAAI,CAAC;wCACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;wCAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;oCAClB,CAAC;oCAAC,OAAO,KAAK,EAAE,CAAC;wCACf,MAAM,CAAC,KAAK,CAAC,CAAC;oCAChB,CAAC;gCACH,CAAC;gCACD,QAAQ,EAAE,GAAG,EAAE;oCACb,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;gCAC3D,CAAC;6BACF,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACL,CAAC;oBAED,8CAA8C;oBAC9C,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;gBACJ,CAAC;gBAED,MAAM,YAAY,GAAG,IAAA,0CAAoB,EACvC,UAAU,CAAC,KAAK,EAChB,MAAM,EACN,aAAa,EACb;oBACE,QAAQ,EAAE,OAAO,EAAE,QAAQ;oBAC3B,2BAA2B,EAAE,OAAO,EAAE,2BAA2B;oBACjE,OAAO,EAAE,OAAO,EAAE,OAAO;iBAC1B,CACF,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAEjD,iDAAiD;gBACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,SAAS,GACb,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0C,CAAC;wBAEnE,yEAAyE;wBACzE,IAAI,cAAc,EAAE,CAAC;4BACnB,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gCAC9C,cAAc,CAAC;oCACb,SAAS,EAAE,SAAS;oCACpB,UAAU,EAAE,IAAA,mCAAa,EAAC,KAAK,CAAC;oCAChC,OAAO,EAAE,KAAK,IAAI,EAAE;wCAClB,0DAA0D;wCAC1D,+EAA+E;wCAC/E,IAAI,CAAC;4CACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,CAAC;4CACjD,OAAO,CAAC,MAAM,CAAC,CAAC;wCAClB,CAAC;wCAAC,OAAO,KAAK,EAAE,CAAC;4CACf,MAAM,CAAC,KAAK,CAAC,CAAC;wCAChB,CAAC;oCACH,CAAC;oCACD,QAAQ,EAAE,GAAG,EAAE;wCACb,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;oCACjD,CAAC;iCACF,CAAC,CAAC;4BACL,CAAC,CAAC,CAAC;wBACL,CAAC;wBAED,oDAAoD;wBACpD,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,YAAY,IAAI,mBAAmB,SAAS,CAAC,KAAK,EAAE,CAC/D,CAAC;oBACJ,CAAC;oBAAC,OAAO,WAAW,EAAE,CAAC;wBACrB,0DAA0D;wBAC1D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBACpD,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACxC,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,SAAS,IAAI,eAAe,EAAE,CACzG,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC;gBAC3C,OAAO,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC,CAAC;YAEF,0BAA0B;YAC1B,OAAO,YAAY,EAAE,CAAC;QACxB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,gBAAgB,EAAE,KAAK,EAAE,KAAkB,EAAE,IAAkB,EAAE,EAAE;YACjE,OAAO,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAkB,EAAE,OAAgC;IACzE,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;SAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
|
|
@@ -22,7 +22,7 @@ const useFetchWithPaymentCore_js_1 = require("../../../core/hooks/x402/useFetchW
|
|
|
22
22
|
*
|
|
23
23
|
* @param client - The thirdweb client used to access RPC infrastructure
|
|
24
24
|
* @param options - Optional configuration for payment handling
|
|
25
|
-
* @param options.maxValue - The maximum allowed payment amount in base units
|
|
25
|
+
* @param options.maxValue - The maximum allowed payment amount in base units. `0n` only allows zero-amount payments
|
|
26
26
|
* @param options.paymentRequirementsSelector - Custom function to select payment requirements from available options
|
|
27
27
|
* @param options.parseAs - How to parse the response: "json" (default), "text", or "raw"
|
|
28
28
|
* @param options.storage - Storage for caching permit signatures (for "upto" scheme). Provide your own AsyncStorage implementation for React Native.
|
|
@@ -28,7 +28,7 @@ const SignInRequiredModal_js_1 = require("../../ui/x402/SignInRequiredModal.js")
|
|
|
28
28
|
*
|
|
29
29
|
* @param client - The thirdweb client used to access RPC infrastructure
|
|
30
30
|
* @param options - Optional configuration for payment handling
|
|
31
|
-
* @param options.maxValue - The maximum allowed payment amount in base units
|
|
31
|
+
* @param options.maxValue - The maximum allowed payment amount in base units. `0n` only allows zero-amount payments
|
|
32
32
|
* @param options.paymentRequirementsSelector - Custom function to select payment requirements from available options
|
|
33
33
|
* @param options.parseAs - How to parse the response: "json" (default), "text", or "raw"
|
|
34
34
|
* @param options.uiEnabled - Whether to show the UI for connection, funding or payment retries (defaults to true). Set to false to handle errors yourself
|
|
@@ -141,7 +141,7 @@ function useFetchWithPayment(client, options) {
|
|
|
141
141
|
const showModal = options?.uiEnabled !== false; // Default to true
|
|
142
142
|
const showErrorModal = showModal
|
|
143
143
|
? (data) => {
|
|
144
|
-
setRootEl((0, jsx_runtime_1.jsx)(PaymentErrorModal_js_1.PaymentErrorModal, { client: client, errorData: data.errorData, onCancel: () => {
|
|
144
|
+
setRootEl((0, jsx_runtime_1.jsx)(PaymentErrorModal_js_1.PaymentErrorModal, { client: client, errorData: data.errorData, requestUrl: data.requestUrl, onCancel: () => {
|
|
145
145
|
setRootEl(null);
|
|
146
146
|
data.onCancel();
|
|
147
147
|
}, onRetry: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/web/hooks/x402/useFetchWithPayment.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AA0Lb,
|
|
1
|
+
{"version":3,"file":"useFetchWithPayment.js","sourceRoot":"","sources":["../../../../../../src/react/web/hooks/x402/useFetchWithPayment.tsx"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,10 @@ function useTokenQuery(params) {
|
|
|
13
13
|
}
|
|
14
14
|
const tokenAddress = params.tokenAddress || addresses_js_1.NATIVE_TOKEN_ADDRESS;
|
|
15
15
|
const token = await (0, get_token_js_1.getToken)(params.client, tokenAddress, params.chainId).catch((err) => {
|
|
16
|
-
err.message.includes("not supported")
|
|
16
|
+
if (err instanceof Error && err.message.includes("not supported")) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
throw err;
|
|
17
20
|
});
|
|
18
21
|
if (!token) {
|
|
19
22
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-query.js","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/common/token-query.ts"],"names":[],"mappings":";;AAYA,
|
|
1
|
+
{"version":3,"file":"token-query.js","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/common/token-query.ts"],"names":[],"mappings":";;AAYA,sCAuCC;AAnDD,uDAAiD;AAGjD,wEAA6E;AAC7E,0EAAmE;AAQnE,SAAgB,aAAa,CAAC,MAI7B;IACC,OAAO,IAAA,sBAAQ,EAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;QACzB,OAAO,EAAE,KAAK,IAA+B,EAAE;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,mCAAoB,CAAC;YACjE,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAQ,EAC1B,MAAM,CAAC,MAAM,EACb,YAAY,EACZ,MAAM,CAAC,OAAO,CACf,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACd,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;oBAClE,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;oBACL,IAAI,EAAE,mBAAmB;iBAC1B,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,SAAS;aAChB,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACrC,oBAAoB,EAAE,KAAK;QAC3B,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,KAAK;KAC1B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -18,17 +18,17 @@ const text_js_1 = require("../components/text.js");
|
|
|
18
18
|
* @internal
|
|
19
19
|
*/
|
|
20
20
|
function PaymentErrorModal(props) {
|
|
21
|
-
const { client, errorData, onRetry, onCancel, theme, fundWalletOptions, paymentRequirementsSelector, } = props;
|
|
21
|
+
const { client, errorData, requestUrl, onRetry, onCancel, theme, fundWalletOptions, paymentRequirementsSelector, } = props;
|
|
22
22
|
const [screen, setScreen] = (0, react_1.useState)("error");
|
|
23
23
|
const isInsufficientFunds = errorData.error === "insufficient_funds";
|
|
24
24
|
const wallet = (0, useActiveWallet_js_1.useActiveWallet)();
|
|
25
25
|
// Extract chain and token info from errorData for BuyWidget
|
|
26
26
|
const getBuyWidgetConfig = () => {
|
|
27
|
-
|
|
27
|
+
// Get payment requirements from errorData
|
|
28
|
+
const parsedPaymentRequirements = (0, schemas_js_1.parsePaymentRequirementsForDisplay)(errorData, requestUrl);
|
|
29
|
+
if (parsedPaymentRequirements.length === 0) {
|
|
28
30
|
return null;
|
|
29
31
|
}
|
|
30
|
-
// Get payment requirements from errorData
|
|
31
|
-
const parsedPaymentRequirements = errorData.accepts;
|
|
32
32
|
// Get the current chain from wallet
|
|
33
33
|
const currentChain = wallet?.getChain();
|
|
34
34
|
const currentChainId = currentChain?.id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentErrorModal.js","sourceRoot":"","sources":["../../../../../../src/react/web/ui/x402/PaymentErrorModal.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"PaymentErrorModal.js","sourceRoot":"","sources":["../../../../../../src/react/web/ui/x402/PaymentErrorModal.tsx"],"names":[],"mappings":"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"}
|
package/dist/cjs/version.js
CHANGED
package/dist/cjs/x402/encode.js
CHANGED
|
@@ -5,6 +5,9 @@ exports.decodePayment = decodePayment;
|
|
|
5
5
|
exports.encodePaymentRequired = encodePaymentRequired;
|
|
6
6
|
exports.safeBase64Encode = safeBase64Encode;
|
|
7
7
|
exports.safeBase64Decode = safeBase64Decode;
|
|
8
|
+
exports.base64DecodeUtf8 = base64DecodeUtf8;
|
|
9
|
+
const text_decoder_js_1 = require("../utils/text-decoder.js");
|
|
10
|
+
const text_encoder_js_1 = require("../utils/text-encoder.js");
|
|
8
11
|
/**
|
|
9
12
|
* Encodes a payment payload into a base64 string, ensuring bigint values are properly stringified
|
|
10
13
|
*
|
|
@@ -25,7 +28,7 @@ function encodePayment(payment) {
|
|
|
25
28
|
])),
|
|
26
29
|
},
|
|
27
30
|
};
|
|
28
|
-
return
|
|
31
|
+
return base64EncodeUtf8(JSON.stringify(safe));
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
31
34
|
* Decodes a base64 encoded payment string back into a PaymentPayload object
|
|
@@ -34,7 +37,7 @@ function encodePayment(payment) {
|
|
|
34
37
|
* @returns The decoded and validated PaymentPayload object
|
|
35
38
|
*/
|
|
36
39
|
function decodePayment(payment) {
|
|
37
|
-
const decoded =
|
|
40
|
+
const decoded = base64DecodeUtf8(payment);
|
|
38
41
|
const parsed = JSON.parse(decoded);
|
|
39
42
|
const obj = {
|
|
40
43
|
...parsed,
|
|
@@ -77,4 +80,40 @@ function safeBase64Decode(data) {
|
|
|
77
80
|
}
|
|
78
81
|
return Buffer.from(data, "base64").toString("utf-8");
|
|
79
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Encodes a string as UTF-8 and then to base64
|
|
85
|
+
*
|
|
86
|
+
* @param data - The string to encode
|
|
87
|
+
* @returns The base64 encoded UTF-8 bytes
|
|
88
|
+
*/
|
|
89
|
+
function base64EncodeUtf8(data) {
|
|
90
|
+
if (typeof globalThis !== "undefined" &&
|
|
91
|
+
typeof globalThis.btoa === "function") {
|
|
92
|
+
const bytes = (0, text_encoder_js_1.cachedTextEncoder)().encode(data);
|
|
93
|
+
let binary = "";
|
|
94
|
+
for (const byte of bytes) {
|
|
95
|
+
binary += String.fromCharCode(byte);
|
|
96
|
+
}
|
|
97
|
+
return globalThis.btoa(binary);
|
|
98
|
+
}
|
|
99
|
+
return Buffer.from(data, "utf-8").toString("base64");
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Decodes a base64 string and interprets the bytes as UTF-8
|
|
103
|
+
*
|
|
104
|
+
* @param data - The base64 encoded string
|
|
105
|
+
* @returns The decoded string
|
|
106
|
+
*/
|
|
107
|
+
function base64DecodeUtf8(data) {
|
|
108
|
+
if (typeof globalThis !== "undefined" &&
|
|
109
|
+
typeof globalThis.atob === "function") {
|
|
110
|
+
const binary = globalThis.atob(data);
|
|
111
|
+
const bytes = new Uint8Array(binary.length);
|
|
112
|
+
for (let i = 0; i < binary.length; i++) {
|
|
113
|
+
bytes[i] = binary.charCodeAt(i);
|
|
114
|
+
}
|
|
115
|
+
return (0, text_decoder_js_1.cachedTextDecoder)().decode(bytes);
|
|
116
|
+
}
|
|
117
|
+
return Buffer.from(data, "base64").toString("utf-8");
|
|
118
|
+
}
|
|
80
119
|
//# sourceMappingURL=encode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/x402/encode.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/x402/encode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.wrapFetchWithPayment = wrapFetchWithPayment;
|
|
4
|
+
exports.getRequestUrl = getRequestUrl;
|
|
4
5
|
const utils_js_1 = require("../chains/utils.js");
|
|
5
6
|
const address_js_1 = require("../utils/address.js");
|
|
6
7
|
const webStorage_js_1 = require("../utils/storage/webStorage.js");
|
|
@@ -24,7 +25,7 @@ const types_js_1 = require("./types.js");
|
|
|
24
25
|
* @param fetch - The fetch function to wrap (typically globalThis.fetch)
|
|
25
26
|
* @param client - The thirdweb client used to access RPC infrastructure
|
|
26
27
|
* @param wallet - The wallet used to sign payment messages
|
|
27
|
-
* @param maxValue - The maximum allowed payment amount in base units
|
|
28
|
+
* @param maxValue - The maximum allowed payment amount in base units. `0n` only allows zero-amount payments
|
|
28
29
|
* @returns A wrapped fetch function that handles 402 responses automatically
|
|
29
30
|
*
|
|
30
31
|
* @example
|
|
@@ -55,42 +56,37 @@ function wrapFetchWithPayment(fetch, client, wallet, options) {
|
|
|
55
56
|
if (response.status !== 402) {
|
|
56
57
|
return response;
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
const initParams = init || {};
|
|
60
|
+
if (initParams.__is402Retry) {
|
|
61
|
+
throw new Error("Payment already attempted");
|
|
62
|
+
}
|
|
61
63
|
// Check payment-required header first before falling back to JSON body
|
|
62
64
|
const paymentRequiredHeader = response.headers.get("payment-required");
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
error = parsed.error;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
const body = (await response.json());
|
|
75
|
-
if (!Array.isArray(body.accepts)) {
|
|
76
|
-
throw new Error(`402 response has no usable x402 payment requirements. ${body.error ?? ""}`);
|
|
77
|
-
}
|
|
78
|
-
x402Version = body.x402Version ?? types_js_1.x402Version;
|
|
79
|
-
parsedPaymentRequirements = body.accepts.map((x) => schemas_js_1.RequestedPaymentRequirementsSchema.parse(x));
|
|
80
|
-
error = body.error;
|
|
81
|
-
}
|
|
65
|
+
const paymentRequired = paymentRequiredHeader
|
|
66
|
+
? JSON.parse((0, encode_js_1.base64DecodeUtf8)(paymentRequiredHeader))
|
|
67
|
+
: await response.json();
|
|
68
|
+
const parsed = (0, schemas_js_1.parsePaymentRequired)(paymentRequired, getRequestUrl(input));
|
|
69
|
+
const x402Version = parsed.x402Version ?? types_js_1.x402Version;
|
|
70
|
+
const error = parsed.error;
|
|
71
|
+
const normalizedPaymentRequirements = parsed.accepts;
|
|
72
|
+
const parsedPaymentRequirements = normalizedPaymentRequirements.map((x) => x.requirements);
|
|
82
73
|
const account = wallet.getAccount();
|
|
83
74
|
let chain = wallet.getChain();
|
|
84
75
|
if (!account || !chain) {
|
|
85
76
|
throw new Error("Wallet not connected. Please connect your wallet to continue.");
|
|
86
77
|
}
|
|
87
|
-
const
|
|
78
|
+
const selected = options?.paymentRequirementsSelector
|
|
88
79
|
? options.paymentRequirementsSelector(parsedPaymentRequirements)
|
|
89
80
|
: defaultPaymentRequirementsSelector(parsedPaymentRequirements, chain.id, error);
|
|
90
|
-
if (!
|
|
81
|
+
if (!selected) {
|
|
91
82
|
throw new Error(`No suitable payment requirements found for chain ${chain.id}. ${error}`);
|
|
92
83
|
}
|
|
93
|
-
|
|
84
|
+
const { requirements: selectedPaymentRequirements } = (0, schemas_js_1.normalizePaymentRequirements)(selected, {
|
|
85
|
+
resourceUrl: parsed.resourceUrl,
|
|
86
|
+
});
|
|
87
|
+
const acceptedRequirement = normalizedPaymentRequirements.find((x) => x.requirements === selected)
|
|
88
|
+
?.raw ?? selected;
|
|
89
|
+
if (options?.maxValue !== undefined &&
|
|
94
90
|
BigInt(selectedPaymentRequirements.maxAmountRequired) > options.maxValue) {
|
|
95
91
|
throw new Error(`Payment amount exceeds maximum allowed (currently set to ${options.maxValue} in base units)`);
|
|
96
92
|
}
|
|
@@ -108,13 +104,17 @@ function wrapFetchWithPayment(fetch, client, wallet, options) {
|
|
|
108
104
|
throw new Error(`Failed to switch chain (${paymentChainId})`);
|
|
109
105
|
}
|
|
110
106
|
}
|
|
111
|
-
const
|
|
107
|
+
const storage = options?.storage ?? webStorage_js_1.webLocalStorage;
|
|
108
|
+
const paymentHeader = await (0, sign_js_1.createPaymentHeader)(client, account, selectedPaymentRequirements, x402Version, storage, {
|
|
109
|
+
accepted: acceptedRequirement,
|
|
110
|
+
resource: parsed.resource ?? {
|
|
111
|
+
url: selectedPaymentRequirements.resource,
|
|
112
|
+
description: selectedPaymentRequirements.description,
|
|
113
|
+
mimeType: selectedPaymentRequirements.mimeType,
|
|
114
|
+
},
|
|
115
|
+
}, options?.maxValue);
|
|
112
116
|
const paymentRequestHeaderName = (0, headers_js_1.getPaymentRequestHeader)(x402Version);
|
|
113
117
|
const paymentResponseHeaderName = (0, headers_js_1.getPaymentResponseHeader)(x402Version);
|
|
114
|
-
const initParams = init || {};
|
|
115
|
-
if (initParams.__is402Retry) {
|
|
116
|
-
throw new Error("Payment already attempted");
|
|
117
|
-
}
|
|
118
118
|
const newInit = {
|
|
119
119
|
...initParams,
|
|
120
120
|
headers: {
|
|
@@ -126,8 +126,8 @@ function wrapFetchWithPayment(fetch, client, wallet, options) {
|
|
|
126
126
|
};
|
|
127
127
|
const secondResponse = await fetch(input, newInit);
|
|
128
128
|
// If payment was rejected (still 402), clear cached signature
|
|
129
|
-
if (secondResponse.status === 402
|
|
130
|
-
await (0, permitSignatureStorage_js_1.clearPermitSignatureFromCache)(
|
|
129
|
+
if (secondResponse.status === 402) {
|
|
130
|
+
await (0, permitSignatureStorage_js_1.clearPermitSignatureFromCache)(storage, {
|
|
131
131
|
chainId: paymentChainId,
|
|
132
132
|
asset: selectedPaymentRequirements.asset,
|
|
133
133
|
owner: (0, address_js_1.getAddress)(account.address),
|
|
@@ -137,6 +137,29 @@ function wrapFetchWithPayment(fetch, client, wallet, options) {
|
|
|
137
137
|
return secondResponse;
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Resolves the absolute URL of a fetch input, if it can be determined.
|
|
142
|
+
* @internal
|
|
143
|
+
*/
|
|
144
|
+
function getRequestUrl(input) {
|
|
145
|
+
const url = typeof input === "string"
|
|
146
|
+
? input
|
|
147
|
+
: input instanceof URL
|
|
148
|
+
? input.href
|
|
149
|
+
: input?.url;
|
|
150
|
+
if (typeof url !== "string") {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
const base = typeof globalThis.location !== "undefined"
|
|
155
|
+
? globalThis.location.href
|
|
156
|
+
: undefined;
|
|
157
|
+
return new URL(url, base).toString();
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
140
163
|
function defaultPaymentRequirementsSelector(paymentRequirements, chainId, error) {
|
|
141
164
|
if (!paymentRequirements.length) {
|
|
142
165
|
throw new Error(`No valid payment requirements found in server 402 response. ${error}`);
|
|
@@ -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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"}
|
package/dist/cjs/x402/schemas.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SupportedSignatureTypeSchema =
|
|
3
|
+
exports.SupportedSignatureTypeSchema = void 0;
|
|
4
|
+
exports.isAtomicAmount = isAtomicAmount;
|
|
5
|
+
exports.normalizePaymentRequirements = normalizePaymentRequirements;
|
|
6
|
+
exports.parsePaymentRequired = parsePaymentRequired;
|
|
7
|
+
exports.parsePaymentRequirementsForDisplay = parsePaymentRequirementsForDisplay;
|
|
4
8
|
exports.extractEvmChainId = extractEvmChainId;
|
|
5
9
|
exports.networkToCaip2ChainId = networkToCaip2ChainId;
|
|
6
10
|
const types_1 = require("x402/types");
|
|
@@ -11,10 +15,138 @@ const RequestedPaymentPayloadSchema = types_1.PaymentPayloadSchema.extend({
|
|
|
11
15
|
network: FacilitatorNetworkSchema,
|
|
12
16
|
scheme: types_js_1.PaymentSchemeSchema,
|
|
13
17
|
});
|
|
14
|
-
|
|
18
|
+
const RequestedPaymentRequirementsSchema = types_1.PaymentRequirementsSchema.extend({
|
|
15
19
|
network: FacilitatorNetworkSchema,
|
|
16
20
|
scheme: types_js_1.PaymentSchemeSchema,
|
|
17
21
|
});
|
|
22
|
+
const MAX_UINT256 = 2n ** 256n - 1n;
|
|
23
|
+
const ATOMIC_AMOUNT_REGEX = /^\d{1,78}$/;
|
|
24
|
+
/**
|
|
25
|
+
* Returns true if the value is a base-10 integer string that fits in a uint256.
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
function isAtomicAmount(value) {
|
|
29
|
+
return (typeof value === "string" &&
|
|
30
|
+
ATOMIC_AMOUNT_REGEX.test(value) &&
|
|
31
|
+
BigInt(value) <= MAX_UINT256);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Reads an amount field and returns it in canonical form (no leading zeros).
|
|
35
|
+
*/
|
|
36
|
+
function readAtomicAmount(requirement, field) {
|
|
37
|
+
const value = requirement[field];
|
|
38
|
+
if (value === undefined) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
if (!isAtomicAmount(value)) {
|
|
42
|
+
throw new Error(`Invalid payment requirements: ${field} must be an integer string in base units`);
|
|
43
|
+
}
|
|
44
|
+
return BigInt(value).toString();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Extracts the top-level resource object of a 402 payment required response, if any.
|
|
48
|
+
*/
|
|
49
|
+
function getPaymentRequiredResource(paymentRequired) {
|
|
50
|
+
if (!isRecord(paymentRequired)) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const resource = paymentRequired.resource;
|
|
54
|
+
if (isRecord(resource) && typeof resource.url === "string") {
|
|
55
|
+
return resource;
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Normalises a payment requirement from a 402 response (x402 v1, v2, or v2 envelopes with v1 requirements).
|
|
61
|
+
*
|
|
62
|
+
* @param requirement - The raw payment requirement
|
|
63
|
+
* @param context - Fallback values for fields that v2 moves out of the requirement
|
|
64
|
+
* @returns The normalised requirement and the raw requirement
|
|
65
|
+
* @throws If the amount is missing, malformed, or ambiguous, or the requirement is otherwise invalid
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
function normalizePaymentRequirements(requirement, context = {}) {
|
|
69
|
+
if (!isRecord(requirement)) {
|
|
70
|
+
throw new Error("Invalid payment requirements: expected an object");
|
|
71
|
+
}
|
|
72
|
+
const amount = readAtomicAmount(requirement, "amount");
|
|
73
|
+
const maxAmountRequired = readAtomicAmount(requirement, "maxAmountRequired");
|
|
74
|
+
if (amount !== undefined &&
|
|
75
|
+
maxAmountRequired !== undefined &&
|
|
76
|
+
amount !== maxAmountRequired) {
|
|
77
|
+
throw new Error(`Invalid payment requirements: amount (${amount}) and maxAmountRequired (${maxAmountRequired}) do not match`);
|
|
78
|
+
}
|
|
79
|
+
const normalizedAmount = amount ?? maxAmountRequired;
|
|
80
|
+
if (normalizedAmount === undefined) {
|
|
81
|
+
throw new Error("Invalid payment requirements: missing amount or maxAmountRequired");
|
|
82
|
+
}
|
|
83
|
+
const requirements = RequestedPaymentRequirementsSchema.parse({
|
|
84
|
+
...requirement,
|
|
85
|
+
maxAmountRequired: normalizedAmount,
|
|
86
|
+
resource: typeof requirement.resource === "string"
|
|
87
|
+
? requirement.resource
|
|
88
|
+
: context.resourceUrl,
|
|
89
|
+
description: typeof requirement.description === "string"
|
|
90
|
+
? requirement.description
|
|
91
|
+
: "",
|
|
92
|
+
mimeType: typeof requirement.mimeType === "string" ? requirement.mimeType : "",
|
|
93
|
+
});
|
|
94
|
+
return { requirements, raw: requirement };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Parses a decoded 402 payment required object (PAYMENT-REQUIRED header or JSON body).
|
|
98
|
+
* Every entry of `accepts` is normalised with {@link normalizePaymentRequirements}.
|
|
99
|
+
*
|
|
100
|
+
* @param paymentRequired - The decoded payment required object
|
|
101
|
+
* @param requestUrl - The URL of the request, used when the response carries no resource URL
|
|
102
|
+
* @returns The x402 version, error, top-level resource, resolved resource URL and normalised requirements
|
|
103
|
+
* @throws If the object has no accepts array or any requirement is invalid
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
function parsePaymentRequired(paymentRequired, requestUrl) {
|
|
107
|
+
const data = isRecord(paymentRequired) ? paymentRequired : {};
|
|
108
|
+
const error = typeof data.error === "string" ? data.error : undefined;
|
|
109
|
+
if (!Array.isArray(data.accepts)) {
|
|
110
|
+
throw new Error(`402 response has no usable x402 payment requirements. ${error ?? ""}`);
|
|
111
|
+
}
|
|
112
|
+
const resource = getPaymentRequiredResource(data);
|
|
113
|
+
const resourceUrl = typeof resource?.url === "string" ? resource.url : requestUrl;
|
|
114
|
+
return {
|
|
115
|
+
x402Version: typeof data.x402Version === "number" ? data.x402Version : undefined,
|
|
116
|
+
error,
|
|
117
|
+
resource,
|
|
118
|
+
resourceUrl,
|
|
119
|
+
accepts: data.accepts.map((requirement) => normalizePaymentRequirements(requirement, { resourceUrl })),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Parses the payment requirements of a 402 response for display only, skipping invalid entries.
|
|
124
|
+
*
|
|
125
|
+
* @param paymentRequired - The decoded payment required object
|
|
126
|
+
* @param requestUrl - The URL of the request, used when the response carries no resource URL
|
|
127
|
+
* @returns The normalised requirements that passed validation
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
130
|
+
function parsePaymentRequirementsForDisplay(paymentRequired, requestUrl) {
|
|
131
|
+
if (!isRecord(paymentRequired) || !Array.isArray(paymentRequired.accepts)) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
const resource = getPaymentRequiredResource(paymentRequired);
|
|
135
|
+
const resourceUrl = typeof resource?.url === "string" ? resource.url : requestUrl;
|
|
136
|
+
return paymentRequired.accepts.flatMap((requirement) => {
|
|
137
|
+
try {
|
|
138
|
+
return [
|
|
139
|
+
normalizePaymentRequirements(requirement, { resourceUrl }).requirements,
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function isRecord(value) {
|
|
148
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
149
|
+
}
|
|
18
150
|
const FacilitatorSettleResponseSchema = types_1.SettleResponseSchema.extend({
|
|
19
151
|
network: FacilitatorNetworkSchema,
|
|
20
152
|
errorMessage: zod_1.z.string().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/x402/schemas.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/x402/schemas.ts"],"names":[],"mappings":"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"}
|