@zerodev/wallet-core 0.0.1-alpha.3

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 (250) hide show
  1. package/README.md +272 -0
  2. package/dist/_cjs/actions/auth/authenticateWithEmail.js +17 -0
  3. package/dist/_cjs/actions/auth/authenticateWithEmail.js.map +1 -0
  4. package/dist/_cjs/actions/auth/authenticateWithOAuth.js +17 -0
  5. package/dist/_cjs/actions/auth/authenticateWithOAuth.js.map +1 -0
  6. package/dist/_cjs/actions/auth/getWhoami.js +15 -0
  7. package/dist/_cjs/actions/auth/getWhoami.js.map +1 -0
  8. package/dist/_cjs/actions/auth/index.js +18 -0
  9. package/dist/_cjs/actions/auth/index.js.map +1 -0
  10. package/dist/_cjs/actions/auth/loginWithOTP.js +17 -0
  11. package/dist/_cjs/actions/auth/loginWithOTP.js.map +1 -0
  12. package/dist/_cjs/actions/auth/loginWithStamp.js +29 -0
  13. package/dist/_cjs/actions/auth/loginWithStamp.js.map +1 -0
  14. package/dist/_cjs/actions/auth/registerWithOTP.js +17 -0
  15. package/dist/_cjs/actions/auth/registerWithOTP.js.map +1 -0
  16. package/dist/_cjs/actions/auth/registerWithPasskey.js +17 -0
  17. package/dist/_cjs/actions/auth/registerWithPasskey.js.map +1 -0
  18. package/dist/_cjs/actions/index.js +15 -0
  19. package/dist/_cjs/actions/index.js.map +1 -0
  20. package/dist/_cjs/actions/wallet/getUserWallet.js +13 -0
  21. package/dist/_cjs/actions/wallet/getUserWallet.js.map +1 -0
  22. package/dist/_cjs/actions/wallet/index.js +10 -0
  23. package/dist/_cjs/actions/wallet/index.js.map +1 -0
  24. package/dist/_cjs/actions/wallet/signRawPayload.js +26 -0
  25. package/dist/_cjs/actions/wallet/signRawPayload.js.map +1 -0
  26. package/dist/_cjs/actions/wallet/signTransaction.js +25 -0
  27. package/dist/_cjs/actions/wallet/signTransaction.js.map +1 -0
  28. package/dist/_cjs/adapters/viem.js +89 -0
  29. package/dist/_cjs/adapters/viem.js.map +1 -0
  30. package/dist/_cjs/client/createClient.js +45 -0
  31. package/dist/_cjs/client/createClient.js.map +1 -0
  32. package/dist/_cjs/client/decorators/client.js +21 -0
  33. package/dist/_cjs/client/decorators/client.js.map +1 -0
  34. package/dist/_cjs/client/index.js +9 -0
  35. package/dist/_cjs/client/index.js.map +1 -0
  36. package/dist/_cjs/client/transports/createTransport.js +29 -0
  37. package/dist/_cjs/client/transports/createTransport.js.map +1 -0
  38. package/dist/_cjs/client/transports/rest.js +86 -0
  39. package/dist/_cjs/client/transports/rest.js.map +1 -0
  40. package/dist/_cjs/client/types.js +3 -0
  41. package/dist/_cjs/client/types.js.map +1 -0
  42. package/dist/_cjs/constants.js +9 -0
  43. package/dist/_cjs/constants.js.map +1 -0
  44. package/dist/_cjs/core/createZeroDevWallet.js +330 -0
  45. package/dist/_cjs/core/createZeroDevWallet.js.map +1 -0
  46. package/dist/_cjs/errors/request.js +61 -0
  47. package/dist/_cjs/errors/request.js.map +1 -0
  48. package/dist/_cjs/index.js +31 -0
  49. package/dist/_cjs/index.js.map +1 -0
  50. package/dist/_cjs/package.json +1 -0
  51. package/dist/_cjs/polyfills/window.js +26 -0
  52. package/dist/_cjs/polyfills/window.js.map +1 -0
  53. package/dist/_cjs/stampers/iframeStamper.js +32 -0
  54. package/dist/_cjs/stampers/iframeStamper.js.map +1 -0
  55. package/dist/_cjs/stampers/index.js +10 -0
  56. package/dist/_cjs/stampers/index.js.map +1 -0
  57. package/dist/_cjs/stampers/indexedDbStamper.js +23 -0
  58. package/dist/_cjs/stampers/indexedDbStamper.js.map +1 -0
  59. package/dist/_cjs/stampers/types.js +3 -0
  60. package/dist/_cjs/stampers/types.js.map +1 -0
  61. package/dist/_cjs/stampers/webauthnStamper.js +17 -0
  62. package/dist/_cjs/stampers/webauthnStamper.js.map +1 -0
  63. package/dist/_cjs/storage/adapters.js +18 -0
  64. package/dist/_cjs/storage/adapters.js.map +1 -0
  65. package/dist/_cjs/storage/manager.js +108 -0
  66. package/dist/_cjs/storage/manager.js.map +1 -0
  67. package/dist/_cjs/types/session.js +9 -0
  68. package/dist/_cjs/types/session.js.map +1 -0
  69. package/dist/_cjs/utils/exportWallet.js +70 -0
  70. package/dist/_cjs/utils/exportWallet.js.map +1 -0
  71. package/dist/_cjs/utils/utils.js +75 -0
  72. package/dist/_cjs/utils/utils.js.map +1 -0
  73. package/dist/_esm/actions/auth/authenticateWithEmail.js +18 -0
  74. package/dist/_esm/actions/auth/authenticateWithEmail.js.map +1 -0
  75. package/dist/_esm/actions/auth/authenticateWithOAuth.js +31 -0
  76. package/dist/_esm/actions/auth/authenticateWithOAuth.js.map +1 -0
  77. package/dist/_esm/actions/auth/getWhoami.js +28 -0
  78. package/dist/_esm/actions/auth/getWhoami.js.map +1 -0
  79. package/dist/_esm/actions/auth/index.js +8 -0
  80. package/dist/_esm/actions/auth/index.js.map +1 -0
  81. package/dist/_esm/actions/auth/loginWithOTP.js +36 -0
  82. package/dist/_esm/actions/auth/loginWithOTP.js.map +1 -0
  83. package/dist/_esm/actions/auth/loginWithStamp.js +42 -0
  84. package/dist/_esm/actions/auth/loginWithStamp.js.map +1 -0
  85. package/dist/_esm/actions/auth/registerWithOTP.js +36 -0
  86. package/dist/_esm/actions/auth/registerWithOTP.js.map +1 -0
  87. package/dist/_esm/actions/auth/registerWithPasskey.js +36 -0
  88. package/dist/_esm/actions/auth/registerWithPasskey.js.map +1 -0
  89. package/dist/_esm/actions/index.js +5 -0
  90. package/dist/_esm/actions/index.js.map +1 -0
  91. package/dist/_esm/actions/wallet/getUserWallet.js +26 -0
  92. package/dist/_esm/actions/wallet/getUserWallet.js.map +1 -0
  93. package/dist/_esm/actions/wallet/index.js +4 -0
  94. package/dist/_esm/actions/wallet/index.js.map +1 -0
  95. package/dist/_esm/actions/wallet/signRawPayload.js +41 -0
  96. package/dist/_esm/actions/wallet/signRawPayload.js.map +1 -0
  97. package/dist/_esm/actions/wallet/signTransaction.js +40 -0
  98. package/dist/_esm/actions/wallet/signTransaction.js.map +1 -0
  99. package/dist/_esm/adapters/viem.js +91 -0
  100. package/dist/_esm/adapters/viem.js.map +1 -0
  101. package/dist/_esm/client/createClient.js +56 -0
  102. package/dist/_esm/client/createClient.js.map +1 -0
  103. package/dist/_esm/client/decorators/client.js +42 -0
  104. package/dist/_esm/client/decorators/client.js.map +1 -0
  105. package/dist/_esm/client/index.js +3 -0
  106. package/dist/_esm/client/index.js.map +1 -0
  107. package/dist/_esm/client/transports/createTransport.js +31 -0
  108. package/dist/_esm/client/transports/createTransport.js.map +1 -0
  109. package/dist/_esm/client/transports/rest.js +85 -0
  110. package/dist/_esm/client/transports/rest.js.map +1 -0
  111. package/dist/_esm/client/types.js +2 -0
  112. package/dist/_esm/client/types.js.map +1 -0
  113. package/dist/_esm/constants.js +6 -0
  114. package/dist/_esm/constants.js.map +1 -0
  115. package/dist/_esm/core/createZeroDevWallet.js +332 -0
  116. package/dist/_esm/core/createZeroDevWallet.js.map +1 -0
  117. package/dist/_esm/errors/request.js +60 -0
  118. package/dist/_esm/errors/request.js.map +1 -0
  119. package/dist/_esm/index.js +20 -0
  120. package/dist/_esm/index.js.map +1 -0
  121. package/dist/_esm/package.json +1 -0
  122. package/dist/_esm/polyfills/window.js +24 -0
  123. package/dist/_esm/polyfills/window.js.map +1 -0
  124. package/dist/_esm/stampers/iframeStamper.js +29 -0
  125. package/dist/_esm/stampers/iframeStamper.js.map +1 -0
  126. package/dist/_esm/stampers/index.js +4 -0
  127. package/dist/_esm/stampers/index.js.map +1 -0
  128. package/dist/_esm/stampers/indexedDbStamper.js +20 -0
  129. package/dist/_esm/stampers/indexedDbStamper.js.map +1 -0
  130. package/dist/_esm/stampers/types.js +2 -0
  131. package/dist/_esm/stampers/types.js.map +1 -0
  132. package/dist/_esm/stampers/webauthnStamper.js +15 -0
  133. package/dist/_esm/stampers/webauthnStamper.js.map +1 -0
  134. package/dist/_esm/storage/adapters.js +15 -0
  135. package/dist/_esm/storage/adapters.js.map +1 -0
  136. package/dist/_esm/storage/manager.js +118 -0
  137. package/dist/_esm/storage/manager.js.map +1 -0
  138. package/dist/_esm/types/session.js +6 -0
  139. package/dist/_esm/types/session.js.map +1 -0
  140. package/dist/_esm/utils/exportWallet.js +98 -0
  141. package/dist/_esm/utils/exportWallet.js.map +1 -0
  142. package/dist/_esm/utils/utils.js +105 -0
  143. package/dist/_esm/utils/utils.js.map +1 -0
  144. package/dist/_types/actions/auth/authenticateWithEmail.d.ts +33 -0
  145. package/dist/_types/actions/auth/authenticateWithEmail.d.ts.map +1 -0
  146. package/dist/_types/actions/auth/authenticateWithOAuth.d.ts +40 -0
  147. package/dist/_types/actions/auth/authenticateWithOAuth.d.ts.map +1 -0
  148. package/dist/_types/actions/auth/getWhoami.d.ts +35 -0
  149. package/dist/_types/actions/auth/getWhoami.d.ts.map +1 -0
  150. package/dist/_types/actions/auth/index.d.ts +8 -0
  151. package/dist/_types/actions/auth/index.d.ts.map +1 -0
  152. package/dist/_types/actions/auth/loginWithOTP.d.ts +41 -0
  153. package/dist/_types/actions/auth/loginWithOTP.d.ts.map +1 -0
  154. package/dist/_types/actions/auth/loginWithStamp.d.ts +35 -0
  155. package/dist/_types/actions/auth/loginWithStamp.d.ts.map +1 -0
  156. package/dist/_types/actions/auth/registerWithOTP.d.ts +52 -0
  157. package/dist/_types/actions/auth/registerWithOTP.d.ts.map +1 -0
  158. package/dist/_types/actions/auth/registerWithPasskey.d.ts +53 -0
  159. package/dist/_types/actions/auth/registerWithPasskey.d.ts.map +1 -0
  160. package/dist/_types/actions/index.d.ts +3 -0
  161. package/dist/_types/actions/index.d.ts.map +1 -0
  162. package/dist/_types/actions/wallet/getUserWallet.d.ts +32 -0
  163. package/dist/_types/actions/wallet/getUserWallet.d.ts.map +1 -0
  164. package/dist/_types/actions/wallet/index.d.ts +4 -0
  165. package/dist/_types/actions/wallet/index.d.ts.map +1 -0
  166. package/dist/_types/actions/wallet/signRawPayload.d.ts +37 -0
  167. package/dist/_types/actions/wallet/signRawPayload.d.ts.map +1 -0
  168. package/dist/_types/actions/wallet/signTransaction.d.ts +33 -0
  169. package/dist/_types/actions/wallet/signTransaction.d.ts.map +1 -0
  170. package/dist/_types/adapters/viem.d.ts +9 -0
  171. package/dist/_types/adapters/viem.d.ts.map +1 -0
  172. package/dist/_types/client/createClient.d.ts +18 -0
  173. package/dist/_types/client/createClient.d.ts.map +1 -0
  174. package/dist/_types/client/decorators/client.d.ts +73 -0
  175. package/dist/_types/client/decorators/client.d.ts.map +1 -0
  176. package/dist/_types/client/index.d.ts +4 -0
  177. package/dist/_types/client/index.d.ts.map +1 -0
  178. package/dist/_types/client/transports/createTransport.d.ts +17 -0
  179. package/dist/_types/client/transports/createTransport.d.ts.map +1 -0
  180. package/dist/_types/client/transports/rest.d.ts +30 -0
  181. package/dist/_types/client/transports/rest.d.ts.map +1 -0
  182. package/dist/_types/client/types.d.ts +60 -0
  183. package/dist/_types/client/types.d.ts.map +1 -0
  184. package/dist/_types/constants.d.ts +6 -0
  185. package/dist/_types/constants.d.ts.map +1 -0
  186. package/dist/_types/core/createZeroDevWallet.d.ts +55 -0
  187. package/dist/_types/core/createZeroDevWallet.d.ts.map +1 -0
  188. package/dist/_types/errors/request.d.ts +12 -0
  189. package/dist/_types/errors/request.d.ts.map +1 -0
  190. package/dist/_types/index.d.ts +17 -0
  191. package/dist/_types/index.d.ts.map +1 -0
  192. package/dist/_types/polyfills/window.d.ts +15 -0
  193. package/dist/_types/polyfills/window.d.ts.map +1 -0
  194. package/dist/_types/stampers/iframeStamper.d.ts +7 -0
  195. package/dist/_types/stampers/iframeStamper.d.ts.map +1 -0
  196. package/dist/_types/stampers/index.d.ts +5 -0
  197. package/dist/_types/stampers/index.d.ts.map +1 -0
  198. package/dist/_types/stampers/indexedDbStamper.d.ts +3 -0
  199. package/dist/_types/stampers/indexedDbStamper.d.ts.map +1 -0
  200. package/dist/_types/stampers/types.d.ts +23 -0
  201. package/dist/_types/stampers/types.d.ts.map +1 -0
  202. package/dist/_types/stampers/webauthnStamper.d.ts +5 -0
  203. package/dist/_types/stampers/webauthnStamper.d.ts.map +1 -0
  204. package/dist/_types/storage/adapters.d.ts +3 -0
  205. package/dist/_types/storage/adapters.d.ts.map +1 -0
  206. package/dist/_types/storage/manager.d.ts +19 -0
  207. package/dist/_types/storage/manager.d.ts.map +1 -0
  208. package/dist/_types/types/session.d.ts +17 -0
  209. package/dist/_types/types/session.d.ts.map +1 -0
  210. package/dist/_types/utils/exportWallet.d.ts +44 -0
  211. package/dist/_types/utils/exportWallet.d.ts.map +1 -0
  212. package/dist/_types/utils/utils.d.ts +52 -0
  213. package/dist/_types/utils/utils.d.ts.map +1 -0
  214. package/dist/tsconfig.build.tsbuildinfo +1 -0
  215. package/package.json +73 -0
  216. package/src/actions/auth/authenticateWithEmail.ts +52 -0
  217. package/src/actions/auth/authenticateWithOAuth.ts +58 -0
  218. package/src/actions/auth/getWhoami.ts +51 -0
  219. package/src/actions/auth/index.ts +40 -0
  220. package/src/actions/auth/loginWithOTP.ts +60 -0
  221. package/src/actions/auth/loginWithStamp.ts +68 -0
  222. package/src/actions/auth/registerWithOTP.ts +71 -0
  223. package/src/actions/auth/registerWithPasskey.ts +72 -0
  224. package/src/actions/index.ts +36 -0
  225. package/src/actions/wallet/getUserWallet.ts +46 -0
  226. package/src/actions/wallet/index.ts +17 -0
  227. package/src/actions/wallet/signRawPayload.ts +71 -0
  228. package/src/actions/wallet/signTransaction.ts +60 -0
  229. package/src/adapters/viem.ts +158 -0
  230. package/src/client/createClient.ts +95 -0
  231. package/src/client/decorators/client.ts +152 -0
  232. package/src/client/index.ts +12 -0
  233. package/src/client/transports/createTransport.ts +52 -0
  234. package/src/client/transports/rest.ts +121 -0
  235. package/src/client/types.ts +66 -0
  236. package/src/constants.ts +5 -0
  237. package/src/core/createZeroDevWallet.ts +477 -0
  238. package/src/errors/request.ts +36 -0
  239. package/src/index.ts +75 -0
  240. package/src/polyfills/window.ts +24 -0
  241. package/src/stampers/iframeStamper.ts +35 -0
  242. package/src/stampers/index.ts +8 -0
  243. package/src/stampers/indexedDbStamper.ts +22 -0
  244. package/src/stampers/types.ts +28 -0
  245. package/src/stampers/webauthnStamper.ts +21 -0
  246. package/src/storage/adapters.ts +20 -0
  247. package/src/storage/manager.ts +170 -0
  248. package/src/types/session.ts +18 -0
  249. package/src/utils/exportWallet.ts +124 -0
  250. package/src/utils/utils.ts +136 -0
