@tatchi-xyz/sdk 0.20.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 (217) hide show
  1. package/dist/cjs/core/TatchiPasskey/emailRecovery.js +67 -45
  2. package/dist/cjs/core/TatchiPasskey/emailRecovery.js.map +1 -1
  3. package/dist/cjs/core/TatchiPasskey/index.js +2 -1
  4. package/dist/cjs/core/TatchiPasskey/index.js.map +1 -1
  5. package/dist/cjs/core/TatchiPasskey/linkDevice.js +2 -1
  6. package/dist/cjs/core/TatchiPasskey/linkDevice.js.map +1 -1
  7. package/dist/cjs/core/TatchiPasskey/scanDevice.js +5 -3
  8. package/dist/cjs/core/TatchiPasskey/scanDevice.js.map +1 -1
  9. package/dist/cjs/core/WalletIframe/client/router.js +1 -1
  10. package/dist/cjs/core/WalletIframe/client/router.js.map +1 -1
  11. package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +3 -4
  12. package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
  13. package/dist/cjs/core/defaultConfigs.js +3 -7
  14. package/dist/cjs/core/defaultConfigs.js.map +1 -1
  15. package/dist/cjs/core/nearCrypto.js +29 -5
  16. package/dist/cjs/core/nearCrypto.js.map +1 -1
  17. package/dist/cjs/core/rpcCalls.js +56 -26
  18. package/dist/cjs/core/rpcCalls.js.map +1 -1
  19. package/dist/cjs/react/components/AccountMenuButton/{LinkedDevicesModal-BCrFe5p3.css → LinkedDevicesModal-BRtht0XI.css} +1 -1
  20. package/dist/{esm/react/components/AccountMenuButton/LinkedDevicesModal-BCrFe5p3.css.map → cjs/react/components/AccountMenuButton/LinkedDevicesModal-BRtht0XI.css.map} +1 -1
  21. package/dist/cjs/react/components/AccountMenuButton/{ProfileDropdown-CRJrtxDb.css → ProfileDropdown-BG_6hcim.css} +1 -1
  22. package/dist/{esm/react/components/AccountMenuButton/ProfileDropdown-CRJrtxDb.css.map → cjs/react/components/AccountMenuButton/ProfileDropdown-BG_6hcim.css.map} +1 -1
  23. package/dist/cjs/react/components/AccountMenuButton/{Web3AuthProfileButton-DXFRw8ND.css → Web3AuthProfileButton-k8_FAYFq.css} +1 -1
  24. package/dist/cjs/react/components/AccountMenuButton/{Web3AuthProfileButton-DXFRw8ND.css.map → Web3AuthProfileButton-k8_FAYFq.css.map} +1 -1
  25. package/dist/cjs/react/components/AccountMenuButton/icons/{TouchIcon-DNgbAK_i.css → TouchIcon-C-RcGfr5.css} +1 -1
  26. package/dist/cjs/react/components/AccountMenuButton/icons/{TouchIcon-DNgbAK_i.css.map → TouchIcon-C-RcGfr5.css.map} +1 -1
  27. package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DRwSoF8q.css → PasskeyAuthMenu-DKMiLeT9.css} +59 -4
  28. package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DRwSoF8q.css.map → PasskeyAuthMenu-DKMiLeT9.css.map} +1 -1
  29. package/dist/cjs/react/components/PasskeyAuthMenu/adapters/tatchi.js +1 -0
  30. package/dist/cjs/react/components/PasskeyAuthMenu/adapters/tatchi.js.map +1 -1
  31. package/dist/cjs/react/components/PasskeyAuthMenu/client.js +30 -8
  32. package/dist/cjs/react/components/PasskeyAuthMenu/client.js.map +1 -1
  33. package/dist/cjs/react/components/PasskeyAuthMenu/controller/useSDKEvents.js +22 -0
  34. package/dist/cjs/react/components/PasskeyAuthMenu/controller/useSDKEvents.js.map +1 -0
  35. package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +17 -4
  36. package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
  37. package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +254 -140
  38. package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
  39. package/dist/cjs/react/components/{ShowQRCode-CL4gsszN.css → ShowQRCode-CB0UCQ_h.css} +1 -1
  40. package/dist/cjs/react/components/{ShowQRCode-CL4gsszN.css.map → ShowQRCode-CB0UCQ_h.css.map} +1 -1
  41. package/dist/cjs/react/context/useSDKFlowRuntime.js +183 -0
  42. package/dist/cjs/react/context/useSDKFlowRuntime.js.map +1 -0
  43. package/dist/cjs/react/context/useTatchiContextValue.js +24 -15
  44. package/dist/cjs/react/context/useTatchiContextValue.js.map +1 -1
  45. package/dist/cjs/react/context/useTatchiWithSdkFlow.js +96 -0
  46. package/dist/cjs/react/context/useTatchiWithSdkFlow.js.map +1 -0
  47. package/dist/cjs/react/sdk/src/core/EmailRecovery/index.js +1 -0
  48. package/dist/cjs/react/sdk/src/core/TatchiPasskey/emailRecovery.js +67 -45
  49. package/dist/cjs/react/sdk/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
  50. package/dist/cjs/react/sdk/src/core/TatchiPasskey/index.js +2 -1
  51. package/dist/cjs/react/sdk/src/core/TatchiPasskey/index.js.map +1 -1
  52. package/dist/cjs/react/sdk/src/core/TatchiPasskey/linkDevice.js +2 -1
  53. package/dist/cjs/react/sdk/src/core/TatchiPasskey/linkDevice.js.map +1 -1
  54. package/dist/cjs/react/sdk/src/core/TatchiPasskey/scanDevice.js +5 -3
  55. package/dist/cjs/react/sdk/src/core/TatchiPasskey/scanDevice.js.map +1 -1
  56. package/dist/cjs/react/sdk/src/core/WalletIframe/client/router.js +1 -1
  57. package/dist/cjs/react/sdk/src/core/WalletIframe/client/router.js.map +1 -1
  58. package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +3 -4
  59. package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
  60. package/dist/cjs/react/sdk/src/core/defaultConfigs.js +3 -7
  61. package/dist/cjs/react/sdk/src/core/defaultConfigs.js.map +1 -1
  62. package/dist/cjs/react/sdk/src/core/nearCrypto.js +29 -5
  63. package/dist/cjs/react/sdk/src/core/nearCrypto.js.map +1 -1
  64. package/dist/cjs/react/sdk/src/core/rpcCalls.js +56 -26
  65. package/dist/cjs/react/sdk/src/core/rpcCalls.js.map +1 -1
  66. package/dist/cjs/server/email-recovery/emailParsers.js +2 -1
  67. package/dist/cjs/server/email-recovery/emailParsers.js.map +1 -1
  68. package/dist/cjs/server/email-recovery/index.js +6 -6
  69. package/dist/cjs/server/email-recovery/index.js.map +1 -1
  70. package/dist/cjs/server/email-recovery/rpcCalls.js +22 -3
  71. package/dist/cjs/server/email-recovery/rpcCalls.js.map +1 -1
  72. package/dist/cjs/server/router/cloudflare.js +8 -3
  73. package/dist/cjs/server/router/cloudflare.js.map +1 -1
  74. package/dist/cjs/server/router/express.js.map +1 -1
  75. package/dist/cjs/server/sdk/src/core/defaultConfigs.js +2 -4
  76. package/dist/cjs/server/sdk/src/core/defaultConfigs.js.map +1 -1
  77. package/dist/cjs/server/sdk/src/core/nearCrypto.js +26 -7
  78. package/dist/cjs/server/sdk/src/core/nearCrypto.js.map +1 -1
  79. package/dist/esm/core/TatchiPasskey/emailRecovery.js +67 -45
  80. package/dist/esm/core/TatchiPasskey/emailRecovery.js.map +1 -1
  81. package/dist/esm/core/TatchiPasskey/index.js +2 -1
  82. package/dist/esm/core/TatchiPasskey/index.js.map +1 -1
  83. package/dist/esm/core/TatchiPasskey/linkDevice.js +2 -1
  84. package/dist/esm/core/TatchiPasskey/linkDevice.js.map +1 -1
  85. package/dist/esm/core/TatchiPasskey/scanDevice.js +5 -3
  86. package/dist/esm/core/TatchiPasskey/scanDevice.js.map +1 -1
  87. package/dist/esm/core/WalletIframe/client/router.js +1 -1
  88. package/dist/esm/core/WalletIframe/client/router.js.map +1 -1
  89. package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +2 -3
  90. package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
  91. package/dist/esm/core/defaultConfigs.js +3 -7
  92. package/dist/esm/core/defaultConfigs.js.map +1 -1
  93. package/dist/esm/core/nearCrypto.js +24 -6
  94. package/dist/esm/core/nearCrypto.js.map +1 -1
  95. package/dist/esm/core/rpcCalls.js +56 -26
  96. package/dist/esm/core/rpcCalls.js.map +1 -1
  97. package/dist/esm/react/components/AccountMenuButton/{LinkedDevicesModal-BCrFe5p3.css → LinkedDevicesModal-BRtht0XI.css} +1 -1
  98. package/dist/{cjs/react/components/AccountMenuButton/LinkedDevicesModal-BCrFe5p3.css.map → esm/react/components/AccountMenuButton/LinkedDevicesModal-BRtht0XI.css.map} +1 -1
  99. package/dist/esm/react/components/AccountMenuButton/{ProfileDropdown-CRJrtxDb.css → ProfileDropdown-BG_6hcim.css} +1 -1
  100. package/dist/{cjs/react/components/AccountMenuButton/ProfileDropdown-CRJrtxDb.css.map → esm/react/components/AccountMenuButton/ProfileDropdown-BG_6hcim.css.map} +1 -1
  101. package/dist/esm/react/components/AccountMenuButton/{Web3AuthProfileButton-DXFRw8ND.css → Web3AuthProfileButton-k8_FAYFq.css} +1 -1
  102. package/dist/esm/react/components/AccountMenuButton/{Web3AuthProfileButton-DXFRw8ND.css.map → Web3AuthProfileButton-k8_FAYFq.css.map} +1 -1
  103. package/dist/esm/react/components/AccountMenuButton/icons/{TouchIcon-DNgbAK_i.css → TouchIcon-C-RcGfr5.css} +1 -1
  104. package/dist/esm/react/components/AccountMenuButton/icons/{TouchIcon-DNgbAK_i.css.map → TouchIcon-C-RcGfr5.css.map} +1 -1
  105. package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DRwSoF8q.css → PasskeyAuthMenu-DKMiLeT9.css} +59 -4
  106. package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DRwSoF8q.css.map → PasskeyAuthMenu-DKMiLeT9.css.map} +1 -1
  107. package/dist/esm/react/components/PasskeyAuthMenu/adapters/tatchi.js +1 -0
  108. package/dist/esm/react/components/PasskeyAuthMenu/adapters/tatchi.js.map +1 -1
  109. package/dist/esm/react/components/PasskeyAuthMenu/client.js +30 -8
  110. package/dist/esm/react/components/PasskeyAuthMenu/client.js.map +1 -1
  111. package/dist/esm/react/components/PasskeyAuthMenu/controller/useSDKEvents.js +20 -0
  112. package/dist/esm/react/components/PasskeyAuthMenu/controller/useSDKEvents.js.map +1 -0
  113. package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +17 -4
  114. package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
  115. package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +254 -140
  116. package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
  117. package/dist/esm/react/components/{ShowQRCode-CL4gsszN.css → ShowQRCode-CB0UCQ_h.css} +1 -1
  118. package/dist/esm/react/components/{ShowQRCode-CL4gsszN.css.map → ShowQRCode-CB0UCQ_h.css.map} +1 -1
  119. package/dist/esm/react/context/useSDKFlowRuntime.js +181 -0
  120. package/dist/esm/react/context/useSDKFlowRuntime.js.map +1 -0
  121. package/dist/esm/react/context/useTatchiContextValue.js +25 -16
  122. package/dist/esm/react/context/useTatchiContextValue.js.map +1 -1
  123. package/dist/esm/react/context/useTatchiWithSdkFlow.js +94 -0
  124. package/dist/esm/react/context/useTatchiWithSdkFlow.js.map +1 -0
  125. package/dist/esm/react/sdk/src/core/EmailRecovery/index.js +1 -1
  126. package/dist/esm/react/sdk/src/core/TatchiPasskey/emailRecovery.js +67 -45
  127. package/dist/esm/react/sdk/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
  128. package/dist/esm/react/sdk/src/core/TatchiPasskey/index.js +2 -1
  129. package/dist/esm/react/sdk/src/core/TatchiPasskey/index.js.map +1 -1
  130. package/dist/esm/react/sdk/src/core/TatchiPasskey/linkDevice.js +2 -1
  131. package/dist/esm/react/sdk/src/core/TatchiPasskey/linkDevice.js.map +1 -1
  132. package/dist/esm/react/sdk/src/core/TatchiPasskey/scanDevice.js +5 -3
  133. package/dist/esm/react/sdk/src/core/TatchiPasskey/scanDevice.js.map +1 -1
  134. package/dist/esm/react/sdk/src/core/WalletIframe/client/router.js +1 -1
  135. package/dist/esm/react/sdk/src/core/WalletIframe/client/router.js.map +1 -1
  136. package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +2 -3
  137. package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
  138. package/dist/esm/react/sdk/src/core/defaultConfigs.js +3 -7
  139. package/dist/esm/react/sdk/src/core/defaultConfigs.js.map +1 -1
  140. package/dist/esm/react/sdk/src/core/nearCrypto.js +24 -6
  141. package/dist/esm/react/sdk/src/core/nearCrypto.js.map +1 -1
  142. package/dist/esm/react/sdk/src/core/rpcCalls.js +56 -26
  143. package/dist/esm/react/sdk/src/core/rpcCalls.js.map +1 -1
  144. package/dist/esm/react/styles/styles.css +58 -3
  145. package/dist/esm/sdk/{defaultConfigs-DpslkAQd.js → defaultConfigs-CfQDV-ya.js} +3 -7
  146. package/dist/esm/sdk/{getDeviceNumber-fXizNGQl.js → getDeviceNumber-BpernPnM.js} +4 -8
  147. package/dist/esm/sdk/getDeviceNumber-BpernPnM.js.map +1 -0
  148. package/dist/esm/sdk/offline-export-app.js +23 -6
  149. package/dist/esm/sdk/offline-export-app.js.map +1 -1
  150. package/dist/esm/sdk/{router-DuGYOd3G.js → router-BWtacLJg.js} +1 -1
  151. package/dist/esm/sdk/{rpcCalls-BQrJMTdg.js → rpcCalls-CYGJSCgm.js} +3 -3
  152. package/dist/esm/sdk/{rpcCalls-YVeUVMk2.js → rpcCalls-DZZSa-sk.js} +57 -27
  153. package/dist/esm/sdk/{transactions-bqaAwL4k.js → transactions-Cn9xTWlK.js} +2 -2
  154. package/dist/esm/sdk/{transactions-bqaAwL4k.js.map → transactions-Cn9xTWlK.js.map} +1 -1
  155. package/dist/esm/sdk/{transactions-BalIhtJ9.js → transactions-DfdwDQCn.js} +1 -1
  156. package/dist/esm/sdk/wallet-iframe-host.js +549 -557
  157. package/dist/esm/server/email-recovery/emailParsers.js +3 -1
  158. package/dist/esm/server/email-recovery/emailParsers.js.map +1 -1
  159. package/dist/esm/server/email-recovery/index.js +6 -6
  160. package/dist/esm/server/email-recovery/index.js.map +1 -1
  161. package/dist/esm/server/email-recovery/rpcCalls.js +22 -3
  162. package/dist/esm/server/email-recovery/rpcCalls.js.map +1 -1
  163. package/dist/esm/server/router/cloudflare.js +8 -3
  164. package/dist/esm/server/router/cloudflare.js.map +1 -1
  165. package/dist/esm/server/router/express.js.map +1 -1
  166. package/dist/esm/server/sdk/src/core/defaultConfigs.js +2 -4
  167. package/dist/esm/server/sdk/src/core/defaultConfigs.js.map +1 -1
  168. package/dist/esm/server/sdk/src/core/nearCrypto.js +26 -8
  169. package/dist/esm/server/sdk/src/core/nearCrypto.js.map +1 -1
  170. package/dist/esm/wasm_vrf_worker/pkg/wasm_vrf_worker_bg.wasm +0 -0
  171. package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts +5 -4
  172. package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts.map +1 -1
  173. package/dist/types/src/core/TatchiPasskey/index.d.ts +1 -1
  174. package/dist/types/src/core/TatchiPasskey/index.d.ts.map +1 -1
  175. package/dist/types/src/core/TatchiPasskey/scanDevice.d.ts.map +1 -1
  176. package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts +1 -1
  177. package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts.map +1 -1
  178. package/dist/types/src/core/WalletIframe/client/router.d.ts +1 -1
  179. package/dist/types/src/core/WalletIframe/client/router.d.ts.map +1 -1
  180. package/dist/types/src/core/WalletIframe/shared/messages.d.ts +1 -1
  181. package/dist/types/src/core/WalletIframe/shared/messages.d.ts.map +1 -1
  182. package/dist/types/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.d.ts +2 -1
  183. package/dist/types/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.d.ts.map +1 -1
  184. package/dist/types/src/core/defaultConfigs.d.ts.map +1 -1
  185. package/dist/types/src/core/nearCrypto.d.ts +14 -0
  186. package/dist/types/src/core/nearCrypto.d.ts.map +1 -1
  187. package/dist/types/src/core/rpcCalls.d.ts +11 -8
  188. package/dist/types/src/core/rpcCalls.d.ts.map +1 -1
  189. package/dist/types/src/core/types/tatchi.d.ts +0 -4
  190. package/dist/types/src/core/types/tatchi.d.ts.map +1 -1
  191. package/dist/types/src/react/components/PasskeyAuthMenu/adapters/tatchi.d.ts +2 -0
  192. package/dist/types/src/react/components/PasskeyAuthMenu/adapters/tatchi.d.ts.map +1 -1
  193. package/dist/types/src/react/components/PasskeyAuthMenu/client.d.ts.map +1 -1
  194. package/dist/types/src/react/components/PasskeyAuthMenu/controller/useSDKEvents.d.ts +10 -0
  195. package/dist/types/src/react/components/PasskeyAuthMenu/controller/useSDKEvents.d.ts.map +1 -0
  196. package/dist/types/src/react/components/PasskeyAuthMenu/types.d.ts +8 -3
  197. package/dist/types/src/react/components/PasskeyAuthMenu/types.d.ts.map +1 -1
  198. package/dist/types/src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.d.ts +2 -0
  199. package/dist/types/src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.d.ts.map +1 -1
  200. package/dist/types/src/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.d.ts +1 -1
  201. package/dist/types/src/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.d.ts.map +1 -1
  202. package/dist/types/src/react/context/useSDKFlowRuntime.d.ts +10 -0
  203. package/dist/types/src/react/context/useSDKFlowRuntime.d.ts.map +1 -0
  204. package/dist/types/src/react/context/useTatchiContextValue.d.ts.map +1 -1
  205. package/dist/types/src/react/context/useTatchiWithSdkFlow.d.ts +9 -0
  206. package/dist/types/src/react/context/useTatchiWithSdkFlow.d.ts.map +1 -0
  207. package/dist/types/src/react/types.d.ts +31 -0
  208. package/dist/types/src/react/types.d.ts.map +1 -1
  209. package/dist/types/src/server/email-recovery/emailParsers.d.ts.map +1 -1
  210. package/dist/types/src/server/email-recovery/index.d.ts +5 -6
  211. package/dist/types/src/server/email-recovery/index.d.ts.map +1 -1
  212. package/dist/types/src/server/email-recovery/rpcCalls.d.ts +1 -0
  213. package/dist/types/src/server/email-recovery/rpcCalls.d.ts.map +1 -1
  214. package/dist/types/src/server/router/cloudflare-adaptor.d.ts.map +1 -1
  215. package/dist/workers/wasm_vrf_worker_bg.wasm +0 -0
  216. package/package.json +1 -1
  217. package/dist/esm/sdk/getDeviceNumber-fXizNGQl.js.map +0 -1
