@n1xyz/wallet-widget 0.0.27 → 0.0.28
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/Modal/NTSFlow/views/CreateSessionView.js +1 -2
- package/dist/Modal/NTSFlow/views/CreateSessionView.js.map +1 -1
- package/dist/Modal/NordFlow/context/DepositContext.js +1 -2
- package/dist/Modal/NordFlow/context/DepositContext.js.map +1 -1
- package/dist/Provider/hooks/useNordUserInitialization.js +18 -56
- package/dist/Provider/hooks/useNordUserInitialization.js.map +1 -1
- package/dist/Provider/types.d.ts +0 -2
- package/dist/Provider/types.js.map +1 -1
- package/package.json +12 -12
|
@@ -51,7 +51,7 @@ export function CreateSessionView() {
|
|
|
51
51
|
var _b = useState(false), isPressed = _b[0], setIsPressed = _b[1];
|
|
52
52
|
var _c = useState(null), NTSComponents = _c[0], setNTSComponents = _c[1];
|
|
53
53
|
var _d = useState(null), keyPair = _d[0], setKeyPair = _d[1];
|
|
54
|
-
var _e = useN1WalletInternalContext(), setViewMode = _e.setViewMode, setUsername = _e.setUsername, setStartClosingLogin = _e.setStartClosingLogin, setIsConnected = _e.setIsConnected, dynamicWallet = _e.dynamicWallet, handleError = _e.handleError, setSessionPubKey = _e.setSessionPubKey, setSignMessageWithSessionKey = _e.setSignMessageWithSessionKey, dynamicHandleLogOut = _e.dynamicHandleLogOut, setDynamicWallet = _e.setDynamicWallet, setAddress = _e.setAddress
|
|
54
|
+
var _e = useN1WalletInternalContext(), setViewMode = _e.setViewMode, setUsername = _e.setUsername, setStartClosingLogin = _e.setStartClosingLogin, setIsConnected = _e.setIsConnected, dynamicWallet = _e.dynamicWallet, handleError = _e.handleError, setSessionPubKey = _e.setSessionPubKey, setSignMessageWithSessionKey = _e.setSignMessageWithSessionKey, dynamicHandleLogOut = _e.dynamicHandleLogOut, setDynamicWallet = _e.setDynamicWallet, setAddress = _e.setAddress;
|
|
55
55
|
var _f = useN1WalletContext(), ntsInterface = _f.ntsInterface, walletPubKey = _f.walletPubKey, address = _f.address;
|
|
56
56
|
// Initialize NTS SDK and generate key pair
|
|
57
57
|
useEffect(function () {
|
|
@@ -139,7 +139,6 @@ export function CreateSessionView() {
|
|
|
139
139
|
},
|
|
140
140
|
],
|
|
141
141
|
};
|
|
142
|
-
setSignMessageWithWalletKey(function () { return signWithWallet; });
|
|
143
142
|
tx = new NTSComponents.Transaction(transactionData, walletPubKey);
|
|
144
143
|
return [4 /*yield*/, tx.signWithWalletFunction(signWithWallet)];
|
|
145
144
|
case 2:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateSessionView.js","sourceRoot":"","sources":["../../../../src/Modal/NTSFlow/views/CreateSessionView.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport { ANIMATION_EASE } from '../../NordFlow/constants';\nimport { WalletError, WalletErrorCode } from '../../../errors/types';\nimport {\n createWebSession,\n generateSessionKeyPair,\n getUser,\n storeSessionKeysInLocalStorage,\n} from '../../../Logic/utils';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { N1ModalViewMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { BackButton } from '../components/BackButton';\nimport { ModalHeader } from '../components/ModalHeader';\nimport { signEd25519 } from '@n1xyz/nts-sdk';\n\nexport function CreateSessionView() {\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n const [NTSComponents, setNTSComponents] = useState<any>(null);\n const [keyPair, setKeyPair] = useState<{\n publicKey: Uint8Array;\n privateKey: Uint8Array;\n } | null>(null);\n\n const {\n setViewMode,\n setUsername,\n setStartClosingLogin,\n setIsConnected,\n dynamicWallet,\n handleError,\n setSessionPubKey,\n setSignMessageWithSessionKey,\n dynamicHandleLogOut,\n setDynamicWallet,\n setAddress,\n setSignMessageWithWalletKey,\n } = useN1WalletInternalContext();\n\n const { ntsInterface, walletPubKey, address } = useN1WalletContext();\n\n // Initialize NTS SDK and generate key pair\n useEffect(() => {\n const loadNTSSDK = async () => {\n try {\n const { Transaction, AdminAction, CoreApps } = await import(\n '@n1xyz/nts-sdk'\n );\n setNTSComponents({ Transaction, AdminAction, CoreApps });\n const newKeyPair = await generateSessionKeyPair();\n setKeyPair(newKeyPair);\n } catch (error) {\n handleError(\n new WalletError(\n WalletErrorCode.CONNECTION_FAILED,\n 'Failed to initialize NTS SDK',\n { originalError: error }\n )\n );\n }\n };\n loadNTSSDK();\n }, [handleError]);\n\n const signWithWallet = async (msg: string): Promise<Uint8Array> => {\n try {\n if (!dynamicWallet) {\n throw new WalletError(\n WalletErrorCode.WALLET_NOT_FOUND,\n 'Wallet not found for signing'\n );\n }\n\n if (dynamicWallet.chain === 'SOL') {\n const signature = await dynamicWallet.signMessage(msg);\n const binaryString = atob(signature);\n const signatureUint8Array = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n signatureUint8Array[i] = binaryString.charCodeAt(i);\n }\n return signatureUint8Array;\n }\n\n const sig = (await dynamicWallet.signMessage(msg)) as string;\n logger.debug('Wallet signature received', { signature: sig });\n return Uint8Array.from(Buffer.from(sig.slice(2), 'hex'));\n } catch (error) {\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign message with wallet',\n { originalError: error }\n );\n }\n };\n\n const handleSign = async () => {\n logger.debug('handleSign');\n\n if (!NTSComponents || !keyPair) {\n logger.warn('Required components not initialized');\n return;\n }\n\n setViewMode(N1ModalViewMode.Signing);\n\n try {\n const sessionKeyHex = Buffer.from(keyPair.publicKey).toString('hex');\n logger.debug('Generated session key', { sessionKey: sessionKeyHex });\n\n // Create and sign transaction that registers the session key with Core\n const transactionData = {\n appId: NTSComponents.CoreApps.Admin,\n action: NTSComponents.AdminAction.addSessionKey,\n framework: 'ts',\n data: [\n {\n sessionKey: sessionKeyHex,\n appId: 'hub',\n },\n ],\n };\n\n setSignMessageWithWalletKey(() => signWithWallet);\n const tx = new NTSComponents.Transaction(transactionData, walletPubKey!);\n await tx.signWithWalletFunction(signWithWallet);\n try {\n const txRes = await ntsInterface.sendTransaction(\n tx,\n tx.signature!,\n walletPubKey\n );\n if (txRes.success) {\n logger.debug('txRes', txRes);\n } else {\n logger.debug('txRes', txRes);\n throw new WalletError(\n WalletErrorCode.TRANSACTION_FAILED,\n 'Transaction failed'\n );\n }\n } catch (_) {\n throw new WalletError(\n WalletErrorCode.TRANSACTION_FAILED,\n 'Transaction did not succeed'\n );\n }\n\n // Create session signing function\n const signFn = async (message: Uint8Array) => {\n try {\n return await signEd25519(message, keyPair.privateKey as Uint8Array);\n } catch (_) {\n logger.error('Error signing with Ed25519:', _);\n throw _;\n }\n };\n\n // Store session keys\n logger.debug('Storing session keys');\n storeSessionKeysInLocalStorage({\n privKey: keyPair.privateKey as Uint8Array,\n publicKey: keyPair.publicKey as Uint8Array,\n walletPublicKey: address,\n chainName: dynamicWallet!.chain,\n });\n setSessionPubKey(keyPair.publicKey);\n setSignMessageWithSessionKey(() => signFn);\n\n // Initialize web session with Argus who verifies that the session is\n // registered with Core, and if so, grants you access to its user metadata db\n await createWebSession(signFn, keyPair.publicKey, walletPubKey);\n\n // Check for existing user\n // TODO: handle case for auth.users, currently user.name is a wallet_only_users namespacing\n const user = await getUser();\n if (user?.name) {\n logger.info('Existing user found, completing login');\n setUsername(user.name);\n localStorage.setItem(`n1_${address}_username`, user.name);\n setStartClosingLogin(true);\n setIsConnected(true);\n } else {\n logger.info('No user found, transitioning to user creation');\n setViewMode(N1ModalViewMode.CreatingUser);\n }\n } catch (error: any) {\n logger.error('Session creation failed:', error);\n if (error.name === 'WalletError') {\n handleError(error);\n } else {\n handleError(\n new WalletError(\n WalletErrorCode.CONNECTION_FAILED,\n 'Failed to create session',\n { originalError: JSON.stringify(error) }\n )\n );\n }\n\n setViewMode(N1ModalViewMode.CreateSession);\n }\n };\n\n return (\n <div className=\"bg-n1-ww-gray-50 dark:bg-n1-ww-gray-950 relative border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-md transition-[max-width,transform,opacity] duration-[3000ms] ease-[cubic-bezier(0.16,1,0.3,1)] w-full max-w-sm m-4 origin-center will-change-[max-width,transform,opacity]\">\n <div className=\"p-6 border-b border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <ModalHeader />\n </div>\n\n <div className=\"p-6 overflow-hidden relative\">\n <div className=\"space-y-4\">\n <div className=\"text-center\">\n <h3 className=\"text-xl font-medium text-n1-ww-gray-900 dark:text-white mb-2\">\n Create Session\n </h3>\n <p className=\"text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n Please authenticate to create a new session.\n </p>\n </div>\n\n <button\n onClick={handleSign}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsPressed(false);\n }}\n onMouseDown={() => setIsPressed(true)}\n onMouseUp={() => setIsPressed(false)}\n disabled={!NTSComponents || !keyPair}\n className={`\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-ww-gray-100 dark:bg-neutral-950 py-4 text-left\n transition-all duration-300 ${ANIMATION_EASE}\n ${!NTSComponents || !keyPair\n ? 'cursor-not-allowed border-n1-ww-gray-200 dark:border-n1-ww-gray-800 opacity-50'\n : 'cursor-pointer border-n1-ww-gray-200 dark:border-n1-ww-gray-800 hover:border-n1-ww-gray-400 dark:hover:border-white/60'\n }\n `}\n style={{\n transform:\n isPressed && (!NTSComponents || !keyPair)\n ? 'scale(0.98)'\n : isHovered && (!NTSComponents || !keyPair)\n ? 'scale(0.99)'\n : 'scale(1)',\n }}\n >\n <div className=\"relative z-[200] pl-4 isolate\">\n <div className=\"flex items-center justify-start\">\n <span\n className={`\n text-base font-medium tracking-wide transition-colors duration-300 ${ANIMATION_EASE}\n text-n1-ww-gray-500 dark:text-neutral-400 group-hover:text-n1-ww-gray-900 dark:group-hover:text-white\n `}\n >\n Authenticate\n </span>\n </div>\n </div>\n </button>\n\n <BackButton\n onClick={() => {\n logger.debug('BackButton clicked');\n setDynamicWallet(null);\n setAddress('');\n dynamicHandleLogOut();\n setViewMode(N1ModalViewMode.Connect);\n }}\n />\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CreateSessionView.js","sourceRoot":"","sources":["../../../../src/Modal/NTSFlow/views/CreateSessionView.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport { ANIMATION_EASE } from '../../NordFlow/constants';\nimport { WalletError, WalletErrorCode } from '../../../errors/types';\nimport {\n createWebSession,\n generateSessionKeyPair,\n getUser,\n storeSessionKeysInLocalStorage,\n} from '../../../Logic/utils';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { N1ModalViewMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { BackButton } from '../components/BackButton';\nimport { ModalHeader } from '../components/ModalHeader';\nimport { signEd25519 } from '@n1xyz/nts-sdk';\n\nexport function CreateSessionView() {\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n const [NTSComponents, setNTSComponents] = useState<any>(null);\n const [keyPair, setKeyPair] = useState<{\n publicKey: Uint8Array;\n privateKey: Uint8Array;\n } | null>(null);\n\n const {\n setViewMode,\n setUsername,\n setStartClosingLogin,\n setIsConnected,\n dynamicWallet,\n handleError,\n setSessionPubKey,\n setSignMessageWithSessionKey,\n dynamicHandleLogOut,\n setDynamicWallet,\n setAddress,\n } = useN1WalletInternalContext();\n\n const { ntsInterface, walletPubKey, address } = useN1WalletContext();\n\n // Initialize NTS SDK and generate key pair\n useEffect(() => {\n const loadNTSSDK = async () => {\n try {\n const { Transaction, AdminAction, CoreApps } = await import(\n '@n1xyz/nts-sdk'\n );\n setNTSComponents({ Transaction, AdminAction, CoreApps });\n const newKeyPair = await generateSessionKeyPair();\n setKeyPair(newKeyPair);\n } catch (error) {\n handleError(\n new WalletError(\n WalletErrorCode.CONNECTION_FAILED,\n 'Failed to initialize NTS SDK',\n { originalError: error }\n )\n );\n }\n };\n loadNTSSDK();\n }, [handleError]);\n\n const signWithWallet = async (msg: string): Promise<Uint8Array> => {\n try {\n if (!dynamicWallet) {\n throw new WalletError(\n WalletErrorCode.WALLET_NOT_FOUND,\n 'Wallet not found for signing'\n );\n }\n\n if (dynamicWallet.chain === 'SOL') {\n const signature = await dynamicWallet.signMessage(msg);\n const binaryString = atob(signature);\n const signatureUint8Array = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n signatureUint8Array[i] = binaryString.charCodeAt(i);\n }\n return signatureUint8Array;\n }\n\n const sig = (await dynamicWallet.signMessage(msg)) as string;\n logger.debug('Wallet signature received', { signature: sig });\n return Uint8Array.from(Buffer.from(sig.slice(2), 'hex'));\n } catch (error) {\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign message with wallet',\n { originalError: error }\n );\n }\n };\n\n const handleSign = async () => {\n logger.debug('handleSign');\n\n if (!NTSComponents || !keyPair) {\n logger.warn('Required components not initialized');\n return;\n }\n\n setViewMode(N1ModalViewMode.Signing);\n\n try {\n const sessionKeyHex = Buffer.from(keyPair.publicKey).toString('hex');\n logger.debug('Generated session key', { sessionKey: sessionKeyHex });\n\n // Create and sign transaction that registers the session key with Core\n const transactionData = {\n appId: NTSComponents.CoreApps.Admin,\n action: NTSComponents.AdminAction.addSessionKey,\n framework: 'ts',\n data: [\n {\n sessionKey: sessionKeyHex,\n appId: 'hub',\n },\n ],\n };\n\n const tx = new NTSComponents.Transaction(transactionData, walletPubKey!);\n await tx.signWithWalletFunction(signWithWallet);\n try {\n const txRes = await ntsInterface.sendTransaction(\n tx,\n tx.signature!,\n walletPubKey\n );\n if (txRes.success) {\n logger.debug('txRes', txRes);\n } else {\n logger.debug('txRes', txRes);\n throw new WalletError(\n WalletErrorCode.TRANSACTION_FAILED,\n 'Transaction failed'\n );\n }\n } catch (_) {\n throw new WalletError(\n WalletErrorCode.TRANSACTION_FAILED,\n 'Transaction did not succeed'\n );\n }\n\n // Create session signing function\n const signFn = async (message: Uint8Array) => {\n try {\n return await signEd25519(message, keyPair.privateKey as Uint8Array);\n } catch (_) {\n logger.error('Error signing with Ed25519:', _);\n throw _;\n }\n };\n\n // Store session keys\n logger.debug('Storing session keys');\n storeSessionKeysInLocalStorage({\n privKey: keyPair.privateKey as Uint8Array,\n publicKey: keyPair.publicKey as Uint8Array,\n walletPublicKey: address,\n chainName: dynamicWallet!.chain,\n });\n setSessionPubKey(keyPair.publicKey);\n setSignMessageWithSessionKey(() => signFn);\n\n // Initialize web session with Argus who verifies that the session is\n // registered with Core, and if so, grants you access to its user metadata db\n await createWebSession(signFn, keyPair.publicKey, walletPubKey);\n\n // Check for existing user\n // TODO: handle case for auth.users, currently user.name is a wallet_only_users namespacing\n const user = await getUser();\n if (user?.name) {\n logger.info('Existing user found, completing login');\n setUsername(user.name);\n localStorage.setItem(`n1_${address}_username`, user.name);\n setStartClosingLogin(true);\n setIsConnected(true);\n } else {\n logger.info('No user found, transitioning to user creation');\n setViewMode(N1ModalViewMode.CreatingUser);\n }\n } catch (error: any) {\n logger.error('Session creation failed:', error);\n if (error.name === 'WalletError') {\n handleError(error);\n } else {\n handleError(\n new WalletError(\n WalletErrorCode.CONNECTION_FAILED,\n 'Failed to create session',\n { originalError: JSON.stringify(error) }\n )\n );\n }\n\n setViewMode(N1ModalViewMode.CreateSession);\n }\n };\n\n return (\n <div className=\"bg-n1-ww-gray-50 dark:bg-n1-ww-gray-950 relative border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-md transition-[max-width,transform,opacity] duration-[3000ms] ease-[cubic-bezier(0.16,1,0.3,1)] w-full max-w-sm m-4 origin-center will-change-[max-width,transform,opacity]\">\n <div className=\"p-6 border-b border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <ModalHeader />\n </div>\n\n <div className=\"p-6 overflow-hidden relative\">\n <div className=\"space-y-4\">\n <div className=\"text-center\">\n <h3 className=\"text-xl font-medium text-n1-ww-gray-900 dark:text-white mb-2\">\n Create Session\n </h3>\n <p className=\"text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n Please authenticate to create a new session.\n </p>\n </div>\n\n <button\n onClick={handleSign}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsPressed(false);\n }}\n onMouseDown={() => setIsPressed(true)}\n onMouseUp={() => setIsPressed(false)}\n disabled={!NTSComponents || !keyPair}\n className={`\n group relative w-full overflow-hidden rounded-md border-2 bg-n1-ww-gray-100 dark:bg-neutral-950 py-4 text-left\n transition-all duration-300 ${ANIMATION_EASE}\n ${!NTSComponents || !keyPair\n ? 'cursor-not-allowed border-n1-ww-gray-200 dark:border-n1-ww-gray-800 opacity-50'\n : 'cursor-pointer border-n1-ww-gray-200 dark:border-n1-ww-gray-800 hover:border-n1-ww-gray-400 dark:hover:border-white/60'\n }\n `}\n style={{\n transform:\n isPressed && (!NTSComponents || !keyPair)\n ? 'scale(0.98)'\n : isHovered && (!NTSComponents || !keyPair)\n ? 'scale(0.99)'\n : 'scale(1)',\n }}\n >\n <div className=\"relative z-[200] pl-4 isolate\">\n <div className=\"flex items-center justify-start\">\n <span\n className={`\n text-base font-medium tracking-wide transition-colors duration-300 ${ANIMATION_EASE}\n text-n1-ww-gray-500 dark:text-neutral-400 group-hover:text-n1-ww-gray-900 dark:group-hover:text-white\n `}\n >\n Authenticate\n </span>\n </div>\n </div>\n </button>\n\n <BackButton\n onClick={() => {\n logger.debug('BackButton clicked');\n setDynamicWallet(null);\n setAddress('');\n dynamicHandleLogOut();\n setViewMode(N1ModalViewMode.Connect);\n }}\n />\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -51,7 +51,7 @@ export var DepositProvider = function (_a) {
|
|
|
51
51
|
// Get flow state context
|
|
52
52
|
var _b = useFlowStateContext(), state = _b.state, context = _b.context, transition = _b.transition, updateContext = _b.updateContext;
|
|
53
53
|
// Get wallet context
|
|
54
|
-
var _c = useN1WalletContext(), address = _c.address, nord = _c.nord,
|
|
54
|
+
var _c = useN1WalletContext(), address = _c.address, nord = _c.nord, signMessageWithSessionKey = _c.signMessageWithSessionKey, nordUser = _c.nordUser;
|
|
55
55
|
var sessionMode = useN1WalletInternalContext().sessionMode;
|
|
56
56
|
// chain
|
|
57
57
|
var _d = useState(context.selectedChain), selectedChain = _d[0], setSelectedChain = _d[1];
|
|
@@ -231,7 +231,6 @@ export var DepositProvider = function (_a) {
|
|
|
231
231
|
transition,
|
|
232
232
|
handleError,
|
|
233
233
|
nord,
|
|
234
|
-
signMessageWithWalletKey,
|
|
235
234
|
signMessageWithSessionKey,
|
|
236
235
|
nordUser,
|
|
237
236
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DepositContext.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/context/DepositContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport {\n getExplorerUrl,\n TransactionResult,\n} from '../../../Logic/transactionManager';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { N1SessionMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { AVAILABLE_CHAINS } from '../constants';\nimport { FlowState } from '../types';\nimport { isNordConfigured } from '../utils/nordUtils';\nimport { useFlowStateContext } from './FlowContext';\n\n// Define the shape of the deposit context value\nexport interface DepositContextValue {\n amount: string;\n isDepositing: boolean;\n transactionId: string | null;\n transactionResult: TransactionResult | null;\n authStatus: 'loading' | 'success' | 'error';\n authErrorMessage: string | null;\n authStatusMessage: string | null;\n updateAmount: (newAmount: string) => void;\n startDeposit: () => Promise<void>;\n completeDeposit: () => void;\n performAuth: () => Promise<void>;\n}\n\n// Create the context with a default value\nconst DepositContext = createContext<DepositContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface DepositProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the deposit context\n */\nexport const DepositProvider: React.FC<DepositProviderProps> = ({\n children,\n}) => {\n // Get flow state context\n const {\n state,\n context,\n transition,\n updateContext,\n } = useFlowStateContext();\n\n // Get wallet context\n const {\n address,\n nord,\n signMessageWithWalletKey,\n signMessageWithSessionKey,\n nordUser,\n } = useN1WalletContext();\n const { sessionMode } = useN1WalletInternalContext();\n\n // chain\n const [selectedChain, setSelectedChain] = useState<string | null>(\n context.selectedChain\n );\n\n // transaction & deposit\n const [amount, setAmount] = useState(context.amount);\n const [isDepositing, setIsDepositing] = useState(false);\n const [transactionId, setTransactionId] = useState<string | null>(context.transactionId);\n const [transactionResult, setTransactionResult] = useState<TransactionResult | null>(null);\n\n\n // auth\n const [authStatus, setAuthStatus] = useState<'loading' | 'success' | 'error'>('loading');\n const [authErrorMessage, setAuthErrorMessage] = useState<string | null>(null);\n const [authStatusMessage, setAuthStatusMessage] = useState<string | null>(null);\n\n // Use refs to track previous values\n const prevContextRef = useRef(context);\n\n\n /**\n * Handle an error by transitioning to error state\n */\n const handleError = useCallback(\n (error: Error) => {\n logger.error('Flow error:', error);\n transition(FlowState.ERROR, { error });\n },\n [transition]\n );\n\n /**\n * Authenticate session\n */\n const performAuth = useCallback(async () => {\n try {\n // Step 1: Tell user to sign transaction\n setAuthStatusMessage(\n 'Please sign the transaction to authenticate your session'\n );\n\n if (!nordUser) {\n throw new Error('Nord user is not initialized');\n }\n\n // Step 2: Call nordUser.refreshSession and get sessionId\n setAuthStatusMessage('Session is being authenticated...');\n\n // Get the session public key from the nordUser\n const sessionPubKey = nordUser.sessionPubKey;\n if (!sessionPubKey) {\n throw new Error('Session public key is not available');\n }\n\n // Refresh the session\n await nordUser.refreshSession(sessionPubKey);\n await nordUser.updateAccountId();\n\n // Get the sessionId after refresh\n const sessionId = nordUser.sessionId;\n if (!sessionId) {\n throw new Error('Failed to get session ID after refresh');\n }\n\n logger.debug('Session refreshed successfully', {\n sessionId: sessionId.toString(),\n });\n\n // Step 3: Store sessionId in localStorage\n if (address) {\n const sessionIdKey = `n1_sessionId_${address}`;\n localStorage.setItem(sessionIdKey, sessionId.toString());\n logger.debug('Stored sessionId in localStorage', { key: sessionIdKey });\n }\n\n // Step 4: Update status to success\n setAuthStatus('success');\n\n // updateContext({ hasActiveSession: true });\n setTimeout(() => {\n transition(FlowState.FINAL_SUCCESS, { hasActiveSession: true, hasNordAccount: true });\n }, 100);\n\n } catch (error) {\n console.error('Authentication error:', error);\n setAuthStatus('error');\n setAuthErrorMessage(\n error instanceof Error ? error.message : 'Unknown error occurred'\n );\n }\n }, [updateContext, transition, address, nordUser]);\n\n /**\n * Update amount for deposit\n */\n const updateAmount = useCallback(\n (newAmount: string) => {\n setAmount(newAmount);\n if (state === FlowState.AMOUNT_INPUT) {\n updateContext({ amount: newAmount });\n } else {\n transition(state, { amount: newAmount });\n }\n },\n [state, transition, updateContext]\n );\n\n /**\n * Start deposit process\n */\n const startDeposit = useCallback(async () => {\n if (isDepositing) return;\n\n logger.debug('Starting deposit process');\n\n if (!amount || parseFloat(amount) <= 0) {\n handleError(new Error('Invalid amount'));\n return;\n }\n\n setIsDepositing(true);\n transition(FlowState.DEPOSIT_PROGRESS);\n\n try {\n const usdcToken = nord!.tokens.find((t: any) => t.symbol === 'USDC');\n\n const txId = await nordUser.depositSpl(\n parseFloat(amount),\n usdcToken!.tokenId\n );\n\n let accountInitialized = false;\n for (let i = 0; i < 70; i++) {\n const exists = await nord?.getUser({ pubkey: address });\n if (exists) {\n accountInitialized = true;\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n\n if (!accountInitialized) {\n throw new Error('Account failed to intialize on N1.');\n }\n\n logger.debug('Deposit successful using Nord-TS', txId);\n\n // Create transaction result object immediately after successful deposit\n const result: TransactionResult = {\n success: true,\n transactionId: txId,\n amount,\n tokenSymbol: 'USDC',\n fromAddress: address || 'Your Wallet',\n toAddress: 'Exchange Account',\n networkName: selectedChain!,\n status: 'Completed',\n explorerUrl: getExplorerUrl(txId),\n };\n\n // Update state with transaction result\n setTransactionId(txId);\n setTransactionResult(result);\n logger.debug('Transaction completed successfully');\n transition(FlowState.DEPOSIT_SUCCESS, { transactionId: txId, hasNordAccount: true });\n } catch (depositError) {\n logger.warn('Error using depositSpl, falling back to mock implementation:', depositError);\n setIsDepositing(false);\n const errorMessage = depositError instanceof Error\n ? depositError.message\n : 'Failed to process deposit';\n\n transition(FlowState.AMOUNT_INPUT, {\n depositError: errorMessage\n });\n return; // Exit early\n }\n }, [\n isDepositing,\n selectedChain,\n amount,\n address,\n sessionMode,\n transition,\n handleError,\n nord,\n signMessageWithWalletKey,\n signMessageWithSessionKey,\n nordUser,\n ]);\n\n /**\n * Complete the deposit process and move to the next screen\n */\n const completeDeposit = useCallback(() => {\n // Check if user has an active session to determine the next state\n if (context.hasActiveSession) {\n // If user has an active session, go directly to FINAL_SUCCESS\n transition(FlowState.FINAL_SUCCESS, { hasNordAccount: true, hasActiveSession: true });\n } else {\n // Check if there's a sessionId stored in localStorage\n const sessionIdKey = `n1_sessionId_${address}`;\n const storedSessionId = localStorage.getItem(sessionIdKey);\n\n if (storedSessionId !== null) {\n // If we have a sessionId in localStorage (even if it's 0), go directly to FINAL_SUCCESS\n transition(FlowState.FINAL_SUCCESS, { hasNordAccount: true, hasActiveSession: true });\n } else {\n // If user doesn't have an active session and no sessionId in localStorage, go to NORD_AUTH\n transition(FlowState.AUTH_LOADING, { hasNordAccount: true });\n }\n }\n }, [context.hasActiveSession, transition, address]);\n\n\n\n\n\n // Create the context value\n const contextValue: DepositContextValue = {\n amount,\n isDepositing,\n transactionId,\n transactionResult,\n authStatus,\n authErrorMessage,\n authStatusMessage,\n updateAmount,\n startDeposit,\n completeDeposit,\n performAuth,\n };\n\n\n /**\n * Update state based on context changes\n */\n useEffect(() => {\n const prevContext = prevContextRef.current;\n\n // Only update state if the relevant context values have actually changed\n if (context.selectedChain !== prevContext.selectedChain) {\n setSelectedChain(context.selectedChain);\n }\n\n if (context.amount !== prevContext.amount) {\n setAmount(context.amount);\n }\n\n if (context.transactionId !== prevContext.transactionId) {\n setTransactionId(context.transactionId);\n }\n\n // Update the ref to the current context\n prevContextRef.current = context;\n }, [context]);\n\n\n\n return (\n <DepositContext.Provider value={contextValue}>\n {children}\n </DepositContext.Provider>\n );\n};\n\n/**\n * Hook to use the deposit context\n */\nexport const useDepositContext = (): DepositContextValue => {\n const context = useContext(DepositContext);\n if (context === undefined) {\n throw new Error('useDepositContext must be used within a DepositProvider');\n }\n return context;\n}; "]}
|
|
1
|
+
{"version":3,"file":"DepositContext.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/context/DepositContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport {\n getExplorerUrl,\n TransactionResult,\n} from '../../../Logic/transactionManager';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { N1SessionMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { AVAILABLE_CHAINS } from '../constants';\nimport { FlowState } from '../types';\nimport { isNordConfigured } from '../utils/nordUtils';\nimport { useFlowStateContext } from './FlowContext';\n\n// Define the shape of the deposit context value\nexport interface DepositContextValue {\n amount: string;\n isDepositing: boolean;\n transactionId: string | null;\n transactionResult: TransactionResult | null;\n authStatus: 'loading' | 'success' | 'error';\n authErrorMessage: string | null;\n authStatusMessage: string | null;\n updateAmount: (newAmount: string) => void;\n startDeposit: () => Promise<void>;\n completeDeposit: () => void;\n performAuth: () => Promise<void>;\n}\n\n// Create the context with a default value\nconst DepositContext = createContext<DepositContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface DepositProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the deposit context\n */\nexport const DepositProvider: React.FC<DepositProviderProps> = ({\n children,\n}) => {\n // Get flow state context\n const {\n state,\n context,\n transition,\n updateContext,\n } = useFlowStateContext();\n\n // Get wallet context\n const {\n address,\n nord,\n signMessageWithSessionKey,\n nordUser,\n } = useN1WalletContext();\n const { sessionMode } = useN1WalletInternalContext();\n\n // chain\n const [selectedChain, setSelectedChain] = useState<string | null>(\n context.selectedChain\n );\n\n // transaction & deposit\n const [amount, setAmount] = useState(context.amount);\n const [isDepositing, setIsDepositing] = useState(false);\n const [transactionId, setTransactionId] = useState<string | null>(context.transactionId);\n const [transactionResult, setTransactionResult] = useState<TransactionResult | null>(null);\n\n\n // auth\n const [authStatus, setAuthStatus] = useState<'loading' | 'success' | 'error'>('loading');\n const [authErrorMessage, setAuthErrorMessage] = useState<string | null>(null);\n const [authStatusMessage, setAuthStatusMessage] = useState<string | null>(null);\n\n // Use refs to track previous values\n const prevContextRef = useRef(context);\n\n\n /**\n * Handle an error by transitioning to error state\n */\n const handleError = useCallback(\n (error: Error) => {\n logger.error('Flow error:', error);\n transition(FlowState.ERROR, { error });\n },\n [transition]\n );\n\n /**\n * Authenticate session\n */\n const performAuth = useCallback(async () => {\n try {\n // Step 1: Tell user to sign transaction\n setAuthStatusMessage(\n 'Please sign the transaction to authenticate your session'\n );\n\n if (!nordUser) {\n throw new Error('Nord user is not initialized');\n }\n\n // Step 2: Call nordUser.refreshSession and get sessionId\n setAuthStatusMessage('Session is being authenticated...');\n\n // Get the session public key from the nordUser\n const sessionPubKey = nordUser.sessionPubKey;\n if (!sessionPubKey) {\n throw new Error('Session public key is not available');\n }\n\n // Refresh the session\n await nordUser.refreshSession(sessionPubKey);\n await nordUser.updateAccountId();\n\n // Get the sessionId after refresh\n const sessionId = nordUser.sessionId;\n if (!sessionId) {\n throw new Error('Failed to get session ID after refresh');\n }\n\n logger.debug('Session refreshed successfully', {\n sessionId: sessionId.toString(),\n });\n\n // Step 3: Store sessionId in localStorage\n if (address) {\n const sessionIdKey = `n1_sessionId_${address}`;\n localStorage.setItem(sessionIdKey, sessionId.toString());\n logger.debug('Stored sessionId in localStorage', { key: sessionIdKey });\n }\n\n // Step 4: Update status to success\n setAuthStatus('success');\n\n // updateContext({ hasActiveSession: true });\n setTimeout(() => {\n transition(FlowState.FINAL_SUCCESS, { hasActiveSession: true, hasNordAccount: true });\n }, 100);\n\n } catch (error) {\n console.error('Authentication error:', error);\n setAuthStatus('error');\n setAuthErrorMessage(\n error instanceof Error ? error.message : 'Unknown error occurred'\n );\n }\n }, [updateContext, transition, address, nordUser]);\n\n /**\n * Update amount for deposit\n */\n const updateAmount = useCallback(\n (newAmount: string) => {\n setAmount(newAmount);\n if (state === FlowState.AMOUNT_INPUT) {\n updateContext({ amount: newAmount });\n } else {\n transition(state, { amount: newAmount });\n }\n },\n [state, transition, updateContext]\n );\n\n /**\n * Start deposit process\n */\n const startDeposit = useCallback(async () => {\n if (isDepositing) return;\n\n logger.debug('Starting deposit process');\n\n if (!amount || parseFloat(amount) <= 0) {\n handleError(new Error('Invalid amount'));\n return;\n }\n\n setIsDepositing(true);\n transition(FlowState.DEPOSIT_PROGRESS);\n\n try {\n const usdcToken = nord!.tokens.find((t: any) => t.symbol === 'USDC');\n\n const txId = await nordUser.depositSpl(\n parseFloat(amount),\n usdcToken!.tokenId\n );\n\n let accountInitialized = false;\n for (let i = 0; i < 70; i++) {\n const exists = await nord?.getUser({ pubkey: address });\n if (exists) {\n accountInitialized = true;\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n\n if (!accountInitialized) {\n throw new Error('Account failed to intialize on N1.');\n }\n\n logger.debug('Deposit successful using Nord-TS', txId);\n\n // Create transaction result object immediately after successful deposit\n const result: TransactionResult = {\n success: true,\n transactionId: txId,\n amount,\n tokenSymbol: 'USDC',\n fromAddress: address || 'Your Wallet',\n toAddress: 'Exchange Account',\n networkName: selectedChain!,\n status: 'Completed',\n explorerUrl: getExplorerUrl(txId),\n };\n\n // Update state with transaction result\n setTransactionId(txId);\n setTransactionResult(result);\n logger.debug('Transaction completed successfully');\n transition(FlowState.DEPOSIT_SUCCESS, { transactionId: txId, hasNordAccount: true });\n } catch (depositError) {\n logger.warn('Error using depositSpl, falling back to mock implementation:', depositError);\n setIsDepositing(false);\n const errorMessage = depositError instanceof Error\n ? depositError.message\n : 'Failed to process deposit';\n\n transition(FlowState.AMOUNT_INPUT, {\n depositError: errorMessage\n });\n return; // Exit early\n }\n }, [\n isDepositing,\n selectedChain,\n amount,\n address,\n sessionMode,\n transition,\n handleError,\n nord,\n signMessageWithSessionKey,\n nordUser,\n ]);\n\n /**\n * Complete the deposit process and move to the next screen\n */\n const completeDeposit = useCallback(() => {\n // Check if user has an active session to determine the next state\n if (context.hasActiveSession) {\n // If user has an active session, go directly to FINAL_SUCCESS\n transition(FlowState.FINAL_SUCCESS, { hasNordAccount: true, hasActiveSession: true });\n } else {\n // Check if there's a sessionId stored in localStorage\n const sessionIdKey = `n1_sessionId_${address}`;\n const storedSessionId = localStorage.getItem(sessionIdKey);\n\n if (storedSessionId !== null) {\n // If we have a sessionId in localStorage (even if it's 0), go directly to FINAL_SUCCESS\n transition(FlowState.FINAL_SUCCESS, { hasNordAccount: true, hasActiveSession: true });\n } else {\n // If user doesn't have an active session and no sessionId in localStorage, go to NORD_AUTH\n transition(FlowState.AUTH_LOADING, { hasNordAccount: true });\n }\n }\n }, [context.hasActiveSession, transition, address]);\n\n\n\n\n\n // Create the context value\n const contextValue: DepositContextValue = {\n amount,\n isDepositing,\n transactionId,\n transactionResult,\n authStatus,\n authErrorMessage,\n authStatusMessage,\n updateAmount,\n startDeposit,\n completeDeposit,\n performAuth,\n };\n\n\n /**\n * Update state based on context changes\n */\n useEffect(() => {\n const prevContext = prevContextRef.current;\n\n // Only update state if the relevant context values have actually changed\n if (context.selectedChain !== prevContext.selectedChain) {\n setSelectedChain(context.selectedChain);\n }\n\n if (context.amount !== prevContext.amount) {\n setAmount(context.amount);\n }\n\n if (context.transactionId !== prevContext.transactionId) {\n setTransactionId(context.transactionId);\n }\n\n // Update the ref to the current context\n prevContextRef.current = context;\n }, [context]);\n\n\n\n return (\n <DepositContext.Provider value={contextValue}>\n {children}\n </DepositContext.Provider>\n );\n};\n\n/**\n * Hook to use the deposit context\n */\nexport const useDepositContext = (): DepositContextValue => {\n const context = useContext(DepositContext);\n if (context === undefined) {\n throw new Error('useDepositContext must be used within a DepositProvider');\n }\n return context;\n}; \n"]}
|
|
@@ -45,50 +45,19 @@ import { N1SessionMode } from '../types';
|
|
|
45
45
|
import { useN1WalletContext, useN1WalletInternalContext } from '../hooks';
|
|
46
46
|
export function useNordUserInitialization() {
|
|
47
47
|
var _this = this;
|
|
48
|
-
var _a = useN1WalletInternalContext(), setNordUser = _a.setNordUser, setSessionPubKey = _a.setSessionPubKey, setSignMessageWithSessionKey = _a.setSignMessageWithSessionKey,
|
|
49
|
-
var _b = useN1WalletContext(), address = _b.address, nordUser = _b.nordUser, sessionMode = _b.sessionMode, nord = _b.nord, signMessageWithSessionKey = _b.signMessageWithSessionKey,
|
|
48
|
+
var _a = useN1WalletInternalContext(), setNordUser = _a.setNordUser, setSessionPubKey = _a.setSessionPubKey, setSignMessageWithSessionKey = _a.setSignMessageWithSessionKey, setSignTransactionWithWalletKey = _a.setSignTransactionWithWalletKey, dynamicWallet = _a.dynamicWallet;
|
|
49
|
+
var _b = useN1WalletContext(), address = _b.address, nordUser = _b.nordUser, sessionMode = _b.sessionMode, nord = _b.nord, signMessageWithSessionKey = _b.signMessageWithSessionKey, signTransactionWithWalletKey = _b.signTransactionWithWalletKey, sessionPubKey = _b.sessionPubKey;
|
|
50
50
|
// First useEffect: Initialize signing functions
|
|
51
51
|
useEffect(function () {
|
|
52
52
|
if (sessionMode !== N1SessionMode.Nord || address === null || address === '') {
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
var createWalletSignFunction = function () {
|
|
56
|
-
if (!dynamicWallet) {
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
var signWithWallet = function (msg) { return __awaiter(_this, void 0, void 0, function () {
|
|
60
|
-
var hexMsg, signature, binaryString, signatureUint8Array, i, error_1;
|
|
61
|
-
return __generator(this, function (_a) {
|
|
62
|
-
switch (_a.label) {
|
|
63
|
-
case 0:
|
|
64
|
-
_a.trys.push([0, 2, , 3]);
|
|
65
|
-
hexMsg = Buffer.from(msg).toString('hex');
|
|
66
|
-
return [4 /*yield*/, dynamicWallet.signMessage(hexMsg)];
|
|
67
|
-
case 1:
|
|
68
|
-
signature = _a.sent();
|
|
69
|
-
binaryString = atob(signature);
|
|
70
|
-
signatureUint8Array = new Uint8Array(binaryString.length);
|
|
71
|
-
for (i = 0; i < binaryString.length; i++) {
|
|
72
|
-
signatureUint8Array[i] = binaryString.charCodeAt(i);
|
|
73
|
-
}
|
|
74
|
-
return [2 /*return*/, signatureUint8Array];
|
|
75
|
-
case 2:
|
|
76
|
-
error_1 = _a.sent();
|
|
77
|
-
console.error('Error signing with wallet:', error_1);
|
|
78
|
-
throw new WalletError(WalletErrorCode.USER_REJECTED, 'Failed to sign message with wallet', { originalError: error_1 });
|
|
79
|
-
case 3: return [2 /*return*/];
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}); };
|
|
83
|
-
setSignMessageWithWalletKey(function () { return signWithWallet; });
|
|
84
|
-
return signWithWallet;
|
|
85
|
-
};
|
|
86
55
|
var createTransactionSignFunction = function () {
|
|
87
56
|
if (!dynamicWallet) {
|
|
88
57
|
return null;
|
|
89
58
|
}
|
|
90
59
|
var signTransactionWithWallet = function (transaction) { return __awaiter(_this, void 0, void 0, function () {
|
|
91
|
-
var signedTransaction,
|
|
60
|
+
var signedTransaction, error_1;
|
|
92
61
|
return __generator(this, function (_a) {
|
|
93
62
|
switch (_a.label) {
|
|
94
63
|
case 0:
|
|
@@ -106,9 +75,9 @@ export function useNordUserInitialization() {
|
|
|
106
75
|
return [2 /*return*/, signedTransaction];
|
|
107
76
|
case 3: throw new WalletError(WalletErrorCode.USER_REJECTED, 'Unsupported chain', { originalError: new Error('Unsupported chain') });
|
|
108
77
|
case 4:
|
|
109
|
-
|
|
110
|
-
console.error('Error signing transaction with wallet:',
|
|
111
|
-
throw new WalletError(WalletErrorCode.USER_REJECTED, 'Failed to sign transaction with wallet', { originalError:
|
|
78
|
+
error_1 = _a.sent();
|
|
79
|
+
console.error('Error signing transaction with wallet:', error_1);
|
|
80
|
+
throw new WalletError(WalletErrorCode.USER_REJECTED, 'Failed to sign transaction with wallet', { originalError: error_1 });
|
|
112
81
|
case 5: return [2 /*return*/];
|
|
113
82
|
}
|
|
114
83
|
});
|
|
@@ -117,7 +86,7 @@ export function useNordUserInitialization() {
|
|
|
117
86
|
return signTransactionWithWallet;
|
|
118
87
|
};
|
|
119
88
|
var createSession = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
120
|
-
var sessionKeyPair_1, storedKeys, signFn_1,
|
|
89
|
+
var sessionKeyPair_1, storedKeys, signFn_1, error_2;
|
|
121
90
|
var _this = this;
|
|
122
91
|
return __generator(this, function (_a) {
|
|
123
92
|
switch (_a.label) {
|
|
@@ -146,7 +115,7 @@ export function useNordUserInitialization() {
|
|
|
146
115
|
_a.label = 2;
|
|
147
116
|
case 2:
|
|
148
117
|
signFn_1 = function (message) { return __awaiter(_this, void 0, void 0, function () {
|
|
149
|
-
var
|
|
118
|
+
var error_3;
|
|
150
119
|
return __generator(this, function (_a) {
|
|
151
120
|
switch (_a.label) {
|
|
152
121
|
case 0:
|
|
@@ -154,9 +123,9 @@ export function useNordUserInitialization() {
|
|
|
154
123
|
return [4 /*yield*/, signEd25519(message, sessionKeyPair_1.privateKey)];
|
|
155
124
|
case 1: return [2 /*return*/, _a.sent()];
|
|
156
125
|
case 2:
|
|
157
|
-
|
|
158
|
-
console.error('Error signing with session key:',
|
|
159
|
-
throw
|
|
126
|
+
error_3 = _a.sent();
|
|
127
|
+
console.error('Error signing with session key:', error_3);
|
|
128
|
+
throw error_3;
|
|
160
129
|
case 3: return [2 /*return*/];
|
|
161
130
|
}
|
|
162
131
|
});
|
|
@@ -171,8 +140,8 @@ export function useNordUserInitialization() {
|
|
|
171
140
|
setSignMessageWithSessionKey(function () { return signFn_1; });
|
|
172
141
|
return [2 /*return*/, signFn_1];
|
|
173
142
|
case 3:
|
|
174
|
-
|
|
175
|
-
console.error('Error creating session:',
|
|
143
|
+
error_2 = _a.sent();
|
|
144
|
+
console.error('Error creating session:', error_2);
|
|
176
145
|
return [2 /*return*/, null];
|
|
177
146
|
case 4: return [2 /*return*/];
|
|
178
147
|
}
|
|
@@ -183,9 +152,6 @@ export function useNordUserInitialization() {
|
|
|
183
152
|
return __generator(this, function (_a) {
|
|
184
153
|
switch (_a.label) {
|
|
185
154
|
case 0:
|
|
186
|
-
if (!signMessageWithWalletKey && dynamicWallet) {
|
|
187
|
-
createWalletSignFunction();
|
|
188
|
-
}
|
|
189
155
|
if (!signTransactionWithWalletKey && dynamicWallet) {
|
|
190
156
|
createTransactionSignFunction();
|
|
191
157
|
}
|
|
@@ -209,12 +175,12 @@ export function useNordUserInitialization() {
|
|
|
209
175
|
return;
|
|
210
176
|
}
|
|
211
177
|
var createNordUser = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
212
|
-
var sessionId, sessionKeyData, sessionIdKey, storedSessionId, user, _1,
|
|
178
|
+
var sessionId, sessionKeyData, sessionIdKey, storedSessionId, user, _1, error_4;
|
|
213
179
|
return __generator(this, function (_a) {
|
|
214
180
|
switch (_a.label) {
|
|
215
181
|
case 0:
|
|
216
182
|
_a.trys.push([0, 5, , 6]);
|
|
217
|
-
if (!nord || !address || !sessionPubKey || !
|
|
183
|
+
if (!nord || !address || !sessionPubKey || !signMessageWithSessionKey || !signTransactionWithWalletKey) {
|
|
218
184
|
return [2 /*return*/, null];
|
|
219
185
|
}
|
|
220
186
|
sessionId = undefined;
|
|
@@ -238,8 +204,6 @@ export function useNordUserInitialization() {
|
|
|
238
204
|
}
|
|
239
205
|
user = new NordUser({
|
|
240
206
|
nord: nord,
|
|
241
|
-
address: address,
|
|
242
|
-
walletSignFn: signMessageWithWalletKey,
|
|
243
207
|
sessionSignFn: signMessageWithSessionKey,
|
|
244
208
|
transactionSignFn: signTransactionWithWalletKey,
|
|
245
209
|
sessionId: sessionId,
|
|
@@ -260,8 +224,8 @@ export function useNordUserInitialization() {
|
|
|
260
224
|
setNordUser(user);
|
|
261
225
|
return [2 /*return*/, user];
|
|
262
226
|
case 5:
|
|
263
|
-
|
|
264
|
-
console.error('Error creating NordUser:',
|
|
227
|
+
error_4 = _a.sent();
|
|
228
|
+
console.error('Error creating NordUser:', error_4);
|
|
265
229
|
setNordUser(null);
|
|
266
230
|
return [2 /*return*/, null];
|
|
267
231
|
case 6: return [2 /*return*/];
|
|
@@ -269,8 +233,7 @@ export function useNordUserInitialization() {
|
|
|
269
233
|
});
|
|
270
234
|
}); };
|
|
271
235
|
// Only create NordUser when all dependencies are available and nordUser is null
|
|
272
|
-
if (
|
|
273
|
-
signMessageWithSessionKey &&
|
|
236
|
+
if (signMessageWithSessionKey &&
|
|
274
237
|
signTransactionWithWalletKey &&
|
|
275
238
|
sessionPubKey &&
|
|
276
239
|
nordUser === null) {
|
|
@@ -282,7 +245,6 @@ export function useNordUserInitialization() {
|
|
|
282
245
|
nord,
|
|
283
246
|
address,
|
|
284
247
|
signMessageWithSessionKey,
|
|
285
|
-
signMessageWithWalletKey,
|
|
286
248
|
signTransactionWithWalletKey,
|
|
287
249
|
sessionPubKey,
|
|
288
250
|
nordUser,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNordUserInitialization.js","sourceRoot":"","sources":["../../../src/Provider/hooks/useNordUserInitialization.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect } from 'react';\nimport React from 'react';\nimport { NordUser } from '@n1xyz/nord-ts';\nimport { generateSessionKeyPair, signEd25519 } from '@n1xyz/nts-sdk';\nimport { PublicKey, Transaction } from '@solana/web3.js';\nimport { getSessionKeysFromLocalStorage, storeSessionKeysInLocalStorage } from '../../Logic/utils';\nimport { WalletError, WalletErrorCode } from '../../errors/types';\nimport { logger } from '../../utils/logger';\nimport { N1SessionMode } from '../types';\nimport { useN1WalletContext, useN1WalletInternalContext } from '../hooks';\n\n\nexport function useNordUserInitialization() {\n const { setNordUser, setSessionPubKey, setSignMessageWithSessionKey, setSignMessageWithWalletKey, setSignTransactionWithWalletKey, dynamicWallet } = useN1WalletInternalContext();\n\n const { address, nordUser, sessionMode, nord, signMessageWithSessionKey, signMessageWithWalletKey, signTransactionWithWalletKey, sessionPubKey } = useN1WalletContext();\n // First useEffect: Initialize signing functions\n useEffect(() => {\n if (sessionMode !== N1SessionMode.Nord || address === null || address === '') {\n return;\n }\n\n const createWalletSignFunction = () => {\n if (!dynamicWallet) {\n return null;\n }\n\n const signWithWallet = async (msg: Uint8Array): Promise<Uint8Array> => {\n try {\n const hexMsg = Buffer.from(msg).toString('hex');\n const signature = await dynamicWallet.signMessage(hexMsg);\n const binaryString = atob(signature);\n const signatureUint8Array = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n signatureUint8Array[i] = binaryString.charCodeAt(i);\n }\n return signatureUint8Array;\n } catch (error) {\n console.error('Error signing with wallet:', error);\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign message with wallet',\n { originalError: error }\n );\n }\n };\n\n setSignMessageWithWalletKey(() => signWithWallet);\n return signWithWallet;\n };\n\n const createTransactionSignFunction = () => {\n if (!dynamicWallet) {\n return null;\n }\n\n const signTransactionWithWallet = async (\n transaction: any\n ): Promise<any> => {\n try {\n if (dynamicWallet.chain === 'SOL') {\n const signedTransaction = await (\n await dynamicWallet.getSigner()\n ).signTransaction(transaction);\n logger.debug('Solana transaction signature received');\n\n // const serializedTx = signedTransaction.serialize();\n // return Transaction.from(serializedTx);\n console.log('signedTransaction', signedTransaction.signatures);\n console.log('signedTransaction - 2', signedTransaction);\n return signedTransaction;\n }\n\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Unsupported chain',\n { originalError: new Error('Unsupported chain') }\n );\n } catch (error) {\n console.error('Error signing transaction with wallet:', error);\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign transaction with wallet',\n { originalError: error }\n );\n }\n };\n\n setSignTransactionWithWalletKey(() => signTransactionWithWallet);\n return signTransactionWithWallet;\n };\n\n const createSession = async () => {\n try {\n let sessionKeyPair = null;\n if (address) {\n try {\n const storedKeys = getSessionKeysFromLocalStorage(address);\n if (storedKeys) {\n sessionKeyPair = {\n privateKey: storedKeys.ed25519PrivateKey,\n publicKey: storedKeys.ed25519PublicKey,\n };\n }\n } catch (error) {\n console.error(\n 'Error reconstructing key pair from stored keys:',\n error\n );\n sessionKeyPair = null;\n }\n }\n\n if (!sessionKeyPair) {\n sessionKeyPair = await generateSessionKeyPair();\n }\n\n const signFn = async (message: any): Promise<any> => {\n try {\n return await signEd25519(message, sessionKeyPair.privateKey);\n } catch (error) {\n console.error('Error signing with session key:', error);\n throw error;\n }\n };\n\n\n storeSessionKeysInLocalStorage({\n privKey: sessionKeyPair.privateKey,\n publicKey: sessionKeyPair.publicKey!,\n walletPublicKey: address,\n chainName: dynamicWallet?.chain || 'ETH',\n });\n\n setSessionPubKey(sessionKeyPair.publicKey!);\n setSignMessageWithSessionKey(() => signFn);\n return signFn;\n } catch (error) {\n console.error('Error creating session:', error);\n return null;\n }\n };\n\n // Initialize signing functions if needed\n const initSigningFunctions = async () => {\n if (!signMessageWithWalletKey && dynamicWallet) {\n createWalletSignFunction();\n }\n\n if (!signTransactionWithWalletKey && dynamicWallet) {\n createTransactionSignFunction();\n }\n\n if (!signMessageWithSessionKey) {\n await createSession();\n }\n };\n\n initSigningFunctions();\n }, [\n dynamicWallet,\n address,\n ]);\n\n // Second useEffect: Initialize NordUser\n useEffect(() => {\n if (sessionMode !== N1SessionMode.Nord) {\n return;\n }\n\n const createNordUser = async () => {\n try {\n if (!nord || !address || !sessionPubKey || !signMessageWithWalletKey || !signMessageWithSessionKey || !signTransactionWithWalletKey) {\n return null;\n }\n\n let sessionId = undefined;\n if (address) {\n try {\n const sessionKeyData = getSessionKeysFromLocalStorage(address);\n if (sessionKeyData) {\n const sessionIdKey = `n1_sessionId_${address}`;\n const storedSessionId = localStorage.getItem(sessionIdKey);\n if (storedSessionId !== null) {\n sessionId = BigInt(storedSessionId);\n logger.debug('Found existing sessionId in localStorage', {\n sessionId: storedSessionId,\n });\n }\n }\n } catch (error) {\n console.error('Error retrieving sessionId from localStorage:', error);\n }\n }\n\n const user = new NordUser({\n nord: nord,\n address,\n walletSignFn: signMessageWithWalletKey,\n sessionSignFn: signMessageWithSessionKey,\n transactionSignFn: signTransactionWithWalletKey,\n sessionId,\n sessionPubKey: sessionPubKey,\n publicKey: new PublicKey(address),\n });\n\n try {\n await user.updateAccountId();\n } catch (_) { }\n\n setNordUser(user);\n return user;\n } catch (error) {\n console.error('Error creating NordUser:', error);\n setNordUser(null);\n return null;\n }\n };\n\n // Only create NordUser when all dependencies are available and nordUser is null\n if (\n signMessageWithWalletKey &&\n signMessageWithSessionKey &&\n signTransactionWithWalletKey &&\n sessionPubKey &&\n nordUser === null\n ) {\n logger.debug('Dependencies available, initializing NordUser');\n createNordUser();\n }\n }, [\n sessionMode,\n nord,\n address,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n sessionPubKey,\n nordUser,\n setNordUser\n ]);\n} "]}
|
|
1
|
+
{"version":3,"file":"useNordUserInitialization.js","sourceRoot":"","sources":["../../../src/Provider/hooks/useNordUserInitialization.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect } from 'react';\nimport React from 'react';\nimport { NordUser } from '@n1xyz/nord-ts';\nimport { generateSessionKeyPair, signEd25519 } from '@n1xyz/nts-sdk';\nimport { PublicKey, Transaction } from '@solana/web3.js';\nimport { getSessionKeysFromLocalStorage, storeSessionKeysInLocalStorage } from '../../Logic/utils';\nimport { WalletError, WalletErrorCode } from '../../errors/types';\nimport { logger } from '../../utils/logger';\nimport { N1SessionMode } from '../types';\nimport { useN1WalletContext, useN1WalletInternalContext } from '../hooks';\n\n\nexport function useNordUserInitialization() {\n const { setNordUser, setSessionPubKey, setSignMessageWithSessionKey, setSignTransactionWithWalletKey, dynamicWallet } = useN1WalletInternalContext();\n\n const { address, nordUser, sessionMode, nord, signMessageWithSessionKey, signTransactionWithWalletKey, sessionPubKey } = useN1WalletContext();\n // First useEffect: Initialize signing functions\n useEffect(() => {\n if (sessionMode !== N1SessionMode.Nord || address === null || address === '') {\n return;\n }\n\n const createTransactionSignFunction = () => {\n if (!dynamicWallet) {\n return null;\n }\n\n const signTransactionWithWallet = async (\n transaction: any\n ): Promise<any> => {\n try {\n if (dynamicWallet.chain === 'SOL') {\n const signedTransaction = await (\n await dynamicWallet.getSigner()\n ).signTransaction(transaction);\n logger.debug('Solana transaction signature received');\n\n // const serializedTx = signedTransaction.serialize();\n // return Transaction.from(serializedTx);\n console.log('signedTransaction', signedTransaction.signatures);\n console.log('signedTransaction - 2', signedTransaction);\n return signedTransaction;\n }\n\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Unsupported chain',\n { originalError: new Error('Unsupported chain') }\n );\n } catch (error) {\n console.error('Error signing transaction with wallet:', error);\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign transaction with wallet',\n { originalError: error }\n );\n }\n };\n\n setSignTransactionWithWalletKey(() => signTransactionWithWallet);\n return signTransactionWithWallet;\n };\n\n const createSession = async () => {\n try {\n let sessionKeyPair = null;\n if (address) {\n try {\n const storedKeys = getSessionKeysFromLocalStorage(address);\n if (storedKeys) {\n sessionKeyPair = {\n privateKey: storedKeys.ed25519PrivateKey,\n publicKey: storedKeys.ed25519PublicKey,\n };\n }\n } catch (error) {\n console.error(\n 'Error reconstructing key pair from stored keys:',\n error\n );\n sessionKeyPair = null;\n }\n }\n\n if (!sessionKeyPair) {\n sessionKeyPair = await generateSessionKeyPair();\n }\n\n const signFn = async (message: any): Promise<any> => {\n try {\n return await signEd25519(message, sessionKeyPair.privateKey);\n } catch (error) {\n console.error('Error signing with session key:', error);\n throw error;\n }\n };\n\n\n storeSessionKeysInLocalStorage({\n privKey: sessionKeyPair.privateKey,\n publicKey: sessionKeyPair.publicKey!,\n walletPublicKey: address,\n chainName: dynamicWallet?.chain || 'ETH',\n });\n\n setSessionPubKey(sessionKeyPair.publicKey!);\n setSignMessageWithSessionKey(() => signFn);\n return signFn;\n } catch (error) {\n console.error('Error creating session:', error);\n return null;\n }\n };\n\n // Initialize signing functions if needed\n const initSigningFunctions = async () => {\n if (!signTransactionWithWalletKey && dynamicWallet) {\n createTransactionSignFunction();\n }\n\n if (!signMessageWithSessionKey) {\n await createSession();\n }\n };\n\n initSigningFunctions();\n }, [\n dynamicWallet,\n address,\n ]);\n\n // Second useEffect: Initialize NordUser\n useEffect(() => {\n if (sessionMode !== N1SessionMode.Nord) {\n return;\n }\n\n const createNordUser = async () => {\n try {\n if (!nord || !address || !sessionPubKey || !signMessageWithSessionKey || !signTransactionWithWalletKey) {\n return null;\n }\n\n let sessionId = undefined;\n if (address) {\n try {\n const sessionKeyData = getSessionKeysFromLocalStorage(address);\n if (sessionKeyData) {\n const sessionIdKey = `n1_sessionId_${address}`;\n const storedSessionId = localStorage.getItem(sessionIdKey);\n if (storedSessionId !== null) {\n sessionId = BigInt(storedSessionId);\n logger.debug('Found existing sessionId in localStorage', {\n sessionId: storedSessionId,\n });\n }\n }\n } catch (error) {\n console.error('Error retrieving sessionId from localStorage:', error);\n }\n }\n\n const user = new NordUser({\n nord: nord,\n sessionSignFn: signMessageWithSessionKey,\n transactionSignFn: signTransactionWithWalletKey,\n sessionId,\n sessionPubKey: sessionPubKey,\n publicKey: new PublicKey(address),\n });\n\n try {\n await user.updateAccountId();\n } catch (_) { }\n\n setNordUser(user);\n return user;\n } catch (error) {\n console.error('Error creating NordUser:', error);\n setNordUser(null);\n return null;\n }\n };\n\n // Only create NordUser when all dependencies are available and nordUser is null\n if (\n signMessageWithSessionKey &&\n signTransactionWithWalletKey &&\n sessionPubKey &&\n nordUser === null\n ) {\n logger.debug('Dependencies available, initializing NordUser');\n createNordUser();\n }\n }, [\n sessionMode,\n nord,\n address,\n signMessageWithSessionKey,\n signTransactionWithWalletKey,\n sessionPubKey,\n nordUser,\n setNordUser\n ]);\n} \n"]}
|
package/dist/Provider/types.d.ts
CHANGED
|
@@ -101,7 +101,6 @@ export interface N1WalletState {
|
|
|
101
101
|
setShowLogin: (show: boolean) => void;
|
|
102
102
|
showLogin: boolean;
|
|
103
103
|
signMessageWithSessionKey: ((message: any) => Promise<any>) | null;
|
|
104
|
-
signMessageWithWalletKey: ((message: any) => Promise<any>) | null;
|
|
105
104
|
signTransactionWithWalletKey: ((transaction: any) => Promise<any>) | null;
|
|
106
105
|
userChain: string | null;
|
|
107
106
|
username: string;
|
|
@@ -131,7 +130,6 @@ export interface N1InternalWalletState {
|
|
|
131
130
|
setSessionPubKey: (key: Uint8Array) => void;
|
|
132
131
|
setShowSidebar: (show: boolean) => void;
|
|
133
132
|
setSignMessageWithSessionKey: React.Dispatch<React.SetStateAction<((message: any) => Promise<any>) | null>>;
|
|
134
|
-
setSignMessageWithWalletKey: React.Dispatch<React.SetStateAction<((message: any) => Promise<any>) | null>>;
|
|
135
133
|
setSignTransactionWithWalletKey: React.Dispatch<React.SetStateAction<((transaction: any) => Promise<any>) | null>>;
|
|
136
134
|
setStartClosingLogin: (closing: boolean) => void;
|
|
137
135
|
setUsername: (username: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/Provider/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,2DAAO,CAAA;IACP,uEAAa,CAAA;IACb,2DAAO,CAAA;IACP,qEAAY,CAAA;IACZ,2DAAO,CAAA;IACP,mEAAW,CAAA;AACb,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,iDAAI,CAAA;IACJ,+CAAG,CAAA;AACL,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB","sourcesContent":["import type { WalletError } from '../errors/types';\nimport { Nord } from '@n1xyz/nord-ts';\n\nexport enum N1ModalViewMode {\n Connect,\n CreateSession,\n Signing,\n CreatingUser,\n Success,\n NoWhitelist,\n}\n\nexport enum N1SessionMode {\n Nord,\n NTS,\n}\n\nexport interface CssColorOverride {\n color: string; // Color to find in CSS (e.g. '#3b82f6')\n replacement: string; // Replacement color (e.g. '#afafaf')\n}\n\nexport interface N1WalletProviderProps {\n children: React.ReactNode;\n providedSessionMode: N1SessionMode;\n appId: string;\n darkMode?: boolean;\n onError?: (error: WalletError) => void;\n faucetUrl?: string;\n nord?: Nord;\n /**\n * Optional array of color overrides: [{color: '#original', replacement: '#new'}]\n */\n colorOverrides?: CssColorOverride[];\n /**\n * If true, skip the final success screen and immediately call onDone\n */\n skipFinalScreen?: boolean;\n}\n\nexport interface Balance {\n mint: string;\n balance: bigint;\n appId: string;\n appType: string;\n}\n\nexport interface N1NordFunctions {\n // Market information functions\n getMarkets: () => Promise<any[]>;\n getOrderbook: (symbol: string) => Promise<any>;\n getTrades: (params: any) => Promise<any>;\n getMarketsStats: () => Promise<any>;\n\n // Trading functions\n placeOrder: (params: {\n sessionId: bigint | string;\n marketId: number;\n side: 'BUY' | 'SELL';\n fillMode: 'GTC' | 'IOC' | 'FOK' | 'POST_ONLY';\n isReduceOnly: boolean;\n size?: number | string;\n price?: number | string;\n quoteSize?: number | string;\n clientOrderId?: bigint | string;\n }) => Promise<bigint | undefined>;\n\n cancelOrder: (params: {\n sessionId: bigint | string;\n orderId: bigint | string;\n }) => Promise<bigint>;\n\n // Account management\n createSession: (params: {\n userPubkey: Uint8Array;\n sessionPubkey: Uint8Array;\n expiryTimestamp?: bigint;\n }) => Promise<bigint>;\n\n revokeSession: (params: { sessionId: bigint | string }) => Promise<void>;\n\n withdraw: (params: {\n sessionId: bigint | string;\n tokenId: number;\n amount: number;\n }) => Promise<void>;\n\n transfer: (params: {\n sessionId: bigint | string;\n fromAccountId: number;\n toAccountId?: number;\n tokenId: number;\n tokenDecimals: number;\n amount: number | string;\n }) => Promise<number | undefined>;\n\n // Blockchain information\n getTimestamp: () => Promise<bigint>;\n getActionNonce: () => Promise<number>;\n\n // Block and action queries\n queryBlock: (query: any) => Promise<any>;\n queryLastNBlocks: () => Promise<any>;\n queryRecentBlocks: (last_n: number) => Promise<any>;\n queryAction: (query: any) => Promise<any>;\n queryRecentActions: (last_n: number) => Promise<any>;\n getActions: (fromActionId: number, toActionId: number) => Promise<any>;\n}\n\nexport interface N1WalletState {\n address: string;\n appId: string | null;\n balances: Balance[];\n chain: string;\n isConnected: boolean;\n ntsInterface: any;\n sessionMode: N1SessionMode | null;\n sessionPubKey: Uint8Array | null;\n setShowLogin: (show: boolean) => void;\n showLogin: boolean;\n signMessageWithSessionKey: ((message: any) => Promise<any>) | null;\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/Provider/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,2DAAO,CAAA;IACP,uEAAa,CAAA;IACb,2DAAO,CAAA;IACP,qEAAY,CAAA;IACZ,2DAAO,CAAA;IACP,mEAAW,CAAA;AACb,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,iDAAI,CAAA;IACJ,+CAAG,CAAA;AACL,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB","sourcesContent":["import type { WalletError } from '../errors/types';\nimport { Nord } from '@n1xyz/nord-ts';\n\nexport enum N1ModalViewMode {\n Connect,\n CreateSession,\n Signing,\n CreatingUser,\n Success,\n NoWhitelist,\n}\n\nexport enum N1SessionMode {\n Nord,\n NTS,\n}\n\nexport interface CssColorOverride {\n color: string; // Color to find in CSS (e.g. '#3b82f6')\n replacement: string; // Replacement color (e.g. '#afafaf')\n}\n\nexport interface N1WalletProviderProps {\n children: React.ReactNode;\n providedSessionMode: N1SessionMode;\n appId: string;\n darkMode?: boolean;\n onError?: (error: WalletError) => void;\n faucetUrl?: string;\n nord?: Nord;\n /**\n * Optional array of color overrides: [{color: '#original', replacement: '#new'}]\n */\n colorOverrides?: CssColorOverride[];\n /**\n * If true, skip the final success screen and immediately call onDone\n */\n skipFinalScreen?: boolean;\n}\n\nexport interface Balance {\n mint: string;\n balance: bigint;\n appId: string;\n appType: string;\n}\n\nexport interface N1NordFunctions {\n // Market information functions\n getMarkets: () => Promise<any[]>;\n getOrderbook: (symbol: string) => Promise<any>;\n getTrades: (params: any) => Promise<any>;\n getMarketsStats: () => Promise<any>;\n\n // Trading functions\n placeOrder: (params: {\n sessionId: bigint | string;\n marketId: number;\n side: 'BUY' | 'SELL';\n fillMode: 'GTC' | 'IOC' | 'FOK' | 'POST_ONLY';\n isReduceOnly: boolean;\n size?: number | string;\n price?: number | string;\n quoteSize?: number | string;\n clientOrderId?: bigint | string;\n }) => Promise<bigint | undefined>;\n\n cancelOrder: (params: {\n sessionId: bigint | string;\n orderId: bigint | string;\n }) => Promise<bigint>;\n\n // Account management\n createSession: (params: {\n userPubkey: Uint8Array;\n sessionPubkey: Uint8Array;\n expiryTimestamp?: bigint;\n }) => Promise<bigint>;\n\n revokeSession: (params: { sessionId: bigint | string }) => Promise<void>;\n\n withdraw: (params: {\n sessionId: bigint | string;\n tokenId: number;\n amount: number;\n }) => Promise<void>;\n\n transfer: (params: {\n sessionId: bigint | string;\n fromAccountId: number;\n toAccountId?: number;\n tokenId: number;\n tokenDecimals: number;\n amount: number | string;\n }) => Promise<number | undefined>;\n\n // Blockchain information\n getTimestamp: () => Promise<bigint>;\n getActionNonce: () => Promise<number>;\n\n // Block and action queries\n queryBlock: (query: any) => Promise<any>;\n queryLastNBlocks: () => Promise<any>;\n queryRecentBlocks: (last_n: number) => Promise<any>;\n queryAction: (query: any) => Promise<any>;\n queryRecentActions: (last_n: number) => Promise<any>;\n getActions: (fromActionId: number, toActionId: number) => Promise<any>;\n}\n\nexport interface N1WalletState {\n address: string;\n appId: string | null;\n balances: Balance[];\n chain: string;\n isConnected: boolean;\n ntsInterface: any;\n sessionMode: N1SessionMode | null;\n sessionPubKey: Uint8Array | null;\n setShowLogin: (show: boolean) => void;\n showLogin: boolean;\n signMessageWithSessionKey: ((message: any) => Promise<any>) | null;\n signTransactionWithWalletKey: ((transaction: any) => Promise<any>) | null;\n userChain: string | null;\n username: string;\n viewMode: N1ModalViewMode;\n walletPubKey: Uint8Array | null;\n throwTestError: () => Promise<void>;\n nord?: Nord;\n faucetUrl?: string;\n nordUser?: any;\n}\n\nexport interface N1InternalWalletState {\n dynamicHandleLogOut: any;\n dynamicWallet: any;\n loading: boolean;\n dynamicSdkHasLoaded: any;\n handleError: (error: WalletError) => void;\n setDynamicSdkHasLoaded: (loaded: any) => void;\n setAddress: (address: string) => void;\n setBalances: (balances: Balance[]) => void;\n setChain: (chain: string) => void;\n setDynamicHandleLogOut: (handler: any) => void;\n setDynamicWallet: (wallet: any) => void;\n setIsConnected: (connected: boolean) => void;\n setLoading: (loading: boolean) => void;\n setNtsInterface: (nts: any) => void;\n setSessionMode: (mode: N1SessionMode | null) => void;\n setSessionPubKey: (key: Uint8Array) => void;\n setShowSidebar: (show: boolean) => void;\n setSignMessageWithSessionKey: React.Dispatch<\n React.SetStateAction<((message: any) => Promise<any>) | null>\n >;\n setSignTransactionWithWalletKey: React.Dispatch<\n React.SetStateAction<((transaction: any) => Promise<any>) | null>\n >;\n setStartClosingLogin: (closing: boolean) => void;\n setUsername: (username: string) => void;\n setUserChain: (chain: string) => void;\n setViewMode: (mode: N1ModalViewMode) => void;\n setWalletPubKey: (key: Uint8Array) => void;\n setNordUser: (user: any) => void;\n showSidebar: boolean;\n startClosingLogin: boolean;\n showDynamicWidget: any;\n setShowDynamicWidget: (show: any) => void;\n darkMode: boolean;\n sessionMode: N1SessionMode | null;\n faucetUrl?: string;\n skipFinalScreen?: boolean;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n1xyz/wallet-widget",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"description": "React wallet widget component for N1 applications",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -11,6 +11,15 @@
|
|
|
11
11
|
"LICENSE",
|
|
12
12
|
"package.json"
|
|
13
13
|
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "pnpm run build:css && pnpm run embed-css && tsc",
|
|
16
|
+
"build:css": "npx tailwindcss -i ./src/main.css -o ./dist/main.css --minify",
|
|
17
|
+
"embed-css": "node scripts/embed-css.js",
|
|
18
|
+
"dev": "nodemon -L -e ts,json,tsx --watch src/ --ignore src/embedded-main-css.ts --ignore dist/ --exec pnpm run build",
|
|
19
|
+
"clean": "rm -rf dist",
|
|
20
|
+
"lint": "eslint src --ext .ts,.tsx",
|
|
21
|
+
"lint:fix": "eslint src --ext .ts,.tsx --fix"
|
|
22
|
+
},
|
|
14
23
|
"author": "N1 Labs",
|
|
15
24
|
"license": "SEE LICENSE IN LICENSE",
|
|
16
25
|
"peerDependencies": {
|
|
@@ -36,7 +45,7 @@
|
|
|
36
45
|
"@dynamic-labs/solana": "3.5.0",
|
|
37
46
|
"@n1xyz/nts-sdk": "0.0.38",
|
|
38
47
|
"@solana/web3.js": "^1.98.1",
|
|
39
|
-
"@n1xyz/nord-ts": "0.1.
|
|
48
|
+
"@n1xyz/nord-ts": "0.1.8",
|
|
40
49
|
"@tailwindcss/container-queries": "^0.1.1",
|
|
41
50
|
"blockies-react-svg": "^0.0.13",
|
|
42
51
|
"lucide-react": "^0.344.0",
|
|
@@ -45,14 +54,5 @@
|
|
|
45
54
|
},
|
|
46
55
|
"publishConfig": {
|
|
47
56
|
"access": "public"
|
|
48
|
-
},
|
|
49
|
-
"scripts": {
|
|
50
|
-
"build": "pnpm run build:css && pnpm run embed-css && tsc",
|
|
51
|
-
"build:css": "npx tailwindcss -i ./src/main.css -o ./dist/main.css --minify",
|
|
52
|
-
"embed-css": "node scripts/embed-css.js",
|
|
53
|
-
"dev": "nodemon -L -e ts,json,tsx --watch src/ --ignore src/embedded-main-css.ts --ignore dist/ --exec pnpm run build",
|
|
54
|
-
"clean": "rm -rf dist",
|
|
55
|
-
"lint": "eslint src --ext .ts,.tsx",
|
|
56
|
-
"lint:fix": "eslint src --ext .ts,.tsx --fix"
|
|
57
57
|
}
|
|
58
|
-
}
|
|
58
|
+
}
|