@@ -0,0 +1,118 @@
1
+ import { normalizeTimestamp } from '../utils/utils.js';
2
+ export function createStorageManager(adapter) {
3
+ const ACTIVE_SESSION_KEY = '@zerodev/active_session';
4
+ const ALL_SESSIONS_KEY = '@zerodev/sessions';
5
+ const storeSession = async (sessionData, sessionKey) => {
6
+ // Store the session data
7
+ await adapter.setItem(sessionKey, JSON.stringify(sessionData));
8
+ // Add to sessions list if not already present
9
+ const sessionsStr = await adapter.getItem(ALL_SESSIONS_KEY);
10
+ const sessions = JSON.parse(sessionsStr || '[]');
11
+ if (!sessions.includes(sessionKey)) {
12
+ sessions.push(sessionKey);
13
+ await adapter.setItem(ALL_SESSIONS_KEY, JSON.stringify(sessions));
14
+ }
15
+ // Set as active session
16
+ await adapter.setItem(ACTIVE_SESSION_KEY, sessionKey);
17
+ };
18
+ const getActiveSession = async () => {
19
+ const activeKey = await adapter.getItem(ACTIVE_SESSION_KEY);
20
+ if (!activeKey)
21
+ return undefined;
22
+ return getSession(activeKey);
23
+ };
24
+ const getActiveSessionKey = async () => {
25
+ const key = await adapter.getItem(ACTIVE_SESSION_KEY);
26
+ return key || undefined;
27
+ };
28
+ const getSession = async (sessionKey) => {
29
+ const sessionStr = await adapter.getItem(sessionKey);
30
+ if (!sessionStr)
31
+ return undefined;
32
+ try {
33
+ const session = JSON.parse(sessionStr);
34
+ // Check if session is expired
35
+ if (session.expiry && normalizeTimestamp(session.expiry) < Date.now()) {
36
+ await clearSession(sessionKey);
37
+ return undefined;
38
+ }
39
+ return session;
40
+ }
41
+ catch (_error) {
42
+ // Invalid JSON, clean up
43
+ await clearSession(sessionKey);
44
+ return undefined;
45
+ }
46
+ };
47
+ const listSessionKeys = async () => {
48
+ const sessionsStr = await adapter.getItem(ALL_SESSIONS_KEY);
49
+ const sessionKeys = JSON.parse(sessionsStr || '[]');
50
+ // Clean up any keys that don't have corresponding sessions
51
+ const validKeys = [];
52
+ for (const key of sessionKeys) {
53
+ const exists = await adapter.getItem(key);
54
+ if (exists) {
55
+ validKeys.push(key);
56
+ }
57
+ }
58
+ // Update the list if we found invalid keys
59
+ if (validKeys.length !== sessionKeys.length) {
60
+ await adapter.setItem(ALL_SESSIONS_KEY, JSON.stringify(validKeys));
61
+ }
62
+ return validKeys;
63
+ };
64
+ const listSessions = async () => {
65
+ const sessionKeys = await listSessionKeys();
66
+ const sessions = [];
67
+ for (const key of sessionKeys) {
68
+ const session = await getSession(key);
69
+ if (session) {
70
+ sessions.push(session);
71
+ }
72
+ }
73
+ return sessions;
74
+ };
75
+ const setActiveSession = async (sessionKey) => {
76
+ // Verify the session exists
77
+ const session = await getSession(sessionKey);
78
+ if (!session) {
79
+ throw new Error(`Session not found: ${sessionKey}`);
80
+ }
81
+ await adapter.setItem(ACTIVE_SESSION_KEY, sessionKey);
82
+ };
83
+ const clearSession = async (sessionKey) => {
84
+ // Remove the session data
85
+ await adapter.removeItem(sessionKey);
86
+ // Remove from sessions list
87
+ const sessions = await listSessionKeys();
88
+ const updated = sessions.filter((k) => k !== sessionKey);
89
+ await adapter.setItem(ALL_SESSIONS_KEY, JSON.stringify(updated));
90
+ // Clear active session if it was the cleared one
91
+ const activeKey = await adapter.getItem(ACTIVE_SESSION_KEY);
92
+ if (activeKey === sessionKey) {
93
+ await adapter.removeItem(ACTIVE_SESSION_KEY);
94
+ }
95
+ };
96
+ const clearAllSessions = async () => {
97
+ const sessions = await listSessionKeys();
98
+ // Remove all session data
99
+ for (const key of sessions) {
100
+ await adapter.removeItem(key);
101
+ }
102
+ // Clear the metadata
103
+ await adapter.removeItem(ALL_SESSIONS_KEY);
104
+ await adapter.removeItem(ACTIVE_SESSION_KEY);
105
+ };
106
+ return {
107
+ storeSession,
108
+ getActiveSession,
109
+ getActiveSessionKey,
110
+ getSession,
111
+ listSessionKeys,
112
+ listSessions,
113
+ setActiveSession,
114
+ clearSession,
115
+ clearAllSessions,
116
+ };
117
+ }
118
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/storage/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export var SessionType;
2
+ (function (SessionType) {
3
+ SessionType["READ_ONLY"] = "SESSION_TYPE_READ_ONLY";
4
+ SessionType["READ_WRITE"] = "SESSION_TYPE_READ_WRITE";
5
+ })(SessionType || (SessionType = {}));
6
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/types/session.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,mDAAoC,CAAA;IACpC,qDAAsC,CAAA;AACxC,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * TODO: Add it as standard action in the SDK when backend is ready
3
+ * Export a wallet's seed phrase
4
+ *
5
+ * This calls Turnkey's export_wallet API to get an encrypted bundle
6
+ * containing the wallet's mnemonic. The bundle is encrypted with the
7
+ * targetPublicKey (from Turnkey's export iframe).
8
+ *
9
+ * @param params - Export parameters
10
+ * @returns Encrypted export bundle
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // In UI: Initialize export iframe first
15
+ * const iframeStamper = await createIframeStamper({
16
+ * iframeUrl: 'https://export.turnkey.com',
17
+ * iframeContainer: document.getElementById('export-container'),
18
+ * iframeElementId: 'export-iframe'
19
+ * });
20
+ * const targetPublicKey = await iframeStamper.init();
21
+ *
22
+ * // Call SDK to get encrypted bundle
23
+ * const exportBundle = await exportWallet({
24
+ * wallet,
25
+ * targetPublicKey
26
+ * });
27
+ *
28
+ * // Inject into iframe to display seed phrase
29
+ * await iframeStamper.injectWalletExportBundle(exportBundle, organizationId);
30
+ * ```
31
+ */
32
+ export async function exportWallet(params) {
33
+ const { targetPublicKey, wallet } = params;
34
+ try {
35
+ const session = await wallet.getSession();
36
+ if (!session) {
37
+ throw new Error('Session not found');
38
+ }
39
+ const { organizationId } = session;
40
+ const listWalletsBody = JSON.stringify({
41
+ organizationId,
42
+ });
43
+ const listWalletsStamp = await wallet
44
+ .client()
45
+ ?.stamper.stamp(listWalletsBody);
46
+ if (!listWalletsStamp) {
47
+ throw new Error('Failed to stamp list wallets body');
48
+ }
49
+ const listWalletsResponse = await fetch('https://api.turnkey.com/public/v1/query/list_wallets', {
50
+ method: 'POST',
51
+ body: listWalletsBody,
52
+ headers: {
53
+ [listWalletsStamp.stampHeaderName]: listWalletsStamp.stampHeaderValue,
54
+ },
55
+ });
56
+ if (!listWalletsResponse.ok) {
57
+ throw new Error('Failed to list wallets');
58
+ }
59
+ const listWalletsData = await listWalletsResponse.json();
60
+ const walletId = listWalletsData.wallets[0].walletId;
61
+ const exportWalletBody = JSON.stringify({
62
+ type: 'ACTIVITY_TYPE_EXPORT_WALLET',
63
+ timestampMs: Date.now().toString(),
64
+ organizationId: organizationId,
65
+ parameters: {
66
+ walletId: walletId,
67
+ targetPublicKey,
68
+ language: 'MNEMONIC_LANGUAGE_ENGLISH',
69
+ },
70
+ });
71
+ const exportWalletStamp = await wallet
72
+ .client()
73
+ ?.stamper.stamp(exportWalletBody);
74
+ if (!exportWalletStamp) {
75
+ throw new Error('Failed to stamp export wallet body');
76
+ }
77
+ const exportWalletResponse = await fetch('https://api.turnkey.com/public/v1/submit/export_wallet', {
78
+ method: 'POST',
79
+ body: exportWalletBody,
80
+ headers: {
81
+ [exportWalletStamp.stampHeaderName]: exportWalletStamp.stampHeaderValue,
82
+ },
83
+ });
84
+ if (!exportWalletResponse.ok) {
85
+ throw new Error('Failed to export wallet');
86
+ }
87
+ const exportWalletData = await exportWalletResponse.json();
88
+ const exportBundle = exportWalletData?.activity?.result?.exportWalletResult?.exportBundle;
89
+ if (!exportBundle) {
90
+ throw new Error('Export bundle not found in response');
91
+ }
92
+ return { exportBundle, walletId, organizationId };
93
+ }
94
+ catch (_) {
95
+ throw new Error('Error exporting wallet');
96
+ }
97
+ }
98
+ //# sourceMappingURL=exportWallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportWallet.js","sourceRoot":"","sources":["../../../src/utils/exportWallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Parses a session from a JWT.
3
+ *
4
+ * @param token - The JWT to parse.
5
+ * @returns {PartialBy<ZeroDevWalletSession, "createdAt" | "id" | "stamperType">} - The parsed session.
6
+ */
7
+ export function parseSession(token) {
8
+ if (typeof token !== 'string') {
9
+ return token;
10
+ }
11
+ const [, payload] = token.split('.');
12
+ if (!payload) {
13
+ throw new Error('Invalid JWT: Missing payload');
14
+ }
15
+ const decoded = JSON.parse(Buffer.from(payload, 'base64').toString());
16
+ const { exp, public_key: publicKey, session_type: sessionType, user_id: userId, organization_id: organizationId, } = decoded;
17
+ if (!exp || !publicKey || !sessionType || !userId || !organizationId) {
18
+ throw new Error('JWT payload missing required fields');
19
+ }
20
+ return {
21
+ sessionType,
22
+ userId,
23
+ organizationId,
24
+ expiry: exp,
25
+ token: publicKey,
26
+ };
27
+ }
28
+ /**
29
+ * Normalizes a timestamp to milliseconds.
30
+ *
31
+ * @param timestamp - The timestamp to normalize.
32
+ * @returns {number} - The normalized timestamp.
33
+ */
34
+ export function normalizeTimestamp(timestamp) {
35
+ return timestamp < 1e10 ? timestamp * 1_000 : timestamp;
36
+ }
37
+ /**
38
+ * Generates a random buffer of 32 bytes.
39
+ *
40
+ * @returns {ArrayBuffer} - The random buffer.
41
+ */
42
+ export const generateRandomBuffer = () => {
43
+ const arr = new Uint8Array(32);
44
+ crypto.getRandomValues(arr);
45
+ return arr.buffer;
46
+ };
47
+ /**
48
+ * Encodes a challenge in base64url format.
49
+ *
50
+ * @param challenge - The challenge to encode.
51
+ * @returns {string} - The encoded challenge.
52
+ */
53
+ export const base64UrlEncode = (challenge) => {
54
+ return Buffer.from(challenge)
55
+ .toString('base64')
56
+ .replace(/\+/g, '-')
57
+ .replace(/\//g, '_')
58
+ .replace(/=/g, '');
59
+ };
60
+ /**
61
+ * Compresses an uncompressed P-256 public key into its 33-byte compressed form.
62
+ *
63
+ * @param {Uint8Array} raw - The uncompressed public key (65 bytes, starting with 0x04).
64
+ * @returns {Uint8Array} - The compressed public key (33 bytes, starting with 0x02 or 0x03).
65
+ * @throws {Error} - If the input key is not a valid uncompressed P-256 key.
66
+ */
67
+ export function pointEncode(raw) {
68
+ if (raw.length !== 65 || raw[0] !== 0x04) {
69
+ throw new Error('Invalid uncompressed P-256 key');
70
+ }
71
+ const x = raw.slice(1, 33);
72
+ const y = raw.slice(33, 65);
73
+ if (x.length !== 32 || y.length !== 32) {
74
+ throw new Error('Invalid x or y length');
75
+ }
76
+ const prefix = (y[31] & 1) === 0 ? 0x02 : 0x03;
77
+ const compressed = new Uint8Array(33);
78
+ compressed[0] = prefix;
79
+ compressed.set(x, 1);
80
+ return compressed;
81
+ }
82
+ /**
83
+ * Converts a Uint8Array into a lowercase hex string.
84
+ *
85
+ * @param {Uint8Array} input - The input byte array.
86
+ * @returns {string} - The resulting hex string.
87
+ */
88
+ export function uint8ArrayToHexString(input) {
89
+ return input.reduce((result, x) => result + x.toString(16).padStart(2, '0'), '');
90
+ }
91
+ /**
92
+ * Generates a compressed public key from a key pair.
93
+ *
94
+ * @returns {Promise<string>} - The compressed public key.
95
+ */
96
+ export async function generateCompressedPublicKeyFromKeyPair(keyPair) {
97
+ const rawPubKey = new Uint8Array(await crypto.subtle.exportKey('raw', keyPair.publicKey));
98
+ const compressedPubKey = pointEncode(rawPubKey);
99
+ const compressedHex = uint8ArrayToHexString(compressedPubKey);
100
+ return compressedHex;
101
+ }
102
+ export const humanReadableDateTime = () => {
103
+ return new Date().toLocaleString().replaceAll('/', '-').replaceAll(':', '.');
104
+ };
105
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Client } from '../../client/types.js';
2
+ export type EmailCustomization = {
3
+ /** A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. */
4
+ magicLinkTemplate?: string;
5
+ };
6
+ export type AuthenticateWithEmailParameters = {
7
+ /** The email address to authenticate */
8
+ email: string;
9
+ /** The project ID for the request */
10
+ projectId: string;
11
+ /** Target public key for authentication */
12
+ targetPublicKey: string;
13
+ /** Optional email customization settings */
14
+ emailCustomization?: EmailCustomization;
15
+ };
16
+ export type AuthenticateWithEmailReturnType = {
17
+ /** The user ID */
18
+ userId?: string;
19
+ /** The wallet address */
20
+ walletAddress?: string;
21
+ /** The sub-organization ID */
22
+ subOrganizationId?: string;
23
+ /** Whether magic link is required */
24
+ requiresMagicLink?: boolean;
25
+ /** The Turnkey session if available */
26
+ turnkeySession?: string;
27
+ };
28
+ /**
29
+ * @deprecated Use {@link registerWithOTP} instead
30
+ * See {@link registerWithOTP} for more details on how to authenticate with email.
31
+ */
32
+ export declare function authenticateWithEmail(client: Client, params: AuthenticateWithEmailParameters): Promise<AuthenticateWithEmailReturnType>;
33
+ //# sourceMappingURL=authenticateWithEmail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticateWithEmail.d.ts","sourceRoot":"","sources":["../../../../src/actions/auth/authenticateWithEmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gJAAgJ;IAChJ,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC5C,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAA;IACvB,4CAA4C;IAC5C,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC5C,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,+BAA+B,GACtC,OAAO,CAAC,+BAA+B,CAAC,CAa1C"}
@@ -0,0 +1,40 @@
1
+ import type { Client } from '../../client/types.js';
2
+ export type AuthenticateWithOAuthParameters = {
3
+ /** The OAuth credential/token */
4
+ oidcToken: string;
5
+ /** The OAuth provider (e.g., 'google') */
6
+ provider: string;
7
+ /** The project ID for the request */
8
+ projectId: string;
9
+ /** Target public key for authentication */
10
+ targetPublicKey: string;
11
+ };
12
+ export type AuthenticateWithOAuthReturnType = {
13
+ /** The user ID */
14
+ userId?: string;
15
+ /** The wallet address */
16
+ walletAddress?: string;
17
+ /** The sub-organization ID */
18
+ subOrganizationId?: string;
19
+ /** The Turnkey session */
20
+ turnkeySession?: string;
21
+ };
22
+ /**
23
+ * Authenticates a user with OAuth credentials
24
+ *
25
+ * @param client - The ZeroDev Wallet client
26
+ * @param params - The parameters for OAuth authentication
27
+ * @returns The authentication result
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const result = await authenticateWithOAuth(client, {
32
+ * oidcToken: 'oauth_token_here',
33
+ * provider: 'google',
34
+ * projectId: 'proj_456',
35
+ * targetPublicKey: '0x...'
36
+ * });
37
+ * ```
38
+ */
39
+ export declare function authenticateWithOAuth(client: Client, params: AuthenticateWithOAuthParameters): Promise<AuthenticateWithOAuthReturnType>;
40
+ //# sourceMappingURL=authenticateWithOAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticateWithOAuth.d.ts","sourceRoot":"","sources":["../../../../src/actions/auth/authenticateWithOAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC5C,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,+BAA+B,GACtC,OAAO,CAAC,+BAA+B,CAAC,CAa1C"}
@@ -0,0 +1,35 @@
1
+ import type { Client } from '../../client/types.js';
2
+ export type GetWhoamiParameters = {
3
+ /** The organization ID to query */
4
+ organizationId: string;
5
+ /** The project ID for the request */
6
+ projectId: string;
7
+ };
8
+ export type GetWhoamiReturnType = {
9
+ /** The user's ID */
10
+ userId: string;
11
+ /** The organization ID */
12
+ organizationId: string;
13
+ /** The organization name */
14
+ organizationName?: string;
15
+ /** The username */
16
+ username?: string;
17
+ };
18
+ /**
19
+ * Gets the current user information
20
+ *
21
+ * @param client - The ZeroDev Wallet client
22
+ * @param params - The parameters for the whoami request
23
+ * @returns The user information
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const userInfo = await getWhoami(client, {
28
+ * organizationId: 'org_123',
29
+ * projectId: 'proj_456'
30
+ * });
31
+ * console.log(userInfo.userId); // 'user_789'
32
+ * ```
33
+ */
34
+ export declare function getWhoami(client: Client, params: GetWhoamiParameters): Promise<GetWhoamiReturnType>;
35
+ //# sourceMappingURL=getWhoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getWhoami.d.ts","sourceRoot":"","sources":["../../../../src/actions/auth/getWhoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,4BAA4B;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAW9B"}
@@ -0,0 +1,8 @@
1
+ export { type AuthenticateWithEmailParameters, type AuthenticateWithEmailReturnType, authenticateWithEmail, type EmailCustomization, } from './authenticateWithEmail.js';
2
+ export { type AuthenticateWithOAuthParameters, type AuthenticateWithOAuthReturnType, authenticateWithOAuth, } from './authenticateWithOAuth.js';
3
+ export { type GetWhoamiParameters, type GetWhoamiReturnType, getWhoami, } from './getWhoami.js';
4
+ export { type LoginWithOTPParameters, type LoginWithOTPReturnType, loginWithOTP, } from './loginWithOTP.js';
5
+ export { type LoginWithStampParameters, type LoginWithStampReturnType, loginWithStamp, } from './loginWithStamp.js';
6
+ export { type OtpContact, type RegisterWithOTPParameters, type RegisterWithOTPReturnType, registerWithOTP, } from './registerWithOTP.js';
7
+ export { type RegisterWithPasskeyParameters, type RegisterWithPasskeyReturnType, registerWithPasskey, } from './registerWithPasskey.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/actions/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,qBAAqB,EACrB,KAAK,kBAAkB,GACxB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,qBAAqB,GACtB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,SAAS,GACV,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,YAAY,GACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,eAAe,GAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,mBAAmB,GACpB,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,41 @@
1
+ import type { Client } from '../../client/types.js';
2
+ export type LoginWithOTPParameters = {
3
+ /** The OTP ID received from registration */
4
+ otpId: string;
5
+ /** The OTP code received via email/sms */
6
+ otpCode: string;
7
+ /** The sub-organization ID from registration */
8
+ subOrganizationId: string;
9
+ /** The encoded public key for authentication */
10
+ encodedPublicKey: string;
11
+ /** The project ID for the request */
12
+ projectId: string;
13
+ };
14
+ export type LoginWithOTPReturnType = {
15
+ /** The Turnkey session token */
16
+ session: string;
17
+ };
18
+ /**
19
+ * Logs in a user with OTP (One-Time Password) authentication
20
+ * This verifies the OTP code and returns a session token
21
+ *
22
+ * @param client - The ZeroDev Wallet client
23
+ * @param params - The parameters for OTP login
24
+ * @returns The login result with session token
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * // After receiving OTP code via email
29
+ * const result = await loginWithOTP(client, {
30
+ * otpId: 'otp_123456',
31
+ * otpCode: '123456',
32
+ * subOrganizationId: 'org_abc',
33
+ * encodedPublicKey: '0x...',
34
+ * projectId: 'proj_456'
35
+ * });
36
+ *
37
+ * // Use result.session for authenticated requests
38
+ * ```
39
+ */
40
+ export declare function loginWithOTP(client: Client, params: LoginWithOTPParameters): Promise<LoginWithOTPReturnType>;
41
+ //# sourceMappingURL=loginWithOTP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loginWithOTP.d.ts","sourceRoot":"","sources":["../../../../src/actions/auth/loginWithOTP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,MAAM,sBAAsB,GAAG;IACnC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,gDAAgD;IAChD,iBAAiB,EAAE,MAAM,CAAA;IACzB,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAA;IACxB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAcjC"}
@@ -0,0 +1,35 @@
1
+ import type { Client } from '../../client/types.js';
2
+ export type EmailCustomization = {
3
+ /** A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. */
4
+ magicLinkTemplate?: string;
5
+ };
6
+ export type LoginWithStampParameters = {
7
+ /** The project ID for the request */
8
+ projectId: string;
9
+ /** The organization ID for the request */
10
+ organizationId: string;
11
+ /** The encoded public key for the request */
12
+ targetPublicKey: string;
13
+ };
14
+ export type LoginWithStampReturnType = {
15
+ /** The session */
16
+ session: string;
17
+ };
18
+ /**
19
+ * Logs in a user with a stamp
20
+ *
21
+ * @param client - The ZeroDev Wallet client
22
+ * @param params - The parameters for login with a stamp
23
+ * @returns The login result
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const result = await loginWithStamp(client, {
28
+ * organizationId: 'org_456',
29
+ * projectId: 'proj_456',
30
+ * targetPublicKey: 'encodedPublicKey',
31
+ * });
32
+ * ```
33
+ */
34
+ export declare function loginWithStamp(client: Client, params: LoginWithStampParameters): Promise<LoginWithStampReturnType>;
35
+ //# sourceMappingURL=loginWithStamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loginWithStamp.d.ts","sourceRoot":"","sources":["../../../../src/actions/auth/loginWithStamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gJAAgJ;IAChJ,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,cAAc,EAAE,MAAM,CAAA;IACtB,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CA2BnC"}
@@ -0,0 +1,52 @@
1
+ import type { Client } from '../../client/types.js';
2
+ import type { EmailCustomization } from './authenticateWithEmail.js';
3
+ export type OtpContact = {
4
+ /** The OTP delivery type (currently only 'email' is supported) */
5
+ type: 'email' | 'sms';
6
+ /** The contact information (email address or phone number) */
7
+ contact: string;
8
+ };
9
+ export type RegisterWithOTPParameters = {
10
+ /** The email address to register */
11
+ email: string;
12
+ /** The contact information for OTP delivery */
13
+ contact: OtpContact;
14
+ /** The project ID for the request */
15
+ projectId: string;
16
+ /** Optional email customization settings */
17
+ emailCustomization?: EmailCustomization;
18
+ };
19
+ export type RegisterWithOTPReturnType = {
20
+ /** The user ID */
21
+ userId: string;
22
+ /** The wallet address */
23
+ walletAddress: string;
24
+ /** The sub-organization ID */
25
+ subOrganizationId: string;
26
+ /** The OTP ID needed for login */
27
+ otpId: string;
28
+ };
29
+ /**
30
+ * Registers a user with OTP (One-Time Password) authentication
31
+ * This will send an OTP code to the specified contact method
32
+ *
33
+ * @param client - The ZeroDev Wallet client
34
+ * @param params - The parameters for OTP registration
35
+ * @returns The registration result including otpId needed for login
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const result = await registerWithOTP(client, {
40
+ * email: 'user@example.com',
41
+ * contact: {
42
+ * type: 'email',
43
+ * contact: 'user@example.com'
44
+ * },
45
+ * projectId: 'proj_456'
46
+ * });
47
+ *
48
+ * // Use result.otpId for the login step
49
+ * ```
50
+ */
51
+ export declare function registerWithOTP(client: Client, params: RegisterWithOTPParameters): Promise<RegisterWithOTPReturnType>;
52
+ //# sourceMappingURL=registerWithOTP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerWithOTP.d.ts","sourceRoot":"","sources":["../../../../src/actions/auth/registerWithOTP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAEpE,MAAM,MAAM,UAAU,GAAG;IACvB,kEAAkE;IAClE,IAAI,EAAE,OAAO,GAAG,KAAK,CAAA;IACrB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,+CAA+C;IAC/C,OAAO,EAAE,UAAU,CAAA;IACnB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,yBAAyB;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,CAAA;IACzB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAapC"}