@@ -14,8 +14,8 @@ import { init_credentialsHelpers, init_utils, init_validation as init_validation
14
14
  import { MinimalNearClient, SignedTransaction, isOffline, openOfflineExport } from "./overlay-ZGbucXIa.js";
15
15
  import { AccountRecoveryPhase, AccountRecoveryStatus, ActionPhase, ActionStatus, DEFAULT_WAIT_STATUS, DeviceLinkingPhase, DeviceLinkingStatus, EmailRecoveryPhase, EmailRecoveryStatus, LoginPhase, LoginStatus, RegistrationPhase, RegistrationStatus, init_rpc, init_sdkSentEvents } from "./sdkSentEvents-_jrJLIhw.js";
16
16
  import { SecureConfirmMessageType, SecureConfirmationType, TouchIdPrompt, authenticatorsToAllowCredentials, createRandomVRFChallenge, getIntentDigest, init_accountIds, init_touchIdPrompt, init_vrf_worker, parseTransactionSummary, sanitizeForPostMessage, sendConfirmResponse, toAccountId, validateVRFChallenge } from "./requestHelpers-Dh1hEYL9.js";
17
- import { PASSKEY_MANAGER_DEFAULT_CONFIGS, buildConfigsFromEnv, init_defaultConfigs } from "./defaultConfigs-DpslkAQd.js";
18
- import { buildSetRecoveryEmailsActions, checkCanRegisterUserContractCall, executeDeviceLinkingContractCalls, getCredentialIdsContractCall, getDeviceLinkingAccountContractCall, getRecoveryEmailHashesContractCall, init_rpcCalls, syncAuthenticatorsContractCall, verifyAuthenticationResponse } from "./rpcCalls-YVeUVMk2.js";
17
+ import { PASSKEY_MANAGER_DEFAULT_CONFIGS, buildConfigsFromEnv, init_defaultConfigs } from "./defaultConfigs-CfQDV-ya.js";
18
+ import { buildSetRecoveryEmailsActions, checkCanRegisterUserContractCall, executeDeviceLinkingContractCalls, getCredentialIdsContractCall, getDeviceLinkingAccountContractCall, getEmailRecoveryAttempt, getRecoveryEmailHashesContractCall, init_rpcCalls, syncAuthenticatorsContractCall, verifyAuthenticationResponse } from "./rpcCalls-DZZSa-sk.js";
19
19
  import { getLastLoggedInDeviceNumber, init_getDeviceNumber, parseDeviceNumber } from "./getDeviceNumber-zsOHT_Um.js";
20
20
 
21
21
  //#region src/core/sdkPaths/workers.ts
@@ -2667,10 +2667,480 @@ async function signTransactionsWithActions$1({ ctx, transactions, rpcCall, onEve
2667
2667
  }
2668
2668
  }
2669
2669
 
2670
+ //#endregion
2671
+ //#region ../node_modules/.pnpm/@noble+ed25519@2.3.0/node_modules/@noble/ed25519/index.js
2672
+ var ed25519_CURVE, P, N, Gx, Gy, _a, _d, h, L, L2, err, isBig, isStr, isBytes, abytes, u8n, u8fr, padh, bytesToHex$1, C, _ch, hexToBytes, toU8, cr, subtle, concatBytes, randomBytes, big, arange, M, modN, invert, callHash, apoint, B256, Point, G, I, numTo32bLE, bytesToNumLE, pow2, pow_2_252_3, RM1, uvRatio, modL_LE, sha512a, sha512s, hash2extK, getExtendedPublicKeyAsync, getExtendedPublicKey, getPublicKeyAsync, etc, utils, W, scalarBits, pwindows, pwindowSize, precompute, Gpows, ctneg, wNAF;
2673
+ var init_ed25519 = __esm({ "../node_modules/.pnpm/@noble+ed25519@2.3.0/node_modules/@noble/ed25519/index.js": (() => {
2674
+ ed25519_CURVE = {
2675
+ p: 57896044618658097711785492504343953926634992332820282019728792003956564819949n,
2676
+ n: 7237005577332262213973186563042994240857116359379907606001950938285454250989n,
2677
+ h: 8n,
2678
+ a: 57896044618658097711785492504343953926634992332820282019728792003956564819948n,
2679
+ d: 37095705934669439343138083508754565189542113879843219016388785533085940283555n,
2680
+ Gx: 15112221349535400772501151409588531511454012693041857206046113283949847762202n,
2681
+ Gy: 46316835694926478169428394003475163141307993866256225615783033603165251855960n
2682
+ };
2683
+ ({p: P, n: N, Gx, Gy, a: _a, d: _d} = ed25519_CURVE);
2684
+ h = 8n;
2685
+ L = 32;
2686
+ L2 = 64;
2687
+ err = (m = "") => {
2688
+ throw new Error(m);
2689
+ };
2690
+ isBig = (n) => typeof n === "bigint";
2691
+ isStr = (s) => typeof s === "string";
2692
+ isBytes = (a) => a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
2693
+ abytes = (a, l) => !isBytes(a) || typeof l === "number" && l > 0 && a.length !== l ? err("Uint8Array expected") : a;
2694
+ u8n = (len) => new Uint8Array(len);
2695
+ u8fr = (buf) => Uint8Array.from(buf);
2696
+ padh = (n, pad) => n.toString(16).padStart(pad, "0");
2697
+ bytesToHex$1 = (b) => Array.from(abytes(b)).map((e) => padh(e, 2)).join("");
2698
+ C = {
2699
+ _0: 48,
2700
+ _9: 57,
2701
+ A: 65,
2702
+ F: 70,
2703
+ a: 97,
2704
+ f: 102
2705
+ };
2706
+ _ch = (ch) => {
2707
+ if (ch >= C._0 && ch <= C._9) return ch - C._0;
2708
+ if (ch >= C.A && ch <= C.F) return ch - (C.A - 10);
2709
+ if (ch >= C.a && ch <= C.f) return ch - (C.a - 10);
2710
+ };
2711
+ hexToBytes = (hex) => {
2712
+ const e = "hex invalid";
2713
+ if (!isStr(hex)) return err(e);
2714
+ const hl = hex.length;
2715
+ const al = hl / 2;
2716
+ if (hl % 2) return err(e);
2717
+ const array = u8n(al);
2718
+ for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {
2719
+ const n1 = _ch(hex.charCodeAt(hi));
2720
+ const n2 = _ch(hex.charCodeAt(hi + 1));
2721
+ if (n1 === void 0 || n2 === void 0) return err(e);
2722
+ array[ai] = n1 * 16 + n2;
2723
+ }
2724
+ return array;
2725
+ };
2726
+ toU8 = (a, len) => abytes(isStr(a) ? hexToBytes(a) : u8fr(abytes(a)), len);
2727
+ cr = () => globalThis?.crypto;
2728
+ subtle = () => cr()?.subtle ?? err("crypto.subtle must be defined");
2729
+ concatBytes = (...arrs) => {
2730
+ const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0));
2731
+ let pad = 0;
2732
+ arrs.forEach((a) => {
2733
+ r.set(a, pad);
2734
+ pad += a.length;
2735
+ });
2736
+ return r;
2737
+ };
2738
+ randomBytes = (len = L) => {
2739
+ const c = cr();
2740
+ return c.getRandomValues(u8n(len));
2741
+ };
2742
+ big = BigInt;
2743
+ arange = (n, min, max, msg = "bad number: out of range") => isBig(n) && min <= n && n < max ? n : err(msg);
2744
+ M = (a, b = P) => {
2745
+ const r = a % b;
2746
+ return r >= 0n ? r : b + r;
2747
+ };
2748
+ modN = (a) => M(a, N);
2749
+ invert = (num, md) => {
2750
+ if (num === 0n || md <= 0n) err("no inverse n=" + num + " mod=" + md);
2751
+ let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;
2752
+ while (a !== 0n) {
2753
+ const q = b / a, r = b % a;
2754
+ const m = x - u * q, n = y - v * q;
2755
+ b = a, a = r, x = u, y = v, u = m, v = n;
2756
+ }
2757
+ return b === 1n ? M(x, md) : err("no inverse");
2758
+ };
2759
+ callHash = (name) => {
2760
+ const fn = etc[name];
2761
+ if (typeof fn !== "function") err("hashes." + name + " not set");
2762
+ return fn;
2763
+ };
2764
+ apoint = (p) => p instanceof Point ? p : err("Point expected");
2765
+ B256 = 2n ** 256n;
2766
+ Point = class Point {
2767
+ static BASE;
2768
+ static ZERO;
2769
+ ex;
2770
+ ey;
2771
+ ez;
2772
+ et;
2773
+ constructor(ex, ey, ez, et) {
2774
+ const max = B256;
2775
+ this.ex = arange(ex, 0n, max);
2776
+ this.ey = arange(ey, 0n, max);
2777
+ this.ez = arange(ez, 1n, max);
2778
+ this.et = arange(et, 0n, max);
2779
+ Object.freeze(this);
2780
+ }
2781
+ static fromAffine(p) {
2782
+ return new Point(p.x, p.y, 1n, M(p.x * p.y));
2783
+ }
2784
+ /** RFC8032 5.1.3: Uint8Array to Point. */
2785
+ static fromBytes(hex, zip215 = false) {
2786
+ const d = _d;
2787
+ const normed = u8fr(abytes(hex, L));
2788
+ const lastByte = hex[31];
2789
+ normed[31] = lastByte & -129;
2790
+ const y = bytesToNumLE(normed);
2791
+ const max = zip215 ? B256 : P;
2792
+ arange(y, 0n, max);
2793
+ const y2 = M(y * y);
2794
+ const u = M(y2 - 1n);
2795
+ const v = M(d * y2 + 1n);
2796
+ let { isValid, value: x } = uvRatio(u, v);
2797
+ if (!isValid) err("bad point: y not sqrt");
2798
+ const isXOdd = (x & 1n) === 1n;
2799
+ const isLastByteOdd = (lastByte & 128) !== 0;
2800
+ if (!zip215 && x === 0n && isLastByteOdd) err("bad point: x==0, isLastByteOdd");
2801
+ if (isLastByteOdd !== isXOdd) x = M(-x);
2802
+ return new Point(x, y, 1n, M(x * y));
2803
+ }
2804
+ /** Checks if the point is valid and on-curve. */
2805
+ assertValidity() {
2806
+ const a = _a;
2807
+ const d = _d;
2808
+ const p = this;
2809
+ if (p.is0()) throw new Error("bad point: ZERO");
2810
+ const { ex: X, ey: Y, ez: Z, et: T } = p;
2811
+ const X2 = M(X * X);
2812
+ const Y2 = M(Y * Y);
2813
+ const Z2 = M(Z * Z);
2814
+ const Z4 = M(Z2 * Z2);
2815
+ const aX2 = M(X2 * a);
2816
+ const left = M(Z2 * M(aX2 + Y2));
2817
+ const right = M(Z4 + M(d * M(X2 * Y2)));
2818
+ if (left !== right) throw new Error("bad point: equation left != right (1)");
2819
+ const XY = M(X * Y);
2820
+ const ZT = M(Z * T);
2821
+ if (XY !== ZT) throw new Error("bad point: equation left != right (2)");
2822
+ return this;
2823
+ }
2824
+ /** Equality check: compare points P&Q. */
2825
+ equals(other) {
2826
+ const { ex: X1, ey: Y1, ez: Z1 } = this;
2827
+ const { ex: X2, ey: Y2, ez: Z2 } = apoint(other);
2828
+ const X1Z2 = M(X1 * Z2);
2829
+ const X2Z1 = M(X2 * Z1);
2830
+ const Y1Z2 = M(Y1 * Z2);
2831
+ const Y2Z1 = M(Y2 * Z1);
2832
+ return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;
2833
+ }
2834
+ is0() {
2835
+ return this.equals(I);
2836
+ }
2837
+ /** Flip point over y coordinate. */
2838
+ negate() {
2839
+ return new Point(M(-this.ex), this.ey, this.ez, M(-this.et));
2840
+ }
2841
+ /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */
2842
+ double() {
2843
+ const { ex: X1, ey: Y1, ez: Z1 } = this;
2844
+ const a = _a;
2845
+ const A = M(X1 * X1);
2846
+ const B = M(Y1 * Y1);
2847
+ const C$1 = M(2n * M(Z1 * Z1));
2848
+ const D = M(a * A);
2849
+ const x1y1 = X1 + Y1;
2850
+ const E = M(M(x1y1 * x1y1) - A - B);
2851
+ const G$1 = D + B;
2852
+ const F = G$1 - C$1;
2853
+ const H = D - B;
2854
+ const X3 = M(E * F);
2855
+ const Y3 = M(G$1 * H);
2856
+ const T3 = M(E * H);
2857
+ const Z3 = M(F * G$1);
2858
+ return new Point(X3, Y3, Z3, T3);
2859
+ }
2860
+ /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */
2861
+ add(other) {
2862
+ const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;
2863
+ const { ex: X2, ey: Y2, ez: Z2, et: T2 } = apoint(other);
2864
+ const a = _a;
2865
+ const d = _d;
2866
+ const A = M(X1 * X2);
2867
+ const B = M(Y1 * Y2);
2868
+ const C$1 = M(T1 * d * T2);
2869
+ const D = M(Z1 * Z2);
2870
+ const E = M((X1 + Y1) * (X2 + Y2) - A - B);
2871
+ const F = M(D - C$1);
2872
+ const G$1 = M(D + C$1);
2873
+ const H = M(B - a * A);
2874
+ const X3 = M(E * F);
2875
+ const Y3 = M(G$1 * H);
2876
+ const T3 = M(E * H);
2877
+ const Z3 = M(F * G$1);
2878
+ return new Point(X3, Y3, Z3, T3);
2879
+ }
2880
+ /**
2881
+ * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.
2882
+ * Uses {@link wNAF} for base point.
2883
+ * Uses fake point to mitigate side-channel leakage.
2884
+ * @param n scalar by which point is multiplied
2885
+ * @param safe safe mode guards against timing attacks; unsafe mode is faster
2886
+ */
2887
+ multiply(n, safe = true) {
2888
+ if (!safe && (n === 0n || this.is0())) return I;
2889
+ arange(n, 1n, N);
2890
+ if (n === 1n) return this;
2891
+ if (this.equals(G)) return wNAF(n).p;
2892
+ let p = I;
2893
+ let f = G;
2894
+ for (let d = this; n > 0n; d = d.double(), n >>= 1n) if (n & 1n) p = p.add(d);
2895
+ else if (safe) f = f.add(d);
2896
+ return p;
2897
+ }
2898
+ /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */
2899
+ toAffine() {
2900
+ const { ex: x, ey: y, ez: z } = this;
2901
+ if (this.equals(I)) return {
2902
+ x: 0n,
2903
+ y: 1n
2904
+ };
2905
+ const iz = invert(z, P);
2906
+ if (M(z * iz) !== 1n) err("invalid inverse");
2907
+ return {
2908
+ x: M(x * iz),
2909
+ y: M(y * iz)
2910
+ };
2911
+ }
2912
+ toBytes() {
2913
+ const { x, y } = this.assertValidity().toAffine();
2914
+ const b = numTo32bLE(y);
2915
+ b[31] |= x & 1n ? 128 : 0;
2916
+ return b;
2917
+ }
2918
+ toHex() {
2919
+ return bytesToHex$1(this.toBytes());
2920
+ }
2921
+ clearCofactor() {
2922
+ return this.multiply(big(h), false);
2923
+ }
2924
+ isSmallOrder() {
2925
+ return this.clearCofactor().is0();
2926
+ }
2927
+ isTorsionFree() {
2928
+ let p = this.multiply(N / 2n, false).double();
2929
+ if (N % 2n) p = p.add(this);
2930
+ return p.is0();
2931
+ }
2932
+ static fromHex(hex, zip215) {
2933
+ return Point.fromBytes(toU8(hex), zip215);
2934
+ }
2935
+ get x() {
2936
+ return this.toAffine().x;
2937
+ }
2938
+ get y() {
2939
+ return this.toAffine().y;
2940
+ }
2941
+ toRawBytes() {
2942
+ return this.toBytes();
2943
+ }
2944
+ };
2945
+ G = new Point(Gx, Gy, 1n, M(Gx * Gy));
2946
+ I = new Point(0n, 1n, 1n, 0n);
2947
+ Point.BASE = G;
2948
+ Point.ZERO = I;
2949
+ numTo32bLE = (num) => hexToBytes(padh(arange(num, 0n, B256), L2)).reverse();
2950
+ bytesToNumLE = (b) => big("0x" + bytesToHex$1(u8fr(abytes(b)).reverse()));
2951
+ pow2 = (x, power) => {
2952
+ let r = x;
2953
+ while (power-- > 0n) {
2954
+ r *= r;
2955
+ r %= P;
2956
+ }
2957
+ return r;
2958
+ };
2959
+ pow_2_252_3 = (x) => {
2960
+ const x2 = x * x % P;
2961
+ const b2 = x2 * x % P;
2962
+ const b4 = pow2(b2, 2n) * b2 % P;
2963
+ const b5 = pow2(b4, 1n) * x % P;
2964
+ const b10 = pow2(b5, 5n) * b5 % P;
2965
+ const b20 = pow2(b10, 10n) * b10 % P;
2966
+ const b40 = pow2(b20, 20n) * b20 % P;
2967
+ const b80 = pow2(b40, 40n) * b40 % P;
2968
+ const b160 = pow2(b80, 80n) * b80 % P;
2969
+ const b240 = pow2(b160, 80n) * b80 % P;
2970
+ const b250 = pow2(b240, 10n) * b10 % P;
2971
+ const pow_p_5_8 = pow2(b250, 2n) * x % P;
2972
+ return {
2973
+ pow_p_5_8,
2974
+ b2
2975
+ };
2976
+ };
2977
+ RM1 = 19681161376707505956807079304988542015446066515923890162744021073123829784752n;
2978
+ uvRatio = (u, v) => {
2979
+ const v3 = M(v * v * v);
2980
+ const v7 = M(v3 * v3 * v);
2981
+ const pow = pow_2_252_3(u * v7).pow_p_5_8;
2982
+ let x = M(u * v3 * pow);
2983
+ const vx2 = M(v * x * x);
2984
+ const root1 = x;
2985
+ const root2 = M(x * RM1);
2986
+ const useRoot1 = vx2 === u;
2987
+ const useRoot2 = vx2 === M(-u);
2988
+ const noRoot = vx2 === M(-u * RM1);
2989
+ if (useRoot1) x = root1;
2990
+ if (useRoot2 || noRoot) x = root2;
2991
+ if ((M(x) & 1n) === 1n) x = M(-x);
2992
+ return {
2993
+ isValid: useRoot1 || useRoot2,
2994
+ value: x
2995
+ };
2996
+ };
2997
+ modL_LE = (hash) => modN(bytesToNumLE(hash));
2998
+ sha512a = (...m) => etc.sha512Async(...m);
2999
+ sha512s = (...m) => callHash("sha512Sync")(...m);
3000
+ hash2extK = (hashed) => {
3001
+ const head = hashed.slice(0, L);
3002
+ head[0] &= 248;
3003
+ head[31] &= 127;
3004
+ head[31] |= 64;
3005
+ const prefix = hashed.slice(L, L2);
3006
+ const scalar = modL_LE(head);
3007
+ const point = G.multiply(scalar);
3008
+ const pointBytes = point.toBytes();
3009
+ return {
3010
+ head,
3011
+ prefix,
3012
+ scalar,
3013
+ point,
3014
+ pointBytes
3015
+ };
3016
+ };
3017
+ getExtendedPublicKeyAsync = (priv) => sha512a(toU8(priv, L)).then(hash2extK);
3018
+ getExtendedPublicKey = (priv) => hash2extK(sha512s(toU8(priv, L)));
3019
+ getPublicKeyAsync = (priv) => getExtendedPublicKeyAsync(priv).then((p) => p.pointBytes);
3020
+ etc = {
3021
+ sha512Async: async (...messages) => {
3022
+ const s = subtle();
3023
+ const m = concatBytes(...messages);
3024
+ return u8n(await s.digest("SHA-512", m.buffer));
3025
+ },
3026
+ sha512Sync: void 0,
3027
+ bytesToHex: bytesToHex$1,
3028
+ hexToBytes,
3029
+ concatBytes,
3030
+ mod: M,
3031
+ invert,
3032
+ randomBytes
3033
+ };
3034
+ utils = {
3035
+ getExtendedPublicKeyAsync,
3036
+ getExtendedPublicKey,
3037
+ randomPrivateKey: () => randomBytes(L),
3038
+ precompute: (w = 8, p = G) => {
3039
+ p.multiply(3n);
3040
+ return p;
3041
+ }
3042
+ };
3043
+ W = 8;
3044
+ scalarBits = 256;
3045
+ pwindows = Math.ceil(scalarBits / W) + 1;
3046
+ pwindowSize = 2 ** (W - 1);
3047
+ precompute = () => {
3048
+ const points = [];
3049
+ let p = G;
3050
+ let b = p;
3051
+ for (let w = 0; w < pwindows; w++) {
3052
+ b = p;
3053
+ points.push(b);
3054
+ for (let i = 1; i < pwindowSize; i++) {
3055
+ b = b.add(p);
3056
+ points.push(b);
3057
+ }
3058
+ p = b.double();
3059
+ }
3060
+ return points;
3061
+ };
3062
+ Gpows = void 0;
3063
+ ctneg = (cnd, p) => {
3064
+ const n = p.negate();
3065
+ return cnd ? n : p;
3066
+ };
3067
+ wNAF = (n) => {
3068
+ const comp = Gpows || (Gpows = precompute());
3069
+ let p = I;
3070
+ let f = G;
3071
+ const pow_2_w = 2 ** W;
3072
+ const maxNum = pow_2_w;
3073
+ const mask = big(pow_2_w - 1);
3074
+ const shiftBy = big(W);
3075
+ for (let w = 0; w < pwindows; w++) {
3076
+ let wbits = Number(n & mask);
3077
+ n >>= shiftBy;
3078
+ if (wbits > pwindowSize) {
3079
+ wbits -= maxNum;
3080
+ n += 1n;
3081
+ }
3082
+ const off = w * pwindowSize;
3083
+ const offF = off;
3084
+ const offP = off + Math.abs(wbits) - 1;
3085
+ const isEven = w % 2 !== 0;
3086
+ const isNeg = wbits < 0;
3087
+ if (wbits === 0) f = f.add(ctneg(isEven, comp[offF]));
3088
+ else p = p.add(ctneg(isNeg, comp[offP]));
3089
+ }
3090
+ return {
3091
+ p,
3092
+ f
3093
+ };
3094
+ };
3095
+ }) });
3096
+
3097
+ //#endregion
3098
+ //#region src/core/nearCrypto.ts
3099
+ /**
3100
+ * Ensure a key string has the NEAR Ed25519 prefix (`ed25519:`).
3101
+ *
3102
+ * - Accepts either `ed25519:<base58>` or a bare `<base58>` string.
3103
+ * - Canonicalizes `ED25519:` → `ed25519:`.
3104
+ * - If a different prefix is present (e.g. `secp256k1:`), returns the input unchanged.
3105
+ */
3106
+ function ensureEd25519Prefix(value) {
3107
+ const raw = String(value || "").trim();
3108
+ if (!raw) return "";
3109
+ if (/^[a-z0-9_]+:/i.test(raw)) {
3110
+ if (/^ed25519:/i.test(raw)) return `${NEAR_ED25519_KEY_PREFIX}${raw.replace(/^ed25519:/i, "")}`;
3111
+ return raw;
3112
+ }
3113
+ return `${NEAR_ED25519_KEY_PREFIX}${raw}`;
3114
+ }
3115
+ /**
3116
+ * Creates a NEAR-compatible Ed25519 keypair formatted as strings:
3117
+ * - publicKey: 'ed25519:' + base58(pub)
3118
+ * - privateKey: 'ed25519:' + base58(seed(32) | pub(32))
3119
+ */
3120
+ async function createNearKeypair() {
3121
+ const seed = utils.randomPrivateKey();
3122
+ const pub = await getPublicKeyAsync(seed);
3123
+ const secret = new Uint8Array(64);
3124
+ secret.set(seed, 0);
3125
+ secret.set(pub, 32);
3126
+ const publicKey = ensureEd25519Prefix(esm_default.encode(pub));
3127
+ const privateKey = ensureEd25519Prefix(esm_default.encode(secret));
3128
+ return {
3129
+ publicKey,
3130
+ privateKey
3131
+ };
3132
+ }
3133
+ var NEAR_ED25519_KEY_PREFIX;
3134
+ var init_nearCrypto = __esm({ "src/core/nearCrypto.ts": (() => {
3135
+ init_ed25519();
3136
+ NEAR_ED25519_KEY_PREFIX = "ed25519:";
3137
+ }) });
3138
+
2670
3139
  //#endregion
