uvd-x402-sdk 2.2.2 → 2.4.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/dist/adapters/index.d.mts +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +83 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/index.mjs +83 -5
- package/dist/adapters/index.mjs.map +1 -1
- package/dist/{index-OZTSi1rJ.d.ts → index-BYX9BU79.d.ts} +1 -1
- package/dist/{index-I60aHxwu.d.mts → index-BrFeSWKm.d.mts} +1 -1
- package/dist/{index-BG738nMY.d.mts → index-DR2vXt-c.d.mts} +2 -1
- package/dist/{index-BG738nMY.d.ts → index-DR2vXt-c.d.ts} +2 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +247 -139
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +246 -140
- package/dist/index.mjs.map +1 -1
- package/dist/providers/evm/index.d.mts +1 -1
- package/dist/providers/evm/index.d.ts +1 -1
- package/dist/providers/evm/index.js +83 -5
- package/dist/providers/evm/index.js.map +1 -1
- package/dist/providers/evm/index.mjs +83 -5
- package/dist/providers/evm/index.mjs.map +1 -1
- package/dist/providers/near/index.d.mts +1 -1
- package/dist/providers/near/index.d.ts +1 -1
- package/dist/providers/near/index.js.map +1 -1
- package/dist/providers/near/index.mjs.map +1 -1
- package/dist/providers/solana/index.d.mts +1 -1
- package/dist/providers/solana/index.d.ts +1 -1
- package/dist/providers/solana/index.js +24 -5
- package/dist/providers/solana/index.js.map +1 -1
- package/dist/providers/solana/index.mjs +24 -5
- package/dist/providers/solana/index.mjs.map +1 -1
- package/dist/providers/stellar/index.d.mts +1 -1
- package/dist/providers/stellar/index.d.ts +1 -1
- package/dist/providers/stellar/index.js.map +1 -1
- package/dist/providers/stellar/index.mjs.map +1 -1
- package/dist/react/index.d.mts +3 -3
- package/dist/react/index.d.ts +3 -3
- package/dist/react/index.js +83 -5
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +83 -5
- package/dist/react/index.mjs.map +1 -1
- package/dist/utils/index.d.mts +31 -2
- package/dist/utils/index.d.ts +31 -2
- package/dist/utils/index.js +125 -5
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +124 -6
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/adapters/wagmi.ts +4 -1
- package/src/chains/index.ts +23 -5
- package/src/client/X402Client.ts +4 -0
- package/src/index.ts +3 -0
- package/src/providers/evm/index.ts +4 -0
- package/src/types/index.ts +2 -1
- package/src/utils/index.ts +5 -0
- package/src/utils/validation.ts +151 -0
package/dist/index.js
CHANGED
|
@@ -128,7 +128,7 @@ var SUPPORTED_CHAINS = {
|
|
|
128
128
|
ausd: {
|
|
129
129
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
130
130
|
decimals: 6,
|
|
131
|
-
name: "
|
|
131
|
+
name: "Agora Dollar",
|
|
132
132
|
version: "1"
|
|
133
133
|
}
|
|
134
134
|
},
|
|
@@ -172,7 +172,7 @@ var SUPPORTED_CHAINS = {
|
|
|
172
172
|
ausd: {
|
|
173
173
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
174
174
|
decimals: 6,
|
|
175
|
-
name: "
|
|
175
|
+
name: "Agora Dollar",
|
|
176
176
|
version: "1"
|
|
177
177
|
},
|
|
178
178
|
pyusd: {
|
|
@@ -216,7 +216,7 @@ var SUPPORTED_CHAINS = {
|
|
|
216
216
|
ausd: {
|
|
217
217
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
218
218
|
decimals: 6,
|
|
219
|
-
name: "
|
|
219
|
+
name: "Agora Dollar",
|
|
220
220
|
version: "1"
|
|
221
221
|
}
|
|
222
222
|
},
|
|
@@ -254,7 +254,13 @@ var SUPPORTED_CHAINS = {
|
|
|
254
254
|
ausd: {
|
|
255
255
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
256
256
|
decimals: 6,
|
|
257
|
-
name: "
|
|
257
|
+
name: "Agora Dollar",
|
|
258
|
+
version: "1"
|
|
259
|
+
},
|
|
260
|
+
usdt: {
|
|
261
|
+
address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
|
|
262
|
+
decimals: 6,
|
|
263
|
+
name: "USD\u20AE0",
|
|
258
264
|
version: "1"
|
|
259
265
|
}
|
|
260
266
|
},
|
|
@@ -288,6 +294,12 @@ var SUPPORTED_CHAINS = {
|
|
|
288
294
|
decimals: 6,
|
|
289
295
|
name: "USD Coin",
|
|
290
296
|
version: "2"
|
|
297
|
+
},
|
|
298
|
+
usdt: {
|
|
299
|
+
address: "0x01bff41798a0bcf287b996046ca68b395dbc1071",
|
|
300
|
+
decimals: 6,
|
|
301
|
+
name: "USD\u20AE0",
|
|
302
|
+
version: "1"
|
|
291
303
|
}
|
|
292
304
|
},
|
|
293
305
|
x402: {
|
|
@@ -322,6 +334,13 @@ var SUPPORTED_CHAINS = {
|
|
|
322
334
|
name: "USDC",
|
|
323
335
|
// Celo uses "USDC" not "USD Coin" for EIP-712
|
|
324
336
|
version: "2"
|
|
337
|
+
},
|
|
338
|
+
usdt: {
|
|
339
|
+
address: "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
|
|
340
|
+
decimals: 6,
|
|
341
|
+
name: "Tether USD",
|
|
342
|
+
// Celo USDT uses "Tether USD" for EIP-712
|
|
343
|
+
version: "1"
|
|
325
344
|
}
|
|
326
345
|
},
|
|
327
346
|
x402: {
|
|
@@ -428,7 +447,7 @@ var SUPPORTED_CHAINS = {
|
|
|
428
447
|
ausd: {
|
|
429
448
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
430
449
|
decimals: 6,
|
|
431
|
-
name: "
|
|
450
|
+
name: "Agora Dollar",
|
|
432
451
|
version: "1"
|
|
433
452
|
}
|
|
434
453
|
},
|
|
@@ -665,6 +684,226 @@ function getChainsByToken(tokenType) {
|
|
|
665
684
|
});
|
|
666
685
|
}
|
|
667
686
|
|
|
687
|
+
// src/utils/x402.ts
|
|
688
|
+
function detectX402Version(data) {
|
|
689
|
+
if (typeof data !== "object" || data === null) {
|
|
690
|
+
return 1;
|
|
691
|
+
}
|
|
692
|
+
const obj = data;
|
|
693
|
+
if (obj.x402Version === 2) {
|
|
694
|
+
return 2;
|
|
695
|
+
}
|
|
696
|
+
if (obj.accepts && Array.isArray(obj.accepts)) {
|
|
697
|
+
return 2;
|
|
698
|
+
}
|
|
699
|
+
if (typeof obj.network === "string") {
|
|
700
|
+
if (obj.network.includes(":")) {
|
|
701
|
+
return 2;
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
return 1;
|
|
705
|
+
}
|
|
706
|
+
function chainToCAIP2(chainName) {
|
|
707
|
+
const caip2 = CAIP2_IDENTIFIERS[chainName.toLowerCase()];
|
|
708
|
+
if (caip2) {
|
|
709
|
+
return caip2;
|
|
710
|
+
}
|
|
711
|
+
const chain = getChainByName(chainName);
|
|
712
|
+
if (chain) {
|
|
713
|
+
if (chain.networkType === "evm") {
|
|
714
|
+
return `eip155:${chain.chainId}`;
|
|
715
|
+
}
|
|
716
|
+
return `${chain.networkType}:${chainName}`;
|
|
717
|
+
}
|
|
718
|
+
return chainName;
|
|
719
|
+
}
|
|
720
|
+
function caip2ToChain(caip2) {
|
|
721
|
+
if (CAIP2_TO_CHAIN[caip2]) {
|
|
722
|
+
return CAIP2_TO_CHAIN[caip2];
|
|
723
|
+
}
|
|
724
|
+
const match = caip2.match(/^eip155:(\d+)$/);
|
|
725
|
+
if (match) {
|
|
726
|
+
const chainId = parseInt(match[1], 10);
|
|
727
|
+
for (const [name, _config] of Object.entries(CAIP2_IDENTIFIERS)) {
|
|
728
|
+
const chain = getChainByName(name);
|
|
729
|
+
if (chain?.chainId === chainId) {
|
|
730
|
+
return name;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
const parts = caip2.split(":");
|
|
735
|
+
if (parts.length === 2) {
|
|
736
|
+
const networkName = parts[1];
|
|
737
|
+
if (getChainByName(networkName)) {
|
|
738
|
+
return networkName;
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
return null;
|
|
742
|
+
}
|
|
743
|
+
function parseNetworkIdentifier(network) {
|
|
744
|
+
if (network.includes(":")) {
|
|
745
|
+
return caip2ToChain(network) || network;
|
|
746
|
+
}
|
|
747
|
+
return network.toLowerCase();
|
|
748
|
+
}
|
|
749
|
+
function encodeX402Header(header) {
|
|
750
|
+
return btoa(JSON.stringify(header));
|
|
751
|
+
}
|
|
752
|
+
function decodeX402Header(encoded) {
|
|
753
|
+
const json = atob(encoded);
|
|
754
|
+
return JSON.parse(json);
|
|
755
|
+
}
|
|
756
|
+
function createX402V1Header(network, payload) {
|
|
757
|
+
return {
|
|
758
|
+
x402Version: 1,
|
|
759
|
+
scheme: "exact",
|
|
760
|
+
network,
|
|
761
|
+
payload
|
|
762
|
+
};
|
|
763
|
+
}
|
|
764
|
+
function createX402V2Header(network, payload, accepts) {
|
|
765
|
+
const header = {
|
|
766
|
+
x402Version: 2,
|
|
767
|
+
scheme: "exact",
|
|
768
|
+
network: network.includes(":") ? network : chainToCAIP2(network),
|
|
769
|
+
payload
|
|
770
|
+
};
|
|
771
|
+
if (accepts && accepts.length > 0) {
|
|
772
|
+
header.accepts = accepts;
|
|
773
|
+
}
|
|
774
|
+
return header;
|
|
775
|
+
}
|
|
776
|
+
function createX402Header(chainConfig, payload, version = "auto") {
|
|
777
|
+
const effectiveVersion = version === "auto" ? 1 : version;
|
|
778
|
+
if (effectiveVersion === 2) {
|
|
779
|
+
return createX402V2Header(chainConfig.name, payload);
|
|
780
|
+
}
|
|
781
|
+
return createX402V1Header(chainConfig.name, payload);
|
|
782
|
+
}
|
|
783
|
+
function generatePaymentOptions(chainConfigs, amount, facilitator) {
|
|
784
|
+
return chainConfigs.filter((chain) => chain.x402.enabled).map((chain) => {
|
|
785
|
+
const atomicAmount = Math.floor(
|
|
786
|
+
parseFloat(amount) * Math.pow(10, chain.usdc.decimals)
|
|
787
|
+
).toString();
|
|
788
|
+
return {
|
|
789
|
+
network: chainToCAIP2(chain.name),
|
|
790
|
+
asset: chain.usdc.address,
|
|
791
|
+
amount: atomicAmount,
|
|
792
|
+
facilitator: facilitator || chain.x402.facilitatorUrl
|
|
793
|
+
};
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
function isCAIP2Format(network) {
|
|
797
|
+
return network.includes(":");
|
|
798
|
+
}
|
|
799
|
+
function convertX402Header(header, targetVersion) {
|
|
800
|
+
if (header.x402Version === targetVersion) {
|
|
801
|
+
return header;
|
|
802
|
+
}
|
|
803
|
+
if (targetVersion === 2) {
|
|
804
|
+
return {
|
|
805
|
+
x402Version: 2,
|
|
806
|
+
scheme: "exact",
|
|
807
|
+
network: chainToCAIP2(header.network),
|
|
808
|
+
payload: header.payload
|
|
809
|
+
};
|
|
810
|
+
} else {
|
|
811
|
+
const chainName = isCAIP2Format(header.network) ? caip2ToChain(header.network) || header.network : header.network;
|
|
812
|
+
return {
|
|
813
|
+
x402Version: 1,
|
|
814
|
+
scheme: "exact",
|
|
815
|
+
network: chainName,
|
|
816
|
+
payload: header.payload
|
|
817
|
+
};
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
// src/utils/validation.ts
|
|
822
|
+
var ETH_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;
|
|
823
|
+
var SOLANA_ADDRESS_REGEX = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
|
|
824
|
+
var STELLAR_ADDRESS_REGEX = /^G[A-Z2-7]{55}$/;
|
|
825
|
+
var NEAR_ADDRESS_REGEX = /^[a-z0-9._-]+$/;
|
|
826
|
+
function validateRecipient(recipient, networkType) {
|
|
827
|
+
if (!recipient) {
|
|
828
|
+
throw new X402Error(
|
|
829
|
+
"Recipient address is required. The payTo/recipient field cannot be empty. Please provide a valid recipient address where payments should be sent.",
|
|
830
|
+
"INVALID_RECIPIENT"
|
|
831
|
+
);
|
|
832
|
+
}
|
|
833
|
+
const trimmed = recipient.trim();
|
|
834
|
+
if (trimmed === "") {
|
|
835
|
+
throw new X402Error(
|
|
836
|
+
"Recipient address cannot be empty or whitespace. Please provide a valid recipient address.",
|
|
837
|
+
"INVALID_RECIPIENT"
|
|
838
|
+
);
|
|
839
|
+
}
|
|
840
|
+
if (networkType) {
|
|
841
|
+
switch (networkType) {
|
|
842
|
+
case "evm":
|
|
843
|
+
if (!ETH_ADDRESS_REGEX.test(trimmed)) {
|
|
844
|
+
throw new X402Error(
|
|
845
|
+
`Invalid EVM recipient address: "${trimmed}". Expected a 40-character hexadecimal address starting with 0x.`,
|
|
846
|
+
"INVALID_RECIPIENT"
|
|
847
|
+
);
|
|
848
|
+
}
|
|
849
|
+
break;
|
|
850
|
+
case "svm":
|
|
851
|
+
case "solana":
|
|
852
|
+
if (!SOLANA_ADDRESS_REGEX.test(trimmed)) {
|
|
853
|
+
throw new X402Error(
|
|
854
|
+
`Invalid Solana recipient address: "${trimmed}". Expected a base58-encoded public key (32-44 characters).`,
|
|
855
|
+
"INVALID_RECIPIENT"
|
|
856
|
+
);
|
|
857
|
+
}
|
|
858
|
+
break;
|
|
859
|
+
case "stellar":
|
|
860
|
+
if (!STELLAR_ADDRESS_REGEX.test(trimmed)) {
|
|
861
|
+
throw new X402Error(
|
|
862
|
+
`Invalid Stellar recipient address: "${trimmed}". Expected a G-prefixed public key (56 characters).`,
|
|
863
|
+
"INVALID_RECIPIENT"
|
|
864
|
+
);
|
|
865
|
+
}
|
|
866
|
+
break;
|
|
867
|
+
case "near":
|
|
868
|
+
if (!NEAR_ADDRESS_REGEX.test(trimmed) || trimmed.length > 64) {
|
|
869
|
+
throw new X402Error(
|
|
870
|
+
`Invalid NEAR recipient address: "${trimmed}". Expected a valid NEAR account ID.`,
|
|
871
|
+
"INVALID_RECIPIENT"
|
|
872
|
+
);
|
|
873
|
+
}
|
|
874
|
+
break;
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
function validateAmount(amount) {
|
|
879
|
+
if (!amount) {
|
|
880
|
+
throw new X402Error(
|
|
881
|
+
"Payment amount is required.",
|
|
882
|
+
"INVALID_AMOUNT"
|
|
883
|
+
);
|
|
884
|
+
}
|
|
885
|
+
const trimmed = amount.trim();
|
|
886
|
+
if (trimmed === "") {
|
|
887
|
+
throw new X402Error(
|
|
888
|
+
"Payment amount cannot be empty.",
|
|
889
|
+
"INVALID_AMOUNT"
|
|
890
|
+
);
|
|
891
|
+
}
|
|
892
|
+
const num = parseFloat(trimmed);
|
|
893
|
+
if (isNaN(num)) {
|
|
894
|
+
throw new X402Error(
|
|
895
|
+
`Invalid payment amount: "${trimmed}". Expected a valid number.`,
|
|
896
|
+
"INVALID_AMOUNT"
|
|
897
|
+
);
|
|
898
|
+
}
|
|
899
|
+
if (num <= 0) {
|
|
900
|
+
throw new X402Error(
|
|
901
|
+
`Payment amount must be positive. Got: ${trimmed}`,
|
|
902
|
+
"INVALID_AMOUNT"
|
|
903
|
+
);
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
|
|
668
907
|
// src/client/X402Client.ts
|
|
669
908
|
var X402Client = class {
|
|
670
909
|
// Configuration
|
|
@@ -1015,6 +1254,7 @@ var X402Client = class {
|
|
|
1015
1254
|
throw new X402Error("Wallet not connected", "WALLET_NOT_CONNECTED");
|
|
1016
1255
|
}
|
|
1017
1256
|
const recipient = this.getRecipientForNetwork(paymentInfo, "evm");
|
|
1257
|
+
validateRecipient(recipient, "evm");
|
|
1018
1258
|
const nonceBytes = new Uint8Array(32);
|
|
1019
1259
|
if (typeof window !== "undefined" && window.crypto) {
|
|
1020
1260
|
window.crypto.getRandomValues(nonceBytes);
|
|
@@ -1157,140 +1397,6 @@ var X402Client = class {
|
|
|
1157
1397
|
}
|
|
1158
1398
|
};
|
|
1159
1399
|
|
|
1160
|
-
// src/utils/x402.ts
|
|
1161
|
-
function detectX402Version(data) {
|
|
1162
|
-
if (typeof data !== "object" || data === null) {
|
|
1163
|
-
return 1;
|
|
1164
|
-
}
|
|
1165
|
-
const obj = data;
|
|
1166
|
-
if (obj.x402Version === 2) {
|
|
1167
|
-
return 2;
|
|
1168
|
-
}
|
|
1169
|
-
if (obj.accepts && Array.isArray(obj.accepts)) {
|
|
1170
|
-
return 2;
|
|
1171
|
-
}
|
|
1172
|
-
if (typeof obj.network === "string") {
|
|
1173
|
-
if (obj.network.includes(":")) {
|
|
1174
|
-
return 2;
|
|
1175
|
-
}
|
|
1176
|
-
}
|
|
1177
|
-
return 1;
|
|
1178
|
-
}
|
|
1179
|
-
function chainToCAIP2(chainName) {
|
|
1180
|
-
const caip2 = CAIP2_IDENTIFIERS[chainName.toLowerCase()];
|
|
1181
|
-
if (caip2) {
|
|
1182
|
-
return caip2;
|
|
1183
|
-
}
|
|
1184
|
-
const chain = getChainByName(chainName);
|
|
1185
|
-
if (chain) {
|
|
1186
|
-
if (chain.networkType === "evm") {
|
|
1187
|
-
return `eip155:${chain.chainId}`;
|
|
1188
|
-
}
|
|
1189
|
-
return `${chain.networkType}:${chainName}`;
|
|
1190
|
-
}
|
|
1191
|
-
return chainName;
|
|
1192
|
-
}
|
|
1193
|
-
function caip2ToChain(caip2) {
|
|
1194
|
-
if (CAIP2_TO_CHAIN[caip2]) {
|
|
1195
|
-
return CAIP2_TO_CHAIN[caip2];
|
|
1196
|
-
}
|
|
1197
|
-
const match = caip2.match(/^eip155:(\d+)$/);
|
|
1198
|
-
if (match) {
|
|
1199
|
-
const chainId = parseInt(match[1], 10);
|
|
1200
|
-
for (const [name, _config] of Object.entries(CAIP2_IDENTIFIERS)) {
|
|
1201
|
-
const chain = getChainByName(name);
|
|
1202
|
-
if (chain?.chainId === chainId) {
|
|
1203
|
-
return name;
|
|
1204
|
-
}
|
|
1205
|
-
}
|
|
1206
|
-
}
|
|
1207
|
-
const parts = caip2.split(":");
|
|
1208
|
-
if (parts.length === 2) {
|
|
1209
|
-
const networkName = parts[1];
|
|
1210
|
-
if (getChainByName(networkName)) {
|
|
1211
|
-
return networkName;
|
|
1212
|
-
}
|
|
1213
|
-
}
|
|
1214
|
-
return null;
|
|
1215
|
-
}
|
|
1216
|
-
function parseNetworkIdentifier(network) {
|
|
1217
|
-
if (network.includes(":")) {
|
|
1218
|
-
return caip2ToChain(network) || network;
|
|
1219
|
-
}
|
|
1220
|
-
return network.toLowerCase();
|
|
1221
|
-
}
|
|
1222
|
-
function encodeX402Header(header) {
|
|
1223
|
-
return btoa(JSON.stringify(header));
|
|
1224
|
-
}
|
|
1225
|
-
function decodeX402Header(encoded) {
|
|
1226
|
-
const json = atob(encoded);
|
|
1227
|
-
return JSON.parse(json);
|
|
1228
|
-
}
|
|
1229
|
-
function createX402V1Header(network, payload) {
|
|
1230
|
-
return {
|
|
1231
|
-
x402Version: 1,
|
|
1232
|
-
scheme: "exact",
|
|
1233
|
-
network,
|
|
1234
|
-
payload
|
|
1235
|
-
};
|
|
1236
|
-
}
|
|
1237
|
-
function createX402V2Header(network, payload, accepts) {
|
|
1238
|
-
const header = {
|
|
1239
|
-
x402Version: 2,
|
|
1240
|
-
scheme: "exact",
|
|
1241
|
-
network: network.includes(":") ? network : chainToCAIP2(network),
|
|
1242
|
-
payload
|
|
1243
|
-
};
|
|
1244
|
-
if (accepts && accepts.length > 0) {
|
|
1245
|
-
header.accepts = accepts;
|
|
1246
|
-
}
|
|
1247
|
-
return header;
|
|
1248
|
-
}
|
|
1249
|
-
function createX402Header(chainConfig, payload, version = "auto") {
|
|
1250
|
-
const effectiveVersion = version === "auto" ? 1 : version;
|
|
1251
|
-
if (effectiveVersion === 2) {
|
|
1252
|
-
return createX402V2Header(chainConfig.name, payload);
|
|
1253
|
-
}
|
|
1254
|
-
return createX402V1Header(chainConfig.name, payload);
|
|
1255
|
-
}
|
|
1256
|
-
function generatePaymentOptions(chainConfigs, amount, facilitator) {
|
|
1257
|
-
return chainConfigs.filter((chain) => chain.x402.enabled).map((chain) => {
|
|
1258
|
-
const atomicAmount = Math.floor(
|
|
1259
|
-
parseFloat(amount) * Math.pow(10, chain.usdc.decimals)
|
|
1260
|
-
).toString();
|
|
1261
|
-
return {
|
|
1262
|
-
network: chainToCAIP2(chain.name),
|
|
1263
|
-
asset: chain.usdc.address,
|
|
1264
|
-
amount: atomicAmount,
|
|
1265
|
-
facilitator: facilitator || chain.x402.facilitatorUrl
|
|
1266
|
-
};
|
|
1267
|
-
});
|
|
1268
|
-
}
|
|
1269
|
-
function isCAIP2Format(network) {
|
|
1270
|
-
return network.includes(":");
|
|
1271
|
-
}
|
|
1272
|
-
function convertX402Header(header, targetVersion) {
|
|
1273
|
-
if (header.x402Version === targetVersion) {
|
|
1274
|
-
return header;
|
|
1275
|
-
}
|
|
1276
|
-
if (targetVersion === 2) {
|
|
1277
|
-
return {
|
|
1278
|
-
x402Version: 2,
|
|
1279
|
-
scheme: "exact",
|
|
1280
|
-
network: chainToCAIP2(header.network),
|
|
1281
|
-
payload: header.payload
|
|
1282
|
-
};
|
|
1283
|
-
} else {
|
|
1284
|
-
const chainName = isCAIP2Format(header.network) ? caip2ToChain(header.network) || header.network : header.network;
|
|
1285
|
-
return {
|
|
1286
|
-
x402Version: 1,
|
|
1287
|
-
scheme: "exact",
|
|
1288
|
-
network: chainName,
|
|
1289
|
-
payload: header.payload
|
|
1290
|
-
};
|
|
1291
|
-
}
|
|
1292
|
-
}
|
|
1293
|
-
|
|
1294
1400
|
exports.CAIP2_IDENTIFIERS = CAIP2_IDENTIFIERS;
|
|
1295
1401
|
exports.CAIP2_TO_CHAIN = CAIP2_TO_CHAIN;
|
|
1296
1402
|
exports.DEFAULT_CHAIN = DEFAULT_CHAIN;
|
|
@@ -1326,5 +1432,7 @@ exports.isChainSupported = isChainSupported;
|
|
|
1326
1432
|
exports.isSVMChain = isSVMChain;
|
|
1327
1433
|
exports.isTokenSupported = isTokenSupported;
|
|
1328
1434
|
exports.parseNetworkIdentifier = parseNetworkIdentifier;
|
|
1435
|
+
exports.validateAmount = validateAmount;
|
|
1436
|
+
exports.validateRecipient = validateRecipient;
|
|
1329
1437
|
//# sourceMappingURL=index.js.map
|
|
1330
1438
|
//# sourceMappingURL=index.js.map
|