@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.
Files changed (216) hide show
  1. package/dist/animations/N1Loader.js +8 -14
  2. package/dist/animations/N1Loader.js.map +1 -1
  3. package/dist/animations/Processing.js +8 -14
  4. package/dist/animations/Processing.js.map +1 -1
  5. package/dist/components/LoadingFallback.js +2 -6
  6. package/dist/components/LoadingFallback.js.map +1 -1
  7. package/dist/components/Logo.js +22 -25
  8. package/dist/components/Logo.js.map +1 -1
  9. package/dist/components/N1ConnectButton.js +12 -18
  10. package/dist/components/N1ConnectButton.js.map +1 -1
  11. package/dist/components/logos/ArbitrumLogo.js +3 -7
  12. package/dist/components/logos/ArbitrumLogo.js.map +1 -1
  13. package/dist/components/logos/BaseLogo.js +3 -7
  14. package/dist/components/logos/BaseLogo.js.map +1 -1
  15. package/dist/components/logos/BeraLogo.js +3 -7
  16. package/dist/components/logos/BeraLogo.js.map +1 -1
  17. package/dist/components/logos/BitcoinLogo.js +3 -7
  18. package/dist/components/logos/BitcoinLogo.js.map +1 -1
  19. package/dist/components/logos/EthereumLogo.js +3 -7
  20. package/dist/components/logos/EthereumLogo.js.map +1 -1
  21. package/dist/components/logos/HyperliquidLogo.js +3 -7
  22. package/dist/components/logos/HyperliquidLogo.js.map +1 -1
  23. package/dist/components/logos/OptimismLogo.js +3 -7
  24. package/dist/components/logos/OptimismLogo.js.map +1 -1
  25. package/dist/components/logos/SolanaLogo.js +3 -7
  26. package/dist/components/logos/SolanaLogo.js.map +1 -1
  27. package/dist/components/logos/ZeroOneLogo.js +3 -7
  28. package/dist/components/logos/ZeroOneLogo.js.map +1 -1
  29. package/dist/components/logos/index.js +9 -25
  30. package/dist/components/logos/index.js.map +1 -1
  31. package/dist/config/dynamic.d.ts +1 -0
  32. package/dist/config/dynamic.js +13 -0
  33. package/dist/config/dynamic.js.map +1 -0
  34. package/dist/config/solana.js +3 -7
  35. package/dist/config/solana.js.map +1 -1
  36. package/dist/config/turnkey.d.ts +2 -0
  37. package/dist/config/turnkey.js +35 -0
  38. package/dist/config/turnkey.js.map +1 -0
  39. package/dist/config.js +2 -5
  40. package/dist/config.js.map +1 -1
  41. package/dist/context/n1-wallet-context.js +4 -8
  42. package/dist/context/n1-wallet-context.js.map +1 -1
  43. package/dist/errors/types.js +3 -6
  44. package/dist/errors/types.js.map +1 -1
  45. package/dist/features/onboarding-flow/N1WalletModal.js +23 -59
  46. package/dist/features/onboarding-flow/N1WalletModal.js.map +1 -1
  47. package/dist/features/onboarding-flow/OnboardingFlow.js +46 -50
  48. package/dist/features/onboarding-flow/OnboardingFlow.js.map +1 -1
  49. package/dist/features/onboarding-flow/components/ChainButton.js +4 -7
  50. package/dist/features/onboarding-flow/components/ChainButton.js.map +1 -1
  51. package/dist/features/onboarding-flow/components/Header.js +11 -15
  52. package/dist/features/onboarding-flow/components/Header.js.map +1 -1
  53. package/dist/features/onboarding-flow/components/ImageWithFallback.js +6 -10
  54. package/dist/features/onboarding-flow/components/ImageWithFallback.js.map +1 -1
  55. package/dist/features/onboarding-flow/components/TransactionTable.js +10 -13
  56. package/dist/features/onboarding-flow/components/TransactionTable.js.map +1 -1
  57. package/dist/features/onboarding-flow/components/WaitingMessage.js +8 -14
  58. package/dist/features/onboarding-flow/components/WaitingMessage.js.map +1 -1
  59. package/dist/features/onboarding-flow/components/index.js +5 -21
  60. package/dist/features/onboarding-flow/components/index.js.map +1 -1
  61. package/dist/features/onboarding-flow/index.js +1 -5
  62. package/dist/features/onboarding-flow/index.js.map +1 -1
  63. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js +55 -60
  64. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js.map +1 -1
  65. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js +43 -48
  66. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js.map +1 -1
  67. package/dist/features/onboarding-flow/providers/StateProvider.js +7 -11
  68. package/dist/features/onboarding-flow/providers/StateProvider.js.map +1 -1
  69. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js +69 -74
  70. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -1
  71. package/dist/features/onboarding-flow/providers/debug.js +18 -21
  72. package/dist/features/onboarding-flow/providers/debug.js.map +1 -1
  73. package/dist/features/onboarding-flow/providers/index.js +5 -16
  74. package/dist/features/onboarding-flow/providers/index.js.map +1 -1
  75. package/dist/features/onboarding-flow/providers/onboardingStateMachine.js +15 -20
  76. package/dist/features/onboarding-flow/providers/onboardingStateMachine.js.map +1 -1
  77. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js +8 -11
  78. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +1 -1
  79. package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js +34 -38
  80. package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js.map +1 -1
  81. package/dist/features/onboarding-flow/screens/02-TurnkeyAuthScreen.d.ts +1 -0
  82. package/dist/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js +18 -0
  83. package/dist/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js.map +1 -0
  84. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js +47 -51
  85. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js.map +1 -1
  86. package/dist/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.d.ts +1 -0
  87. package/dist/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js +18 -0
  88. package/dist/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js.map +1 -0
  89. package/dist/features/onboarding-flow/screens/04-ChainSelectionScreen.d.ts +31 -0
  90. package/dist/features/onboarding-flow/screens/04-ChainSelectionScreen.js +100 -0
  91. package/dist/features/onboarding-flow/screens/04-ChainSelectionScreen.js.map +1 -0
  92. package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js +8 -12
  93. package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js.map +1 -1
  94. package/dist/features/onboarding-flow/screens/05-AmountInputScreen.d.ts +6 -0
  95. package/dist/features/onboarding-flow/screens/05-AmountInputScreen.js +360 -0
  96. package/dist/features/onboarding-flow/screens/05-AmountInputScreen.js.map +1 -0
  97. package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js +25 -28
  98. package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js.map +1 -1
  99. package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js +10 -13
  100. package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js.map +1 -1
  101. package/dist/features/onboarding-flow/screens/06-DepositProgressScreen.d.ts +3 -0
  102. package/dist/features/onboarding-flow/screens/06-DepositProgressScreen.js +31 -0
  103. package/dist/features/onboarding-flow/screens/06-DepositProgressScreen.js.map +1 -0
  104. package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.d.ts +1 -0
  105. package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.js +136 -0
  106. package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.js.map +1 -0
  107. package/dist/features/onboarding-flow/screens/07-ErrorScreen.js +7 -10
  108. package/dist/features/onboarding-flow/screens/07-ErrorScreen.js.map +1 -1
  109. package/dist/features/onboarding-flow/screens/08-AuthLoadingScreen.d.ts +1 -0
  110. package/dist/features/onboarding-flow/screens/08-AuthLoadingScreen.js +31 -0
  111. package/dist/features/onboarding-flow/screens/08-AuthLoadingScreen.js.map +1 -0
  112. package/dist/features/onboarding-flow/screens/08-TurnkeyAuthScreen.d.ts +1 -0
  113. package/dist/features/onboarding-flow/screens/08-TurnkeyAuthScreen.js +18 -0
  114. package/dist/features/onboarding-flow/screens/08-TurnkeyAuthScreen.js.map +1 -0
  115. package/dist/features/onboarding-flow/screens/09-ErrorScreen.d.ts +1 -0
  116. package/dist/features/onboarding-flow/screens/09-ErrorScreen.js +14 -0
  117. package/dist/features/onboarding-flow/screens/09-ErrorScreen.js.map +1 -0
  118. package/dist/features/onboarding-flow/screens/09-TurnkeyPreparingScreen.d.ts +1 -0
  119. package/dist/features/onboarding-flow/screens/09-TurnkeyPreparingScreen.js +18 -0
  120. package/dist/features/onboarding-flow/screens/09-TurnkeyPreparingScreen.js.map +1 -0
  121. package/dist/features/onboarding-flow/screens/TurnkeyAuthScreen.d.ts +1 -0
  122. package/dist/features/onboarding-flow/screens/TurnkeyAuthScreen.js +18 -0
  123. package/dist/features/onboarding-flow/screens/TurnkeyAuthScreen.js.map +1 -0
  124. package/dist/features/onboarding-flow/screens/TurnkeyPreparingScreen.d.ts +1 -0
  125. package/dist/features/onboarding-flow/screens/TurnkeyPreparingScreen.js +18 -0
  126. package/dist/features/onboarding-flow/screens/TurnkeyPreparingScreen.js.map +1 -0
  127. package/dist/features/onboarding-flow/screens/index.js +7 -23
  128. package/dist/features/onboarding-flow/screens/index.js.map +1 -1
  129. package/dist/features/onboarding-flow/types.js +3 -6
  130. package/dist/features/onboarding-flow/types.js.map +1 -1
  131. package/dist/features/onboarding-flow/utils/depositStorage.js +3 -8
  132. package/dist/features/onboarding-flow/utils/depositStorage.js.map +1 -1
  133. package/dist/features/onboarding-flow/utils/imageUtils.js +3 -9
  134. package/dist/features/onboarding-flow/utils/imageUtils.js.map +1 -1
  135. package/dist/features/onboarding-flow/utils/nordUser.js +2 -38
  136. package/dist/features/onboarding-flow/utils/nordUser.js.map +1 -1
  137. package/dist/features/onboarding-flow/utils/nordUtils.js +5 -12
  138. package/dist/features/onboarding-flow/utils/nordUtils.js.map +1 -1
  139. package/dist/features/onboarding-flow/utils/session.js +14 -17
  140. package/dist/features/onboarding-flow/utils/session.js.map +1 -1
  141. package/dist/features/onboarding-flow/utils/transaction.js +1 -4
  142. package/dist/features/onboarding-flow/utils/transaction.js.map +1 -1
  143. package/dist/features/onboarding-flow/utils/utils.js +8 -16
  144. package/dist/features/onboarding-flow/utils/utils.js.map +1 -1
  145. package/dist/features/onboarding-flow/utils/withImageFallback.js +9 -15
  146. package/dist/features/onboarding-flow/utils/withImageFallback.js.map +1 -1
  147. package/dist/features/turnkey/createTurnkeyWallet.d.ts +25 -0
  148. package/dist/features/turnkey/createTurnkeyWallet.js +119 -0
  149. package/dist/features/turnkey/createTurnkeyWallet.js.map +1 -0
  150. package/dist/hooks/index.js +2 -18
  151. package/dist/hooks/index.js.map +1 -1
  152. package/dist/hooks/useN1Wallet.js +6 -10
  153. package/dist/hooks/useN1Wallet.js.map +1 -1
  154. package/dist/hooks/useNordUserInitialization.js +31 -34
  155. package/dist/hooks/useNordUserInitialization.js.map +1 -1
  156. package/dist/index.js +7 -21
  157. package/dist/index.js.map +1 -1
  158. package/dist/{styles/main.css → main.css} +2 -2
  159. package/dist/polyfills/windowEthereumGuard.js +1 -2
  160. package/dist/polyfills/windowEthereumGuard.js.map +1 -1
  161. package/dist/providers/LazyWalletProvider.js +38 -74
  162. package/dist/providers/LazyWalletProvider.js.map +1 -1
  163. package/dist/providers/N1WalletProvider.js +70 -109
  164. package/dist/providers/N1WalletProvider.js.map +1 -1
  165. package/dist/providers/ShadowRootWrapper.js +4 -10
  166. package/dist/providers/ShadowRootWrapper.js.map +1 -1
  167. package/dist/providers/TurnkeyProviderBridge.d.ts +7 -0
  168. package/dist/providers/TurnkeyProviderBridge.js +20 -0
  169. package/dist/providers/TurnkeyProviderBridge.js.map +1 -0
  170. package/dist/providers/WalletErrorBoundary.js +6 -11
  171. package/dist/providers/WalletErrorBoundary.js.map +1 -1
  172. package/dist/styles/embedded-main-css.d.ts +1 -1
  173. package/dist/styles/embedded-main-css.js +1 -3
  174. package/dist/styles/embedded-main-css.js.map +1 -1
  175. package/dist/turnkey/TurnkeyProvider.d.ts +9 -0
  176. package/dist/turnkey/TurnkeyProvider.js +378 -0
  177. package/dist/turnkey/TurnkeyProvider.js.map +1 -0
  178. package/dist/turnkey/createWalletProvider.d.ts +3 -0
  179. package/dist/turnkey/createWalletProvider.js +180 -0
  180. package/dist/turnkey/createWalletProvider.js.map +1 -0
  181. package/dist/turnkey/index.d.ts +3 -0
  182. package/dist/turnkey/index.js +3 -0
  183. package/dist/turnkey/index.js.map +1 -0
  184. package/dist/turnkey/types.d.ts +48 -0
  185. package/dist/turnkey/types.js +8 -0
  186. package/dist/turnkey/types.js.map +1 -0
  187. package/dist/types/wallet.js +4 -7
  188. package/dist/types/wallet.js.map +1 -1
  189. package/dist/utils/ed25519.js +14 -20
  190. package/dist/utils/ed25519.js.map +1 -1
  191. package/dist/utils/getPseudoName.js +7 -10
  192. package/dist/utils/getPseudoName.js.map +1 -1
  193. package/dist/utils/logger.js +3 -5
  194. package/dist/utils/logger.js.map +1 -1
  195. package/dist/utils/shortenString.js +2 -6
  196. package/dist/utils/shortenString.js.map +1 -1
  197. package/dist/utils/turnkeySessionStorage.d.ts +3 -0
  198. package/dist/utils/turnkeySessionStorage.js +33 -0
  199. package/dist/utils/turnkeySessionStorage.js.map +1 -0
  200. package/dist/utils/words.js +1 -4
  201. package/dist/utils/words.js.map +1 -1
  202. package/package.json +3 -3
  203. package/dist/assets/fonts/apk-galeria/APK-Galeria-Bold-Italic-Trial.otf +0 -0
  204. package/dist/assets/fonts/apk-galeria/APK-Galeria-Bold-Trial.otf +0 -0
  205. package/dist/assets/fonts/apk-galeria/APK-Galeria-Extra-Bold-Italic-Trial.otf +0 -0
  206. package/dist/assets/fonts/apk-galeria/APK-Galeria-Extra-Bold-Trial.otf +0 -0
  207. package/dist/assets/fonts/apk-galeria/APK-Galeria-Light-Italic-Trial.otf +0 -0
  208. package/dist/assets/fonts/apk-galeria/APK-Galeria-Light-Trial.otf +0 -0
  209. package/dist/assets/fonts/apk-galeria/APK-Galeria-Medium-Italic-Trial.otf +0 -0
  210. package/dist/assets/fonts/apk-galeria/APK-Galeria-Medium-Trial.otf +0 -0
  211. package/dist/assets/fonts/apk-galeria/APK-Galeria-Regular-Italic-Trial.otf +0 -0
  212. package/dist/assets/fonts/apk-galeria/APK-Galeria-Regular-Trial.otf +0 -0
  213. package/dist/assets/fonts/apk-galeria/APK-Galeria-Semi-Bold-Italic-Trial.otf +0 -0
  214. package/dist/assets/fonts/apk-galeria/APK-Galeria-Semi-Bold-Trial.otf +0 -0
  215. package/dist/assets/fonts/apk-galeria/APK-Galeria-Thin-Italic-Trial.otf +0 -0
  216. package/dist/assets/fonts/apk-galeria/APK-Galeria-Thin-Trial.otf +0 -0