2671
3140
  //#region src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.ts
2672
3141
  init_credentialsHelpers();
2673
3142
  init_validation();
3143
+ init_nearCrypto();
2674
3144
  function validateTransactionContextMaybe(input) {
2675
3145
  if (input == null) return void 0;
2676
3146
  if (!isObject(input)) throw new Error("Invalid transactionContext: expected object");
@@ -2731,9 +3201,6 @@ function parseAndValidateRegistrationCredentialConfirmationPayload(payload) {
2731
3201
  error: normalizedError
2732
3202
  };
2733
3203
  }
2734
- const ensureEd25519Prefix = (value) => {
2735
- return value.startsWith("ed25519:") ? value : `ed25519:${value}`;
2736
- };
2737
3204
  const toPublicKeyString = (pk) => {
2738
3205
  if (typeof pk === "string") return pk;
2739
3206
  return ensureEd25519Prefix(base58Encode(pk.keyData));
@@ -3300,14 +3767,14 @@ const HANDLERS = {
3300
3767
  });
3301
3768
  },
3302
3769
  [SecureConfirmationType.SIGN_TRANSACTION]: async ({ ctx, request, worker, confirmationConfig, transactionSummary }) => {
3303
- const { handleTransactionSigningFlow } = await importFlow("transactions", () => import("./transactions-BalIhtJ9.js"));
3770
+ const { handleTransactionSigningFlow } = await importFlow("transactions", () => import("./transactions-DfdwDQCn.js"));
3304
3771
  await handleTransactionSigningFlow(ctx, request, worker, {
3305
3772
  confirmationConfig,
3306
3773
  transactionSummary
3307
3774
  });
3308
3775
  },
