@tatchi-xyz/sdk 0.19.0 → 0.21.0

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 (243) hide show
  1. package/dist/cjs/core/EmailRecovery/index.js +25 -0
  2. package/dist/cjs/core/EmailRecovery/index.js.map +1 -1
  3. package/dist/cjs/core/TatchiPasskey/emailRecovery.js +135 -77
  4. package/dist/cjs/core/TatchiPasskey/emailRecovery.js.map +1 -1
  5. package/dist/cjs/core/TatchiPasskey/index.js +2 -1
  6. package/dist/cjs/core/TatchiPasskey/index.js.map +1 -1
  7. package/dist/cjs/core/TatchiPasskey/linkDevice.js +2 -1
  8. package/dist/cjs/core/TatchiPasskey/linkDevice.js.map +1 -1
  9. package/dist/cjs/core/TatchiPasskey/scanDevice.js +5 -3
  10. package/dist/cjs/core/TatchiPasskey/scanDevice.js.map +1 -1
  11. package/dist/cjs/core/WalletIframe/client/router.js +1 -1
  12. package/dist/cjs/core/WalletIframe/client/router.js.map +1 -1
  13. package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +3 -4
  14. package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
  15. package/dist/cjs/core/defaultConfigs.js +3 -7
  16. package/dist/cjs/core/defaultConfigs.js.map +1 -1
  17. package/dist/cjs/core/nearCrypto.js +29 -5
  18. package/dist/cjs/core/nearCrypto.js.map +1 -1
  19. package/dist/cjs/core/rpcCalls.js +56 -26
  20. package/dist/cjs/core/rpcCalls.js.map +1 -1
  21. package/dist/cjs/core/types/emailRecovery.js +33 -0
  22. package/dist/cjs/core/types/emailRecovery.js.map +1 -0
  23. package/dist/cjs/index.js +4 -0
  24. package/dist/cjs/index.js.map +1 -1
  25. package/dist/cjs/react/components/AccountMenuButton/{LinkedDevicesModal-CSSowiHP.css → LinkedDevicesModal-BRtht0XI.css} +1 -1
  26. package/dist/{esm/react/components/AccountMenuButton/LinkedDevicesModal-CSSowiHP.css.map → cjs/react/components/AccountMenuButton/LinkedDevicesModal-BRtht0XI.css.map} +1 -1
  27. package/dist/cjs/react/components/AccountMenuButton/{ProfileDropdown-CEPMZ1gY.css → ProfileDropdown-BG_6hcim.css} +1 -1
  28. package/dist/{esm/react/components/AccountMenuButton/ProfileDropdown-CEPMZ1gY.css.map → cjs/react/components/AccountMenuButton/ProfileDropdown-BG_6hcim.css.map} +1 -1
  29. package/dist/cjs/react/components/AccountMenuButton/{Web3AuthProfileButton-DopOg7Xc.css → Web3AuthProfileButton-k8_FAYFq.css} +1 -1
  30. package/dist/cjs/react/components/AccountMenuButton/{Web3AuthProfileButton-DopOg7Xc.css.map → Web3AuthProfileButton-k8_FAYFq.css.map} +1 -1
  31. package/dist/cjs/react/components/AccountMenuButton/icons/{TouchIcon-BQWentvJ.css → TouchIcon-C-RcGfr5.css} +1 -1
  32. package/dist/cjs/react/components/AccountMenuButton/icons/{TouchIcon-BQWentvJ.css.map → TouchIcon-C-RcGfr5.css.map} +1 -1
  33. package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DwrzWMYx.css → PasskeyAuthMenu-DKMiLeT9.css} +59 -4
  34. package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DwrzWMYx.css.map → PasskeyAuthMenu-DKMiLeT9.css.map} +1 -1
  35. package/dist/cjs/react/components/PasskeyAuthMenu/adapters/tatchi.js +1 -0
  36. package/dist/cjs/react/components/PasskeyAuthMenu/adapters/tatchi.js.map +1 -1
  37. package/dist/cjs/react/components/PasskeyAuthMenu/client.js +30 -8
  38. package/dist/cjs/react/components/PasskeyAuthMenu/client.js.map +1 -1
  39. package/dist/cjs/react/components/PasskeyAuthMenu/controller/useSDKEvents.js +22 -0
  40. package/dist/cjs/react/components/PasskeyAuthMenu/controller/useSDKEvents.js.map +1 -0
  41. package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +17 -4
  42. package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
  43. package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +354 -154
  44. package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
  45. package/dist/cjs/react/components/{ShowQRCode-CCN4h6Uv.css → ShowQRCode-CB0UCQ_h.css} +1 -1
  46. package/dist/cjs/react/components/{ShowQRCode-CCN4h6Uv.css.map → ShowQRCode-CB0UCQ_h.css.map} +1 -1
  47. package/dist/cjs/react/context/useSDKFlowRuntime.js +183 -0
  48. package/dist/cjs/react/context/useSDKFlowRuntime.js.map +1 -0
  49. package/dist/cjs/react/context/useTatchiContextValue.js +24 -15
  50. package/dist/cjs/react/context/useTatchiContextValue.js.map +1 -1
  51. package/dist/cjs/react/context/useTatchiWithSdkFlow.js +96 -0
  52. package/dist/cjs/react/context/useTatchiWithSdkFlow.js.map +1 -0
  53. package/dist/cjs/react/sdk/src/core/EmailRecovery/index.js +26 -0
  54. package/dist/cjs/react/sdk/src/core/EmailRecovery/index.js.map +1 -1
  55. package/dist/cjs/react/sdk/src/core/TatchiPasskey/emailRecovery.js +135 -77
  56. package/dist/cjs/react/sdk/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
  57. package/dist/cjs/react/sdk/src/core/TatchiPasskey/index.js +2 -1
  58. package/dist/cjs/react/sdk/src/core/TatchiPasskey/index.js.map +1 -1
  59. package/dist/cjs/react/sdk/src/core/TatchiPasskey/linkDevice.js +2 -1
  60. package/dist/cjs/react/sdk/src/core/TatchiPasskey/linkDevice.js.map +1 -1
  61. package/dist/cjs/react/sdk/src/core/TatchiPasskey/scanDevice.js +5 -3
  62. package/dist/cjs/react/sdk/src/core/TatchiPasskey/scanDevice.js.map +1 -1
  63. package/dist/cjs/react/sdk/src/core/WalletIframe/client/router.js +1 -1
  64. package/dist/cjs/react/sdk/src/core/WalletIframe/client/router.js.map +1 -1
  65. package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +3 -4
  66. package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
  67. package/dist/cjs/react/sdk/src/core/defaultConfigs.js +3 -7
  68. package/dist/cjs/react/sdk/src/core/defaultConfigs.js.map +1 -1
  69. package/dist/cjs/react/sdk/src/core/nearCrypto.js +29 -5
  70. package/dist/cjs/react/sdk/src/core/nearCrypto.js.map +1 -1
  71. package/dist/cjs/react/sdk/src/core/rpcCalls.js +56 -26
  72. package/dist/cjs/react/sdk/src/core/rpcCalls.js.map +1 -1
  73. package/dist/cjs/react/sdk/src/core/types/emailRecovery.js +33 -0
  74. package/dist/cjs/react/sdk/src/core/types/emailRecovery.js.map +1 -0
  75. package/dist/cjs/server/email-recovery/emailParsers.js +2 -1
  76. package/dist/cjs/server/email-recovery/emailParsers.js.map +1 -1
  77. package/dist/cjs/server/email-recovery/index.js +6 -6
  78. package/dist/cjs/server/email-recovery/index.js.map +1 -1
  79. package/dist/cjs/server/email-recovery/rpcCalls.js +22 -3
  80. package/dist/cjs/server/email-recovery/rpcCalls.js.map +1 -1
  81. package/dist/cjs/server/router/cloudflare.js +8 -3
  82. package/dist/cjs/server/router/cloudflare.js.map +1 -1
  83. package/dist/cjs/server/router/express.js.map +1 -1
  84. package/dist/cjs/server/sdk/src/core/defaultConfigs.js +2 -4
  85. package/dist/cjs/server/sdk/src/core/defaultConfigs.js.map +1 -1
  86. package/dist/cjs/server/sdk/src/core/nearCrypto.js +26 -7
  87. package/dist/cjs/server/sdk/src/core/nearCrypto.js.map +1 -1
  88. package/dist/esm/core/EmailRecovery/index.js +25 -1
  89. package/dist/esm/core/EmailRecovery/index.js.map +1 -1
  90. package/dist/esm/core/TatchiPasskey/emailRecovery.js +136 -78
  91. package/dist/esm/core/TatchiPasskey/emailRecovery.js.map +1 -1
  92. package/dist/esm/core/TatchiPasskey/index.js +2 -1
  93. package/dist/esm/core/TatchiPasskey/index.js.map +1 -1
  94. package/dist/esm/core/TatchiPasskey/linkDevice.js +2 -1
  95. package/dist/esm/core/TatchiPasskey/linkDevice.js.map +1 -1
  96. package/dist/esm/core/TatchiPasskey/scanDevice.js +5 -3
  97. package/dist/esm/core/TatchiPasskey/scanDevice.js.map +1 -1
  98. package/dist/esm/core/WalletIframe/client/router.js +1 -1
  99. package/dist/esm/core/WalletIframe/client/router.js.map +1 -1
  100. package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +2 -3
  101. package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
  102. package/dist/esm/core/defaultConfigs.js +3 -7
  103. package/dist/esm/core/defaultConfigs.js.map +1 -1
  104. package/dist/esm/core/nearCrypto.js +24 -6
  105. package/dist/esm/core/nearCrypto.js.map +1 -1
  106. package/dist/esm/core/rpcCalls.js +56 -26
  107. package/dist/esm/core/rpcCalls.js.map +1 -1
  108. package/dist/esm/core/types/emailRecovery.js +26 -0
  109. package/dist/esm/core/types/emailRecovery.js.map +1 -0
  110. package/dist/esm/index.js +3 -1
  111. package/dist/esm/index.js.map +1 -1
  112. package/dist/esm/react/components/AccountMenuButton/{LinkedDevicesModal-CSSowiHP.css → LinkedDevicesModal-BRtht0XI.css} +1 -1
  113. package/dist/{cjs/react/components/AccountMenuButton/LinkedDevicesModal-CSSowiHP.css.map → esm/react/components/AccountMenuButton/LinkedDevicesModal-BRtht0XI.css.map} +1 -1
  114. package/dist/esm/react/components/AccountMenuButton/{ProfileDropdown-CEPMZ1gY.css → ProfileDropdown-BG_6hcim.css} +1 -1
  115. package/dist/{cjs/react/components/AccountMenuButton/ProfileDropdown-CEPMZ1gY.css.map → esm/react/components/AccountMenuButton/ProfileDropdown-BG_6hcim.css.map} +1 -1
  116. package/dist/esm/react/components/AccountMenuButton/{Web3AuthProfileButton-DopOg7Xc.css → Web3AuthProfileButton-k8_FAYFq.css} +1 -1
  117. package/dist/esm/react/components/AccountMenuButton/{Web3AuthProfileButton-DopOg7Xc.css.map → Web3AuthProfileButton-k8_FAYFq.css.map} +1 -1
  118. package/dist/esm/react/components/AccountMenuButton/icons/{TouchIcon-BQWentvJ.css → TouchIcon-C-RcGfr5.css} +1 -1
  119. package/dist/esm/react/components/AccountMenuButton/icons/{TouchIcon-BQWentvJ.css.map → TouchIcon-C-RcGfr5.css.map} +1 -1
  120. package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DwrzWMYx.css → PasskeyAuthMenu-DKMiLeT9.css} +59 -4
  121. package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DwrzWMYx.css.map → PasskeyAuthMenu-DKMiLeT9.css.map} +1 -1
  122. package/dist/esm/react/components/PasskeyAuthMenu/adapters/tatchi.js +1 -0
  123. package/dist/esm/react/components/PasskeyAuthMenu/adapters/tatchi.js.map +1 -1
  124. package/dist/esm/react/components/PasskeyAuthMenu/client.js +30 -8
  125. package/dist/esm/react/components/PasskeyAuthMenu/client.js.map +1 -1
  126. package/dist/esm/react/components/PasskeyAuthMenu/controller/useSDKEvents.js +20 -0
  127. package/dist/esm/react/components/PasskeyAuthMenu/controller/useSDKEvents.js.map +1 -0
  128. package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +17 -4
  129. package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
  130. package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +354 -154
  131. package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
  132. package/dist/esm/react/components/{ShowQRCode-CCN4h6Uv.css → ShowQRCode-CB0UCQ_h.css} +1 -1
  133. package/dist/esm/react/components/{ShowQRCode-CCN4h6Uv.css.map → ShowQRCode-CB0UCQ_h.css.map} +1 -1
  134. package/dist/esm/react/context/useSDKFlowRuntime.js +181 -0
  135. package/dist/esm/react/context/useSDKFlowRuntime.js.map +1 -0
  136. package/dist/esm/react/context/useTatchiContextValue.js +25 -16
  137. package/dist/esm/react/context/useTatchiContextValue.js.map +1 -1
  138. package/dist/esm/react/context/useTatchiWithSdkFlow.js +94 -0
  139. package/dist/esm/react/context/useTatchiWithSdkFlow.js.map +1 -0
  140. package/dist/esm/react/sdk/src/core/EmailRecovery/index.js +25 -1
  141. package/dist/esm/react/sdk/src/core/EmailRecovery/index.js.map +1 -1
  142. package/dist/esm/react/sdk/src/core/TatchiPasskey/emailRecovery.js +136 -78
  143. package/dist/esm/react/sdk/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
  144. package/dist/esm/react/sdk/src/core/TatchiPasskey/index.js +2 -1
  145. package/dist/esm/react/sdk/src/core/TatchiPasskey/index.js.map +1 -1
  146. package/dist/esm/react/sdk/src/core/TatchiPasskey/linkDevice.js +2 -1
  147. package/dist/esm/react/sdk/src/core/TatchiPasskey/linkDevice.js.map +1 -1
  148. package/dist/esm/react/sdk/src/core/TatchiPasskey/scanDevice.js +5 -3
  149. package/dist/esm/react/sdk/src/core/TatchiPasskey/scanDevice.js.map +1 -1
  150. package/dist/esm/react/sdk/src/core/WalletIframe/client/router.js +1 -1
  151. package/dist/esm/react/sdk/src/core/WalletIframe/client/router.js.map +1 -1
  152. package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +2 -3
  153. package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
  154. package/dist/esm/react/sdk/src/core/defaultConfigs.js +3 -7
  155. package/dist/esm/react/sdk/src/core/defaultConfigs.js.map +1 -1
  156. package/dist/esm/react/sdk/src/core/nearCrypto.js +24 -6
  157. package/dist/esm/react/sdk/src/core/nearCrypto.js.map +1 -1
  158. package/dist/esm/react/sdk/src/core/rpcCalls.js +56 -26
  159. package/dist/esm/react/sdk/src/core/rpcCalls.js.map +1 -1
  160. package/dist/esm/react/sdk/src/core/types/emailRecovery.js +26 -0
  161. package/dist/esm/react/sdk/src/core/types/emailRecovery.js.map +1 -0
  162. package/dist/esm/react/styles/styles.css +58 -3
  163. package/dist/esm/sdk/{defaultConfigs-DpslkAQd.js → defaultConfigs-CfQDV-ya.js} +3 -7
  164. package/dist/esm/sdk/{getDeviceNumber-fXizNGQl.js → getDeviceNumber-BpernPnM.js} +4 -8
  165. package/dist/esm/sdk/getDeviceNumber-BpernPnM.js.map +1 -0
  166. package/dist/esm/sdk/offline-export-app.js +23 -6
  167. package/dist/esm/sdk/offline-export-app.js.map +1 -1
  168. package/dist/esm/sdk/{router-DuGYOd3G.js → router-BWtacLJg.js} +1 -1
  169. package/dist/esm/sdk/{rpcCalls-BQrJMTdg.js → rpcCalls-CYGJSCgm.js} +3 -3
  170. package/dist/esm/sdk/{rpcCalls-YVeUVMk2.js → rpcCalls-DZZSa-sk.js} +57 -27
  171. package/dist/esm/sdk/{transactions-bqaAwL4k.js → transactions-Cn9xTWlK.js} +2 -2
  172. package/dist/esm/sdk/{transactions-bqaAwL4k.js.map → transactions-Cn9xTWlK.js.map} +1 -1
  173. package/dist/esm/sdk/{transactions-BalIhtJ9.js → transactions-DfdwDQCn.js} +1 -1
  174. package/dist/esm/sdk/wallet-iframe-host.js +660 -590
  175. package/dist/esm/server/email-recovery/emailParsers.js +3 -1
  176. package/dist/esm/server/email-recovery/emailParsers.js.map +1 -1
  177. package/dist/esm/server/email-recovery/index.js +6 -6
  178. package/dist/esm/server/email-recovery/index.js.map +1 -1
  179. package/dist/esm/server/email-recovery/rpcCalls.js +22 -3
  180. package/dist/esm/server/email-recovery/rpcCalls.js.map +1 -1
  181. package/dist/esm/server/router/cloudflare.js +8 -3
  182. package/dist/esm/server/router/cloudflare.js.map +1 -1
  183. package/dist/esm/server/router/express.js.map +1 -1
  184. package/dist/esm/server/sdk/src/core/defaultConfigs.js +2 -4
  185. package/dist/esm/server/sdk/src/core/defaultConfigs.js.map +1 -1
  186. package/dist/esm/server/sdk/src/core/nearCrypto.js +26 -8
  187. package/dist/esm/server/sdk/src/core/nearCrypto.js.map +1 -1
  188. package/dist/esm/wasm_vrf_worker/pkg/wasm_vrf_worker_bg.wasm +0 -0
  189. package/dist/types/src/core/EmailRecovery/index.d.ts +8 -0
  190. package/dist/types/src/core/EmailRecovery/index.d.ts.map +1 -1
  191. package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts +8 -5
  192. package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts.map +1 -1
  193. package/dist/types/src/core/TatchiPasskey/index.d.ts +1 -1
  194. package/dist/types/src/core/TatchiPasskey/index.d.ts.map +1 -1
  195. package/dist/types/src/core/TatchiPasskey/scanDevice.d.ts.map +1 -1
  196. package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts +1 -1
  197. package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts.map +1 -1
  198. package/dist/types/src/core/WalletIframe/client/router.d.ts +1 -1
  199. package/dist/types/src/core/WalletIframe/client/router.d.ts.map +1 -1
  200. package/dist/types/src/core/WalletIframe/shared/messages.d.ts +1 -1
  201. package/dist/types/src/core/WalletIframe/shared/messages.d.ts.map +1 -1
  202. package/dist/types/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.d.ts +2 -1
  203. package/dist/types/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.d.ts.map +1 -1
  204. package/dist/types/src/core/defaultConfigs.d.ts.map +1 -1
  205. package/dist/types/src/core/nearCrypto.d.ts +14 -0
  206. package/dist/types/src/core/nearCrypto.d.ts.map +1 -1
  207. package/dist/types/src/core/rpcCalls.d.ts +11 -8
  208. package/dist/types/src/core/rpcCalls.d.ts.map +1 -1
  209. package/dist/types/src/core/types/emailRecovery.d.ts +10 -0
  210. package/dist/types/src/core/types/emailRecovery.d.ts.map +1 -0
  211. package/dist/types/src/core/types/index.d.ts +1 -0
  212. package/dist/types/src/core/types/index.d.ts.map +1 -1
  213. package/dist/types/src/core/types/tatchi.d.ts +0 -4
  214. package/dist/types/src/core/types/tatchi.d.ts.map +1 -1
  215. package/dist/types/src/index.d.ts +1 -0
  216. package/dist/types/src/index.d.ts.map +1 -1
  217. package/dist/types/src/react/components/PasskeyAuthMenu/adapters/tatchi.d.ts +2 -0
  218. package/dist/types/src/react/components/PasskeyAuthMenu/adapters/tatchi.d.ts.map +1 -1
  219. package/dist/types/src/react/components/PasskeyAuthMenu/client.d.ts.map +1 -1
  220. package/dist/types/src/react/components/PasskeyAuthMenu/controller/useSDKEvents.d.ts +10 -0
  221. package/dist/types/src/react/components/PasskeyAuthMenu/controller/useSDKEvents.d.ts.map +1 -0
  222. package/dist/types/src/react/components/PasskeyAuthMenu/types.d.ts +8 -3
  223. package/dist/types/src/react/components/PasskeyAuthMenu/types.d.ts.map +1 -1
  224. package/dist/types/src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.d.ts +2 -0
  225. package/dist/types/src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.d.ts.map +1 -1
  226. package/dist/types/src/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.d.ts +1 -1
  227. package/dist/types/src/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.d.ts.map +1 -1
  228. package/dist/types/src/react/context/useSDKFlowRuntime.d.ts +10 -0
  229. package/dist/types/src/react/context/useSDKFlowRuntime.d.ts.map +1 -0
  230. package/dist/types/src/react/context/useTatchiContextValue.d.ts.map +1 -1
  231. package/dist/types/src/react/context/useTatchiWithSdkFlow.d.ts +9 -0
  232. package/dist/types/src/react/context/useTatchiWithSdkFlow.d.ts.map +1 -0
  233. package/dist/types/src/react/types.d.ts +31 -0
  234. package/dist/types/src/react/types.d.ts.map +1 -1
  235. package/dist/types/src/server/email-recovery/emailParsers.d.ts.map +1 -1
  236. package/dist/types/src/server/email-recovery/index.d.ts +5 -6
  237. package/dist/types/src/server/email-recovery/index.d.ts.map +1 -1
  238. package/dist/types/src/server/email-recovery/rpcCalls.d.ts +1 -0
  239. package/dist/types/src/server/email-recovery/rpcCalls.d.ts.map +1 -1
  240. package/dist/types/src/server/router/cloudflare-adaptor.d.ts.map +1 -1
  241. package/dist/workers/wasm_vrf_worker_bg.wasm +0 -0
  242. package/package.json +1 -1
  243. package/dist/esm/sdk/getDeviceNumber-fXizNGQl.js.map +0 -1
