@n1xyz/wallet-widget 0.0.1

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.
Files changed (111) hide show
  1. package/.eslintrc.js +29 -0
  2. package/dist/Common/NIcon.d.ts +1 -0
  3. package/dist/Common/NIcon.js +7 -0
  4. package/dist/Logic/getPseudoName.d.ts +1 -0
  5. package/dist/Logic/getPseudoName.js +5825 -0
  6. package/dist/Logic/utils.d.ts +20 -0
  7. package/dist/Logic/utils.js +199 -0
  8. package/dist/Logic/words.d.ts +9 -0
  9. package/dist/Logic/words.js +93571 -0
  10. package/dist/Modal/BackButton.d.ts +3 -0
  11. package/dist/Modal/BackButton.js +13 -0
  12. package/dist/Modal/ConnectView.d.ts +1 -0
  13. package/dist/Modal/ConnectView.js +71 -0
  14. package/dist/Modal/CreateSessionView.d.ts +1 -0
  15. package/dist/Modal/CreateSessionView.js +236 -0
  16. package/dist/Modal/CreateUserView.d.ts +1 -0
  17. package/dist/Modal/CreateUserView.js +160 -0
  18. package/dist/Modal/ModalHeader.d.ts +1 -0
  19. package/dist/Modal/ModalHeader.js +9 -0
  20. package/dist/Modal/N1WalletModal.d.ts +1 -0
  21. package/dist/Modal/N1WalletModal.js +232 -0
  22. package/dist/Modal/NoWhitelistView.d.ts +1 -0
  23. package/dist/Modal/NoWhitelistView.js +29 -0
  24. package/dist/Modal/Sidebar/N1Sidebar.d.ts +1 -0
  25. package/dist/Modal/Sidebar/N1Sidebar.js +38 -0
  26. package/dist/Modal/SigningView.d.ts +1 -0
  27. package/dist/Modal/SigningView.js +5 -0
  28. package/dist/Modal/SuccessView.d.ts +1 -0
  29. package/dist/Modal/SuccessView.js +10 -0
  30. package/dist/Provider/LazyWalletProvider.d.ts +1 -0
  31. package/dist/Provider/LazyWalletProvider.js +160 -0
  32. package/dist/Provider/N1WalletProvider.d.ts +2 -0
  33. package/dist/Provider/N1WalletProvider.js +219 -0
  34. package/dist/Provider/context.d.ts +5 -0
  35. package/dist/Provider/context.js +4 -0
  36. package/dist/Provider/hooks.d.ts +2 -0
  37. package/dist/Provider/hooks.js +16 -0
  38. package/dist/Provider/icons/CoinbaseWalletIcon.d.ts +1 -0
  39. package/dist/Provider/icons/CoinbaseWalletIcon.js +4 -0
  40. package/dist/Provider/icons/ConnectionDotsSVG.d.ts +1 -0
  41. package/dist/Provider/icons/ConnectionDotsSVG.js +4 -0
  42. package/dist/Provider/icons/MetamaskIcon.d.ts +1 -0
  43. package/dist/Provider/icons/MetamaskIcon.js +4 -0
  44. package/dist/Provider/icons/PhantomIcon.d.ts +1 -0
  45. package/dist/Provider/icons/PhantomIcon.js +4 -0
  46. package/dist/Provider/icons/UserIcon.d.ts +1 -0
  47. package/dist/Provider/icons/UserIcon.js +4 -0
  48. package/dist/Provider/icons/WalletConnectIcon.d.ts +1 -0
  49. package/dist/Provider/icons/WalletConnectIcon.js +4 -0
  50. package/dist/Provider/index.d.ts +3 -0
  51. package/dist/Provider/index.js +3 -0
  52. package/dist/Provider/types.d.ts +68 -0
  53. package/dist/Provider/types.js +14 -0
  54. package/dist/WidgetButton/N1ConnectButton.d.ts +5 -0
  55. package/dist/WidgetButton/N1ConnectButton.js +24 -0
  56. package/dist/components/AnimatedButton.d.ts +9 -0
  57. package/dist/components/AnimatedButton.js +5 -0
  58. package/dist/components/LazyLoadWrapper.d.ts +8 -0
  59. package/dist/components/LazyLoadWrapper.js +17 -0
  60. package/dist/config.d.ts +2 -0
  61. package/dist/config.js +2 -0
  62. package/dist/errors/types.d.ts +21 -0
  63. package/dist/errors/types.js +64 -0
  64. package/dist/index.d.ts +5 -0
  65. package/dist/index.js +5 -0
  66. package/dist/main.css +1 -0
  67. package/dist/utils/lazyLoad.d.ts +3 -0
  68. package/dist/utils/lazyLoad.js +9 -0
  69. package/dist/utils/logger.d.ts +20 -0
  70. package/dist/utils/logger.js +106 -0
  71. package/dist/utils/react-shim.d.ts +2 -0
  72. package/dist/utils/react-shim.js +6 -0
  73. package/package.json +46 -0
  74. package/postcss.config.js +6 -0
  75. package/src/Logic/getPseudoName.ts +5832 -0
  76. package/src/Logic/utils.ts +162 -0
  77. package/src/Logic/words.ts +93571 -0
  78. package/src/Modal/BackButton.tsx +23 -0
  79. package/src/Modal/ConnectView.tsx +88 -0
  80. package/src/Modal/CreateSessionView.tsx +242 -0
  81. package/src/Modal/CreateUserView.tsx +195 -0
  82. package/src/Modal/ModalHeader.tsx +64 -0
  83. package/src/Modal/N1WalletModal.tsx +275 -0
  84. package/src/Modal/NoWhitelistView.tsx +61 -0
  85. package/src/Modal/Sidebar/N1Sidebar.tsx +172 -0
  86. package/src/Modal/SigningView.tsx +18 -0
  87. package/src/Modal/SuccessView.tsx +36 -0
  88. package/src/Provider/LazyWalletProvider.tsx +136 -0
  89. package/src/Provider/N1WalletProvider.tsx +208 -0
  90. package/src/Provider/context.ts +11 -0
  91. package/src/Provider/hooks.ts +22 -0
  92. package/src/Provider/icons/CoinbaseWalletIcon.tsx +27 -0
  93. package/src/Provider/icons/ConnectionDotsSVG.tsx +19 -0
  94. package/src/Provider/icons/MetamaskIcon.tsx +58 -0
  95. package/src/Provider/icons/PhantomIcon.tsx +26 -0
  96. package/src/Provider/icons/UserIcon.tsx +15 -0
  97. package/src/Provider/icons/WalletConnectIcon.tsx +15 -0
  98. package/src/Provider/index.ts +3 -0
  99. package/src/Provider/types.ts +77 -0
  100. package/src/WidgetButton/N1ConnectButton.tsx +72 -0
  101. package/src/components/LazyLoadWrapper.tsx +19 -0
  102. package/src/config.ts +2 -0
  103. package/src/errors/types.ts +49 -0
  104. package/src/index.ts +5 -0
  105. package/src/main.css +3 -0
  106. package/src/styles/main.css +3 -0
  107. package/src/utils/lazyLoad.ts +12 -0
  108. package/src/utils/logger.ts +98 -0
  109. package/src/utils/react-shim.js +8 -0
  110. package/tailwind.config.js +44 -0
  111. package/tsconfig.json +21 -0