3309
3776
  [SecureConfirmationType.SIGN_NEP413_MESSAGE]: async ({ ctx, request, worker, confirmationConfig, transactionSummary }) => {
3310
- const { handleTransactionSigningFlow } = await importFlow("transactions", () => import("./transactions-BalIhtJ9.js"));
3777
+ const { handleTransactionSigningFlow } = await importFlow("transactions", () => import("./transactions-DfdwDQCn.js"));
3311
3778
  await handleTransactionSigningFlow(ctx, request, worker, {
3312
3779
  confirmationConfig,
3313
3780
  transactionSummary
@@ -8409,504 +8876,6 @@ var ChainsigAddressManager = class {
8409
8876
  };
8410
8877
  const chainsigAddressManager = new ChainsigAddressManager();
8411
8878
 
8412
- //#endregion
8413
- //#region ../node_modules/.pnpm/@noble+ed25519@2.3.0/node_modules/@noble/ed25519/index.js
8414
- /*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */
8415
- /**
8416
- * 4KB JS implementation of ed25519 EdDSA signatures.
8417
- * Compliant with RFC8032, FIPS 186-5 & ZIP215.
8418
- * @module
8419
- * @example
8420
- * ```js
8421
- import * as ed from '@noble/ed25519';
8422
- (async () => {
8423
- const privKey = ed.utils.randomPrivateKey();
8424
- const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);
8425
- const pubKey = await ed.getPublicKeyAsync(privKey); // Sync methods are also present
8426
- const signature = await ed.signAsync(message, privKey);
8427
- const isValid = await ed.verifyAsync(signature, message, pubKey);
8428
- })();
8429
- ```
8430
- */
8431
- /**
8432
- * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².
8433
- * * P = `2n**255n - 19n` // field over which calculations are done
8434
- * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points
8435
- * * h = 8 // cofactor
8436
- * * a = `Fp.create(BigInt(-1))` // equation param
8437
- * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param
8438
- * * Gx, Gy are coordinates of Generator / base point
8439
- */
8440
- const ed25519_CURVE = {
8441
- p: 57896044618658097711785492504343953926634992332820282019728792003956564819949n,
8442
- n: 7237005577332262213973186563042994240857116359379907606001950938285454250989n,
8443
- h: 8n,
8444
- a: 57896044618658097711785492504343953926634992332820282019728792003956564819948n,
8445
- d: 37095705934669439343138083508754565189542113879843219016388785533085940283555n,
8446
- Gx: 15112221349535400772501151409588531511454012693041857206046113283949847762202n,
8447
- Gy: 46316835694926478169428394003475163141307993866256225615783033603165251855960n
8448
- };
8449
- const { p: P, n: N, Gx, Gy, a: _a, d: _d } = ed25519_CURVE;
8450
- const h = 8n;
8451
- const L = 32;
8452
- const L2 = 64;
8453
- const err = (m = "") => {
8454
- throw new Error(m);
8455
- };
8456
- const isBig = (n) => typeof n === "bigint";
8457
- const isStr = (s) => typeof s === "string";
8458
- const isBytes = (a) => a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
8459
- /** assert is Uint8Array (of specific length) */
8460
- const abytes = (a, l) => !isBytes(a) || typeof l === "number" && l > 0 && a.length !== l ? err("Uint8Array expected") : a;
8461
- /** create Uint8Array */
8462
- const u8n = (len) => new Uint8Array(len);
8463
- const u8fr = (buf) => Uint8Array.from(buf);
8464
- const padh = (n, pad) => n.toString(16).padStart(pad, "0");
8465
- const bytesToHex$1 = (b) => Array.from(abytes(b)).map((e) => padh(e, 2)).join("");
8466
- const C = {
8467
- _0: 48,
8468
- _9: 57,
8469
- A: 65,
8470
- F: 70,
8471
- a: 97,
8472
- f: 102
8473
- };
8474
- const _ch = (ch) => {
8475
- if (ch >= C._0 && ch <= C._9) return ch - C._0;
8476
- if (ch >= C.A && ch <= C.F) return ch - (C.A - 10);
8477
- if (ch >= C.a && ch <= C.f) return ch - (C.a - 10);
8478
- };
8479
- const hexToBytes = (hex) => {
8480
- const e = "hex invalid";
8481
- if (!isStr(hex)) return err(e);
8482
- const hl = hex.length;
8483
- const al = hl / 2;
8484
- if (hl % 2) return err(e);
8485
- const array = u8n(al);
8486
- for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {
8487
- const n1 = _ch(hex.charCodeAt(hi));
8488
- const n2 = _ch(hex.charCodeAt(hi + 1));
8489
- if (n1 === void 0 || n2 === void 0) return err(e);
8490
- array[ai] = n1 * 16 + n2;
8491
- }
8492
- return array;
8493
- };
8494
- /** normalize hex or ui8a to ui8a */
8495
- const toU8 = (a, len) => abytes(isStr(a) ? hexToBytes(a) : u8fr(abytes(a)), len);
8496
- const cr = () => globalThis?.crypto;
8497
- const subtle = () => cr()?.subtle ?? err("crypto.subtle must be defined");
8498
- const concatBytes = (...arrs) => {
8499
- const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0));
8500
- let pad = 0;
8501
- arrs.forEach((a) => {
8502
- r.set(a, pad);
8503
- pad += a.length;
8504
- });
8505
- return r;
8506
- };
8507
- /** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */
8508
- const randomBytes = (len = L) => {
8509
- const c = cr();
8510
- return c.getRandomValues(u8n(len));
8511
- };
8512
- const big = BigInt;
8513
- const arange = (n, min, max, msg = "bad number: out of range") => isBig(n) && min <= n && n < max ? n : err(msg);
8514
- /** modular division */
8515
- const M = (a, b = P) => {
8516
- const r = a % b;
8517
- return r >= 0n ? r : b + r;
8518
- };
8519
- const modN = (a) => M(a, N);
8520
- /** Modular inversion using eucledian GCD (non-CT). No negative exponent for now. */
8521
- const invert = (num, md) => {
8522
- if (num === 0n || md <= 0n) err("no inverse n=" + num + " mod=" + md);
8523
- let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;
8524
- while (a !== 0n) {
8525
- const q = b / a, r = b % a;
8526
- const m = x - u * q, n = y - v * q;
8527
- b = a, a = r, x = u, y = v, u = m, v = n;
8528
- }
8529
- return b === 1n ? M(x, md) : err("no inverse");
8530
- };
8531
- const callHash = (name) => {
8532
- const fn = etc[name];
8533
- if (typeof fn !== "function") err("hashes." + name + " not set");
8534
- return fn;
8535
- };
8536
- const apoint = (p) => p instanceof Point ? p : err("Point expected");
8537
- const B256 = 2n ** 256n;
8538
- /** Point in XYZT extended coordinates. */
8539
- var Point = class Point {
8540
- static BASE;
8541
- static ZERO;
8542
- ex;
8543
- ey;
8544
- ez;
8545
- et;
8546
- constructor(ex, ey, ez, et) {
8547
- const max = B256;
8548
- this.ex = arange(ex, 0n, max);
8549
- this.ey = arange(ey, 0n, max);
8550
- this.ez = arange(ez, 1n, max);
8551
- this.et = arange(et, 0n, max);
8552
- Object.freeze(this);
8553
- }
8554
- static fromAffine(p) {
8555
- return new Point(p.x, p.y, 1n, M(p.x * p.y));
8556
- }
8557
- /** RFC8032 5.1.3: Uint8Array to Point. */
8558
- static fromBytes(hex, zip215 = false) {
8559
- const d = _d;
8560
- const normed = u8fr(abytes(hex, L));
8561
- const lastByte = hex[31];
8562
- normed[31] = lastByte & -129;
8563
- const y = bytesToNumLE(normed);
8564
- const max = zip215 ? B256 : P;
8565
- arange(y, 0n, max);
8566
- const y2 = M(y * y);
8567
- const u = M(y2 - 1n);
8568
- const v = M(d * y2 + 1n);
8569
- let { isValid, value: x } = uvRatio(u, v);
8570
- if (!isValid) err("bad point: y not sqrt");
8571
- const isXOdd = (x & 1n) === 1n;
8572
- const isLastByteOdd = (lastByte & 128) !== 0;
8573
- if (!zip215 && x === 0n && isLastByteOdd) err("bad point: x==0, isLastByteOdd");
8574
- if (isLastByteOdd !== isXOdd) x = M(-x);
8575
- return new Point(x, y, 1n, M(x * y));
8576
- }
8577
- /** Checks if the point is valid and on-curve. */
8578
- assertValidity() {
8579
- const a = _a;
8580
- const d = _d;
8581
- const p = this;
8582
- if (p.is0()) throw new Error("bad point: ZERO");
8583
- const { ex: X, ey: Y, ez: Z, et: T } = p;
8584
- const X2 = M(X * X);
8585
- const Y2 = M(Y * Y);
8586
- const Z2 = M(Z * Z);
8587
- const Z4 = M(Z2 * Z2);
8588
- const aX2 = M(X2 * a);
8589
- const left = M(Z2 * M(aX2 + Y2));
8590
- const right = M(Z4 + M(d * M(X2 * Y2)));
8591
- if (left !== right) throw new Error("bad point: equation left != right (1)");
8592
- const XY = M(X * Y);
8593
- const ZT = M(Z * T);
8594
- if (XY !== ZT) throw new Error("bad point: equation left != right (2)");
8595
- return this;
8596
- }
8597
- /** Equality check: compare points P&Q. */
8598
- equals(other) {
8599
- const { ex: X1, ey: Y1, ez: Z1 } = this;
8600
- const { ex: X2, ey: Y2, ez: Z2 } = apoint(other);
8601
- const X1Z2 = M(X1 * Z2);
8602
- const X2Z1 = M(X2 * Z1);
8603
- const Y1Z2 = M(Y1 * Z2);
8604
- const Y2Z1 = M(Y2 * Z1);
8605
- return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;
8606
- }
8607
- is0() {
8608
- return this.equals(I);
8609
- }
8610
- /** Flip point over y coordinate. */
8611
- negate() {
8612
- return new Point(M(-this.ex), this.ey, this.ez, M(-this.et));
8613
- }
8614
- /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */
8615
- double() {
8616
- const { ex: X1, ey: Y1, ez: Z1 } = this;
8617
- const a = _a;
8618
- const A = M(X1 * X1);
8619
- const B = M(Y1 * Y1);
8620
- const C$1 = M(2n * M(Z1 * Z1));
8621
- const D = M(a * A);
8622
- const x1y1 = X1 + Y1;
8623
- const E = M(M(x1y1 * x1y1) - A - B);
8624
- const G$1 = D + B;
8625
- const F = G$1 - C$1;
8626
- const H = D - B;
8627
- const X3 = M(E * F);
8628
- const Y3 = M(G$1 * H);
8629
- const T3 = M(E * H);
8630
- const Z3 = M(F * G$1);
8631
- return new Point(X3, Y3, Z3, T3);
8632
- }
8633
- /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */
8634
- add(other) {
8635
- const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;
8636
- const { ex: X2, ey: Y2, ez: Z2, et: T2 } = apoint(other);
8637
- const a = _a;
8638
- const d = _d;
8639
- const A = M(X1 * X2);
8640
- const B = M(Y1 * Y2);
8641
- const C$1 = M(T1 * d * T2);
8642
- const D = M(Z1 * Z2);
8643
- const E = M((X1 + Y1) * (X2 + Y2) - A - B);
8644
- const F = M(D - C$1);
8645
- const G$1 = M(D + C$1);
8646
- const H = M(B - a * A);
8647
- const X3 = M(E * F);
8648
- const Y3 = M(G$1 * H);
8649
- const T3 = M(E * H);
8650
- const Z3 = M(F * G$1);
8651
- return new Point(X3, Y3, Z3, T3);
8652
- }
8653
- /**
8654
- * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.
8655
- * Uses {@link wNAF} for base point.
8656
- * Uses fake point to mitigate side-channel leakage.
8657
- * @param n scalar by which point is multiplied
8658
- * @param safe safe mode guards against timing attacks; unsafe mode is faster
8659
- */
8660
- multiply(n, safe = true) {
8661
- if (!safe && (n === 0n || this.is0())) return I;
8662
- arange(n, 1n, N);
8663
- if (n === 1n) return this;
8664
- if (this.equals(G)) return wNAF(n).p;
8665
- let p = I;
8666
- let f = G;
8667
- for (let d = this; n > 0n; d = d.double(), n >>= 1n) if (n & 1n) p = p.add(d);
8668
- else if (safe) f = f.add(d);
8669
- return p;
8670
- }
8671
- /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */
8672
- toAffine() {
8673
- const { ex: x, ey: y, ez: z } = this;
8674
- if (this.equals(I)) return {
8675
- x: 0n,
8676
- y: 1n
8677
- };
8678
- const iz = invert(z, P);
8679
- if (M(z * iz) !== 1n) err("invalid inverse");
8680
- return {
8681
- x: M(x * iz),
8682
- y: M(y * iz)
8683
- };
8684
- }
8685
- toBytes() {
8686
- const { x, y } = this.assertValidity().toAffine();
8687
- const b = numTo32bLE(y);
8688
- b[31] |= x & 1n ? 128 : 0;
8689
- return b;
8690
- }
8691
- toHex() {
8692
- return bytesToHex$1(this.toBytes());
8693
- }
8694
- clearCofactor() {
8695
- return this.multiply(big(h), false);
8696
- }
8697
- isSmallOrder() {
8698
- return this.clearCofactor().is0();
8699
- }
8700
- isTorsionFree() {
8701
- let p = this.multiply(N / 2n, false).double();
8702
- if (N % 2n) p = p.add(this);
8703
- return p.is0();
8704
- }
8705
- static fromHex(hex, zip215) {
8706
- return Point.fromBytes(toU8(hex), zip215);
8707
- }
8708
- get x() {
8709
- return this.toAffine().x;
8710
- }
8711
- get y() {
8712
- return this.toAffine().y;
8713
- }
8714
- toRawBytes() {
8715
- return this.toBytes();
8716
- }
8717
- };
8718
- /** Generator / base point */
8719
- const G = new Point(Gx, Gy, 1n, M(Gx * Gy));
8720
- /** Identity / zero point */
8721
- const I = new Point(0n, 1n, 1n, 0n);
8722
- Point.BASE = G;
8723
- Point.ZERO = I;
8724
- const numTo32bLE = (num) => hexToBytes(padh(arange(num, 0n, B256), L2)).reverse();
8725
- const bytesToNumLE = (b) => big("0x" + bytesToHex$1(u8fr(abytes(b)).reverse()));
8726
- const pow2 = (x, power) => {
8727
- let r = x;
8728
- while (power-- > 0n) {
8729
- r *= r;
8730
- r %= P;
8731
- }
8732
- return r;
8733
- };
8734
- const pow_2_252_3 = (x) => {
8735
- const x2 = x * x % P;
8736
- const b2 = x2 * x % P;
8737
- const b4 = pow2(b2, 2n) * b2 % P;
8738
- const b5 = pow2(b4, 1n) * x % P;
8739
- const b10 = pow2(b5, 5n) * b5 % P;
8740
- const b20 = pow2(b10, 10n) * b10 % P;
8741
- const b40 = pow2(b20, 20n) * b20 % P;
8742
- const b80 = pow2(b40, 40n) * b40 % P;
8743
- const b160 = pow2(b80, 80n) * b80 % P;
8744
- const b240 = pow2(b160, 80n) * b80 % P;
8745
- const b250 = pow2(b240, 10n) * b10 % P;
8746
- const pow_p_5_8 = pow2(b250, 2n) * x % P;
8747
- return {
8748
- pow_p_5_8,
8749
- b2
8750
- };
8751
- };
8752
- const RM1 = 19681161376707505956807079304988542015446066515923890162744021073123829784752n;
8753
- const uvRatio = (u, v) => {
8754
- const v3 = M(v * v * v);
8755
- const v7 = M(v3 * v3 * v);
8756
- const pow = pow_2_252_3(u * v7).pow_p_5_8;
8757
- let x = M(u * v3 * pow);
8758
- const vx2 = M(v * x * x);
8759
- const root1 = x;
8760
- const root2 = M(x * RM1);
8761
- const useRoot1 = vx2 === u;
8762
- const useRoot2 = vx2 === M(-u);
8763
- const noRoot = vx2 === M(-u * RM1);
8764
- if (useRoot1) x = root1;
8765
- if (useRoot2 || noRoot) x = root2;
8766
- if ((M(x) & 1n) === 1n) x = M(-x);
8767
- return {
8768
- isValid: useRoot1 || useRoot2,
8769
- value: x
8770
- };
8771
- };
8772
- const modL_LE = (hash) => modN(bytesToNumLE(hash));
8773
- const sha512a = (...m) => etc.sha512Async(...m);
8774
- const sha512s = (...m) => callHash("sha512Sync")(...m);
8775
- const hash2extK = (hashed) => {
8776
- const head = hashed.slice(0, L);
8777
- head[0] &= 248;
8778
- head[31] &= 127;
8779
- head[31] |= 64;
8780
- const prefix = hashed.slice(L, L2);
8781
- const scalar = modL_LE(head);
8782
- const point = G.multiply(scalar);
8783
- const pointBytes = point.toBytes();
8784
- return {
8785
- head,
8786
- prefix,
8787
- scalar,
8788
- point,
8789
- pointBytes
8790
- };
8791
- };
8792
- const getExtendedPublicKeyAsync = (priv) => sha512a(toU8(priv, L)).then(hash2extK);
8793
- const getExtendedPublicKey = (priv) => hash2extK(sha512s(toU8(priv, L)));
8794
- /** Creates 32-byte ed25519 public key from 32-byte private key. Async. */
8795
- const getPublicKeyAsync = (priv) => getExtendedPublicKeyAsync(priv).then((p) => p.pointBytes);
8796
- /** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */
8797
- const etc = {
8798
- sha512Async: async (...messages) => {
8799
- const s = subtle();
8800
- const m = concatBytes(...messages);
8801
- return u8n(await s.digest("SHA-512", m.buffer));
8802
- },
8803
- sha512Sync: void 0,
8804
- bytesToHex: bytesToHex$1,
8805
- hexToBytes,
8806
- concatBytes,
8807
- mod: M,
8808
- invert,
8809
- randomBytes
8810
- };
8811
- /** ed25519-specific key utilities. */
8812
- const utils = {
8813
- getExtendedPublicKeyAsync,
8814
- getExtendedPublicKey,
8815
- randomPrivateKey: () => randomBytes(L),
8816
- precompute: (w = 8, p = G) => {
8817
- p.multiply(3n);
8818
- return p;
8819
- }
8820
- };
8821
- const W = 8;
8822
- const scalarBits = 256;
8823
- const pwindows = Math.ceil(scalarBits / W) + 1;
8824
- const pwindowSize = 2 ** (W - 1);
8825
- const precompute = () => {
8826
- const points = [];
8827
- let p = G;
8828
- let b = p;
8829
- for (let w = 0; w < pwindows; w++) {
8830
- b = p;
8831
- points.push(b);
8832
- for (let i = 1; i < pwindowSize; i++) {
8833
- b = b.add(p);
8834
- points.push(b);
8835
- }
8836
- p = b.double();
8837
- }
8838
- return points;
8839
- };
8840
- let Gpows = void 0;
8841
- const ctneg = (cnd, p) => {
8842
- const n = p.negate();
8843
- return cnd ? n : p;
8844
- };
8845
- /**
8846
- * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by
8847
- * caching multiples of G (base point). Cache is stored in 32MB of RAM.
8848
- * Any time `G.multiply` is done, precomputes are used.
8849
- * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.
8850
- *
8851
- * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,
8852
- * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.
8853
- *
8854
- * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().
8855
- */
8856
- const wNAF = (n) => {
8857
- const comp = Gpows || (Gpows = precompute());
8858
- let p = I;
8859
- let f = G;
8860
- const pow_2_w = 2 ** W;
8861
- const maxNum = pow_2_w;
8862
- const mask = big(pow_2_w - 1);
8863
- const shiftBy = big(W);
8864
- for (let w = 0; w < pwindows; w++) {
8865
- let wbits = Number(n & mask);
8866
- n >>= shiftBy;
8867
- if (wbits > pwindowSize) {
8868
- wbits -= maxNum;
8869
- n += 1n;
8870
- }
8871
- const off = w * pwindowSize;
8872
- const offF = off;
8873
- const offP = off + Math.abs(wbits) - 1;
8874
- const isEven = w % 2 !== 0;
8875
- const isNeg = wbits < 0;
8876
- if (wbits === 0) f = f.add(ctneg(isEven, comp[offF]));
8877
- else p = p.add(ctneg(isNeg, comp[offP]));
8878
- }
8879
- return {
8880
- p,
8881
- f
8882
- };
8883
- };
8884
-
8885
- //#endregion
8886
- //#region src/core/nearCrypto.ts
8887
- const NEAR_KEY_PREFIX = "ed25519:";
8888
- function ensurePrefix(str) {
8889
- return str.startsWith(NEAR_KEY_PREFIX) ? str : `${NEAR_KEY_PREFIX}${str}`;
8890
- }
8891
- /**
8892
- * Creates a NEAR-compatible Ed25519 keypair formatted as strings:
8893
- * - publicKey: 'ed25519:' + base58(pub)
8894
- * - privateKey: 'ed25519:' + base58(seed(32) | pub(32))
8895
- */
8896
- async function createNearKeypair() {
8897
- const seed = utils.randomPrivateKey();
8898
- const pub = await getPublicKeyAsync(seed);
8899
- const secret = new Uint8Array(64);
8900
- secret.set(seed, 0);
8901
- secret.set(pub, 32);
8902
- const publicKey = ensurePrefix(esm_default.encode(pub));
8903
- const privateKey = ensurePrefix(esm_default.encode(secret));
8904
- return {
8905
- publicKey,
8906
- privateKey
8907
- };
8908
- }
8909
-
8910
8879
  //#endregion
8911
8880
  //#region src/core/types/linkDevice.ts
8912
8881
  var DeviceLinkingError = class extends Error {
@@ -8928,6 +8897,7 @@ let DeviceLinkingErrorCode = /* @__PURE__ */ function(DeviceLinkingErrorCode$1)
8928
8897
 
8929
8898
  //#endregion
8930
8899
  //#region src/core/TatchiPasskey/linkDevice.ts
8900
+ init_nearCrypto();
8931
8901
  init_IndexedDBManager();
8932
8902
  init_actions();
8933
8903
  init_rpcCalls();
@@ -9626,6 +9596,7 @@ init_validation$1();
9626
9596
  init_login();
9627
9597
  init_sdkSentEvents();
9628
9598
  init_rpcCalls();
9599
+ init_nearCrypto();
9629
9600
  /**
9630
9601
  * Device1 (original device): Link device using pre-scanned QR data
9631
9602
  */
@@ -9643,8 +9614,8 @@ async function linkDeviceWithScannedQRData(context, qrData, options) {
9643
9614
  if (!device1LoginState.isLoggedIn || !device1LoginState.nearAccountId) throw new Error("Device1 must be logged in to authorize device linking");
9644
9615
  const device1AccountId = device1LoginState.nearAccountId;
9645
9616
  const fundingAmount = options.fundingAmount;
9646
- const device2PublicKey = qrData.device2PublicKey;
9647
- if (!device2PublicKey.startsWith("ed25519:")) throw new Error("Invalid device public key format");
9617
+ const device2PublicKey = ensureEd25519Prefix(qrData.device2PublicKey);
9618
+ if (!device2PublicKey || !/^ed25519:/i.test(device2PublicKey)) throw new Error("Invalid device public key format");
9648
9619
  onEvent?.({
9649
9620
  step: 3,
9650
9621
  phase: DeviceLinkingPhase.STEP_3_AUTHORIZATION,
@@ -9685,7 +9656,7 @@ async function linkDeviceWithScannedQRData(context, qrData, options) {
9685
9656
  });
9686
9657
  const result = {
9687
9658
  success: true,
9688
- device2PublicKey: qrData.device2PublicKey,
9659
+ device2PublicKey,
9689
9660
  transactionId: addKeyTxResult?.transaction?.hash || storeDeviceLinkingTxResult?.transaction?.hash || "unknown",
9690
9661
  fundingAmount,
9691
9662
  linkedToAccount: device1AccountId,
@@ -10166,16 +10137,12 @@ function getEmailRecoveryConfig(configs) {
10166
10137
  const maxPollingDurationMs = Number(relayerEmailCfg.maxPollingDurationMs);
10167
10138
  const pendingTtlMs = Number(relayerEmailCfg.pendingTtlMs);
10168
10139
  const mailtoAddress = String(relayerEmailCfg.mailtoAddress);
10169
- const dkimVerifierAccountId = String(relayerEmailCfg.dkimVerifierAccountId);
10170
- const verificationViewMethod = String(relayerEmailCfg.verificationViewMethod);
10171
10140
  return {
10172
10141
  minBalanceYocto,
10173
10142
  pollingIntervalMs,
10174
10143
  maxPollingDurationMs,
10175
10144
  pendingTtlMs,
10176
- mailtoAddress,
10177
- dkimVerifierAccountId,
10178
- verificationViewMethod
10145
+ mailtoAddress
10179
10146
  };
10180
10147
  }
10181
10148
  function generateEmailRecoveryRequestId() {
@@ -10200,6 +10167,8 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
10200
10167
  init_login();
10201
10168
  init_EmailRecovery();
10202
10169
  init_emailRecovery$1();
10170
+ init_rpcCalls();
10171
+ init_nearCrypto();
10203
10172
  EmailRecoveryFlow = class {
10204
10173
  context;
10205
10174
  options;
@@ -10292,14 +10261,13 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
10292
10261
  await this.fail(1, errorMessage(err$1) || "Failed to fetch account balance for recovery");
10293
10262
  }
10294
10263
  }
10295
- async getCanonicalRecoveryEmailOrFail(recoveryEmail) {
10264
+ getCanonicalRecoveryEmail(recoveryEmail) {
10296
10265
  const canonicalEmail = String(recoveryEmail || "").trim().toLowerCase();
10297
- if (!canonicalEmail) await this.fail(1, "Recovery email is required for email-based account recovery");
10298
- return canonicalEmail;
10266
+ return canonicalEmail || void 0;
10299
10267
  }
10300
10268
  async getNextDeviceNumberFromContract(nearAccountId) {
10301
10269
  try {
10302
- const { syncAuthenticatorsContractCall: syncAuthenticatorsContractCall$1 } = await import("./rpcCalls-BQrJMTdg.js");
10270
+ const { syncAuthenticatorsContractCall: syncAuthenticatorsContractCall$1 } = await import("./rpcCalls-CYGJSCgm.js");
10303
10271
  const authenticators = await syncAuthenticatorsContractCall$1(this.context.nearClient, this.context.configs.contractId, nearAccountId);
10304
10272
  const numbers = authenticators.map(({ authenticator }) => authenticator.deviceNumber).filter((n) => typeof n === "number" && Number.isFinite(n));
10305
10273
  const max = numbers.length > 0 ? Math.max(...numbers) : 0;
@@ -10353,7 +10321,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
10353
10321
  message: "New device key created; please send the recovery email from your registered address.",
10354
10322
  data: {
10355
10323
  accountId: rec.accountId,
10356
- recoveryEmail: rec.recoveryEmail,
10324
+ ...rec.recoveryEmail ? { recoveryEmail: rec.recoveryEmail } : {},
10357
10325
  nearPublicKey: rec.nearPublicKey,
10358
10326
  requestId: rec.requestId,
10359
10327
  mailtoUrl
@@ -10369,44 +10337,57 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
10369
10337
  data
10370
10338
  });
10371
10339
  }
10372
- async checkViaDkimViewMethod(rec) {
10373
- const { dkimVerifierAccountId, verificationViewMethod } = this.getConfig();
10374
- if (!dkimVerifierAccountId) return null;
10340
+ async checkViaEmailRecovererAttempt(rec) {
10375
10341
  try {
10376
- const { getEmailRecoveryVerificationResult } = await import("./rpcCalls-BQrJMTdg.js");
10377
- const result = await getEmailRecoveryVerificationResult(this.context.nearClient, dkimVerifierAccountId, verificationViewMethod, rec.requestId);
10378
- if (!result) return {
10342
+ const attempt = await getEmailRecoveryAttempt(this.context.nearClient, rec.accountId, rec.requestId);
10343
+ if (!attempt) return {
10379
10344
  completed: false,
10380
- success: false
10345
+ success: false,
10346
+ missing: true
10381
10347
  };
10382
- if (!result.verified) {
10383
- const errorMessage$1 = result.error_message || result.error_code || "Email verification failed on relayer/contract";
10384
- return {
10348
+ if (attempt.request_id && attempt.request_id !== rec.requestId) return {
10349
+ completed: true,
10350
+ success: false,
10351
+ errorMessage: "Email recovery attempt request_id does not match requested requestId."
10352
+ };
10353
+ if (attempt.new_public_key && attempt.new_public_key !== rec.nearPublicKey) {
10354
+ const expected = ensureEd25519Prefix(rec.nearPublicKey);
10355
+ const actual = ensureEd25519Prefix(attempt.new_public_key);
10356
+ if (actual === expected) {} else return {
10385
10357
  completed: true,
10386
10358
  success: false,
10387
- errorMessage: errorMessage$1,
10388
- transactionHash: result.transaction_hash
10359
+ 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.`
10389
10360
  };
10390
10361
  }
10391
- if (result.account_id && result.account_id !== rec.accountId) return {
10362
+ const normalized = attempt.status.toLowerCase();
10363
+ if (normalized === "complete" || normalized === "completed") return {
10392
10364
  completed: true,
10393
- success: false,
10394
- errorMessage: "Email verification account_id does not match requested account.",
10395
- transactionHash: result.transaction_hash
10365
+ success: true
10396
10366
  };
10397
- if (result.new_public_key && result.new_public_key !== rec.nearPublicKey) return {
10367
+ if (normalized.includes("failed")) return {
10398
10368
  completed: true,
10399
10369
  success: false,
10400
- errorMessage: "Email verification new_public_key does not match expected recovery key.",
10401
- transactionHash: result.transaction_hash
10370
+ errorMessage: attempt.error || `Email recovery failed (${attempt.status || "unknown status"})`
10402
10371
  };
10403
10372
  return {
10404
- completed: true,
10405
- success: true,
10406
- transactionHash: result.transaction_hash
10373
+ completed: false,
10374
+ success: false
10407
10375
  };
10408
10376
  } catch (err$1) {
10409
- console.warn("[EmailRecoveryFlow] get_verification_result view failed; will retry", err$1);
10377
+ console.warn("[EmailRecoveryFlow] get_recovery_attempt view failed; will retry", err$1);
10378
+ return null;
10379
+ }
10380
+ }
10381
+ async isRecoveryAccessKeyPresent(rec) {
10382
+ try {
10383
+ await this.context.nearClient.viewAccessKey(rec.accountId, rec.nearPublicKey);
10384
+ return true;
10385
+ } catch (err$1) {
10386
+ const kind = typeof err$1?.kind === "string" ? String(err$1.kind) : "";
10387
+ const short = typeof err$1?.short === "string" ? String(err$1.short) : "";
10388
+ const msg = typeof err$1?.message === "string" ? String(err$1.message) : "";
10389
+ 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;
10390
+ console.warn("[EmailRecoveryFlow] view_access_key failed while checking recovery key; will retry", err$1);
10410
10391
  return null;
10411
10392
  }
10412
10393
  }
@@ -10515,7 +10496,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
10515
10496
  });
10516
10497
  const nearAccountId = await this.assertValidAccountIdOrFail(1, accountId);
10517
10498
  await this.assertSufficientBalance(nearAccountId);
10518
- const canonicalEmail = await this.getCanonicalRecoveryEmailOrFail(recoveryEmail);
10499
+ const canonicalEmail = this.getCanonicalRecoveryEmail(recoveryEmail);
10519
10500
  const deviceNumber = await this.getNextDeviceNumberFromContract(nearAccountId);
10520
10501
  this.phase = EmailRecoveryPhase.STEP_2_TOUCH_ID_REGISTRATION;
10521
10502
  this.emit({
@@ -10646,29 +10627,39 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
10646
10627
  await this.options?.afterCall?.(true, void 0);
10647
10628
  }
10648
10629
  async pollUntilAddKey(rec) {
10649
- const { pollingIntervalMs, maxPollingDurationMs, dkimVerifierAccountId } = this.getConfig();
10650
- if (!dkimVerifierAccountId) {
10651
- const err$2 = this.emitError(4, "Email recovery verification contract (dkimVerifierAccountId) is not configured");
10652
- await this.options?.afterCall?.(false);
10653
- throw err$2;
10654
- }
10630
+ const { pollingIntervalMs, maxPollingDurationMs } = this.getConfig();
10655
10631
  this.phase = EmailRecoveryPhase.STEP_4_POLLING_VERIFICATION_RESULT;
10656
10632
  this.pollingStartedAt = Date.now();
10633
+ let sawAttempt = false;
10657
10634
  const pollResult = await this.pollUntil({
10658
10635
  intervalMs: pollingIntervalMs,
10659
10636
  timeoutMs: maxPollingDurationMs,
10660
10637
  isCancelled: () => this.cancelled,
10661
10638
  tick: async ({ elapsedMs, pollCount }) => {
10662
- const verification = await this.checkViaDkimViewMethod(rec);
10663
- const completed = verification?.completed === true;
10664
- const success = verification?.success === true;
10639
+ const verification = await this.checkViaEmailRecovererAttempt(rec);
10640
+ if (verification && !verification.missing) sawAttempt = true;
10641
+ let completed = verification?.completed === true;
10642
+ let success = verification?.success === true;
10643
+ let errorMessage$1 = verification?.errorMessage;
10644
+ let transactionHash;
10645
+ if (verification?.missing) {
10646
+ const hasKey = await this.isRecoveryAccessKeyPresent(rec);
10647
+ if (hasKey === true) {
10648
+ completed = true;
10649
+ success = true;
10650
+ } else if (hasKey === false && sawAttempt) {
10651
+ completed = true;
10652
+ success = false;
10653
+ errorMessage$1 = "Email recovery attempt was cleared on-chain before completion. Please resend the recovery email or restart the flow.";
10654
+ } else if (hasKey === null) return { done: false };
10655
+ }
10665
10656
  this.emit({
10666
10657
  step: 4,
10667
10658
  phase: EmailRecoveryPhase.STEP_4_POLLING_VERIFICATION_RESULT,
10668
10659
  status: EmailRecoveryStatus.PROGRESS,
10669
- message: completed && success ? `Email verified for request ${rec.requestId}; finalizing registration` : `Waiting for email verification for request ${rec.requestId}`,
10660
+ message: completed && success ? `Email recovery completed for request ${rec.requestId}; finalizing registration` : `Waiting for email recovery for request ${rec.requestId}`,
10670
10661
  data: this.buildPollingEventData(rec, {
10671
- transactionHash: verification?.transactionHash,
10662
+ transactionHash,
10672
10663
  elapsedMs,
10673
10664
  pollCount
10674
10665
  })
@@ -10678,7 +10669,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
10678
10669
  done: true,
10679
10670
  value: {
10680
10671
  outcome: "failed",
10681
- errorMessage: verification?.errorMessage || "Email verification failed"
10672
+ errorMessage: errorMessage$1 || "Email recovery failed"
10682
10673
  }
10683
10674
  };
10684
10675
  return {
@@ -10797,7 +10788,7 @@ var init_emailRecovery = __esm({ "src/core/TatchiPasskey/emailRecovery.ts": (()
10797
10788
  }
10798
10789
  async syncAuthenticatorsBestEffort(accountId) {
10799
10790
  try {
10800
- const { syncAuthenticatorsContractCall: syncAuthenticatorsContractCall$1 } = await import("./rpcCalls-BQrJMTdg.js");
10791
+ const { syncAuthenticatorsContractCall: syncAuthenticatorsContractCall$1 } = await import("./rpcCalls-CYGJSCgm.js");
10801
10792
  const authenticators = await syncAuthenticatorsContractCall$1(this.context.nearClient, this.context.configs.contractId, accountId);
10802
10793
  const mappedAuthenticators = this.mapAuthenticatorsFromContract(authenticators);
10803
10794
  await IndexedDBManager.clientDB.syncAuthenticatorsFromContract(accountId, mappedAuthenticators);
@@ -11087,7 +11078,7 @@ var TatchiPasskey = class {
11087
11078
  } catch {}
11088
11079
  if (!this.iframeRouter) {
11089
11080
  if (!this.walletIframeInitInFlight) this.walletIframeInitInFlight = (async () => {
11090
- const { WalletIframeRouter } = await import("./router-DuGYOd3G.js");
11081
+ const { WalletIframeRouter } = await import("./router-BWtacLJg.js");
11091
11082
  this.iframeRouter = new WalletIframeRouter({
11092
11083
  walletOrigin,
11093
11084
  servicePath: walletIframeConfig?.walletServicePath || "/wallet-service",
@@ -12125,6 +12116,7 @@ var TatchiPasskey = class {
12125
12116
  const { accountId, recoveryEmail, options } = args;
12126
12117
  if (this.shouldUseWalletIframe()) try {
12127
12118
  const router = await this.requireWalletIframeRouter();
12119
+ const normalizedRecoveryEmail = typeof recoveryEmail === "string" && recoveryEmail.trim().length > 0 ? recoveryEmail.trim() : void 0;
12128
12120
  const confirmerText = options?.confirmerText;
12129
12121
  const confirmationConfig = options?.confirmationConfig;
12130
12122
  const safeOptions = {
@@ -12133,7 +12125,7 @@ var TatchiPasskey = class {
12133
12125
  };
12134
12126
  const res = await router.startEmailRecovery({
12135
12127
  accountId,
12136
- recoveryEmail,
12128
+ recoveryEmail: normalizedRecoveryEmail,
12137
12129
  onEvent: options?.onEvent,
12138
12130
  options: Object.keys(safeOptions).length > 0 ? safeOptions : void 0
12139
12131
  });