@@ -3,12 +3,16 @@ import { init_validation, validateNearAccountId } from "../../utils/validation.j
3
3
  import { init_accountIds, toAccountId } from "../types/accountIds.js";
4
4
  import { IndexedDBManager, init_IndexedDBManager } from "../IndexedDBManager/index.js";
5
5
  import { createRandomVRFChallenge, init_vrf_worker } from "../types/vrf-worker.js";
6
+ import { errorMessage, init_errors } from "../../utils/errors.js";
6
7
  import { EmailRecoveryPhase, EmailRecoveryStatus, init_sdkSentEvents } from "../types/sdkSentEvents.js";
7
8
  import { DEFAULT_WAIT_STATUS, init_rpc } from "../types/rpc.js";
9
+ import { getEmailRecoveryAttempt, init_rpcCalls } from "../rpcCalls.js";
8
10
  import { init_getDeviceNumber, parseDeviceNumber } from "../WebAuthnManager/SignerWorkerManager/getDeviceNumber.js";
11
+ import { ensureEd25519Prefix, init_nearCrypto } from "../nearCrypto.js";
9
12
  import { getLoginSession, init_login } from "./login.js";
10
13
  import { EmailRecoveryPendingStore } from "../EmailRecovery/emailRecoveryPendingStore.js";