@@ -0,0 +1,232 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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 { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
38
+ import { useEffect, useState, lazy, Suspense } from 'react';
39
+ import { useN1WalletContext, useN1WalletInternalContext, } from '../Provider/hooks';
40
+ import { createWebSession, getSessionKeysFromLocalStorage, getUser, } from '../Logic/utils';
41
+ import { getEd25519PublicKey, signEd25519, bs58Decode } from '@n1xyz/nts-sdk';
42
+ import { N1ModalViewMode } from '../Provider/types';
43
+ import { logger } from '../utils/logger';
44
+ import { WalletError, WalletErrorCode } from '../errors/types';
45
+ // Lazy load components
46
+ var ConnectView = lazy(function () {
47
+ return import('./ConnectView').then(function (mod) { return ({ default: mod.ConnectView }); });
48
+ });
49
+ var CreateSessionView = lazy(function () {
50
+ return import('./CreateSessionView').then(function (mod) { return ({
51
+ default: mod.CreateSessionView,
52
+ }); });
53
+ });
54
+ var SigningView = lazy(function () {
55
+ return import('./SigningView').then(function (mod) { return ({ default: mod.SigningView }); });
56
+ });
57
+ var CreateUserView = lazy(function () {
58
+ return import('./CreateUserView').then(function (mod) { return ({ default: mod.CreateUserView }); });
59
+ });
60
+ var SuccessView = lazy(function () {
61
+ return import('./SuccessView').then(function (mod) { return ({ default: mod.SuccessView }); });
62
+ });
63
+ var N1Sidebar = lazy(function () {
64
+ return import('./Sidebar/N1Sidebar').then(function (mod) { return ({ default: mod.N1Sidebar }); });
65
+ });
66
+ var NoWhitelistView = lazy(function () {
67
+ return import('./NoWhitelistView').then(function (mod) { return ({ default: mod.NoWhitelistView }); });
68
+ });
69
+ var LoadingFallback = function () { return (_jsx("div", { className: "flex items-center justify-center w-full h-full", children: _jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-white" }) })); };
70
+ export function N1WalletModal() {
71
+ var _this = this;
72
+ var _a = useN1WalletContext(), showLogin = _a.showLogin, setShowLogin = _a.setShowLogin, viewMode = _a.viewMode;
73
+ var _b = useN1WalletInternalContext(), setViewMode = _b.setViewMode, setUsername = _b.setUsername, setSessionPubKey = _b.setSessionPubKey, setSignMessageWithSessionKey = _b.setSignMessageWithSessionKey, setIsConnected = _b.setIsConnected, setWalletPubKey = _b.setWalletPubKey, setStartClosingLogin = _b.setStartClosingLogin, startClosingLogin = _b.startClosingLogin, setLoading = _b.setLoading, setAddress = _b.setAddress, dynamicWallet = _b.dynamicWallet, dynamicSdkHasLoaded = _b.dynamicSdkHasLoaded, darkMode = _b.darkMode, handleError = _b.handleError, showSidebar = _b.showSidebar;
74
+ var _c = useState(false), showLoginAnimation = _c[0], setShowLoginAnimation = _c[1];
75
+ // Handle loading state
76
+ useEffect(function () {
77
+ if (dynamicSdkHasLoaded || dynamicWallet) {
78
+ setLoading(false);
79
+ }
80
+ }, [dynamicSdkHasLoaded, dynamicWallet]);
81
+ // Initialize session when wallet is connected
82
+ useEffect(function () {
83
+ logger.debug('N1WalletModal attempt to call initializeSession...');
84
+ var initializeSession = function () { return __awaiter(_this, void 0, void 0, function () {
85
+ var response, whitelistData, walletPubKey, sessionData_1, sessionPubKey, signFn_1, user, storedUsername, username, error_1, error_2;
86
+ var _this = this;
87
+ return __generator(this, function (_a) {
88
+ switch (_a.label) {
89
+ case 0:
90
+ // If wallet is not connected, or not in connect mode, skip
91
+ if (!dynamicWallet || viewMode !== N1ModalViewMode.Connect) {
92
+ return [2 /*return*/];
93
+ }
94
+ _a.label = 1;
95
+ case 1:
96
+ _a.trys.push([1, 12, , 13]);
97
+ logger.debug('Initialize Session...');
98
+ if (!dynamicWallet) return [3 /*break*/, 4];
99
+ return [4 /*yield*/, fetch('https://argus-1g4n.onrender.com/api/db/verifyWhitelist', {
100
+ method: 'POST',
101
+ headers: {
102
+ 'Content-Type': 'application/json',
103
+ },
104
+ body: JSON.stringify({ address: dynamicWallet.address }),
105
+ })];
106
+ case 2:
107
+ response = _a.sent();
108
+ return [4 /*yield*/, response.json()];
109
+ case 3:
110
+ whitelistData = _a.sent();
111
+ if (!whitelistData.isWhitelisted) {
112
+ logger.info('Wallet not whitelisted');
113
+ setViewMode(N1ModalViewMode.NoWhitelist);
114
+ return [2 /*return*/];
115
+ }
116
+ _a.label = 4;
117
+ case 4:
118
+ logger.group('Session Initialization');
119
+ console.log('Session Initialization started');
120
+ _a.label = 5;
121
+ case 5:
122
+ _a.trys.push([5, 9, 10, 11]);
123
+ walletPubKey = dynamicWallet.chain === 'SOL'
124
+ ? bs58Decode(dynamicWallet.address)
125
+ : Uint8Array.from(Buffer.from(dynamicWallet.address.slice(2), 'hex'));
126
+ setWalletPubKey(walletPubKey);
127
+ sessionData_1 = getSessionKeysFromLocalStorage(dynamicWallet.address);
128
+ if (!sessionData_1) {
129
+ logger.info('No existing session found, transitioning to CreateSession');
130
+ setViewMode(N1ModalViewMode.CreateSession);
131
+ return [2 /*return*/];
132
+ }
133
+ logger.debug('Session time', sessionData_1.createdAt);
134
+ logger.debug('Session time', new Date(sessionData_1.createdAt).getTime());
135
+ logger.debug('Current time', Date.now());
136
+ if (new Date(sessionData_1.createdAt).getTime() <
137
+ Date.now() - 1000 * 60 * 60 * 24 * 30) {
138
+ logger.info('Session expired');
139
+ // TODO: create a welcome back view + allow them to logout
140
+ // Since we know the wallet already, we only need a new session key
141
+ setViewMode(N1ModalViewMode.CreateSession);
142
+ return [2 /*return*/];
143
+ }
144
+ return [4 /*yield*/, getEd25519PublicKey(sessionData_1.ed25519PrivateKey)];
145
+ case 6:
146
+ sessionPubKey = _a.sent();
147
+ logger.debug('Initializing with existing session key');
148
+ setSessionPubKey(sessionPubKey);
149
+ signFn_1 = function (message) { return __awaiter(_this, void 0, void 0, function () {
150
+ return __generator(this, function (_a) {
151
+ switch (_a.label) {
152
+ case 0:
153
+ console.log('zhoooooo');
154
+ console.log('signFn called', {
155
+ message: message,
156
+ stack: new Error().stack, // This will show the call stack
157
+ });
158
+ return [4 /*yield*/, signEd25519(message, sessionData_1.ed25519PrivateKey)];
159
+ case 1: return [2 /*return*/, _a.sent()];
160
+ }
161
+ });
162
+ }); };
163
+ console.log('zeeeeebrta');
164
+ setSignMessageWithSessionKey(function () { return signFn_1; });
165
+ setAddress(dynamicWallet.address);
166
+ // Create web session and get user data
167
+ return [4 /*yield*/, createWebSession(signFn_1, sessionPubKey, walletPubKey)];
168
+ case 7:
169
+ // Create web session and get user data
170
+ _a.sent();
171
+ return [4 /*yield*/, getUser()];
172
+ case 8:
173
+ user = _a.sent();
174
+ storedUsername = localStorage.getItem("n1_".concat(dynamicWallet.address, "_username"));
175
+ if ((user === null || user === void 0 ? void 0 : user.name) || storedUsername) {
176
+ logger.info('User found, completing login');
177
+ username = (user === null || user === void 0 ? void 0 : user.name) || storedUsername;
178
+ setIsConnected(true);
179
+ setUsername(username);
180
+ localStorage.setItem("n1_".concat(dynamicWallet.address, "_username"), username);
181
+ setStartClosingLogin(true);
182
+ }
183
+ else {
184
+ logger.info('No user found, transitioning to CreateUser');
185
+ setViewMode(N1ModalViewMode.CreatingUser);
186
+ }
187
+ return [3 /*break*/, 11];
188
+ case 9:
189
+ error_1 = _a.sent();
190
+ logger.error('Session initialization failed:', error_1);
191
+ handleError(new WalletError(WalletErrorCode.CONNECTION_FAILED, 'Failed to initialize session', { originalError: error_1 }));
192
+ return [3 /*break*/, 11];
193
+ case 10:
194
+ logger.groupEnd();
195
+ return [7 /*endfinally*/];
196
+ case 11: return [3 /*break*/, 13];
197
+ case 12:
198
+ error_2 = _a.sent();
199
+ logger.error('Whitelist check failed:', error_2);
200
+ handleError(new WalletError(WalletErrorCode.CONNECTION_FAILED, 'Failed to check whitelist', { originalError: error_2 }));
201
+ return [3 /*break*/, 13];
202
+ case 13: return [2 /*return*/];
203
+ }
204
+ });
205
+ }); };
206
+ initializeSession();
207
+ }, [dynamicWallet, dynamicSdkHasLoaded, viewMode]);
208
+ // Handle modal visibility
209
+ useEffect(function () {
210
+ if (showLogin) {
211
+ setStartClosingLogin(false);
212
+ setShowLoginAnimation(true);
213
+ }
214
+ }, [showLogin]);
215
+ useEffect(function () {
216
+ if (startClosingLogin) {
217
+ setShowLoginAnimation(false);
218
+ var timeout_1 = setTimeout(function () {
219
+ setShowLogin(false);
220
+ setStartClosingLogin(false);
221
+ }, 700);
222
+ return function () { return clearTimeout(timeout_1); };
223
+ }
224
+ }, [startClosingLogin, setShowLogin, setStartClosingLogin]);
225
+ if (!showLogin && !showSidebar)
226
+ return null;
227
+ console.log('SHOW', showSidebar);
228
+ return (_jsxs("div", { className: darkMode ? 'dark' : '', children: [showLogin && (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: _jsx("div", { className: "duration-500 ease-in-out font-monument w-screen h-screen fixed top-0 left-0 flex items-center justify-center z-100 ".concat(showLoginAnimation ? 'opacity-100' : 'opacity-0'), style: {
229
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
230
+ backdropFilter: 'blur(4px)',
231
+ }, children: _jsxs(Suspense, { fallback: _jsx(LoadingFallback, {}), children: [viewMode === N1ModalViewMode.Connect && _jsx(ConnectView, {}), viewMode === N1ModalViewMode.CreateSession && (_jsx(CreateSessionView, {})), viewMode === N1ModalViewMode.Signing && _jsx(SigningView, {}), viewMode === N1ModalViewMode.CreatingUser && _jsx(CreateUserView, {}), viewMode === N1ModalViewMode.Success && _jsx(SuccessView, {}), viewMode === N1ModalViewMode.NoWhitelist && _jsx(NoWhitelistView, {})] }) }) })), _jsx(Suspense, { fallback: _jsx(LoadingFallback, {}), children: _jsx(N1Sidebar, {}) })] }));
232
+ }
@@ -0,0 +1 @@
1
+ export declare function NoWhitelistView(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useN1WalletInternalContext, useN1WalletContext, } from '../Provider/hooks';
3
+ import { N1ModalViewMode } from '../Provider/types';
4
+ import { ModalHeader } from './ModalHeader';
5
+ export function NoWhitelistView() {
6
+ var _a = useN1WalletInternalContext(), setViewMode = _a.setViewMode, dynamicHandleLogOut = _a.dynamicHandleLogOut, setIsConnected = _a.setIsConnected;
7
+ var address = useN1WalletContext().address;
8
+ function disconnect() {
9
+ // TODO: create a util function for disconnecting and clearing local storage
10
+ dynamicHandleLogOut();
11
+ if (typeof window !== 'undefined') {
12
+ localStorage.clear();
13
+ if ('caches' in window) {
14
+ caches.keys().then(function (cacheNames) {
15
+ cacheNames.forEach(function (cacheName) {
16
+ caches.delete(cacheName);
17
+ });
18
+ });
19
+ }
20
+ window.location.reload();
21
+ }
22
+ setViewMode(N1ModalViewMode.Connect);
23
+ setIsConnected(false);
24
+ }
25
+ var addressText = address
26
+ ? "".concat(address.substring(0, 6), "...").concat(address.slice(-4))
27
+ : '';
28
+ return (_jsxs("div", { className: "rounded-[25px] shadow-lg w-96 p-5 bg-white dark:bg-neutral-900 text-neutral-900 dark:text-stone-200", children: [_jsx(ModalHeader, {}), _jsxs("div", { className: "mt-6 text-center", children: [_jsx("p", { className: "text-lg mb-4", children: "Sorry, your wallet is not whitelisted." }), _jsx("p", { className: "text-sm text-neutral-500 dark:text-neutral-400 mb-6", children: "N1 is currently available only for our early developer access program. Please reach out to us if you'd like to join." }), _jsx("button", { onClick: function () { return window.open('https://tally.so/r/wM8KRg', '_blank'); }, className: "w-full py-4 border rounded-[18px] cursor-pointer duration-300 hover:opacity-80 text-white bg-neutral-900 dark:bg-white dark:text-black mb-4", children: "Request Early Access" }), _jsxs("button", { onClick: disconnect, className: "w-full py-4 border rounded-[18px] cursor-pointer duration-300 hover:opacity-80 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 border-red-200 dark:border-red-800", children: ["Disconnect ", addressText] })] })] }));
29
+ }
@@ -0,0 +1 @@
1
+ export declare function N1Sidebar(_: any): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import BlockiesSvg from 'blockies-react-svg';
3
+ import { useEffect, useState } from 'react';
4
+ import { N1ModalViewMode } from '../../Provider/types';
5
+ import { useN1WalletContext, useN1WalletInternalContext, } from '../../Provider/hooks';
6
+ export function N1Sidebar(_) {
7
+ var _a = useState(false), closing = _a[0], setClosing = _a[1];
8
+ var _b = useN1WalletContext(), username = _b.username, isConnected = _b.isConnected, address = _b.address;
9
+ var _c = useN1WalletInternalContext(), setShowSidebar = _c.setShowSidebar, showSidebar = _c.showSidebar, setStartClosingLogin = _c.setStartClosingLogin, dynamicHandleLogOut = _c.dynamicHandleLogOut;
10
+ var addressText = isConnected && address.substring(0, 9) + '...' + address.slice(-3);
11
+ var _d = useN1WalletInternalContext(), setViewMode = _d.setViewMode, setIsConnected = _d.setIsConnected;
12
+ function disconnect() {
13
+ dynamicHandleLogOut();
14
+ setViewMode(N1ModalViewMode.Connect);
15
+ setIsConnected(false);
16
+ setClosing(true);
17
+ setStartClosingLogin(true);
18
+ }
19
+ useEffect(function () {
20
+ if (showSidebar) {
21
+ setClosing(false);
22
+ }
23
+ }, [showSidebar]);
24
+ useEffect(function () {
25
+ var timeout;
26
+ if (closing) {
27
+ timeout = setTimeout(function () {
28
+ setShowSidebar(false);
29
+ setClosing(false);
30
+ }, 700);
31
+ }
32
+ return function () { return clearTimeout(timeout); };
33
+ }, [closing, setShowSidebar]);
34
+ return (_jsxs("div", { className: 'fixed inset-0 bg-neutral-400/45 dark:bg-neutral-700/45 h-screen w-screen duration-500 ease-in-out z-[9999] flex items-center justify-end py-3 backdrop-blur-sm ' +
35
+ (!showSidebar && 'hidden pointer-events-none') +
36
+ (closing ? ' opacity-0' : ' opacity-100'), children: [showSidebar && (_jsx("div", { className: 'w-screen h-screen fixed top-0 left-0', onClick: function () { return setClosing(true); } })), showSidebar && (_jsx("div", { className: 'relative h-full py-6 pl-6 pr-8 bg-white dark:bg-neutral-900 shadow-xl border-2 border-neutral-200 dark:border-neutral-700 rounded-l-2xl rounded-b-2xl rounded-t-2xl duration-500 ease-in-out overflow-hidden ' +
37
+ (closing ? 'translate-x-full' : 'translate-x-0'), children: _jsxs("div", { className: 'flex flex-col', children: [_jsxs("div", { className: "flex w-full mb-4", children: [_jsx("div", { className: "w-16 h-16 bg-neutral-200 dark:bg-neutral-800 rounded-full flex items-center justify-center relative", children: _jsx("div", { className: "overflow-hidden rounded-full w-16 h-16", children: _jsx(BlockiesSvg, { address: address, className: "drop-shadow w-full h-full rounded-[20px]" }) }) }), _jsxs("div", { className: 'flex flex-col pl-3 py-2', children: [_jsx("div", { className: 'font-extrabold text-neutral-900 dark:text-stone-200', children: username }), _jsx("div", { className: 'font-extrabold text-neutral-400 dark:text-neutral-500', children: addressText })] })] }), _jsxs("div", { className: 'mt-4 rounded-2xl flex flex-col items-center justify-center h-24 w-full p-2 bg-red-50 dark:bg-red-900/20 hover:bg-red-100 dark:hover:bg-red-900/30 border-neutral-200 dark:border-neutral-700 border text-neutral-700 dark:text-neutral-300 cursor-pointer', onClick: disconnect, children: [_jsx("div", { className: 'bg-red-400 rounded-sm h-4 w-4 mb-2 rotate-45' }), _jsx("div", { className: 'font-bold', children: "Disconnect" }), _jsx("div", { className: 'text-xs', children: "Log out from the application" })] }), _jsxs("div", { className: 'justify-center w-full flex text-xs mt-8 mb-6 items-center', children: [_jsx("div", { className: 'h-0.5 bg-neutral-300 dark:bg-neutral-700 w-16 mx-2' }), _jsx("div", { className: 'text-neutral-600 dark:text-neutral-400 font-bold', children: "Other apps" }), _jsx("div", { className: 'h-0.5 bg-neutral-300 dark:bg-neutral-700 w-16 mx-2' })] }), _jsx("div", { className: 'flex flex-col gap-y-2', children: _jsx("div", { className: "cursor-pointer flex flex-col flex-shrink-0 mr-6 w-full h-48 bg-neutral-900 dark:bg-black rounded-xl overflow-hidden relative", children: _jsx("div", { className: 'absolute flex flex-row items-center justify-between bottom-0 w-full bg-gradient-to-t px-5 py-3 from-neutral-900 dark:from-black', children: _jsxs("div", { className: "flex flex-row gap-3 items-center", children: [_jsx("div", { className: "w-10 h-10 relative rounded-lg overflow-hidden" }), _jsxs("div", { className: "flex flex-col leading-none", children: [_jsx("div", { className: "text-white", children: "Nos" }), _jsx("div", { className: "text-neutral-200", children: "Perp Dex" })] })] }) }) }) })] }) }))] }));
38
+ }
@@ -0,0 +1 @@
1
+ export declare function SigningView(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ModalHeader } from './ModalHeader';
3
+ export function SigningView() {
4
+ return (_jsxs("div", { className: "rounded-[25px] shadow-lg w-96 p-5 bg-white dark:bg-neutral-900 text-neutral-900 dark:text-stone-200", children: [_jsx(ModalHeader, {}), _jsxs("div", { className: "flex flex-col items-center justify-center", children: [_jsx("div", { className: "animate-spin-slow w-16 h-16 border-4 rounded-full border-neutral-200 dark:border-neutral-700 border-t-neutral-900 dark:border-t-white" }), _jsx("p", { className: "text-sm mb-4 mt-6 text-neutral-500 dark:text-neutral-400", children: "Please sign the message to authenticate" })] })] }));
5
+ }
@@ -0,0 +1 @@
1
+ export declare function SuccessView(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ModalHeader } from './ModalHeader';
3
+ import { useN1WalletInternalContext } from '../Provider/hooks';
4
+ export function SuccessView() {
5
+ var _a = useN1WalletInternalContext(), setViewMode = _a.setViewMode, setStartClosingLogin = _a.setStartClosingLogin;
6
+ var close = function () {
7
+ setStartClosingLogin(true);
8
+ };
9
+ return (_jsxs("div", { className: "rounded-[25px] shadow-lg w-96 p-5 bg-white dark:bg-neutral-900 text-neutral-900 dark:text-stone-200", children: [_jsx(ModalHeader, {}), _jsx("div", { className: 'rounded-[25px] overflow-hidden mb-4', children: _jsx("img", { src: 'https://cdn.midjourney.com/17b152e3-2c93-4d00-b4cc-860d787a4994/0_2.png', className: 'w-full' }) }), _jsx("div", { className: "my-2", children: _jsx("div", { className: "space-y-2", children: _jsx("button", { className: "w-full py-4 border rounded-[18px] cursor-pointer duration-300 hover:opacity-80 text-white bg-neutral-900 dark:bg-white dark:text-neutral-900", onClick: close, children: "Success! Continue" }) }) })] }));
10
+ }
@@ -0,0 +1 @@
1
+ export declare function LazyWalletProvider({ children }: any): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,160 @@
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
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
49
+ import { useEffect, useState, useRef } from 'react';
50
+ import { useN1WalletInternalContext } from './hooks';
51
+ import { logger } from '../utils/logger';
52
+ var getSettings = function (darkMode) { return ({
53
+ initialAuthenticationMode: 'connect-only',
54
+ environmentId: '9a47561c-6a0b-4a5b-ace1-12621c11cebd',
55
+ theme: {
56
+ mode: darkMode ? 'dark' : 'light',
57
+ },
58
+ events: {
59
+ onAuthSuccess: function (args) {
60
+ console.log('onAuthSuccess was called', args);
61
+ },
62
+ },
63
+ }); };
64
+ function DynamicContextConsumer(_a) {
65
+ var children = _a.children;
66
+ var _b = useN1WalletInternalContext(), setDynamicWallet = _b.setDynamicWallet, setAddress = _b.setAddress, setDynamicSdkHasLoaded = _b.setDynamicSdkHasLoaded, setShowDynamicWidget = _b.setShowDynamicWidget, darkMode = _b.darkMode, setDynamicHandleLogOut = _b.setDynamicHandleLogOut;
67
+ var _c = useState(null), DynamicContext = _c[0], setDynamicContext = _c[1];
68
+ var showAuthFlowRef = useRef(null);
69
+ useEffect(function () {
70
+ import('@dynamic-labs/sdk-react-core').then(function (_a) {
71
+ var useDynamicContext = _a.useDynamicContext;
72
+ setDynamicContext(function () { return useDynamicContext; });
73
+ });
74
+ }, []);
75
+ // Set up a stable widget function that uses the ref
76
+ useEffect(function () {
77
+ setShowDynamicWidget(function () { return function (show) {
78
+ if (showAuthFlowRef.current) {
79
+ showAuthFlowRef.current(show);
80
+ }
81
+ }; });
82
+ }, [setShowDynamicWidget]);
83
+ if (!DynamicContext) {
84
+ return _jsx(_Fragment, { children: children });
85
+ }
86
+ var DynamicComponent = function () {
87
+ var _a = DynamicContext(), primaryWallet = _a.primaryWallet, sdkHasLoaded = _a.sdkHasLoaded, setShowAuthFlow = _a.setShowAuthFlow, handleLogOut = _a.handleLogOut;
88
+ // Store setShowAuthFlow in ref to avoid re-renders
89
+ useEffect(function () {
90
+ showAuthFlowRef.current = setShowAuthFlow;
91
+ }, [setShowAuthFlow]);
92
+ useEffect(function () {
93
+ if (primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address) {
94
+ logger.debug('Primary wallet found');
95
+ setDynamicWallet(primaryWallet);
96
+ setAddress(primaryWallet.address);
97
+ }
98
+ else {
99
+ logger.debug('No primary wallet found');
100
+ setDynamicWallet(null);
101
+ setAddress('');
102
+ }
103
+ }, [primaryWallet]);
104
+ useEffect(function () {
105
+ if (sdkHasLoaded) {
106
+ setDynamicSdkHasLoaded(true);
107
+ }
108
+ }, [sdkHasLoaded]);
109
+ // Set the logout handler
110
+ useEffect(function () {
111
+ if (handleLogOut) {
112
+ setDynamicHandleLogOut(function () { return handleLogOut; });
113
+ }
114
+ }, [handleLogOut]);
115
+ return _jsx(_Fragment, { children: children });
116
+ };
117
+ return _jsx(DynamicComponent, {});
118
+ }
119
+ function LazyInternal(props) {
120
+ var _this = this;
121
+ var _a = useState(null), Provider = _a[0], setProvider = _a[1];
122
+ var _b = useState([]), walletConnectors = _b[0], setWalletConnectors = _b[1];
123
+ var darkMode = useN1WalletInternalContext().darkMode;
124
+ useEffect(function () {
125
+ var loadDynamicDeps = function () { return __awaiter(_this, void 0, void 0, function () {
126
+ var _a, DynamicContextProvider_1, EthereumWalletConnectors, SolanaWalletConnectors, error_1;
127
+ return __generator(this, function (_b) {
128
+ switch (_b.label) {
129
+ case 0:
130
+ _b.trys.push([0, 2, , 3]);
131
+ return [4 /*yield*/, Promise.all([
132
+ import('@dynamic-labs/sdk-react-core'),
133
+ import('@dynamic-labs/ethereum'),
134
+ import('@dynamic-labs/solana'),
135
+ ])];
136
+ case 1:
137
+ _a = _b.sent(), DynamicContextProvider_1 = _a[0].DynamicContextProvider, EthereumWalletConnectors = _a[1].EthereumWalletConnectors, SolanaWalletConnectors = _a[2].SolanaWalletConnectors;
138
+ setProvider(function () { return DynamicContextProvider_1; });
139
+ setWalletConnectors([EthereumWalletConnectors, SolanaWalletConnectors]);
140
+ return [3 /*break*/, 3];
141
+ case 2:
142
+ error_1 = _b.sent();
143
+ console.error('Failed to load Dynamic dependencies:', error_1);
144
+ return [3 /*break*/, 3];
145
+ case 3: return [2 /*return*/];
146
+ }
147
+ });
148
+ }); };
149
+ loadDynamicDeps();
150
+ }, []);
151
+ if (!Provider || walletConnectors.length === 0) {
152
+ return null;
153
+ }
154
+ var dynamicSettings = __assign(__assign({}, getSettings(darkMode)), { walletConnectors: walletConnectors });
155
+ return (_jsx(Provider, { settings: dynamicSettings, children: _jsx(DynamicContextConsumer, { children: props.children }) }));
156
+ }
157
+ export function LazyWalletProvider(_a) {
158
+ var children = _a.children;
159
+ return _jsx(LazyInternal, { children: children });
160
+ }
@@ -0,0 +1,2 @@
1
+ import { N1WalletProviderProps } from './types';
2
+ export declare function N1WalletProvider({ children, providedSessionMode, appId, darkMode, onError, }: N1WalletProviderProps): import("react/jsx-runtime").JSX.Element;