@n1xyz/wallet-widget 0.0.29 → 0.0.30
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/README.md +89 -11
- package/dist/Logic/sessionManager.js +8 -8
- package/dist/Logic/sessionManager.js.map +1 -1
- package/dist/Logic/transactionManager.d.ts +0 -22
- package/dist/Logic/transactionManager.js +0 -189
- package/dist/Logic/transactionManager.js.map +1 -1
- package/dist/Logic/utils.d.ts +3 -7
- package/dist/Logic/utils.js +3 -186
- package/dist/Logic/utils.js.map +1 -1
- package/dist/Modal/LoadingFallback.js +1 -1
- package/dist/Modal/LoadingFallback.js.map +1 -1
- package/dist/Modal/N1WalletModal.d.ts +1 -1
- package/dist/Modal/N1WalletModal.js +50 -205
- package/dist/Modal/N1WalletModal.js.map +1 -1
- package/dist/Modal/NTSFlow/views/CreateSessionView.d.ts +1 -1
- package/dist/Modal/NordFlow/NordFlow.js +44 -17
- package/dist/Modal/NordFlow/NordFlow.js.map +1 -1
- package/dist/Modal/NordFlow/components/ChainButton.d.ts +5 -2
- package/dist/Modal/NordFlow/components/ChainButton.js +16 -13
- package/dist/Modal/NordFlow/components/ChainButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/EVMChainsButton.d.ts +2 -1
- package/dist/Modal/NordFlow/components/EVMChainsButton.js +11 -9
- package/dist/Modal/NordFlow/components/EVMChainsButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/Header.d.ts +3 -1
- package/dist/Modal/NordFlow/components/Header.js +38 -4
- package/dist/Modal/NordFlow/components/Header.js.map +1 -1
- package/dist/Modal/NordFlow/components/ImageWithFallback.js +1 -1
- package/dist/Modal/NordFlow/components/ImageWithFallback.js.map +1 -1
- package/dist/Modal/NordFlow/components/MoreButton.d.ts +1 -1
- package/dist/Modal/NordFlow/components/MoreButton.js +4 -4
- package/dist/Modal/NordFlow/components/MoreButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/TransactionTable.d.ts +1 -1
- package/dist/Modal/NordFlow/components/TransactionTable.js +11 -11
- package/dist/Modal/NordFlow/components/TransactionTable.js.map +1 -1
- package/dist/Modal/NordFlow/components/WaitingMessage.d.ts +3 -1
- package/dist/Modal/NordFlow/components/WaitingMessage.js +14 -3
- package/dist/Modal/NordFlow/components/WaitingMessage.js.map +1 -1
- package/dist/Modal/NordFlow/components/index.d.ts +0 -1
- package/dist/Modal/NordFlow/components/index.js +0 -1
- package/dist/Modal/NordFlow/components/index.js.map +1 -1
- package/dist/Modal/NordFlow/constants.js +12 -48
- package/dist/Modal/NordFlow/constants.js.map +1 -1
- package/dist/Modal/NordFlow/context/DepositContext.js +112 -41
- package/dist/Modal/NordFlow/context/DepositContext.js.map +1 -1
- package/dist/Modal/NordFlow/context/FlowContext.d.ts +1 -0
- package/dist/Modal/NordFlow/context/FlowContext.js +99 -6
- package/dist/Modal/NordFlow/context/FlowContext.js.map +1 -1
- package/dist/Modal/NordFlow/context/WalletConnectContext.js +76 -20
- package/dist/Modal/NordFlow/context/WalletConnectContext.js.map +1 -1
- package/dist/Modal/NordFlow/hoc/withImageFallback.js.map +1 -1
- package/dist/Modal/NordFlow/hooks/useTestnetFaucet.d.ts +2 -1
- package/dist/Modal/NordFlow/hooks/useTestnetFaucet.js +26 -7
- package/dist/Modal/NordFlow/hooks/useTestnetFaucet.js.map +1 -1
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.d.ts +1 -1
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js +10 -15
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.js +103 -54
- package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/03-AmountInputScreen.d.ts +1 -2
- package/dist/Modal/NordFlow/screens/03-AmountInputScreen.js +284 -60
- package/dist/Modal/NordFlow/screens/03-AmountInputScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.js +2 -2
- package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.js +97 -110
- package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.js +10 -8
- package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/index.d.ts +5 -9
- package/dist/Modal/NordFlow/screens/index.js +5 -9
- package/dist/Modal/NordFlow/screens/index.js.map +1 -1
- package/dist/Modal/NordFlow/types.d.ts +13 -3
- package/dist/Modal/NordFlow/types.js +4 -3
- package/dist/Modal/NordFlow/types.js.map +1 -1
- package/dist/Modal/NordFlow/utils/depositStorage.d.ts +4 -0
- package/dist/Modal/NordFlow/utils/depositStorage.js +48 -0
- package/dist/Modal/NordFlow/utils/depositStorage.js.map +1 -0
- package/dist/Modal/NordFlow/utils/nordUtils.d.ts +1 -1
- package/dist/Modal/NordFlow/utils/nordUtils.js +1 -1
- package/dist/Modal/NordFlow/utils/nordUtils.js.map +1 -1
- package/dist/Provider/LazyWalletProvider.d.ts +1 -1
- package/dist/Provider/LazyWalletProvider.js +38 -38
- package/dist/Provider/LazyWalletProvider.js.map +1 -1
- package/dist/Provider/N1WalletProvider.d.ts +2 -1
- package/dist/Provider/N1WalletProvider.js +85 -82
- package/dist/Provider/N1WalletProvider.js.map +1 -1
- package/dist/Provider/ShadowRootWrapper.d.ts +1 -1
- package/dist/Provider/WalletErrorBoundary.d.ts +9 -2
- package/dist/Provider/WalletErrorBoundary.js +19 -1
- package/dist/Provider/WalletErrorBoundary.js.map +1 -1
- package/dist/Provider/hooks/useNordUserInitialization.js +87 -35
- package/dist/Provider/hooks/useNordUserInitialization.js.map +1 -1
- package/dist/Provider/icons/CoinbaseWalletIcon.d.ts +1 -1
- package/dist/Provider/icons/ConnectionDotsSVG.d.ts +1 -1
- package/dist/Provider/icons/MetamaskIcon.d.ts +1 -1
- package/dist/Provider/icons/PhantomIcon.d.ts +1 -1
- package/dist/Provider/icons/UserIcon.d.ts +1 -1
- package/dist/Provider/icons/WalletConnectIcon.d.ts +1 -1
- package/dist/Provider/types.d.ts +18 -16
- package/dist/Provider/types.js +8 -2
- package/dist/Provider/types.js.map +1 -1
- package/dist/WidgetButton/N1ConnectButton.d.ts +1 -1
- package/dist/WidgetButton/N1ConnectButton.js +29 -10
- package/dist/WidgetButton/N1ConnectButton.js.map +1 -1
- package/dist/components/Logo.d.ts +2 -1
- package/dist/components/Logo.js +5 -2
- package/dist/components/Logo.js.map +1 -1
- package/dist/components/QRCodeLoader.d.ts +1 -1
- package/dist/components/QRCodeLoader.js +1 -1
- package/dist/components/QRCodeLoader.js.map +1 -1
- package/dist/components/logos/EVMChainsGroup.js +1 -1
- package/dist/components/logos/EVMChainsGroup.js.map +1 -1
- package/dist/components/logos/MoreChainsGroup.js +1 -1
- package/dist/components/logos/MoreChainsGroup.js.map +1 -1
- package/dist/components/logos/index.d.ts +0 -2
- package/dist/components/logos/index.js +0 -2
- package/dist/components/logos/index.js.map +1 -1
- package/dist/config/solana.d.ts +3 -15
- package/dist/config/solana.js +6 -29
- package/dist/config/solana.js.map +1 -1
- package/dist/embedded-main-css.d.ts +1 -1
- package/dist/embedded-main-css.js +1 -1
- package/dist/embedded-main-css.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main.css +2 -2
- package/dist/polyfills/windowEthereumGuard.d.ts +6 -0
- package/dist/polyfills/windowEthereumGuard.js +28 -0
- package/dist/polyfills/windowEthereumGuard.js.map +1 -0
- package/package.json +26 -11
- package/dist/utils/dynamicImports.d.ts +0 -25
|
@@ -1,74 +1,298 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
23
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
49
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
50
|
+
if (ar || !(i in from)) {
|
|
51
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
52
|
+
ar[i] = from[i];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
56
|
+
};
|
|
57
|
+
var _a;
|
|
58
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
59
|
+
import { Connection, LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
|
|
60
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
61
|
+
import { SolanaLogo } from "../../../components/logos";
|
|
62
|
+
import { getSolanaRpcUrl, SolanaNetwork } from "../../../config/solana";
|
|
63
|
+
import { useN1WalletContext } from "../../../Provider/hooks";
|
|
64
|
+
import { logger } from "../../../utils/logger";
|
|
65
|
+
import { useDepositContext } from "../context/DepositContext";
|
|
66
|
+
import { useFlowStateContext } from "../context/FlowContext";
|
|
67
|
+
import { formatAmount, isNordConfigured } from "../utils/nordUtils";
|
|
68
|
+
var USDC_MINT_BY_NETWORK = (_a = {},
|
|
69
|
+
_a[SolanaNetwork.MAINNET] = "EPjFWdd5AufqSSqeM2qN1xzybapC8hEki3H6KNozN8n",
|
|
70
|
+
_a[SolanaNetwork.TESTNET] = "Gh9ZwEmdLJ8DscKDTvQYTNUCq6sDgtdHcW52quXFMcGQ",
|
|
71
|
+
_a[SolanaNetwork.DEVNET] = "Gh9ZwEmdLJ8DscKDTvQYTNUCq6sDgtdHcW52quXFMcGQ",
|
|
72
|
+
_a);
|
|
73
|
+
var GAS_FEE_LAMPORTS = 5000; // ~0.000005 SOL
|
|
74
|
+
var BALANCE_REFRESH_MS = 20000;
|
|
75
|
+
var DEFAULT_AMOUNT = "100";
|
|
76
|
+
var DEFAULT_MIN_DEPOSIT = 5;
|
|
77
|
+
var INITIAL_BALANCE_STATE = {
|
|
78
|
+
usdc: null,
|
|
79
|
+
sol: null,
|
|
80
|
+
loading: false,
|
|
81
|
+
error: null,
|
|
82
|
+
};
|
|
11
83
|
export function AmountInputScreen(_a) {
|
|
12
|
-
var
|
|
84
|
+
var _this = this;
|
|
13
85
|
var context = useFlowStateContext().context;
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
var
|
|
20
|
-
|
|
86
|
+
var _b = useDepositContext(), amount = _b.amount, updateAmount = _b.updateAmount, startDeposit = _b.startDeposit;
|
|
87
|
+
var _c = useN1WalletContext(), nord = _c.nord, address = _c.address;
|
|
88
|
+
var _d = useState("USDC"), tokenSymbol = _d[0], setTokenSymbol = _d[1];
|
|
89
|
+
var _e = useState(6), tokenDecimals = _e[0], setTokenDecimals = _e[1];
|
|
90
|
+
var _f = useState(INITIAL_BALANCE_STATE), walletBalances = _f[0], setWalletBalances = _f[1];
|
|
91
|
+
var isMountedRef = useRef(true);
|
|
92
|
+
useEffect(function () {
|
|
93
|
+
return function () {
|
|
94
|
+
isMountedRef.current = false;
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
97
|
+
useEffect(function () {
|
|
98
|
+
if (!amount) {
|
|
99
|
+
updateAmount(DEFAULT_AMOUNT);
|
|
100
|
+
}
|
|
101
|
+
}, [amount, updateAmount]);
|
|
102
|
+
var selectedChainName = context.selectedChain || "Solana";
|
|
103
|
+
var selectedNetwork = useMemo(function () {
|
|
104
|
+
var configuredNetwork = context.selectedChainNetwork;
|
|
105
|
+
if (configuredNetwork &&
|
|
106
|
+
Object.values(SolanaNetwork).includes(configuredNetwork)) {
|
|
107
|
+
return configuredNetwork;
|
|
108
|
+
}
|
|
109
|
+
return SolanaNetwork.MAINNET;
|
|
110
|
+
}, [context.selectedChainNetwork]);
|
|
111
|
+
var fallbackMintForNetwork = useMemo(function () {
|
|
112
|
+
var _a;
|
|
113
|
+
return (_a = USDC_MINT_BY_NETWORK[selectedNetwork]) !== null && _a !== void 0 ? _a : USDC_MINT_BY_NETWORK[SolanaNetwork.MAINNET];
|
|
114
|
+
}, [selectedNetwork]);
|
|
115
|
+
var _g = useState(fallbackMintForNetwork), tokenMintAddress = _g[0], setTokenMintAddress = _g[1];
|
|
21
116
|
useEffect(function () {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}, [updateAmount]);
|
|
25
|
-
var _d = useState(false), isHovered = _d[0], setIsHovered = _d[1];
|
|
26
|
-
// Get token information from Nord if available
|
|
27
|
-
var _e = useState('USDC'), tokenSymbol = _e[0], setTokenSymbol = _e[1];
|
|
28
|
-
var _f = useState('https://res.cloudinary.com/dl3ia3pko/image/upload/v1745874373/usdc_ma4igc.svg'), tokenLogo = _f[0], setTokenLogo = _f[1];
|
|
29
|
-
var _g = useState(6), tokenDecimals = _g[0], setTokenDecimals = _g[1];
|
|
30
|
-
// Try to get token information from Nord
|
|
117
|
+
setTokenMintAddress(fallbackMintForNetwork);
|
|
118
|
+
}, [fallbackMintForNetwork]);
|
|
31
119
|
useEffect(function () {
|
|
32
120
|
if (nord && isNordConfigured(nord)) {
|
|
33
121
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// setTokenLogo(`/images/tokens/${usdcToken.symbol.toLowerCase()}.svg`);
|
|
40
|
-
setTokenLogo('https://res.cloudinary.com/dl3ia3pko/image/upload/v1745874373/usdc_ma4igc.svg');
|
|
41
|
-
setTokenDecimals(usdcToken.decimals);
|
|
122
|
+
var usdcToken_1 = nord.tokens.find(function (t) { return t.symbol === "USDC"; }) || nord.tokens[0];
|
|
123
|
+
if (usdcToken_1) {
|
|
124
|
+
setTokenSymbol(usdcToken_1.symbol);
|
|
125
|
+
setTokenDecimals(usdcToken_1.decimals);
|
|
126
|
+
setTokenMintAddress(function (prev) { var _a; return (_a = usdcToken_1.mintAddr) !== null && _a !== void 0 ? _a : prev; });
|
|
42
127
|
}
|
|
43
128
|
}
|
|
44
129
|
catch (error) {
|
|
45
|
-
|
|
130
|
+
logger.warn("Error getting token information from Nord:", error);
|
|
46
131
|
}
|
|
47
132
|
}
|
|
48
133
|
}, [nord]);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
134
|
+
var minDeposit = useMemo(function () {
|
|
135
|
+
var _a, _b;
|
|
136
|
+
if (!nord || !isNordConfigured(nord) || !tokenMintAddress) {
|
|
137
|
+
return DEFAULT_MIN_DEPOSIT;
|
|
138
|
+
}
|
|
139
|
+
try {
|
|
140
|
+
// @ts-ignore
|
|
141
|
+
var mintInfo = (_b = (_a = nord.protonClient) === null || _a === void 0 ? void 0 : _a.mintInfo) === null || _b === void 0 ? void 0 : _b.get(tokenMintAddress);
|
|
142
|
+
if (mintInfo === null || mintInfo === void 0 ? void 0 : mintInfo.minDeposit) {
|
|
143
|
+
var minDepositUnits = Number(mintInfo.minDeposit);
|
|
144
|
+
var divisor = Math.pow(10, tokenDecimals);
|
|
145
|
+
if (Number.isFinite(minDepositUnits) && divisor > 0) {
|
|
146
|
+
return minDepositUnits / divisor;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
logger.warn("Unable to derive min deposit from Nord config", error);
|
|
152
|
+
}
|
|
153
|
+
return DEFAULT_MIN_DEPOSIT;
|
|
154
|
+
}, [nord, tokenMintAddress, tokenDecimals]);
|
|
155
|
+
var fetchBalances = useCallback(function () {
|
|
156
|
+
var args_1 = [];
|
|
157
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
158
|
+
args_1[_i] = arguments[_i];
|
|
159
|
+
}
|
|
160
|
+
return __awaiter(_this, __spreadArray([], args_1, true), void 0, function (showSpinner) {
|
|
161
|
+
var rpcEndpoint, connection, ownerKey, _a, solLamports, tokenAccounts, usdcTotal, error_1;
|
|
162
|
+
if (showSpinner === void 0) { showSpinner = true; }
|
|
163
|
+
return __generator(this, function (_b) {
|
|
164
|
+
switch (_b.label) {
|
|
165
|
+
case 0:
|
|
166
|
+
if (!address) {
|
|
167
|
+
if (isMountedRef.current) {
|
|
168
|
+
setWalletBalances(INITIAL_BALANCE_STATE);
|
|
169
|
+
}
|
|
170
|
+
return [2 /*return*/];
|
|
171
|
+
}
|
|
172
|
+
if (showSpinner) {
|
|
173
|
+
setWalletBalances(function (prev) { return (__assign(__assign({}, prev), { loading: true, error: null })); });
|
|
174
|
+
}
|
|
175
|
+
_b.label = 1;
|
|
176
|
+
case 1:
|
|
177
|
+
_b.trys.push([1, 3, , 4]);
|
|
178
|
+
rpcEndpoint = getSolanaRpcUrl();
|
|
179
|
+
connection = new Connection(rpcEndpoint, "confirmed");
|
|
180
|
+
ownerKey = new PublicKey(address);
|
|
181
|
+
return [4 /*yield*/, Promise.all([
|
|
182
|
+
connection.getBalance(ownerKey),
|
|
183
|
+
connection.getParsedTokenAccountsByOwner(ownerKey, {
|
|
184
|
+
mint: new PublicKey(tokenMintAddress),
|
|
185
|
+
}),
|
|
186
|
+
])];
|
|
187
|
+
case 2:
|
|
188
|
+
_a = _b.sent(), solLamports = _a[0], tokenAccounts = _a[1];
|
|
189
|
+
usdcTotal = tokenAccounts.value.reduce(function (total, _a) {
|
|
190
|
+
var _b, _c;
|
|
191
|
+
var account = _a.account;
|
|
192
|
+
var info = (_b = account.data.parsed) === null || _b === void 0 ? void 0 : _b.info;
|
|
193
|
+
var tokenAmount = info === null || info === void 0 ? void 0 : info.tokenAmount;
|
|
194
|
+
if (!tokenAmount) {
|
|
195
|
+
return total;
|
|
196
|
+
}
|
|
197
|
+
var uiAmount = typeof tokenAmount.uiAmount === "number"
|
|
198
|
+
? tokenAmount.uiAmount
|
|
199
|
+
: parseFloat((_c = tokenAmount.uiAmountString) !== null && _c !== void 0 ? _c : "0");
|
|
200
|
+
return total + (Number.isFinite(uiAmount) ? uiAmount : 0);
|
|
201
|
+
}, 0);
|
|
202
|
+
if (!isMountedRef.current) {
|
|
203
|
+
return [2 /*return*/];
|
|
204
|
+
}
|
|
205
|
+
setWalletBalances({
|
|
206
|
+
usdc: usdcTotal,
|
|
207
|
+
sol: solLamports / LAMPORTS_PER_SOL,
|
|
208
|
+
loading: false,
|
|
209
|
+
error: null,
|
|
210
|
+
});
|
|
211
|
+
return [3 /*break*/, 4];
|
|
212
|
+
case 3:
|
|
213
|
+
error_1 = _b.sent();
|
|
214
|
+
logger.warn("Failed to load wallet balances", error_1);
|
|
215
|
+
if (!isMountedRef.current) {
|
|
216
|
+
return [2 /*return*/];
|
|
217
|
+
}
|
|
218
|
+
setWalletBalances(function (prev) { return (__assign(__assign({}, prev), { loading: false, error: "Unable to fetch wallet balances. Please try again." })); });
|
|
219
|
+
return [3 /*break*/, 4];
|
|
220
|
+
case 4: return [2 /*return*/];
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
}, [address, tokenMintAddress]);
|
|
225
|
+
useEffect(function () {
|
|
226
|
+
fetchBalances();
|
|
227
|
+
var interval = setInterval(function () {
|
|
228
|
+
fetchBalances(false);
|
|
229
|
+
}, BALANCE_REFRESH_MS);
|
|
230
|
+
return function () { return clearInterval(interval); };
|
|
231
|
+
}, [fetchBalances]);
|
|
232
|
+
var isSolana = selectedChainName.toLowerCase().includes("solana");
|
|
233
|
+
var gasFeeInSol = GAS_FEE_LAMPORTS / LAMPORTS_PER_SOL;
|
|
234
|
+
var gasFeeUSD = "~$0.0012";
|
|
235
|
+
var minDepositDisplay = minDeposit.toString();
|
|
236
|
+
var formattedBalance = walletBalances.usdc == null
|
|
237
|
+
? walletBalances.loading
|
|
238
|
+
? "Loading..."
|
|
239
|
+
: "—"
|
|
240
|
+
: formatAmount(walletBalances.usdc, tokenDecimals);
|
|
241
|
+
var formattedSolBalance = walletBalances.sol == null
|
|
242
|
+
? walletBalances.loading
|
|
243
|
+
? "Loading..."
|
|
244
|
+
: "—"
|
|
245
|
+
: walletBalances.sol.toFixed(4);
|
|
246
|
+
var numericAmount = Number(amount || 0);
|
|
247
|
+
var hasEnteredAmount = Number.isFinite(numericAmount) && numericAmount > 0;
|
|
248
|
+
var meetsMinDeposit = numericAmount >= minDeposit;
|
|
249
|
+
var hasSufficientUsdc = walletBalances.usdc == null ? false : numericAmount <= walletBalances.usdc;
|
|
250
|
+
var hasSufficientSol = walletBalances.sol == null ? false : walletBalances.sol >= gasFeeInSol;
|
|
251
|
+
var validationError = useMemo(function () {
|
|
252
|
+
if (!address) {
|
|
253
|
+
return "Connect a wallet to continue.";
|
|
254
|
+
}
|
|
255
|
+
if (walletBalances.error) {
|
|
256
|
+
return walletBalances.error;
|
|
257
|
+
}
|
|
258
|
+
if (!hasEnteredAmount) {
|
|
259
|
+
return "Enter an amount to continue.";
|
|
260
|
+
}
|
|
261
|
+
if (walletBalances.loading || walletBalances.usdc == null || walletBalances.sol == null) {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
if (!meetsMinDeposit) {
|
|
265
|
+
return "Minimum deposit is ".concat(minDeposit, " ").concat(tokenSymbol, ".");
|
|
266
|
+
}
|
|
267
|
+
if (!hasSufficientUsdc) {
|
|
268
|
+
return "Insufficient ".concat(tokenSymbol, " balance for this deposit.");
|
|
269
|
+
}
|
|
270
|
+
if (!hasSufficientSol) {
|
|
271
|
+
return "Not enough SOL to cover network fees.";
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}, [
|
|
275
|
+
address,
|
|
276
|
+
walletBalances.error,
|
|
277
|
+
walletBalances.loading,
|
|
278
|
+
walletBalances.usdc,
|
|
279
|
+
walletBalances.sol,
|
|
280
|
+
hasEnteredAmount,
|
|
281
|
+
hasSufficientSol,
|
|
282
|
+
hasSufficientUsdc,
|
|
283
|
+
meetsMinDeposit,
|
|
284
|
+
tokenSymbol,
|
|
285
|
+
minDeposit,
|
|
286
|
+
]);
|
|
287
|
+
var isValidAmount = !walletBalances.loading && validationError === null;
|
|
288
|
+
var handleUseMax = function () {
|
|
289
|
+
if (walletBalances.usdc == null || walletBalances.usdc <= 0) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
updateAmount(walletBalances.usdc.toFixed(tokenDecimals));
|
|
293
|
+
};
|
|
294
|
+
return (_jsxs("div", { className: "overflow-hidden relative", children: [_jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsx("h2", { className: "text-sm text-white font-medium", children: "Deposit From" }), _jsxs("div", { className: "flex items-center space-x-2 rounded-md bg-n1-ww-border h-5 justify-center p-1", children: [isSolana ? (_jsx("div", { className: "rounded-full flex items-center justify-center bg-black h-3 w-3", children: _jsx(SolanaLogo, { width: 6, height: 6 }) })) : (_jsx("div", { className: "w-4 h-4 rounded-full bg-n1-ww-gray-600" })), _jsx("span", { className: "text-white text-xs font-medium", children: selectedChainName })] })] }), _jsxs("div", { className: "space-y-3 mb-4 text-white text-xs font-light", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { children: "Available Balance:" }), _jsxs("span", { children: [formattedBalance, " ", tokenSymbol] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { children: "SOL Balance:" }), _jsxs("span", { children: [formattedSolBalance, " SOL"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { children: "Minimum Deposit:" }), _jsxs("span", { children: [minDepositDisplay, " ", tokenSymbol] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { children: "Gas Fee:" }), _jsxs("span", { children: [gasFeeInSol.toFixed(6), " SOL (", gasFeeUSD, ")"] })] })] }), _jsx("div", { className: "h-px bg-n1-ww-border mb-4" }), _jsxs("div", { className: "mb-4 flex justify-between w-full", children: [_jsx("div", { className: "flex items-center gap-3", children: _jsxs("div", { className: "flex items-center justify-between border border-n1-ww-gray-400 bg-n1-ww-gray-600 flex-1 w-[292px] rounded h-8 px-2", children: [_jsx("span", { className: "text-white text-sm font-medium", children: "Amount" }), _jsxs("div", { className: "flex items-center space-x-2", children: [_jsx("input", { type: "number", step: "0.000001", value: amount, onChange: function (e) { return updateAmount(e.target.value); }, className: "text-white font-light text-xs text-right bg-transparent border-none outline-none focus:ring-2 focus:ring-n1-ww-main focus:ring-offset-0 rounded px-1" }), _jsx("button", { className: "border border-n1-ww-gray-400 h-5 text-white text-xs font-light flex items-center justify-center px-1 rounded transition-colors", children: tokenSymbol })] })] }) }), _jsx("button", { className: "border border-n1-ww-gray-400 bg-n1-ww-gray-600 rounded text-white text-sm font-medium px-2 h-8 hover:bg-n1-ww-gray-800 transition-colors w-[68px]", onClick: handleUseMax, type: "button", children: "Max" })] }), validationError && (_jsx("p", { className: "mb-2 text-xs text-red-400", children: validationError })), _jsx("button", { onClick: startDeposit, disabled: !isValidAmount, className: "\n w-full h-8 rounded border bg-transparent flex font-medium items-center justify-center\n transition-all duration-200 transform\n ".concat(isValidAmount
|
|
295
|
+
? "border-n1-ww-main hover:bg-n1-ww-gray-900 cursor-pointer"
|
|
296
|
+
: "border-n1-ww-border opacity-50 cursor-not-allowed", "\n "), children: _jsx("span", { className: "\n font-medium text-sm opacity-90\n ".concat(isValidAmount ? "text-n1-ww-main" : "text-n1-ww-gray-600", "\n "), children: "Deposit" }) })] }));
|
|
73
297
|
}
|
|
74
298
|
//# sourceMappingURL=03-AmountInputScreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"03-AmountInputScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/03-AmountInputScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useN1WalletContext } from '../../../Provider/hooks';\nimport { ImageWithFallback } from '../components';\nimport { ANIMATION_EASE } from '../constants';\nimport { formatAmount, isNordConfigured } from '../utils/nordUtils';\nimport { useDepositContext } from '../context/DepositContext';\nimport { useFlowStateContext } from '../context/FlowContext';\nimport { useTestnetFaucet } from '../hooks/useTestnetFaucet';\nimport { WaitingMessage } from '../components/WaitingMessage';\n\ninterface AmountInputScreenProps {\n isTestnet?: boolean;\n}\n\nexport function AmountInputScreen({ isTestnet = false }: AmountInputScreenProps) {\n const { context } = useFlowStateContext();\n const { updateAmount, startDeposit } = useDepositContext();\n const { nord } = useN1WalletContext();\n\n // Hard code amount to 100\n const amount = '100';\n // Hard code balance to 0 to allow faucet to trigger\n const balance = 100;\n\n // Force the amount to be 100 on component mount only, not on every render\n useEffect(() => {\n updateAmount('100');\n // Empty dependency array ensures this only runs once on mount\n }, [updateAmount]);\n\n const [isHovered, setIsHovered] = useState(false);\n\n // Get token information from Nord if available\n const [tokenSymbol, setTokenSymbol] = useState('USDC');\n const [tokenLogo, setTokenLogo] = useState('https://res.cloudinary.com/dl3ia3pko/image/upload/v1745874373/usdc_ma4igc.svg');\n const [tokenDecimals, setTokenDecimals] = useState(6);\n\n // Try to get token information from Nord\n useEffect(() => {\n if (nord && isNordConfigured(nord)) {\n try {\n // Find the USDC token or the first token\n const usdcToken =\n nord.tokens.find((t: any) => t.symbol === 'USDC') || nord.tokens[0];\n if (usdcToken) {\n setTokenSymbol(usdcToken.symbol);\n // Use a default logo if not available\n // setTokenLogo(`/images/tokens/${usdcToken.symbol.toLowerCase()}.svg`);\n setTokenLogo('https://res.cloudinary.com/dl3ia3pko/image/upload/v1745874373/usdc_ma4igc.svg');\n setTokenDecimals(usdcToken.decimals);\n }\n } catch (error) {\n console.warn('Error getting token information from Nord:', error);\n }\n }\n }, [nord]);\n\n // Removed handleAmountChange since we don't want user to edit the amount\n\n // todo:fix\n const isValidAmount = true;\n\n const hardcodedMinDeposit = 100;\n\n const {\n showFaucetOverlay,\n isFaucetLoading,\n faucetError,\n showFaucetSuccess,\n requestTestnetTokens,\n } = useTestnetFaucet({\n enabled: isTestnet,\n balance,\n minDeposit: hardcodedMinDeposit,\n });\n\n // Format the balance with the appropriate number of decimal places\n const formattedBalance = formatAmount(balance, tokenDecimals);\n\n return (\n <div className=\"overflow-hidden relative\">\n {/* Faucet Overlay */}\n {isTestnet && showFaucetOverlay && (\n <div className=\"absolute inset-0 z-10 bg-neutral-900/80 backdrop-blur-md flex flex-col items-center justify-center p-6\">\n {isFaucetLoading ? (\n <WaitingMessage\n loaderSize={52}\n message={{\n visible: true,\n title: 'Obtaining Testnet Tokens',\n subtitle:\n 'Please wait while we request testnet tokens for your wallet...',\n isTyping: false,\n }}\n />\n ) : showFaucetSuccess ? (\n <>\n <div className=\"text-green-500 text-5xl mb-4 n1-ww-animate-fade-up\">✓</div>\n <div className=\"space-y-2 text-center\">\n <h3 className=\"text-xl text-white font-semibold\">\n Tokens Obtained Successfully\n </h3>\n <p className=\"text-sm text-green-400\">\n Your wallet has been funded with testnet tokens.\n </p>\n <p className=\"text-sm text-neutral-400 mt-2\">\n Please wait while your balance updates...\n </p>\n </div>\n </>\n ) : faucetError ? (\n <>\n <div className=\"text-red-500 text-5xl mb-4 n1-ww-animate-fade-up\">⚠️</div>\n <div className=\"space-y-2 text-center\">\n <h3 className=\"text-xl text-white font-semibold\">\n Failed to Get Tokens\n </h3>\n <p className=\"text-sm text-red-400\">\n {faucetError}\n </p>\n <button\n onClick={requestTestnetTokens}\n className=\"mt-4 px-4 py-2 bg-n1-ww-main text-white rounded-sm hover:bg-n1-ww-main/90 transition-colors\"\n >\n Try Again\n </button>\n </div>\n </>\n ) : null}\n </div>\n )}\n\n <h2 className=\"text-xl text-white font-semibold mb-6 text-center\">\n Enter Amount\n </h2>\n\n {/* Amount Input */}\n <div className=\"space-y-6\">\n {/* Token Selection and Amount Input */}\n <div className=\"relative border-2 border-n1-ww-border bg-n1-ww-gray-900 rounded-sm p-0 overflow-hidden n1-ww-animate-fade-up\" style={{ animationDelay: '0.1s' }}>\n {/* Token Selection Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-n1-ww-border bg-black/10\">\n <div className=\"flex items-center space-x-3\">\n <div className=\"w-8 h-8 rounded-full overflow-hidden bg-n1-ww-gray-800 flex items-center justify-center shadow-sm\">\n <ImageWithFallback\n src={tokenLogo}\n alt={tokenSymbol}\n width={24}\n height={24}\n fallbackText={tokenSymbol.charAt(0)}\n fallbackClassName=\"w-6 h-6 rounded-full flex items-center justify-center\"\n fallbackBgColor=\"bg-blue-900\"\n fallbackTextColor=\"text-blue-300\"\n />\n </div>\n <span className=\"text-white font-medium\">\n {tokenSymbol}\n </span>\n </div>\n <div className=\"text-xs rounded-sm bg-n1-ww-gray-800 px-2 py-1 text-n1-ww-gray-300\">\n Fixed Amount\n </div>\n </div>\n\n {isTestnet && (\n <div className=\"mb-4 w-full flex items-center justify-center\">\n <div className=\"bg-yellow-900/40 border border-n1-ww-border text-yellow-200 rounded px-3 py-2 text-sm text-center max-w-xl mx-auto shadow-sm\">\n <span className=\"font-semibold\">Testnet Only:</span> Please make sure your wallet is set to <span className=\"font-semibold\">testnet mode</span> before proceeding. <a href=\"https://docs.phantom.com/developer-powertools/testnet-mode\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"underline text-yellow-200 hover:text-yellow-100 transition-colors\">Learn how to switch to testnet</a>.\n </div>\n </div>\n )}\n\n {/* Amount Input - Hardcoded to 100 */}\n <div className=\"relative p-6 flex flex-col items-center\">\n <div className=\"relative flex items-baseline justify-center w-full\">\n <span className=\"text-4xl font-bold text-white mr-1 n1-ww-animate-fade-up\" style={{ animationDelay: '0.2s' }}>\n {amount}\n </span>\n <span className=\"text-xl text-neutral-400 ml-1 n1-ww-animate-fade-up\" style={{ animationDelay: '0.3s' }}>\n {tokenSymbol}\n </span>\n </div>\n\n {/* Decorative element */}\n <div className=\"w-16 h-1 bg-n1-ww-gray-800 rounded-full mt-4 mb-2\"></div>\n\n {/* Balance Display */}\n <div className=\"flex justify-center items-center text-sm mt-2 w-full n1-ww-animate-fade-up\" style={{ animationDelay: '0.4s' }}>\n <span className=\"text-neutral-400\">\n Balance: {formattedBalance} {tokenSymbol}\n </span>\n </div>\n </div>\n </div>\n\n {/* Error Message */}\n {context.depositError && (\n <div className=\"bg-red-900/30 text-red-400 p-3 rounded-sm text-sm border border-n1-ww-border n1-ww-animate-fade-up\" style={{ animationDelay: '0.5s' }}>\n {context.depositError}\n </div>\n )}\n\n {/* Continue Button */}\n <button\n onClick={startDeposit}\n disabled={!isValidAmount}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`\n group relative w-full overflow-hidden rounded-sm border-2 bg-neutral-950 py-4 text-center\n transition-all duration-300 ${ANIMATION_EASE} n1-ww-animate-fade-up\n ${isValidAmount\n ? 'cursor-pointer border-n1-ww-border hover:border-n1-ww-border'\n : 'cursor-not-allowed border-n1-ww-border opacity-50'\n }\n `}\n style={{\n transform: isHovered && isValidAmount ? 'scale(0.99)' : 'scale(1)',\n animationDelay: '0.6s'\n }}\n >\n <span\n className={`\n text-base font-medium tracking-wide transition-colors duration-300 ${ANIMATION_EASE}\n ${isValidAmount\n ? 'text-n1-ww-gray-300 group-hover:text-white'\n : 'text-n1-ww-gray-600'\n }\n `}\n >\n Continue\n </span>\n </button>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"03-AmountInputScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/03-AmountInputScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Connection, LAMPORTS_PER_SOL, PublicKey } from \"@solana/web3.js\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { SolanaLogo } from \"../../../components/logos\";\nimport { getSolanaRpcUrl, SolanaNetwork } from \"../../../config/solana\";\nimport { useN1WalletContext } from \"../../../Provider/hooks\";\nimport { logger } from \"../../../utils/logger\";\nimport { useDepositContext } from \"../context/DepositContext\";\nimport { useFlowStateContext } from \"../context/FlowContext\";\nimport { formatAmount, isNordConfigured } from \"../utils/nordUtils\";\n\ninterface AmountInputScreenProps {\n}\n\nconst USDC_MINT_BY_NETWORK: Record<SolanaNetwork, string> = {\n [SolanaNetwork.MAINNET]: \"EPjFWdd5AufqSSqeM2qN1xzybapC8hEki3H6KNozN8n\",\n [SolanaNetwork.TESTNET]: \"Gh9ZwEmdLJ8DscKDTvQYTNUCq6sDgtdHcW52quXFMcGQ\",\n [SolanaNetwork.DEVNET]: \"Gh9ZwEmdLJ8DscKDTvQYTNUCq6sDgtdHcW52quXFMcGQ\",\n};\n\nconst GAS_FEE_LAMPORTS = 5_000; // ~0.000005 SOL\nconst BALANCE_REFRESH_MS = 20_000;\nconst DEFAULT_AMOUNT = \"100\";\nconst DEFAULT_MIN_DEPOSIT = 5;\n\ninterface WalletBalanceState {\n usdc: number | null;\n sol: number | null;\n loading: boolean;\n error: string | null;\n}\n\nconst INITIAL_BALANCE_STATE: WalletBalanceState = {\n usdc: null,\n sol: null,\n loading: false,\n error: null,\n};\n\nexport function AmountInputScreen({}: AmountInputScreenProps) {\n const { context } = useFlowStateContext();\n const { amount, updateAmount, startDeposit } = useDepositContext();\n const { nord, address } = useN1WalletContext();\n\n const [tokenSymbol, setTokenSymbol] = useState(\"USDC\");\n const [tokenDecimals, setTokenDecimals] = useState(6);\n const [walletBalances, setWalletBalances] = useState<WalletBalanceState>(\n INITIAL_BALANCE_STATE\n );\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (!amount) {\n updateAmount(DEFAULT_AMOUNT);\n }\n }, [amount, updateAmount]);\n const selectedChainName = context.selectedChain || \"Solana\";\n const selectedNetwork = useMemo<SolanaNetwork>(() => {\n const configuredNetwork = context.selectedChainNetwork as\n | SolanaNetwork\n | undefined;\n if (\n configuredNetwork &&\n Object.values(SolanaNetwork).includes(configuredNetwork)\n ) {\n return configuredNetwork;\n }\n return SolanaNetwork.MAINNET;\n }, [context.selectedChainNetwork]);\n\n const fallbackMintForNetwork = useMemo(\n () =>\n USDC_MINT_BY_NETWORK[selectedNetwork] ??\n USDC_MINT_BY_NETWORK[SolanaNetwork.MAINNET],\n [selectedNetwork]\n );\n const [tokenMintAddress, setTokenMintAddress] = useState(\n fallbackMintForNetwork\n );\n\n useEffect(() => {\n setTokenMintAddress(fallbackMintForNetwork);\n }, [fallbackMintForNetwork]);\n\n useEffect(() => {\n if (nord && isNordConfigured(nord)) {\n try {\n const usdcToken =\n nord.tokens.find((t: any) => t.symbol === \"USDC\") || nord.tokens[0];\n if (usdcToken) {\n setTokenSymbol(usdcToken.symbol);\n setTokenDecimals(usdcToken.decimals);\n setTokenMintAddress((prev) => usdcToken.mintAddr ?? prev);\n }\n } catch (error) {\n logger.warn(\"Error getting token information from Nord:\", error);\n }\n }\n }, [nord]);\n\n const minDeposit = useMemo(() => {\n if (!nord || !isNordConfigured(nord) || !tokenMintAddress) {\n return DEFAULT_MIN_DEPOSIT;\n }\n try {\n // @ts-ignore\n const mintInfo = nord.protonClient?.mintInfo?.get(tokenMintAddress);\n if (mintInfo?.minDeposit) {\n const minDepositUnits = Number(mintInfo.minDeposit);\n const divisor = 10 ** tokenDecimals;\n if (Number.isFinite(minDepositUnits) && divisor > 0) {\n return minDepositUnits / divisor;\n }\n }\n } catch (error) {\n logger.warn(\"Unable to derive min deposit from Nord config\", error);\n }\n return DEFAULT_MIN_DEPOSIT;\n }, [nord, tokenMintAddress, tokenDecimals]);\n\n const fetchBalances = useCallback(\n async (showSpinner: boolean = true) => {\n if (!address) {\n if (isMountedRef.current) {\n setWalletBalances(INITIAL_BALANCE_STATE);\n }\n return;\n }\n\n if (showSpinner) {\n setWalletBalances((prev) => ({\n ...prev,\n loading: true,\n error: null,\n }));\n }\n\n try {\n const rpcEndpoint = getSolanaRpcUrl();\n const connection = new Connection(rpcEndpoint, \"confirmed\");\n const ownerKey = new PublicKey(address);\n\n const [solLamports, tokenAccounts] = await Promise.all([\n connection.getBalance(ownerKey),\n connection.getParsedTokenAccountsByOwner(ownerKey, {\n mint: new PublicKey(tokenMintAddress),\n }),\n ]);\n\n const usdcTotal = tokenAccounts.value.reduce((total, { account }) => {\n const info = account.data.parsed?.info;\n const tokenAmount = info?.tokenAmount;\n if (!tokenAmount) {\n return total;\n }\n const uiAmount =\n typeof tokenAmount.uiAmount === \"number\"\n ? tokenAmount.uiAmount\n : parseFloat(tokenAmount.uiAmountString ?? \"0\");\n return total + (Number.isFinite(uiAmount) ? uiAmount : 0);\n }, 0);\n\n if (!isMountedRef.current) {\n return;\n }\n\n setWalletBalances({\n usdc: usdcTotal,\n sol: solLamports / LAMPORTS_PER_SOL,\n loading: false,\n error: null,\n });\n } catch (error) {\n logger.warn(\"Failed to load wallet balances\", error);\n if (!isMountedRef.current) {\n return;\n }\n setWalletBalances((prev) => ({\n ...prev,\n loading: false,\n error: \"Unable to fetch wallet balances. Please try again.\",\n }));\n }\n },\n [address, tokenMintAddress]\n );\n\n useEffect(() => {\n fetchBalances();\n const interval = setInterval(() => {\n fetchBalances(false);\n }, BALANCE_REFRESH_MS);\n\n return () => clearInterval(interval);\n }, [fetchBalances]);\n\n\n\n const isSolana = selectedChainName.toLowerCase().includes(\"solana\");\n const gasFeeInSol = GAS_FEE_LAMPORTS / LAMPORTS_PER_SOL;\n const gasFeeUSD = \"~$0.0012\";\n const minDepositDisplay = minDeposit.toString();\n\n const formattedBalance =\n walletBalances.usdc == null\n ? walletBalances.loading\n ? \"Loading...\"\n : \"—\"\n : formatAmount(walletBalances.usdc, tokenDecimals);\n\n const formattedSolBalance =\n walletBalances.sol == null\n ? walletBalances.loading\n ? \"Loading...\"\n : \"—\"\n : walletBalances.sol.toFixed(4);\n\n const numericAmount = Number(amount || 0);\n const hasEnteredAmount = Number.isFinite(numericAmount) && numericAmount > 0;\n const meetsMinDeposit = numericAmount >= minDeposit;\n const hasSufficientUsdc =\n walletBalances.usdc == null ? false : numericAmount <= walletBalances.usdc;\n const hasSufficientSol =\n walletBalances.sol == null ? false : walletBalances.sol >= gasFeeInSol;\n\n const validationError = useMemo(() => {\n if (!address) {\n return \"Connect a wallet to continue.\";\n }\n\n if (walletBalances.error) {\n return walletBalances.error;\n }\n\n if (!hasEnteredAmount) {\n return \"Enter an amount to continue.\";\n }\n\n if (walletBalances.loading || walletBalances.usdc == null || walletBalances.sol == null) {\n return null;\n }\n\n if (!meetsMinDeposit) {\n return `Minimum deposit is ${minDeposit} ${tokenSymbol}.`;\n }\n\n if (!hasSufficientUsdc) {\n return `Insufficient ${tokenSymbol} balance for this deposit.`;\n }\n\n if (!hasSufficientSol) {\n return \"Not enough SOL to cover network fees.\";\n }\n\n return null;\n }, [\n address,\n walletBalances.error,\n walletBalances.loading,\n walletBalances.usdc,\n walletBalances.sol,\n hasEnteredAmount,\n hasSufficientSol,\n hasSufficientUsdc,\n meetsMinDeposit,\n tokenSymbol,\n minDeposit,\n ]);\n\n const isValidAmount = !walletBalances.loading && validationError === null;\n\n const handleUseMax = () => {\n if (walletBalances.usdc == null || walletBalances.usdc <= 0) {\n return;\n }\n updateAmount(walletBalances.usdc.toFixed(tokenDecimals));\n };\n\n return (\n <div className=\"overflow-hidden relative\">\n\n {/* Header Section */}\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-sm text-white font-medium\">Deposit From</h2>\n <div className=\"flex items-center space-x-2 rounded-md bg-n1-ww-border h-5 justify-center p-1\">\n {isSolana ? (\n <div className=\"rounded-full flex items-center justify-center bg-black h-3 w-3\">\n <SolanaLogo width={6} height={6} />\n </div>\n ) : (\n <div className=\"w-4 h-4 rounded-full bg-n1-ww-gray-600\"></div>\n )}\n <span className=\"text-white text-xs font-medium\">\n {selectedChainName}\n </span>\n </div>\n </div>\n\n {/* Deposit Information Section */}\n <div className=\"space-y-3 mb-4 text-white text-xs font-light\">\n <div className=\"flex items-center justify-between\">\n <span>Available Balance:</span>\n <span>\n {formattedBalance} {tokenSymbol}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>SOL Balance:</span>\n <span>{formattedSolBalance} SOL</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>Minimum Deposit:</span>\n <span>\n {minDepositDisplay} {tokenSymbol}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>Gas Fee:</span>\n <span>\n {gasFeeInSol.toFixed(6)} SOL ({gasFeeUSD})\n </span>\n </div>\n </div>\n\n <div className=\"h-px bg-n1-ww-border mb-4\"></div>\n\n {/* Amount Input Section */}\n <div className=\"mb-4 flex justify-between w-full\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex items-center justify-between border border-n1-ww-gray-400 bg-n1-ww-gray-600 flex-1 w-[292px] rounded h-8 px-2\">\n <span className=\"text-white text-sm font-medium\">Amount</span>\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"number\"\n step=\"0.000001\"\n value={amount}\n onChange={(e) => updateAmount(e.target.value)}\n className=\"text-white font-light text-xs text-right bg-transparent border-none outline-none focus:ring-2 focus:ring-n1-ww-main focus:ring-offset-0 rounded px-1\"\n />\n <button className=\"border border-n1-ww-gray-400 h-5 text-white text-xs font-light flex items-center justify-center px-1 rounded transition-colors\">\n {tokenSymbol}\n </button>\n </div>\n </div>\n </div>\n <button\n className=\"border border-n1-ww-gray-400 bg-n1-ww-gray-600 rounded text-white text-sm font-medium px-2 h-8 hover:bg-n1-ww-gray-800 transition-colors w-[68px]\"\n onClick={handleUseMax}\n type=\"button\"\n >\n Max\n </button>\n </div>\n\n {validationError && (\n <p className=\"mb-2 text-xs text-red-400\">{validationError}</p>\n )}\n\n {/* Deposit Button */}\n <button\n onClick={startDeposit}\n disabled={!isValidAmount}\n className={`\n w-full h-8 rounded border bg-transparent flex font-medium items-center justify-center\n transition-all duration-200 transform\n ${\n isValidAmount\n ? \"border-n1-ww-main hover:bg-n1-ww-gray-900 cursor-pointer\"\n : \"border-n1-ww-border opacity-50 cursor-not-allowed\"\n }\n `}\n >\n <span\n className={`\n font-medium text-sm opacity-90\n ${isValidAmount ? \"text-n1-ww-main\" : \"text-n1-ww-gray-600\"}\n `}\n >\n Deposit\n </span>\n </button>\n </div>\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
2
3
|
import { WaitingMessage } from '../components/WaitingMessage';
|
|
3
|
-
import { useState, useEffect } from 'react';
|
|
4
4
|
export function DepositProgressScreen() {
|
|
5
5
|
var _a = useState(0), _elapsedTime = _a[0], setElapsedTime = _a[1];
|
|
6
6
|
var maxTime = 300; // Maximum time in seconds
|
|
@@ -24,6 +24,6 @@ export function DepositProgressScreen() {
|
|
|
24
24
|
// Clean up timer on unmount
|
|
25
25
|
return function () { return clearInterval(timer); };
|
|
26
26
|
}, []);
|
|
27
|
-
return (_jsx("div", { className: "overflow-hidden relative", children: _jsx(WaitingMessage, { message: message,
|
|
27
|
+
return (_jsx("div", { className: "overflow-hidden relative", children: _jsx(WaitingMessage, { message: message, animation: "transfer" }) }));
|
|
28
28
|
}
|
|
29
29
|
//# sourceMappingURL=04-DepositProgressScreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"04-DepositProgressScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/04-DepositProgressScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"04-DepositProgressScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/04-DepositProgressScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,UAAU,qBAAqB;IAC7B,IAAA,KAAiC,QAAQ,CAAC,CAAC,CAAC,EAA3C,YAAY,QAAA,EAAE,cAAc,QAAe,CAAC;IACnD,IAAM,OAAO,GAAG,GAAG,CAAC,CAAC,0BAA0B;IAE/C,IAAM,OAAO,GAAG;QACd,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,oBAAoB;QAC3B,QAAQ,EAAE,2CAA2C;QACrD,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,oCAAoC;IACpC,SAAS,CAAC;QACR,IAAM,KAAK,GAAG,WAAW,CAAC;YACxB,cAAc,CAAC,UAAC,QAAQ;gBACtB,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;oBACxB,aAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,OAAO,QAAQ,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,4BAA4B;QAC5B,OAAO,cAAM,OAAA,aAAa,CAAC,KAAK,CAAC,EAApB,CAAoB,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,cAAK,SAAS,EAAC,0BAA0B,YACvC,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,UAAU,GACpB,GACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { WaitingMessage } from '../components/WaitingMessage';\n\nexport function DepositProgressScreen() {\n const [_elapsedTime, setElapsedTime] = useState(0);\n const maxTime = 300; // Maximum time in seconds\n\n const message = {\n visible: true,\n title: 'Processing Deposit',\n subtitle: 'Please wait while we process your deposit',\n isTyping: false,\n };\n\n // Start timer when component mounts\n useEffect(() => {\n const timer = setInterval(() => {\n setElapsedTime((prevTime) => {\n if (prevTime >= maxTime) {\n clearInterval(timer);\n return maxTime;\n }\n return prevTime + 1;\n });\n }, 1000);\n\n // Clean up timer on unmount\n return () => clearInterval(timer);\n }, []);\n\n return (\n <div className=\"overflow-hidden relative\">\n <WaitingMessage\n message={message}\n animation=\"transfer\"\n />\n </div>\n );\n}"]}
|