11
- import { init_EmailRecovery } from "../EmailRecovery/index.js";
14
+ import { init_EmailRecovery, parseLinkDeviceRegisterUserResponse } from "../EmailRecovery/index.js";
15
+ import { EmailRecoveryError, EmailRecoveryErrorCode, init_emailRecovery as init_emailRecovery$1 } from "../types/emailRecovery.js";
12
16
 
13
17
  //#region src/core/TatchiPasskey/emailRecovery.ts
14
18
  var emailRecovery_exports = {};
@@ -23,16 +27,12 @@ function getEmailRecoveryConfig(configs) {
23
27
  const maxPollingDurationMs = Number(relayerEmailCfg.maxPollingDurationMs);
24
28
  const pendingTtlMs = Number(relayerEmailCfg.pendingTtlMs);
25
29
  const mailtoAddress = String(relayerEmailCfg.mailtoAddress);
26
- const dkimVerifierAccountId = String(relayerEmailCfg.dkimVerifierAccountId);
27
- const verificationViewMethod = String(relayerEmailCfg.verificationViewMethod);
28
30
  return {
29
31
  minBalanceYocto,
30
32
  pollingIntervalMs,
31
33
  maxPollingDurationMs,
32
34
  pendingTtlMs,
33
- mailtoAddress,
34
- dkimVerifierAccountId,
35
- verificationViewMethod
35
+ mailtoAddress
36
36
  };
37
37
  }
