@n1xyz/wallet-widget 0.0.10 → 0.0.12
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/Logic/transactionManager.d.ts +1 -1
- package/dist/Logic/transactionManager.js +1 -1
- package/dist/Logic/transactionManager.js.map +1 -1
- package/dist/Modal/NordFlow/NordFlow.js +22 -228
- package/dist/Modal/NordFlow/NordFlow.js.map +1 -1
- package/dist/Modal/NordFlow/components/Header.d.ts +10 -0
- package/dist/Modal/NordFlow/components/Header.js +11 -0
- package/dist/Modal/NordFlow/components/Header.js.map +1 -0
- package/dist/Modal/NordFlow/components/TransactionTable.js +4 -7
- package/dist/Modal/NordFlow/components/TransactionTable.js.map +1 -1
- package/dist/Modal/NordFlow/components/index.d.ts +1 -0
- package/dist/Modal/NordFlow/components/index.js +1 -0
- package/dist/Modal/NordFlow/components/index.js.map +1 -1
- package/dist/Modal/NordFlow/constants.js +116 -95
- package/dist/Modal/NordFlow/constants.js.map +1 -1
- package/dist/Modal/NordFlow/context/DepositContext.d.ts +27 -0
- package/dist/Modal/NordFlow/context/DepositContext.js +308 -0
- package/dist/Modal/NordFlow/context/DepositContext.js.map +1 -0
- package/dist/Modal/NordFlow/context/FlowContext.d.ts +23 -0
- package/dist/Modal/NordFlow/context/FlowContext.js +125 -0
- package/dist/Modal/NordFlow/context/FlowContext.js.map +1 -0
- package/dist/Modal/NordFlow/context/NordProvider.d.ts +10 -0
- package/dist/Modal/NordFlow/context/NordProvider.js +14 -0
- package/dist/Modal/NordFlow/context/NordProvider.js.map +1 -0
- package/dist/Modal/NordFlow/context/WalletConnectContext.d.ts +20 -0
- package/dist/Modal/NordFlow/context/WalletConnectContext.js +214 -0
- package/dist/Modal/NordFlow/context/WalletConnectContext.js.map +1 -0
- package/dist/Modal/NordFlow/context/deposit/types.d.ts +26 -0
- package/dist/Modal/NordFlow/context/deposit/types.js +2 -0
- package/dist/Modal/NordFlow/context/deposit/types.js.map +1 -0
- package/dist/Modal/NordFlow/context/deposit/useDepositAuth.d.ts +7 -0
- package/dist/Modal/NordFlow/context/deposit/useDepositAuth.js +113 -0
- package/dist/Modal/NordFlow/context/deposit/useDepositAuth.js.map +1 -0
- package/dist/Modal/NordFlow/context/deposit/useDepositTransaction.d.ts +20 -0
- package/dist/Modal/NordFlow/context/deposit/useDepositTransaction.js +235 -0
- package/dist/Modal/NordFlow/context/deposit/useDepositTransaction.js.map +1 -0
- package/dist/Modal/NordFlow/context/index.d.ts +5 -0
- package/dist/Modal/NordFlow/context/index.js +8 -0
- package/dist/Modal/NordFlow/context/index.js.map +1 -0
- package/dist/Modal/NordFlow/hooks/index.d.ts +3 -5
- package/dist/Modal/NordFlow/hooks/index.js +3 -5
- package/dist/Modal/NordFlow/hooks/index.js.map +1 -1
- package/dist/Modal/NordFlow/hooks/useDepositFlow.js +2 -4
- package/dist/Modal/NordFlow/hooks/useDepositFlow.js.map +1 -1
- package/dist/Modal/NordFlow/hooks/useNordInstance.d.ts +0 -6
- package/dist/Modal/NordFlow/hooks/useNordInstance.js +2 -358
- package/dist/Modal/NordFlow/hooks/useNordInstance.js.map +1 -1
- package/dist/Modal/NordFlow/hooks/useNordWalletConnect.d.ts +0 -1
- package/dist/Modal/NordFlow/hooks/useNordWalletConnect.js +0 -1
- package/dist/Modal/NordFlow/hooks/useNordWalletConnect.js.map +1 -1
- package/dist/Modal/NordFlow/screens/00-IdleScreen.d.ts +6 -0
- package/dist/Modal/NordFlow/screens/00-IdleScreen.js +9 -0
- package/dist/Modal/NordFlow/screens/00-IdleScreen.js.map +1 -0
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.d.ts +1 -6
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js +10 -4
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/02-EvmWalletAuthScreen.d.ts +1 -5
- package/dist/Modal/NordFlow/screens/02-EvmWalletAuthScreen.js +9 -12
- package/dist/Modal/NordFlow/screens/02-EvmWalletAuthScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/03-ChainSelectionScreen.d.ts +1 -7
- package/dist/Modal/NordFlow/screens/03-ChainSelectionScreen.js +9 -7
- package/dist/Modal/NordFlow/screens/03-ChainSelectionScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/04-AmountInputScreen.d.ts +1 -13
- package/dist/Modal/NordFlow/screens/04-AmountInputScreen.js +59 -31
- package/dist/Modal/NordFlow/screens/04-AmountInputScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/05-DepositProgressScreen.d.ts +1 -6
- package/dist/Modal/NordFlow/screens/05-DepositProgressScreen.js +8 -3
- package/dist/Modal/NordFlow/screens/05-DepositProgressScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/06-DepositSuccessScreen.d.ts +1 -8
- package/dist/Modal/NordFlow/screens/06-DepositSuccessScreen.js +15 -4
- package/dist/Modal/NordFlow/screens/06-DepositSuccessScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/07-AuthLoadingScreen.d.ts +1 -6
- package/dist/Modal/NordFlow/screens/07-AuthLoadingScreen.js +14 -120
- package/dist/Modal/NordFlow/screens/07-AuthLoadingScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/08-FinalSuccessScreen.d.ts +1 -1
- package/dist/Modal/NordFlow/screens/08-FinalSuccessScreen.js +9 -4
- package/dist/Modal/NordFlow/screens/08-FinalSuccessScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/09-ErrorScreen.d.ts +1 -7
- package/dist/Modal/NordFlow/screens/09-ErrorScreen.js +9 -9
- package/dist/Modal/NordFlow/screens/09-ErrorScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/index.d.ts +1 -0
- package/dist/Modal/NordFlow/screens/index.js +1 -0
- package/dist/Modal/NordFlow/screens/index.js.map +1 -1
- package/dist/Modal/NordFlow/types.d.ts +0 -5
- package/dist/Modal/NordFlow/types.js +0 -1
- package/dist/Modal/NordFlow/types.js.map +1 -1
- package/dist/Modal/NordFlow/utils/index.d.ts +0 -1
- package/dist/Modal/NordFlow/utils/index.js +0 -1
- package/dist/Modal/NordFlow/utils/index.js.map +1 -1
- package/dist/Provider/LazyWalletProvider.js +2 -0
- package/dist/Provider/LazyWalletProvider.js.map +1 -1
- package/dist/Provider/N1WalletProvider.js +48 -63
- package/dist/Provider/N1WalletProvider.js.map +1 -1
- package/dist/Provider/WalletErrorBoundary.d.ts +10 -0
- package/dist/Provider/WalletErrorBoundary.js +39 -0
- package/dist/Provider/WalletErrorBoundary.js.map +1 -0
- package/dist/Provider/hooks/useNordUserInitialization.d.ts +20 -0
- package/dist/Provider/hooks/useNordUserInitialization.js +293 -0
- package/dist/Provider/hooks/useNordUserInitialization.js.map +1 -0
- package/dist/Provider/useN1WalletProvider.d.ts +37 -0
- package/dist/Provider/useN1WalletProvider.js +398 -0
- package/dist/Provider/useN1WalletProvider.js.map +1 -0
- package/dist/main.css +1 -1
- package/package.json +1 -1
|
@@ -1,359 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
-
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);
|
|
12
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
-
function step(op) {
|
|
15
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
-
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;
|
|
18
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
-
switch (op[0]) {
|
|
20
|
-
case 0: case 1: t = op; break;
|
|
21
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
-
default:
|
|
25
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
-
if (t[2]) _.ops.pop();
|
|
30
|
-
_.trys.pop(); continue;
|
|
31
|
-
}
|
|
32
|
-
op = body.call(thisArg, _);
|
|
33
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
import { NordUser } from '@n1xyz/nord-ts';
|
|
38
|
-
import { generateSessionKeyPair, signEd25519 } from '@n1xyz/nts-sdk';
|
|
39
|
-
import { PublicKey, Transaction } from '@solana/web3.js';
|
|
40
|
-
import { useCallback, useEffect, useRef } from 'react';
|
|
41
|
-
import { WalletError, WalletErrorCode } from '../../../errors/types';
|
|
42
|
-
import { getSessionKeysFromLocalStorage, storeSessionKeysInLocalStorage, } from '../../../Logic/utils';
|
|
43
|
-
import { useN1WalletContext, useN1WalletInternalContext, } from '../../../Provider/hooks';
|
|
44
|
-
import { logger } from '../../../utils/logger';
|
|
45
|
-
/**
|
|
46
|
-
* Hook to access the Nord instance and create a NordUser if needed
|
|
47
|
-
*/
|
|
48
|
-
export var useNordInstance = function () {
|
|
49
|
-
var _a = useN1WalletContext(), nord = _a.nord, address = _a.address, signMessageWithWalletKey = _a.signMessageWithWalletKey, signMessageWithSessionKey = _a.signMessageWithSessionKey, signTransactionWithWalletKey = _a.signTransactionWithWalletKey, nordUser = _a.nordUser, sessionPubKey = _a.sessionPubKey;
|
|
50
|
-
var _b = useN1WalletInternalContext(), setSessionPubKey = _b.setSessionPubKey, setSignMessageWithSessionKey = _b.setSignMessageWithSessionKey, setSignMessageWithWalletKey = _b.setSignMessageWithWalletKey, setSignTransactionWithWalletKey = _b.setSignTransactionWithWalletKey, dynamicWallet = _b.dynamicWallet, setNordUser = _b.setNordUser;
|
|
51
|
-
// Use refs to track previous values to prevent unnecessary re-renders
|
|
52
|
-
var prevDynamicWalletRef = useRef(dynamicWallet);
|
|
53
|
-
var prevAddressRef = useRef(address);
|
|
54
|
-
// Create a wallet signing function if needed
|
|
55
|
-
var createWalletSignFunction = useCallback(function () {
|
|
56
|
-
if (!dynamicWallet) {
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
var signWithWallet = function (msg) { return __awaiter(void 0, void 0, void 0, function () {
|
|
60
|
-
var hexMsg, signature, binaryString, signatureUint8Array, i, error_1;
|
|
61
|
-
return __generator(this, function (_a) {
|
|
62
|
-
switch (_a.label) {
|
|
63
|
-
case 0:
|
|
64
|
-
_a.trys.push([0, 2, , 3]);
|
|
65
|
-
hexMsg = Buffer.from(msg).toString('hex');
|
|
66
|
-
return [4 /*yield*/, dynamicWallet.signMessage(hexMsg)];
|
|
67
|
-
case 1:
|
|
68
|
-
signature = _a.sent();
|
|
69
|
-
binaryString = atob(signature);
|
|
70
|
-
signatureUint8Array = new Uint8Array(binaryString.length);
|
|
71
|
-
for (i = 0; i < binaryString.length; i++) {
|
|
72
|
-
signatureUint8Array[i] = binaryString.charCodeAt(i);
|
|
73
|
-
}
|
|
74
|
-
return [2 /*return*/, signatureUint8Array];
|
|
75
|
-
case 2:
|
|
76
|
-
error_1 = _a.sent();
|
|
77
|
-
console.error('Error signing with wallet:', error_1);
|
|
78
|
-
throw new WalletError(WalletErrorCode.USER_REJECTED, 'Failed to sign message with wallet', { originalError: error_1 });
|
|
79
|
-
case 3: return [2 /*return*/];
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}); };
|
|
83
|
-
// Set the wallet sign function in context
|
|
84
|
-
setSignMessageWithWalletKey(function () { return signWithWallet; });
|
|
85
|
-
return signWithWallet;
|
|
86
|
-
}, [dynamicWallet, setSignMessageWithWalletKey]);
|
|
87
|
-
// Create a wallet transaction signing function
|
|
88
|
-
var createTransactionSignFunction = useCallback(function () {
|
|
89
|
-
if (!dynamicWallet) {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
var signTransactionWithWallet = function (transaction) { return __awaiter(void 0, void 0, void 0, function () {
|
|
93
|
-
var signedTransaction, serializedTx, error_2;
|
|
94
|
-
return __generator(this, function (_a) {
|
|
95
|
-
switch (_a.label) {
|
|
96
|
-
case 0:
|
|
97
|
-
_a.trys.push([0, 4, , 5]);
|
|
98
|
-
if (!(dynamicWallet.chain === 'SOL')) return [3 /*break*/, 3];
|
|
99
|
-
return [4 /*yield*/, dynamicWallet.getSigner()];
|
|
100
|
-
case 1: return [4 /*yield*/, (_a.sent()).signTransaction(transaction)];
|
|
101
|
-
case 2:
|
|
102
|
-
signedTransaction = _a.sent();
|
|
103
|
-
logger.debug('Solana transaction signature received');
|
|
104
|
-
serializedTx = signedTransaction.serialize();
|
|
105
|
-
// Create a new transaction from the serialized data
|
|
106
|
-
// This will have a proper signature property that can be accessed
|
|
107
|
-
return [2 /*return*/, Transaction.from(serializedTx)];
|
|
108
|
-
case 3: throw new WalletError(WalletErrorCode.USER_REJECTED, 'Unsupported chain', { originalError: new Error('Unsupported chain') });
|
|
109
|
-
case 4:
|
|
110
|
-
error_2 = _a.sent();
|
|
111
|
-
console.error('Error signing transaction with wallet:', error_2);
|
|
112
|
-
throw new WalletError(WalletErrorCode.USER_REJECTED, 'Failed to sign transaction with wallet', { originalError: error_2 });
|
|
113
|
-
case 5: return [2 /*return*/];
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}); };
|
|
117
|
-
// Set the transaction sign function in context
|
|
118
|
-
setSignTransactionWithWalletKey(function () { return signTransactionWithWallet; });
|
|
119
|
-
return signTransactionWithWallet;
|
|
120
|
-
}, [dynamicWallet, setSignTransactionWithWalletKey]);
|
|
121
|
-
// Create a session if we have the necessary dependencies but no session sign function
|
|
122
|
-
var createSession = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
123
|
-
var sessionKeyPair_1, storedKeys, tempKeyPair, error_3, signFn_1, error_4;
|
|
124
|
-
return __generator(this, function (_a) {
|
|
125
|
-
switch (_a.label) {
|
|
126
|
-
case 0:
|
|
127
|
-
_a.trys.push([0, 7, , 8]);
|
|
128
|
-
sessionKeyPair_1 = null;
|
|
129
|
-
if (!address) return [3 /*break*/, 4];
|
|
130
|
-
storedKeys = getSessionKeysFromLocalStorage(address);
|
|
131
|
-
if (!storedKeys) return [3 /*break*/, 4];
|
|
132
|
-
_a.label = 1;
|
|
133
|
-
case 1:
|
|
134
|
-
_a.trys.push([1, 3, , 4]);
|
|
135
|
-
return [4 /*yield*/, generateSessionKeyPair()];
|
|
136
|
-
case 2:
|
|
137
|
-
tempKeyPair = _a.sent();
|
|
138
|
-
// Replace the private key with our stored one
|
|
139
|
-
sessionKeyPair_1 = {
|
|
140
|
-
privateKey: storedKeys.ed25519PrivateKey,
|
|
141
|
-
// For Ed25519, the public key is the second half of the private key
|
|
142
|
-
publicKey: tempKeyPair.publicKey,
|
|
143
|
-
};
|
|
144
|
-
return [3 /*break*/, 4];
|
|
145
|
-
case 3:
|
|
146
|
-
error_3 = _a.sent();
|
|
147
|
-
console.error('Error reconstructing key pair from stored keys:', error_3);
|
|
148
|
-
sessionKeyPair_1 = null;
|
|
149
|
-
return [3 /*break*/, 4];
|
|
150
|
-
case 4:
|
|
151
|
-
if (!!sessionKeyPair_1) return [3 /*break*/, 6];
|
|
152
|
-
return [4 /*yield*/, generateSessionKeyPair()];
|
|
153
|
-
case 5:
|
|
154
|
-
sessionKeyPair_1 = _a.sent();
|
|
155
|
-
_a.label = 6;
|
|
156
|
-
case 6:
|
|
157
|
-
signFn_1 = function (message) { return __awaiter(void 0, void 0, void 0, function () {
|
|
158
|
-
var error_5;
|
|
159
|
-
return __generator(this, function (_a) {
|
|
160
|
-
switch (_a.label) {
|
|
161
|
-
case 0:
|
|
162
|
-
_a.trys.push([0, 2, , 3]);
|
|
163
|
-
return [4 /*yield*/, signEd25519(message, sessionKeyPair_1.privateKey)];
|
|
164
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
165
|
-
case 2:
|
|
166
|
-
error_5 = _a.sent();
|
|
167
|
-
console.error('Error signing with session key:', error_5);
|
|
168
|
-
throw error_5;
|
|
169
|
-
case 3: return [2 /*return*/];
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
}); };
|
|
173
|
-
// Store session keys
|
|
174
|
-
storeSessionKeysInLocalStorage({
|
|
175
|
-
privKey: sessionKeyPair_1.privateKey,
|
|
176
|
-
walletPublicKey: address,
|
|
177
|
-
chainName: (dynamicWallet === null || dynamicWallet === void 0 ? void 0 : dynamicWallet.chain) || 'ETH', // Default to ETH if we don't have chain info
|
|
178
|
-
});
|
|
179
|
-
// Set session public key and sign function in context
|
|
180
|
-
setSessionPubKey(sessionKeyPair_1.publicKey);
|
|
181
|
-
setSignMessageWithSessionKey(function () { return signFn_1; });
|
|
182
|
-
return [2 /*return*/, signFn_1];
|
|
183
|
-
case 7:
|
|
184
|
-
error_4 = _a.sent();
|
|
185
|
-
console.error('Error creating session:', error_4);
|
|
186
|
-
return [2 /*return*/, null];
|
|
187
|
-
case 8: return [2 /*return*/];
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
}); }, [address, dynamicWallet, setSessionPubKey, setSignMessageWithSessionKey]);
|
|
191
|
-
// Create a NordUser instance if needed
|
|
192
|
-
var createNordUser = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
193
|
-
var walletSignFn, sessionSignFn, createdSignFn, sessionId, sessionKeyData, sessionIdKey, storedSessionId, user, _1, error_6;
|
|
194
|
-
return __generator(this, function (_a) {
|
|
195
|
-
switch (_a.label) {
|
|
196
|
-
case 0:
|
|
197
|
-
_a.trys.push([0, 7, , 8]);
|
|
198
|
-
walletSignFn = signMessageWithWalletKey;
|
|
199
|
-
if (!walletSignFn && dynamicWallet) {
|
|
200
|
-
walletSignFn = createWalletSignFunction();
|
|
201
|
-
if (!walletSignFn) {
|
|
202
|
-
console.error('Failed to create wallet sign function');
|
|
203
|
-
return [2 /*return*/, null];
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
if (!walletSignFn) {
|
|
207
|
-
console.error('Cannot create NordUser, no wallet sign function available');
|
|
208
|
-
return [2 /*return*/, null];
|
|
209
|
-
}
|
|
210
|
-
// If we don't have a transaction sign function, create one
|
|
211
|
-
if (!signTransactionWithWalletKey && dynamicWallet) {
|
|
212
|
-
createTransactionSignFunction();
|
|
213
|
-
}
|
|
214
|
-
sessionSignFn = signMessageWithSessionKey;
|
|
215
|
-
if (!!sessionSignFn) return [3 /*break*/, 2];
|
|
216
|
-
return [4 /*yield*/, createSession()];
|
|
217
|
-
case 1:
|
|
218
|
-
createdSignFn = _a.sent();
|
|
219
|
-
if (!createdSignFn) {
|
|
220
|
-
console.error('Failed to create session sign function');
|
|
221
|
-
return [2 /*return*/, null];
|
|
222
|
-
}
|
|
223
|
-
sessionSignFn = createdSignFn;
|
|
224
|
-
_a.label = 2;
|
|
225
|
-
case 2:
|
|
226
|
-
sessionId = undefined;
|
|
227
|
-
if (address) {
|
|
228
|
-
try {
|
|
229
|
-
sessionKeyData = getSessionKeysFromLocalStorage(address);
|
|
230
|
-
if (sessionKeyData) {
|
|
231
|
-
sessionIdKey = "n1_sessionId_".concat(address);
|
|
232
|
-
storedSessionId = localStorage.getItem(sessionIdKey);
|
|
233
|
-
if (storedSessionId !== null) {
|
|
234
|
-
// Convert the stored sessionId to BigInt
|
|
235
|
-
sessionId = BigInt(storedSessionId);
|
|
236
|
-
logger.debug('Found existing sessionId in localStorage', {
|
|
237
|
-
sessionId: storedSessionId,
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
catch (error) {
|
|
243
|
-
console.error('Error retrieving sessionId from localStorage:', error);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
if (!nord || !address || !sessionPubKey) {
|
|
247
|
-
return [2 /*return*/, null];
|
|
248
|
-
}
|
|
249
|
-
user = new NordUser({
|
|
250
|
-
nord: nord,
|
|
251
|
-
address: address,
|
|
252
|
-
walletSignFn: walletSignFn,
|
|
253
|
-
sessionSignFn: sessionSignFn,
|
|
254
|
-
transactionSignFn: signTransactionWithWalletKey,
|
|
255
|
-
sessionId: sessionId, // Pass the sessionId if it exists
|
|
256
|
-
sessionPubKey: sessionPubKey,
|
|
257
|
-
publicKey: new PublicKey(address),
|
|
258
|
-
});
|
|
259
|
-
_a.label = 3;
|
|
260
|
-
case 3:
|
|
261
|
-
_a.trys.push([3, 5, , 6]);
|
|
262
|
-
return [4 /*yield*/, user.updateAccountId()];
|
|
263
|
-
case 4:
|
|
264
|
-
_a.sent();
|
|
265
|
-
return [3 /*break*/, 6];
|
|
266
|
-
case 5:
|
|
267
|
-
_1 = _a.sent();
|
|
268
|
-
return [3 /*break*/, 6];
|
|
269
|
-
case 6:
|
|
270
|
-
// Update the nordUser in the context
|
|
271
|
-
setNordUser(user);
|
|
272
|
-
return [2 /*return*/, user];
|
|
273
|
-
case 7:
|
|
274
|
-
error_6 = _a.sent();
|
|
275
|
-
console.error('Error creating NordUser:', error_6);
|
|
276
|
-
setNordUser(null);
|
|
277
|
-
return [2 /*return*/, null];
|
|
278
|
-
case 8: return [2 /*return*/];
|
|
279
|
-
}
|
|
280
|
-
});
|
|
281
|
-
}); }, [
|
|
282
|
-
nord,
|
|
283
|
-
address,
|
|
284
|
-
dynamicWallet,
|
|
285
|
-
signMessageWithWalletKey,
|
|
286
|
-
signMessageWithSessionKey,
|
|
287
|
-
signTransactionWithWalletKey,
|
|
288
|
-
sessionPubKey,
|
|
289
|
-
createWalletSignFunction,
|
|
290
|
-
createTransactionSignFunction,
|
|
291
|
-
createSession,
|
|
292
|
-
setNordUser
|
|
293
|
-
]);
|
|
294
|
-
// Initialize wallet and session functions only when dependencies change
|
|
295
|
-
useEffect(function () {
|
|
296
|
-
var currentDynamicWallet = dynamicWallet;
|
|
297
|
-
var currentAddress = address;
|
|
298
|
-
var prevDynamicWallet = prevDynamicWalletRef.current;
|
|
299
|
-
var prevAddress = prevAddressRef.current;
|
|
300
|
-
// Only run if dynamicWallet or address has actually changed
|
|
301
|
-
if ((currentDynamicWallet !== prevDynamicWallet ||
|
|
302
|
-
currentAddress !== prevAddress) &&
|
|
303
|
-
currentDynamicWallet &&
|
|
304
|
-
nord &&
|
|
305
|
-
currentAddress) {
|
|
306
|
-
logger.debug('Wallet or address changed, initializing functions');
|
|
307
|
-
if (signMessageWithSessionKey == null)
|
|
308
|
-
createSession();
|
|
309
|
-
if (signMessageWithWalletKey == null)
|
|
310
|
-
createWalletSignFunction();
|
|
311
|
-
if (signTransactionWithWalletKey == null)
|
|
312
|
-
createTransactionSignFunction();
|
|
313
|
-
// Update refs
|
|
314
|
-
prevDynamicWalletRef.current = currentDynamicWallet;
|
|
315
|
-
prevAddressRef.current = currentAddress;
|
|
316
|
-
}
|
|
317
|
-
}, [
|
|
318
|
-
dynamicWallet,
|
|
319
|
-
address,
|
|
320
|
-
nord,
|
|
321
|
-
signMessageWithSessionKey,
|
|
322
|
-
signMessageWithWalletKey,
|
|
323
|
-
signTransactionWithWalletKey,
|
|
324
|
-
createSession,
|
|
325
|
-
createWalletSignFunction,
|
|
326
|
-
createTransactionSignFunction
|
|
327
|
-
]);
|
|
328
|
-
// Initialize NordUser when dependencies change, but only if we don't already have one
|
|
329
|
-
useEffect(function () {
|
|
330
|
-
var initNordUser = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
331
|
-
return __generator(this, function (_a) {
|
|
332
|
-
switch (_a.label) {
|
|
333
|
-
case 0:
|
|
334
|
-
if (!(signMessageWithWalletKey &&
|
|
335
|
-
signMessageWithSessionKey &&
|
|
336
|
-
signTransactionWithWalletKey &&
|
|
337
|
-
nordUser == null)) return [3 /*break*/, 2];
|
|
338
|
-
logger.debug('Dependencies available, initializing NordUser');
|
|
339
|
-
return [4 /*yield*/, createNordUser()];
|
|
340
|
-
case 1:
|
|
341
|
-
_a.sent();
|
|
342
|
-
_a.label = 2;
|
|
343
|
-
case 2: return [2 /*return*/];
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
|
-
}); };
|
|
347
|
-
initNordUser();
|
|
348
|
-
}, [
|
|
349
|
-
signMessageWithWalletKey,
|
|
350
|
-
signMessageWithSessionKey,
|
|
351
|
-
signTransactionWithWalletKey,
|
|
352
|
-
nordUser,
|
|
353
|
-
createNordUser
|
|
354
|
-
]);
|
|
355
|
-
return {
|
|
356
|
-
nordUser: nordUser,
|
|
357
|
-
};
|
|
358
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
// Entire file content should be removed.
|
|
359
3
|
//# sourceMappingURL=useNordInstance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNordInstance.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useNordInstance.ts"],"names":[],"mappings":"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","sourcesContent":["import { NordUser } from '@n1xyz/nord-ts';\nimport { generateSessionKeyPair, signEd25519 } from '@n1xyz/nts-sdk';\nimport { PublicKey, Transaction } from '@solana/web3.js';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { WalletError, WalletErrorCode } from '../../../errors/types';\nimport {\n getSessionKeysFromLocalStorage,\n storeSessionKeysInLocalStorage,\n} from '../../../Logic/utils';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { logger } from '../../../utils/logger';\nimport { sign } from 'crypto';\n\n\n/**\n * Hook to access the Nord instance and create a NordUser if needed\n */\nexport const useNordInstance = () => {\n const {\n nord,\n address,\n signMessageWithWalletKey,\n signMessageWithSessionKey,\n signTransactionWithWalletKey,\n nordUser,\n sessionPubKey,\n } = useN1WalletContext();\n const {\n setSessionPubKey,\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n dynamicWallet,\n setNordUser,\n } = useN1WalletInternalContext();\n\n // Use refs to track previous values to prevent unnecessary re-renders\n const prevDynamicWalletRef = useRef(dynamicWallet);\n const prevAddressRef = useRef(address);\n\n // Create a wallet signing function if needed\n const createWalletSignFunction = useCallback(() => {\n if (!dynamicWallet) {\n return null;\n }\n\n const signWithWallet = async (msg: Uint8Array): Promise<Uint8Array> => {\n try {\n const hexMsg = Buffer.from(msg).toString('hex');\n const signature = await dynamicWallet.signMessage(hexMsg);\n const binaryString = atob(signature);\n const signatureUint8Array = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n signatureUint8Array[i] = binaryString.charCodeAt(i);\n }\n return signatureUint8Array;\n } catch (error) {\n console.error('Error signing with wallet:', error);\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign message with wallet',\n { originalError: error }\n );\n }\n };\n\n // Set the wallet sign function in context\n setSignMessageWithWalletKey(() => signWithWallet);\n return signWithWallet;\n }, [dynamicWallet, setSignMessageWithWalletKey]);\n\n // Create a wallet transaction signing function\n const createTransactionSignFunction = useCallback(() => {\n if (!dynamicWallet) {\n return null;\n }\n \n const signTransactionWithWallet = async (\n transaction: any\n ): Promise<any> => {\n try {\n if (dynamicWallet.chain === 'SOL') {\n const signedTransaction = await (\n await dynamicWallet.getSigner()\n ).signTransaction(transaction);\n logger.debug('Solana transaction signature received');\n \n // Serialize the transaction and create a new one from the serialized data\n // This avoids the need to modify the signature property directly\n const serializedTx = signedTransaction.serialize();\n \n // Create a new transaction from the serialized data\n // This will have a proper signature property that can be accessed\n return Transaction.from(serializedTx);\n }\n\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Unsupported chain',\n { originalError: new Error('Unsupported chain') }\n );\n } catch (error) {\n console.error('Error signing transaction with wallet:', error);\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign transaction with wallet',\n { originalError: error }\n );\n }\n };\n\n // Set the transaction sign function in context\n setSignTransactionWithWalletKey(() => signTransactionWithWallet);\n return signTransactionWithWallet;\n }, [dynamicWallet, setSignTransactionWithWalletKey]);\n\n // Create a session if we have the necessary dependencies but no session sign function\n const createSession = useCallback(async () => {\n try {\n // Try to load existing session keys from localStorage\n let sessionKeyPair = null;\n if (address) {\n const storedKeys = getSessionKeysFromLocalStorage(address);\n if (storedKeys) {\n // Reconstruct the key pair from the stored private key\n // We need to derive the public key from the private key\n try {\n // Generate a new key pair to get the proper structure\n const tempKeyPair = await generateSessionKeyPair();\n // Replace the private key with our stored one\n sessionKeyPair = {\n privateKey: storedKeys.ed25519PrivateKey,\n // For Ed25519, the public key is the second half of the private key\n publicKey: tempKeyPair.publicKey,\n };\n } catch (error) {\n console.error(\n 'Error reconstructing key pair from stored keys:',\n error\n );\n sessionKeyPair = null;\n }\n }\n }\n\n // If we couldn't load keys from localStorage, generate new ones\n if (!sessionKeyPair) {\n sessionKeyPair = await generateSessionKeyPair();\n }\n\n // Create session signing function\n const signFn = async (message: any): Promise<any> => {\n try {\n return await signEd25519(message, sessionKeyPair.privateKey);\n } catch (error) {\n console.error('Error signing with session key:', error);\n throw error;\n }\n };\n\n // Store session keys\n storeSessionKeysInLocalStorage({\n privKey: sessionKeyPair.privateKey,\n walletPublicKey: address,\n chainName: dynamicWallet?.chain || 'ETH', // Default to ETH if we don't have chain info\n });\n\n // Set session public key and sign function in context\n setSessionPubKey(sessionKeyPair.publicKey);\n setSignMessageWithSessionKey(() => signFn);\n return signFn;\n } catch (error) {\n console.error('Error creating session:', error);\n return null;\n }\n }, [address, dynamicWallet, setSessionPubKey, setSignMessageWithSessionKey]);\n\n // Create a NordUser instance if needed\n const createNordUser = useCallback(async () => {\n try {\n // If we don't have a wallet sign function, create one\n let walletSignFn = signMessageWithWalletKey;\n if (!walletSignFn && dynamicWallet) {\n walletSignFn = createWalletSignFunction();\n\n if (!walletSignFn) {\n console.error('Failed to create wallet sign function');\n return null;\n }\n }\n\n if (!walletSignFn) {\n console.error(\n 'Cannot create NordUser, no wallet sign function available'\n );\n return null;\n }\n\n // If we don't have a transaction sign function, create one\n if (!signTransactionWithWalletKey && dynamicWallet) {\n createTransactionSignFunction();\n }\n\n // If we don't have a session sign function, create one\n let sessionSignFn = signMessageWithSessionKey;\n if (!sessionSignFn) {\n const createdSignFn = await createSession();\n\n if (!createdSignFn) {\n console.error('Failed to create session sign function');\n return null;\n }\n\n sessionSignFn = createdSignFn;\n }\n\n // Check if there's a sessionId stored for the session public key\n let sessionId = undefined;\n if (address) {\n try {\n // Get the session key from localStorage\n const sessionKeyData = getSessionKeysFromLocalStorage(address);\n if (sessionKeyData) {\n // Check if there's a sessionId stored in localStorage\n const sessionIdKey = `n1_sessionId_${address}`;\n const storedSessionId = localStorage.getItem(sessionIdKey);\n if (storedSessionId !== null) {\n // Convert the stored sessionId to BigInt\n sessionId = BigInt(storedSessionId);\n logger.debug('Found existing sessionId in localStorage', {\n sessionId: storedSessionId,\n });\n }\n }\n } catch (error) {\n console.error('Error retrieving sessionId from localStorage:', error);\n }\n }\n\n if (!nord || !address || !sessionPubKey) {\n return null;\n }\n\n const user = new NordUser({\n nord: nord,\n address,\n walletSignFn,\n sessionSignFn,\n transactionSignFn: signTransactionWithWalletKey!,\n sessionId, // Pass the sessionId if it exists\n sessionPubKey: sessionPubKey!,\n publicKey: new PublicKey(address),\n });\n\n try {\n await user.updateAccountId();\n } catch (_) {\n // Ignore errors during account ID update\n }\n\n // Update the nordUser in the context\n setNordUser(user);\n return user;\n } catch (error) {\n console.error('Error creating NordUser:', error);\n setNordUser(null);\n return null;\n }\n }, [\n nord,\n address,\n dynamicWallet,\n signMessageWithWalletKey,\n signMessageWithSessionKey,\n signTransactionWithWalletKey,\n sessionPubKey,\n createWalletSignFunction,\n createTransactionSignFunction,\n createSession,\n setNordUser\n ]);\n\n // Initialize wallet and session functions only when dependencies change\n useEffect(() => {\n const currentDynamicWallet = dynamicWallet;\n const currentAddress = address;\n const prevDynamicWallet = prevDynamicWalletRef.current;\n const prevAddress = prevAddressRef.current;\n\n // Only run if dynamicWallet or address has actually changed\n if (\n (currentDynamicWallet !== prevDynamicWallet || \n currentAddress !== prevAddress) && \n currentDynamicWallet && \n nord && \n currentAddress\n ) {\n logger.debug('Wallet or address changed, initializing functions');\n \n if (signMessageWithSessionKey == null) createSession();\n if (signMessageWithWalletKey == null) createWalletSignFunction();\n if (signTransactionWithWalletKey == null) createTransactionSignFunction();\n \n // Update refs\n prevDynamicWalletRef.current = currentDynamicWallet;\n prevAddressRef.current = currentAddress;\n }\n }, [\n dynamicWallet, \n address, \n nord, \n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n createSession,\n createWalletSignFunction,\n createTransactionSignFunction\n ]);\n\n // Initialize NordUser when dependencies change, but only if we don't already have one\n useEffect(() => {\n const initNordUser = async () => {\n if (\n signMessageWithWalletKey &&\n signMessageWithSessionKey &&\n signTransactionWithWalletKey &&\n nordUser == null\n ) {\n logger.debug('Dependencies available, initializing NordUser');\n await createNordUser();\n }\n };\n\n initNordUser();\n }, [\n signMessageWithWalletKey,\n signMessageWithSessionKey,\n signTransactionWithWalletKey,\n nordUser,\n createNordUser\n ]);\n\n return {\n nordUser,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"useNordInstance.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useNordInstance.ts"],"names":[],"mappings":";AAAA,yCAAyC","sourcesContent":["// Entire file content should be removed.\n"]}
|
|
@@ -8,7 +8,6 @@ import { FlowState } from '../types';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const useNordWalletConnect: (state: FlowState, transition: (newState: FlowState, contextUpdates?: Partial<any>) => void, context: any, updateContext: (updates: Partial<any>) => void, sessionMode?: N1SessionMode) => {
|
|
10
10
|
isConnecting: boolean;
|
|
11
|
-
walletType: "solana" | "ethereum" | null;
|
|
12
11
|
connectWallet: () => Promise<void>;
|
|
13
12
|
disconnectWallet: () => void;
|
|
14
13
|
};
|
|
@@ -252,7 +252,6 @@ export var useNordWalletConnect = function (state, transition, context, updateCo
|
|
|
252
252
|
}, [state, isConnecting]);
|
|
253
253
|
return {
|
|
254
254
|
isConnecting: isConnecting,
|
|
255
|
-
walletType: walletType,
|
|
256
255
|
connectWallet: connectWallet,
|
|
257
256
|
disconnectWallet: disconnectWallet,
|
|
258
257
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNordWalletConnect.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useNordWalletConnect.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState, useRef } from 'react';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { N1SessionMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { FlowState } from '../types';\n\n/**\n * Hook for handling wallet connection\n *\n * @param options Configuration options\n * @returns Wallet connection methods and state\n */\nexport const useNordWalletConnect = (\n state: FlowState,\n transition: (newState: FlowState, contextUpdates?: Partial<any>) => void,\n context: any,\n updateContext: (updates: Partial<any>) => void,\n sessionMode?: N1SessionMode\n) => {\n const { nord, nordUser } = useN1WalletContext();\n const { showDynamicWidget, dynamicWallet, setIsConnected } =\n useN1WalletInternalContext();\n\n const [isConnecting, setIsConnecting] = useState(false);\n const [walletType, setWalletType] = useState<'solana' | 'ethereum' | null>(\n context.walletType\n );\n const [hasProcessedWallet, setHasProcessedWallet] = useState(false);\n\n // Use refs to track previous values\n const processedWalletAddressRef = useRef<string | null>(null);\n const prevNordUserRef = useRef(nordUser);\n const prevDynamicWalletRef = useRef(dynamicWallet);\n const prevStateRef = useRef(state);\n\n /**\n * Determine wallet type from Dynamic wallet\n */\n const determineWalletType = useCallback((): 'solana' | 'ethereum' | null => {\n if (!dynamicWallet) return null;\n\n // Check wallet connector id to determine if it's ethereum or solana\n const connectorId = dynamicWallet.connector?.name?.toLowerCase() || '';\n if (connectorId.includes('solana') || connectorId.includes('phantom')) {\n return 'solana';\n } else {\n // Default to ethereum for most other wallets\n return 'ethereum';\n }\n }, [dynamicWallet]);\n\n /**\n * Connect wallet using Dynamic widget\n */\n const connectWallet = useCallback(async () => {\n if (isConnecting || !showDynamicWidget) return;\n\n setIsConnecting(true);\n setHasProcessedWallet(false);\n logger.debug('Starting wallet connection process');\n\n try {\n // Show Dynamic widget to connect wallet\n await disconnectWallet()\n await showDynamicWidget(true);\n logger.debug('Dynamic widget shown');\n } catch (error) {\n setIsConnecting(false);\n updateContext({ walletType: null });\n logger.error('Error showing Dynamic widget:', error);\n }\n }, [isConnecting, showDynamicWidget, updateContext]);\n\n /**\n * Disconnect wallet\n */\n const disconnectWallet = useCallback(() => {\n logger.debug('Disconnecting wallet');\n setWalletType(null);\n setHasProcessedWallet(false);\n processedWalletAddressRef.current = null;\n\n updateContext({ walletType: null });\n }, [updateContext]);\n\n // Process nordUser changes\n useEffect(() => {\n const currentNordUser = nordUser;\n const prevNordUser = prevNordUserRef.current;\n \n // Only run if nordUser has changed and we have processed a wallet\n if (hasProcessedWallet && currentNordUser && currentNordUser !== prevNordUser) {\n logger.debug('NordUser changed, checking account status');\n \n (async () => {\n try {\n if (!dynamicWallet || !nord) return;\n \n const hasNordAccount = await nord.accountExists(dynamicWallet.address);\n const sessionId = currentNordUser.sessionId;\n const hasActiveSession = sessionId != null;\n \n updateContext({ hasNordAccount, hasActiveSession });\n \n const transitionDestination = hasNordAccount\n ? sessionId != null\n ? FlowState.FINAL_SUCCESS\n : FlowState.AUTH_LOADING\n : FlowState.CHAIN_SELECTION;\n\n if (hasNordAccount && sessionId != null) {\n setIsConnected(true);\n }\n\n // Force a small delay to ensure UI updates properly\n setTimeout(() => {\n try {\n logger.debug('Attempting transition to ' + transitionDestination);\n transition(transitionDestination, {\n walletType: 'solana',\n hasNordAccount,\n hasActiveSession,\n });\n logger.debug(\n 'Transition to ' + transitionDestination + ' completed'\n );\n } catch (error) {\n logger.error('Error during transition:', error);\n } finally {\n setIsConnecting(false);\n }\n }, 100);\n } catch (error) {\n logger.error('Error checking account status:', error);\n setIsConnecting(false);\n }\n })();\n }\n \n // Update ref\n prevNordUserRef.current = currentNordUser;\n }, [nordUser, hasProcessedWallet, dynamicWallet, nord, updateContext, transition, setIsConnected]);\n\n /**\n * Effect to handle wallet connection state changes\n */\n useEffect(() => {\n const isNordMode = sessionMode === N1SessionMode.Nord;\n const currentDynamicWallet = dynamicWallet;\n const prevDynamicWallet = prevDynamicWalletRef.current;\n\n // If we don't have a wallet, nothing to process\n if (!currentDynamicWallet) {\n return;\n }\n\n // If the wallet hasn't changed, don't reprocess\n if (currentDynamicWallet === prevDynamicWallet) {\n return;\n }\n\n // If we've already processed this specific wallet address, don't process again\n if (\n hasProcessedWallet &&\n processedWalletAddressRef.current === currentDynamicWallet.address\n ) {\n logger.debug(\n 'Skipping wallet processing - already processed this address'\n );\n return;\n }\n\n // Use an IIFE to handle the async processing\n (async () => {\n // Prevent processing if already in progress\n if (hasProcessedWallet) {\n logger.debug('Skipping wallet processing - hasProcessedWallet is true');\n return;\n }\n\n logger.debug('Processing wallet connection:', {\n wallet: currentDynamicWallet.connector?.name,\n address: currentDynamicWallet.address?.slice(0, 8),\n state,\n isNordMode,\n });\n\n // Set processed flag first to prevent re-entry\n setHasProcessedWallet(true);\n processedWalletAddressRef.current = currentDynamicWallet.address;\n\n const type = determineWalletType();\n setWalletType(type);\n })();\n\n // Update ref\n prevDynamicWalletRef.current = currentDynamicWallet;\n }, [dynamicWallet, determineWalletType, hasProcessedWallet, sessionMode, state]);\n\n // Handle wallet disconnection in a separate effect\n useEffect(() => {\n if (!dynamicWallet && hasProcessedWallet) {\n logger.debug('Wallet disconnected, resetting processed flag');\n processedWalletAddressRef.current = null;\n setHasProcessedWallet(false);\n }\n }, [dynamicWallet, hasProcessedWallet]);\n\n // Handle connecting state changes in a separate effect\n useEffect(() => {\n const currentState = state;\n const prevState = prevStateRef.current;\n \n // Only run if state has changed\n if (currentState !== prevState) {\n if (currentState !== FlowState.CONNECTING_WALLET && isConnecting) {\n // If we're no longer in the connecting state, reset the connecting flag\n setIsConnecting(false);\n }\n \n // Update ref\n prevStateRef.current = currentState;\n }\n }, [state, isConnecting]);\n\n return {\n isConnecting,\n walletType,\n connectWallet,\n disconnectWallet,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"useNordWalletConnect.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useNordWalletConnect.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState, useRef } from 'react';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { N1SessionMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { FlowState } from '../types';\n\n/**\n * Hook for handling wallet connection\n *\n * @param options Configuration options\n * @returns Wallet connection methods and state\n */\nexport const useNordWalletConnect = (\n state: FlowState,\n transition: (newState: FlowState, contextUpdates?: Partial<any>) => void,\n context: any,\n updateContext: (updates: Partial<any>) => void,\n sessionMode?: N1SessionMode\n) => {\n const { nord, nordUser } = useN1WalletContext();\n const { showDynamicWidget, dynamicWallet, setIsConnected } =\n useN1WalletInternalContext();\n\n const [isConnecting, setIsConnecting] = useState(false);\n const [walletType, setWalletType] = useState<'solana' | 'ethereum' | null>(\n context.walletType\n );\n const [hasProcessedWallet, setHasProcessedWallet] = useState(false);\n\n // Use refs to track previous values\n const processedWalletAddressRef = useRef<string | null>(null);\n const prevNordUserRef = useRef(nordUser);\n const prevDynamicWalletRef = useRef(dynamicWallet);\n const prevStateRef = useRef(state);\n\n /**\n * Determine wallet type from Dynamic wallet\n */\n const determineWalletType = useCallback((): 'solana' | 'ethereum' | null => {\n if (!dynamicWallet) return null;\n\n // Check wallet connector id to determine if it's ethereum or solana\n const connectorId = dynamicWallet.connector?.name?.toLowerCase() || '';\n if (connectorId.includes('solana') || connectorId.includes('phantom')) {\n return 'solana';\n } else {\n // Default to ethereum for most other wallets\n return 'ethereum';\n }\n }, [dynamicWallet]);\n\n /**\n * Connect wallet using Dynamic widget\n */\n const connectWallet = useCallback(async () => {\n if (isConnecting || !showDynamicWidget) return;\n\n setIsConnecting(true);\n setHasProcessedWallet(false);\n logger.debug('Starting wallet connection process');\n\n try {\n // Show Dynamic widget to connect wallet\n await disconnectWallet()\n await showDynamicWidget(true);\n logger.debug('Dynamic widget shown');\n } catch (error) {\n setIsConnecting(false);\n updateContext({ walletType: null });\n logger.error('Error showing Dynamic widget:', error);\n }\n }, [isConnecting, showDynamicWidget, updateContext]);\n\n /**\n * Disconnect wallet\n */\n const disconnectWallet = useCallback(() => {\n logger.debug('Disconnecting wallet');\n setWalletType(null);\n setHasProcessedWallet(false);\n processedWalletAddressRef.current = null;\n\n updateContext({ walletType: null });\n }, [updateContext]);\n\n // Process nordUser changes\n useEffect(() => {\n const currentNordUser = nordUser;\n const prevNordUser = prevNordUserRef.current;\n \n // Only run if nordUser has changed and we have processed a wallet\n if (hasProcessedWallet && currentNordUser && currentNordUser !== prevNordUser) {\n logger.debug('NordUser changed, checking account status');\n \n (async () => {\n try {\n if (!dynamicWallet || !nord) return;\n \n const hasNordAccount = await nord.accountExists(dynamicWallet.address);\n const sessionId = currentNordUser.sessionId;\n const hasActiveSession = sessionId != null;\n \n updateContext({ hasNordAccount, hasActiveSession });\n \n const transitionDestination = hasNordAccount\n ? sessionId != null\n ? FlowState.FINAL_SUCCESS\n : FlowState.AUTH_LOADING\n : FlowState.CHAIN_SELECTION;\n\n if (hasNordAccount && sessionId != null) {\n setIsConnected(true);\n }\n\n // Force a small delay to ensure UI updates properly\n setTimeout(() => {\n try {\n logger.debug('Attempting transition to ' + transitionDestination);\n transition(transitionDestination, {\n walletType: 'solana',\n hasNordAccount,\n hasActiveSession,\n });\n logger.debug(\n 'Transition to ' + transitionDestination + ' completed'\n );\n } catch (error) {\n logger.error('Error during transition:', error);\n } finally {\n setIsConnecting(false);\n }\n }, 100);\n } catch (error) {\n logger.error('Error checking account status:', error);\n setIsConnecting(false);\n }\n })();\n }\n \n // Update ref\n prevNordUserRef.current = currentNordUser;\n }, [nordUser, hasProcessedWallet, dynamicWallet, nord, updateContext, transition, setIsConnected]);\n\n /**\n * Effect to handle wallet connection state changes\n */\n useEffect(() => {\n const isNordMode = sessionMode === N1SessionMode.Nord;\n const currentDynamicWallet = dynamicWallet;\n const prevDynamicWallet = prevDynamicWalletRef.current;\n\n // If we don't have a wallet, nothing to process\n if (!currentDynamicWallet) {\n return;\n }\n\n // If the wallet hasn't changed, don't reprocess\n if (currentDynamicWallet === prevDynamicWallet) {\n return;\n }\n\n // If we've already processed this specific wallet address, don't process again\n if (\n hasProcessedWallet &&\n processedWalletAddressRef.current === currentDynamicWallet.address\n ) {\n logger.debug(\n 'Skipping wallet processing - already processed this address'\n );\n return;\n }\n\n // Use an IIFE to handle the async processing\n (async () => {\n // Prevent processing if already in progress\n if (hasProcessedWallet) {\n logger.debug('Skipping wallet processing - hasProcessedWallet is true');\n return;\n }\n\n logger.debug('Processing wallet connection:', {\n wallet: currentDynamicWallet.connector?.name,\n address: currentDynamicWallet.address?.slice(0, 8),\n state,\n isNordMode,\n });\n\n // Set processed flag first to prevent re-entry\n setHasProcessedWallet(true);\n processedWalletAddressRef.current = currentDynamicWallet.address;\n\n const type = determineWalletType();\n setWalletType(type);\n })();\n\n // Update ref\n prevDynamicWalletRef.current = currentDynamicWallet;\n }, [dynamicWallet, determineWalletType, hasProcessedWallet, sessionMode, state]);\n\n // Handle wallet disconnection in a separate effect\n useEffect(() => {\n if (!dynamicWallet && hasProcessedWallet) {\n logger.debug('Wallet disconnected, resetting processed flag');\n processedWalletAddressRef.current = null;\n setHasProcessedWallet(false);\n }\n }, [dynamicWallet, hasProcessedWallet]);\n\n // Handle connecting state changes in a separate effect\n useEffect(() => {\n const currentState = state;\n const prevState = prevStateRef.current;\n \n // Only run if state has changed\n if (currentState !== prevState) {\n if (currentState !== FlowState.CONNECTING_WALLET && isConnecting) {\n // If we're no longer in the connecting state, reset the connecting flag\n setIsConnecting(false);\n }\n \n // Update ref\n prevStateRef.current = currentState;\n }\n }, [state, isConnecting]);\n\n return {\n isConnecting,\n connectWallet,\n disconnectWallet,\n };\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Idle screen component that displays a loading animation
|
|
4
|
+
* Used as the default screen when no specific flow state is active
|
|
5
|
+
*/
|
|
6
|
+
export var IdleScreen = function () {
|
|
7
|
+
return (_jsxs("div", { className: "flex flex-col items-center justify-center p-8 space-y-4", children: [_jsxs("div", { className: "relative w-12 h-12", children: [_jsx("div", { className: "absolute inset-0 border-2 border-n1-gray-200 dark:border-n1-gray-800 border-b-n1-main rounded-full n1-animate-spin-slow" }), _jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: _jsx("div", { className: "w-2 h-2 bg-n1-main rounded-full n1-animate-pulse" }) })] }), _jsx("p", { className: "text-n1-gray-700 dark:text-n1-gray-300 text-sm font-medium", children: "Loading" })] }));
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=00-IdleScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"00-IdleScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/00-IdleScreen.tsx"],"names":[],"mappings":";AAEA;;;GAGG;AACH,MAAM,CAAC,IAAM,UAAU,GAAa;IAClC,OAAO,CACL,eAAK,SAAS,EAAC,yDAAyD,aAEtE,eAAK,SAAS,EAAC,oBAAoB,aAEjC,cAAK,SAAS,EAAC,yHAAyH,GAAO,EAG/I,cAAK,SAAS,EAAC,mDAAmD,YAChE,cAAK,SAAS,EAAC,kDAAkD,GAAO,GACpE,IACF,EAGN,YAAG,SAAS,EAAC,4DAA4D,wBAErE,IACA,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from 'react';\n\n/**\n * Idle screen component that displays a loading animation\n * Used as the default screen when no specific flow state is active\n */\nexport const IdleScreen: React.FC = () => {\n return (\n <div className=\"flex flex-col items-center justify-center p-8 space-y-4\">\n {/* Minimalistic but creative loading animation */}\n <div className=\"relative w-12 h-12\">\n {/* Simple spinning ring with primary color accent */}\n <div className=\"absolute inset-0 border-2 border-n1-gray-200 dark:border-n1-gray-800 border-b-n1-main rounded-full n1-animate-spin-slow\"></div>\n\n {/* Subtle pulsing dot in the center */}\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"w-2 h-2 bg-n1-main rounded-full n1-animate-pulse\"></div>\n </div>\n </div>\n\n {/* Simple loading text */}\n <p className=\"text-n1-gray-700 dark:text-n1-gray-300 text-sm font-medium\">\n Loading\n </p>\n </div>\n );\n}; "]}
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
|
|
2
|
-
onConnectWallet: () => void;
|
|
3
|
-
isConnecting: boolean;
|
|
4
|
-
}
|
|
5
|
-
export declare function ConnectWalletScreen({ onConnectWallet, isConnecting, }: ConnectWalletScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
export {};
|
|
1
|
+
export declare function ConnectWalletScreen(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
3
|
import { IoMdWallet } from 'react-icons/io';
|
|
4
4
|
import { LoadingSquares } from '../components/LoadingSquares';
|
|
5
5
|
import { ANIMATION_EASE } from '../constants';
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import { useWalletConnectContext } from '../context/WalletConnectContext';
|
|
7
|
+
export function ConnectWalletScreen() {
|
|
8
|
+
var _a = useWalletConnectContext(), isConnecting = _a.isConnecting, connectWallet = _a.connectWallet;
|
|
8
9
|
var _b = useState(null), isHovered = _b[0], setIsHovered = _b[1];
|
|
10
|
+
useEffect(function () {
|
|
11
|
+
if (!isConnecting) {
|
|
12
|
+
connectWallet();
|
|
13
|
+
}
|
|
14
|
+
}, [isConnecting]);
|
|
9
15
|
// If connecting, show loading state
|
|
10
16
|
if (isConnecting) {
|
|
11
17
|
return (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 space-y-6", children: [_jsx(LoadingSquares, {}), _jsxs("div", { className: "space-y-2 text-center w-[300px]", children: [_jsx("h3", { className: "text-xl text-n1-gray-800 dark:text-white font-semibold", children: "Connecting Wallet" }), _jsx("p", { className: "text-sm text-n1-gray-600 dark:text-neutral-400", children: "Please approve the connection request in your wallet" })] })] }));
|
|
12
18
|
}
|
|
13
19
|
// If not connecting, show connect options (exactly like NTS flow)
|
|
14
|
-
return (_jsx("div", { className: "p-6 overflow-hidden relative", children: _jsxs("div", { className: "space-y-4", children: [_jsx("button", { onClick:
|
|
20
|
+
return (_jsx("div", { className: "p-6 overflow-hidden relative", children: _jsxs("div", { className: "space-y-4", children: [_jsx("button", { onClick: connectWallet, onMouseEnter: function () { return setIsHovered('wallet'); }, onMouseLeave: function () { return setIsHovered(null); }, className: "\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-gray-100 dark:bg-neutral-950 py-4 text-center\n transition-all duration-300 ".concat(ANIMATION_EASE, "\n cursor-pointer border-n1-gray-200 dark:border-n1-gray-800 hover:border-n1-gray-400 dark:hover:border-white/60\n "), style: {
|
|
15
21
|
transform: isHovered === 'wallet' ? 'scale(0.99)' : 'scale(1)',
|
|
16
22
|
}, children: _jsx("div", { className: "relative z-[200] pl-4 isolate", children: _jsxs("div", { className: "flex items-center", children: [_jsx(IoMdWallet, { className: "w-5 h-5 text-n1-gray-500 dark:text-neutral-400 group-hover:text-n1-gray-900 dark:group-hover:text-white transition-colors duration-300" }), _jsx("span", { className: "\n ml-2 text-base font-medium tracking-wide transition-colors duration-300 ".concat(ANIMATION_EASE, "\n text-n1-gray-500 dark:text-neutral-400 group-hover:text-n1-gray-900 dark:group-hover:text-white\n "), children: "Continue with Wallet" })] }) }) }), _jsx("button", { disabled: true, onMouseEnter: function () { return setIsHovered('google'); }, onMouseLeave: function () { return setIsHovered(null); }, className: "\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-gray-100 dark:bg-neutral-950 py-4 text-center\n transition-all duration-300 ".concat(ANIMATION_EASE, "\n cursor-not-allowed border-n1-gray-200 dark:border-n1-gray-800 opacity-50\n "), children: _jsx("div", { className: "relative z-[200] pl-4 isolate", children: _jsx("div", { className: "flex items-center", children: _jsx("span", { className: "text-base font-medium tracking-wide text-n1-gray-500 dark:text-neutral-400", children: "Continue with Google (soon)" }) }) }) }), _jsx("button", { disabled: true, onMouseEnter: function () { return setIsHovered('email'); }, onMouseLeave: function () { return setIsHovered(null); }, className: "\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-gray-100 dark:bg-neutral-950 py-4 text-center\n transition-all duration-300 ".concat(ANIMATION_EASE, "\n cursor-not-allowed border-n1-gray-200 dark:border-n1-gray-800 opacity-50\n "), children: _jsx("div", { className: "relative z-[200] pl-4 isolate", children: _jsx("div", { className: "flex items-center", children: _jsx("span", { className: "text-base font-medium tracking-wide text-n1-gray-500 dark:text-neutral-400", children: "Continue with Email (soon)" }) }) }) })] }) }));
|
|
17
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"01-ConnectWalletScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/01-ConnectWalletScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"01-ConnectWalletScreen.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/screens/01-ConnectWalletScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,MAAM,UAAU,mBAAmB;IAC3B,IAAA,KAAkC,uBAAuB,EAAE,EAAzD,YAAY,kBAAA,EAAE,aAAa,mBAA8B,CAAC;IAC5D,IAAA,KAA4B,QAAQ,CAExC,IAAI,CAAC,EAFA,SAAS,QAAA,EAAE,YAAY,QAEvB,CAAC;IAGR,SAAS,CAAC;QACR,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,oCAAoC;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CACL,eAAK,SAAS,EAAC,2DAA2D,aACxE,KAAC,cAAc,KAAG,EAClB,eAAK,SAAS,EAAC,iCAAiC,aAC9C,aAAI,SAAS,EAAC,wDAAwD,kCAEjE,EACL,YAAG,SAAS,EAAC,gDAAgD,qEAEzD,IACA,IACF,CACP,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,OAAO,CACL,cAAK,SAAS,EAAC,8BAA8B,YAC3C,eAAK,SAAS,EAAC,WAAW,aACxB,iBACE,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,QAAQ,CAAC,EAAtB,CAAsB,EAC1C,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,EACtC,SAAS,EAAE,+KAEqB,cAAc,4IAE7C,EACD,KAAK,EAAE;wBACL,SAAS,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;qBAC/D,YAED,cAAK,SAAS,EAAC,+BAA+B,YAC5C,eAAK,SAAS,EAAC,mBAAmB,aAChC,KAAC,UAAU,IAAC,SAAS,EAAC,wIAAwI,GAAG,EACjK,eACE,SAAS,EAAE,oGAC+D,cAAc,sIAEzF,qCAGM,IACH,GACF,GACC,EAET,iBACE,QAAQ,QACR,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,QAAQ,CAAC,EAAtB,CAAsB,EAC1C,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,EACtC,SAAS,EAAE,+KAEqB,cAAc,uGAE7C,YAED,cAAK,SAAS,EAAC,+BAA+B,YAC5C,cAAK,SAAS,EAAC,mBAAmB,YAChC,eAAM,SAAS,EAAC,4EAA4E,4CAErF,GACH,GACF,GACC,EAET,iBACE,QAAQ,QACR,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,OAAO,CAAC,EAArB,CAAqB,EACzC,YAAY,EAAE,cAAM,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,EACtC,SAAS,EAAE,+KAEqB,cAAc,uGAE7C,YAED,cAAK,SAAS,EAAC,+BAA+B,YAC5C,cAAK,SAAS,EAAC,mBAAmB,YAChC,eAAM,SAAS,EAAC,4EAA4E,2CAErF,GACH,GACF,GACC,IACL,GACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { IoMdWallet } from 'react-icons/io';\nimport { LoadingSquares } from '../components/LoadingSquares';\nimport { ANIMATION_EASE } from '../constants';\nimport { useWalletConnectContext } from '../context/WalletConnectContext';\n\nexport function ConnectWalletScreen() {\n const { isConnecting, connectWallet } = useWalletConnectContext();\n const [isHovered, setIsHovered] = useState<\n 'wallet' | 'google' | 'email' | null\n >(null);\n\n\n useEffect(() => {\n if (!isConnecting) {\n connectWallet();\n }\n }, [isConnecting]);\n\n // If connecting, show loading state\n if (isConnecting) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12 space-y-6\">\n <LoadingSquares />\n <div className=\"space-y-2 text-center w-[300px]\">\n <h3 className=\"text-xl text-n1-gray-800 dark:text-white font-semibold\">\n Connecting Wallet\n </h3>\n <p className=\"text-sm text-n1-gray-600 dark:text-neutral-400\">\n Please approve the connection request in your wallet\n </p>\n </div>\n </div>\n );\n }\n\n // If not connecting, show connect options (exactly like NTS flow)\n return (\n <div className=\"p-6 overflow-hidden relative\">\n <div className=\"space-y-4\">\n <button\n onClick={connectWallet}\n onMouseEnter={() => setIsHovered('wallet')}\n onMouseLeave={() => setIsHovered(null)}\n className={`\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-gray-100 dark:bg-neutral-950 py-4 text-center\n transition-all duration-300 ${ANIMATION_EASE}\n cursor-pointer border-n1-gray-200 dark:border-n1-gray-800 hover:border-n1-gray-400 dark:hover:border-white/60\n `}\n style={{\n transform: isHovered === 'wallet' ? 'scale(0.99)' : 'scale(1)',\n }}\n >\n <div className=\"relative z-[200] pl-4 isolate\">\n <div className=\"flex items-center\">\n <IoMdWallet className=\"w-5 h-5 text-n1-gray-500 dark:text-neutral-400 group-hover:text-n1-gray-900 dark:group-hover:text-white transition-colors duration-300\" />\n <span\n className={`\n ml-2 text-base font-medium tracking-wide transition-colors duration-300 ${ANIMATION_EASE}\n text-n1-gray-500 dark:text-neutral-400 group-hover:text-n1-gray-900 dark:group-hover:text-white\n `}\n >\n Continue with Wallet\n </span>\n </div>\n </div>\n </button>\n\n <button\n disabled\n onMouseEnter={() => setIsHovered('google')}\n onMouseLeave={() => setIsHovered(null)}\n className={`\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-gray-100 dark:bg-neutral-950 py-4 text-center\n transition-all duration-300 ${ANIMATION_EASE}\n cursor-not-allowed border-n1-gray-200 dark:border-n1-gray-800 opacity-50\n `}\n >\n <div className=\"relative z-[200] pl-4 isolate\">\n <div className=\"flex items-center\">\n <span className=\"text-base font-medium tracking-wide text-n1-gray-500 dark:text-neutral-400\">\n Continue with Google (soon)\n </span>\n </div>\n </div>\n </button>\n\n <button\n disabled\n onMouseEnter={() => setIsHovered('email')}\n onMouseLeave={() => setIsHovered(null)}\n className={`\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-gray-100 dark:bg-neutral-950 py-4 text-center\n transition-all duration-300 ${ANIMATION_EASE}\n cursor-not-allowed border-n1-gray-200 dark:border-n1-gray-800 opacity-50\n `}\n >\n <div className=\"relative z-[200] pl-4 isolate\">\n <div className=\"flex items-center\">\n <span className=\"text-base font-medium tracking-wide text-n1-gray-500 dark:text-neutral-400\">\n Continue with Email (soon)\n </span>\n </div>\n </div>\n </button>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
onAuth: () => void;
|
|
3
|
-
isAuthenticating?: boolean;
|
|
4
|
-
}
|
|
5
|
-
export declare function EvmWalletAuthScreen({ onAuth, isAuthenticating, }: EvmWalletAuthScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
export declare function EvmWalletAuthScreen(): import("react/jsx-runtime").JSX.Element;
|
|
6
2
|
export { EvmWalletAuthScreen as EthToSolAuthScreen };
|