@n1xyz/wallet-widget 0.0.33-alpha.3 → 0.0.34
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/animations/N1Loader.js +8 -14
- package/dist/animations/N1Loader.js.map +1 -1
- package/dist/animations/Processing.js +8 -14
- package/dist/animations/Processing.js.map +1 -1
- package/dist/components/LoadingFallback.js +2 -6
- package/dist/components/LoadingFallback.js.map +1 -1
- package/dist/components/Logo.js +22 -25
- package/dist/components/Logo.js.map +1 -1
- package/dist/components/N1ConnectButton.js +12 -18
- package/dist/components/N1ConnectButton.js.map +1 -1
- package/dist/components/logos/ArbitrumLogo.js +3 -7
- package/dist/components/logos/ArbitrumLogo.js.map +1 -1
- package/dist/components/logos/BaseLogo.js +3 -7
- package/dist/components/logos/BaseLogo.js.map +1 -1
- package/dist/components/logos/BeraLogo.js +3 -7
- package/dist/components/logos/BeraLogo.js.map +1 -1
- package/dist/components/logos/BitcoinLogo.js +3 -7
- package/dist/components/logos/BitcoinLogo.js.map +1 -1
- package/dist/components/logos/EthereumLogo.js +3 -7
- package/dist/components/logos/EthereumLogo.js.map +1 -1
- package/dist/components/logos/HyperliquidLogo.js +3 -7
- package/dist/components/logos/HyperliquidLogo.js.map +1 -1
- package/dist/components/logos/OptimismLogo.js +3 -7
- package/dist/components/logos/OptimismLogo.js.map +1 -1
- package/dist/components/logos/SolanaLogo.js +3 -7
- package/dist/components/logos/SolanaLogo.js.map +1 -1
- package/dist/components/logos/ZeroOneLogo.js +3 -7
- package/dist/components/logos/ZeroOneLogo.js.map +1 -1
- package/dist/components/logos/index.js +9 -25
- package/dist/components/logos/index.js.map +1 -1
- package/dist/config/dynamic.d.ts +1 -0
- package/dist/config/dynamic.js +13 -0
- package/dist/config/dynamic.js.map +1 -0
- package/dist/config/solana.js +3 -7
- package/dist/config/solana.js.map +1 -1
- package/dist/config/turnkey.d.ts +2 -0
- package/dist/config/turnkey.js +35 -0
- package/dist/config/turnkey.js.map +1 -0
- package/dist/config.js +2 -5
- package/dist/config.js.map +1 -1
- package/dist/context/n1-wallet-context.js +4 -8
- package/dist/context/n1-wallet-context.js.map +1 -1
- package/dist/errors/types.js +3 -6
- package/dist/errors/types.js.map +1 -1
- package/dist/features/onboarding-flow/N1WalletModal.js +23 -59
- package/dist/features/onboarding-flow/N1WalletModal.js.map +1 -1
- package/dist/features/onboarding-flow/OnboardingFlow.js +46 -50
- package/dist/features/onboarding-flow/OnboardingFlow.js.map +1 -1
- package/dist/features/onboarding-flow/components/ChainButton.js +4 -7
- package/dist/features/onboarding-flow/components/ChainButton.js.map +1 -1
- package/dist/features/onboarding-flow/components/Header.js +11 -15
- package/dist/features/onboarding-flow/components/Header.js.map +1 -1
- package/dist/features/onboarding-flow/components/ImageWithFallback.js +6 -10
- package/dist/features/onboarding-flow/components/ImageWithFallback.js.map +1 -1
- package/dist/features/onboarding-flow/components/TransactionTable.js +10 -13
- package/dist/features/onboarding-flow/components/TransactionTable.js.map +1 -1
- package/dist/features/onboarding-flow/components/WaitingMessage.js +8 -14
- package/dist/features/onboarding-flow/components/WaitingMessage.js.map +1 -1
- package/dist/features/onboarding-flow/components/index.js +5 -21
- package/dist/features/onboarding-flow/components/index.js.map +1 -1
- package/dist/features/onboarding-flow/index.js +1 -5
- package/dist/features/onboarding-flow/index.js.map +1 -1
- package/dist/features/onboarding-flow/providers/DepositFlowProvider.js +55 -60
- package/dist/features/onboarding-flow/providers/DepositFlowProvider.js.map +1 -1
- package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js +43 -48
- package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js.map +1 -1
- package/dist/features/onboarding-flow/providers/StateProvider.js +7 -11
- package/dist/features/onboarding-flow/providers/StateProvider.js.map +1 -1
- package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js +69 -74
- package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -1
- package/dist/features/onboarding-flow/providers/debug.js +18 -21
- package/dist/features/onboarding-flow/providers/debug.js.map +1 -1
- package/dist/features/onboarding-flow/providers/index.js +5 -16
- package/dist/features/onboarding-flow/providers/index.js.map +1 -1
- package/dist/features/onboarding-flow/providers/onboardingStateMachine.js +15 -20
- package/dist/features/onboarding-flow/providers/onboardingStateMachine.js.map +1 -1
- package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js +8 -11
- package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js +34 -38
- package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/02-TurnkeyAuthScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js +18 -0
- package/dist/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js +47 -51
- package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js +18 -0
- package/dist/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/04-ChainSelectionScreen.d.ts +31 -0
- package/dist/features/onboarding-flow/screens/04-ChainSelectionScreen.js +100 -0
- package/dist/features/onboarding-flow/screens/04-ChainSelectionScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js +8 -12
- package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/05-AmountInputScreen.d.ts +6 -0
- package/dist/features/onboarding-flow/screens/05-AmountInputScreen.js +360 -0
- package/dist/features/onboarding-flow/screens/05-AmountInputScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js +25 -28
- package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js +10 -13
- package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/06-DepositProgressScreen.d.ts +3 -0
- package/dist/features/onboarding-flow/screens/06-DepositProgressScreen.js +31 -0
- package/dist/features/onboarding-flow/screens/06-DepositProgressScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.js +136 -0
- package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/07-ErrorScreen.js +7 -10
- package/dist/features/onboarding-flow/screens/07-ErrorScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/08-AuthLoadingScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/08-AuthLoadingScreen.js +31 -0
- package/dist/features/onboarding-flow/screens/08-AuthLoadingScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/08-TurnkeyAuthScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/08-TurnkeyAuthScreen.js +18 -0
- package/dist/features/onboarding-flow/screens/08-TurnkeyAuthScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/09-ErrorScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/09-ErrorScreen.js +14 -0
- package/dist/features/onboarding-flow/screens/09-ErrorScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/09-TurnkeyPreparingScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/09-TurnkeyPreparingScreen.js +18 -0
- package/dist/features/onboarding-flow/screens/09-TurnkeyPreparingScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/TurnkeyAuthScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/TurnkeyAuthScreen.js +18 -0
- package/dist/features/onboarding-flow/screens/TurnkeyAuthScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/TurnkeyPreparingScreen.d.ts +1 -0
- package/dist/features/onboarding-flow/screens/TurnkeyPreparingScreen.js +18 -0
- package/dist/features/onboarding-flow/screens/TurnkeyPreparingScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/index.js +7 -23
- package/dist/features/onboarding-flow/screens/index.js.map +1 -1
- package/dist/features/onboarding-flow/types.js +3 -6
- package/dist/features/onboarding-flow/types.js.map +1 -1
- package/dist/features/onboarding-flow/utils/depositStorage.js +3 -8
- package/dist/features/onboarding-flow/utils/depositStorage.js.map +1 -1
- package/dist/features/onboarding-flow/utils/imageUtils.js +3 -9
- package/dist/features/onboarding-flow/utils/imageUtils.js.map +1 -1
- package/dist/features/onboarding-flow/utils/nordUser.js +2 -38
- package/dist/features/onboarding-flow/utils/nordUser.js.map +1 -1
- package/dist/features/onboarding-flow/utils/nordUtils.js +5 -12
- package/dist/features/onboarding-flow/utils/nordUtils.js.map +1 -1
- package/dist/features/onboarding-flow/utils/session.js +14 -17
- package/dist/features/onboarding-flow/utils/session.js.map +1 -1
- package/dist/features/onboarding-flow/utils/transaction.js +1 -4
- package/dist/features/onboarding-flow/utils/transaction.js.map +1 -1
- package/dist/features/onboarding-flow/utils/utils.js +8 -16
- package/dist/features/onboarding-flow/utils/utils.js.map +1 -1
- package/dist/features/onboarding-flow/utils/withImageFallback.js +9 -15
- package/dist/features/onboarding-flow/utils/withImageFallback.js.map +1 -1
- package/dist/features/turnkey/createTurnkeyWallet.d.ts +25 -0
- package/dist/features/turnkey/createTurnkeyWallet.js +119 -0
- package/dist/features/turnkey/createTurnkeyWallet.js.map +1 -0
- package/dist/hooks/index.js +2 -18
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useN1Wallet.js +6 -10
- package/dist/hooks/useN1Wallet.js.map +1 -1
- package/dist/hooks/useNordUserInitialization.js +31 -34
- package/dist/hooks/useNordUserInitialization.js.map +1 -1
- package/dist/index.js +7 -21
- package/dist/index.js.map +1 -1
- package/dist/{styles/main.css → main.css} +2 -2
- package/dist/polyfills/windowEthereumGuard.js +1 -2
- package/dist/polyfills/windowEthereumGuard.js.map +1 -1
- package/dist/providers/LazyWalletProvider.js +38 -74
- package/dist/providers/LazyWalletProvider.js.map +1 -1
- package/dist/providers/N1WalletProvider.js +70 -109
- package/dist/providers/N1WalletProvider.js.map +1 -1
- package/dist/providers/ShadowRootWrapper.js +4 -10
- package/dist/providers/ShadowRootWrapper.js.map +1 -1
- package/dist/providers/TurnkeyProviderBridge.d.ts +7 -0
- package/dist/providers/TurnkeyProviderBridge.js +20 -0
- package/dist/providers/TurnkeyProviderBridge.js.map +1 -0
- package/dist/providers/WalletErrorBoundary.js +6 -11
- package/dist/providers/WalletErrorBoundary.js.map +1 -1
- package/dist/styles/embedded-main-css.d.ts +1 -1
- package/dist/styles/embedded-main-css.js +1 -3
- package/dist/styles/embedded-main-css.js.map +1 -1
- package/dist/turnkey/TurnkeyProvider.d.ts +9 -0
- package/dist/turnkey/TurnkeyProvider.js +378 -0
- package/dist/turnkey/TurnkeyProvider.js.map +1 -0
- package/dist/turnkey/createWalletProvider.d.ts +3 -0
- package/dist/turnkey/createWalletProvider.js +180 -0
- package/dist/turnkey/createWalletProvider.js.map +1 -0
- package/dist/turnkey/index.d.ts +3 -0
- package/dist/turnkey/index.js +3 -0
- package/dist/turnkey/index.js.map +1 -0
- package/dist/turnkey/types.d.ts +48 -0
- package/dist/turnkey/types.js +8 -0
- package/dist/turnkey/types.js.map +1 -0
- package/dist/types/wallet.js +4 -7
- package/dist/types/wallet.js.map +1 -1
- package/dist/utils/ed25519.js +14 -20
- package/dist/utils/ed25519.js.map +1 -1
- package/dist/utils/getPseudoName.js +7 -10
- package/dist/utils/getPseudoName.js.map +1 -1
- package/dist/utils/logger.js +3 -5
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/shortenString.js +2 -6
- package/dist/utils/shortenString.js.map +1 -1
- package/dist/utils/turnkeySessionStorage.d.ts +3 -0
- package/dist/utils/turnkeySessionStorage.js +33 -0
- package/dist/utils/turnkeySessionStorage.js.map +1 -0
- package/dist/utils/words.js +1 -4
- package/dist/utils/words.js.map +1 -1
- package/package.json +3 -3
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Bold-Italic-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Bold-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Extra-Bold-Italic-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Extra-Bold-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Light-Italic-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Light-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Medium-Italic-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Medium-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Regular-Italic-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Regular-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Semi-Bold-Italic-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Semi-Bold-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Thin-Italic-Trial.otf +0 -0
- package/dist/assets/fonts/apk-galeria/APK-Galeria-Thin-Trial.otf +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n generateEd25519KeyPair,\n generateRandomUint8Array as createRandomUint8Array,\n} from '../../../utils/ed25519';\n\nexport const generateSessionKeyPair = generateEd25519KeyPair;\nexport const generateRandomUint8Array = createRandomUint8Array;\n\nexport function arrayBufferToBase64(buffer: Uint8Array) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\n// Convert Base64 string back to Uint8Array\nexport function base64ToUint8Array(base64String: string) {\n const binaryString = atob(base64String);\n const length = binaryString.length;\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\n\n// Function to store keys with a custom ID format in local storage, including private key\nexport function storeSessionKeysInLocalStorage({\n privKey,\n publicKey,\n walletPublicKey,\n chainName,\n}: {\n privKey: Uint8Array;\n publicKey: Uint8Array;\n walletPublicKey: string;\n chainName: string;\n}) {\n const storageKey = `n1_sessionKey_${walletPublicKey}`;\n\n const data = {\n ed25519PrivateKey: arrayBufferToBase64(privKey),\n ed25519PublicKey: arrayBufferToBase64(publicKey),\n walletPublicKey,\n chainName,\n createdAt: new Date().toISOString(),\n };\n\n localStorage.setItem(storageKey, JSON.stringify(data));\n}\n\n// Retrieve data from local storage by wallet key and convert the private and public key back to Uint8Array\nexport function getSessionKeysFromLocalStorage(walletPublicKey: string): {\n ed25519PrivateKey: Uint8Array;\n ed25519PublicKey: Uint8Array | null;\n walletPublicKey: string;\n chainName: string;\n createdAt: string;\n} | null {\n const storageKey = `n1_sessionKey_${walletPublicKey}`;\n\n const data = localStorage.getItem(storageKey);\n if (data) {\n const parsedData = JSON.parse(data);\n if (parsedData.ed25519PrivateKey) {\n parsedData.ed25519PrivateKey = base64ToUint8Array(\n parsedData.ed25519PrivateKey\n );\n } else {\n throw new Error('Missing ed25519PrivateKey in session storage');\n }\n if (parsedData.ed25519PublicKey) {\n parsedData.ed25519PublicKey = base64ToUint8Array(\n parsedData.ed25519PublicKey\n );\n } else {\n throw new Error('Missing ed25519PublicKey in session storage');\n }\n // Validate keys: check that public key is present and is Uint8Array of length 32\n if (!parsedData.ed25519PublicKey || !(parsedData.ed25519PublicKey instanceof Uint8Array) || parsedData.ed25519PublicKey.length !== 32) {\n throw new Error('Invalid public key in session storage');\n }\n return parsedData;\n }\n return null;\n}\n\n// Function to remove data from local storage by wallet key\nexport function removeKeysFromLocalStorage(walletPublicKey: string) {\n const storageKey = `n1_sessionKey_${walletPublicKey}`;\n\n localStorage.removeItem(storageKey);\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __assign = (this && this.__assign) || function () {
|
|
3
2
|
__assign = Object.assign || function(t) {
|
|
4
3
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -21,42 +20,37 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
21
20
|
}
|
|
22
21
|
return t;
|
|
23
22
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
27
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.withImageFallback = withImageFallback;
|
|
29
|
-
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
30
|
-
var react_1 = __importDefault(require("react"));
|
|
31
|
-
var components_1 = require("../components");
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import React from 'react';
|
|
25
|
+
import { ImageWithFallback } from '../components';
|
|
32
26
|
/**
|
|
33
27
|
* A Higher-Order Component (HOC) that adds image fallback functionality to a component
|
|
34
28
|
* @param WrappedComponent The component to wrap
|
|
35
29
|
* @returns A new component with image fallback functionality
|
|
36
30
|
*/
|
|
37
|
-
function withImageFallback(WrappedComponent) {
|
|
31
|
+
export function withImageFallback(WrappedComponent) {
|
|
38
32
|
// Create a new component that wraps the original component
|
|
39
33
|
var WithImageFallback = function (props) {
|
|
40
34
|
// Function to recursively process React elements
|
|
41
35
|
var processNode = function (node) {
|
|
42
|
-
if (!
|
|
36
|
+
if (!React.isValidElement(node)) {
|
|
43
37
|
return node;
|
|
44
38
|
}
|
|
45
39
|
var element = node;
|
|
46
40
|
// If it's an img element, replace it with ImageWithFallback
|
|
47
41
|
if (element.type === 'img') {
|
|
48
42
|
var _a = element.props, src = _a.src, alt = _a.alt, width = _a.width, height = _a.height, className = _a.className, rest = __rest(_a, ["src", "alt", "width", "height", "className"]);
|
|
49
|
-
return ((
|
|
43
|
+
return (_jsx(ImageWithFallback, __assign({ src: src, alt: alt || 'Image', width: width, height: height, className: className }, rest)));
|
|
50
44
|
}
|
|
51
45
|
// If it has children, process them recursively
|
|
52
46
|
if (element.props && element.props.children) {
|
|
53
|
-
var children =
|
|
54
|
-
return
|
|
47
|
+
var children = React.Children.map(element.props.children, processNode);
|
|
48
|
+
return React.cloneElement(element, __assign({}, element.props), children);
|
|
55
49
|
}
|
|
56
50
|
return element;
|
|
57
51
|
};
|
|
58
52
|
// Render the wrapped component and process its output
|
|
59
|
-
var renderedComponent = (
|
|
53
|
+
var renderedComponent = _jsx(WrappedComponent, __assign({}, props));
|
|
60
54
|
return processNode(renderedComponent);
|
|
61
55
|
};
|
|
62
56
|
// Set display name for debugging
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withImageFallback.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/withImageFallback.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"withImageFallback.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/withImageFallback.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,gBAAkC;IAElC,2DAA2D;IAC3D,IAAM,iBAAiB,GAAgB,UAAC,KAAK;QAC3C,iDAAiD;QACjD,IAAM,WAAW,GAAG,UAAC,IAAqB;YACxC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAM,OAAO,GAAG,IAA0B,CAAC;YAE3C,4DAA4D;YAC5D,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAM,KAAkD,OAAO,CAAC,KAAK,EAA7D,GAAG,SAAA,EAAE,GAAG,SAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,SAAS,eAAA,EAAK,IAAI,cAA7C,8CAA+C,CAAgB,CAAC;gBAEtE,OAAO,CACL,KAAC,iBAAiB,aAChB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,IAAI,OAAO,EACnB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,IAChB,IAAI,EACR,CACH,CAAC;YACJ,CAAC;YAED,+CAA+C;YAC/C,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CACjC,OAAO,CAAC,KAAK,CAAC,QAAQ,EACtB,WAAW,CACZ,CAAC;gBAEF,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,eAAO,OAAO,CAAC,KAAK,GAAI,QAAQ,CAAC,CAAC;YACrE,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,sDAAsD;QACtD,IAAM,iBAAiB,GAAG,KAAC,gBAAgB,eAAK,KAAK,EAAI,CAAC;QAC1D,OAAO,WAAW,CAAC,iBAAiB,CAAuB,CAAC;IAC9D,CAAC,CAAC;IAEF,iCAAiC;IACjC,IAAM,oBAAoB,GACxB,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,IAAI,IAAI,WAAW,CAAC;IACvE,iBAAiB,CAAC,WAAW,GAAG,4BAAqB,oBAAoB,MAAG,CAAC;IAE7E,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import React, { ComponentType } from 'react';\nimport { ImageWithFallback } from '../components';\n\n/**\n * A Higher-Order Component (HOC) that adds image fallback functionality to a component\n * @param WrappedComponent The component to wrap\n * @returns A new component with image fallback functionality\n */\nexport function withImageFallback<P extends object>(\n WrappedComponent: ComponentType<P>\n): React.FC<P> {\n // Create a new component that wraps the original component\n const WithImageFallback: React.FC<P> = (props) => {\n // Function to recursively process React elements\n const processNode = (node: React.ReactNode): React.ReactNode => {\n if (!React.isValidElement(node)) {\n return node;\n }\n\n const element = node as React.ReactElement;\n\n // If it's an img element, replace it with ImageWithFallback\n if (element.type === 'img') {\n const { src, alt, width, height, className, ...rest } = element.props;\n\n return (\n <ImageWithFallback\n src={src}\n alt={alt || 'Image'}\n width={width}\n height={height}\n className={className}\n {...rest}\n />\n );\n }\n\n // If it has children, process them recursively\n if (element.props && element.props.children) {\n const children = React.Children.map(\n element.props.children,\n processNode\n );\n\n return React.cloneElement(element, { ...element.props }, children);\n }\n\n return element;\n };\n\n // Render the wrapped component and process its output\n const renderedComponent = <WrappedComponent {...props} />;\n return processNode(renderedComponent) as React.ReactElement;\n };\n\n // Set display name for debugging\n const wrappedComponentName =\n WrappedComponent.displayName || WrappedComponent.name || 'Component';\n WithImageFallback.displayName = `withImageFallback(${wrappedComponentName})`;\n\n return WithImageFallback;\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
import type { SignMessageParams, WalletAccount } from '@turnkey/core';
|
|
3
|
+
interface SignMessageResult {
|
|
4
|
+
r?: string;
|
|
5
|
+
s?: string;
|
|
6
|
+
signature?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TurnkeySignerFactoryParams {
|
|
9
|
+
walletAccount: WalletAccount;
|
|
10
|
+
signMessage: (params: SignMessageParams) => Promise<SignMessageResult>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a lightweight wallet facade that matches the Dynamic wallet API surface
|
|
14
|
+
* so the rest of the widget can interact with a Turnkey-backed Solana account.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTurnkeySolanaWallet({ walletAccount, signMessage, }: TurnkeySignerFactoryParams): {
|
|
17
|
+
address: string;
|
|
18
|
+
chain: string;
|
|
19
|
+
type: string;
|
|
20
|
+
getSigner: () => Promise<{
|
|
21
|
+
signTransaction: (tx: Transaction | VersionedTransaction) => Promise<Transaction | VersionedTransaction>;
|
|
22
|
+
signMessage: (message: Uint8Array) => Promise<Uint8Array>;
|
|
23
|
+
}>;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { Buffer } from 'buffer';
|
|
38
|
+
import { PublicKey, } from '@solana/web3.js';
|
|
39
|
+
var HEX_ENCODING = 'PAYLOAD_ENCODING_HEXADECIMAL';
|
|
40
|
+
var NO_OP_HASH = 'HASH_FUNCTION_NOT_APPLICABLE';
|
|
41
|
+
var bytesToHex = function (bytes) {
|
|
42
|
+
return Array.from(bytes)
|
|
43
|
+
.map(function (byte) { return byte.toString(16).padStart(2, '0'); })
|
|
44
|
+
.join('');
|
|
45
|
+
};
|
|
46
|
+
var hexToBytes = function (hex) {
|
|
47
|
+
var normalized = hex.startsWith('0x') ? hex.slice(2) : hex;
|
|
48
|
+
var output = new Uint8Array(normalized.length / 2);
|
|
49
|
+
for (var i = 0; i < normalized.length; i += 2) {
|
|
50
|
+
output[i / 2] = parseInt(normalized.slice(i, i + 2), 16);
|
|
51
|
+
}
|
|
52
|
+
return output;
|
|
53
|
+
};
|
|
54
|
+
var serializeSolanaMessage = function (tx) {
|
|
55
|
+
if ('serializeMessage' in tx && typeof tx.serializeMessage === 'function') {
|
|
56
|
+
return tx.serializeMessage();
|
|
57
|
+
}
|
|
58
|
+
var versioned = tx;
|
|
59
|
+
return Uint8Array.from(versioned.message.serialize());
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Creates a lightweight wallet facade that matches the Dynamic wallet API surface
|
|
63
|
+
* so the rest of the widget can interact with a Turnkey-backed Solana account.
|
|
64
|
+
*/
|
|
65
|
+
export function createTurnkeySolanaWallet(_a) {
|
|
66
|
+
var _this = this;
|
|
67
|
+
var walletAccount = _a.walletAccount, signMessage = _a.signMessage;
|
|
68
|
+
var publicKey = new PublicKey(walletAccount.address);
|
|
69
|
+
var signWithTurnkey = function (message) { return __awaiter(_this, void 0, void 0, function () {
|
|
70
|
+
var result, r, s;
|
|
71
|
+
var _a, _b;
|
|
72
|
+
return __generator(this, function (_c) {
|
|
73
|
+
switch (_c.label) {
|
|
74
|
+
case 0: return [4 /*yield*/, signMessage({
|
|
75
|
+
walletAccount: walletAccount,
|
|
76
|
+
message: bytesToHex(message),
|
|
77
|
+
encoding: HEX_ENCODING,
|
|
78
|
+
hashFunction: NO_OP_HASH,
|
|
79
|
+
})];
|
|
80
|
+
case 1:
|
|
81
|
+
result = _c.sent();
|
|
82
|
+
if (result.signature) {
|
|
83
|
+
return [2 /*return*/, hexToBytes(result.signature)];
|
|
84
|
+
}
|
|
85
|
+
r = (_a = result.r) !== null && _a !== void 0 ? _a : '';
|
|
86
|
+
s = (_b = result.s) !== null && _b !== void 0 ? _b : '';
|
|
87
|
+
return [2 /*return*/, hexToBytes("".concat(r).concat(s))];
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}); };
|
|
91
|
+
var signer = {
|
|
92
|
+
signTransaction: function (tx) { return __awaiter(_this, void 0, void 0, function () {
|
|
93
|
+
var signature;
|
|
94
|
+
return __generator(this, function (_a) {
|
|
95
|
+
switch (_a.label) {
|
|
96
|
+
case 0: return [4 /*yield*/, signWithTurnkey(serializeSolanaMessage(tx))];
|
|
97
|
+
case 1:
|
|
98
|
+
signature = _a.sent();
|
|
99
|
+
tx.addSignature(publicKey, Buffer.from(signature));
|
|
100
|
+
return [2 /*return*/, tx];
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}); },
|
|
104
|
+
signMessage: function (message) { return __awaiter(_this, void 0, void 0, function () {
|
|
105
|
+
return __generator(this, function (_a) {
|
|
106
|
+
return [2 /*return*/, signWithTurnkey(message)];
|
|
107
|
+
});
|
|
108
|
+
}); },
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
address: walletAccount.address,
|
|
112
|
+
chain: 'SOL',
|
|
113
|
+
type: 'turnkey',
|
|
114
|
+
getSigner: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
115
|
+
return [2 /*return*/, signer];
|
|
116
|
+
}); }); },
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=createTurnkeyWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTurnkeyWallet.js","sourceRoot":"","sources":["../../../src/features/turnkey/createTurnkeyWallet.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from 'buffer';\nimport {\n PublicKey,\n Transaction,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport type { SignMessageParams, WalletAccount } from '@turnkey/core';\n\nconst HEX_ENCODING = 'PAYLOAD_ENCODING_HEXADECIMAL';\nconst NO_OP_HASH = 'HASH_FUNCTION_NOT_APPLICABLE';\n\ninterface SignMessageResult {\n r?: string;\n s?: string;\n signature?: string;\n}\n\nexport interface TurnkeySignerFactoryParams {\n walletAccount: WalletAccount;\n signMessage: (params: SignMessageParams) => Promise<SignMessageResult>;\n}\n\nconst bytesToHex = (bytes: Uint8Array): string =>\n Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('');\n\nconst hexToBytes = (hex: string): Uint8Array => {\n const normalized = hex.startsWith('0x') ? hex.slice(2) : hex;\n const output = new Uint8Array(normalized.length / 2);\n for (let i = 0; i < normalized.length; i += 2) {\n output[i / 2] = parseInt(normalized.slice(i, i + 2), 16);\n }\n return output;\n};\n\nconst serializeSolanaMessage = (\n tx: Transaction | VersionedTransaction\n): Uint8Array => {\n if ('serializeMessage' in tx && typeof tx.serializeMessage === 'function') {\n return tx.serializeMessage();\n }\n\n const versioned = tx as VersionedTransaction;\n return Uint8Array.from(versioned.message.serialize());\n};\n\n/**\n * Creates a lightweight wallet facade that matches the Dynamic wallet API surface\n * so the rest of the widget can interact with a Turnkey-backed Solana account.\n */\nexport function createTurnkeySolanaWallet({\n walletAccount,\n signMessage,\n}: TurnkeySignerFactoryParams) {\n const publicKey = new PublicKey(walletAccount.address);\n\n const signWithTurnkey = async (message: Uint8Array): Promise<Uint8Array> => {\n const result = await signMessage({\n walletAccount,\n message: bytesToHex(message),\n encoding: HEX_ENCODING as SignMessageParams['encoding'],\n hashFunction: NO_OP_HASH as SignMessageParams['hashFunction'],\n });\n\n if (result.signature) {\n return hexToBytes(result.signature);\n }\n\n const r = result.r ?? '';\n const s = result.s ?? '';\n return hexToBytes(`${r}${s}`);\n };\n\n const signer = {\n signTransaction: async (\n tx: Transaction | VersionedTransaction\n ): Promise<Transaction | VersionedTransaction> => {\n const signature = await signWithTurnkey(serializeSolanaMessage(tx));\n tx.addSignature(publicKey, Buffer.from(signature));\n return tx;\n },\n signMessage: async (message: Uint8Array): Promise<Uint8Array> => {\n return signWithTurnkey(message);\n },\n };\n\n return {\n address: walletAccount.address,\n chain: 'SOL',\n type: 'turnkey',\n getSigner: async () => signer,\n };\n}\n"]}
|
package/dist/hooks/index.js
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./useN1Wallet"), exports);
|
|
18
|
-
__exportStar(require("./useNordUserInitialization"), exports);
|
|
1
|
+
export * from './useN1Wallet';
|
|
2
|
+
export * from './useNordUserInitialization';
|
|
19
3
|
//# sourceMappingURL=index.js.map
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC","sourcesContent":["export * from './useN1Wallet';\nexport * from './useNordUserInitialization';\n\n"]}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var react_1 = require("react");
|
|
6
|
-
var n1_wallet_context_1 = require("../context/n1-wallet-context");
|
|
7
|
-
function useN1WalletContext() {
|
|
8
|
-
var context = (0, react_1.useContext)(n1_wallet_context_1.N1WalletContext);
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { N1WalletContext, N1InternalWalletContext } from '../context/n1-wallet-context';
|
|
3
|
+
export function useN1WalletContext() {
|
|
4
|
+
var context = useContext(N1WalletContext);
|
|
9
5
|
if (context === undefined) {
|
|
10
6
|
throw new Error('useN1WalletContext must be used within a N1WalletProvider');
|
|
11
7
|
}
|
|
12
8
|
return context;
|
|
13
9
|
}
|
|
14
|
-
function useN1WalletInternalContext() {
|
|
15
|
-
var context =
|
|
10
|
+
export function useN1WalletInternalContext() {
|
|
11
|
+
var context = useContext(N1InternalWalletContext);
|
|
16
12
|
if (context === undefined) {
|
|
17
13
|
throw new Error('useN1WalletInternalContext must be used within a N1WalletProvider');
|
|
18
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useN1Wallet.js","sourceRoot":"","sources":["../../src/hooks/useN1Wallet.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useN1Wallet.js","sourceRoot":"","sources":["../../src/hooks/useN1Wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAExF,MAAM,UAAU,kBAAkB;IAChC,IAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,IAAM,OAAO,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { N1WalletContext, N1InternalWalletContext } from '../context/n1-wallet-context';\n\nexport function useN1WalletContext() {\n const context = useContext(N1WalletContext);\n if (context === undefined) {\n throw new Error(\n 'useN1WalletContext must be used within a N1WalletProvider'\n );\n }\n return context;\n}\n\nexport function useN1WalletInternalContext() {\n const context = useContext(N1InternalWalletContext);\n if (context === undefined) {\n throw new Error(\n 'useN1WalletInternalContext must be used within a N1WalletProvider'\n );\n }\n return context;\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -35,24 +34,22 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
34
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
35
|
}
|
|
37
36
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var nordUser_1 = require("../features/onboarding-flow/utils/nordUser");
|
|
49
|
-
function useNordUserInitialization() {
|
|
37
|
+
import { useEffect } from 'react';
|
|
38
|
+
import { PublicKey } from '@solana/web3.js';
|
|
39
|
+
import { signEd25519Message } from '../utils/ed25519';
|
|
40
|
+
import { WalletError, WalletErrorCode } from '../errors/types';
|
|
41
|
+
import { logger } from '../utils/logger';
|
|
42
|
+
import { N1SessionMode } from '../types/wallet';
|
|
43
|
+
import { useN1WalletContext, useN1WalletInternalContext } from './useN1Wallet';
|
|
44
|
+
import { generateSessionKeyPair, getSessionKeysFromLocalStorage, storeSessionKeysInLocalStorage } from '../features/onboarding-flow/utils/utils';
|
|
45
|
+
import { dynamicImportNordUser } from '../features/onboarding-flow/utils/nordUser';
|
|
46
|
+
export function useNordUserInitialization() {
|
|
50
47
|
var _this = this;
|
|
51
|
-
var _a =
|
|
52
|
-
var _b =
|
|
48
|
+
var _a = useN1WalletInternalContext(), setNordUser = _a.setNordUser, setSessionPubKey = _a.setSessionPubKey, setSignMessageWithSessionKey = _a.setSignMessageWithSessionKey, setSignMessageWithWalletKey = _a.setSignMessageWithWalletKey, 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, signMessageWithWalletKey = _b.signMessageWithWalletKey, signTransactionWithWalletKey = _b.signTransactionWithWalletKey, sessionPubKey = _b.sessionPubKey;
|
|
53
50
|
// First useEffect: Initialize signing functions
|
|
54
|
-
|
|
55
|
-
if (sessionMode !==
|
|
51
|
+
useEffect(function () {
|
|
52
|
+
if (sessionMode !== N1SessionMode.Nord || address === null || address === '') {
|
|
56
53
|
return;
|
|
57
54
|
}
|
|
58
55
|
var createTransactionSignFunction = function () {
|
|
@@ -70,17 +67,17 @@ function useNordUserInitialization() {
|
|
|
70
67
|
case 1: return [4 /*yield*/, (_a.sent()).signTransaction(transaction)];
|
|
71
68
|
case 2:
|
|
72
69
|
signedTransaction = _a.sent();
|
|
73
|
-
|
|
70
|
+
logger.debug('Solana transaction signature received');
|
|
74
71
|
// const serializedTx = signedTransaction.serialize();
|
|
75
72
|
// return Transaction.from(serializedTx);
|
|
76
73
|
console.log('signedTransaction', signedTransaction.signatures);
|
|
77
74
|
console.log('signedTransaction - 2', signedTransaction);
|
|
78
75
|
return [2 /*return*/, signedTransaction];
|
|
79
|
-
case 3: throw new
|
|
76
|
+
case 3: throw new WalletError(WalletErrorCode.USER_REJECTED, 'Unsupported chain', { originalError: new Error('Unsupported chain') });
|
|
80
77
|
case 4:
|
|
81
78
|
error_1 = _a.sent();
|
|
82
79
|
console.error('Error signing transaction with wallet:', error_1);
|
|
83
|
-
throw new
|
|
80
|
+
throw new WalletError(WalletErrorCode.USER_REJECTED, 'Failed to sign transaction with wallet', { originalError: error_1 });
|
|
84
81
|
case 5: return [2 /*return*/];
|
|
85
82
|
}
|
|
86
83
|
});
|
|
@@ -111,13 +108,13 @@ function useNordUserInitialization() {
|
|
|
111
108
|
if (!(result === null || result === void 0 ? void 0 : result.signature)) {
|
|
112
109
|
throw new Error('Wallet did not return a signature');
|
|
113
110
|
}
|
|
114
|
-
|
|
111
|
+
logger.debug('Solana message signature received');
|
|
115
112
|
return [2 /*return*/, result.signature];
|
|
116
|
-
case 3: throw new
|
|
113
|
+
case 3: throw new WalletError(WalletErrorCode.USER_REJECTED, 'Unsupported chain', { originalError: new Error('Unsupported chain') });
|
|
117
114
|
case 4:
|
|
118
115
|
error_2 = _a.sent();
|
|
119
116
|
console.error('Error signing message with wallet:', error_2);
|
|
120
|
-
throw new
|
|
117
|
+
throw new WalletError(WalletErrorCode.USER_REJECTED, 'Failed to sign message with wallet', { originalError: error_2 });
|
|
121
118
|
case 5: return [2 /*return*/];
|
|
122
119
|
}
|
|
123
120
|
});
|
|
@@ -135,7 +132,7 @@ function useNordUserInitialization() {
|
|
|
135
132
|
sessionKeyPair_1 = null;
|
|
136
133
|
if (address) {
|
|
137
134
|
try {
|
|
138
|
-
storedKeys =
|
|
135
|
+
storedKeys = getSessionKeysFromLocalStorage(address);
|
|
139
136
|
if (storedKeys) {
|
|
140
137
|
sessionKeyPair_1 = {
|
|
141
138
|
privateKey: storedKeys.ed25519PrivateKey,
|
|
@@ -149,7 +146,7 @@ function useNordUserInitialization() {
|
|
|
149
146
|
}
|
|
150
147
|
}
|
|
151
148
|
if (!!sessionKeyPair_1) return [3 /*break*/, 2];
|
|
152
|
-
return [4 /*yield*/,
|
|
149
|
+
return [4 /*yield*/, generateSessionKeyPair()];
|
|
153
150
|
case 1:
|
|
154
151
|
sessionKeyPair_1 = _a.sent();
|
|
155
152
|
_a.label = 2;
|
|
@@ -160,7 +157,7 @@ function useNordUserInitialization() {
|
|
|
160
157
|
switch (_a.label) {
|
|
161
158
|
case 0:
|
|
162
159
|
_a.trys.push([0, 2, , 3]);
|
|
163
|
-
return [4 /*yield*/,
|
|
160
|
+
return [4 /*yield*/, signEd25519Message(message, sessionKeyPair_1.privateKey)];
|
|
164
161
|
case 1: return [2 /*return*/, _a.sent()];
|
|
165
162
|
case 2:
|
|
166
163
|
error_4 = _a.sent();
|
|
@@ -170,7 +167,7 @@ function useNordUserInitialization() {
|
|
|
170
167
|
}
|
|
171
168
|
});
|
|
172
169
|
}); };
|
|
173
|
-
|
|
170
|
+
storeSessionKeysInLocalStorage({
|
|
174
171
|
privKey: sessionKeyPair_1.privateKey,
|
|
175
172
|
publicKey: sessionKeyPair_1.publicKey,
|
|
176
173
|
walletPublicKey: address,
|
|
@@ -217,8 +214,8 @@ function useNordUserInitialization() {
|
|
|
217
214
|
signTransactionWithWalletKey,
|
|
218
215
|
]);
|
|
219
216
|
// Second useEffect: Initialize NordUser
|
|
220
|
-
|
|
221
|
-
if (sessionMode !==
|
|
217
|
+
useEffect(function () {
|
|
218
|
+
if (sessionMode !== N1SessionMode.Nord) {
|
|
222
219
|
return;
|
|
223
220
|
}
|
|
224
221
|
var createNordUser = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -233,13 +230,13 @@ function useNordUserInitialization() {
|
|
|
233
230
|
sessionId = undefined;
|
|
234
231
|
if (address) {
|
|
235
232
|
try {
|
|
236
|
-
sessionKeyData =
|
|
233
|
+
sessionKeyData = getSessionKeysFromLocalStorage(address);
|
|
237
234
|
if (sessionKeyData) {
|
|
238
235
|
sessionIdKey = "n1_sessionId_".concat(address);
|
|
239
236
|
storedSessionId = localStorage.getItem(sessionIdKey);
|
|
240
237
|
if (storedSessionId !== null) {
|
|
241
238
|
sessionId = BigInt(storedSessionId);
|
|
242
|
-
|
|
239
|
+
logger.debug('Found existing sessionId in localStorage', {
|
|
243
240
|
sessionId: storedSessionId,
|
|
244
241
|
});
|
|
245
242
|
}
|
|
@@ -249,12 +246,12 @@ function useNordUserInitialization() {
|
|
|
249
246
|
console.error('Error retrieving sessionId from localStorage:', error);
|
|
250
247
|
}
|
|
251
248
|
}
|
|
252
|
-
return [4 /*yield*/,
|
|
249
|
+
return [4 /*yield*/, dynamicImportNordUser()];
|
|
253
250
|
case 1:
|
|
254
251
|
NordUser = _a.sent();
|
|
255
252
|
return [4 /*yield*/, NordUser.new({
|
|
256
253
|
nord: nord,
|
|
257
|
-
walletPubkey: new
|
|
254
|
+
walletPubkey: new PublicKey(address),
|
|
258
255
|
sessionPubkey: sessionPubKey,
|
|
259
256
|
sessionId: sessionId,
|
|
260
257
|
signSessionFn: signMessageWithSessionKey,
|
|
@@ -291,7 +288,7 @@ function useNordUserInitialization() {
|
|
|
291
288
|
signTransactionWithWalletKey &&
|
|
292
289
|
sessionPubKey &&
|
|
293
290
|
nordUser === null) {
|
|
294
|
-
|
|
291
|
+
logger.debug('Dependencies available, initializing NordUser');
|
|
295
292
|
createNordUser();
|
|
296
293
|
}
|
|
297
294
|
}, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNordUserInitialization.js","sourceRoot":"","sources":["../../src/hooks/useNordUserInitialization.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,8DAqQC;AAjRD,+BAAkC;AAClC,2CAA4C;AAC5C,4CAAsD;AACtD,yCAA+D;AAC/D,0CAAyC;AACzC,0CAAgD;AAChD,6CAA+E;AAC/E,iEAAiJ;AACjJ,uEAAmF;AAInF,SAAgB,yBAAyB;IAAzC,iBAqQC;IApQS,IAAA,KAOF,IAAA,wCAA0B,GAAE,EAN5B,WAAW,iBAAA,EACX,gBAAgB,sBAAA,EAChB,4BAA4B,kCAAA,EAC5B,2BAA2B,iCAAA,EAC3B,+BAA+B,qCAAA,EAC/B,aAAa,mBACe,CAAC;IAE3B,IAAA,KASF,IAAA,gCAAkB,GAAE,EARpB,OAAO,aAAA,EACP,QAAQ,cAAA,EACR,WAAW,iBAAA,EACX,IAAI,UAAA,EACJ,yBAAyB,+BAAA,EACzB,wBAAwB,8BAAA,EACxB,4BAA4B,kCAAA,EAC5B,aAAa,mBACO,CAAC;IACzB,gDAAgD;IAChD,IAAA,iBAAS,EAAC;QACN,IAAI,WAAW,KAAK,sBAAa,CAAC,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC3E,OAAO;QACX,CAAC;QAED,IAAM,6BAA6B,GAAG;YAClC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,IAAM,yBAAyB,GAAG,UAC9B,WAAgB;;;;;;iCAGR,CAAA,aAAa,CAAC,KAAK,KAAK,KAAK,CAAA,EAA7B,wBAA6B;4BAEzB,qBAAM,aAAa,CAAC,SAAS,EAAE,EAAA;gCADT,qBAAM,CAC5B,SAA+B,CAClC,CAAC,eAAe,CAAC,WAAW,CAAC,EAAA;;4BAFxB,iBAAiB,GAAG,SAEI;4BAC9B,eAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;4BAEtD,sDAAsD;4BACtD,yCAAyC;4BACzC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;4BAC/D,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,CAAC;4BACxD,sBAAO,iBAAiB,EAAC;gCAG7B,MAAM,IAAI,mBAAW,CACjB,uBAAe,CAAC,aAAa,EAC7B,mBAAmB,EACnB,EAAE,aAAa,EAAE,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,CACpD,CAAC;;;4BAEF,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,OAAK,CAAC,CAAC;4BAC/D,MAAM,IAAI,mBAAW,CACjB,uBAAe,CAAC,aAAa,EAC7B,wCAAwC,EACxC,EAAE,aAAa,EAAE,OAAK,EAAE,CAC3B,CAAC;;;;iBAET,CAAC;YAEF,+BAA+B,CAAC,cAAM,OAAA,yBAAyB,EAAzB,CAAyB,CAAC,CAAC;YACjE,OAAO,yBAAyB,CAAC;QACrC,CAAC,CAAC;QAEF,IAAM,+BAA+B,GAAG;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,IAAM,qBAAqB,GAAG,UAC1B,OAAmB;;;;;;iCAGX,CAAA,aAAa,CAAC,KAAK,KAAK,KAAK,CAAA,EAA7B,wBAA6B;4BACd,qBAAM,aAAa,CAAC,SAAS,EAAE,EAAA;;4BAAxC,MAAM,GAAG,SAA+B;4BAC9C,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,EAAE,CAAC;gCACvB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;4BACnE,CAAC;4BACc,qBAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAA;;4BAA1C,MAAM,GAAG,SAAiC;4BAChD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAA,EAAE,CAAC;gCACrB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;4BACzD,CAAC;4BACD,eAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;4BAClD,sBAAO,MAAM,CAAC,SAAS,EAAC;gCAG5B,MAAM,IAAI,mBAAW,CACjB,uBAAe,CAAC,aAAa,EAC7B,mBAAmB,EACnB,EAAE,aAAa,EAAE,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,CACpD,CAAC;;;4BAEF,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,OAAK,CAAC,CAAC;4BAC3D,MAAM,IAAI,mBAAW,CACjB,uBAAe,CAAC,aAAa,EAC7B,oCAAoC,EACpC,EAAE,aAAa,EAAE,OAAK,EAAE,CAC3B,CAAC;;;;iBAET,CAAC;YAEF,2BAA2B,CAAC,cAAM,OAAA,qBAAqB,EAArB,CAAqB,CAAC,CAAC;YACzD,OAAO,qBAAqB,CAAC;QACjC,CAAC,CAAC;QAEF,IAAM,aAAa,GAAG;;;;;;;wBAEV,mBAAiB,IAAI,CAAC;wBAC1B,IAAI,OAAO,EAAE,CAAC;4BACV,IAAI,CAAC;gCACK,UAAU,GAAG,IAAA,sCAA8B,EAAC,OAAO,CAAC,CAAC;gCAC3D,IAAI,UAAU,EAAE,CAAC;oCACb,gBAAc,GAAG;wCACb,UAAU,EAAE,UAAU,CAAC,iBAAiB;wCACxC,SAAS,EAAE,UAAU,CAAC,gBAAgB;qCACzC,CAAC;gCACN,CAAC;4BACL,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACb,OAAO,CAAC,KAAK,CACT,iDAAiD,EACjD,KAAK,CACR,CAAC;gCACF,gBAAc,GAAG,IAAI,CAAC;4BAC1B,CAAC;wBACL,CAAC;6BAEG,CAAC,gBAAc,EAAf,wBAAe;wBACE,qBAAM,IAAA,8BAAsB,GAAE,EAAA;;wBAA/C,gBAAc,GAAG,SAA8B,CAAC;;;wBAG9C,WAAS,UAAO,OAAY;;;;;;wCAEnB,qBAAM,IAAA,4BAAkB,EAAC,OAAO,EAAE,gBAAc,CAAC,UAAU,CAAC,EAAA;4CAAnE,sBAAO,SAA4D,EAAC;;;wCAEpE,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,OAAK,CAAC,CAAC;wCACxD,MAAM,OAAK,CAAC;;;;6BAEnB,CAAC;wBAGF,IAAA,sCAA8B,EAAC;4BAC3B,OAAO,EAAE,gBAAc,CAAC,UAAU;4BAClC,SAAS,EAAE,gBAAc,CAAC,SAAU;4BACpC,eAAe,EAAE,OAAO;4BACxB,SAAS,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,KAAI,KAAK;yBAC3C,CAAC,CAAC;wBAEH,gBAAgB,CAAC,gBAAc,CAAC,SAAU,CAAC,CAAC;wBAC5C,4BAA4B,CAAC,cAAM,OAAA,QAAM,EAAN,CAAM,CAAC,CAAC;wBAC3C,sBAAO,QAAM,EAAC;;;wBAEd,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAK,CAAC,CAAC;wBAChD,sBAAO,IAAI,EAAC;;;;aAEnB,CAAC;QAEF,yCAAyC;QACzC,IAAM,oBAAoB,GAAG;;;;wBACzB,IAAI,CAAC,4BAA4B,IAAI,aAAa,EAAE,CAAC;4BACjD,6BAA6B,EAAE,CAAC;wBACpC,CAAC;wBAED,IAAI,CAAC,wBAAwB,IAAI,aAAa,EAAE,CAAC;4BAC7C,+BAA+B,EAAE,CAAC;wBACtC,CAAC;6BAEG,CAAC,yBAAyB,EAA1B,wBAA0B;wBAC1B,qBAAM,aAAa,EAAE,EAAA;;wBAArB,SAAqB,CAAC;;;;;aAE7B,CAAC;QAEF,oBAAoB,EAAE,CAAC;IAC3B,CAAC,EAAE;QACC,aAAa;QACb,OAAO;QACP,WAAW;QACX,yBAAyB;QACzB,wBAAwB;QACxB,4BAA4B;KAC/B,CAAC,CAAC;IAEH,wCAAwC;IACxC,IAAA,iBAAS,EAAC;QACN,IAAI,WAAW,KAAK,sBAAa,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAM,cAAc,GAAG;;;;;;wBAEf,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,yBAAyB,IAAI,CAAC,wBAAwB,IAAI,CAAC,4BAA4B,EAAE,CAAC;4BAClI,sBAAO,IAAI,EAAC;wBAChB,CAAC;wBAEG,SAAS,GAAG,SAAS,CAAC;wBAC1B,IAAI,OAAO,EAAE,CAAC;4BACV,IAAI,CAAC;gCACK,cAAc,GAAG,IAAA,sCAA8B,EAAC,OAAO,CAAC,CAAC;gCAC/D,IAAI,cAAc,EAAE,CAAC;oCACX,YAAY,GAAG,uBAAgB,OAAO,CAAE,CAAC;oCACzC,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oCAC3D,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;wCAC3B,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;wCACpC,eAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE;4CACrD,SAAS,EAAE,eAAe;yCAC7B,CAAC,CAAC;oCACP,CAAC;gCACL,CAAC;4BACL,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;4BAC1E,CAAC;wBACL,CAAC;wBAEgB,qBAAM,IAAA,gCAAqB,GAAE,EAAA;;wBAAxC,QAAQ,GAAG,SAA6B;wBACjC,qBAAM,QAAQ,CAAC,GAAG,CAAC;gCAC5B,IAAI,MAAA;gCACJ,YAAY,EAAE,IAAI,mBAAS,CAAC,OAAO,CAAC;gCACpC,aAAa,EAAE,aAAa;gCAC5B,SAAS,WAAA;gCACT,aAAa,EAAE,yBAAyB;gCACxC,iBAAiB,EAAE,4BAA4B;gCAC/C,aAAa,EAAE,wBAAwB;6BAC1C,CAAC,EAAA;;wBARI,IAAI,GAAG,SAQX;;;;wBAGE,qBAAM,IAAI,CAAC,eAAe,EAAE,EAAA;;wBAA5B,SAA4B,CAAC;;;;;;wBAGjC,WAAW,CAAC,IAAI,CAAC,CAAC;wBAClB,sBAAO,IAAI,EAAC;;;wBAEZ,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,OAAK,CAAC,CAAC;wBACjD,WAAW,CAAC,IAAI,CAAC,CAAC;wBAClB,sBAAO,IAAI,EAAC;;;;aAEnB,CAAC;QAEF,gFAAgF;QAChF,IACI,yBAAyB;YACzB,wBAAwB;YACxB,4BAA4B;YAC5B,aAAa;YACb,QAAQ,KAAK,IAAI,EACnB,CAAC;YACC,eAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC9D,cAAc,EAAE,CAAC;QACrB,CAAC;IACL,CAAC,EAAE;QACC,WAAW;QACX,IAAI;QACJ,OAAO;QACP,yBAAyB;QACzB,wBAAwB;QACxB,4BAA4B;QAC5B,aAAa;QACb,QAAQ;QACR,WAAW;KACd,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { useEffect } from 'react';\nimport { PublicKey } from '@solana/web3.js';\nimport { signEd25519Message } from '../utils/ed25519';\nimport { WalletError, WalletErrorCode } from '../errors/types';\nimport { logger } from '../utils/logger';\nimport { N1SessionMode } from '../types/wallet';\nimport { useN1WalletContext, useN1WalletInternalContext } from './useN1Wallet';\nimport { generateSessionKeyPair, getSessionKeysFromLocalStorage, storeSessionKeysInLocalStorage } from '../features/onboarding-flow/utils/utils';\nimport { dynamicImportNordUser } from '../features/onboarding-flow/utils/nordUser';\n\n\n\nexport function useNordUserInitialization() {\n const {\n setNordUser,\n setSessionPubKey,\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n dynamicWallet,\n } = useN1WalletInternalContext();\n\n const {\n address,\n nordUser,\n sessionMode,\n nord,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n sessionPubKey,\n } = 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 createWalletMessageSignFunction = () => {\n if (!dynamicWallet) {\n return null;\n }\n\n const signMessageWithWallet = async (\n message: Uint8Array\n ): Promise<Uint8Array> => {\n try {\n if (dynamicWallet.chain === 'SOL') {\n const signer = await dynamicWallet.getSigner();\n if (!signer?.signMessage) {\n throw new Error('signMessage is not supported by this wallet');\n }\n const result = await signer.signMessage(message);\n if (!result?.signature) {\n throw new Error('Wallet did not return a signature');\n }\n logger.debug('Solana message signature received');\n return result.signature;\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 message 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(() => signMessageWithWallet);\n return signMessageWithWallet;\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 signEd25519Message(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 (!signMessageWithWalletKey && dynamicWallet) {\n createWalletMessageSignFunction();\n }\n\n if (!signMessageWithSessionKey) {\n await createSession();\n }\n };\n\n initSigningFunctions();\n }, [\n dynamicWallet,\n address,\n sessionMode,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\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 || !signMessageWithWalletKey || !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 NordUser = await dynamicImportNordUser();\n const user = await NordUser.new({\n nord,\n walletPubkey: new PublicKey(address),\n sessionPubkey: sessionPubKey,\n sessionId,\n signSessionFn: signMessageWithSessionKey,\n signTransactionFn: signTransactionWithWalletKey,\n signMessageFn: signMessageWithWalletKey,\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 signMessageWithWalletKey &&\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} \n"]}
|
|
1
|
+
{"version":3,"file":"useNordUserInitialization.js","sourceRoot":"","sources":["../../src/hooks/useNordUserInitialization.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect } from 'react';\nimport { PublicKey } from '@solana/web3.js';\nimport { signEd25519Message } from '../utils/ed25519';\nimport { WalletError, WalletErrorCode } from '../errors/types';\nimport { logger } from '../utils/logger';\nimport { N1SessionMode } from '../types/wallet';\nimport { useN1WalletContext, useN1WalletInternalContext } from './useN1Wallet';\nimport { generateSessionKeyPair, getSessionKeysFromLocalStorage, storeSessionKeysInLocalStorage } from '../features/onboarding-flow/utils/utils';\nimport { dynamicImportNordUser } from '../features/onboarding-flow/utils/nordUser';\n\n\n\nexport function useNordUserInitialization() {\n const {\n setNordUser,\n setSessionPubKey,\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n dynamicWallet,\n } = useN1WalletInternalContext();\n\n const {\n address,\n nordUser,\n sessionMode,\n nord,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n sessionPubKey,\n } = 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 createWalletMessageSignFunction = () => {\n if (!dynamicWallet) {\n return null;\n }\n\n const signMessageWithWallet = async (\n message: Uint8Array\n ): Promise<Uint8Array> => {\n try {\n if (dynamicWallet.chain === 'SOL') {\n const signer = await dynamicWallet.getSigner();\n if (!signer?.signMessage) {\n throw new Error('signMessage is not supported by this wallet');\n }\n const result = await signer.signMessage(message);\n if (!result?.signature) {\n throw new Error('Wallet did not return a signature');\n }\n logger.debug('Solana message signature received');\n return result.signature;\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 message 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(() => signMessageWithWallet);\n return signMessageWithWallet;\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 signEd25519Message(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 (!signMessageWithWalletKey && dynamicWallet) {\n createWalletMessageSignFunction();\n }\n\n if (!signMessageWithSessionKey) {\n await createSession();\n }\n };\n\n initSigningFunctions();\n }, [\n dynamicWallet,\n address,\n sessionMode,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\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 || !signMessageWithWalletKey || !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 NordUser = await dynamicImportNordUser();\n const user = await NordUser.new({\n nord,\n walletPubkey: new PublicKey(address),\n sessionPubkey: sessionPubKey,\n sessionId,\n signSessionFn: signMessageWithSessionKey,\n signTransactionFn: signTransactionWithWalletKey,\n signMessageFn: signMessageWithWalletKey,\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 signMessageWithWalletKey &&\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} \n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Object.defineProperty(exports, "N1WalletProvider", { enumerable: true, get: function () { return N1WalletProvider_1.N1WalletProvider; } });
|
|
9
|
-
var wallet_1 = require("./types/wallet");
|
|
10
|
-
Object.defineProperty(exports, "N1ModalViewMode", { enumerable: true, get: function () { return wallet_1.N1ModalViewMode; } });
|
|
11
|
-
Object.defineProperty(exports, "N1SessionMode", { enumerable: true, get: function () { return wallet_1.N1SessionMode; } });
|
|
12
|
-
var N1ConnectButton_1 = require("./components/N1ConnectButton");
|
|
13
|
-
Object.defineProperty(exports, "N1ConnectButton", { enumerable: true, get: function () { return N1ConnectButton_1.N1ConnectButton; } });
|
|
14
|
-
var useN1Wallet_1 = require("./hooks/useN1Wallet");
|
|
15
|
-
Object.defineProperty(exports, "useN1WalletContext", { enumerable: true, get: function () { return useN1Wallet_1.useN1WalletContext; } });
|
|
16
|
-
var Logo_1 = require("./components/Logo");
|
|
17
|
-
Object.defineProperty(exports, "Logo", { enumerable: true, get: function () { return __importDefault(Logo_1).default; } });
|
|
18
|
-
var N1Loader_1 = require("./animations/N1Loader");
|
|
19
|
-
Object.defineProperty(exports, "N1LoaderAnimation", { enumerable: true, get: function () { return N1Loader_1.N1LoaderAnimation; } });
|
|
20
|
-
var Processing_1 = require("./animations/Processing");
|
|
21
|
-
Object.defineProperty(exports, "ProcessingAnimation", { enumerable: true, get: function () { return Processing_1.ProcessingAnimation; } });
|
|
1
|
+
export { N1WalletProvider } from './providers/N1WalletProvider';
|
|
2
|
+
export { N1ModalViewMode, N1SessionMode, } from './types/wallet';
|
|
3
|
+
export { N1ConnectButton } from './components/N1ConnectButton';
|
|
4
|
+
export { useN1WalletContext } from './hooks/useN1Wallet';
|
|
5
|
+
export { default as Logo } from './components/Logo';
|
|
6
|
+
export { N1LoaderAnimation } from './animations/N1Loader';
|
|
7
|
+
export { ProcessingAnimation } from './animations/Processing';
|
|
22
8
|
//# sourceMappingURL=index.js.map
|