38
38
  function generateEmailRecoveryRequestId() {
@@ -48,6 +48,7 @@ var EmailRecoveryFlow;
48
48
  var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (() => {
49
49
  init_IndexedDBManager();
50
50
  init_validation();
51
+ init_errors();
51
52
  init_accountIds();
52
53
  init_sdkSentEvents();
53
54
  init_vrf_worker();
@@ -55,6 +56,9 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
55
56
  init_getDeviceNumber();
56
57
  init_login();
57
58
  init_EmailRecovery();
59
+ init_emailRecovery$1();
60
+ init_rpcCalls();
61
+ init_nearCrypto();
58
62
  EmailRecoveryFlow = class {
59
63
  context;
60
64
  options;
@@ -82,8 +86,9 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
82
86
  emit(event) {
83
87
  this.options?.onEvent?.(event);
84
88
  }
85
- emitError(step, message) {
86
- const err = new Error(message);
89
+ emitError(step, messageOrError) {
90
+ const err = typeof messageOrError === "string" ? new Error(messageOrError) : messageOrError;
91
+ const message = err.message || (typeof messageOrError === "string" ? messageOrError : "Unknown error");
87
92
  this.phase = EmailRecoveryPhase.ERROR;
88
93
  this.error = err;
89
94
  this.emit({
@@ -142,20 +147,19 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
142
147
  const accountView = await this.context.nearClient.viewAccount(nearAccountId);
143
148
  const available = this.computeAvailableBalance(accountView);
144
149
  if (available < BigInt(minBalanceYocto)) await this.fail(1, `This account does not have enough NEAR to finalize recovery. Available: ${available.toString()} yocto; required: ${String(minBalanceYocto)}. Please top up and try again.`);
145
- } catch (e) {
146
- await this.fail(1, e?.message || "Failed to fetch account balance for recovery");
150
+ } catch (err) {
151
+ await this.fail(1, errorMessage(err) || "Failed to fetch account balance for recovery");
147
152
  }
148
153
  }
149
- async getCanonicalRecoveryEmailOrFail(recoveryEmail) {
154
+ getCanonicalRecoveryEmail(recoveryEmail) {
150
155
  const canonicalEmail = String(recoveryEmail || "").trim().toLowerCase();
151
- if (!canonicalEmail) await this.fail(1, "Recovery email is required for email-based account recovery");
152
- return canonicalEmail;
156
+ return canonicalEmail || void 0;
153
157
  }
154
158
  async getNextDeviceNumberFromContract(nearAccountId) {
155
159
  try {
156
160
  const { syncAuthenticatorsContractCall } = await import("../rpcCalls.js");
157
161
  const authenticators = await syncAuthenticatorsContractCall(this.context.nearClient, this.context.configs.contractId, nearAccountId);
158
- const numbers = authenticators.map((a) => a?.authenticator?.deviceNumber).filter((n) => typeof n === "number" && Number.isFinite(n));
162
+ const numbers = authenticators.map(({ authenticator }) => authenticator.deviceNumber).filter((n) => typeof n === "number" && Number.isFinite(n));
159
163
  const max = numbers.length > 0 ? Math.max(...numbers) : 0;
160
164
  return max + 1;
161
165
  } catch {
@@ -207,7 +211,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
207
211
  message: "New device key created; please send the recovery email from your registered address.",
208
212
  data: {
209
213
  accountId: rec.accountId,
210
- recoveryEmail: rec.recoveryEmail,
214
+ ...rec.recoveryEmail ? { recoveryEmail: rec.recoveryEmail } : {},
211
215
  nearPublicKey: rec.nearPublicKey,
212
216
  requestId: rec.requestId,
213
217
  mailtoUrl
@@ -223,44 +227,57 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
223
227
  data
224
228
  });
225
229
  }
226
- async checkViaDkimViewMethod(rec) {
227
- const { dkimVerifierAccountId, verificationViewMethod } = this.getConfig();
228
- if (!dkimVerifierAccountId) return null;
230
+ async checkViaEmailRecovererAttempt(rec) {
229
231
  try {
230
- const { getEmailRecoveryVerificationResult } = await import("../rpcCalls.js");
231
- const result = await getEmailRecoveryVerificationResult(this.context.nearClient, dkimVerifierAccountId, verificationViewMethod, rec.requestId);
232
- if (!result) return {
232
+ const attempt = await getEmailRecoveryAttempt(this.context.nearClient, rec.accountId, rec.requestId);
233
+ if (!attempt) return {
233
234
  completed: false,
234
- success: false
235
+ success: false,
236
+ missing: true
235
237
  };
236
- if (!result.verified) {
237
- const errorMessage = result.error_message || result.error_code || "Email verification failed on relayer/contract";
238
- return {
238
+ if (attempt.request_id && attempt.request_id !== rec.requestId) return {
239
+ completed: true,
240
+ success: false,
241
+ errorMessage: "Email recovery attempt request_id does not match requested requestId."
242
+ };
243
+ if (attempt.new_public_key && attempt.new_public_key !== rec.nearPublicKey) {
244
+ const expected = ensureEd25519Prefix(rec.nearPublicKey);
245
+ const actual = ensureEd25519Prefix(attempt.new_public_key);
246
+ if (actual === expected) {} else return {
239
247
  completed: true,
240
248
  success: false,
241
- errorMessage,
242
- transactionHash: result.transaction_hash
249
+ errorMessage: `Email recovery new_public_key mismatch for request ${rec.requestId}. Expected ${expected}; got ${actual}. This usually means the recovery email you sent was generated for a different device/attempt.`
243
250
  };
244
251
  }
245
- if (result.account_id && result.account_id !== rec.accountId) return {
252
+ const normalized = attempt.status.toLowerCase();
253
+ if (normalized === "complete" || normalized === "completed") return {
246
254
  completed: true,
247
- success: false,
248
- errorMessage: "Email verification account_id does not match requested account.",
249
- transactionHash: result.transaction_hash
255
+ success: true
250
256
  };
251
- if (result.new_public_key && result.new_public_key !== rec.nearPublicKey) return {
257
+ if (normalized.includes("failed")) return {
252
258
  completed: true,
253
259
  success: false,
254
- errorMessage: "Email verification new_public_key does not match expected recovery key.",
255
- transactionHash: result.transaction_hash
260
+ errorMessage: attempt.error || `Email recovery failed (${attempt.status || "unknown status"})`
256
261
  };
257
262
  return {
258
- completed: true,
259
- success: true,
260
- transactionHash: result.transaction_hash
263
+ completed: false,
264
+ success: false
261
265
  };
262
266
  } catch (err) {
263
- console.warn("[EmailRecoveryFlow] get_verification_result view failed; will retry", err);
267
+ console.warn("[EmailRecoveryFlow] get_recovery_attempt view failed; will retry", err);
268
+ return null;
269
+ }
270
+ }
271
+ async isRecoveryAccessKeyPresent(rec) {
272
+ try {
273
+ await this.context.nearClient.viewAccessKey(rec.accountId, rec.nearPublicKey);
274
+ return true;
275
+ } catch (err) {
276
+ const kind = typeof err?.kind === "string" ? String(err.kind) : "";
277
+ const short = typeof err?.short === "string" ? String(err.short) : "";
278
+ const msg = typeof err?.message === "string" ? String(err.message) : "";
279
+ if (/AccessKeyDoesNotExist/i.test(kind) || /AccessKeyDoesNotExist/i.test(short) || /access key does not exist/i.test(msg) || /access key .*does not exist/i.test(msg)) return false;
280
+ console.warn("[EmailRecoveryFlow] view_access_key failed while checking recovery key; will retry", err);
264
281
  return null;
265
282
  }
266
283
  }
@@ -369,7 +386,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
369
386
  });
370
387
  const nearAccountId = await this.assertValidAccountIdOrFail(1, accountId);
371
388
  await this.assertSufficientBalance(nearAccountId);
372
- const canonicalEmail = await this.getCanonicalRecoveryEmailOrFail(recoveryEmail);
389
+ const canonicalEmail = this.getCanonicalRecoveryEmail(recoveryEmail);
373
390
  const deviceNumber = await this.getNextDeviceNumberFromContract(nearAccountId);
374
391
  this.phase = EmailRecoveryPhase.STEP_2_TOUCH_ID_REGISTRATION;
375
392
  this.emit({
@@ -403,7 +420,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
403
420
  nearPublicKey: rec.nearPublicKey
404
421
  };
405
422
  } catch (e) {
406
- const err = this.emitError(2, e?.message || "Email recovery TouchID/derivation failed");
423
+ const err = this.emitError(2, errorMessage(e) || "Email recovery TouchID/derivation failed");
407
424
  await this.options?.afterCall?.(false);
408
425
  throw err;
409
426
  }
@@ -500,29 +517,39 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
500
517
  await this.options?.afterCall?.(true, void 0);
501
518
  }
502
519
  async pollUntilAddKey(rec) {
503
- const { pollingIntervalMs, maxPollingDurationMs, dkimVerifierAccountId } = this.getConfig();
504
- if (!dkimVerifierAccountId) {
505
- const err$1 = this.emitError(4, "Email recovery verification contract (dkimVerifierAccountId) is not configured");
506
- await this.options?.afterCall?.(false);
507
- throw err$1;
508
- }
520
+ const { pollingIntervalMs, maxPollingDurationMs } = this.getConfig();
509
521
  this.phase = EmailRecoveryPhase.STEP_4_POLLING_VERIFICATION_RESULT;
510
522
  this.pollingStartedAt = Date.now();
523
+ let sawAttempt = false;
511
524
  const pollResult = await this.pollUntil({
512
525
  intervalMs: pollingIntervalMs,
513
526
  timeoutMs: maxPollingDurationMs,
514
527
  isCancelled: () => this.cancelled,
515
528
  tick: async ({ elapsedMs, pollCount }) => {
516
- const verification = await this.checkViaDkimViewMethod(rec);
517
- const completed = verification?.completed === true;
518
- const success = verification?.success === true;
529
+ const verification = await this.checkViaEmailRecovererAttempt(rec);
530
+ if (verification && !verification.missing) sawAttempt = true;
531
+ let completed = verification?.completed === true;
532
+ let success = verification?.success === true;
533
+ let errorMessage$1 = verification?.errorMessage;
534
+ let transactionHash;
535
+ if (verification?.missing) {
536
+ const hasKey = await this.isRecoveryAccessKeyPresent(rec);
537
+ if (hasKey === true) {
538
+ completed = true;
539
+ success = true;
540
+ } else if (hasKey === false && sawAttempt) {
541
+ completed = true;
542
+ success = false;
543
+ errorMessage$1 = "Email recovery attempt was cleared on-chain before completion. Please resend the recovery email or restart the flow.";
544
+ } else if (hasKey === null) return { done: false };
545
+ }
519
546
  this.emit({
520
547
  step: 4,
521
548
  phase: EmailRecoveryPhase.STEP_4_POLLING_VERIFICATION_RESULT,
522
549
  status: EmailRecoveryStatus.PROGRESS,
523
- message: completed && success ? `Email verified for request ${rec.requestId}; finalizing registration` : `Waiting for email verification for request ${rec.requestId}`,
550
+ message: completed && success ? `Email recovery completed for request ${rec.requestId}; finalizing registration` : `Waiting for email recovery for request ${rec.requestId}`,
524
551
  data: this.buildPollingEventData(rec, {
525
- transactionHash: verification?.transactionHash,
552
+ transactionHash,
526
553
  elapsedMs,
527
554
  pollCount
528
555
  })
@@ -532,7 +559,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
532
559
  done: true,
533
560
  value: {
534
561
  outcome: "failed",
535
- errorMessage: verification?.errorMessage || "Email verification failed"
562
+ errorMessage: errorMessage$1 || "Email recovery failed"
536
563
  }
537
564
  };
538
565
  return {
@@ -573,7 +600,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
573
600
  accountId
574
601
  };
575
602
  }
576
- async signRegistrationTx(rec, accountId) {
603
+ async signNewDevice2RegistrationTx(rec, accountId) {
577
604
  const vrfChallenge = rec.vrfChallenge;
578
605
  if (!vrfChallenge) return this.fail(5, "Missing VRF challenge for email recovery registration");
579
606
  const registrationResult = await this.context.webAuthnManager.signDevice2RegistrationWithStoredKey({
@@ -587,28 +614,56 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
587
614
  return registrationResult.signedTransaction;
588
615
  }
589
616
  async broadcastRegistrationTxAndWaitFinal(rec, signedTx) {
617
+ let txResult;
590
618
  try {
591
- const txResult = await this.context.nearClient.sendTransaction(signedTx, DEFAULT_WAIT_STATUS.linkDeviceRegistration);
592
- try {
593
- const txHash = txResult?.transaction?.hash || txResult?.transaction_hash;
594
- if (txHash) this.emit({
595
- step: 5,
596
- phase: EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
597
- status: EmailRecoveryStatus.PROGRESS,
598
- message: "Registration transaction confirmed",
599
- data: {
600
- accountId: rec.accountId,
601
- nearPublicKey: rec.nearPublicKey,
602
- transactionHash: txHash
603
- }
604
- });
605
- return txHash;
606
- } catch {}
607
- } catch (e) {
608
- const msg = String(e?.message || "");
609
- await this.fail(5, msg || "Failed to broadcast email recovery registration transaction (insufficient funds or RPC error)");
619
+ txResult = await this.context.nearClient.sendTransaction(signedTx, DEFAULT_WAIT_STATUS.linkDeviceRegistration);
620
+ } catch (err) {
621
+ const msg = errorMessage(err) || "Failed to broadcast email recovery registration transaction (insufficient funds or RPC error)";
622
+ throw new Error(msg);
623
+ }
624
+ const txHash = this.getTxHash(txResult);
625
+ const linkDeviceResult = parseLinkDeviceRegisterUserResponse(txResult);
626
+ if (linkDeviceResult?.verified === false) {
627
+ const logs = this.extractNearExecutionLogs(txResult);
628
+ const isStaleChallenge = logs.some((log) => /StaleChallenge|freshness validation failed/i.test(log));
629
+ const txHint = txHash ? ` (tx: ${txHash})` : "";
630
+ const code = isStaleChallenge ? EmailRecoveryErrorCode.VRF_CHALLENGE_EXPIRED : EmailRecoveryErrorCode.REGISTRATION_NOT_VERIFIED;
631
+ const message = isStaleChallenge ? `Timed out finalizing registration (VRF challenge expired). Please restart email recovery and try again${txHint}.` : `Registration did not verify on-chain. Please try again${txHint}.`;
632
+ throw new EmailRecoveryError(message, code, {
633
+ accountId: rec.accountId,
634
+ nearPublicKey: rec.nearPublicKey,
635
+ transactionHash: txHash,
636
+ logs,
637
+ result: linkDeviceResult
638
+ });
639
+ }
640
+ if (txHash) this.emit({
641
+ step: 5,
642
+ phase: EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
643
+ status: EmailRecoveryStatus.PROGRESS,
644
+ message: "Registration transaction confirmed",
645
+ data: {
646
+ accountId: rec.accountId,
647
+ nearPublicKey: rec.nearPublicKey,
648
+ transactionHash: txHash
649
+ }
650
+ });
651
+ return txHash;
652
+ }
653
+ getTxHash(outcome) {
654
+ const txUnknown = outcome.transaction;
655
+ if (txUnknown && typeof txUnknown === "object") {
656
+ const hash = txUnknown.hash;
657
+ if (typeof hash === "string" && hash.length > 0) return hash;
610
658
  }
611
- return void 0;
659
+ const fallback = outcome.transaction_hash;
660
+ return typeof fallback === "string" && fallback.length > 0 ? fallback : void 0;
661
+ }
662
+ extractNearExecutionLogs(outcome) {
663
+ const logs = [];
664
+ for (const entry of outcome.transaction_outcome.outcome.logs) logs.push(String(entry));
665
+ for (const receipt of outcome.receipts_outcome) for (const entry of receipt.outcome.logs) logs.push(String(entry));
666
+ return logs;
612
667
  }
613
668
  mapAuthenticatorsFromContract(authenticators) {
614
669
  return authenticators.map(({ authenticator }) => ({
@@ -644,7 +699,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
644
699
  }
645
700
  async updateNonceBestEffort(nonceManager, signedTx) {
646
701
  try {
647
- const txNonce = signedTx.transaction?.nonce;
702
+ const txNonce = signedTx.transaction.nonce;
648
703
  if (txNonce != null) await nonceManager.updateNonceFromBlockchain(this.context.nearClient, String(txNonce));
649
704
  } catch {}
650
705
  }
@@ -760,7 +815,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
760
815
  } catch (err) {
761
816
  return {
762
817
  success: false,
763
- reason: err?.message || String(err)
818
+ reason: errorMessage(err) || String(err)
764
819
  };
765
820
  }
766
821
  }
@@ -788,7 +843,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
788
843
  });
789
844
  try {
790
845
  const { nonceManager, accountId } = this.initializeNonceManager(rec);
791
- const signedTx = await this.signRegistrationTx(rec, accountId);
846
+ const signedTx = await this.signNewDevice2RegistrationTx(rec, accountId);
792
847
  const txHash = await this.broadcastRegistrationTxAndWaitFinal(rec, signedTx);
793
848
  if (!txHash) console.warn("[EmailRecoveryFlow] Registration transaction confirmed without hash; continuing local persistence");
794
849
  await this.persistRecoveredUserData(rec, accountId);
@@ -816,7 +871,10 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
816
871
  }
817
872
  });
818
873
  } catch (e) {
819
- const err = this.emitError(5, e?.message || "Email recovery finalization failed");
874
+ rec.status = "error";
875
+ await this.savePending(rec).catch(() => {});
876
+ const original = e instanceof Error ? e : new Error(errorMessage(e) || "Email recovery finalization failed");
877
+ const err = this.emitError(5, original);
820
878
  await this.options?.afterCall?.(false);
821
879
  throw err;
822
880
  }
@@ -838,7 +896,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
838
896
  };
839
897
  return this.handleAutoLoginFailure(touchIdResult.reason || "Auto-login failed");
840
898
  } catch (err) {
841
- return this.handleAutoLoginFailure(err?.message || String(err), err);
899
+ return this.handleAutoLoginFailure(errorMessage(err) || String(err), err);
842
900
  }
843
901
  }
844
902
  };