@getpara/react-common 1.7.1 → 1.8.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/chunk-IV3L3JVM.js +46 -0
- package/dist/classes/ParaInternal.js +25 -0
- package/dist/classes/index.js +2 -0
- package/dist/components/HeroSpinner.js +55 -0
- package/dist/components/KnownDevices.js +60 -0
- package/dist/components/MoonPayEmbed.js +195 -0
- package/dist/components/QRCode.js +80 -0
- package/dist/components/RampEmbed.js +103 -0
- package/dist/components/StripeEmbed.js +138 -0
- package/dist/components/UserIdentifier.js +73 -0
- package/dist/components/common.d.ts +3 -3
- package/dist/components/common.js +54 -0
- package/dist/components/index.js +9 -0
- package/dist/constants/aaguiMetadata.js +145 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useCopyToClipboard.js +36 -0
- package/dist/index.js +5 -1285
- package/dist/package.json +3 -1
- package/dist/types/index.js +1 -0
- package/dist/utils/formatBiometricHints.js +51 -0
- package/dist/utils/formatPhoneNumber.js +25 -0
- package/dist/utils/getBrowserName.js +7 -0
- package/dist/utils/getDeviceLogo.js +36 -0
- package/dist/utils/getDeviceModelName.js +21 -0
- package/dist/utils/getExternalWalletDisplayName.js +22 -0
- package/dist/utils/index.js +113 -0
- package/dist/utils/offRampSend.js +71 -0
- package/package.json +4 -4
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
package/dist/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
__spreadValues
|
|
4
|
+
} from "../chunk-IV3L3JVM.js";
|
|
5
|
+
import { UAParser } from "ua-parser-js";
|
|
6
|
+
import { aaguidMetadata } from "../constants/aaguiMetadata.js";
|
|
7
|
+
const formatStringToUUID = (str) => {
|
|
8
|
+
if (str.length !== 32) {
|
|
9
|
+
return void 0;
|
|
10
|
+
}
|
|
11
|
+
return `${str.slice(0, 8)}-${str.slice(8, 12)}-${str.slice(12, 16)}-${str.slice(16, 20)}-${str.slice(20)}`;
|
|
12
|
+
};
|
|
13
|
+
const formatBiometricHints = (hints) => {
|
|
14
|
+
let hasMobileDevice = false, isOnKnownDevice = false;
|
|
15
|
+
const deviceParsedUA = UAParser();
|
|
16
|
+
const formattedHintsByKey = {};
|
|
17
|
+
hints == null ? void 0 : hints.forEach((hint) => {
|
|
18
|
+
var _a;
|
|
19
|
+
let isMobile = false, isKnownDevice = false, passwordManager, parsedUA, key = "";
|
|
20
|
+
if (hint.useragent) {
|
|
21
|
+
parsedUA = new UAParser(hint.useragent).getResult();
|
|
22
|
+
if (parsedUA.device.type === "mobile" || parsedUA.device.type === "tablet") {
|
|
23
|
+
isMobile = true;
|
|
24
|
+
hasMobileDevice = true;
|
|
25
|
+
}
|
|
26
|
+
if (deviceParsedUA) {
|
|
27
|
+
if (deviceParsedUA.browser.name === parsedUA.browser.name && deviceParsedUA.device.type === parsedUA.device.type && deviceParsedUA.device.vendor === parsedUA.device.vendor && deviceParsedUA.device.model === parsedUA.device.model) {
|
|
28
|
+
isOnKnownDevice = true;
|
|
29
|
+
isKnownDevice = true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
key = `${parsedUA == null ? void 0 : parsedUA.browser.name}-${parsedUA == null ? void 0 : parsedUA.device.type}-${parsedUA == null ? void 0 : parsedUA.device.vendor}-${parsedUA == null ? void 0 : parsedUA.device.model}`;
|
|
33
|
+
}
|
|
34
|
+
if (hint.aaguid) {
|
|
35
|
+
const formattedAaguid = formatStringToUUID(hint.aaguid);
|
|
36
|
+
if (formattedAaguid) {
|
|
37
|
+
passwordManager = (_a = aaguidMetadata[formattedAaguid]) == null ? void 0 : _a.name;
|
|
38
|
+
}
|
|
39
|
+
key = `${key}${key ? "-" : ""}${passwordManager}`;
|
|
40
|
+
}
|
|
41
|
+
formattedHintsByKey[key] = __spreadValues({ passwordManager, isMobile, isKnownDevice, key }, parsedUA);
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
hasMobileDevice,
|
|
45
|
+
isOnKnownDevice,
|
|
46
|
+
formattedHints: Object.values(formattedHintsByKey)
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export {
|
|
50
|
+
formatBiometricHints
|
|
51
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "../chunk-IV3L3JVM.js";
|
|
3
|
+
import parsePhoneNumberFromString from "libphonenumber-js";
|
|
4
|
+
const formatPhoneNumber = (phone, countryCode) => {
|
|
5
|
+
phone = phone.toString();
|
|
6
|
+
countryCode = countryCode == null ? void 0 : countryCode.toString();
|
|
7
|
+
let sanitizedNumber, parsedNumber;
|
|
8
|
+
if (!!countryCode) {
|
|
9
|
+
sanitizedNumber = phone.replace(/\D/g, "");
|
|
10
|
+
if (/^\+\d+$/.test(countryCode)) {
|
|
11
|
+
countryCode = countryCode.slice(1);
|
|
12
|
+
}
|
|
13
|
+
parsedNumber = parsePhoneNumberFromString(sanitizedNumber, { defaultCallingCode: countryCode });
|
|
14
|
+
} else {
|
|
15
|
+
sanitizedNumber = `${phone.startsWith("+") ? "" : "+"}${phone.replace(/[^\d+]/g, "")}`;
|
|
16
|
+
parsedNumber = parsePhoneNumberFromString(sanitizedNumber);
|
|
17
|
+
}
|
|
18
|
+
if (parsedNumber == null ? void 0 : parsedNumber.isValid()) {
|
|
19
|
+
return parsedNumber.formatInternational();
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
};
|
|
23
|
+
export {
|
|
24
|
+
formatPhoneNumber
|
|
25
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "../chunk-IV3L3JVM.js";
|
|
3
|
+
const getDeviceLogo = (vendor, isMobile) => {
|
|
4
|
+
switch (vendor == null ? void 0 : vendor.toLowerCase()) {
|
|
5
|
+
case "apple": {
|
|
6
|
+
return "apple";
|
|
7
|
+
}
|
|
8
|
+
case "samsung": {
|
|
9
|
+
return "samsung";
|
|
10
|
+
}
|
|
11
|
+
case "lenovo": {
|
|
12
|
+
return "lenovo";
|
|
13
|
+
}
|
|
14
|
+
case "lg": {
|
|
15
|
+
return "lg";
|
|
16
|
+
}
|
|
17
|
+
case "motorola": {
|
|
18
|
+
return "motorola";
|
|
19
|
+
}
|
|
20
|
+
case "dell": {
|
|
21
|
+
return "dell";
|
|
22
|
+
}
|
|
23
|
+
case "hp": {
|
|
24
|
+
return "hp";
|
|
25
|
+
}
|
|
26
|
+
default: {
|
|
27
|
+
if (isMobile) {
|
|
28
|
+
return "phone";
|
|
29
|
+
}
|
|
30
|
+
return "laptop";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
getDeviceLogo
|
|
36
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "../chunk-IV3L3JVM.js";
|
|
3
|
+
const getDeviceModelName = (model) => {
|
|
4
|
+
if (!model) {
|
|
5
|
+
return void 0;
|
|
6
|
+
}
|
|
7
|
+
switch (model.toLowerCase()) {
|
|
8
|
+
case "macintosh": {
|
|
9
|
+
return "Mac";
|
|
10
|
+
}
|
|
11
|
+
case "k": {
|
|
12
|
+
return "Android";
|
|
13
|
+
}
|
|
14
|
+
default: {
|
|
15
|
+
return model;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
getDeviceModelName
|
|
21
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "../chunk-IV3L3JVM.js";
|
|
3
|
+
import { truncateAddress, WalletType } from "@getpara/web-sdk";
|
|
4
|
+
const getExternalWalletDisplayName = ({ address, type }) => {
|
|
5
|
+
const walletType = type;
|
|
6
|
+
let walletTypeDisplay;
|
|
7
|
+
switch (walletType) {
|
|
8
|
+
case WalletType.EVM:
|
|
9
|
+
walletTypeDisplay = "EVM";
|
|
10
|
+
break;
|
|
11
|
+
case WalletType.SOLANA:
|
|
12
|
+
walletTypeDisplay = "Solana";
|
|
13
|
+
break;
|
|
14
|
+
case WalletType.COSMOS:
|
|
15
|
+
walletTypeDisplay = "Cosmos";
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
return `${walletTypeDisplay} ${truncateAddress(address, walletType)}`;
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
getExternalWalletDisplayName
|
|
22
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "../chunk-IV3L3JVM.js";
|
|
3
|
+
import {
|
|
4
|
+
OnRampAsset,
|
|
5
|
+
Network,
|
|
6
|
+
getOnRampNetworks,
|
|
7
|
+
getOnRampAssets,
|
|
8
|
+
toAssetInfoArray
|
|
9
|
+
} from "@getpara/web-sdk";
|
|
10
|
+
function getCurrencyCodes({ assetInfo, allowedAssets, defaultOnRampNetwork, defaultOnRampAsset }, {
|
|
11
|
+
provider,
|
|
12
|
+
purchaseType,
|
|
13
|
+
walletType
|
|
14
|
+
}) {
|
|
15
|
+
let defaultCurrencyCode;
|
|
16
|
+
const currencyCodes = getOnRampNetworks(assetInfo, {
|
|
17
|
+
walletType,
|
|
18
|
+
allowed: allowedAssets ? Object.keys(allowedAssets) : void 0
|
|
19
|
+
}).sort((a, b) => a === defaultOnRampNetwork ? -1 : b === defaultOnRampNetwork ? 1 : 0).reduce((acc, network) => {
|
|
20
|
+
const allowed = Array.isArray(allowedAssets == null ? void 0 : allowedAssets[network]) ? allowedAssets[network] : void 0;
|
|
21
|
+
return [
|
|
22
|
+
...acc,
|
|
23
|
+
...getOnRampAssets(assetInfo, { walletType, network, allowed }).sort((a, b) => a === defaultOnRampAsset ? -1 : b === defaultOnRampAsset ? 1 : 0).map((asset) => {
|
|
24
|
+
var _a, _b, _c, _d, _e, _f;
|
|
25
|
+
if (network === defaultOnRampNetwork && asset === defaultOnRampAsset) {
|
|
26
|
+
defaultCurrencyCode = (_c = (_b = (_a = assetInfo[walletType]) == null ? void 0 : _a[network]) == null ? void 0 : _b[asset]) == null ? void 0 : _c[provider][0];
|
|
27
|
+
}
|
|
28
|
+
return (_f = (_e = (_d = assetInfo[walletType]) == null ? void 0 : _d[network]) == null ? void 0 : _e[asset]) == null ? void 0 : _f[provider];
|
|
29
|
+
}).filter((entry) => !!entry && !!entry[1][purchaseType]).map(([code]) => code)
|
|
30
|
+
];
|
|
31
|
+
}, []).filter((code) => !!code);
|
|
32
|
+
return { currencyCodes, defaultCurrencyCode: defaultCurrencyCode || currencyCodes[0] };
|
|
33
|
+
}
|
|
34
|
+
function reverseCurrencyLookup(data, provider, code) {
|
|
35
|
+
const row = toAssetInfoArray(data).find(
|
|
36
|
+
([_, __, ___, providers]) => [code.toUpperCase(), code.toLowerCase()].includes(providers[provider][0])
|
|
37
|
+
);
|
|
38
|
+
return [row == null ? void 0 : row[1], row == null ? void 0 : row[2]];
|
|
39
|
+
}
|
|
40
|
+
const TestNetworks = [{ main: Network.ETHEREUM, test: Network.SEPOLIA }];
|
|
41
|
+
function getNetworkTestEquivalent(network) {
|
|
42
|
+
var _a;
|
|
43
|
+
return (_a = TestNetworks.find(({ main }) => main === network)) == null ? void 0 : _a.test;
|
|
44
|
+
}
|
|
45
|
+
function getNetworkOrMainNetEquivalent(network, testMode) {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
return testMode ? (_b = (_a = TestNetworks.find(({ test }) => test === network)) == null ? void 0 : _a.main) != null ? _b : network : network;
|
|
48
|
+
}
|
|
49
|
+
const NetworkChainIds = [
|
|
50
|
+
{ chainId: "11155111", network: Network.SEPOLIA },
|
|
51
|
+
{ chainId: "1", network: Network.ETHEREUM },
|
|
52
|
+
{ chainId: "137", network: Network.POLYGON },
|
|
53
|
+
{ chainId: "42220", network: Network.CELO },
|
|
54
|
+
{ chainId: "8453", network: Network.BASE },
|
|
55
|
+
{ chainId: "42161", network: Network.ARBITRUM },
|
|
56
|
+
{ chainId: "10", network: Network.OPTIMISM }
|
|
57
|
+
];
|
|
58
|
+
function getChainId(network) {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
return (_b = (_a = NetworkChainIds.find(({ network: n }) => n === network)) == null ? void 0 : _a.chainId) != null ? _b : void 0;
|
|
61
|
+
}
|
|
62
|
+
function getNetworkFromChainId(chainId) {
|
|
63
|
+
var _a;
|
|
64
|
+
return chainId ? (_a = NetworkChainIds.find(({ chainId: c }) => c === chainId)) == null ? void 0 : _a.network : void 0;
|
|
65
|
+
}
|
|
66
|
+
const ETH_CONTRACT_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
67
|
+
const NetworkAssetAddresses = [
|
|
68
|
+
{ network: Network.ETHEREUM, asset: OnRampAsset.USDC, address: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" },
|
|
69
|
+
{ network: Network.POLYGON, asset: OnRampAsset.USDC, address: "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359" },
|
|
70
|
+
{ network: Network.CELO, asset: OnRampAsset.USDC, address: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C" },
|
|
71
|
+
{ network: Network.BASE, asset: OnRampAsset.USDC, address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" },
|
|
72
|
+
{ network: Network.ARBITRUM, asset: OnRampAsset.USDC, address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831" },
|
|
73
|
+
{ network: Network.OPTIMISM, asset: OnRampAsset.USDC, address: "0x0b2c639c533813f4aa9d7837caf62653d097ff85" },
|
|
74
|
+
{ network: Network.SOLANA, asset: OnRampAsset.USDC, address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" },
|
|
75
|
+
{ network: Network.SEPOLIA, asset: OnRampAsset.USDC, address: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238" }
|
|
76
|
+
];
|
|
77
|
+
function getAssetFromContractAddress(network, contractAddress) {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
if (contractAddress === ETH_CONTRACT_ADDRESS) {
|
|
80
|
+
return OnRampAsset.ETHEREUM;
|
|
81
|
+
}
|
|
82
|
+
const checkNetworks = [network, (_a = getNetworkOrMainNetEquivalent(network)) != null ? _a : void 0].filter((n) => !!n).map((n) => Network[n]);
|
|
83
|
+
return (_b = NetworkAssetAddresses.find(
|
|
84
|
+
(row) => checkNetworks.includes(row.network) && row.asset.toLowerCase() === contractAddress.toLowerCase()
|
|
85
|
+
)) == null ? void 0 : _b.asset;
|
|
86
|
+
}
|
|
87
|
+
function getContractAddressFromAsset(network, asset) {
|
|
88
|
+
var _a;
|
|
89
|
+
if (asset === OnRampAsset.ETHEREUM) {
|
|
90
|
+
return ETH_CONTRACT_ADDRESS;
|
|
91
|
+
}
|
|
92
|
+
return (_a = NetworkAssetAddresses.find((row) => row.network === network && row.asset === asset)) == null ? void 0 : _a.address;
|
|
93
|
+
}
|
|
94
|
+
export * from "./offRampSend.js";
|
|
95
|
+
export * from "./getDeviceLogo.js";
|
|
96
|
+
export * from "./getDeviceModelName.js";
|
|
97
|
+
export * from "./getBrowserName.js";
|
|
98
|
+
export * from "./formatBiometricHints.js";
|
|
99
|
+
export * from "./formatPhoneNumber.js";
|
|
100
|
+
export * from "./getExternalWalletDisplayName.js";
|
|
101
|
+
export {
|
|
102
|
+
NetworkAssetAddresses,
|
|
103
|
+
NetworkChainIds,
|
|
104
|
+
TestNetworks,
|
|
105
|
+
getAssetFromContractAddress,
|
|
106
|
+
getChainId,
|
|
107
|
+
getContractAddressFromAsset,
|
|
108
|
+
getCurrencyCodes,
|
|
109
|
+
getNetworkFromChainId,
|
|
110
|
+
getNetworkOrMainNetEquivalent,
|
|
111
|
+
getNetworkTestEquivalent,
|
|
112
|
+
reverseCurrencyLookup
|
|
113
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
__async
|
|
4
|
+
} from "../chunk-IV3L3JVM.js";
|
|
5
|
+
import { hexStringToBase64, WalletType } from "@getpara/web-sdk";
|
|
6
|
+
function offRampSend(_0, _1, _2, _3) {
|
|
7
|
+
return __async(this, arguments, function* (para, { id: purchaseId, provider, walletId, walletType, address, testMode = false }, setOnRampPurchase, {
|
|
8
|
+
assetQuantity,
|
|
9
|
+
fiat,
|
|
10
|
+
fiatQuantity,
|
|
11
|
+
chainId,
|
|
12
|
+
destinationAddress,
|
|
13
|
+
contractAddress
|
|
14
|
+
}) {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
if (!purchaseId || !walletId || !walletType || !provider) {
|
|
17
|
+
throw new Error("Missing required fields");
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const { tx, network, asset } = yield para.ctx.client.generateOffRampTx(para.getUserId(), {
|
|
21
|
+
walletId,
|
|
22
|
+
walletType,
|
|
23
|
+
provider,
|
|
24
|
+
chainId,
|
|
25
|
+
destinationAddress,
|
|
26
|
+
sourceAddress: address,
|
|
27
|
+
contractAddress,
|
|
28
|
+
testMode,
|
|
29
|
+
assetQuantity
|
|
30
|
+
});
|
|
31
|
+
let signature;
|
|
32
|
+
switch (walletType) {
|
|
33
|
+
case WalletType.EVM:
|
|
34
|
+
signature = (_a = yield para.signTransaction({
|
|
35
|
+
walletId,
|
|
36
|
+
rlpEncodedTxBase64: hexStringToBase64(tx),
|
|
37
|
+
chainId
|
|
38
|
+
})) == null ? void 0 : _a.signature;
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Unsupported wallet type: ${walletType}`);
|
|
42
|
+
}
|
|
43
|
+
const { txHash } = yield para.ctx.client.sendOffRampTx(para.getUserId(), {
|
|
44
|
+
tx,
|
|
45
|
+
signature: walletType === "EVM" ? `0x${signature}` : signature,
|
|
46
|
+
network,
|
|
47
|
+
walletId,
|
|
48
|
+
walletType
|
|
49
|
+
});
|
|
50
|
+
const updated = yield para.ctx.client.updateOnRampPurchase({
|
|
51
|
+
userId: para.getUserId(),
|
|
52
|
+
walletId,
|
|
53
|
+
purchaseId,
|
|
54
|
+
updates: {
|
|
55
|
+
fiat,
|
|
56
|
+
fiatQuantity,
|
|
57
|
+
assetQuantity,
|
|
58
|
+
network,
|
|
59
|
+
asset
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
setOnRampPurchase(updated);
|
|
63
|
+
return txHash;
|
|
64
|
+
} catch (e) {
|
|
65
|
+
throw new Error(((_b = e.response) == null ? void 0 : _b.data) || e.message);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
offRampSend
|
|
71
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getpara/react-common",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"*.css"
|
|
12
12
|
],
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@getpara/react-components": "1.
|
|
15
|
-
"@getpara/web-sdk": "1.
|
|
14
|
+
"@getpara/react-components": "1.8.0",
|
|
15
|
+
"@getpara/web-sdk": "1.8.0",
|
|
16
16
|
"@moonpay/moonpay-react": "^1.8.3",
|
|
17
17
|
"@ramp-network/ramp-instant-sdk": "^4.0.5",
|
|
18
18
|
"@stripe/crypto": "^0.0.4",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"resolutions": {
|
|
44
44
|
"styled-components": "^6"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "ef96e79558695ccbe148d25a8e3611c4596d1954"
|
|
47
47
|
}
|
package/dist/index.js.br
DELETED
|
Binary file
|
package/dist/index.js.gz
DELETED
|
Binary file
|