@n1xyz/wallet-widget 0.0.9 → 0.0.11
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/LoadingFallback.js +1 -1
- package/dist/Modal/LoadingFallback.js.map +1 -1
- package/dist/Modal/NTSFlow/LoadingFallback.js +1 -1
- package/dist/Modal/NTSFlow/LoadingFallback.js.map +1 -1
- package/dist/Modal/NTSFlow/components/BackButton.js +2 -2
- package/dist/Modal/NTSFlow/components/BackButton.js.map +1 -1
- package/dist/Modal/NTSFlow/components/ModalHeader.js +1 -1
- package/dist/Modal/NTSFlow/components/ModalHeader.js.map +1 -1
- package/dist/Modal/NTSFlow/views/ConnectView.js +2 -2
- package/dist/Modal/NTSFlow/views/ConnectView.js.map +1 -1
- package/dist/Modal/NTSFlow/views/CreateSessionView.js +5 -5
- package/dist/Modal/NTSFlow/views/CreateSessionView.js.map +1 -1
- package/dist/Modal/NTSFlow/views/CreateUserView.js +1 -1
- package/dist/Modal/NTSFlow/views/CreateUserView.js.map +1 -1
- package/dist/Modal/NTSFlow/views/NoWhitelistView.js +3 -3
- package/dist/Modal/NTSFlow/views/NoWhitelistView.js.map +1 -1
- package/dist/Modal/NTSFlow/views/SigningView.js +1 -1
- package/dist/Modal/NTSFlow/views/SigningView.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/ChainButton.js +5 -5
- package/dist/Modal/NordFlow/components/ChainButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/EVMChainsButton.js +4 -4
- package/dist/Modal/NordFlow/components/EVMChainsButton.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/ImageWithFallback.js +1 -1
- package/dist/Modal/NordFlow/components/ImageWithFallback.js.map +1 -1
- package/dist/Modal/NordFlow/components/LoadingSquares.js +1 -1
- package/dist/Modal/NordFlow/components/LoadingSquares.js.map +1 -1
- package/dist/Modal/NordFlow/components/MoreButton.js +4 -4
- package/dist/Modal/NordFlow/components/MoreButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/TransactionTable.js +7 -10
- package/dist/Modal/NordFlow/components/TransactionTable.js.map +1 -1
- package/dist/Modal/NordFlow/components/WaitingMessage.js +1 -1
- package/dist/Modal/NordFlow/components/WaitingMessage.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 +12 -6
- 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 +13 -16
- 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 +11 -9
- 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 +9 -4
- 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 +18 -7
- 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 +15 -121
- 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 +10 -5
- 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/Modal/Sidebar/N1Sidebar.js +10 -10
- package/dist/Modal/Sidebar/N1Sidebar.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/MarketOverview/MarketSelector.js +5 -5
- package/dist/Modal/Sidebar/NordTradingView/MarketOverview/MarketSelector.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/MarketOverview/MarketStats.js +3 -3
- package/dist/Modal/Sidebar/NordTradingView/MarketOverview/MarketStats.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/NordTradingView.js +2 -2
- package/dist/Modal/Sidebar/NordTradingView/NordTradingView.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBook.js +2 -2
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBook.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookDepthVisualizer.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookDepthVisualizer.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookHeader.js +4 -4
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookHeader.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookTable.js +6 -6
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookTable.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/AmountInput.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/AmountInput.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/BuySellTabs.js +3 -3
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/BuySellTabs.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/FillModeSelector.js +7 -7
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/FillModeSelector.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/OrderTypeSelector.js +13 -13
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/OrderTypeSelector.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/PriceInput.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/PriceInput.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/SubmitButton.js +2 -2
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/SubmitButton.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/TotalCalculator.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/TotalCalculator.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/TradeForm.js +5 -5
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/TradeForm.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/UserBalances/UserBalances.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/UserBalances/UserBalances.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/UserOrders/UserOrders.js +5 -5
- package/dist/Modal/Sidebar/NordTradingView/UserOrders/UserOrders.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/UserPositions/UserPositions.js +4 -4
- package/dist/Modal/Sidebar/NordTradingView/UserPositions/UserPositions.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/types.d.ts +2 -0
- package/dist/Provider/types.js.map +1 -1
- 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/components/QRCodeLoader.js +1 -1
- package/dist/components/QRCodeLoader.js.map +1 -1
- package/dist/components/logos/EVMChainsGroup.js +1 -1
- package/dist/components/logos/EVMChainsGroup.js.map +1 -1
- package/dist/components/logos/MoreChainsGroup.js +1 -1
- package/dist/components/logos/MoreChainsGroup.js.map +1 -1
- package/dist/main.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserOrders.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/UserOrders/UserOrders.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RefreshCw, X } from 'lucide-react';\nimport { useEffect, useState, useRef } from 'react';\nimport { useN1WalletContext } from '../../../../Provider/hooks';\nimport { logger } from '../../../../utils/logger';\n\ninterface Order {\n orderId: number;\n marketId: number;\n symbol: string;\n isLong: boolean;\n size: number;\n price: number;\n status: 'OPEN' | 'FILLED' | 'CANCELLED' | 'EXPIRED';\n createdAt: number;\n}\n\nexport default function UserOrders() {\n const { nord, nordUser } = useN1WalletContext();\n const [activeOrders, setActiveOrders] = useState<Order[]>([]);\n const [orderHistory, setOrderHistory] = useState<Order[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [cancellingOrderId, setCancellingOrderId] = useState<number | null>(\n null\n );\n const [compactView, setCompactView] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Fetch user orders\n useEffect(() => {\n if (!nordUser) return;\n\n const fetchOrders = async () => {\n setLoading(true);\n setError(null);\n\n try {\n // Refresh user info to get latest orders\n await nordUser.fetchInfo();\n\n // Process orders from all accounts\n const allOrders: Order[] = [];\n\n // This is a simplified approach - in a real implementation, you would\n // properly extract and format orders from the nordUser object\n logger.debug(nord?.markets, nordUser.orders);\n Object.values(nordUser.orders || {}).forEach((accountOrders: any) => {\n if (Array.isArray(accountOrders)) {\n accountOrders.forEach((order: any) => {\n // Get market name from nord object\n const market = nord?.markets?.find(\n (m: any) => m.marketId === order.marketId\n );\n const marketName = market?.symbol || `Unknown Market`;\n\n // Convert to our Order interface format\n const formattedOrder: Order = {\n orderId: order.orderId,\n marketId: order.marketId,\n symbol: marketName,\n isLong: order.isLong,\n size: order.size,\n price: order.price,\n status: order.status || 'OPEN',\n createdAt: order.createdAt || Date.now(),\n };\n allOrders.push(formattedOrder);\n });\n }\n });\n\n // Split into active and historical orders\n setActiveOrders(allOrders.filter((order) => order.status === 'OPEN'));\n setOrderHistory(allOrders.filter((order) => order.status !== 'OPEN'));\n } catch (err) {\n logger.error('Error fetching orders:', err);\n setError('Failed to load orders');\n } finally {\n setLoading(false);\n }\n };\n\n fetchOrders();\n\n // Set up polling for order updates\n const intervalId = setInterval(fetchOrders, 10000); // Update every 10 seconds\n\n return () => clearInterval(intervalId);\n }, [nordUser, nord]);\n\n // Check container width and update layout\n useEffect(() => {\n if (!containerRef.current) return;\n\n const checkWidth = () => {\n if (containerRef.current) {\n setCompactView(containerRef.current.offsetWidth < 400);\n }\n };\n\n // Initial check\n checkWidth();\n\n // Set up resize observer\n const resizeObserver = new ResizeObserver(checkWidth);\n resizeObserver.observe(containerRef.current);\n\n return () => {\n if (containerRef.current) {\n resizeObserver.unobserve(containerRef.current);\n }\n };\n }, []);\n\n // Handle order cancellation\n const handleCancelOrder = async (orderId: number) => {\n if (!nordUser) return;\n\n try {\n setCancellingOrderId(orderId); // Set the cancelling order ID to show animation\n await nordUser.cancelOrder(orderId);\n // Refresh orders after cancellation\n await nordUser.fetchInfo();\n // Update state (simplified - would be better to wait for the fetchOrders to run)\n setActiveOrders(\n activeOrders.filter((order) => order.orderId !== orderId)\n );\n } catch (err) {\n logger.error('Error cancelling order:', err);\n setError('Failed to cancel order');\n } finally {\n setCancellingOrderId(null); // Reset cancelling order ID\n }\n };\n\n return (\n <div className=\"bg-white dark:bg-gray-950 shadow-sm border border-gray-200 dark:border-gray-800 overflow-hidden\">\n <div className=\"p-4\">\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100 mb-4\">\n Orders\n </h2>\n\n {/* Order list */}\n <div className=\"overflow-hidden\" ref={containerRef}>\n {loading && activeOrders.length === 0 && orderHistory.length === 0 ? (\n <div className=\"flex items-center justify-center h-32\">\n <RefreshCw size={20} className=\"text-gray-400 animate-spin\" />\n </div>\n ) : error ? (\n <div className=\"p-3 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 text-sm\">\n {error}\n </div>\n ) : activeOrders.length === 0 ? (\n <div className=\"p-3 bg-gray-50 dark:bg-gray-800 text-gray-500 dark:text-gray-400 text-sm text-center\">\n No active orders\n </div>\n ) : !compactView ? (\n // Standard table view for larger containers\n <div className=\"overflow-x-auto\">\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-800\">\n <thead className=\"bg-gray-50 dark:bg-gray-800\">\n <tr>\n <th className=\"px-3 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider\">\n Market\n </th>\n <th className=\"px-3 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider\">\n Side\n </th>\n <th className=\"px-3 py-2 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider\">\n Size\n </th>\n <th className=\"px-3 py-2 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider\">\n Price\n </th>\n <th className=\"px-3 py-2 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider\">\n Action\n </th>\n </tr>\n </thead>\n <tbody className=\"bg-white dark:bg-gray-950 divide-y divide-gray-200 dark:divide-gray-800\">\n {activeOrders.map((order) => (\n <tr\n key={order.orderId}\n className=\"hover:bg-gray-50 dark:hover:bg-gray-800\"\n >\n <td className=\"px-3 py-2 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100\">\n {order.symbol}\n </td>\n <td className=\"px-3 py-2 whitespace-nowrap text-sm\">\n <span\n className={`font-medium ${order.isLong ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400'}`}\n >\n {order.isLong ? 'BUY' : 'SELL'}\n </span>\n </td>\n <td className=\"px-3 py-2 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100 text-right font-mono\">\n {order.size}\n </td>\n <td className=\"px-3 py-2 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100 text-right font-mono\">\n {order.price}\n </td>\n <td className=\"px-3 py-2 whitespace-nowrap text-sm text-right\">\n <button\n onClick={() => handleCancelOrder(order.orderId)}\n disabled={cancellingOrderId === order.orderId}\n className={`text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300 relative ${\n cancellingOrderId === order.orderId\n ? 'cursor-not-allowed'\n : ''\n }`}\n >\n {cancellingOrderId === order.orderId ? (\n <>\n <span className=\"opacity-0\">Cancel</span>\n <X\n size={16}\n className=\"absolute inset-0 m-auto animate-pulse text-red-500\"\n />\n </>\n ) : (\n 'Cancel'\n )}\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n // Compact card view for smaller containers\n <div className=\"grid gap-2\">\n {activeOrders.map((order) => (\n <div\n key={order.orderId}\n className=\"bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded p-2 hover:bg-gray-50 dark:hover:bg-gray-800\"\n >\n <div className=\"flex justify-between items-start mb-1\">\n <div className=\"font-medium text-sm text-gray-900 dark:text-gray-100\">\n {order.symbol}\n </div>\n <button\n onClick={() => handleCancelOrder(order.orderId)}\n disabled={cancellingOrderId === order.orderId}\n className={`text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300 text-xs relative ${\n cancellingOrderId === order.orderId\n ? 'cursor-not-allowed'\n : ''\n }`}\n >\n {cancellingOrderId === order.orderId ? (\n <>\n <span className=\"opacity-0\">Cancel</span>\n <X\n size={14}\n className=\"absolute inset-0 m-auto animate-pulse text-red-500\"\n />\n </>\n ) : (\n 'Cancel'\n )}\n </button>\n </div>\n <div className=\"grid grid-cols-3 gap-1 text-xs\">\n <div>\n <span\n className={`font-medium ${order.isLong ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400'}`}\n >\n {order.isLong ? 'BUY' : 'SELL'}\n </span>\n </div>\n <div className=\"text-right font-mono text-gray-700 dark:text-gray-300\">\n {order.size}\n </div>\n <div className=\"text-right font-mono text-gray-700 dark:text-gray-300\">\n {order.price}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Loading indicator for refreshing */}\n {loading && (activeOrders.length > 0 || orderHistory.length > 0) && (\n <div className=\"flex justify-center mt-2\">\n <RefreshCw size={16} className=\"text-gray-400 animate-spin\" />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"UserOrders.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/UserOrders/UserOrders.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RefreshCw, X } from 'lucide-react';\nimport { useEffect, useState, useRef } from 'react';\nimport { useN1WalletContext } from '../../../../Provider/hooks';\nimport { logger } from '../../../../utils/logger';\n\ninterface Order {\n orderId: number;\n marketId: number;\n symbol: string;\n isLong: boolean;\n size: number;\n price: number;\n status: 'OPEN' | 'FILLED' | 'CANCELLED' | 'EXPIRED';\n createdAt: number;\n}\n\nexport default function UserOrders() {\n const { nord, nordUser } = useN1WalletContext();\n const [activeOrders, setActiveOrders] = useState<Order[]>([]);\n const [orderHistory, setOrderHistory] = useState<Order[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [cancellingOrderId, setCancellingOrderId] = useState<number | null>(\n null\n );\n const [compactView, setCompactView] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Fetch user orders\n useEffect(() => {\n if (!nordUser) return;\n\n const fetchOrders = async () => {\n setLoading(true);\n setError(null);\n\n try {\n // Refresh user info to get latest orders\n await nordUser.fetchInfo();\n\n // Process orders from all accounts\n const allOrders: Order[] = [];\n\n // This is a simplified approach - in a real implementation, you would\n // properly extract and format orders from the nordUser object\n logger.debug(nord?.markets, nordUser.orders);\n Object.values(nordUser.orders || {}).forEach((accountOrders: any) => {\n if (Array.isArray(accountOrders)) {\n accountOrders.forEach((order: any) => {\n // Get market name from nord object\n const market = nord?.markets?.find(\n (m: any) => m.marketId === order.marketId\n );\n const marketName = market?.symbol || `Unknown Market`;\n\n // Convert to our Order interface format\n const formattedOrder: Order = {\n orderId: order.orderId,\n marketId: order.marketId,\n symbol: marketName,\n isLong: order.isLong,\n size: order.size,\n price: order.price,\n status: order.status || 'OPEN',\n createdAt: order.createdAt || Date.now(),\n };\n allOrders.push(formattedOrder);\n });\n }\n });\n\n // Split into active and historical orders\n setActiveOrders(allOrders.filter((order) => order.status === 'OPEN'));\n setOrderHistory(allOrders.filter((order) => order.status !== 'OPEN'));\n } catch (err) {\n logger.error('Error fetching orders:', err);\n setError('Failed to load orders');\n } finally {\n setLoading(false);\n }\n };\n\n fetchOrders();\n\n // Set up polling for order updates\n const intervalId = setInterval(fetchOrders, 10000); // Update every 10 seconds\n\n return () => clearInterval(intervalId);\n }, [nordUser, nord]);\n\n // Check container width and update layout\n useEffect(() => {\n if (!containerRef.current) return;\n\n const checkWidth = () => {\n if (containerRef.current) {\n setCompactView(containerRef.current.offsetWidth < 400);\n }\n };\n\n // Initial check\n checkWidth();\n\n // Set up resize observer\n const resizeObserver = new ResizeObserver(checkWidth);\n resizeObserver.observe(containerRef.current);\n\n return () => {\n if (containerRef.current) {\n resizeObserver.unobserve(containerRef.current);\n }\n };\n }, []);\n\n // Handle order cancellation\n const handleCancelOrder = async (orderId: number) => {\n if (!nordUser) return;\n\n try {\n setCancellingOrderId(orderId); // Set the cancelling order ID to show animation\n await nordUser.cancelOrder(orderId);\n // Refresh orders after cancellation\n await nordUser.fetchInfo();\n // Update state (simplified - would be better to wait for the fetchOrders to run)\n setActiveOrders(\n activeOrders.filter((order) => order.orderId !== orderId)\n );\n } catch (err) {\n logger.error('Error cancelling order:', err);\n setError('Failed to cancel order');\n } finally {\n setCancellingOrderId(null); // Reset cancelling order ID\n }\n };\n\n return (\n <div className=\"bg-white dark:bg-n1-gray-950 shadow-sm border border-n1-gray-200 dark:border-n1-gray-800 overflow-hidden\">\n <div className=\"p-4\">\n <h2 className=\"text-lg font-semibold text-n1-gray-900 dark:text-n1-gray-100 mb-4\">\n Orders\n </h2>\n\n {/* Order list */}\n <div className=\"overflow-hidden\" ref={containerRef}>\n {loading && activeOrders.length === 0 && orderHistory.length === 0 ? (\n <div className=\"flex items-center justify-center h-32\">\n <RefreshCw size={20} className=\"text-n1-gray-400 n1-animate-spin\" />\n </div>\n ) : error ? (\n <div className=\"p-3 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 text-sm\">\n {error}\n </div>\n ) : activeOrders.length === 0 ? (\n <div className=\"p-3 bg-n1-gray-50 dark:bg-n1-gray-800 text-n1-gray-500 dark:text-n1-gray-400 text-sm text-center\">\n No active orders\n </div>\n ) : !compactView ? (\n // Standard table view for larger containers\n <div className=\"overflow-x-auto\">\n <table className=\"min-w-full divide-y divide-n1-gray-200 dark:divide-n1-gray-800\">\n <thead className=\"bg-n1-gray-50 dark:bg-n1-gray-800\">\n <tr>\n <th className=\"px-3 py-2 text-left text-xs font-medium text-n1-gray-500 dark:text-n1-gray-400 uppercase tracking-wider\">\n Market\n </th>\n <th className=\"px-3 py-2 text-left text-xs font-medium text-n1-gray-500 dark:text-n1-gray-400 uppercase tracking-wider\">\n Side\n </th>\n <th className=\"px-3 py-2 text-right text-xs font-medium text-n1-gray-500 dark:text-n1-gray-400 uppercase tracking-wider\">\n Size\n </th>\n <th className=\"px-3 py-2 text-right text-xs font-medium text-n1-gray-500 dark:text-n1-gray-400 uppercase tracking-wider\">\n Price\n </th>\n <th className=\"px-3 py-2 text-right text-xs font-medium text-n1-gray-500 dark:text-n1-gray-400 uppercase tracking-wider\">\n Action\n </th>\n </tr>\n </thead>\n <tbody className=\"bg-white dark:bg-n1-gray-950 divide-y divide-n1-gray-200 dark:divide-n1-gray-800\">\n {activeOrders.map((order) => (\n <tr\n key={order.orderId}\n className=\"hover:bg-n1-gray-50 dark:hover:bg-n1-gray-800\"\n >\n <td className=\"px-3 py-2 whitespace-nowrap text-sm text-n1-gray-900 dark:text-n1-gray-100\">\n {order.symbol}\n </td>\n <td className=\"px-3 py-2 whitespace-nowrap text-sm\">\n <span\n className={`font-medium ${order.isLong ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400'}`}\n >\n {order.isLong ? 'BUY' : 'SELL'}\n </span>\n </td>\n <td className=\"px-3 py-2 whitespace-nowrap text-sm text-n1-gray-900 dark:text-n1-gray-100 text-right font-mono\">\n {order.size}\n </td>\n <td className=\"px-3 py-2 whitespace-nowrap text-sm text-n1-gray-900 dark:text-n1-gray-100 text-right font-mono\">\n {order.price}\n </td>\n <td className=\"px-3 py-2 whitespace-nowrap text-sm text-right\">\n <button\n onClick={() => handleCancelOrder(order.orderId)}\n disabled={cancellingOrderId === order.orderId}\n className={`text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300 relative ${\n cancellingOrderId === order.orderId\n ? 'cursor-not-allowed'\n : ''\n }`}\n >\n {cancellingOrderId === order.orderId ? (\n <>\n <span className=\"opacity-0\">Cancel</span>\n <X\n size={16}\n className=\"absolute inset-0 m-auto n1-animate-pulse text-red-500\"\n />\n </>\n ) : (\n 'Cancel'\n )}\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n // Compact card view for smaller containers\n <div className=\"grid gap-2\">\n {activeOrders.map((order) => (\n <div\n key={order.orderId}\n className=\"bg-white dark:bg-n1-gray-900 border border-n1-gray-200 dark:border-n1-gray-800 rounded p-2 hover:bg-n1-gray-50 dark:hover:bg-n1-gray-800\"\n >\n <div className=\"flex justify-between items-start mb-1\">\n <div className=\"font-medium text-sm text-n1-gray-900 dark:text-n1-gray-100\">\n {order.symbol}\n </div>\n <button\n onClick={() => handleCancelOrder(order.orderId)}\n disabled={cancellingOrderId === order.orderId}\n className={`text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300 text-xs relative ${\n cancellingOrderId === order.orderId\n ? 'cursor-not-allowed'\n : ''\n }`}\n >\n {cancellingOrderId === order.orderId ? (\n <>\n <span className=\"opacity-0\">Cancel</span>\n <X\n size={14}\n className=\"absolute inset-0 m-auto n1-animate-pulse text-red-500\"\n />\n </>\n ) : (\n 'Cancel'\n )}\n </button>\n </div>\n <div className=\"grid grid-cols-3 gap-1 text-xs\">\n <div>\n <span\n className={`font-medium ${order.isLong ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400'}`}\n >\n {order.isLong ? 'BUY' : 'SELL'}\n </span>\n </div>\n <div className=\"text-right font-mono text-n1-gray-700 dark:text-n1-gray-300\">\n {order.size}\n </div>\n <div className=\"text-right font-mono text-n1-gray-700 dark:text-n1-gray-300\">\n {order.price}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Loading indicator for refreshing */}\n {loading && (activeOrders.length > 0 || orderHistory.length > 0) && (\n <div className=\"flex justify-center mt-2\">\n <RefreshCw size={16} className=\"text-n1-gray-400 n1-animate-spin\" />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -185,12 +185,12 @@ export default function UserPositions() {
|
|
|
185
185
|
}
|
|
186
186
|
});
|
|
187
187
|
}); };
|
|
188
|
-
return (_jsx("div", { className: "bg-white dark:bg-gray-950 overflow-hidden", children: _jsxs("div", { className: "p-4", children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100 mb-4", children: "Positions" }), loading && positions.length === 0 ? (_jsx("div", { className: "flex items-center justify-center h-32", children: _jsx(RefreshCw, { size: 20, className: "text-gray-400 animate-spin" }) })) : error ? (_jsx("div", { className: "p-3 bg-red-50 dark:bg-red-900/20 rounded-lg text-red-600 dark:text-red-400 text-sm", children: error })) : positions.length === 0 ? (_jsx("div", { className: "p-3 bg-gray-50 dark:bg-gray-950 rounded-lg text-gray-500 dark:text-gray-400 text-sm text-center", children: "No open positions" })) : (_jsxs("div", { className: "space-y-3", children: [positions.map(function (position, index) { return (_jsxs("div", { className: "p-3 bg-gray-50 dark:bg-gray-950 rounded-lg", children: [_jsx("div", { className: "flex items-center justify-between mb-2", children: _jsxs("div", { className: "flex items-center", children: [_jsx("span", { className: "font-medium text-gray-900 dark:text-gray-100 mr-2", children: position.symbol }), _jsxs("span", { className: "text-xs px-2 py-0.5 rounded ".concat(position.size > 0
|
|
188
|
+
return (_jsx("div", { className: "bg-white dark:bg-n1-gray-950 overflow-hidden", children: _jsxs("div", { className: "p-4", children: [_jsx("h2", { className: "text-lg font-semibold text-n1-gray-900 dark:text-n1-gray-100 mb-4", children: "Positions" }), loading && positions.length === 0 ? (_jsx("div", { className: "flex items-center justify-center h-32", children: _jsx(RefreshCw, { size: 20, className: "text-n1-gray-400 n1-animate-spin" }) })) : error ? (_jsx("div", { className: "p-3 bg-red-50 dark:bg-red-900/20 rounded-lg text-red-600 dark:text-red-400 text-sm", children: error })) : positions.length === 0 ? (_jsx("div", { className: "p-3 bg-n1-gray-50 dark:bg-n1-gray-950 rounded-lg text-n1-gray-500 dark:text-n1-gray-400 text-sm text-center", children: "No open positions" })) : (_jsxs("div", { className: "space-y-3", children: [positions.map(function (position, index) { return (_jsxs("div", { className: "p-3 bg-n1-gray-50 dark:bg-n1-gray-950 rounded-lg", children: [_jsx("div", { className: "flex items-center justify-between mb-2", children: _jsxs("div", { className: "flex items-center", children: [_jsx("span", { className: "font-medium text-n1-gray-900 dark:text-n1-gray-100 mr-2", children: position.symbol }), _jsxs("span", { className: "text-xs px-2 py-0.5 rounded ".concat(position.size > 0
|
|
189
189
|
? 'bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400'
|
|
190
|
-
: 'bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400'), children: [position.size > 0 ? 'Long' : 'Short', ' ', Math.abs(position.size)] })] }) }), _jsxs("div", { className: "grid grid-cols-2 gap-2 text-sm", children: [_jsxs("div", { children: [_jsx("div", { className: "text-gray-500 dark:text-gray-400", children: "Entry Price" }), _jsx("div", { className: "font-medium text-gray-900 dark:text-gray-100 font-mono", children: position.entryPrice.toFixed(2) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-gray-500 dark:text-gray-400", children: "Mark Price" }), _jsx("div", { className: "font-medium text-gray-900 dark:text-gray-100 font-mono", children: position.markPrice.toFixed(2) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-gray-500 dark:text-gray-400", children: "PnL" }), _jsxs("div", { className: "font-medium font-mono ".concat(position.pnl >= 0
|
|
190
|
+
: 'bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400'), children: [position.size > 0 ? 'Long' : 'Short', ' ', Math.abs(position.size)] })] }) }), _jsxs("div", { className: "grid grid-cols-2 gap-2 text-sm", children: [_jsxs("div", { children: [_jsx("div", { className: "text-n1-gray-500 dark:text-n1-gray-400", children: "Entry Price" }), _jsx("div", { className: "font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono", children: position.entryPrice.toFixed(2) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-n1-gray-500 dark:text-n1-gray-400", children: "Mark Price" }), _jsx("div", { className: "font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono", children: position.markPrice.toFixed(2) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-n1-gray-500 dark:text-n1-gray-400", children: "PnL" }), _jsxs("div", { className: "font-medium font-mono ".concat(position.pnl >= 0
|
|
191
191
|
? 'text-green-600 dark:text-green-400'
|
|
192
|
-
: 'text-red-600 dark:text-red-400'), children: [position.pnl >= 0 ? '+' : '', position.pnl.toFixed(2), " (", position.pnlPercentage.toFixed(2), "%)"] })] }), _jsxs("div", { children: [_jsx("div", { className: "text-gray-500 dark:text-gray-400", children: "Liquidation" }), _jsx("div", { className: "font-medium text-gray-900 dark:text-gray-100 font-mono", children: position.liquidationPrice
|
|
192
|
+
: 'text-red-600 dark:text-red-400'), children: [position.pnl >= 0 ? '+' : '', position.pnl.toFixed(2), " (", position.pnlPercentage.toFixed(2), "%)"] })] }), _jsxs("div", { children: [_jsx("div", { className: "text-n1-gray-500 dark:text-n1-gray-400", children: "Liquidation" }), _jsx("div", { className: "font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono", children: position.liquidationPrice
|
|
193
193
|
? position.liquidationPrice.toFixed(2)
|
|
194
|
-
: 'N/A' })] })] })] }, index)); }), loading && positions.length > 0 && (_jsx("div", { className: "flex justify-center mt-2", children: _jsx(RefreshCw, { size: 16, className: "text-gray-400 animate-spin" }) }))] }))] }) }));
|
|
194
|
+
: 'N/A' })] })] })] }, index)); }), loading && positions.length > 0 && (_jsx("div", { className: "flex justify-center mt-2", children: _jsx(RefreshCw, { size: 16, className: "text-n1-gray-400 n1-animate-spin" }) }))] }))] }) }));
|
|
195
195
|
}
|
|
196
196
|
//# sourceMappingURL=UserPositions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserPositions.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/UserPositions/UserPositions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect } from 'react';\nimport { useN1WalletContext } from '../../../../Provider/hooks';\nimport { RefreshCw, X } from 'lucide-react';\n\ninterface Position {\n marketId: number;\n symbol: string;\n size: number;\n entryPrice: number;\n markPrice: number;\n pnl: number;\n pnlPercentage: number;\n liquidationPrice?: number;\n accountId: number;\n}\n\n// Interface for market stats based on the Nord API\ninterface MarketStats {\n market_id: number;\n index_price: [number, number];\n volume_24h: number;\n high_24h: number;\n low_24h: number;\n perp_stats?: {\n mark_price?: number;\n funding_rate?: number;\n next_funding_time?: Date;\n open_interest?: number;\n };\n}\n\nexport default function UserPositions() {\n const { nord, nordUser } = useN1WalletContext();\n const [positions, setPositions] = useState<Position[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [marketStats, setMarketStats] = useState<MarketStats[]>([]);\n\n // Fetch user positions\n useEffect(() => {\n if (!nordUser || !nord) return;\n\n const fetchPositions = async () => {\n setLoading(true);\n setError(null);\n\n try {\n // Refresh user info to get latest positions\n await nordUser.fetchInfo();\n\n // Get market stats for mark prices\n try {\n const stats = await nord.marketsStats();\n setMarketStats(stats.markets);\n } catch (statsErr) {\n console.error('Error fetching market stats:', statsErr);\n // Don't set loading to false here, as we still want to try to get positions\n }\n\n // Extract real positions from nordUser\n const realPositions: Position[] = [];\n\n // Loop through all accounts\n if (nordUser.accountIds) {\n for (const accountId of nordUser.accountIds) {\n // Check if this account has positions\n const accountPositions = nordUser.positions[accountId];\n\n if (accountPositions && accountPositions.length > 0) {\n // Process each position\n for (const position of accountPositions) {\n // Only include positions with perp data and non-zero size\n if (position.perp && Math.abs(position.perp.baseSize) > 0) {\n // Find market info to get symbol\n const market = nord.markets.find(\n (m) => m.marketId === position.marketId\n );\n const symbol = market\n ? market.symbol\n : `Market-${position.marketId}`;\n\n // Calculate PnL\n const totalPnl =\n position.perp.sizePricePnl +\n position.perp.fundingPaymentPnl;\n const entryValue =\n Math.abs(position.perp.baseSize) * position.perp.price;\n const pnlPercentage =\n entryValue > 0 ? (totalPnl / entryValue) * 100 : 0;\n\n // Get mark price from market stats or use entry price as fallback\n const stats = marketStats.find(\n (m) => m.market_id === position.marketId\n );\n const markPrice =\n stats?.perp_stats?.mark_price || position.perp.price;\n\n realPositions.push({\n marketId: position.marketId,\n symbol: symbol,\n size: position.perp.isLong\n ? position.perp.baseSize\n : -position.perp.baseSize,\n entryPrice: position.perp.price,\n markPrice: markPrice,\n pnl: totalPnl,\n pnlPercentage: pnlPercentage,\n accountId: accountId,\n });\n }\n }\n }\n }\n }\n\n setPositions(realPositions);\n setLoading(false); // Explicitly set loading to false on success\n } catch (err) {\n console.error('Error fetching positions:', err);\n setError('Failed to load positions');\n setLoading(false); // Ensure loading is set to false on error\n }\n };\n\n fetchPositions();\n\n // Set up polling for position updates\n const intervalId = setInterval(fetchPositions, 10000); // Update every 10 seconds\n\n return () => clearInterval(intervalId);\n }, [nordUser, nord]); // Remove marketStats from dependency array to prevent infinite loops\n\n // Handle position close\n const handleClosePosition = async (marketId: number, accountId: number) => {\n if (!nordUser) return;\n\n try {\n // Find the position to close\n const position = positions.find(\n (pos) => pos.marketId === marketId && pos.accountId === accountId\n );\n\n if (!position) {\n throw new Error('Position not found');\n }\n\n // Place an order to close the position (opposite side, same size)\n await nordUser.placeOrder({\n marketId: marketId,\n side: position.size > 0 ? 'ask' : 'bid', // Opposite side to close\n fillMode: 'market', // Market order to ensure it gets filled\n isReduceOnly: true, // Reduce-only to ensure it only closes the position\n size: Math.abs(position.size), // Absolute size value\n accountId: accountId,\n });\n\n // Refresh positions after closing\n await nordUser.fetchInfo();\n\n // Remove the position from the local state\n setPositions(\n positions.filter(\n (pos) => !(pos.marketId === marketId && pos.accountId === accountId)\n )\n );\n } catch (err) {\n console.error('Error closing position:', err);\n setError('Failed to close position');\n }\n };\n\n return (\n <div className=\"bg-white dark:bg-gray-950 overflow-hidden\">\n <div className=\"p-4\">\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100 mb-4\">\n Positions\n </h2>\n\n {loading && positions.length === 0 ? (\n <div className=\"flex items-center justify-center h-32\">\n <RefreshCw size={20} className=\"text-gray-400 animate-spin\" />\n </div>\n ) : error ? (\n <div className=\"p-3 bg-red-50 dark:bg-red-900/20 rounded-lg text-red-600 dark:text-red-400 text-sm\">\n {error}\n </div>\n ) : positions.length === 0 ? (\n <div className=\"p-3 bg-gray-50 dark:bg-gray-950 rounded-lg text-gray-500 dark:text-gray-400 text-sm text-center\">\n No open positions\n </div>\n ) : (\n <div className=\"space-y-3\">\n {positions.map((position, index) => (\n <div\n key={index}\n className=\"p-3 bg-gray-50 dark:bg-gray-950 rounded-lg\"\n >\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center\">\n <span className=\"font-medium text-gray-900 dark:text-gray-100 mr-2\">\n {position.symbol}\n </span>\n <span\n className={`text-xs px-2 py-0.5 rounded ${\n position.size > 0\n ? 'bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400'\n : 'bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400'\n }`}\n >\n {position.size > 0 ? 'Long' : 'Short'}{' '}\n {Math.abs(position.size)}\n </span>\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2 text-sm\">\n <div>\n <div className=\"text-gray-500 dark:text-gray-400\">\n Entry Price\n </div>\n <div className=\"font-medium text-gray-900 dark:text-gray-100 font-mono\">\n {position.entryPrice.toFixed(2)}\n </div>\n </div>\n <div>\n <div className=\"text-gray-500 dark:text-gray-400\">\n Mark Price\n </div>\n <div className=\"font-medium text-gray-900 dark:text-gray-100 font-mono\">\n {position.markPrice.toFixed(2)}\n </div>\n </div>\n <div>\n <div className=\"text-gray-500 dark:text-gray-400\">PnL</div>\n <div\n className={`font-medium font-mono ${\n position.pnl >= 0\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n }`}\n >\n {position.pnl >= 0 ? '+' : ''}\n {position.pnl.toFixed(2)} (\n {position.pnlPercentage.toFixed(2)}%)\n </div>\n </div>\n <div>\n <div className=\"text-gray-500 dark:text-gray-400\">\n Liquidation\n </div>\n <div className=\"font-medium text-gray-900 dark:text-gray-100 font-mono\">\n {position.liquidationPrice\n ? position.liquidationPrice.toFixed(2)\n : 'N/A'}\n </div>\n </div>\n </div>\n </div>\n ))}\n\n {/* Loading indicator for refreshing */}\n {loading && positions.length > 0 && (\n <div className=\"flex justify-center mt-2\">\n <RefreshCw size={16} className=\"text-gray-400 animate-spin\" />\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"UserPositions.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/UserPositions/UserPositions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect } from 'react';\nimport { useN1WalletContext } from '../../../../Provider/hooks';\nimport { RefreshCw, X } from 'lucide-react';\n\ninterface Position {\n marketId: number;\n symbol: string;\n size: number;\n entryPrice: number;\n markPrice: number;\n pnl: number;\n pnlPercentage: number;\n liquidationPrice?: number;\n accountId: number;\n}\n\n// Interface for market stats based on the Nord API\ninterface MarketStats {\n market_id: number;\n index_price: [number, number];\n volume_24h: number;\n high_24h: number;\n low_24h: number;\n perp_stats?: {\n mark_price?: number;\n funding_rate?: number;\n next_funding_time?: Date;\n open_interest?: number;\n };\n}\n\nexport default function UserPositions() {\n const { nord, nordUser } = useN1WalletContext();\n const [positions, setPositions] = useState<Position[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [marketStats, setMarketStats] = useState<MarketStats[]>([]);\n\n // Fetch user positions\n useEffect(() => {\n if (!nordUser || !nord) return;\n\n const fetchPositions = async () => {\n setLoading(true);\n setError(null);\n\n try {\n // Refresh user info to get latest positions\n await nordUser.fetchInfo();\n\n // Get market stats for mark prices\n try {\n const stats = await nord.marketsStats();\n setMarketStats(stats.markets);\n } catch (statsErr) {\n console.error('Error fetching market stats:', statsErr);\n // Don't set loading to false here, as we still want to try to get positions\n }\n\n // Extract real positions from nordUser\n const realPositions: Position[] = [];\n\n // Loop through all accounts\n if (nordUser.accountIds) {\n for (const accountId of nordUser.accountIds) {\n // Check if this account has positions\n const accountPositions = nordUser.positions[accountId];\n\n if (accountPositions && accountPositions.length > 0) {\n // Process each position\n for (const position of accountPositions) {\n // Only include positions with perp data and non-zero size\n if (position.perp && Math.abs(position.perp.baseSize) > 0) {\n // Find market info to get symbol\n const market = nord.markets.find(\n (m) => m.marketId === position.marketId\n );\n const symbol = market\n ? market.symbol\n : `Market-${position.marketId}`;\n\n // Calculate PnL\n const totalPnl =\n position.perp.sizePricePnl +\n position.perp.fundingPaymentPnl;\n const entryValue =\n Math.abs(position.perp.baseSize) * position.perp.price;\n const pnlPercentage =\n entryValue > 0 ? (totalPnl / entryValue) * 100 : 0;\n\n // Get mark price from market stats or use entry price as fallback\n const stats = marketStats.find(\n (m) => m.market_id === position.marketId\n );\n const markPrice =\n stats?.perp_stats?.mark_price || position.perp.price;\n\n realPositions.push({\n marketId: position.marketId,\n symbol: symbol,\n size: position.perp.isLong\n ? position.perp.baseSize\n : -position.perp.baseSize,\n entryPrice: position.perp.price,\n markPrice: markPrice,\n pnl: totalPnl,\n pnlPercentage: pnlPercentage,\n accountId: accountId,\n });\n }\n }\n }\n }\n }\n\n setPositions(realPositions);\n setLoading(false); // Explicitly set loading to false on success\n } catch (err) {\n console.error('Error fetching positions:', err);\n setError('Failed to load positions');\n setLoading(false); // Ensure loading is set to false on error\n }\n };\n\n fetchPositions();\n\n // Set up polling for position updates\n const intervalId = setInterval(fetchPositions, 10000); // Update every 10 seconds\n\n return () => clearInterval(intervalId);\n }, [nordUser, nord]); // Remove marketStats from dependency array to prevent infinite loops\n\n // Handle position close\n const handleClosePosition = async (marketId: number, accountId: number) => {\n if (!nordUser) return;\n\n try {\n // Find the position to close\n const position = positions.find(\n (pos) => pos.marketId === marketId && pos.accountId === accountId\n );\n\n if (!position) {\n throw new Error('Position not found');\n }\n\n // Place an order to close the position (opposite side, same size)\n await nordUser.placeOrder({\n marketId: marketId,\n side: position.size > 0 ? 'ask' : 'bid', // Opposite side to close\n fillMode: 'market', // Market order to ensure it gets filled\n isReduceOnly: true, // Reduce-only to ensure it only closes the position\n size: Math.abs(position.size), // Absolute size value\n accountId: accountId,\n });\n\n // Refresh positions after closing\n await nordUser.fetchInfo();\n\n // Remove the position from the local state\n setPositions(\n positions.filter(\n (pos) => !(pos.marketId === marketId && pos.accountId === accountId)\n )\n );\n } catch (err) {\n console.error('Error closing position:', err);\n setError('Failed to close position');\n }\n };\n\n return (\n <div className=\"bg-white dark:bg-n1-gray-950 overflow-hidden\">\n <div className=\"p-4\">\n <h2 className=\"text-lg font-semibold text-n1-gray-900 dark:text-n1-gray-100 mb-4\">\n Positions\n </h2>\n\n {loading && positions.length === 0 ? (\n <div className=\"flex items-center justify-center h-32\">\n <RefreshCw size={20} className=\"text-n1-gray-400 n1-animate-spin\" />\n </div>\n ) : error ? (\n <div className=\"p-3 bg-red-50 dark:bg-red-900/20 rounded-lg text-red-600 dark:text-red-400 text-sm\">\n {error}\n </div>\n ) : positions.length === 0 ? (\n <div className=\"p-3 bg-n1-gray-50 dark:bg-n1-gray-950 rounded-lg text-n1-gray-500 dark:text-n1-gray-400 text-sm text-center\">\n No open positions\n </div>\n ) : (\n <div className=\"space-y-3\">\n {positions.map((position, index) => (\n <div\n key={index}\n className=\"p-3 bg-n1-gray-50 dark:bg-n1-gray-950 rounded-lg\"\n >\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center\">\n <span className=\"font-medium text-n1-gray-900 dark:text-n1-gray-100 mr-2\">\n {position.symbol}\n </span>\n <span\n className={`text-xs px-2 py-0.5 rounded ${\n position.size > 0\n ? 'bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400'\n : 'bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400'\n }`}\n >\n {position.size > 0 ? 'Long' : 'Short'}{' '}\n {Math.abs(position.size)}\n </span>\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2 text-sm\">\n <div>\n <div className=\"text-n1-gray-500 dark:text-n1-gray-400\">\n Entry Price\n </div>\n <div className=\"font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono\">\n {position.entryPrice.toFixed(2)}\n </div>\n </div>\n <div>\n <div className=\"text-n1-gray-500 dark:text-n1-gray-400\">\n Mark Price\n </div>\n <div className=\"font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono\">\n {position.markPrice.toFixed(2)}\n </div>\n </div>\n <div>\n <div className=\"text-n1-gray-500 dark:text-n1-gray-400\">PnL</div>\n <div\n className={`font-medium font-mono ${\n position.pnl >= 0\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n }`}\n >\n {position.pnl >= 0 ? '+' : ''}\n {position.pnl.toFixed(2)} (\n {position.pnlPercentage.toFixed(2)}%)\n </div>\n </div>\n <div>\n <div className=\"text-n1-gray-500 dark:text-n1-gray-400\">\n Liquidation\n </div>\n <div className=\"font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono\">\n {position.liquidationPrice\n ? position.liquidationPrice.toFixed(2)\n : 'N/A'}\n </div>\n </div>\n </div>\n </div>\n ))}\n\n {/* Loading indicator for refreshing */}\n {loading && positions.length > 0 && (\n <div className=\"flex justify-center mt-2\">\n <RefreshCw size={16} className=\"text-n1-gray-400 n1-animate-spin\" />\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -118,7 +118,9 @@ function DynamicContextConsumer(_a) {
|
|
|
118
118
|
}, [handleLogOut, setDynamicHandleLogOut]);
|
|
119
119
|
// Set the SDK loaded flag when it changes - only when it actually changes
|
|
120
120
|
useEffect(function () {
|
|
121
|
+
console.log(sdkHasLoaded, 'sdkHasLoaded');
|
|
121
122
|
if (sdkHasLoaded !== prevSdkHasLoadedRef.current) {
|
|
123
|
+
console.log(sdkHasLoaded, 'SADASDAS');
|
|
122
124
|
prevSdkHasLoadedRef.current = sdkHasLoaded;
|
|
123
125
|
setDynamicSdkHasLoaded(sdkHasLoaded);
|
|
124
126
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LazyWalletProvider.js","sourceRoot":"","sources":["../../src/Provider/LazyWalletProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useN1WalletInternalContext } from './hooks';\nimport { N1SessionMode } from './types';\nimport { logger } from '../utils/logger';\n\nfunction DynamicContextConsumer({ children }: { children: any }) {\n const [DynamicContext, setDynamicContext] = useState<any>(null);\n const showAuthFlowRef = useRef<((show: boolean) => void) | null>(null);\n\n // Use refs to track previous values and prevent unnecessary updates\n const prevPrimaryWalletRef = useRef<any>(null);\n const prevHandleLogOutRef = useRef<any>(null);\n const prevSdkHasLoadedRef = useRef<boolean | null>(null);\n\n const {\n setDynamicWallet,\n setDynamicHandleLogOut,\n setDynamicSdkHasLoaded,\n setAddress,\n setShowDynamicWidget,\n } = useN1WalletInternalContext();\n\n // Load the Dynamic context only once\n useEffect(() => {\n let isMounted = true;\n import('@dynamic-labs/sdk-react-core').then(({ useDynamicContext }) => {\n if (isMounted) {\n setDynamicContext(() => useDynamicContext);\n }\n });\n return () => {\n isMounted = false;\n };\n }, []);\n\n // Set up a stable widget function that uses the ref - only once\n useEffect(() => {\n const stableShowWidget = (show: boolean) => {\n if (showAuthFlowRef.current) {\n showAuthFlowRef.current(show);\n }\n };\n\n setShowDynamicWidget(() => stableShowWidget);\n }, [setShowDynamicWidget]);\n\n if (!DynamicContext) {\n return <>{children}</>;\n }\n\n const DynamicComponent = () => {\n const { primaryWallet, sdkHasLoaded, setShowAuthFlow, handleLogOut } =\n DynamicContext();\n\n // Store setShowAuthFlow in ref to avoid re-renders - only when it changes\n useEffect(() => {\n if (setShowAuthFlow !== showAuthFlowRef.current) {\n showAuthFlowRef.current = setShowAuthFlow;\n }\n }, [setShowAuthFlow]);\n\n // Set the dynamic wallet and address when the primary wallet changes\n // Use deep comparison to prevent unnecessary updates\n useEffect(() => {\n // Skip if the wallet hasn't actually changed\n if (primaryWallet === prevPrimaryWalletRef.current) {\n return;\n }\n\n prevPrimaryWalletRef.current = primaryWallet;\n\n if (primaryWallet) {\n setDynamicWallet(primaryWallet);\n setAddress(primaryWallet.address);\n } else {\n setDynamicWallet(null);\n setAddress('');\n }\n }, [primaryWallet, setDynamicWallet, setAddress]);\n\n // Set the logout handler when it changes - only when it actually changes\n useEffect(() => {\n if (handleLogOut && handleLogOut !== prevHandleLogOutRef.current) {\n prevHandleLogOutRef.current = handleLogOut;\n setDynamicHandleLogOut(() => handleLogOut);\n }\n }, [handleLogOut, setDynamicHandleLogOut]);\n\n // Set the SDK loaded flag when it changes - only when it actually changes\n useEffect(() => {\n if (sdkHasLoaded !== prevSdkHasLoadedRef.current) {\n prevSdkHasLoadedRef.current = sdkHasLoaded;\n setDynamicSdkHasLoaded(sdkHasLoaded);\n }\n }, [sdkHasLoaded, setDynamicSdkHasLoaded]);\n\n return <>{children}</>;\n };\n\n return <DynamicComponent />;\n}\n\nconst getSettings = (darkMode: boolean) => ({\n initialAuthenticationMode: 'connect-only',\n environmentId: '61fe6031-545b-4e27-bc05-03c8a09f190b',\n silentAuthentication: true,\n silentAuth: true,\n theme: {\n mode: darkMode ? 'dark' : 'light',\n },\n events: {\n onAuthSuccess: (args: any) => {\n logger.debug('onAuthSuccess was called', args);\n },\n },\n});\n\nfunction LazyInternal(props: { children: any }) {\n const [Provider, setProvider] = useState<any>(null);\n const [walletConnectors, setWalletConnectors] = useState<any[]>([]);\n const { darkMode, sessionMode } = useN1WalletInternalContext();\n\n // Use a ref to track the previous session mode\n const prevSessionModeRef = useRef<N1SessionMode | null>(null);\n\n useEffect(() => {\n // Skip if the session mode hasn't changed\n if (sessionMode === prevSessionModeRef.current) {\n return;\n }\n\n prevSessionModeRef.current = sessionMode;\n\n const loadDynamicDeps = async () => {\n try {\n const [\n { DynamicContextProvider },\n { EthereumWalletConnectors },\n { SolanaWalletConnectors },\n ] = await Promise.all([\n import('@dynamic-labs/sdk-react-core'),\n import('@dynamic-labs/ethereum'),\n import('@dynamic-labs/solana'),\n ]);\n\n setProvider(() => DynamicContextProvider);\n\n if (sessionMode === N1SessionMode.Nord) {\n // Only use Solana wallet connectors for Nord mode\n setWalletConnectors([SolanaWalletConnectors]);\n } else {\n // Use all wallet connectors for NTS mode\n setWalletConnectors([\n EthereumWalletConnectors,\n SolanaWalletConnectors,\n ]);\n }\n } catch (error) {\n logger.error('Failed to load Dynamic dependencies:', error);\n }\n };\n\n loadDynamicDeps();\n }, [sessionMode]);\n\n // Memoize the dynamic settings to prevent unnecessary re-renders\n const dynamicSettings = useCallback(\n () => ({\n ...getSettings(darkMode),\n walletConnectors,\n }),\n [darkMode, walletConnectors]\n );\n\n if (!Provider || walletConnectors.length === 0) {\n return null;\n }\n\n return (\n <Provider settings={dynamicSettings()} theme={darkMode ? 'dark' : 'light'}>\n <DynamicContextConsumer>{props.children}</DynamicContextConsumer>\n </Provider>\n );\n}\n\nexport function LazyWalletProvider({ children }: any) {\n return <LazyInternal>{children}</LazyInternal>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"LazyWalletProvider.js","sourceRoot":"","sources":["../../src/Provider/LazyWalletProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useN1WalletInternalContext } from './hooks';\nimport { N1SessionMode } from './types';\nimport { logger } from '../utils/logger';\n\nfunction DynamicContextConsumer({ children }: { children: any }) {\n const [DynamicContext, setDynamicContext] = useState<any>(null);\n const showAuthFlowRef = useRef<((show: boolean) => void) | null>(null);\n\n // Use refs to track previous values and prevent unnecessary updates\n const prevPrimaryWalletRef = useRef<any>(null);\n const prevHandleLogOutRef = useRef<any>(null);\n const prevSdkHasLoadedRef = useRef<boolean | null>(null);\n\n const {\n setDynamicWallet,\n setDynamicHandleLogOut,\n setDynamicSdkHasLoaded,\n setAddress,\n setShowDynamicWidget,\n } = useN1WalletInternalContext();\n\n // Load the Dynamic context only once\n useEffect(() => {\n let isMounted = true;\n import('@dynamic-labs/sdk-react-core').then(({ useDynamicContext }) => {\n if (isMounted) {\n setDynamicContext(() => useDynamicContext);\n }\n });\n return () => {\n isMounted = false;\n };\n }, []);\n\n // Set up a stable widget function that uses the ref - only once\n useEffect(() => {\n const stableShowWidget = (show: boolean) => {\n if (showAuthFlowRef.current) {\n showAuthFlowRef.current(show);\n }\n };\n\n setShowDynamicWidget(() => stableShowWidget);\n }, [setShowDynamicWidget]);\n\n if (!DynamicContext) {\n return <>{children}</>;\n }\n\n const DynamicComponent = () => {\n const { primaryWallet, sdkHasLoaded, setShowAuthFlow, handleLogOut } =\n DynamicContext();\n\n // Store setShowAuthFlow in ref to avoid re-renders - only when it changes\n useEffect(() => {\n if (setShowAuthFlow !== showAuthFlowRef.current) {\n showAuthFlowRef.current = setShowAuthFlow;\n }\n }, [setShowAuthFlow]);\n\n // Set the dynamic wallet and address when the primary wallet changes\n // Use deep comparison to prevent unnecessary updates\n useEffect(() => {\n // Skip if the wallet hasn't actually changed\n if (primaryWallet === prevPrimaryWalletRef.current) {\n return;\n }\n\n prevPrimaryWalletRef.current = primaryWallet;\n\n if (primaryWallet) {\n setDynamicWallet(primaryWallet);\n setAddress(primaryWallet.address);\n } else {\n setDynamicWallet(null);\n setAddress('');\n }\n }, [primaryWallet, setDynamicWallet, setAddress]);\n\n // Set the logout handler when it changes - only when it actually changes\n useEffect(() => {\n if (handleLogOut && handleLogOut !== prevHandleLogOutRef.current) {\n prevHandleLogOutRef.current = handleLogOut;\n setDynamicHandleLogOut(() => handleLogOut);\n }\n }, [handleLogOut, setDynamicHandleLogOut]);\n\n // Set the SDK loaded flag when it changes - only when it actually changes\n useEffect(() => {\n console.log(sdkHasLoaded, 'sdkHasLoaded')\n if (sdkHasLoaded !== prevSdkHasLoadedRef.current) {\n console.log(sdkHasLoaded, 'SADASDAS')\n prevSdkHasLoadedRef.current = sdkHasLoaded;\n setDynamicSdkHasLoaded(sdkHasLoaded);\n }\n }, [sdkHasLoaded, setDynamicSdkHasLoaded]);\n\n return <>{children}</>;\n };\n\n return <DynamicComponent />;\n}\n\nconst getSettings = (darkMode: boolean) => ({\n initialAuthenticationMode: 'connect-only',\n environmentId: '61fe6031-545b-4e27-bc05-03c8a09f190b',\n silentAuthentication: true,\n silentAuth: true,\n theme: {\n mode: darkMode ? 'dark' : 'light',\n },\n events: {\n onAuthSuccess: (args: any) => {\n logger.debug('onAuthSuccess was called', args);\n },\n },\n});\n\nfunction LazyInternal(props: { children: any }) {\n const [Provider, setProvider] = useState<any>(null);\n const [walletConnectors, setWalletConnectors] = useState<any[]>([]);\n const { darkMode, sessionMode } = useN1WalletInternalContext();\n\n // Use a ref to track the previous session mode\n const prevSessionModeRef = useRef<N1SessionMode | null>(null);\n\n useEffect(() => {\n // Skip if the session mode hasn't changed\n if (sessionMode === prevSessionModeRef.current) {\n return;\n }\n\n prevSessionModeRef.current = sessionMode;\n\n const loadDynamicDeps = async () => {\n try {\n const [\n { DynamicContextProvider },\n { EthereumWalletConnectors },\n { SolanaWalletConnectors },\n ] = await Promise.all([\n import('@dynamic-labs/sdk-react-core'),\n import('@dynamic-labs/ethereum'),\n import('@dynamic-labs/solana'),\n ]);\n\n setProvider(() => DynamicContextProvider);\n\n if (sessionMode === N1SessionMode.Nord) {\n // Only use Solana wallet connectors for Nord mode\n setWalletConnectors([SolanaWalletConnectors]);\n } else {\n // Use all wallet connectors for NTS mode\n setWalletConnectors([\n EthereumWalletConnectors,\n SolanaWalletConnectors,\n ]);\n }\n } catch (error) {\n logger.error('Failed to load Dynamic dependencies:', error);\n }\n };\n\n loadDynamicDeps();\n }, [sessionMode]);\n\n // Memoize the dynamic settings to prevent unnecessary re-renders\n const dynamicSettings = useCallback(\n () => ({\n ...getSettings(darkMode),\n walletConnectors,\n }),\n [darkMode, walletConnectors]\n );\n\n if (!Provider || walletConnectors.length === 0) {\n return null;\n }\n\n return (\n <Provider settings={dynamicSettings()} theme={darkMode ? 'dark' : 'light'}>\n <DynamicContextConsumer>{props.children}</DynamicContextConsumer>\n </Provider>\n );\n}\n\nexport function LazyWalletProvider({ children }: any) {\n return <LazyInternal>{children}</LazyInternal>;\n}\n"]}
|
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -50,70 +35,57 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
50
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
36
|
}
|
|
52
37
|
};
|
|
53
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
38
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
54
39
|
import React, { Suspense, useCallback, useEffect, useState } from 'react';
|
|
55
40
|
import { N1WalletModal } from '../Modal/N1WalletModal';
|
|
41
|
+
import { NordProvider } from '../Modal/NordFlow/context';
|
|
56
42
|
import { WalletError, WalletErrorCode } from '../errors/types';
|
|
57
43
|
import { logger } from '../utils/logger';
|
|
44
|
+
import WalletErrorBoundary from './WalletErrorBoundary';
|
|
58
45
|
import { N1InternalWalletContext, N1WalletContext } from './context';
|
|
59
46
|
import { N1ModalViewMode, N1SessionMode, } from './types';
|
|
47
|
+
import { useNordUserInitialization } from './hooks/useNordUserInitialization';
|
|
60
48
|
var LazyWalletProvider = React.lazy(function () {
|
|
61
49
|
return import('./LazyWalletProvider').then(function (mod) { return ({
|
|
62
50
|
default: mod.LazyWalletProvider,
|
|
63
51
|
}); });
|
|
64
52
|
});
|
|
65
|
-
// Error boundary to catch WalletErrors
|
|
66
|
-
var WalletErrorBoundary = /** @class */ (function (_super) {
|
|
67
|
-
__extends(WalletErrorBoundary, _super);
|
|
68
|
-
function WalletErrorBoundary() {
|
|
69
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
70
|
-
}
|
|
71
|
-
WalletErrorBoundary.prototype.componentDidCatch = function (error) {
|
|
72
|
-
if (error instanceof WalletError) {
|
|
73
|
-
this.props.onError(error);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
// Convert unknown errors to WalletError
|
|
77
|
-
this.props.onError(new WalletError(WalletErrorCode.UNKNOWN, error.message || 'An unexpected error occurred', { originalError: error }));
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
WalletErrorBoundary.prototype.render = function () {
|
|
81
|
-
return this.props.children;
|
|
82
|
-
};
|
|
83
|
-
return WalletErrorBoundary;
|
|
84
|
-
}(React.Component));
|
|
85
53
|
export function N1WalletProvider(_a) {
|
|
86
54
|
var _this = this;
|
|
87
55
|
var children = _a.children, providedSessionMode = _a.providedSessionMode, appId = _a.appId, _b = _a.darkMode, darkMode = _b === void 0 ? true : _b, onError = _a.onError, faucetUrl = _a.faucetUrl, nord = _a.nord;
|
|
88
56
|
var _c = useState(false), isConnected = _c[0], setIsConnected = _c[1];
|
|
89
57
|
var _d = useState(null), ntsInterface = _d[0], setNtsInterface = _d[1];
|
|
90
|
-
var _e = useState(
|
|
91
|
-
var _f = useState(null),
|
|
92
|
-
var _g = useState(null),
|
|
93
|
-
var _h = useState(
|
|
94
|
-
var _j = useState(
|
|
95
|
-
var _k = useState(null),
|
|
96
|
-
var _l = useState(null),
|
|
97
|
-
var _m = useState(
|
|
98
|
-
var _o = useState(
|
|
99
|
-
var _p = useState(
|
|
100
|
-
var _q = useState(false), loading = _q[0], setLoading = _q[1];
|
|
101
|
-
var _r = useState(N1ModalViewMode.Connect), viewMode = _r[0], setViewMode = _r[1];
|
|
102
|
-
var _s = useState(null), nordUser = _s[0], setNordUser = _s[1];
|
|
58
|
+
var _e = useState(null), sessionPubKey = _e[0], setSessionPubKey = _e[1];
|
|
59
|
+
var _f = useState(null), walletPubKey = _f[0], setWalletPubKey = _f[1];
|
|
60
|
+
var _g = useState(null), userChain = _g[0], setUserChain = _g[1];
|
|
61
|
+
var _h = useState(''), username = _h[0], setUsername = _h[1];
|
|
62
|
+
var _j = useState(null), signMessageWithSessionKey = _j[0], setSignMessageWithSessionKey = _j[1];
|
|
63
|
+
var _k = useState(null), signMessageWithWalletKey = _k[0], setSignMessageWithWalletKey = _k[1];
|
|
64
|
+
var _l = useState(null), signTransactionWithWalletKey = _l[0], setSignTransactionWithWalletKey = _l[1];
|
|
65
|
+
var _m = useState(false), loading = _m[0], setLoading = _m[1];
|
|
66
|
+
var _o = useState(N1ModalViewMode.Connect), viewMode = _o[0], setViewMode = _o[1];
|
|
67
|
+
var _p = useState(null), nordUser = _p[0], setNordUser = _p[1];
|
|
103
68
|
// dynamic
|
|
104
|
-
var
|
|
105
|
-
var
|
|
106
|
-
var
|
|
107
|
-
var
|
|
108
|
-
var
|
|
109
|
-
var
|
|
110
|
-
var
|
|
111
|
-
var
|
|
69
|
+
var _q = useState([]), balances = _q[0], setBalances = _q[1];
|
|
70
|
+
var _r = useState(''), chain = _r[0], setChain = _r[1];
|
|
71
|
+
var _s = useState(null), dynamicSdkHasLoaded = _s[0], setDynamicSdkHasLoaded = _s[1];
|
|
72
|
+
var _t = useState(null), sessionMode = _t[0], setSessionMode = _t[1];
|
|
73
|
+
var _u = useState(false), showLogin = _u[0], setShowLogin = _u[1];
|
|
74
|
+
var _v = useState(false), startClosingLogin = _v[0], setStartClosingLogin = _v[1];
|
|
75
|
+
var _w = useState(false), showSidebar = _w[0], setShowSidebar = _w[1];
|
|
76
|
+
var _x = useState(null), showDynamicWidget = _x[0], setShowDynamicWidget = _x[1];
|
|
77
|
+
// dynamic
|
|
78
|
+
var _y = useState(''), address = _y[0], setAddress = _y[1];
|
|
79
|
+
var _z = useState(null), dynamicHandleLogOut = _z[0], setDynamicHandleLogOut = _z[1];
|
|
80
|
+
var _0 = useState(null), dynamicWallet = _0[0], setDynamicWallet = _0[1];
|
|
112
81
|
// Combine SDK loading and initialization into a single effect
|
|
113
82
|
useEffect(function () {
|
|
114
83
|
var mounted = true;
|
|
115
84
|
// Set the session mode from props
|
|
116
85
|
setSessionMode(providedSessionMode);
|
|
86
|
+
if (providedSessionMode === N1SessionMode.Nord) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
117
89
|
// Load the appropriate SDK
|
|
118
90
|
var loadSDK = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
119
91
|
var NTSInterface, error_1;
|
|
@@ -122,9 +94,6 @@ export function N1WalletProvider(_a) {
|
|
|
122
94
|
case 0:
|
|
123
95
|
// eslint-disable-next-line no-console
|
|
124
96
|
logger.debug('Loading NTS SDK');
|
|
125
|
-
if (providedSessionMode === N1SessionMode.Nord) {
|
|
126
|
-
return [2 /*return*/];
|
|
127
|
-
}
|
|
128
97
|
_a.label = 1;
|
|
129
98
|
case 1:
|
|
130
99
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -162,7 +131,6 @@ export function N1WalletProvider(_a) {
|
|
|
162
131
|
var handleError = useCallback(function (error) {
|
|
163
132
|
onError === null || onError === void 0 ? void 0 : onError(error);
|
|
164
133
|
}, [onError]);
|
|
165
|
-
// Simple function to test error handler
|
|
166
134
|
var throwTestError = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
167
135
|
return __generator(this, function (_a) {
|
|
168
136
|
handleError(new WalletError(WalletErrorCode.WALLET_NOT_FOUND, 'Test error: No compatible wallet was found'));
|
|
@@ -193,7 +161,24 @@ export function N1WalletProvider(_a) {
|
|
|
193
161
|
nord: nord,
|
|
194
162
|
nordUser: nordUser,
|
|
195
163
|
};
|
|
196
|
-
|
|
164
|
+
// Use the extracted hook for NordUser initialization
|
|
165
|
+
useNordUserInitialization({
|
|
166
|
+
sessionMode: providedSessionMode,
|
|
167
|
+
dynamicWallet: dynamicWallet,
|
|
168
|
+
address: address,
|
|
169
|
+
nord: nord,
|
|
170
|
+
signMessageWithSessionKey: signMessageWithSessionKey,
|
|
171
|
+
signMessageWithWalletKey: signMessageWithWalletKey,
|
|
172
|
+
signTransactionWithWalletKey: signTransactionWithWalletKey,
|
|
173
|
+
sessionPubKey: sessionPubKey,
|
|
174
|
+
nordUser: nordUser,
|
|
175
|
+
setNordUser: setNordUser,
|
|
176
|
+
setSessionPubKey: setSessionPubKey,
|
|
177
|
+
setSignMessageWithSessionKey: setSignMessageWithSessionKey,
|
|
178
|
+
setSignMessageWithWalletKey: setSignMessageWithWalletKey,
|
|
179
|
+
setSignTransactionWithWalletKey: setSignTransactionWithWalletKey,
|
|
180
|
+
});
|
|
181
|
+
return (_jsx(WalletErrorBoundary, { onError: handleError, children: _jsx(N1WalletContext.Provider, { value: walletContextValue, children: _jsx(N1InternalWalletContext.Provider, { value: {
|
|
197
182
|
dynamicHandleLogOut: dynamicHandleLogOut,
|
|
198
183
|
dynamicWallet: dynamicWallet,
|
|
199
184
|
loading: loading,
|
|
@@ -227,6 +212,6 @@ export function N1WalletProvider(_a) {
|
|
|
227
212
|
sessionMode: sessionMode,
|
|
228
213
|
faucetUrl: faucetUrl,
|
|
229
214
|
setNordUser: setNordUser,
|
|
230
|
-
}, children: [children, _jsx(N1WalletModal, {}), _jsx(Suspense, { fallback: null, children: _jsx(LazyWalletProvider, {}) })] }) }) }));
|
|
215
|
+
}, children: sessionMode === N1SessionMode.Nord ? (_jsx(NordProvider, { children: _jsxs(_Fragment, { children: [children, _jsx(N1WalletModal, {}), _jsx(Suspense, { fallback: null, children: _jsx(LazyWalletProvider, {}) })] }) })) : (_jsxs(_Fragment, { children: [children, _jsx(N1WalletModal, {}), _jsx(Suspense, { fallback: null, children: _jsx(LazyWalletProvider, {}) })] })) }) }) }));
|
|
231
216
|
}
|
|
232
217
|
//# sourceMappingURL=N1WalletProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"N1WalletProvider.js","sourceRoot":"","sources":["../../src/Provider/N1WalletProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, { Suspense, useCallback, useEffect, useState } from 'react';\nimport { N1WalletModal } from '../Modal/N1WalletModal';\nimport { WalletError, WalletErrorCode } from '../errors/types';\nimport { logger } from '../utils/logger';\nimport { N1InternalWalletContext, N1WalletContext } from './context';\nimport {\n Balance,\n N1ModalViewMode,\n N1SessionMode,\n N1WalletProviderProps,\n} from './types';\n\nconst LazyWalletProvider = React.lazy(() =>\n import('./LazyWalletProvider').then((mod) => ({\n default: mod.LazyWalletProvider,\n }))\n);\n\n// Error boundary to catch WalletErrors\nclass WalletErrorBoundary extends React.Component<{\n children: React.ReactNode;\n onError: (error: WalletError) => void;\n}> {\n componentDidCatch(error: Error) {\n if (error instanceof WalletError) {\n this.props.onError(error);\n } else {\n // Convert unknown errors to WalletError\n this.props.onError(\n new WalletError(\n WalletErrorCode.UNKNOWN,\n error.message || 'An unexpected error occurred',\n { originalError: error }\n )\n );\n }\n }\n\n render() {\n return this.props.children;\n }\n}\n\nexport function N1WalletProvider({\n children,\n providedSessionMode,\n appId,\n darkMode = true,\n onError,\n faucetUrl,\n nord,\n}: N1WalletProviderProps) {\n const [isConnected, setIsConnected] = useState<boolean>(false);\n const [ntsInterface, setNtsInterface] = useState<any>(null);\n const [showLogin, setShowLogin] = useState<boolean>(false);\n const [sessionPubKey, setSessionPubKey] = useState<Uint8Array | null>(null);\n const [walletPubKey, setWalletPubKey] = useState<Uint8Array | null>(null);\n const [userChain, setUserChain] = useState<string | null>(null);\n const [username, setUsername] = useState<string>('');\n const [signMessageWithSessionKey, setSignMessageWithSessionKey] = useState<\n ((message: any) => Promise<any>) | null\n >(null);\n const [signMessageWithWalletKey, setSignMessageWithWalletKey] = useState<\n ((message: any) => Promise<any>) | null\n >(null);\n const [signTransactionWithWalletKey, setSignTransactionWithWalletKey] =\n useState<((transaction: any) => Promise<any>) | null>(null);\n const [showSidebar, setShowSidebar] = useState<boolean>(false);\n const [startClosingLogin, setStartClosingLogin] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [viewMode, setViewMode] = useState<N1ModalViewMode>(\n N1ModalViewMode.Connect\n );\n const [nordUser, setNordUser] = useState<any>(null);\n\n // dynamic\n const [address, setAddress] = useState<string>('');\n const [balances, setBalances] = useState<Balance[]>([]);\n const [chain, setChain] = useState<string>('');\n const [dynamicSdkHasLoaded, setDynamicSdkHasLoaded] = useState<any>(null);\n const [dynamicHandleLogOut, setDynamicHandleLogOut] = useState<any>(null);\n const [sessionMode, setSessionMode] = useState<N1SessionMode | null>(null);\n const [dynamicWallet, setDynamicWallet] = useState<any>(null);\n const [showDynamicWidget, setShowDynamicWidget] = useState<any>(null);\n\n\n // Combine SDK loading and initialization into a single effect\n useEffect(() => {\n let mounted = true;\n\n // Set the session mode from props\n setSessionMode(providedSessionMode);\n\n // Load the appropriate SDK\n const loadSDK = async () => {\n // eslint-disable-next-line no-console\n logger.debug('Loading NTS SDK');\n\n if (providedSessionMode === N1SessionMode.Nord) {\n return;\n }\n\n try {\n const { NTSInterface } = await import('@n1xyz/nts-sdk');\n if (mounted) {\n // eslint-disable-next-line no-console\n logger.debug('NTS SDK loaded successfully');\n setNtsInterface(new NTSInterface(process.env.NTS_URL!));\n }\n } catch (error) {\n if (mounted) {\n // eslint-disable-next-line no-console\n logger.error('Error loading NTS SDK:', error);\n }\n }\n };\n\n loadSDK();\n\n return () => {\n mounted = false;\n };\n }, [providedSessionMode, onError]);\n\n // Separate effect to handle loading state based on both SDKs\n useEffect(() => {\n const isDynamicReady =\n dynamicSdkHasLoaded || providedSessionMode === N1SessionMode.Nord;\n const isNtsReady =\n ntsInterface || providedSessionMode === N1SessionMode.Nord;\n\n setLoading(!isDynamicReady || !isNtsReady);\n }, [dynamicSdkHasLoaded, ntsInterface, providedSessionMode]);\n\n const handleError = useCallback(\n (error: WalletError) => {\n onError?.(error);\n },\n [onError]\n );\n\n // Simple function to test error handler\n const throwTestError = async () => {\n handleError(\n new WalletError(\n WalletErrorCode.WALLET_NOT_FOUND,\n 'Test error: No compatible wallet was found'\n )\n );\n };\n\n // Create the wallet context value\n const walletContextValue = {\n address,\n appId,\n balances,\n chain,\n isConnected,\n ntsInterface,\n sessionMode,\n sessionPubKey,\n setShowLogin,\n showLogin,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n userChain,\n username,\n viewMode,\n walletPubKey,\n throwTestError,\n faucetUrl,\n nord,\n nordUser,\n };\n\n return (\n <WalletErrorBoundary onError={handleError}>\n <N1WalletContext.Provider value={walletContextValue}>\n <N1InternalWalletContext.Provider\n value={{\n dynamicHandleLogOut,\n dynamicWallet,\n loading,\n dynamicSdkHasLoaded,\n handleError,\n setDynamicSdkHasLoaded,\n setAddress,\n setBalances,\n setChain,\n setDynamicHandleLogOut,\n setDynamicWallet,\n setIsConnected,\n setLoading,\n setNtsInterface,\n setSessionMode,\n setSessionPubKey,\n setShowSidebar,\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n setStartClosingLogin,\n setUsername,\n setUserChain,\n setViewMode,\n setWalletPubKey,\n showSidebar,\n startClosingLogin,\n showDynamicWidget,\n setShowDynamicWidget,\n darkMode,\n sessionMode,\n faucetUrl,\n setNordUser,\n }}\n >\n {children}\n <N1WalletModal />\n <Suspense fallback={null}>\n <LazyWalletProvider />\n </Suspense>\n </N1InternalWalletContext.Provider>\n </N1WalletContext.Provider>\n </WalletErrorBoundary>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"N1WalletProvider.js","sourceRoot":"","sources":["../../src/Provider/N1WalletProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport { NordUser } from '@n1xyz/nord-ts';\nimport React, { Suspense, useCallback, useEffect, useState } from 'react';\nimport { N1WalletModal } from '../Modal/N1WalletModal';\nimport { NordProvider } from '../Modal/NordFlow/context';\nimport { WalletError, WalletErrorCode } from '../errors/types';\nimport { logger } from '../utils/logger';\nimport WalletErrorBoundary from './WalletErrorBoundary';\nimport { N1InternalWalletContext, N1WalletContext } from './context';\nimport {\n Balance,\n N1ModalViewMode,\n N1SessionMode,\n N1WalletProviderProps,\n} from './types';\nimport { useNordUserInitialization } from './hooks/useNordUserInitialization';\n\nconst LazyWalletProvider = React.lazy(() =>\n import('./LazyWalletProvider').then((mod) => ({\n default: mod.LazyWalletProvider,\n }))\n);\n\nexport function N1WalletProvider({\n children,\n providedSessionMode,\n appId,\n darkMode = true,\n onError,\n faucetUrl,\n nord,\n}: N1WalletProviderProps) {\n const [isConnected, setIsConnected] = useState<boolean>(false);\n const [ntsInterface, setNtsInterface] = useState<any>(null);\n const [sessionPubKey, setSessionPubKey] = useState<Uint8Array | null>(null);\n const [walletPubKey, setWalletPubKey] = useState<Uint8Array | null>(null);\n const [userChain, setUserChain] = useState<string | null>(null);\n const [username, setUsername] = useState<string>('');\n const [signMessageWithSessionKey, setSignMessageWithSessionKey] = useState<\n ((message: any) => Promise<any>) | null\n >(null);\n const [signMessageWithWalletKey, setSignMessageWithWalletKey] = useState<\n ((message: any) => Promise<any>) | null\n >(null);\n const [signTransactionWithWalletKey, setSignTransactionWithWalletKey] =\n useState<((transaction: any) => Promise<any>) | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [viewMode, setViewMode] = useState<N1ModalViewMode>(\n N1ModalViewMode.Connect\n );\n const [nordUser, setNordUser] = useState<any>(null);\n\n // dynamic\n const [balances, setBalances] = useState<Balance[]>([]);\n const [chain, setChain] = useState<string>('');\n const [dynamicSdkHasLoaded, setDynamicSdkHasLoaded] = useState<any>(null);\n const [sessionMode, setSessionMode] = useState<N1SessionMode | null>(null);\n\n const [showLogin, setShowLogin] = useState<boolean>(false);\n const [startClosingLogin, setStartClosingLogin] = useState<boolean>(false);\n const [showSidebar, setShowSidebar] = useState<boolean>(false);\n const [showDynamicWidget, setShowDynamicWidget] = useState<any>(null);\n\n // dynamic\n const [address, setAddress] = useState<string>('');\n const [dynamicHandleLogOut, setDynamicHandleLogOut] = useState<any>(null);\n const [dynamicWallet, setDynamicWallet] = useState<any>(null);\n\n // Combine SDK loading and initialization into a single effect\n useEffect(() => {\n let mounted = true;\n\n // Set the session mode from props\n setSessionMode(providedSessionMode);\n if (providedSessionMode === N1SessionMode.Nord) {\n return\n }\n\n // Load the appropriate SDK\n const loadSDK = async () => {\n // eslint-disable-next-line no-console\n logger.debug('Loading NTS SDK');\n\n try {\n const { NTSInterface } = await import('@n1xyz/nts-sdk');\n if (mounted) {\n // eslint-disable-next-line no-console\n logger.debug('NTS SDK loaded successfully');\n setNtsInterface(new NTSInterface(process.env.NTS_URL!));\n }\n } catch (error) {\n if (mounted) {\n // eslint-disable-next-line no-console\n logger.error('Error loading NTS SDK:', error);\n }\n }\n };\n\n loadSDK();\n\n return () => {\n mounted = false;\n };\n }, [providedSessionMode, onError]);\n\n // Separate effect to handle loading state based on both SDKs\n useEffect(() => {\n const isDynamicReady =\n dynamicSdkHasLoaded || providedSessionMode === N1SessionMode.Nord;\n const isNtsReady =\n ntsInterface || providedSessionMode === N1SessionMode.Nord;\n\n setLoading(!isDynamicReady || !isNtsReady);\n }, [dynamicSdkHasLoaded, ntsInterface, providedSessionMode]);\n\n const handleError = useCallback(\n (error: WalletError) => {\n onError?.(error);\n },\n [onError]\n );\n\n const throwTestError = async () => {\n handleError(\n new WalletError(\n WalletErrorCode.WALLET_NOT_FOUND,\n 'Test error: No compatible wallet was found'\n )\n );\n };\n\n // Create the wallet context value\n const walletContextValue = {\n address,\n appId,\n balances,\n chain,\n isConnected,\n ntsInterface,\n sessionMode,\n sessionPubKey,\n setShowLogin,\n showLogin,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n userChain,\n username,\n viewMode,\n walletPubKey,\n throwTestError,\n faucetUrl,\n nord,\n nordUser,\n };\n\n // Use the extracted hook for NordUser initialization\n useNordUserInitialization({\n sessionMode: providedSessionMode,\n dynamicWallet,\n address,\n nord,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n sessionPubKey,\n nordUser,\n setNordUser,\n setSessionPubKey,\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n });\n\n return (\n <WalletErrorBoundary onError={handleError}>\n <N1WalletContext.Provider value={walletContextValue}>\n <N1InternalWalletContext.Provider\n value={{\n dynamicHandleLogOut,\n dynamicWallet,\n loading,\n dynamicSdkHasLoaded,\n handleError,\n setDynamicSdkHasLoaded,\n setAddress,\n setBalances,\n setChain,\n setDynamicHandleLogOut,\n setDynamicWallet,\n setIsConnected,\n setLoading,\n setNtsInterface,\n setSessionMode,\n setSessionPubKey,\n setShowSidebar,\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n setStartClosingLogin,\n setUsername,\n setUserChain,\n setViewMode,\n setWalletPubKey,\n showSidebar,\n startClosingLogin,\n showDynamicWidget,\n setShowDynamicWidget,\n darkMode,\n sessionMode,\n faucetUrl,\n setNordUser,\n }}\n >\n {sessionMode === N1SessionMode.Nord ? (\n <NordProvider>\n <>\n {children}\n <N1WalletModal />\n <Suspense fallback={null}>\n <LazyWalletProvider />\n </Suspense>\n </>\n </NordProvider>\n ) : (\n <>\n {children}\n <N1WalletModal />\n <Suspense fallback={null}>\n <LazyWalletProvider />\n </Suspense>\n </>\n )}\n </N1InternalWalletContext.Provider>\n </N1WalletContext.Provider>\n </WalletErrorBoundary>\n );\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { WalletError } from '../errors/types';
|
|
3
|
+
declare class WalletErrorBoundary extends React.Component<{
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
onError: (error: WalletError) => void;
|
|
6
|
+
}> {
|
|
7
|
+
componentDidCatch(error: Error): void;
|
|
8
|
+
render(): React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export default WalletErrorBoundary;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
var __extends = (this && this.__extends) || (function () {
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
8
|
+
return function (d, b) {
|
|
9
|
+
if (typeof b !== "function" && b !== null)
|
|
10
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
+
extendStatics(d, b);
|
|
12
|
+
function __() { this.constructor = d; }
|
|
13
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
import React from 'react';
|
|
17
|
+
import { WalletError, WalletErrorCode } from '../errors/types';
|
|
18
|
+
// Error boundary to catch WalletErrors
|
|
19
|
+
var WalletErrorBoundary = /** @class */ (function (_super) {
|
|
20
|
+
__extends(WalletErrorBoundary, _super);
|
|
21
|
+
function WalletErrorBoundary() {
|
|
22
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
23
|
+
}
|
|
24
|
+
WalletErrorBoundary.prototype.componentDidCatch = function (error) {
|
|
25
|
+
if (error instanceof WalletError) {
|
|
26
|
+
this.props.onError(error);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Convert unknown errors to WalletError
|
|
30
|
+
this.props.onError(new WalletError(WalletErrorCode.UNKNOWN, error.message || 'An unexpected error occurred', { originalError: error }));
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
WalletErrorBoundary.prototype.render = function () {
|
|
34
|
+
return this.props.children;
|
|
35
|
+
};
|
|
36
|
+
return WalletErrorBoundary;
|
|
37
|
+
}(React.Component));
|
|
38
|
+
export default WalletErrorBoundary;
|
|
39
|
+
//# sourceMappingURL=WalletErrorBoundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletErrorBoundary.js","sourceRoot":"","sources":["../../src/Provider/WalletErrorBoundary.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/D,uCAAuC;AACvC;IAAkC,uCAGhC;IAHF;;IAsBA,CAAC;IAlBC,+CAAiB,GAAjB,UAAkB,KAAY;QAC5B,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAChB,IAAI,WAAW,CACb,eAAe,CAAC,OAAO,EACvB,KAAK,CAAC,OAAO,IAAI,8BAA8B,EAC/C,EAAE,aAAa,EAAE,KAAK,EAAE,CACzB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oCAAM,GAAN;QACE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;IACH,0BAAC;AAAD,CAAC,AAtBD,CAAkC,KAAK,CAAC,SAAS,GAsBhD;AAED,eAAe,mBAAmB,CAAC","sourcesContent":["import React from 'react';\nimport { WalletError, WalletErrorCode } from '../errors/types';\n\n// Error boundary to catch WalletErrors\nclass WalletErrorBoundary extends React.Component<{\n children: React.ReactNode;\n onError: (error: WalletError) => void;\n}> {\n componentDidCatch(error: Error) {\n if (error instanceof WalletError) {\n this.props.onError(error);\n } else {\n // Convert unknown errors to WalletError\n this.props.onError(\n new WalletError(\n WalletErrorCode.UNKNOWN,\n error.message || 'An unexpected error occurred',\n { originalError: error }\n )\n );\n }\n }\n\n render() {\n return this.props.children;\n }\n}\n\nexport default WalletErrorBoundary; "]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { N1SessionMode } from '../types';
|
|
3
|
+
interface UseNordUserInitializationParams {
|
|
4
|
+
sessionMode: N1SessionMode;
|
|
5
|
+
dynamicWallet: any;
|
|
6
|
+
address: string;
|
|
7
|
+
nord: any;
|
|
8
|
+
signMessageWithSessionKey: ((message: any) => Promise<any>) | null;
|
|
9
|
+
signMessageWithWalletKey: ((message: any) => Promise<any>) | null;
|
|
10
|
+
signTransactionWithWalletKey: ((transaction: any) => Promise<any>) | null;
|
|
11
|
+
sessionPubKey: Uint8Array | null;
|
|
12
|
+
nordUser: any;
|
|
13
|
+
setNordUser: (user: any) => void;
|
|
14
|
+
setSessionPubKey: (pubKey: Uint8Array) => void;
|
|
15
|
+
setSignMessageWithSessionKey: React.Dispatch<React.SetStateAction<((message: any) => Promise<any>) | null>>;
|
|
16
|
+
setSignMessageWithWalletKey: React.Dispatch<React.SetStateAction<((message: any) => Promise<any>) | null>>;
|
|
17
|
+
setSignTransactionWithWalletKey: React.Dispatch<React.SetStateAction<((transaction: any) => Promise<any>) | null>>;
|
|
18
|
+
}
|
|
19
|
+
export declare function useNordUserInitialization({ sessionMode, dynamicWallet, address, nord, signMessageWithSessionKey, signMessageWithWalletKey, signTransactionWithWalletKey, sessionPubKey, nordUser, setNordUser, setSessionPubKey, setSignMessageWithSessionKey, setSignMessageWithWalletKey, setSignTransactionWithWalletKey, }: UseNordUserInitializationParams): void;
|
|
20
|
+
export {};
|