@@ -0,0 +1,9 @@
1
+ import type { TurnkeyContextValue } from "./types";
2
+ import type { TurnkeyProviderConfig } from "./types";
3
+ interface TurnkeyProviderProps {
4
+ config: TurnkeyProviderConfig;
5
+ children: React.ReactNode;
6
+ }
7
+ export declare function TurnkeyProvider({ config, children }: TurnkeyProviderProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare const useTurnkey: () => TurnkeyContextValue;
9
+ export {};
@@ -0,0 +1,378 @@
1
+ "use client";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ 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);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ import { jsx as _jsx } from "react/jsx-runtime";
50
+ import { SessionKey, TurnkeyClient, StamperType, } from "@turnkey/core";
51
+ import { compressRawPublicKey } from "@turnkey/crypto";
52
+ import { bytesToHex, hashMessage, hexToBytes, recoverPublicKey } from "viem";
53
+ import { createContext, useCallback, useContext, useEffect, useRef, useMemo, useState, } from "react";
54
+ import { logger } from "../utils/logger";
55
+ import { AuthState } from "./types";
56
+ import { readTurnkeySessionKey } from "../utils/turnkeySessionStorage";
57
+ import { buildWalletProvider } from "./createWalletProvider";
58
+ var TurnkeyContext = createContext(null);
59
+ var GET_PUBLIC_KEY_MESSAGE = "GET_PUBLIC_KEY";
60
+ var deriveCompressedPublicKey = function (wallet) { return __awaiter(void 0, void 0, void 0, function () {
61
+ var signWithWallet, signature, normalizedSignature, publicKeyUncompressed, compressed;
62
+ return __generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0:
65
+ signWithWallet = function (message) { return __awaiter(void 0, void 0, void 0, function () {
66
+ var sig;
67
+ var _a, _b;
68
+ return __generator(this, function (_c) {
69
+ switch (_c.label) {
70
+ case 0:
71
+ if (!(typeof wallet.signMessage === "function")) return [3 /*break*/, 2];
72
+ return [4 /*yield*/, wallet.signMessage(message)];
73
+ case 1:
74
+ sig = _c.sent();
75
+ if (sig) {
76
+ return [2 /*return*/, sig];
77
+ }
78
+ _c.label = 2;
79
+ case 2:
80
+ if (typeof ((_a = wallet.connector) === null || _a === void 0 ? void 0 : _a.signMessage) === "function") {
81
+ return [2 /*return*/, wallet.connector.signMessage(message, (_b = wallet.address) !== null && _b !== void 0 ? _b : undefined)];
82
+ }
83
+ return [2 /*return*/, undefined];
84
+ }
85
+ });
86
+ }); };
87
+ return [4 /*yield*/, signWithWallet(GET_PUBLIC_KEY_MESSAGE)];
88
+ case 1:
89
+ signature = _a.sent();
90
+ if (!signature || typeof signature !== "string") {
91
+ throw new Error("Wallet did not return a signature for public key derivation");
92
+ }
93
+ normalizedSignature = signature.startsWith("0x") ? signature : "0x".concat(signature);
94
+ return [4 /*yield*/, recoverPublicKey({
95
+ hash: hashMessage(GET_PUBLIC_KEY_MESSAGE),
96
+ signature: normalizedSignature,
97
+ })];
98
+ case 2:
99
+ publicKeyUncompressed = _a.sent();
100
+ compressed = compressRawPublicKey(hexToBytes(publicKeyUncompressed));
101
+ return [2 /*return*/, bytesToHex(compressed).replace(/^0x/, "")];
102
+ }
103
+ });
104
+ }); };
105
+ export function TurnkeyProvider(_a) {
106
+ var _this = this;
107
+ var config = _a.config, children = _a.children;
108
+ var isDuplicateCredentialError = function (error) {
109
+ var _a, _b;
110
+ var message = (_b = (_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : "";
111
+ return message.includes("credential public keys must be unique");
112
+ };
113
+ var clientRef = useRef(null);
114
+ var clientInitPromiseRef = useRef(null);
115
+ var _b = useState(AuthState.Unauthenticated), authState = _b[0], setAuthState = _b[1];
116
+ var _c = useState([]), wallets = _c[0], setWallets = _c[1];
117
+ var _d = useState(null), session = _d[0], setSession = _d[1];
118
+ var resetProviderState = useCallback(function () {
119
+ clientRef.current = null;
120
+ clientInitPromiseRef.current = null;
121
+ setSession(null);
122
+ setWallets([]);
123
+ setAuthState(AuthState.Unauthenticated);
124
+ }, []);
125
+ useEffect(function () {
126
+ resetProviderState();
127
+ }, [resetProviderState, config]);
128
+ var ensureClient = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
129
+ var _this = this;
130
+ return __generator(this, function (_a) {
131
+ if (!config) {
132
+ throw new Error("Turnkey configuration is missing");
133
+ }
134
+ if (clientRef.current) {
135
+ return [2 /*return*/, clientRef.current];
136
+ }
137
+ if (!clientInitPromiseRef.current) {
138
+ clientInitPromiseRef.current = (function () { return __awaiter(_this, void 0, void 0, function () {
139
+ var nextClient;
140
+ return __generator(this, function (_a) {
141
+ switch (_a.label) {
142
+ case 0:
143
+ nextClient = new TurnkeyClient({
144
+ organizationId: config.organizationId,
145
+ authProxyConfigId: config.authProxyConfigId,
146
+ authProxyUrl: config.authProxyUrl,
147
+ apiBaseUrl: config.apiBaseUrl,
148
+ defaultStamperType: StamperType.Wallet,
149
+ walletConfig: {
150
+ features: {
151
+ auth: true,
152
+ connecting: false,
153
+ },
154
+ chains: {
155
+ ethereum: { native: true },
156
+ solana: { native: true },
157
+ },
158
+ },
159
+ });
160
+ return [4 /*yield*/, nextClient.init()];
161
+ case 1:
162
+ _a.sent();
163
+ clientRef.current = nextClient;
164
+ return [2 /*return*/, nextClient];
165
+ }
166
+ });
167
+ }); })().finally(function () {
168
+ clientInitPromiseRef.current = null;
169
+ });
170
+ }
171
+ return [2 /*return*/, clientInitPromiseRef.current];
172
+ });
173
+ }); }, [config]);
174
+ var refreshWallets = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
175
+ var client, fetched;
176
+ return __generator(this, function (_a) {
177
+ switch (_a.label) {
178
+ case 0: return [4 /*yield*/, ensureClient()];
179
+ case 1:
180
+ client = _a.sent();
181
+ return [4 /*yield*/, client.fetchWallets()];
182
+ case 2:
183
+ fetched = _a.sent();
184
+ if (Array.isArray(fetched)) {
185
+ setWallets(fetched);
186
+ return [2 /*return*/, fetched];
187
+ }
188
+ return [2 /*return*/, []];
189
+ }
190
+ });
191
+ }); }, [ensureClient]);
192
+ var hydrateSession = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
193
+ var hasStoredSession, client, activeSessionKey, existingSession, error_1;
194
+ return __generator(this, function (_a) {
195
+ switch (_a.label) {
196
+ case 0:
197
+ if (!config) {
198
+ return [2 /*return*/];
199
+ }
200
+ hasStoredSession = readTurnkeySessionKey();
201
+ if (!hasStoredSession && !clientRef.current) {
202
+ return [2 /*return*/];
203
+ }
204
+ _a.label = 1;
205
+ case 1:
206
+ _a.trys.push([1, 6, , 7]);
207
+ return [4 /*yield*/, ensureClient()];
208
+ case 2:
209
+ client = _a.sent();
210
+ return [4 /*yield*/, client.getActiveSessionKey()];
211
+ case 3:
212
+ activeSessionKey = _a.sent();
213
+ if (!activeSessionKey) {
214
+ setSession(null);
215
+ setAuthState(AuthState.Unauthenticated);
216
+ setWallets([]);
217
+ return [2 /*return*/];
218
+ }
219
+ return [4 /*yield*/, client.getSession({
220
+ sessionKey: activeSessionKey,
221
+ })];
222
+ case 4:
223
+ existingSession = _a.sent();
224
+ if (!existingSession) {
225
+ setSession(null);
226
+ setAuthState(AuthState.Unauthenticated);
227
+ setWallets([]);
228
+ return [2 /*return*/];
229
+ }
230
+ setSession(__assign(__assign({}, existingSession), { sessionKey: activeSessionKey }));
231
+ setAuthState(AuthState.Authenticated);
232
+ return [4 /*yield*/, refreshWallets()];
233
+ case 5:
234
+ _a.sent();
235
+ return [3 /*break*/, 7];
236
+ case 6:
237
+ error_1 = _a.sent();
238
+ logger.error("Failed to restore Turnkey session", error_1);
239
+ setSession(null);
240
+ setAuthState(AuthState.Unauthenticated);
241
+ setWallets([]);
242
+ return [3 /*break*/, 7];
243
+ case 7: return [2 /*return*/];
244
+ }
245
+ });
246
+ }); }, [config, ensureClient, refreshWallets]);
247
+ useEffect(function () {
248
+ hydrateSession();
249
+ }, [hydrateSession]);
250
+ var createWallet = useCallback(function (params) { return __awaiter(_this, void 0, void 0, function () {
251
+ var client, result;
252
+ return __generator(this, function (_a) {
253
+ switch (_a.label) {
254
+ case 0: return [4 /*yield*/, ensureClient()];
255
+ case 1:
256
+ client = _a.sent();
257
+ return [4 /*yield*/, client.createWallet(params)];
258
+ case 2:
259
+ result = _a.sent();
260
+ return [4 /*yield*/, refreshWallets()];
261
+ case 3:
262
+ _a.sent();
263
+ return [2 /*return*/, result];
264
+ }
265
+ });
266
+ }); }, [config === null || config === void 0 ? void 0 : config.organizationId, config === null || config === void 0 ? void 0 : config.sessionExpirationSeconds, ensureClient, refreshWallets]);
267
+ var signMessage = useCallback(function (params) { return __awaiter(_this, void 0, void 0, function () {
268
+ var client;
269
+ return __generator(this, function (_a) {
270
+ switch (_a.label) {
271
+ case 0: return [4 /*yield*/, ensureClient()];
272
+ case 1:
273
+ client = _a.sent();
274
+ return [2 /*return*/, client.signMessage(params)];
275
+ }
276
+ });
277
+ }); }, [ensureClient]);
278
+ var loginWithWallet = useCallback(function (wallet, options) { return __awaiter(_this, void 0, void 0, function () {
279
+ var client, walletProvider, publicKey, sharedAuthParams, loginError_1, signupError_1, activeSessionKey, _a, nextSession, error_2;
280
+ var _b, _c;
281
+ return __generator(this, function (_d) {
282
+ switch (_d.label) {
283
+ case 0: return [4 /*yield*/, ensureClient()];
284
+ case 1:
285
+ client = _d.sent();
286
+ setAuthState(AuthState.Authenticating);
287
+ _d.label = 2;
288
+ case 2:
289
+ _d.trys.push([2, 21, , 22]);
290
+ return [4 /*yield*/, buildWalletProvider(wallet)];
291
+ case 3:
292
+ walletProvider = _d.sent();
293
+ return [4 /*yield*/, deriveCompressedPublicKey(wallet)];
294
+ case 4:
295
+ publicKey = _d.sent();
296
+ sharedAuthParams = __assign(__assign(__assign({ walletProvider: walletProvider, sessionKey: options === null || options === void 0 ? void 0 : options.sessionKey }, ((config === null || config === void 0 ? void 0 : config.organizationId) && { organizationId: config.organizationId })), ((config === null || config === void 0 ? void 0 : config.sessionExpirationSeconds) && {
297
+ expirationSeconds: config.sessionExpirationSeconds,
298
+ })), { publicKey: publicKey });
299
+ _d.label = 5;
300
+ case 5:
301
+ _d.trys.push([5, 7, , 15]);
302
+ return [4 /*yield*/, client.loginWithWallet(sharedAuthParams)];
303
+ case 6:
304
+ _d.sent();
305
+ return [3 /*break*/, 15];
306
+ case 7:
307
+ loginError_1 = _d.sent();
308
+ _d.label = 8;
309
+ case 8:
310
+ _d.trys.push([8, 10, , 14]);
311
+ return [4 /*yield*/, client.signUpWithWallet(sharedAuthParams)];
312
+ case 9:
313
+ _d.sent();
314
+ return [3 /*break*/, 14];
315
+ case 10:
316
+ signupError_1 = _d.sent();
317
+ if (!isDuplicateCredentialError(signupError_1)) return [3 /*break*/, 12];
318
+ logger.warn("Turnkey signup saw duplicate credential; retrying login", signupError_1);
319
+ return [4 /*yield*/, client.loginWithWallet(sharedAuthParams)];
320
+ case 11:
321
+ _d.sent();
322
+ return [3 /*break*/, 13];
323
+ case 12:
324
+ logger.warn("Turnkey wallet login and signup failed", loginError_1, signupError_1);
325
+ throw signupError_1;
326
+ case 13: return [3 /*break*/, 14];
327
+ case 14: return [3 /*break*/, 15];
328
+ case 15:
329
+ if (!((_b = options === null || options === void 0 ? void 0 : options.sessionKey) !== null && _b !== void 0)) return [3 /*break*/, 16];
330
+ _a = _b;
331
+ return [3 /*break*/, 18];
332
+ case 16: return [4 /*yield*/, client.getActiveSessionKey()];
333
+ case 17:
334
+ _a = (_d.sent());
335
+ _d.label = 18;
336
+ case 18:
337
+ activeSessionKey = (_c = _a) !== null && _c !== void 0 ? _c : SessionKey.DefaultSessionkey;
338
+ return [4 /*yield*/, client.getSession({
339
+ sessionKey: activeSessionKey,
340
+ })];
341
+ case 19:
342
+ nextSession = _d.sent();
343
+ if (!nextSession) {
344
+ throw new Error("Turnkey session could not be established");
345
+ }
346
+ setSession(__assign(__assign({}, nextSession), { sessionKey: activeSessionKey }));
347
+ setAuthState(AuthState.Authenticated);
348
+ return [4 /*yield*/, refreshWallets()];
349
+ case 20:
350
+ _d.sent();
351
+ return [3 /*break*/, 22];
352
+ case 21:
353
+ error_2 = _d.sent();
354
+ setAuthState(AuthState.Unauthenticated);
355
+ throw error_2;
356
+ case 22: return [2 /*return*/];
357
+ }
358
+ });
359
+ }); }, [ensureClient, refreshWallets]);
360
+ var value = useMemo(function () { return ({
361
+ authState: authState,
362
+ session: session,
363
+ wallets: wallets,
364
+ createWallet: createWallet,
365
+ refreshWallets: refreshWallets,
366
+ signMessage: signMessage,
367
+ loginWithWallet: loginWithWallet,
368
+ }); }, [authState, session, wallets, createWallet, refreshWallets, signMessage, loginWithWallet]);
369
+ return (_jsx(TurnkeyContext.Provider, { value: value, children: children }));
370
+ }
371
+ export var useTurnkey = function () {
372
+ var context = useContext(TurnkeyContext);
373
+ if (!context) {
374
+ throw new Error("useTurnkey must be used within a TurnkeyProvider");
375
+ }
376
+ return context;
377
+ };
378
+ //# sourceMappingURL=TurnkeyProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TurnkeyProvider.js","sourceRoot":"","sources":["../../src/turnkey/TurnkeyProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport {\n SessionKey,\n TurnkeyClient,\n StamperType,\n type CreateWalletParams,\n type SignMessageParams,\n type Wallet,\n} from \"@turnkey/core\";\nimport type { v1SignRawPayloadResult } from \"@turnkey/sdk-types\";\nimport { compressRawPublicKey } from \"@turnkey/crypto\";\nimport { bytesToHex, hashMessage, hexToBytes, recoverPublicKey } from \"viem\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useMemo,\n useState,\n} from \"react\";\nimport { logger } from \"../utils/logger\";\nimport type { DynamicEvmWallet, TurnkeyContextValue, TurnkeySession } from \"./types\";\nimport { AuthState } from \"./types\";\nimport type { TurnkeyProviderConfig } from \"./types\";\nimport { readTurnkeySessionKey } from \"../utils/turnkeySessionStorage\";\nimport { buildWalletProvider } from \"./createWalletProvider\";\n\ninterface TurnkeyProviderProps {\n config: TurnkeyProviderConfig;\n children: React.ReactNode;\n}\n\nconst TurnkeyContext = createContext<TurnkeyContextValue | null>(null);\n\nconst GET_PUBLIC_KEY_MESSAGE = \"GET_PUBLIC_KEY\";\n\nconst deriveCompressedPublicKey = async (wallet: DynamicEvmWallet): Promise<string> => {\n const signWithWallet = async (message: string): Promise<string | undefined> => {\n if (typeof wallet.signMessage === \"function\") {\n const sig = await wallet.signMessage(message);\n if (sig) {\n return sig;\n }\n }\n if (typeof wallet.connector?.signMessage === \"function\") {\n return wallet.connector.signMessage(message, wallet.address ?? undefined);\n }\n return undefined;\n };\n\n const signature = await signWithWallet(GET_PUBLIC_KEY_MESSAGE);\n if (!signature || typeof signature !== \"string\") {\n throw new Error(\"Wallet did not return a signature for public key derivation\");\n }\n\n const normalizedSignature = signature.startsWith(\"0x\") ? signature : `0x${signature}`;\n const publicKeyUncompressed = await recoverPublicKey({\n hash: hashMessage(GET_PUBLIC_KEY_MESSAGE),\n signature: normalizedSignature as `0x${string}`,\n });\n const compressed = compressRawPublicKey(hexToBytes(publicKeyUncompressed));\n return bytesToHex(compressed).replace(/^0x/, \"\");\n};\n\nexport function TurnkeyProvider({ config, children }: TurnkeyProviderProps) {\n const isDuplicateCredentialError = (error: unknown): boolean => {\n const message =\n (error as { message?: string })?.message?.toLowerCase() ?? \"\";\n return message.includes(\"credential public keys must be unique\");\n };\n\n const clientRef = useRef<TurnkeyClient | null>(null);\n const clientInitPromiseRef = useRef<Promise<TurnkeyClient> | null>(null);\n const [authState, setAuthState] = useState<AuthState>(AuthState.Unauthenticated);\n const [wallets, setWallets] = useState<Wallet[]>([]);\n const [session, setSession] = useState<TurnkeySession | null>(null);\n\n const resetProviderState = useCallback(() => {\n clientRef.current = null;\n clientInitPromiseRef.current = null;\n setSession(null);\n setWallets([]);\n setAuthState(AuthState.Unauthenticated);\n }, []);\n\n useEffect(() => {\n resetProviderState();\n }, [resetProviderState, config]);\n\n const ensureClient = useCallback(async (): Promise<TurnkeyClient> => {\n if (!config) {\n throw new Error(\"Turnkey configuration is missing\");\n }\n\n if (clientRef.current) {\n return clientRef.current;\n }\n\n if (!clientInitPromiseRef.current) {\n clientInitPromiseRef.current = (async () => {\n const nextClient = new TurnkeyClient({\n organizationId: config.organizationId,\n authProxyConfigId: config.authProxyConfigId,\n authProxyUrl: config.authProxyUrl,\n apiBaseUrl: config.apiBaseUrl,\n defaultStamperType: StamperType.Wallet,\n walletConfig: {\n features: {\n auth: true,\n connecting: false,\n },\n chains: {\n ethereum: { native: true },\n solana: { native: true },\n },\n },\n });\n\n await nextClient.init();\n clientRef.current = nextClient;\n return nextClient;\n })().finally(() => {\n clientInitPromiseRef.current = null;\n });\n }\n\n return clientInitPromiseRef.current;\n }, [config]);\n\n const refreshWallets = useCallback(async (): Promise<Wallet[]> => {\n const client = await ensureClient();\n const fetched = await client.fetchWallets();\n if (Array.isArray(fetched)) {\n setWallets(fetched);\n return fetched;\n }\n return [];\n }, [ensureClient]);\n\n const hydrateSession = useCallback(async () => {\n if (!config) {\n return;\n }\n\n const hasStoredSession = readTurnkeySessionKey();\n if (!hasStoredSession && !clientRef.current) {\n return;\n }\n\n try {\n const client = await ensureClient();\n const activeSessionKey = await client.getActiveSessionKey();\n if (!activeSessionKey) {\n setSession(null);\n setAuthState(AuthState.Unauthenticated);\n setWallets([]);\n return;\n }\n const existingSession = await client.getSession({\n sessionKey: activeSessionKey,\n });\n if (!existingSession) {\n setSession(null);\n setAuthState(AuthState.Unauthenticated);\n setWallets([]);\n return;\n }\n setSession({ ...existingSession, sessionKey: activeSessionKey });\n setAuthState(AuthState.Authenticated);\n await refreshWallets();\n } catch (error) {\n logger.error(\"Failed to restore Turnkey session\", error);\n setSession(null);\n setAuthState(AuthState.Unauthenticated);\n setWallets([]);\n }\n }, [config, ensureClient, refreshWallets]);\n\n useEffect(() => {\n hydrateSession();\n }, [hydrateSession]);\n\n const createWallet = useCallback(\n async (params: CreateWalletParams) => {\n const client = await ensureClient();\n const result = await client.createWallet(params);\n await refreshWallets();\n return result;\n },\n [config?.organizationId, config?.sessionExpirationSeconds, ensureClient, refreshWallets],\n );\n\n const signMessage = useCallback(\n async (params: SignMessageParams): Promise<v1SignRawPayloadResult> => {\n const client = await ensureClient();\n return client.signMessage(params);\n },\n [ensureClient],\n );\n\n const loginWithWallet = useCallback(\n async (wallet: DynamicEvmWallet, options?: { sessionKey?: string }) => {\n const client = await ensureClient();\n setAuthState(AuthState.Authenticating);\n try {\n const walletProvider = await buildWalletProvider(wallet);\n const publicKey = await deriveCompressedPublicKey(wallet);\n const sharedAuthParams = {\n walletProvider,\n sessionKey: options?.sessionKey,\n ...(config?.organizationId && { organizationId: config.organizationId }),\n ...(config?.sessionExpirationSeconds && {\n expirationSeconds: config.sessionExpirationSeconds,\n }),\n publicKey,\n };\n\n try {\n await client.loginWithWallet(sharedAuthParams);\n } catch (loginError) {\n try {\n await client.signUpWithWallet(sharedAuthParams);\n } catch (signupError) {\n if (isDuplicateCredentialError(signupError)) {\n logger.warn(\n \"Turnkey signup saw duplicate credential; retrying login\",\n signupError,\n );\n await client.loginWithWallet(sharedAuthParams);\n } else {\n logger.warn(\"Turnkey wallet login and signup failed\", loginError, signupError);\n throw signupError;\n }\n }\n }\n const activeSessionKey =\n options?.sessionKey ??\n (await client.getActiveSessionKey()) ??\n SessionKey.DefaultSessionkey;\n const nextSession = await client.getSession({\n sessionKey: activeSessionKey,\n });\n if (!nextSession) {\n throw new Error(\"Turnkey session could not be established\");\n }\n setSession({ ...nextSession, sessionKey: activeSessionKey });\n setAuthState(AuthState.Authenticated);\n await refreshWallets();\n } catch (error) {\n setAuthState(AuthState.Unauthenticated);\n throw error;\n }\n },\n [ensureClient, refreshWallets],\n );\n\n const value = useMemo<TurnkeyContextValue>(\n () => ({\n authState,\n session,\n wallets,\n createWallet,\n refreshWallets,\n signMessage,\n loginWithWallet,\n }),\n [authState, session, wallets, createWallet, refreshWallets, signMessage, loginWithWallet],\n );\n\n return (\n <TurnkeyContext.Provider value={value}>{children}</TurnkeyContext.Provider>\n );\n}\n\nexport const useTurnkey = (): TurnkeyContextValue => {\n const context = useContext(TurnkeyContext);\n if (!context) {\n throw new Error(\"useTurnkey must be used within a TurnkeyProvider\");\n }\n return context;\n};\n"]}
@@ -0,0 +1,3 @@
1
+ import { type WalletProvider } from "@turnkey/core";
2
+ import type { DynamicEvmWallet } from "./types";
3
+ export declare function buildWalletProvider(wallet: DynamicEvmWallet): Promise<WalletProvider>;
@@ -0,0 +1,180 @@
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 { Chain, WalletInterfaceType, } from "@turnkey/core";
38
+ var normalizeChainId = function (value) {
39
+ if (typeof value === "number") {
40
+ return "0x".concat(value.toString(16));
41
+ }
42
+ if (typeof value === "string") {
43
+ if (value.startsWith("0x")) {
44
+ return value;
45
+ }
46
+ var numeric = Number(value);
47
+ if (!Number.isNaN(numeric)) {
48
+ return "0x".concat(numeric.toString(16));
49
+ }
50
+ return value;
51
+ }
52
+ return "0x1";
53
+ };
54
+ var normalizeMessage = function (value) {
55
+ if (typeof value === "string") {
56
+ return value;
57
+ }
58
+ if (value instanceof Uint8Array) {
59
+ return ("0x" +
60
+ Array.from(value)
61
+ .map(function (byte) { return byte.toString(16).padStart(2, "0"); })
62
+ .join(""));
63
+ }
64
+ if (value &&
65
+ typeof value === "object" &&
66
+ value.type === "Buffer") {
67
+ var bufferValue = value;
68
+ if (!Array.isArray(bufferValue.data)) {
69
+ throw new Error("Invalid buffer payload");
70
+ }
71
+ var dataArray = bufferValue.data;
72
+ return ("0x" +
73
+ dataArray
74
+ .map(function (byte) { return byte.toString(16).padStart(2, "0"); })
75
+ .join(""));
76
+ }
77
+ if (typeof value === "number" || typeof value === "bigint") {
78
+ return "0x".concat(value.toString(16));
79
+ }
80
+ if (typeof value === "boolean") {
81
+ return value ? "0x1" : "0x0";
82
+ }
83
+ throw new Error("Unsupported payload type for personal_sign");
84
+ };
85
+ var getSignature = function (wallet, message) { return __awaiter(void 0, void 0, void 0, function () {
86
+ var sig, sig;
87
+ var _a, _b;
88
+ return __generator(this, function (_c) {
89
+ switch (_c.label) {
90
+ case 0:
91
+ if (!(typeof wallet.signMessage === "function")) return [3 /*break*/, 2];
92
+ return [4 /*yield*/, wallet.signMessage(message)];
93
+ case 1:
94
+ sig = _c.sent();
95
+ if (sig) {
96
+ return [2 /*return*/, sig];
97
+ }
98
+ _c.label = 2;
99
+ case 2:
100
+ if (!(typeof ((_a = wallet.connector) === null || _a === void 0 ? void 0 : _a.signMessage) === "function")) return [3 /*break*/, 4];
101
+ return [4 /*yield*/, wallet.connector.signMessage(message, (_b = wallet.address) !== null && _b !== void 0 ? _b : undefined)];
102
+ case 3:
103
+ sig = _c.sent();
104
+ if (sig) {
105
+ return [2 /*return*/, sig];
106
+ }
107
+ _c.label = 4;
108
+ case 4: throw new Error("Wallet does not support message signing");
109
+ }
110
+ });
111
+ }); };
112
+ var createRequestHandler = function (wallet, chainId) {
113
+ return function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
114
+ var payload;
115
+ var method = _b.method, params = _b.params;
116
+ return __generator(this, function (_c) {
117
+ switch (method) {
118
+ case "eth_requestAccounts":
119
+ case "eth_accounts": {
120
+ if (!wallet.address) {
121
+ throw new Error("Wallet is not connected to an address");
122
+ }
123
+ return [2 /*return*/, [wallet.address]];
124
+ }
125
+ case "eth_chainId":
126
+ return [2 /*return*/, chainId];
127
+ case "personal_sign": {
128
+ if (!params || params.length === 0) {
129
+ throw new Error("Missing payload for personal_sign");
130
+ }
131
+ payload = normalizeMessage(params[0]);
132
+ return [2 /*return*/, getSignature(wallet, payload)];
133
+ }
134
+ default:
135
+ throw new Error("Unsupported provider method: ".concat(method));
136
+ }
137
+ return [2 /*return*/];
138
+ });
139
+ }); };
140
+ };
141
+ export function buildWalletProvider(wallet) {
142
+ return __awaiter(this, void 0, void 0, function () {
143
+ var network, chainId, infoName, eip1193Provider;
144
+ var _a, _b, _c, _d, _e, _f;
145
+ return __generator(this, function (_g) {
146
+ switch (_g.label) {
147
+ case 0:
148
+ if (!(wallet === null || wallet === void 0 ? void 0 : wallet.address)) {
149
+ throw new Error("Wallet is missing an address");
150
+ }
151
+ if (!wallet.connector) {
152
+ throw new Error("Wallet connector is not available");
153
+ }
154
+ return [4 /*yield*/, ((_b = (_a = wallet.connector).getNetwork) === null || _b === void 0 ? void 0 : _b.call(_a))];
155
+ case 1:
156
+ network = _g.sent();
157
+ chainId = normalizeChainId(network);
158
+ infoName = (_c = wallet.connector.name) !== null && _c !== void 0 ? _c : "Connected Wallet";
159
+ eip1193Provider = {
160
+ request: createRequestHandler(wallet, chainId),
161
+ };
162
+ return [2 /*return*/, {
163
+ interfaceType: WalletInterfaceType.Ethereum,
164
+ chainInfo: {
165
+ namespace: Chain.Ethereum,
166
+ chainId: chainId,
167
+ },
168
+ info: {
169
+ name: infoName,
170
+ uuid: (_e = (_d = wallet.id) !== null && _d !== void 0 ? _d : wallet.key) !== null && _e !== void 0 ? _e : wallet.connector.key,
171
+ icon: (_f = wallet.connector.metadata) === null || _f === void 0 ? void 0 : _f.icon,
172
+ },
173
+ provider: eip1193Provider,
174
+ connectedAddresses: [wallet.address],
175
+ }];
176
+ }
177
+ });
178
+ });
179
+ }
180
+ //# sourceMappingURL=createWalletProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletProvider.js","sourceRoot":"","sources":["../../src/turnkey/createWalletProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EACL,KAAK,EACL,mBAAmB,GAGpB,MAAM,eAAe,CAAC;AAQvB,IAAM,gBAAgB,GAAG,UAAC,KAA8B;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,YAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,YAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;QACrC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,IAAM,gBAAgB,GAAG,UAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,CACL,IAAI;YACJ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;iBACd,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAlC,CAAkC,CAAC;iBACjD,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;IACJ,CAAC;IAED,IACE,KAAK;QACL,OAAO,KAAK,KAAK,QAAQ;QACxB,KAA4B,CAAC,IAAI,KAAK,QAAQ,EAC/C,CAAC;QACD,IAAM,WAAW,GAAG,KAA2B,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAM,SAAS,GAAG,WAAW,CAAC,IAAgB,CAAC;QAC/C,OAAO,CACL,IAAI;YACJ,SAAS;iBACN,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAlC,CAAkC,CAAC;iBACjD,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,YAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,IAAM,YAAY,GAAG,UACnB,MAAwB,EACxB,OAAe;;;;;;qBAEX,CAAA,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,CAAA,EAAxC,wBAAwC;gBAC9B,qBAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAA;;gBAAvC,GAAG,GAAG,SAAiC;gBAC7C,IAAI,GAAG,EAAE,CAAC;oBACR,sBAAO,GAAG,EAAC;gBACb,CAAC;;;qBAGC,CAAA,OAAO,CAAA,MAAA,MAAM,CAAC,SAAS,0CAAE,WAAW,CAAA,KAAK,UAAU,CAAA,EAAnD,wBAAmD;gBACzC,qBAAM,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAA,MAAM,CAAC,OAAO,mCAAI,SAAS,CAAC,EAAA;;gBAA9E,GAAG,GAAG,SAAwE;gBACpF,IAAI,GAAG,EAAE,CAAC;oBACR,sBAAO,GAAG,EAAC;gBACb,CAAC;;oBAGH,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;;;KAC5D,CAAC;AAEF,IAAM,oBAAoB,GACxB,UAAC,MAAwB,EAAE,OAAe;IAC1C,OAAA,iEAAO,EAAuC;;YAArC,MAAM,YAAA,EAAE,MAAM,YAAA;;YACrB,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,qBAAqB,CAAC;gBAC3B,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;oBAC3D,CAAC;oBACD,sBAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAC;gBAC1B,CAAC;gBACD,KAAK,aAAa;oBAChB,sBAAO,OAAO,EAAC;gBACjB,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;oBACvD,CAAC;oBACK,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,sBAAO,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EAAC;gBACvC,CAAC;gBACD;oBACE,MAAM,IAAI,KAAK,CAAC,uCAAgC,MAAM,CAAE,CAAC,CAAC;YAC9D,CAAC;;;SACF;AArBD,CAqBC,CAAC;AAEJ,MAAM,UAAgB,mBAAmB,CACvC,MAAwB;;;;;;;oBAExB,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAA,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBAClD,CAAC;oBACD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;wBACtB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;oBACvD,CAAC;oBAEe,qBAAM,CAAA,MAAA,MAAA,MAAM,CAAC,SAAS,EAAC,UAAU,kDAAI,CAAA,EAAA;;oBAA/C,OAAO,GAAG,SAAqC;oBAC/C,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBACpC,QAAQ,GAAG,MAAA,MAAM,CAAC,SAAS,CAAC,IAAI,mCAAI,kBAAkB,CAAC;oBAEvD,eAAe,GAAG;wBACtB,OAAO,EAAE,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC;qBAC1B,CAAC;oBAEvB,sBAAO;4BACL,aAAa,EAAE,mBAAmB,CAAC,QAAQ;4BAC3C,SAAS,EAAE;gCACT,SAAS,EAAE,KAAK,CAAC,QAAQ;gCACzB,OAAO,SAAA;6BACR;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,MAAA,MAAA,MAAM,CAAC,EAAE,mCAAI,MAAM,CAAC,GAAG,mCAAI,MAAM,CAAC,SAAS,CAAC,GAAG;gCACrD,IAAI,EAAE,MAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,0CAAE,IAAI;6BACtC;4BACD,QAAQ,EAAE,eAAe;4BACzB,kBAAkB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;yBACrC,EAAC;;;;CACH","sourcesContent":["import {\n Chain,\n WalletInterfaceType,\n type WalletProvider,\n type WalletRpcProvider,\n} from \"@turnkey/core\";\nimport type { DynamicEvmWallet } from \"./types\";\n\ntype ProviderRequestArgs = {\n method: string;\n params?: unknown[];\n};\n\nconst normalizeChainId = (value?: string | number | null): string => {\n if (typeof value === \"number\") {\n return `0x${value.toString(16)}`;\n }\n\n if (typeof value === \"string\") {\n if (value.startsWith(\"0x\")) {\n return value;\n }\n const numeric = Number(value);\n if (!Number.isNaN(numeric)) {\n return `0x${numeric.toString(16)}`;\n }\n return value;\n }\n\n return \"0x1\";\n};\n\nconst normalizeMessage = (value: unknown): string => {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value instanceof Uint8Array) {\n return (\n \"0x\" +\n Array.from(value)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\")\n );\n }\n\n if (\n value &&\n typeof value === \"object\" &&\n (value as { type?: unknown }).type === \"Buffer\"\n ) {\n const bufferValue = value as { data?: unknown };\n if (!Array.isArray(bufferValue.data)) {\n throw new Error(\"Invalid buffer payload\");\n }\n const dataArray = bufferValue.data as number[];\n return (\n \"0x\" +\n dataArray\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\")\n );\n }\n\n if (typeof value === \"number\" || typeof value === \"bigint\") {\n return `0x${value.toString(16)}`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"0x1\" : \"0x0\";\n }\n\n throw new Error(\"Unsupported payload type for personal_sign\");\n};\n\nconst getSignature = async (\n wallet: DynamicEvmWallet,\n message: string,\n): Promise<string> => {\n if (typeof wallet.signMessage === \"function\") {\n const sig = await wallet.signMessage(message);\n if (sig) {\n return sig;\n }\n }\n\n if (typeof wallet.connector?.signMessage === \"function\") {\n const sig = await wallet.connector.signMessage(message, wallet.address ?? undefined);\n if (sig) {\n return sig;\n }\n }\n\n throw new Error(\"Wallet does not support message signing\");\n};\n\nconst createRequestHandler =\n (wallet: DynamicEvmWallet, chainId: string) =>\n async ({ method, params }: ProviderRequestArgs) => {\n switch (method) {\n case \"eth_requestAccounts\":\n case \"eth_accounts\": {\n if (!wallet.address) {\n throw new Error(\"Wallet is not connected to an address\");\n }\n return [wallet.address];\n }\n case \"eth_chainId\":\n return chainId;\n case \"personal_sign\": {\n if (!params || params.length === 0) {\n throw new Error(\"Missing payload for personal_sign\");\n }\n const payload = normalizeMessage(params[0]);\n return getSignature(wallet, payload);\n }\n default:\n throw new Error(`Unsupported provider method: ${method}`);\n }\n };\n\nexport async function buildWalletProvider(\n wallet: DynamicEvmWallet,\n): Promise<WalletProvider> {\n if (!wallet?.address) {\n throw new Error(\"Wallet is missing an address\");\n }\n if (!wallet.connector) {\n throw new Error(\"Wallet connector is not available\");\n }\n\n const network = await wallet.connector.getNetwork?.();\n const chainId = normalizeChainId(network);\n const infoName = wallet.connector.name ?? \"Connected Wallet\";\n\n const eip1193Provider = {\n request: createRequestHandler(wallet, chainId),\n } as WalletRpcProvider;\n\n return {\n interfaceType: WalletInterfaceType.Ethereum,\n chainInfo: {\n namespace: Chain.Ethereum,\n chainId,\n },\n info: {\n name: infoName,\n uuid: wallet.id ?? wallet.key ?? wallet.connector.key,\n icon: wallet.connector.metadata?.icon,\n },\n provider: eip1193Provider,\n connectedAddresses: [wallet.address],\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { TurnkeyProvider, useTurnkey } from "./TurnkeyProvider";
2
+ export type { TurnkeyProviderConfig } from "./types";
3
+ export { AuthState } from "./types";
@@ -0,0 +1,3 @@
1
+ export { TurnkeyProvider, useTurnkey } from "./TurnkeyProvider";
2
+ export { AuthState } from "./types";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/turnkey/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC","sourcesContent":["export { TurnkeyProvider, useTurnkey } from \"./TurnkeyProvider\";\nexport type { TurnkeyProviderConfig } from \"./types\";\nexport { AuthState } from \"./types\";\n"]}