@hexclave/tanstack-start 1.0.41 → 1.0.42

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 (1120) hide show
  1. package/dist/account-settings-cTsj8rpJ.d.ts +56 -0
  2. package/dist/account-settings-cTsj8rpJ.d.ts.map +1 -0
  3. package/dist/admin-app-impl-VGzSheih.d.ts +1282 -0
  4. package/dist/admin-app-impl-VGzSheih.d.ts.map +1 -0
  5. package/dist/auth-page-YnM_LtbN.d.ts +24 -0
  6. package/dist/auth-page-YnM_LtbN.d.ts.map +1 -0
  7. package/dist/cli-auth-confirm-BW3PYpKb.d.ts +19 -0
  8. package/dist/cli-auth-confirm-BW3PYpKb.d.ts.map +1 -0
  9. package/dist/clickmap/clickmap-core.d.ts +1 -2
  10. package/dist/clickmap/clickmap-core.d.ts.map +1 -1
  11. package/dist/clickmap/clickmap-core.js +2 -4
  12. package/dist/clickmap/clickmap-core.js.map +1 -1
  13. package/dist/clickmap/clickmap-styles.js +3 -6
  14. package/dist/clickmap/clickmap-styles.js.map +1 -1
  15. package/dist/clickmap/index.d.ts +1 -2
  16. package/dist/clickmap/index.d.ts.map +1 -1
  17. package/dist/clickmap/index.js +2 -4
  18. package/dist/clickmap/index.js.map +1 -1
  19. package/dist/client-app-CufTd2az.d.ts +1359 -0
  20. package/dist/client-app-CufTd2az.d.ts.map +1 -0
  21. package/dist/common-B3bYYs1i.d.ts +183 -0
  22. package/dist/common-B3bYYs1i.d.ts.map +1 -0
  23. package/dist/common-GgzuBlz0.d.ts +66 -0
  24. package/dist/common-GgzuBlz0.d.ts.map +1 -0
  25. package/dist/components/api-key-dialogs.d.ts +3 -4
  26. package/dist/components/api-key-dialogs.d.ts.map +1 -1
  27. package/dist/components/api-key-dialogs.js +3 -6
  28. package/dist/components/api-key-dialogs.js.map +1 -1
  29. package/dist/components/api-key-table.d.ts +2 -3
  30. package/dist/components/api-key-table.d.ts.map +1 -1
  31. package/dist/components/api-key-table.js +3 -6
  32. package/dist/components/api-key-table.js.map +1 -1
  33. package/dist/components/credential-sign-in.d.ts +2 -7
  34. package/dist/components/credential-sign-in.js +3 -6
  35. package/dist/components/credential-sign-in.js.map +1 -1
  36. package/dist/components/credential-sign-up.d.ts +2 -9
  37. package/dist/components/credential-sign-up.js +6 -8
  38. package/dist/components/credential-sign-up.js.map +1 -1
  39. package/dist/components/elements/form-warning.d.ts +1 -3
  40. package/dist/components/elements/form-warning.d.ts.map +1 -1
  41. package/dist/components/elements/form-warning.js +3 -6
  42. package/dist/components/elements/form-warning.js.map +1 -1
  43. package/dist/components/elements/maybe-full-page.d.ts +1 -2
  44. package/dist/components/elements/maybe-full-page.d.ts.map +1 -1
  45. package/dist/components/elements/maybe-full-page.js +4 -6
  46. package/dist/components/elements/maybe-full-page.js.map +1 -1
  47. package/dist/components/elements/separator-with-text.d.ts +1 -3
  48. package/dist/components/elements/separator-with-text.d.ts.map +1 -1
  49. package/dist/components/elements/separator-with-text.js +3 -6
  50. package/dist/components/elements/separator-with-text.js.map +1 -1
  51. package/dist/components/elements/sidebar-layout.d.ts +1 -2
  52. package/dist/components/elements/sidebar-layout.d.ts.map +1 -1
  53. package/dist/components/elements/sidebar-layout.js +5 -7
  54. package/dist/components/elements/sidebar-layout.js.map +1 -1
  55. package/dist/components/elements/ssr-layout-effect.d.ts +1 -3
  56. package/dist/components/elements/ssr-layout-effect.d.ts.map +1 -1
  57. package/dist/components/elements/ssr-layout-effect.js +2 -5
  58. package/dist/components/elements/ssr-layout-effect.js.map +1 -1
  59. package/dist/components/elements/user-avatar.d.ts +2 -15
  60. package/dist/components/elements/user-avatar.js +2 -4
  61. package/dist/components/elements/user-avatar.js.map +1 -1
  62. package/dist/components/link.d.ts +2 -4
  63. package/dist/components/link.d.ts.map +1 -1
  64. package/dist/components/link.js +3 -6
  65. package/dist/components/link.js.map +1 -1
  66. package/dist/components/magic-link-sign-in.d.ts +2 -7
  67. package/dist/components/magic-link-sign-in.js +3 -6
  68. package/dist/components/magic-link-sign-in.js.map +1 -1
  69. package/dist/components/message-cards/known-error-message-card.d.ts +1 -2
  70. package/dist/components/message-cards/known-error-message-card.d.ts.map +1 -1
  71. package/dist/components/message-cards/known-error-message-card.js +2 -5
  72. package/dist/components/message-cards/known-error-message-card.js.map +1 -1
  73. package/dist/components/message-cards/message-card.d.ts +2 -19
  74. package/dist/components/message-cards/message-card.js +5 -7
  75. package/dist/components/message-cards/message-card.js.map +1 -1
  76. package/dist/components/message-cards/predefined-message-card.d.ts +1 -3
  77. package/dist/components/message-cards/predefined-message-card.d.ts.map +1 -1
  78. package/dist/components/message-cards/predefined-message-card.js +2 -5
  79. package/dist/components/message-cards/predefined-message-card.js.map +1 -1
  80. package/dist/components/oauth-button-group.d.ts +2 -19
  81. package/dist/components/oauth-button-group.js +3 -6
  82. package/dist/components/oauth-button-group.js.map +1 -1
  83. package/dist/components/oauth-button.d.ts +2 -17
  84. package/dist/components/oauth-button.js +5 -7
  85. package/dist/components/oauth-button.js.map +1 -1
  86. package/dist/components/passkey-button.d.ts +1 -3
  87. package/dist/components/passkey-button.d.ts.map +1 -1
  88. package/dist/components/passkey-button.js +3 -6
  89. package/dist/components/passkey-button.js.map +1 -1
  90. package/dist/components/profile-image-editor.d.ts +2 -3
  91. package/dist/components/profile-image-editor.d.ts.map +1 -1
  92. package/dist/components/profile-image-editor.js +5 -6
  93. package/dist/components/profile-image-editor.js.map +1 -1
  94. package/dist/components/selected-team-switcher.d.ts +2 -31
  95. package/dist/components/selected-team-switcher.js +3 -6
  96. package/dist/components/selected-team-switcher.js.map +1 -1
  97. package/dist/components/team-icon.d.ts +2 -4
  98. package/dist/components/team-icon.d.ts.map +1 -1
  99. package/dist/components/team-icon.js +2 -4
  100. package/dist/components/team-icon.js.map +1 -1
  101. package/dist/components/team-switcher.d.ts +2 -31
  102. package/dist/components/team-switcher.js +3 -6
  103. package/dist/components/team-switcher.js.map +1 -1
  104. package/dist/components/use-in-iframe.d.ts.map +1 -1
  105. package/dist/components/use-in-iframe.js +3 -6
  106. package/dist/components/use-in-iframe.js.map +1 -1
  107. package/dist/components/user-button.d.ts +2 -22
  108. package/dist/components/user-button.js +5 -7
  109. package/dist/components/user-button.js.map +1 -1
  110. package/dist/components-page/account-settings/active-sessions/active-sessions-page.d.ts +1 -3
  111. package/dist/components-page/account-settings/active-sessions/active-sessions-page.d.ts.map +1 -1
  112. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +2 -4
  113. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  114. package/dist/components-page/account-settings/api-keys/api-keys-page.d.ts +1 -3
  115. package/dist/components-page/account-settings/api-keys/api-keys-page.d.ts.map +1 -1
  116. package/dist/components-page/account-settings/api-keys/api-keys-page.js +2 -4
  117. package/dist/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  118. package/dist/components-page/account-settings/editable-text.d.ts +1 -3
  119. package/dist/components-page/account-settings/editable-text.d.ts.map +1 -1
  120. package/dist/components-page/account-settings/editable-text.js +2 -4
  121. package/dist/components-page/account-settings/editable-text.js.map +1 -1
  122. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.d.ts +1 -3
  123. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.d.ts.map +1 -1
  124. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js +2 -4
  125. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  126. package/dist/components-page/account-settings/email-and-auth/emails-section.d.ts +1 -3
  127. package/dist/components-page/account-settings/email-and-auth/emails-section.d.ts.map +1 -1
  128. package/dist/components-page/account-settings/email-and-auth/emails-section.js +2 -4
  129. package/dist/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  130. package/dist/components-page/account-settings/email-and-auth/mfa-section.d.ts +1 -3
  131. package/dist/components-page/account-settings/email-and-auth/mfa-section.d.ts.map +1 -1
  132. package/dist/components-page/account-settings/email-and-auth/mfa-section.js +5 -6
  133. package/dist/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  134. package/dist/components-page/account-settings/email-and-auth/otp-section.d.ts +1 -3
  135. package/dist/components-page/account-settings/email-and-auth/otp-section.d.ts.map +1 -1
  136. package/dist/components-page/account-settings/email-and-auth/otp-section.js +2 -4
  137. package/dist/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  138. package/dist/components-page/account-settings/email-and-auth/passkey-section.d.ts +1 -3
  139. package/dist/components-page/account-settings/email-and-auth/passkey-section.d.ts.map +1 -1
  140. package/dist/components-page/account-settings/email-and-auth/passkey-section.js +2 -4
  141. package/dist/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  142. package/dist/components-page/account-settings/email-and-auth/password-section.d.ts +1 -3
  143. package/dist/components-page/account-settings/email-and-auth/password-section.d.ts.map +1 -1
  144. package/dist/components-page/account-settings/email-and-auth/password-section.js +4 -5
  145. package/dist/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  146. package/dist/components-page/account-settings/notifications/notifications-page.d.ts +1 -3
  147. package/dist/components-page/account-settings/notifications/notifications-page.d.ts.map +1 -1
  148. package/dist/components-page/account-settings/notifications/notifications-page.js +2 -4
  149. package/dist/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  150. package/dist/components-page/account-settings/page-layout.d.ts +1 -3
  151. package/dist/components-page/account-settings/page-layout.d.ts.map +1 -1
  152. package/dist/components-page/account-settings/page-layout.js +2 -4
  153. package/dist/components-page/account-settings/page-layout.js.map +1 -1
  154. package/dist/components-page/account-settings/payments/payments-page.d.ts +2 -4
  155. package/dist/components-page/account-settings/payments/payments-page.d.ts.map +1 -1
  156. package/dist/components-page/account-settings/payments/payments-page.js +3 -6
  157. package/dist/components-page/account-settings/payments/payments-page.js.map +1 -1
  158. package/dist/components-page/account-settings/payments/payments-panel.d.ts +2 -3
  159. package/dist/components-page/account-settings/payments/payments-panel.d.ts.map +1 -1
  160. package/dist/components-page/account-settings/payments/payments-panel.js +3 -6
  161. package/dist/components-page/account-settings/payments/payments-panel.js.map +1 -1
  162. package/dist/components-page/account-settings/profile-page/profile-page.d.ts +1 -3
  163. package/dist/components-page/account-settings/profile-page/profile-page.d.ts.map +1 -1
  164. package/dist/components-page/account-settings/profile-page/profile-page.js +2 -4
  165. package/dist/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  166. package/dist/components-page/account-settings/section.d.ts +1 -3
  167. package/dist/components-page/account-settings/section.d.ts.map +1 -1
  168. package/dist/components-page/account-settings/section.js +2 -4
  169. package/dist/components-page/account-settings/section.js.map +1 -1
  170. package/dist/components-page/account-settings/settings/delete-account-section.d.ts +1 -3
  171. package/dist/components-page/account-settings/settings/delete-account-section.d.ts.map +1 -1
  172. package/dist/components-page/account-settings/settings/delete-account-section.js +2 -4
  173. package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  174. package/dist/components-page/account-settings/settings/settings-page.d.ts +1 -3
  175. package/dist/components-page/account-settings/settings/settings-page.d.ts.map +1 -1
  176. package/dist/components-page/account-settings/settings/settings-page.js +2 -4
  177. package/dist/components-page/account-settings/settings/settings-page.js.map +1 -1
  178. package/dist/components-page/account-settings/settings/sign-out-section.d.ts +1 -3
  179. package/dist/components-page/account-settings/settings/sign-out-section.d.ts.map +1 -1
  180. package/dist/components-page/account-settings/settings/sign-out-section.js +2 -4
  181. package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  182. package/dist/components-page/account-settings/teams/leave-team-section.d.ts +2 -4
  183. package/dist/components-page/account-settings/teams/leave-team-section.d.ts.map +1 -1
  184. package/dist/components-page/account-settings/teams/leave-team-section.js +2 -4
  185. package/dist/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  186. package/dist/components-page/account-settings/teams/team-api-keys-section.d.ts +2 -3
  187. package/dist/components-page/account-settings/teams/team-api-keys-section.d.ts.map +1 -1
  188. package/dist/components-page/account-settings/teams/team-api-keys-section.js +3 -5
  189. package/dist/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  190. package/dist/components-page/account-settings/teams/team-creation-page.d.ts +1 -3
  191. package/dist/components-page/account-settings/teams/team-creation-page.d.ts.map +1 -1
  192. package/dist/components-page/account-settings/teams/team-creation-page.js +2 -4
  193. package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  194. package/dist/components-page/account-settings/teams/team-display-name-section.d.ts +2 -4
  195. package/dist/components-page/account-settings/teams/team-display-name-section.d.ts.map +1 -1
  196. package/dist/components-page/account-settings/teams/team-display-name-section.js +2 -4
  197. package/dist/components-page/account-settings/teams/team-display-name-section.js.map +1 -1
  198. package/dist/components-page/account-settings/teams/team-member-invitation-section.d.ts +2 -4
  199. package/dist/components-page/account-settings/teams/team-member-invitation-section.d.ts.map +1 -1
  200. package/dist/components-page/account-settings/teams/team-member-invitation-section.js +2 -4
  201. package/dist/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  202. package/dist/components-page/account-settings/teams/team-member-list-section.d.ts +2 -4
  203. package/dist/components-page/account-settings/teams/team-member-list-section.d.ts.map +1 -1
  204. package/dist/components-page/account-settings/teams/team-member-list-section.js +2 -4
  205. package/dist/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  206. package/dist/components-page/account-settings/teams/team-page.d.ts +2 -4
  207. package/dist/components-page/account-settings/teams/team-page.d.ts.map +1 -1
  208. package/dist/components-page/account-settings/teams/team-page.js +2 -4
  209. package/dist/components-page/account-settings/teams/team-page.js.map +1 -1
  210. package/dist/components-page/account-settings/teams/team-profile-image-section.d.ts +2 -4
  211. package/dist/components-page/account-settings/teams/team-profile-image-section.d.ts.map +1 -1
  212. package/dist/components-page/account-settings/teams/team-profile-image-section.js +2 -4
  213. package/dist/components-page/account-settings/teams/team-profile-image-section.js.map +1 -1
  214. package/dist/components-page/account-settings/teams/team-profile-user-section.d.ts +2 -4
  215. package/dist/components-page/account-settings/teams/team-profile-user-section.d.ts.map +1 -1
  216. package/dist/components-page/account-settings/teams/team-profile-user-section.js +2 -4
  217. package/dist/components-page/account-settings/teams/team-profile-user-section.js.map +1 -1
  218. package/dist/components-page/account-settings.d.ts +2 -58
  219. package/dist/components-page/account-settings.js +5 -7
  220. package/dist/components-page/account-settings.js.map +1 -1
  221. package/dist/components-page/auth-page.d.ts +2 -26
  222. package/dist/components-page/auth-page.js +3 -6
  223. package/dist/components-page/auth-page.js.map +1 -1
  224. package/dist/components-page/cli-auth-confirm.d.ts +2 -21
  225. package/dist/components-page/cli-auth-confirm.js +3 -6
  226. package/dist/components-page/cli-auth-confirm.js.map +1 -1
  227. package/dist/components-page/cli-auth-confirm.test.js +3 -4
  228. package/dist/components-page/cli-auth-confirm.test.js.map +1 -1
  229. package/dist/components-page/email-verification.d.ts +2 -10
  230. package/dist/components-page/email-verification.js +5 -7
  231. package/dist/components-page/email-verification.js.map +1 -1
  232. package/dist/components-page/error-page.d.ts +2 -10
  233. package/dist/components-page/error-page.js +3 -6
  234. package/dist/components-page/error-page.js.map +1 -1
  235. package/dist/components-page/forgot-password.d.ts +2 -14
  236. package/dist/components-page/forgot-password.js +3 -6
  237. package/dist/components-page/forgot-password.js.map +1 -1
  238. package/dist/components-page/hexclave-handler-client.d.ts +2 -62
  239. package/dist/components-page/hexclave-handler-client.js +2 -5
  240. package/dist/components-page/hexclave-handler-client.js.map +1 -1
  241. package/dist/components-page/hexclave-handler-client.test.js +1 -3
  242. package/dist/components-page/hexclave-handler-client.test.js.map +1 -1
  243. package/dist/components-page/hexclave-handler.d.ts +2 -37
  244. package/dist/components-page/hexclave-handler.js +5 -4
  245. package/dist/components-page/hexclave-handler.js.map +1 -1
  246. package/dist/components-page/magic-link-callback.d.ts +2 -10
  247. package/dist/components-page/magic-link-callback.js +6 -9
  248. package/dist/components-page/magic-link-callback.js.map +1 -1
  249. package/dist/components-page/mfa.d.ts +2 -11
  250. package/dist/components-page/mfa.js +2 -5
  251. package/dist/components-page/mfa.js.map +1 -1
  252. package/dist/components-page/oauth-callback.d.ts +2 -11
  253. package/dist/components-page/oauth-callback.js +3 -6
  254. package/dist/components-page/oauth-callback.js.map +1 -1
  255. package/dist/components-page/oauth-callback.test.js +3 -4
  256. package/dist/components-page/oauth-callback.test.js.map +1 -1
  257. package/dist/components-page/onboarding.d.ts +2 -9
  258. package/dist/components-page/onboarding.js +3 -6
  259. package/dist/components-page/onboarding.js.map +1 -1
  260. package/dist/components-page/password-reset.d.ts +2 -17
  261. package/dist/components-page/password-reset.js +8 -7
  262. package/dist/components-page/password-reset.js.map +1 -1
  263. package/dist/components-page/section.js +2 -2
  264. package/dist/components-page/sign-in.d.ts +2 -23
  265. package/dist/components-page/sign-in.js +2 -4
  266. package/dist/components-page/sign-in.js.map +1 -1
  267. package/dist/components-page/sign-out.d.ts +2 -10
  268. package/dist/components-page/sign-out.js +3 -6
  269. package/dist/components-page/sign-out.js.map +1 -1
  270. package/dist/components-page/sign-up.d.ts +2 -13
  271. package/dist/components-page/sign-up.js +3 -6
  272. package/dist/components-page/sign-up.js.map +1 -1
  273. package/dist/components-page/team-creation.d.ts +1 -3
  274. package/dist/components-page/team-creation.d.ts.map +1 -1
  275. package/dist/components-page/team-creation.js +3 -6
  276. package/dist/components-page/team-creation.js.map +1 -1
  277. package/dist/components-page/team-invitation.d.ts +2 -13
  278. package/dist/components-page/team-invitation.js +5 -7
  279. package/dist/components-page/team-invitation.js.map +1 -1
  280. package/dist/config.js +17 -19
  281. package/dist/convex-D2mFhYyd.d.ts +13 -0
  282. package/dist/convex-D2mFhYyd.d.ts.map +1 -0
  283. package/dist/cookie-DTOQvCYn.d.ts +42 -0
  284. package/dist/cookie-DTOQvCYn.d.ts.map +1 -0
  285. package/dist/credential-sign-in-BxCi9NEV.d.ts +5 -0
  286. package/dist/credential-sign-in-BxCi9NEV.d.ts.map +1 -0
  287. package/dist/credential-sign-up-tYm5rV86.d.ts +7 -0
  288. package/dist/credential-sign-up-tYm5rV86.d.ts.map +1 -0
  289. package/dist/dev-tool/dev-tool-core.d.ts +1 -2
  290. package/dist/dev-tool/dev-tool-core.d.ts.map +1 -1
  291. package/dist/dev-tool/dev-tool-core.js +2 -4
  292. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  293. package/dist/dev-tool/dev-tool-styles.js +3 -6
  294. package/dist/dev-tool/dev-tool-styles.js.map +1 -1
  295. package/dist/dev-tool/dev-tool-trigger-position.d.ts.map +1 -1
  296. package/dist/dev-tool/dev-tool-trigger-position.js +6 -7
  297. package/dist/dev-tool/dev-tool-trigger-position.js.map +1 -1
  298. package/dist/dev-tool/dev-tool-trigger-position.test.js +1 -3
  299. package/dist/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  300. package/dist/dev-tool/index.d.ts +1 -2
  301. package/dist/dev-tool/index.d.ts.map +1 -1
  302. package/dist/dev-tool/index.js +2 -4
  303. package/dist/dev-tool/index.js.map +1 -1
  304. package/dist/email-verification-Cr_KKvtQ.d.ts +8 -0
  305. package/dist/email-verification-Cr_KKvtQ.d.ts.map +1 -0
  306. package/dist/error-page-D0KwN73t.d.ts +8 -0
  307. package/dist/error-page-D0KwN73t.d.ts.map +1 -0
  308. package/dist/esm/clickmap/clickmap-core.d.ts +1 -1
  309. package/dist/esm/clickmap/clickmap-core.d.ts.map +1 -1
  310. package/dist/esm/clickmap/clickmap-core.js +1 -2
  311. package/dist/esm/clickmap/clickmap-core.js.map +1 -1
  312. package/dist/esm/clickmap/clickmap-styles.js +1 -2
  313. package/dist/esm/clickmap/clickmap-styles.js.map +1 -1
  314. package/dist/esm/clickmap/index.d.ts +1 -1
  315. package/dist/esm/clickmap/index.d.ts.map +1 -1
  316. package/dist/esm/clickmap/index.js +1 -2
  317. package/dist/esm/clickmap/index.js.map +1 -1
  318. package/dist/esm/components/api-key-dialogs.d.ts +3 -4
  319. package/dist/esm/components/api-key-dialogs.d.ts.map +1 -1
  320. package/dist/esm/components/api-key-dialogs.js +2 -4
  321. package/dist/esm/components/api-key-dialogs.js.map +1 -1
  322. package/dist/esm/components/api-key-table.d.ts +2 -3
  323. package/dist/esm/components/api-key-table.d.ts.map +1 -1
  324. package/dist/esm/components/api-key-table.js +2 -4
  325. package/dist/esm/components/api-key-table.js.map +1 -1
  326. package/dist/esm/components/credential-sign-in.d.ts +1 -3
  327. package/dist/esm/components/credential-sign-in.d.ts.map +1 -1
  328. package/dist/esm/components/credential-sign-in.js +2 -4
  329. package/dist/esm/components/credential-sign-in.js.map +1 -1
  330. package/dist/esm/components/credential-sign-up.d.ts +1 -3
  331. package/dist/esm/components/credential-sign-up.d.ts.map +1 -1
  332. package/dist/esm/components/credential-sign-up.js +3 -5
  333. package/dist/esm/components/credential-sign-up.js.map +1 -1
  334. package/dist/esm/components/elements/form-warning.d.ts +1 -3
  335. package/dist/esm/components/elements/form-warning.d.ts.map +1 -1
  336. package/dist/esm/components/elements/form-warning.js +2 -4
  337. package/dist/esm/components/elements/form-warning.js.map +1 -1
  338. package/dist/esm/components/elements/maybe-full-page.d.ts +1 -2
  339. package/dist/esm/components/elements/maybe-full-page.d.ts.map +1 -1
  340. package/dist/esm/components/elements/maybe-full-page.js +2 -4
  341. package/dist/esm/components/elements/maybe-full-page.js.map +1 -1
  342. package/dist/esm/components/elements/separator-with-text.d.ts +1 -3
  343. package/dist/esm/components/elements/separator-with-text.d.ts.map +1 -1
  344. package/dist/esm/components/elements/separator-with-text.js +2 -4
  345. package/dist/esm/components/elements/separator-with-text.js.map +1 -1
  346. package/dist/esm/components/elements/sidebar-layout.d.ts +1 -2
  347. package/dist/esm/components/elements/sidebar-layout.d.ts.map +1 -1
  348. package/dist/esm/components/elements/sidebar-layout.js +3 -5
  349. package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
  350. package/dist/esm/components/elements/ssr-layout-effect.d.ts +1 -3
  351. package/dist/esm/components/elements/ssr-layout-effect.d.ts.map +1 -1
  352. package/dist/esm/components/elements/ssr-layout-effect.js +1 -3
  353. package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -1
  354. package/dist/esm/components/elements/user-avatar.d.ts +1 -3
  355. package/dist/esm/components/elements/user-avatar.d.ts.map +1 -1
  356. package/dist/esm/components/elements/user-avatar.js +1 -2
  357. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  358. package/dist/esm/components/link.d.ts +2 -4
  359. package/dist/esm/components/link.d.ts.map +1 -1
  360. package/dist/esm/components/link.js +2 -4
  361. package/dist/esm/components/link.js.map +1 -1
  362. package/dist/esm/components/magic-link-sign-in.d.ts +1 -3
  363. package/dist/esm/components/magic-link-sign-in.d.ts.map +1 -1
  364. package/dist/esm/components/magic-link-sign-in.js +2 -4
  365. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  366. package/dist/esm/components/message-cards/known-error-message-card.d.ts +1 -2
  367. package/dist/esm/components/message-cards/known-error-message-card.d.ts.map +1 -1
  368. package/dist/esm/components/message-cards/known-error-message-card.js +1 -3
  369. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
  370. package/dist/esm/components/message-cards/message-card.d.ts +1 -2
  371. package/dist/esm/components/message-cards/message-card.d.ts.map +1 -1
  372. package/dist/esm/components/message-cards/message-card.js +3 -5
  373. package/dist/esm/components/message-cards/message-card.js.map +1 -1
  374. package/dist/esm/components/message-cards/predefined-message-card.d.ts +1 -3
  375. package/dist/esm/components/message-cards/predefined-message-card.d.ts.map +1 -1
  376. package/dist/esm/components/message-cards/predefined-message-card.js +1 -3
  377. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  378. package/dist/esm/components/oauth-button-group.d.ts +1 -3
  379. package/dist/esm/components/oauth-button-group.d.ts.map +1 -1
  380. package/dist/esm/components/oauth-button-group.js +2 -4
  381. package/dist/esm/components/oauth-button-group.js.map +1 -1
  382. package/dist/esm/components/oauth-button.d.ts +1 -3
  383. package/dist/esm/components/oauth-button.d.ts.map +1 -1
  384. package/dist/esm/components/oauth-button.js +2 -4
  385. package/dist/esm/components/oauth-button.js.map +1 -1
  386. package/dist/esm/components/passkey-button.d.ts +1 -3
  387. package/dist/esm/components/passkey-button.d.ts.map +1 -1
  388. package/dist/esm/components/passkey-button.js +2 -4
  389. package/dist/esm/components/passkey-button.js.map +1 -1
  390. package/dist/esm/components/profile-image-editor.d.ts +2 -3
  391. package/dist/esm/components/profile-image-editor.d.ts.map +1 -1
  392. package/dist/esm/components/profile-image-editor.js +1 -2
  393. package/dist/esm/components/profile-image-editor.js.map +1 -1
  394. package/dist/esm/components/selected-team-switcher.d.ts +2 -3
  395. package/dist/esm/components/selected-team-switcher.d.ts.map +1 -1
  396. package/dist/esm/components/selected-team-switcher.js +2 -4
  397. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  398. package/dist/esm/components/team-icon.d.ts +2 -3
  399. package/dist/esm/components/team-icon.d.ts.map +1 -1
  400. package/dist/esm/components/team-icon.js +1 -2
  401. package/dist/esm/components/team-icon.js.map +1 -1
  402. package/dist/esm/components/team-switcher.d.ts +2 -3
  403. package/dist/esm/components/team-switcher.d.ts.map +1 -1
  404. package/dist/esm/components/team-switcher.js +2 -4
  405. package/dist/esm/components/team-switcher.js.map +1 -1
  406. package/dist/esm/components/use-in-iframe.d.ts.map +1 -1
  407. package/dist/esm/components/use-in-iframe.js +2 -4
  408. package/dist/esm/components/use-in-iframe.js.map +1 -1
  409. package/dist/esm/components/user-button.d.ts +1 -2
  410. package/dist/esm/components/user-button.d.ts.map +1 -1
  411. package/dist/esm/components/user-button.js +3 -5
  412. package/dist/esm/components/user-button.js.map +1 -1
  413. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.d.ts +1 -3
  414. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.d.ts.map +1 -1
  415. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +1 -2
  416. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  417. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.d.ts +1 -3
  418. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.d.ts.map +1 -1
  419. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js +1 -2
  420. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  421. package/dist/esm/components-page/account-settings/editable-text.d.ts +1 -3
  422. package/dist/esm/components-page/account-settings/editable-text.d.ts.map +1 -1
  423. package/dist/esm/components-page/account-settings/editable-text.js +1 -2
  424. package/dist/esm/components-page/account-settings/editable-text.js.map +1 -1
  425. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.d.ts +1 -3
  426. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.d.ts.map +1 -1
  427. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js +1 -2
  428. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  429. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.d.ts +1 -3
  430. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.d.ts.map +1 -1
  431. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js +1 -2
  432. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  433. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.d.ts +1 -3
  434. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.d.ts.map +1 -1
  435. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js +2 -3
  436. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  437. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.d.ts +1 -3
  438. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.d.ts.map +1 -1
  439. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js +1 -2
  440. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  441. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.d.ts +1 -3
  442. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.d.ts.map +1 -1
  443. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js +1 -2
  444. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  445. package/dist/esm/components-page/account-settings/email-and-auth/password-section.d.ts +1 -3
  446. package/dist/esm/components-page/account-settings/email-and-auth/password-section.d.ts.map +1 -1
  447. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js +1 -2
  448. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  449. package/dist/esm/components-page/account-settings/notifications/notifications-page.d.ts +1 -3
  450. package/dist/esm/components-page/account-settings/notifications/notifications-page.d.ts.map +1 -1
  451. package/dist/esm/components-page/account-settings/notifications/notifications-page.js +1 -2
  452. package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  453. package/dist/esm/components-page/account-settings/page-layout.d.ts +1 -3
  454. package/dist/esm/components-page/account-settings/page-layout.d.ts.map +1 -1
  455. package/dist/esm/components-page/account-settings/page-layout.js +1 -2
  456. package/dist/esm/components-page/account-settings/page-layout.js.map +1 -1
  457. package/dist/esm/components-page/account-settings/payments/payments-page.d.ts +2 -3
  458. package/dist/esm/components-page/account-settings/payments/payments-page.d.ts.map +1 -1
  459. package/dist/esm/components-page/account-settings/payments/payments-page.js +2 -4
  460. package/dist/esm/components-page/account-settings/payments/payments-page.js.map +1 -1
  461. package/dist/esm/components-page/account-settings/payments/payments-panel.d.ts +2 -3
  462. package/dist/esm/components-page/account-settings/payments/payments-panel.d.ts.map +1 -1
  463. package/dist/esm/components-page/account-settings/payments/payments-panel.js +2 -4
  464. package/dist/esm/components-page/account-settings/payments/payments-panel.js.map +1 -1
  465. package/dist/esm/components-page/account-settings/profile-page/profile-page.d.ts +1 -3
  466. package/dist/esm/components-page/account-settings/profile-page/profile-page.d.ts.map +1 -1
  467. package/dist/esm/components-page/account-settings/profile-page/profile-page.js +1 -2
  468. package/dist/esm/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  469. package/dist/esm/components-page/account-settings/section.d.ts +1 -3
  470. package/dist/esm/components-page/account-settings/section.d.ts.map +1 -1
  471. package/dist/esm/components-page/account-settings/section.js +1 -2
  472. package/dist/esm/components-page/account-settings/section.js.map +1 -1
  473. package/dist/esm/components-page/account-settings/settings/delete-account-section.d.ts +1 -3
  474. package/dist/esm/components-page/account-settings/settings/delete-account-section.d.ts.map +1 -1
  475. package/dist/esm/components-page/account-settings/settings/delete-account-section.js +1 -2
  476. package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  477. package/dist/esm/components-page/account-settings/settings/settings-page.d.ts +1 -3
  478. package/dist/esm/components-page/account-settings/settings/settings-page.d.ts.map +1 -1
  479. package/dist/esm/components-page/account-settings/settings/settings-page.js +1 -2
  480. package/dist/esm/components-page/account-settings/settings/settings-page.js.map +1 -1
  481. package/dist/esm/components-page/account-settings/settings/sign-out-section.d.ts +1 -3
  482. package/dist/esm/components-page/account-settings/settings/sign-out-section.d.ts.map +1 -1
  483. package/dist/esm/components-page/account-settings/settings/sign-out-section.js +1 -2
  484. package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  485. package/dist/esm/components-page/account-settings/teams/leave-team-section.d.ts +2 -3
  486. package/dist/esm/components-page/account-settings/teams/leave-team-section.d.ts.map +1 -1
  487. package/dist/esm/components-page/account-settings/teams/leave-team-section.js +1 -2
  488. package/dist/esm/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  489. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.d.ts +2 -3
  490. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.d.ts.map +1 -1
  491. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +2 -3
  492. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  493. package/dist/esm/components-page/account-settings/teams/team-creation-page.d.ts +1 -3
  494. package/dist/esm/components-page/account-settings/teams/team-creation-page.d.ts.map +1 -1
  495. package/dist/esm/components-page/account-settings/teams/team-creation-page.js +1 -2
  496. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  497. package/dist/esm/components-page/account-settings/teams/team-display-name-section.d.ts +2 -3
  498. package/dist/esm/components-page/account-settings/teams/team-display-name-section.d.ts.map +1 -1
  499. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js +1 -2
  500. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js.map +1 -1
  501. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.d.ts +2 -3
  502. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.d.ts.map +1 -1
  503. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js +1 -2
  504. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  505. package/dist/esm/components-page/account-settings/teams/team-member-list-section.d.ts +2 -3
  506. package/dist/esm/components-page/account-settings/teams/team-member-list-section.d.ts.map +1 -1
  507. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js +1 -2
  508. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  509. package/dist/esm/components-page/account-settings/teams/team-page.d.ts +2 -3
  510. package/dist/esm/components-page/account-settings/teams/team-page.d.ts.map +1 -1
  511. package/dist/esm/components-page/account-settings/teams/team-page.js +1 -2
  512. package/dist/esm/components-page/account-settings/teams/team-page.js.map +1 -1
  513. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.d.ts +2 -3
  514. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.d.ts.map +1 -1
  515. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js +1 -2
  516. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js.map +1 -1
  517. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.d.ts +2 -3
  518. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.d.ts.map +1 -1
  519. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js +1 -2
  520. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js.map +1 -1
  521. package/dist/esm/components-page/account-settings.d.ts +9 -11
  522. package/dist/esm/components-page/account-settings.d.ts.map +1 -1
  523. package/dist/esm/components-page/account-settings.js +3 -5
  524. package/dist/esm/components-page/account-settings.js.map +1 -1
  525. package/dist/esm/components-page/auth-page.d.ts +1 -3
  526. package/dist/esm/components-page/auth-page.d.ts.map +1 -1
  527. package/dist/esm/components-page/auth-page.js +2 -4
  528. package/dist/esm/components-page/auth-page.js.map +1 -1
  529. package/dist/esm/components-page/cli-auth-confirm.d.ts +1 -3
  530. package/dist/esm/components-page/cli-auth-confirm.d.ts.map +1 -1
  531. package/dist/esm/components-page/cli-auth-confirm.js +2 -4
  532. package/dist/esm/components-page/cli-auth-confirm.js.map +1 -1
  533. package/dist/esm/components-page/cli-auth-confirm.test.js +3 -4
  534. package/dist/esm/components-page/cli-auth-confirm.test.js.map +1 -1
  535. package/dist/esm/components-page/email-verification.d.ts +1 -3
  536. package/dist/esm/components-page/email-verification.d.ts.map +1 -1
  537. package/dist/esm/components-page/email-verification.js +2 -4
  538. package/dist/esm/components-page/email-verification.js.map +1 -1
  539. package/dist/esm/components-page/error-page.d.ts +1 -3
  540. package/dist/esm/components-page/error-page.d.ts.map +1 -1
  541. package/dist/esm/components-page/error-page.js +2 -4
  542. package/dist/esm/components-page/error-page.js.map +1 -1
  543. package/dist/esm/components-page/forgot-password.d.ts +2 -4
  544. package/dist/esm/components-page/forgot-password.d.ts.map +1 -1
  545. package/dist/esm/components-page/forgot-password.js +2 -4
  546. package/dist/esm/components-page/forgot-password.js.map +1 -1
  547. package/dist/esm/components-page/hexclave-handler-client.d.ts +14 -14
  548. package/dist/esm/components-page/hexclave-handler-client.d.ts.map +1 -1
  549. package/dist/esm/components-page/hexclave-handler-client.js +1 -3
  550. package/dist/esm/components-page/hexclave-handler-client.js.map +1 -1
  551. package/dist/esm/components-page/hexclave-handler-client.test.js +2 -3
  552. package/dist/esm/components-page/hexclave-handler-client.test.js.map +1 -1
  553. package/dist/esm/components-page/hexclave-handler.d.ts +2 -3
  554. package/dist/esm/components-page/hexclave-handler.d.ts.map +1 -1
  555. package/dist/esm/components-page/hexclave-handler.js +1 -2
  556. package/dist/esm/components-page/hexclave-handler.js.map +1 -1
  557. package/dist/esm/components-page/magic-link-callback.d.ts +1 -3
  558. package/dist/esm/components-page/magic-link-callback.d.ts.map +1 -1
  559. package/dist/esm/components-page/magic-link-callback.js +2 -4
  560. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  561. package/dist/esm/components-page/mfa.d.ts +1 -3
  562. package/dist/esm/components-page/mfa.d.ts.map +1 -1
  563. package/dist/esm/components-page/mfa.js +1 -3
  564. package/dist/esm/components-page/mfa.js.map +1 -1
  565. package/dist/esm/components-page/oauth-callback.d.ts +1 -3
  566. package/dist/esm/components-page/oauth-callback.d.ts.map +1 -1
  567. package/dist/esm/components-page/oauth-callback.js +2 -4
  568. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  569. package/dist/esm/components-page/oauth-callback.test.js +3 -4
  570. package/dist/esm/components-page/oauth-callback.test.js.map +1 -1
  571. package/dist/esm/components-page/onboarding.d.ts +1 -3
  572. package/dist/esm/components-page/onboarding.d.ts.map +1 -1
  573. package/dist/esm/components-page/onboarding.js +2 -4
  574. package/dist/esm/components-page/onboarding.js.map +1 -1
  575. package/dist/esm/components-page/password-reset.d.ts +2 -4
  576. package/dist/esm/components-page/password-reset.d.ts.map +1 -1
  577. package/dist/esm/components-page/password-reset.js +2 -4
  578. package/dist/esm/components-page/password-reset.js.map +1 -1
  579. package/dist/esm/components-page/section.js +3 -4
  580. package/dist/esm/components-page/sign-in.d.ts +1 -3
  581. package/dist/esm/components-page/sign-in.d.ts.map +1 -1
  582. package/dist/esm/components-page/sign-in.js +1 -2
  583. package/dist/esm/components-page/sign-in.js.map +1 -1
  584. package/dist/esm/components-page/sign-out.d.ts +1 -3
  585. package/dist/esm/components-page/sign-out.d.ts.map +1 -1
  586. package/dist/esm/components-page/sign-out.js +2 -4
  587. package/dist/esm/components-page/sign-out.js.map +1 -1
  588. package/dist/esm/components-page/sign-up.d.ts +1 -3
  589. package/dist/esm/components-page/sign-up.d.ts.map +1 -1
  590. package/dist/esm/components-page/sign-up.js +2 -4
  591. package/dist/esm/components-page/sign-up.js.map +1 -1
  592. package/dist/esm/components-page/team-creation.d.ts +1 -3
  593. package/dist/esm/components-page/team-creation.d.ts.map +1 -1
  594. package/dist/esm/components-page/team-creation.js +2 -4
  595. package/dist/esm/components-page/team-creation.js.map +1 -1
  596. package/dist/esm/components-page/team-invitation.d.ts +1 -3
  597. package/dist/esm/components-page/team-invitation.d.ts.map +1 -1
  598. package/dist/esm/components-page/team-invitation.js +2 -4
  599. package/dist/esm/components-page/team-invitation.js.map +1 -1
  600. package/dist/esm/config.js +1 -2
  601. package/dist/esm/dev-tool/dev-tool-core.d.ts +1 -1
  602. package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -1
  603. package/dist/esm/dev-tool/dev-tool-core.js +1 -2
  604. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  605. package/dist/esm/dev-tool/dev-tool-styles.js +1 -2
  606. package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -1
  607. package/dist/esm/dev-tool/dev-tool-trigger-position.d.ts.map +1 -1
  608. package/dist/esm/dev-tool/dev-tool-trigger-position.js +5 -5
  609. package/dist/esm/dev-tool/dev-tool-trigger-position.js.map +1 -1
  610. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js +2 -3
  611. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  612. package/dist/esm/dev-tool/index.d.ts +1 -1
  613. package/dist/esm/dev-tool/index.d.ts.map +1 -1
  614. package/dist/esm/dev-tool/index.js +1 -2
  615. package/dist/esm/dev-tool/index.js.map +1 -1
  616. package/dist/esm/generated/env.js +1 -1
  617. package/dist/esm/generated/env.js.map +1 -1
  618. package/dist/esm/generated/global-css.js +1 -1
  619. package/dist/esm/generated/quetzal-translations.d.ts +2 -2
  620. package/dist/esm/generated/quetzal-translations.js +1 -2
  621. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  622. package/dist/esm/global.d.ts.map +1 -1
  623. package/dist/esm/in-page-ui/base-styles.d.ts.map +1 -1
  624. package/dist/esm/in-page-ui/base-styles.js +1 -1
  625. package/dist/esm/in-page-ui/base-styles.js.map +1 -1
  626. package/dist/esm/in-page-ui/dom.d.ts.map +1 -1
  627. package/dist/esm/in-page-ui/dom.js +1 -1
  628. package/dist/esm/in-page-ui/dom.js.map +1 -1
  629. package/dist/esm/index.d.ts +25 -25
  630. package/dist/esm/index.js +2 -4
  631. package/dist/esm/integrations/convex/component/convex.config.d.ts +1 -3
  632. package/dist/esm/integrations/convex/component/convex.config.d.ts.map +1 -1
  633. package/dist/esm/integrations/convex/component/convex.config.js +1 -2
  634. package/dist/esm/integrations/convex/component/convex.config.js.map +1 -1
  635. package/dist/esm/integrations/convex.js +1 -2
  636. package/dist/esm/integrations/convex.js.map +1 -1
  637. package/dist/esm/lib/auth.js +1 -2
  638. package/dist/esm/lib/auth.js.map +1 -1
  639. package/dist/esm/lib/auth.test.js +2 -3
  640. package/dist/esm/lib/auth.test.js.map +1 -1
  641. package/dist/esm/lib/cookie.d.ts.map +1 -1
  642. package/dist/esm/lib/cookie.js +4 -22
  643. package/dist/esm/lib/cookie.js.map +1 -1
  644. package/dist/esm/lib/hexclave-app/api-keys/index.d.ts.map +1 -1
  645. package/dist/esm/lib/hexclave-app/api-keys/index.js +1 -2
  646. package/dist/esm/lib/hexclave-app/api-keys/index.js.map +1 -1
  647. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +34 -42
  648. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  649. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js +1 -2
  650. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -1
  651. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js +2 -3
  652. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -1
  653. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +26 -28
  654. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  655. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js +1 -2
  656. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
  657. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js +2 -3
  658. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -1
  659. package/dist/esm/lib/hexclave-app/apps/implementations/common.d.ts +1 -1
  660. package/dist/esm/lib/hexclave-app/apps/implementations/common.d.ts.map +1 -1
  661. package/dist/esm/lib/hexclave-app/apps/implementations/common.js +7 -8
  662. package/dist/esm/lib/hexclave-app/apps/implementations/common.js.map +1 -1
  663. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -1
  664. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js +1 -2
  665. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -1
  666. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js +2 -3
  667. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -1
  668. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts +3 -3
  669. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -1
  670. package/dist/esm/lib/hexclave-app/apps/implementations/index.js +1 -2
  671. package/dist/esm/lib/hexclave-app/apps/implementations/index.js.map +1 -1
  672. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.d.ts +1 -1
  673. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.d.ts.map +1 -1
  674. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.js +1 -2
  675. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -1
  676. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +13 -13
  677. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +1 -1
  678. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js +1 -2
  679. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -1
  680. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -1
  681. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.js +1 -1
  682. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -1
  683. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js +2 -3
  684. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -1
  685. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -1
  686. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js +13 -7
  687. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -1
  688. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js +134 -3
  689. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -1
  690. package/dist/esm/lib/hexclave-app/apps/index.d.ts +3 -3
  691. package/dist/esm/lib/hexclave-app/apps/index.js +1 -2
  692. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts +8 -8
  693. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -1
  694. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.js +1 -2
  695. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -1
  696. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts +6 -6
  697. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -1
  698. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js +1 -2
  699. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -1
  700. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.d.ts +7 -7
  701. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.d.ts.map +1 -1
  702. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.js +1 -2
  703. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -1
  704. package/dist/esm/lib/hexclave-app/common.d.ts.map +1 -1
  705. package/dist/esm/lib/hexclave-app/common.js +1 -1
  706. package/dist/esm/lib/hexclave-app/common.js.map +1 -1
  707. package/dist/esm/lib/hexclave-app/connected-accounts/index.d.ts.map +1 -1
  708. package/dist/esm/lib/hexclave-app/connected-accounts/index.js +1 -1
  709. package/dist/esm/lib/hexclave-app/contact-channels/index.d.ts.map +1 -1
  710. package/dist/esm/lib/hexclave-app/contact-channels/index.js +1 -1
  711. package/dist/esm/lib/hexclave-app/contact-channels/index.js.map +1 -1
  712. package/dist/esm/lib/hexclave-app/customers/index.d.ts +1 -1
  713. package/dist/esm/lib/hexclave-app/customers/index.d.ts.map +1 -1
  714. package/dist/esm/lib/hexclave-app/customers/index.js +1 -1
  715. package/dist/esm/lib/hexclave-app/data-vault/index.d.ts +1 -1
  716. package/dist/esm/lib/hexclave-app/data-vault/index.d.ts.map +1 -1
  717. package/dist/esm/lib/hexclave-app/data-vault/index.js +1 -1
  718. package/dist/esm/lib/hexclave-app/email/index.d.ts.map +1 -1
  719. package/dist/esm/lib/hexclave-app/email/index.js +1 -1
  720. package/dist/esm/lib/hexclave-app/email-templates/index.d.ts.map +1 -1
  721. package/dist/esm/lib/hexclave-app/email-templates/index.js +1 -1
  722. package/dist/esm/lib/hexclave-app/email-templates/index.js.map +1 -1
  723. package/dist/esm/lib/hexclave-app/index.d.ts +14 -14
  724. package/dist/esm/lib/hexclave-app/index.js +1 -2
  725. package/dist/esm/lib/hexclave-app/internal-api-keys/index.d.ts.map +1 -1
  726. package/dist/esm/lib/hexclave-app/internal-api-keys/index.js +1 -1
  727. package/dist/esm/lib/hexclave-app/internal-api-keys/index.js.map +1 -1
  728. package/dist/esm/lib/hexclave-app/notification-categories/index.d.ts.map +1 -1
  729. package/dist/esm/lib/hexclave-app/notification-categories/index.js +1 -1
  730. package/dist/esm/lib/hexclave-app/permissions/index.d.ts.map +1 -1
  731. package/dist/esm/lib/hexclave-app/permissions/index.js +1 -1
  732. package/dist/esm/lib/hexclave-app/permissions/index.js.map +1 -1
  733. package/dist/esm/lib/hexclave-app/plan-usage/index.d.ts.map +1 -1
  734. package/dist/esm/lib/hexclave-app/plan-usage/index.js +1 -1
  735. package/dist/esm/lib/hexclave-app/project-configs/index.d.ts +1 -1
  736. package/dist/esm/lib/hexclave-app/project-configs/index.d.ts.map +1 -1
  737. package/dist/esm/lib/hexclave-app/project-configs/index.js +1 -1
  738. package/dist/esm/lib/hexclave-app/projects/index.d.ts +2 -2
  739. package/dist/esm/lib/hexclave-app/projects/index.d.ts.map +1 -1
  740. package/dist/esm/lib/hexclave-app/projects/index.js +5 -1
  741. package/dist/esm/lib/hexclave-app/projects/index.js.map +1 -1
  742. package/dist/esm/lib/hexclave-app/session-replays/index.d.ts.map +1 -1
  743. package/dist/esm/lib/hexclave-app/session-replays/index.js +1 -1
  744. package/dist/esm/lib/hexclave-app/teams/index.d.ts +4 -4
  745. package/dist/esm/lib/hexclave-app/teams/index.d.ts.map +1 -1
  746. package/dist/esm/lib/hexclave-app/teams/index.js +1 -1
  747. package/dist/esm/lib/hexclave-app/teams/index.js.map +1 -1
  748. package/dist/esm/lib/hexclave-app/url-targets.d.ts +1 -1
  749. package/dist/esm/lib/hexclave-app/url-targets.d.ts.map +1 -1
  750. package/dist/esm/lib/hexclave-app/url-targets.js +2 -3
  751. package/dist/esm/lib/hexclave-app/url-targets.js.map +1 -1
  752. package/dist/esm/lib/hexclave-app/url-targets.test.js +2 -3
  753. package/dist/esm/lib/hexclave-app/url-targets.test.js.map +1 -1
  754. package/dist/esm/lib/hexclave-app/users/index.d.ts +9 -9
  755. package/dist/esm/lib/hexclave-app/users/index.d.ts.map +1 -1
  756. package/dist/esm/lib/hexclave-app/users/index.js +1 -2
  757. package/dist/esm/lib/hexclave-app/users/index.js.map +1 -1
  758. package/dist/esm/lib/hooks.d.ts +1 -1
  759. package/dist/esm/lib/hooks.d.ts.map +1 -1
  760. package/dist/esm/lib/hooks.js +1 -2
  761. package/dist/esm/lib/hooks.js.map +1 -1
  762. package/dist/esm/lib/translations.d.ts.map +1 -1
  763. package/dist/esm/lib/translations.js +1 -2
  764. package/dist/esm/lib/translations.js.map +1 -1
  765. package/dist/esm/providers/hexclave-context.d.ts +1 -1
  766. package/dist/esm/providers/hexclave-context.d.ts.map +1 -1
  767. package/dist/esm/providers/hexclave-context.js +1 -3
  768. package/dist/esm/providers/hexclave-context.js.map +1 -1
  769. package/dist/esm/providers/hexclave-provider-client.d.ts +2 -3
  770. package/dist/esm/providers/hexclave-provider-client.d.ts.map +1 -1
  771. package/dist/esm/providers/hexclave-provider-client.js +2 -4
  772. package/dist/esm/providers/hexclave-provider-client.js.map +1 -1
  773. package/dist/esm/providers/hexclave-provider.d.ts +3 -4
  774. package/dist/esm/providers/hexclave-provider.d.ts.map +1 -1
  775. package/dist/esm/providers/hexclave-provider.js +2 -3
  776. package/dist/esm/providers/hexclave-provider.js.map +1 -1
  777. package/dist/esm/providers/theme-provider.d.ts +1 -2
  778. package/dist/esm/providers/theme-provider.d.ts.map +1 -1
  779. package/dist/esm/providers/theme-provider.js +3 -5
  780. package/dist/esm/providers/theme-provider.js.map +1 -1
  781. package/dist/esm/providers/translation-provider-client.d.ts +1 -2
  782. package/dist/esm/providers/translation-provider-client.d.ts.map +1 -1
  783. package/dist/esm/providers/translation-provider-client.js +1 -3
  784. package/dist/esm/providers/translation-provider-client.js.map +1 -1
  785. package/dist/esm/providers/translation-provider.d.ts +2 -3
  786. package/dist/esm/providers/translation-provider.d.ts.map +1 -1
  787. package/dist/esm/providers/translation-provider.js +1 -2
  788. package/dist/esm/providers/translation-provider.js.map +1 -1
  789. package/dist/esm/pushed-config-error-overlay/index.d.ts +1 -1
  790. package/dist/esm/pushed-config-error-overlay/index.d.ts.map +1 -1
  791. package/dist/esm/pushed-config-error-overlay/index.js +1 -2
  792. package/dist/esm/pushed-config-error-overlay/index.js.map +1 -1
  793. package/dist/esm/pushed-config-error-overlay/index.test.js +2 -3
  794. package/dist/esm/pushed-config-error-overlay/index.test.js.map +1 -1
  795. package/dist/esm/tanstack-start-server-context.combined.d.ts +2 -2
  796. package/dist/esm/tanstack-start-server-context.combined.d.ts.map +1 -1
  797. package/dist/esm/tanstack-start-server-context.combined.js +1 -1
  798. package/dist/esm/tanstack-start-server-context.default.js +1 -1
  799. package/dist/esm/tanstack-start-server-context.default.js.map +1 -1
  800. package/dist/esm/tanstack-start-server-context.server.js +1 -2
  801. package/dist/esm/utils/browser-script.d.ts +1 -3
  802. package/dist/esm/utils/browser-script.d.ts.map +1 -1
  803. package/dist/esm/utils/browser-script.js +1 -2
  804. package/dist/esm/utils/browser-script.js.map +1 -1
  805. package/dist/esm/utils/constants.js +1 -1
  806. package/dist/esm/utils/constants.js.map +1 -1
  807. package/dist/esm/utils/url.d.ts.map +1 -1
  808. package/dist/esm/utils/url.js +1 -2
  809. package/dist/esm/utils/url.js.map +1 -1
  810. package/dist/forgot-password-B7RLLsC2.d.ts +12 -0
  811. package/dist/forgot-password-B7RLLsC2.d.ts.map +1 -0
  812. package/dist/generated/env.js +2 -3
  813. package/dist/generated/env.js.map +1 -1
  814. package/dist/generated/global-css.js +2 -3
  815. package/dist/generated/global-css.js.map +1 -1
  816. package/dist/generated/quetzal-translations.d.ts +2 -6
  817. package/dist/generated/quetzal-translations.js +2 -4
  818. package/dist/generated/quetzal-translations.js.map +1 -1
  819. package/dist/global.d.ts.map +1 -1
  820. package/dist/hexclave-provider-BlilYj1G.d.ts +29 -0
  821. package/dist/hexclave-provider-BlilYj1G.d.ts.map +1 -0
  822. package/dist/hooks-DbJ7dB9M.d.ts +43 -0
  823. package/dist/hooks-DbJ7dB9M.d.ts.map +1 -0
  824. package/dist/in-page-ui/base-styles.d.ts.map +1 -1
  825. package/dist/in-page-ui/base-styles.js +2 -3
  826. package/dist/in-page-ui/base-styles.js.map +1 -1
  827. package/dist/in-page-ui/dom.d.ts.map +1 -1
  828. package/dist/in-page-ui/dom.js +2 -3
  829. package/dist/in-page-ui/dom.js.map +1 -1
  830. package/dist/index-BKZ67WMa.d.ts +1 -0
  831. package/dist/index-BVVgDSdq.d.ts +1 -0
  832. package/dist/index-Bo5DpPFH.d.ts +17 -0
  833. package/dist/index-Bo5DpPFH.d.ts.map +1 -0
  834. package/dist/index-CBDR4cNg.d.ts +206 -0
  835. package/dist/index-CBDR4cNg.d.ts.map +1 -0
  836. package/dist/index-CMWygRUz.d.ts +14 -0
  837. package/dist/index-CMWygRUz.d.ts.map +1 -0
  838. package/dist/index-C_kxyHao.d.ts +57 -0
  839. package/dist/{lib/hexclave-app/connected-accounts/index.d.ts.map → index-C_kxyHao.d.ts.map} +1 -1
  840. package/dist/index-D7Vdg30O.d.ts +27 -0
  841. package/dist/index-D7Vdg30O.d.ts.map +1 -0
  842. package/dist/index-D8Frr6HH.d.ts +147 -0
  843. package/dist/index-D8Frr6HH.d.ts.map +1 -0
  844. package/dist/index-DN04TjLM.d.ts +43 -0
  845. package/dist/index-DN04TjLM.d.ts.map +1 -0
  846. package/dist/index-DSzMf-rS.d.ts +43 -0
  847. package/dist/index-DSzMf-rS.d.ts.map +1 -0
  848. package/dist/index-DmcsTlyO.d.ts +129 -0
  849. package/dist/index-DmcsTlyO.d.ts.map +1 -0
  850. package/dist/index-Dq4xsW7_.d.ts +106 -0
  851. package/dist/index-Dq4xsW7_.d.ts.map +1 -0
  852. package/dist/index-O3hJsHSl.d.ts +11 -0
  853. package/dist/index-O3hJsHSl.d.ts.map +1 -0
  854. package/dist/index-TUtJOdMm.d.ts +42 -0
  855. package/dist/index-TUtJOdMm.d.ts.map +1 -0
  856. package/dist/index-fOYcs4NH.d.ts +53 -0
  857. package/dist/{lib/hexclave-app/api-keys/index.d.ts.map → index-fOYcs4NH.d.ts.map} +1 -1
  858. package/dist/index-hYjsGKNc.d.ts +66 -0
  859. package/dist/index-hYjsGKNc.d.ts.map +1 -0
  860. package/dist/index.d.ts +33 -41
  861. package/dist/index.js +193 -193
  862. package/dist/integrations/convex/component/convex.config.d.ts +1 -1
  863. package/dist/integrations/convex/component/convex.config.d.ts.map +1 -1
  864. package/dist/integrations/convex/component/convex.config.js +2 -5
  865. package/dist/integrations/convex/component/convex.config.js.map +1 -1
  866. package/dist/integrations/convex.d.ts +2 -13
  867. package/dist/integrations/convex.js +2 -4
  868. package/dist/integrations/convex.js.map +1 -1
  869. package/dist/lib/auth.js +2 -4
  870. package/dist/lib/auth.js.map +1 -1
  871. package/dist/lib/auth.test.js +1 -3
  872. package/dist/lib/auth.test.js.map +1 -1
  873. package/dist/lib/cookie.d.ts +2 -42
  874. package/dist/lib/cookie.js +8 -26
  875. package/dist/lib/cookie.js.map +1 -1
  876. package/dist/lib/hexclave-app/api-keys/index.d.ts +2 -53
  877. package/dist/lib/hexclave-app/api-keys/index.js +2 -4
  878. package/dist/lib/hexclave-app/api-keys/index.js.map +1 -1
  879. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +2 -449
  880. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js +2 -4
  881. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -1
  882. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js +1 -3
  883. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -1
  884. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +2 -611
  885. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js +7 -8
  886. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
  887. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -3
  888. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -1
  889. package/dist/lib/hexclave-app/apps/implementations/common.d.ts +2 -66
  890. package/dist/lib/hexclave-app/apps/implementations/common.js +9 -10
  891. package/dist/lib/hexclave-app/apps/implementations/common.js.map +1 -1
  892. package/dist/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -1
  893. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js +2 -4
  894. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -1
  895. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js +1 -3
  896. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -1
  897. package/dist/lib/hexclave-app/apps/implementations/index.d.ts +1 -3
  898. package/dist/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -1
  899. package/dist/lib/hexclave-app/apps/implementations/index.js +2 -4
  900. package/dist/lib/hexclave-app/apps/implementations/index.js.map +1 -1
  901. package/dist/lib/hexclave-app/apps/implementations/redirect-page-urls.d.ts +2 -35
  902. package/dist/lib/hexclave-app/apps/implementations/redirect-page-urls.js +2 -4
  903. package/dist/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -1
  904. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +2 -274
  905. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js +2 -4
  906. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -1
  907. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -1
  908. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.js +2 -3
  909. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -1
  910. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js +1 -3
  911. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -1
  912. package/dist/lib/hexclave-app/apps/implementations/session-replay.d.ts +2 -122
  913. package/dist/lib/hexclave-app/apps/implementations/session-replay.js +14 -9
  914. package/dist/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -1
  915. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js +135 -3
  916. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -1
  917. package/dist/lib/hexclave-app/apps/index.d.ts +1 -3
  918. package/dist/lib/hexclave-app/apps/index.js +32 -34
  919. package/dist/lib/hexclave-app/apps/interfaces/admin-app.d.ts +3 -272
  920. package/dist/lib/hexclave-app/apps/interfaces/admin-app.js +3 -6
  921. package/dist/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -1
  922. package/dist/lib/hexclave-app/apps/interfaces/client-app.d.ts +2 -237
  923. package/dist/lib/hexclave-app/apps/interfaces/client-app.js +3 -6
  924. package/dist/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -1
  925. package/dist/lib/hexclave-app/apps/interfaces/server-app.d.ts +2 -174
  926. package/dist/lib/hexclave-app/apps/interfaces/server-app.js +3 -6
  927. package/dist/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -1
  928. package/dist/lib/hexclave-app/common.d.ts +2 -183
  929. package/dist/lib/hexclave-app/common.js +2 -3
  930. package/dist/lib/hexclave-app/common.js.map +1 -1
  931. package/dist/lib/hexclave-app/connected-accounts/index.d.ts +2 -57
  932. package/dist/lib/hexclave-app/contact-channels/index.d.ts +2 -43
  933. package/dist/lib/hexclave-app/contact-channels/index.js +2 -3
  934. package/dist/lib/hexclave-app/contact-channels/index.js.map +1 -1
  935. package/dist/lib/hexclave-app/customers/index.d.ts +2 -129
  936. package/dist/lib/hexclave-app/data-vault/index.d.ts +2 -14
  937. package/dist/lib/hexclave-app/email/index.d.ts +2 -206
  938. package/dist/lib/hexclave-app/email-templates/index.d.ts +2 -17
  939. package/dist/lib/hexclave-app/email-templates/index.js +2 -3
  940. package/dist/lib/hexclave-app/email-templates/index.js.map +1 -1
  941. package/dist/lib/hexclave-app/index.d.ts +10 -15
  942. package/dist/lib/hexclave-app/index.js +49 -51
  943. package/dist/lib/hexclave-app/internal-api-keys/index.d.ts +2 -42
  944. package/dist/lib/hexclave-app/internal-api-keys/index.js +2 -3
  945. package/dist/lib/hexclave-app/internal-api-keys/index.js.map +1 -1
  946. package/dist/lib/hexclave-app/notification-categories/index.d.ts +2 -11
  947. package/dist/lib/hexclave-app/permissions/index.d.ts +2 -43
  948. package/dist/lib/hexclave-app/permissions/index.js +2 -3
  949. package/dist/lib/hexclave-app/permissions/index.js.map +1 -1
  950. package/dist/lib/hexclave-app/plan-usage/index.d.ts +2 -27
  951. package/dist/lib/hexclave-app/project-configs/index.d.ts +2 -106
  952. package/dist/lib/hexclave-app/projects/index.d.ts +2 -154
  953. package/dist/lib/hexclave-app/projects/index.js +6 -3
  954. package/dist/lib/hexclave-app/projects/index.js.map +1 -1
  955. package/dist/lib/hexclave-app/session-replays/index.d.ts +2 -66
  956. package/dist/lib/hexclave-app/teams/index.d.ts +2 -167
  957. package/dist/lib/hexclave-app/teams/index.js +2 -3
  958. package/dist/lib/hexclave-app/teams/index.js.map +1 -1
  959. package/dist/lib/hexclave-app/url-targets.d.ts +2 -39
  960. package/dist/lib/hexclave-app/url-targets.js +3 -5
  961. package/dist/lib/hexclave-app/url-targets.js.map +1 -1
  962. package/dist/lib/hexclave-app/url-targets.test.js +1 -3
  963. package/dist/lib/hexclave-app/url-targets.test.js.map +1 -1
  964. package/dist/lib/hexclave-app/users/index.d.ts +2 -400
  965. package/dist/lib/hexclave-app/users/index.js +2 -4
  966. package/dist/lib/hexclave-app/users/index.js.map +1 -1
  967. package/dist/lib/hooks.d.ts +2 -45
  968. package/dist/lib/hooks.js +2 -4
  969. package/dist/lib/hooks.js.map +1 -1
  970. package/dist/lib/translations.d.ts.map +1 -1
  971. package/dist/lib/translations.js +4 -5
  972. package/dist/lib/translations.js.map +1 -1
  973. package/dist/magic-link-callback-DOfNLydt.d.ts +8 -0
  974. package/dist/magic-link-callback-DOfNLydt.d.ts.map +1 -0
  975. package/dist/magic-link-sign-in-D5MFDeWQ.d.ts +5 -0
  976. package/dist/magic-link-sign-in-D5MFDeWQ.d.ts.map +1 -0
  977. package/dist/message-card-C0AQX5-y.d.ts +18 -0
  978. package/dist/message-card-C0AQX5-y.d.ts.map +1 -0
  979. package/dist/mfa-CwYuxAd-.d.ts +9 -0
  980. package/dist/mfa-CwYuxAd-.d.ts.map +1 -0
  981. package/dist/oauth-button-PE3z60ay.d.ts +15 -0
  982. package/dist/oauth-button-PE3z60ay.d.ts.map +1 -0
  983. package/dist/oauth-button-group-slCOrSxK.d.ts +17 -0
  984. package/dist/oauth-button-group-slCOrSxK.d.ts.map +1 -0
  985. package/dist/oauth-callback-tCVTRbF2.d.ts +9 -0
  986. package/dist/oauth-callback-tCVTRbF2.d.ts.map +1 -0
  987. package/dist/onboarding-CdpQNCZF.d.ts +7 -0
  988. package/dist/onboarding-CdpQNCZF.d.ts.map +1 -0
  989. package/dist/password-reset-CxIuXeIx.d.ts +15 -0
  990. package/dist/password-reset-CxIuXeIx.d.ts.map +1 -0
  991. package/dist/providers/hexclave-context.d.ts +1 -1
  992. package/dist/providers/hexclave-context.d.ts.map +1 -1
  993. package/dist/providers/hexclave-context.js +5 -8
  994. package/dist/providers/hexclave-context.js.map +1 -1
  995. package/dist/providers/hexclave-provider-client.d.ts +2 -3
  996. package/dist/providers/hexclave-provider-client.d.ts.map +1 -1
  997. package/dist/providers/hexclave-provider-client.js +4 -6
  998. package/dist/providers/hexclave-provider-client.js.map +1 -1
  999. package/dist/providers/hexclave-provider.d.ts +2 -30
  1000. package/dist/providers/hexclave-provider.js +7 -5
  1001. package/dist/providers/hexclave-provider.js.map +1 -1
  1002. package/dist/providers/theme-provider.d.ts +2 -50
  1003. package/dist/providers/theme-provider.js +6 -8
  1004. package/dist/providers/theme-provider.js.map +1 -1
  1005. package/dist/providers/translation-provider-client.d.ts +1 -2
  1006. package/dist/providers/translation-provider-client.d.ts.map +1 -1
  1007. package/dist/providers/translation-provider-client.js +5 -8
  1008. package/dist/providers/translation-provider-client.js.map +1 -1
  1009. package/dist/providers/translation-provider.d.ts +2 -16
  1010. package/dist/providers/translation-provider.js +2 -4
  1011. package/dist/providers/translation-provider.js.map +1 -1
  1012. package/dist/pushed-config-error-overlay/index.d.ts +1 -2
  1013. package/dist/pushed-config-error-overlay/index.d.ts.map +1 -1
  1014. package/dist/pushed-config-error-overlay/index.js +2 -4
  1015. package/dist/pushed-config-error-overlay/index.js.map +1 -1
  1016. package/dist/pushed-config-error-overlay/index.test.js +1 -3
  1017. package/dist/pushed-config-error-overlay/index.test.js.map +1 -1
  1018. package/dist/quetzal-translations-C5DKC5UR.d.ts +6 -0
  1019. package/dist/quetzal-translations-C5DKC5UR.d.ts.map +1 -0
  1020. package/dist/redirect-page-urls-CK0shk-V.d.ts +35 -0
  1021. package/dist/redirect-page-urls-CK0shk-V.d.ts.map +1 -0
  1022. package/dist/{chunk-BE-pF4vm.js → rolldown-runtime-D6vf50IK.js} +12 -18
  1023. package/dist/session-replay-8_3WCrsZ.d.ts +122 -0
  1024. package/dist/session-replay-8_3WCrsZ.d.ts.map +1 -0
  1025. package/dist/sign-in-BT45jb_W.d.ts +21 -0
  1026. package/dist/sign-in-BT45jb_W.d.ts.map +1 -0
  1027. package/dist/sign-out-DBnSkfDz.d.ts +8 -0
  1028. package/dist/sign-out-DBnSkfDz.d.ts.map +1 -0
  1029. package/dist/sign-up-BjE_0DB4.d.ts +11 -0
  1030. package/dist/sign-up-BjE_0DB4.d.ts.map +1 -0
  1031. package/dist/{storage-ksajV_p6.d.ts → storage-kputlpQY.d.ts} +1 -1
  1032. package/dist/storage-kputlpQY.d.ts.map +1 -0
  1033. package/dist/tanstack-start-server-context.combined.d.ts.map +1 -1
  1034. package/dist/tanstack-start-server-context.default.js +2 -3
  1035. package/dist/tanstack-start-server-context.default.js.map +1 -1
  1036. package/dist/tanstack-start-server-context.server.js +27 -29
  1037. package/dist/team-invitation-B5Ol7vdd.d.ts +11 -0
  1038. package/dist/team-invitation-B5Ol7vdd.d.ts.map +1 -0
  1039. package/dist/theme-provider-D9_ngSbi.d.ts +49 -0
  1040. package/dist/theme-provider-D9_ngSbi.d.ts.map +1 -0
  1041. package/dist/translation-provider-CHdpSoRh.d.ts +15 -0
  1042. package/dist/translation-provider-CHdpSoRh.d.ts.map +1 -0
  1043. package/dist/url-targets-ObLYd6Q4.d.ts +39 -0
  1044. package/dist/url-targets-ObLYd6Q4.d.ts.map +1 -0
  1045. package/dist/user-avatar-CTyDsibI.d.ts +13 -0
  1046. package/dist/user-avatar-CTyDsibI.d.ts.map +1 -0
  1047. package/dist/user-button-CykqVKoH.d.ts +21 -0
  1048. package/dist/user-button-CykqVKoH.d.ts.map +1 -0
  1049. package/dist/utils/browser-script.d.ts +1 -3
  1050. package/dist/utils/browser-script.d.ts.map +1 -1
  1051. package/dist/utils/browser-script.js +2 -4
  1052. package/dist/utils/browser-script.js.map +1 -1
  1053. package/dist/utils/constants.js +2 -3
  1054. package/dist/utils/constants.js.map +1 -1
  1055. package/dist/utils/url.d.ts.map +1 -1
  1056. package/dist/utils/url.js +2 -4
  1057. package/dist/utils/url.js.map +1 -1
  1058. package/package.json +5 -5
  1059. package/src/lib/hexclave-app/apps/implementations/session-replay.test.ts +160 -1
  1060. package/src/lib/hexclave-app/apps/implementations/session-replay.ts +38 -12
  1061. package/dist/components/credential-sign-in.d.ts.map +0 -1
  1062. package/dist/components/credential-sign-up.d.ts.map +0 -1
  1063. package/dist/components/elements/user-avatar.d.ts.map +0 -1
  1064. package/dist/components/magic-link-sign-in.d.ts.map +0 -1
  1065. package/dist/components/message-cards/message-card.d.ts.map +0 -1
  1066. package/dist/components/oauth-button-group.d.ts.map +0 -1
  1067. package/dist/components/oauth-button.d.ts.map +0 -1
  1068. package/dist/components/selected-team-switcher.d.ts.map +0 -1
  1069. package/dist/components/team-switcher.d.ts.map +0 -1
  1070. package/dist/components/user-button.d.ts.map +0 -1
  1071. package/dist/components-page/account-settings.d.ts.map +0 -1
  1072. package/dist/components-page/auth-page.d.ts.map +0 -1
  1073. package/dist/components-page/cli-auth-confirm.d.ts.map +0 -1
  1074. package/dist/components-page/email-verification.d.ts.map +0 -1
  1075. package/dist/components-page/error-page.d.ts.map +0 -1
  1076. package/dist/components-page/forgot-password.d.ts.map +0 -1
  1077. package/dist/components-page/hexclave-handler-client.d.ts.map +0 -1
  1078. package/dist/components-page/hexclave-handler.d.ts.map +0 -1
  1079. package/dist/components-page/magic-link-callback.d.ts.map +0 -1
  1080. package/dist/components-page/mfa.d.ts.map +0 -1
  1081. package/dist/components-page/oauth-callback.d.ts.map +0 -1
  1082. package/dist/components-page/onboarding.d.ts.map +0 -1
  1083. package/dist/components-page/password-reset.d.ts.map +0 -1
  1084. package/dist/components-page/sign-in.d.ts.map +0 -1
  1085. package/dist/components-page/sign-out.d.ts.map +0 -1
  1086. package/dist/components-page/sign-up.d.ts.map +0 -1
  1087. package/dist/components-page/team-invitation.d.ts.map +0 -1
  1088. package/dist/generated/quetzal-translations.d.ts.map +0 -1
  1089. package/dist/integrations/convex.d.ts.map +0 -1
  1090. package/dist/lib/cookie.d.ts.map +0 -1
  1091. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  1092. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  1093. package/dist/lib/hexclave-app/apps/implementations/common.d.ts.map +0 -1
  1094. package/dist/lib/hexclave-app/apps/implementations/redirect-page-urls.d.ts.map +0 -1
  1095. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +0 -1
  1096. package/dist/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +0 -1
  1097. package/dist/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +0 -1
  1098. package/dist/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +0 -1
  1099. package/dist/lib/hexclave-app/apps/interfaces/server-app.d.ts.map +0 -1
  1100. package/dist/lib/hexclave-app/common.d.ts.map +0 -1
  1101. package/dist/lib/hexclave-app/contact-channels/index.d.ts.map +0 -1
  1102. package/dist/lib/hexclave-app/customers/index.d.ts.map +0 -1
  1103. package/dist/lib/hexclave-app/data-vault/index.d.ts.map +0 -1
  1104. package/dist/lib/hexclave-app/email/index.d.ts.map +0 -1
  1105. package/dist/lib/hexclave-app/email-templates/index.d.ts.map +0 -1
  1106. package/dist/lib/hexclave-app/internal-api-keys/index.d.ts.map +0 -1
  1107. package/dist/lib/hexclave-app/notification-categories/index.d.ts.map +0 -1
  1108. package/dist/lib/hexclave-app/permissions/index.d.ts.map +0 -1
  1109. package/dist/lib/hexclave-app/plan-usage/index.d.ts.map +0 -1
  1110. package/dist/lib/hexclave-app/project-configs/index.d.ts.map +0 -1
  1111. package/dist/lib/hexclave-app/projects/index.d.ts.map +0 -1
  1112. package/dist/lib/hexclave-app/session-replays/index.d.ts.map +0 -1
  1113. package/dist/lib/hexclave-app/teams/index.d.ts.map +0 -1
  1114. package/dist/lib/hexclave-app/url-targets.d.ts.map +0 -1
  1115. package/dist/lib/hexclave-app/users/index.d.ts.map +0 -1
  1116. package/dist/lib/hooks.d.ts.map +0 -1
  1117. package/dist/providers/hexclave-provider.d.ts.map +0 -1
  1118. package/dist/providers/theme-provider.d.ts.map +0 -1
  1119. package/dist/providers/translation-provider.d.ts.map +0 -1
  1120. package/dist/storage-ksajV_p6.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"session-refresh-subscription.js","names":[],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/session-refresh-subscription.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\ntype TokenStoreSubscription = {\n unsubscribe: () => void,\n};\n\ntype TokenStoreLike = {\n onChange: (callback: () => void) => TokenStoreSubscription,\n};\n\ntype SessionRefreshLike = {\n sessionKey: string,\n startRefreshingAccessToken: (minMillisUntilExpiration: number, maxMillisSinceIssued: number | null) => TokenStoreSubscription,\n};\n\n/**\n * Keeps the currently mounted React session fresh while `useSyncExternalStore`\n * has an active subscriber. The token store owns which session is current; when\n * it changes to a different session key, we stop refreshing the old session and\n * start refreshing the new one. The caller still receives every token-store\n * change through `onTokenStoreChange` so React can re-read the session snapshot.\n */\nexport function subscribeSessionRefresh(options: {\n tokenStore: TokenStoreLike,\n getSession: () => SessionRefreshLike,\n onTokenStoreChange: () => void,\n minMillisUntilExpiration?: number,\n maxMillisSinceIssued?: number | null,\n}): () => void {\n const minMillisUntilExpiration = options.minMillisUntilExpiration ?? 30_000;\n const maxMillisSinceIssued = options.maxMillisSinceIssued ?? 60_000;\n\n let refreshedSession = options.getSession();\n let refreshSubscription = refreshedSession.startRefreshingAccessToken(minMillisUntilExpiration, maxMillisSinceIssued);\n\n const tokenStoreSubscription = options.tokenStore.onChange(() => {\n const nextSession = options.getSession();\n if (nextSession.sessionKey !== refreshedSession.sessionKey) {\n refreshSubscription.unsubscribe();\n refreshedSession = nextSession;\n refreshSubscription = refreshedSession.startRefreshingAccessToken(minMillisUntilExpiration, maxMillisSinceIssued);\n }\n options.onTokenStoreChange();\n });\n\n return () => {\n tokenStoreSubscription.unsubscribe();\n refreshSubscription.unsubscribe();\n };\n}\n"],"mappings":";;;;;;;;;;AAwBA,SAAgB,wBAAwB,SAMzB;CACb,MAAM,2BAA2B,QAAQ,4BAA4B;CACrE,MAAM,uBAAuB,QAAQ,wBAAwB;CAE7D,IAAI,mBAAmB,QAAQ,YAAY;CAC3C,IAAI,sBAAsB,iBAAiB,2BAA2B,0BAA0B,qBAAqB;CAErH,MAAM,yBAAyB,QAAQ,WAAW,eAAe;EAC/D,MAAM,cAAc,QAAQ,YAAY;AACxC,MAAI,YAAY,eAAe,iBAAiB,YAAY;AAC1D,uBAAoB,aAAa;AACjC,sBAAmB;AACnB,yBAAsB,iBAAiB,2BAA2B,0BAA0B,qBAAqB;;AAEnH,UAAQ,oBAAoB;GAC5B;AAEF,cAAa;AACX,yBAAuB,aAAa;AACpC,sBAAoB,aAAa"}
1
+ {"version":3,"file":"session-refresh-subscription.js","names":[],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/session-refresh-subscription.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\ntype TokenStoreSubscription = {\n unsubscribe: () => void,\n};\n\ntype TokenStoreLike = {\n onChange: (callback: () => void) => TokenStoreSubscription,\n};\n\ntype SessionRefreshLike = {\n sessionKey: string,\n startRefreshingAccessToken: (minMillisUntilExpiration: number, maxMillisSinceIssued: number | null) => TokenStoreSubscription,\n};\n\n/**\n * Keeps the currently mounted React session fresh while `useSyncExternalStore`\n * has an active subscriber. The token store owns which session is current; when\n * it changes to a different session key, we stop refreshing the old session and\n * start refreshing the new one. The caller still receives every token-store\n * change through `onTokenStoreChange` so React can re-read the session snapshot.\n */\nexport function subscribeSessionRefresh(options: {\n tokenStore: TokenStoreLike,\n getSession: () => SessionRefreshLike,\n onTokenStoreChange: () => void,\n minMillisUntilExpiration?: number,\n maxMillisSinceIssued?: number | null,\n}): () => void {\n const minMillisUntilExpiration = options.minMillisUntilExpiration ?? 30_000;\n const maxMillisSinceIssued = options.maxMillisSinceIssued ?? 60_000;\n\n let refreshedSession = options.getSession();\n let refreshSubscription = refreshedSession.startRefreshingAccessToken(minMillisUntilExpiration, maxMillisSinceIssued);\n\n const tokenStoreSubscription = options.tokenStore.onChange(() => {\n const nextSession = options.getSession();\n if (nextSession.sessionKey !== refreshedSession.sessionKey) {\n refreshSubscription.unsubscribe();\n refreshedSession = nextSession;\n refreshSubscription = refreshedSession.startRefreshingAccessToken(minMillisUntilExpiration, maxMillisSinceIssued);\n }\n options.onTokenStoreChange();\n });\n\n return () => {\n tokenStoreSubscription.unsubscribe();\n refreshSubscription.unsubscribe();\n };\n}\n"],"mappings":";;;;;;;;;AAwBA,SAAgB,wBAAwB,SAMzB;CACb,MAAM,2BAA2B,QAAQ,4BAA4B;CACrE,MAAM,uBAAuB,QAAQ,wBAAwB;CAE7D,IAAI,mBAAmB,QAAQ,WAAW;CAC1C,IAAI,sBAAsB,iBAAiB,2BAA2B,0BAA0B,oBAAoB;CAEpH,MAAM,yBAAyB,QAAQ,WAAW,eAAe;EAC/D,MAAM,cAAc,QAAQ,WAAW;EACvC,IAAI,YAAY,eAAe,iBAAiB,YAAY;GAC1D,oBAAoB,YAAY;GAChC,mBAAmB;GACnB,sBAAsB,iBAAiB,2BAA2B,0BAA0B,oBAAoB;EAClH;EACA,QAAQ,mBAAmB;CAC7B,CAAC;CAED,aAAa;EACX,uBAAuB,YAAY;EACnC,oBAAoB,YAAY;CAClC;AACF"}
@@ -1,7 +1,5 @@
1
- const require_chunk = require('../../../../chunk-BE-pF4vm.js');
2
1
  let vitest = require("vitest");
3
2
  let __session_refresh_subscription_js = require("./session-refresh-subscription.js");
4
-
5
3
  //#region src/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.ts
6
4
  function createTokenStoreTestDouble() {
7
5
  const listeners = /* @__PURE__ */ new Set();
@@ -77,6 +75,6 @@ function createSessionTestDouble(sessionKey) {
77
75
  (0, vitest.expect)(secondSession.session.startRefreshingAccessToken).toHaveBeenCalledWith(3e4, 6e4);
78
76
  });
79
77
  });
80
-
81
78
  //#endregion
79
+
82
80
  //# sourceMappingURL=session-refresh-subscription.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-refresh-subscription.test.js","names":["vi"],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { describe, expect, it, vi } from \"vitest\";\nimport { subscribeSessionRefresh } from \"./session-refresh-subscription\";\n\ntype Listener = () => void;\n\nfunction createTokenStoreTestDouble() {\n const listeners = new Set<Listener>();\n const unsubscribe = vi.fn((listener: Listener) => {\n listeners.delete(listener);\n });\n\n return {\n tokenStore: {\n onChange: vi.fn((listener: Listener) => {\n listeners.add(listener);\n return {\n unsubscribe: () => unsubscribe(listener),\n };\n }),\n },\n emitChange: () => {\n for (const listener of [...listeners]) {\n listener();\n }\n },\n unsubscribe,\n };\n}\n\nfunction createSessionTestDouble(sessionKey: string) {\n const refreshUnsubscribe = vi.fn();\n return {\n session: {\n sessionKey,\n startRefreshingAccessToken: vi.fn(() => ({\n unsubscribe: refreshUnsubscribe,\n })),\n },\n refreshUnsubscribe,\n };\n}\n\ndescribe(\"subscribeSessionRefresh\", () => {\n it(\"starts token refresh while subscribed and stops it on unsubscribe\", () => {\n const tokenStore = createTokenStoreTestDouble();\n const firstSession = createSessionTestDouble(\"refresh-token-1\");\n const onTokenStoreChange = vi.fn();\n\n const unsubscribe = subscribeSessionRefresh({\n tokenStore: tokenStore.tokenStore,\n getSession: () => firstSession.session,\n onTokenStoreChange,\n });\n\n expect(firstSession.session.startRefreshingAccessToken).toHaveBeenCalledWith(30_000, 60_000);\n expect(tokenStore.tokenStore.onChange).toHaveBeenCalledOnce();\n\n unsubscribe();\n\n expect(tokenStore.unsubscribe).toHaveBeenCalledOnce();\n expect(firstSession.refreshUnsubscribe).toHaveBeenCalledOnce();\n });\n\n it(\"keeps the existing refresh loop when the token store changes within the same session\", () => {\n const tokenStore = createTokenStoreTestDouble();\n const firstSession = createSessionTestDouble(\"refresh-token-1\");\n const onTokenStoreChange = vi.fn();\n\n subscribeSessionRefresh({\n tokenStore: tokenStore.tokenStore,\n getSession: () => firstSession.session,\n onTokenStoreChange,\n });\n\n tokenStore.emitChange();\n\n expect(onTokenStoreChange).toHaveBeenCalledOnce();\n expect(firstSession.session.startRefreshingAccessToken).toHaveBeenCalledOnce();\n expect(firstSession.refreshUnsubscribe).not.toHaveBeenCalled();\n });\n\n it(\"moves the refresh loop when the token store changes to a different session\", () => {\n const tokenStore = createTokenStoreTestDouble();\n const firstSession = createSessionTestDouble(\"refresh-token-1\");\n const secondSession = createSessionTestDouble(\"refresh-token-2\");\n const sessions = [firstSession.session, secondSession.session];\n const onTokenStoreChange = vi.fn();\n\n subscribeSessionRefresh({\n tokenStore: tokenStore.tokenStore,\n getSession: () => sessions[0] ?? secondSession.session,\n onTokenStoreChange,\n });\n\n sessions.shift();\n tokenStore.emitChange();\n\n expect(onTokenStoreChange).toHaveBeenCalledOnce();\n expect(firstSession.refreshUnsubscribe).toHaveBeenCalledOnce();\n expect(secondSession.session.startRefreshingAccessToken).toHaveBeenCalledWith(30_000, 60_000);\n });\n});\n"],"mappings":";;;;;AASA,SAAS,6BAA6B;CACpC,MAAM,4BAAY,IAAI,KAAe;CACrC,MAAM,cAAcA,UAAG,IAAI,aAAuB;AAChD,YAAU,OAAO,SAAS;GAC1B;AAEF,QAAO;EACL,YAAY,EACV,UAAUA,UAAG,IAAI,aAAuB;AACtC,aAAU,IAAI,SAAS;AACvB,UAAO,EACL,mBAAmB,YAAY,SAAS,EACzC;IACD,EACH;EACD,kBAAkB;AAChB,QAAK,MAAM,YAAY,CAAC,GAAG,UAAU,CACnC,WAAU;;EAGd;EACD;;AAGH,SAAS,wBAAwB,YAAoB;CACnD,MAAM,qBAAqBA,UAAG,IAAI;AAClC,QAAO;EACL,SAAS;GACP;GACA,4BAA4BA,UAAG,UAAU,EACvC,aAAa,oBACd,EAAE;GACJ;EACD;EACD;;qBAGM,iCAAiC;AACxC,gBAAG,2EAA2E;EAC5E,MAAM,aAAa,4BAA4B;EAC/C,MAAM,eAAe,wBAAwB,kBAAkB;EAC/D,MAAM,qBAAqBA,UAAG,IAAI;EAElC,MAAM,6EAAsC;GAC1C,YAAY,WAAW;GACvB,kBAAkB,aAAa;GAC/B;GACD,CAAC;AAEF,qBAAO,aAAa,QAAQ,2BAA2B,CAAC,qBAAqB,KAAQ,IAAO;AAC5F,qBAAO,WAAW,WAAW,SAAS,CAAC,sBAAsB;AAE7D,eAAa;AAEb,qBAAO,WAAW,YAAY,CAAC,sBAAsB;AACrD,qBAAO,aAAa,mBAAmB,CAAC,sBAAsB;GAC9D;AAEF,gBAAG,8FAA8F;EAC/F,MAAM,aAAa,4BAA4B;EAC/C,MAAM,eAAe,wBAAwB,kBAAkB;EAC/D,MAAM,qBAAqBA,UAAG,IAAI;AAElC,iEAAwB;GACtB,YAAY,WAAW;GACvB,kBAAkB,aAAa;GAC/B;GACD,CAAC;AAEF,aAAW,YAAY;AAEvB,qBAAO,mBAAmB,CAAC,sBAAsB;AACjD,qBAAO,aAAa,QAAQ,2BAA2B,CAAC,sBAAsB;AAC9E,qBAAO,aAAa,mBAAmB,CAAC,IAAI,kBAAkB;GAC9D;AAEF,gBAAG,oFAAoF;EACrF,MAAM,aAAa,4BAA4B;EAC/C,MAAM,eAAe,wBAAwB,kBAAkB;EAC/D,MAAM,gBAAgB,wBAAwB,kBAAkB;EAChE,MAAM,WAAW,CAAC,aAAa,SAAS,cAAc,QAAQ;EAC9D,MAAM,qBAAqBA,UAAG,IAAI;AAElC,iEAAwB;GACtB,YAAY,WAAW;GACvB,kBAAkB,SAAS,MAAM,cAAc;GAC/C;GACD,CAAC;AAEF,WAAS,OAAO;AAChB,aAAW,YAAY;AAEvB,qBAAO,mBAAmB,CAAC,sBAAsB;AACjD,qBAAO,aAAa,mBAAmB,CAAC,sBAAsB;AAC9D,qBAAO,cAAc,QAAQ,2BAA2B,CAAC,qBAAqB,KAAQ,IAAO;GAC7F;EACF"}
1
+ {"version":3,"file":"session-refresh-subscription.test.js","names":["vi"],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { describe, expect, it, vi } from \"vitest\";\nimport { subscribeSessionRefresh } from \"./session-refresh-subscription\";\n\ntype Listener = () => void;\n\nfunction createTokenStoreTestDouble() {\n const listeners = new Set<Listener>();\n const unsubscribe = vi.fn((listener: Listener) => {\n listeners.delete(listener);\n });\n\n return {\n tokenStore: {\n onChange: vi.fn((listener: Listener) => {\n listeners.add(listener);\n return {\n unsubscribe: () => unsubscribe(listener),\n };\n }),\n },\n emitChange: () => {\n for (const listener of [...listeners]) {\n listener();\n }\n },\n unsubscribe,\n };\n}\n\nfunction createSessionTestDouble(sessionKey: string) {\n const refreshUnsubscribe = vi.fn();\n return {\n session: {\n sessionKey,\n startRefreshingAccessToken: vi.fn(() => ({\n unsubscribe: refreshUnsubscribe,\n })),\n },\n refreshUnsubscribe,\n };\n}\n\ndescribe(\"subscribeSessionRefresh\", () => {\n it(\"starts token refresh while subscribed and stops it on unsubscribe\", () => {\n const tokenStore = createTokenStoreTestDouble();\n const firstSession = createSessionTestDouble(\"refresh-token-1\");\n const onTokenStoreChange = vi.fn();\n\n const unsubscribe = subscribeSessionRefresh({\n tokenStore: tokenStore.tokenStore,\n getSession: () => firstSession.session,\n onTokenStoreChange,\n });\n\n expect(firstSession.session.startRefreshingAccessToken).toHaveBeenCalledWith(30_000, 60_000);\n expect(tokenStore.tokenStore.onChange).toHaveBeenCalledOnce();\n\n unsubscribe();\n\n expect(tokenStore.unsubscribe).toHaveBeenCalledOnce();\n expect(firstSession.refreshUnsubscribe).toHaveBeenCalledOnce();\n });\n\n it(\"keeps the existing refresh loop when the token store changes within the same session\", () => {\n const tokenStore = createTokenStoreTestDouble();\n const firstSession = createSessionTestDouble(\"refresh-token-1\");\n const onTokenStoreChange = vi.fn();\n\n subscribeSessionRefresh({\n tokenStore: tokenStore.tokenStore,\n getSession: () => firstSession.session,\n onTokenStoreChange,\n });\n\n tokenStore.emitChange();\n\n expect(onTokenStoreChange).toHaveBeenCalledOnce();\n expect(firstSession.session.startRefreshingAccessToken).toHaveBeenCalledOnce();\n expect(firstSession.refreshUnsubscribe).not.toHaveBeenCalled();\n });\n\n it(\"moves the refresh loop when the token store changes to a different session\", () => {\n const tokenStore = createTokenStoreTestDouble();\n const firstSession = createSessionTestDouble(\"refresh-token-1\");\n const secondSession = createSessionTestDouble(\"refresh-token-2\");\n const sessions = [firstSession.session, secondSession.session];\n const onTokenStoreChange = vi.fn();\n\n subscribeSessionRefresh({\n tokenStore: tokenStore.tokenStore,\n getSession: () => sessions[0] ?? secondSession.session,\n onTokenStoreChange,\n });\n\n sessions.shift();\n tokenStore.emitChange();\n\n expect(onTokenStoreChange).toHaveBeenCalledOnce();\n expect(firstSession.refreshUnsubscribe).toHaveBeenCalledOnce();\n expect(secondSession.session.startRefreshingAccessToken).toHaveBeenCalledWith(30_000, 60_000);\n });\n});\n"],"mappings":";;;AASA,SAAS,6BAA6B;CACpC,MAAM,4BAAY,IAAI,IAAc;CACpC,MAAM,cAAcA,OAAAA,GAAG,IAAI,aAAuB;EAChD,UAAU,OAAO,QAAQ;CAC3B,CAAC;CAED,OAAO;EACL,YAAY,EACV,UAAUA,OAAAA,GAAG,IAAI,aAAuB;GACtC,UAAU,IAAI,QAAQ;GACtB,OAAO,EACL,mBAAmB,YAAY,QAAQ,EACzC;EACF,CAAC,EACH;EACA,kBAAkB;GAChB,KAAK,MAAM,YAAY,CAAC,GAAG,SAAS,GAClC,SAAS;EAEb;EACA;CACF;AACF;AAEA,SAAS,wBAAwB,YAAoB;CACnD,MAAM,qBAAqBA,OAAAA,GAAG,GAAG;CACjC,OAAO;EACL,SAAS;GACP;GACA,4BAA4BA,OAAAA,GAAG,UAAU,EACvC,aAAa,mBACf,EAAE;EACJ;EACA;CACF;AACF;qBAES,iCAAiC;CACxC,CAAA,GAAA,OAAA,GAAA,CAAG,2EAA2E;EAC5E,MAAM,aAAa,2BAA2B;EAC9C,MAAM,eAAe,wBAAwB,iBAAiB;EAC9D,MAAM,qBAAqBA,OAAAA,GAAG,GAAG;EAEjC,MAAM,eAAA,GAAA,kCAAA,wBAAA,CAAsC;GAC1C,YAAY,WAAW;GACvB,kBAAkB,aAAa;GAC/B;EACF,CAAC;EAED,CAAA,GAAA,OAAA,OAAA,CAAO,aAAa,QAAQ,0BAA0B,CAAC,CAAC,qBAAqB,KAAQ,GAAM;EAC3F,CAAA,GAAA,OAAA,OAAA,CAAO,WAAW,WAAW,QAAQ,CAAC,CAAC,qBAAqB;EAE5D,YAAY;EAEZ,CAAA,GAAA,OAAA,OAAA,CAAO,WAAW,WAAW,CAAC,CAAC,qBAAqB;EACpD,CAAA,GAAA,OAAA,OAAA,CAAO,aAAa,kBAAkB,CAAC,CAAC,qBAAqB;CAC/D,CAAC;CAED,CAAA,GAAA,OAAA,GAAA,CAAG,8FAA8F;EAC/F,MAAM,aAAa,2BAA2B;EAC9C,MAAM,eAAe,wBAAwB,iBAAiB;EAC9D,MAAM,qBAAqBA,OAAAA,GAAG,GAAG;EAEjC,CAAA,GAAA,kCAAA,wBAAA,CAAwB;GACtB,YAAY,WAAW;GACvB,kBAAkB,aAAa;GAC/B;EACF,CAAC;EAED,WAAW,WAAW;EAEtB,CAAA,GAAA,OAAA,OAAA,CAAO,kBAAkB,CAAC,CAAC,qBAAqB;EAChD,CAAA,GAAA,OAAA,OAAA,CAAO,aAAa,QAAQ,0BAA0B,CAAC,CAAC,qBAAqB;EAC7E,CAAA,GAAA,OAAA,OAAA,CAAO,aAAa,kBAAkB,CAAC,CAAC,IAAI,iBAAiB;CAC/D,CAAC;CAED,CAAA,GAAA,OAAA,GAAA,CAAG,oFAAoF;EACrF,MAAM,aAAa,2BAA2B;EAC9C,MAAM,eAAe,wBAAwB,iBAAiB;EAC9D,MAAM,gBAAgB,wBAAwB,iBAAiB;EAC/D,MAAM,WAAW,CAAC,aAAa,SAAS,cAAc,OAAO;EAC7D,MAAM,qBAAqBA,OAAAA,GAAG,GAAG;EAEjC,CAAA,GAAA,kCAAA,wBAAA,CAAwB;GACtB,YAAY,WAAW;GACvB,kBAAkB,SAAS,MAAM,cAAc;GAC/C;EACF,CAAC;EAED,SAAS,MAAM;EACf,WAAW,WAAW;EAEtB,CAAA,GAAA,OAAA,OAAA,CAAO,kBAAkB,CAAC,CAAC,qBAAqB;EAChD,CAAA,GAAA,OAAA,OAAA,CAAO,aAAa,kBAAkB,CAAC,CAAC,qBAAqB;EAC7D,CAAA,GAAA,OAAA,OAAA,CAAO,cAAc,QAAQ,0BAA0B,CAAC,CAAC,qBAAqB,KAAQ,GAAM;CAC9F,CAAC;AACH,CAAC"}
@@ -1,122 +1,2 @@
1
- import { Result } from "@hexclave/shared/dist/utils/results";
2
-
3
- //#region src/lib/hexclave-app/apps/implementations/session-replay.d.ts
4
- type AnalyticsReplayOptions = {
5
- /**
6
- * Whether session replays are enabled.
7
- *
8
- * @default true
9
- */
10
- enabled?: boolean;
11
- /**
12
- * Whether to mask the content of all `<input>` elements.
13
- *
14
- * @default true
15
- */
16
- maskAllInputs?: boolean;
17
- /**
18
- * A CSS class name or RegExp. Elements with a matching class will be blocked
19
- * (replaced with a placeholder in the recording).
20
- *
21
- * @default undefined
22
- */
23
- blockClass?: string | RegExp;
24
- /**
25
- * A CSS selector string. Elements matching this selector will be blocked
26
- * (replaced with a placeholder in the recording).
27
- *
28
- * @default undefined
29
- */
30
- blockSelector?: string;
31
- };
32
- type AnalyticsOptions = {
33
- /**
34
- * Whether SDK-managed analytics capture is enabled.
35
- *
36
- * @default true
37
- */
38
- enabled?: boolean;
39
- /**
40
- * Options for session replay recording. Replays are enabled by default;
41
- * set `enabled: false` to opt out.
42
- */
43
- replays?: AnalyticsReplayOptions;
44
- };
45
- declare function getSessionReplayOptions(analyticsOptions: AnalyticsOptions | undefined): AnalyticsReplayOptions;
46
- /**
47
- * Converts AnalyticsOptions to a JSON-safe representation.
48
- * RegExp blockClass values are serialized as `{ __regexp, __flags }` objects.
49
- * The return type is AnalyticsOptions to keep StackClientAppJson simple;
50
- * the actual runtime value is JSON-safe.
51
- */
52
- declare function analyticsOptionsToJson(options: AnalyticsOptions | undefined): AnalyticsOptions | undefined;
53
- /**
54
- * Reconstructs AnalyticsOptions from a JSON-deserialized value.
55
- * Converts `{ __regexp, __flags }` objects back to RegExp instances.
56
- */
57
- declare function analyticsOptionsFromJson(json: AnalyticsOptions | undefined): AnalyticsOptions | undefined;
58
- type StoredSession = {
59
- session_id: string;
60
- created_at_ms: number;
61
- last_activity_ms: number;
62
- };
63
- declare function safeParseStoredSession(raw: string | null): StoredSession | null;
64
- declare function makeStorageKey(projectId: string): string;
65
- declare function makeLegacyStorageKey(projectId: string): string;
66
- declare function generateUuid(): `${string}-${string}-${string}-${string}-${string}`;
67
- declare function getOrRotateSession(options: {
68
- key: string;
69
- legacyKey?: string;
70
- nowMs: number;
71
- }): StoredSession;
72
- type SessionRecorderDeps = {
73
- projectId: string;
74
- sendBatch: (body: string, options: {
75
- keepalive: boolean;
76
- }) => Promise<Result<Response, Error>>;
77
- };
78
- declare function isAnalyticsNotEnabledError(error: unknown): boolean;
79
- /**
80
- * Whether the error looks like a network failure caused by an ad blocker or
81
- * similar extension blocking analytics requests. These are expected in
82
- * production and should be silently ignored rather than logged as warnings.
83
- */
84
- declare function isAdBlockerNetworkError(error: unknown): boolean;
85
- declare class SessionRecorder {
86
- private _started;
87
- private _cancelled;
88
- private _disabled;
89
- private _stopRecording;
90
- private _detachListeners;
91
- private _flushTimer;
92
- private _events;
93
- private _eventSizes;
94
- private _approxBytes;
95
- private _lastPersistActivity;
96
- private _recording;
97
- private _rrwebModule;
98
- private _lastBrowserSessionId;
99
- private _takingSnapshot;
100
- private _flushInProgress;
101
- private readonly _sessionReplaySegmentId;
102
- private readonly _storageKey;
103
- private readonly _legacyStorageKey;
104
- private readonly _deps;
105
- private readonly _replayOptions;
106
- constructor(deps: SessionRecorderDeps, replayOptions: AnalyticsReplayOptions);
107
- /**
108
- * Starts recording. Idempotent — calling multiple times is safe.
109
- */
110
- start(): void;
111
- stop(): void;
112
- clearBuffer(): void;
113
- private _persistActivity;
114
- private _flush;
115
- private _disable;
116
- private _startRecording;
117
- private _stopCurrentRecording;
118
- private _tick;
119
- }
120
- //#endregion
121
- export { AnalyticsOptions, AnalyticsReplayOptions, SessionRecorder, SessionRecorderDeps, StoredSession, analyticsOptionsFromJson, analyticsOptionsToJson, generateUuid, getOrRotateSession, getSessionReplayOptions, isAdBlockerNetworkError, isAnalyticsNotEnabledError, makeLegacyStorageKey, makeStorageKey, safeParseStoredSession };
122
- //# sourceMappingURL=session-replay.d.ts.map
1
+ import { a as StoredSession, c as generateUuid, d as isAdBlockerNetworkError, f as isAnalyticsNotEnabledError, h as safeParseStoredSession, i as SessionRecorderDeps, l as getOrRotateSession, m as makeStorageKey, n as AnalyticsReplayOptions, o as analyticsOptionsFromJson, p as makeLegacyStorageKey, r as SessionRecorder, s as analyticsOptionsToJson, t as AnalyticsOptions, u as getSessionReplayOptions } from "../../../../session-replay-8_3WCrsZ.js";
2
+ export { AnalyticsOptions, AnalyticsReplayOptions, SessionRecorder, SessionRecorderDeps, StoredSession, analyticsOptionsFromJson, analyticsOptionsToJson, generateUuid, getOrRotateSession, getSessionReplayOptions, isAdBlockerNetworkError, isAnalyticsNotEnabledError, makeLegacyStorageKey, makeStorageKey, safeParseStoredSession };
@@ -1,11 +1,9 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_chunk = require('../../../../chunk-BE-pF4vm.js');
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
2
  let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
4
3
  let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/errors");
5
4
  let _hexclave_shared_dist_utils_results = require("@hexclave/shared/dist/utils/results");
6
5
  let _hexclave_shared_dist_utils_env = require("@hexclave/shared/dist/utils/env");
7
6
  let _hexclave_shared_dist_known_errors = require("@hexclave/shared/dist/known-errors");
8
-
9
7
  //#region src/lib/hexclave-app/apps/implementations/session-replay.ts
10
8
  function getSessionReplayOptions(analyticsOptions) {
11
9
  return {
@@ -59,7 +57,8 @@ const IDLE_TTL_MS = 180 * 1e3;
59
57
  const FLUSH_INTERVAL_MS = 5e3;
60
58
  const MAX_EVENTS_PER_BATCH = 200;
61
59
  const MAX_APPROX_BYTES_PER_BATCH = 512e3;
62
- const MAX_FLUSH_PAYLOAD_BYTES = 9e5;
60
+ const MAX_BATCH_UNCOMPRESSED_BYTES = 9e5;
61
+ const MAX_SINGLE_EVENT_BYTES = 8 * 1024 * 1024 - 1024;
63
62
  const textEncoder = new TextEncoder();
64
63
  function safeParseStoredSession(raw) {
65
64
  if (!raw) return null;
@@ -183,13 +182,14 @@ var SessionRecorder = class {
183
182
  this._events = [];
184
183
  this._eventSizes = [];
185
184
  this._approxBytes = 0;
185
+ const maxSingleEventBytes = options.keepalive ? MAX_BATCH_UNCOMPRESSED_BYTES : MAX_SINGLE_EVENT_BYTES;
186
186
  this._flushInProgress = true;
187
187
  try {
188
188
  let offset = 0;
189
189
  while (offset < allEvents.length) {
190
190
  const firstSize = allSizes[offset] ?? (0, _hexclave_shared_dist_utils_errors.throwErr)("_eventSizes out of sync with _events — this should never happen");
191
- if (firstSize > MAX_FLUSH_PAYLOAD_BYTES) {
192
- (0, _hexclave_shared_dist_utils_errors.captureWarning)("SessionRecorder.flush", /* @__PURE__ */ new Error(`Dropping oversized session replay event (${firstSize} bytes > ${MAX_FLUSH_PAYLOAD_BYTES} byte limit); it cannot be sent without a 413.`));
191
+ if (firstSize > maxSingleEventBytes) {
192
+ (0, _hexclave_shared_dist_utils_errors.captureWarning)("SessionRecorder.flush", /* @__PURE__ */ new Error(`Dropping oversized session replay event (${firstSize} bytes > ${maxSingleEventBytes} byte limit); it cannot be sent without exceeding the server's body limit.`));
193
193
  offset += 1;
194
194
  continue;
195
195
  }
@@ -197,7 +197,7 @@ var SessionRecorder = class {
197
197
  let batchEnd = offset;
198
198
  for (let i = offset; i < allEvents.length; i++) {
199
199
  const nextSize = allSizes[i] ?? (0, _hexclave_shared_dist_utils_errors.throwErr)("_eventSizes out of sync with _events — this should never happen");
200
- if (batchBytes + nextSize > MAX_FLUSH_PAYLOAD_BYTES && batchEnd > offset) break;
200
+ if (batchBytes + nextSize > MAX_BATCH_UNCOMPRESSED_BYTES && batchEnd > offset) break;
201
201
  batchBytes += nextSize;
202
202
  batchEnd = i + 1;
203
203
  }
@@ -223,7 +223,12 @@ var SessionRecorder = class {
223
223
  return;
224
224
  }
225
225
  if (!res.data.ok) {
226
- (0, _hexclave_shared_dist_utils_errors.captureWarning)("SessionRecorder.flush", /* @__PURE__ */ new Error(`SessionRecorder flush failed: ${res.data.status} ${await res.data.text()}`));
226
+ const droppedCount = batchEvents.length + (allEvents.length - offset);
227
+ if (res.data.status === 413) {
228
+ (0, _hexclave_shared_dist_utils_errors.captureWarning)("SessionRecorder.flush", /* @__PURE__ */ new Error(`Session replay batch rejected with 413 (payload too large) despite client-side size caps; dropping ${droppedCount} buffered event(s). A poorly-compressible event likely exceeded the server's body limit after gzip.`));
229
+ return;
230
+ }
231
+ (0, _hexclave_shared_dist_utils_errors.captureWarning)("SessionRecorder.flush", /* @__PURE__ */ new Error(`SessionRecorder flush failed (dropping ${droppedCount} buffered event(s)): ${res.data.status} ${await res.data.text()}`));
227
232
  return;
228
233
  }
229
234
  }
@@ -305,7 +310,6 @@ var SessionRecorder = class {
305
310
  if (this._events.length > 0) (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(() => this._flush({ keepalive: false }));
306
311
  }
307
312
  };
308
-
309
313
  //#endregion
310
314
  exports.SessionRecorder = SessionRecorder;
311
315
  exports.analyticsOptionsFromJson = analyticsOptionsFromJson;
@@ -318,4 +322,5 @@ exports.isAnalyticsNotEnabledError = isAnalyticsNotEnabledError;
318
322
  exports.makeLegacyStorageKey = makeLegacyStorageKey;
319
323
  exports.makeStorageKey = makeStorageKey;
320
324
  exports.safeParseStoredSession = safeParseStoredSession;
325
+
321
326
  //# sourceMappingURL=session-replay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-replay.js","names":["KnownErrors","Result"],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/session-replay.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { KnownErrors } from \"@hexclave/shared/dist/known-errors\";\nimport { isBrowserLike } from \"@hexclave/shared/dist/utils/env\";\nimport { captureWarning, throwErr } from \"@hexclave/shared/dist/utils/errors\";\nimport { runAsynchronously } from \"@hexclave/shared/dist/utils/promises\";\nimport { Result } from \"@hexclave/shared/dist/utils/results\";\n\nexport type AnalyticsReplayOptions = {\n /**\n * Whether session replays are enabled.\n *\n * @default true\n */\n enabled?: boolean,\n /**\n * Whether to mask the content of all `<input>` elements.\n *\n * @default true\n */\n maskAllInputs?: boolean,\n /**\n * A CSS class name or RegExp. Elements with a matching class will be blocked\n * (replaced with a placeholder in the recording).\n *\n * @default undefined\n */\n blockClass?: string | RegExp,\n /**\n * A CSS selector string. Elements matching this selector will be blocked\n * (replaced with a placeholder in the recording).\n *\n * @default undefined\n */\n blockSelector?: string,\n};\n\nexport type AnalyticsOptions = {\n /**\n * Whether SDK-managed analytics capture is enabled.\n *\n * @default true\n */\n enabled?: boolean,\n /**\n * Options for session replay recording. Replays are enabled by default;\n * set `enabled: false` to opt out.\n */\n replays?: AnalyticsReplayOptions,\n};\n\nexport function getSessionReplayOptions(analyticsOptions: AnalyticsOptions | undefined): AnalyticsReplayOptions {\n return {\n ...analyticsOptions?.replays,\n enabled: analyticsOptions?.replays?.enabled ?? true,\n };\n}\n\n/**\n * Converts AnalyticsOptions to a JSON-safe representation.\n * RegExp blockClass values are serialized as `{ __regexp, __flags }` objects.\n * The return type is AnalyticsOptions to keep StackClientAppJson simple;\n * the actual runtime value is JSON-safe.\n */\nexport function analyticsOptionsToJson(options: AnalyticsOptions | undefined): AnalyticsOptions | undefined {\n if (!options?.replays?.blockClass) return options;\n const { blockClass, ...rest } = options.replays;\n if (!(blockClass instanceof RegExp)) return options;\n return {\n ...options,\n replays: {\n ...rest,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n blockClass: { __regexp: blockClass.source, __flags: blockClass.flags } as any,\n },\n };\n}\n\n/**\n * Reconstructs AnalyticsOptions from a JSON-deserialized value.\n * Converts `{ __regexp, __flags }` objects back to RegExp instances.\n */\nexport function analyticsOptionsFromJson(json: AnalyticsOptions | undefined): AnalyticsOptions | undefined {\n if (!json?.replays?.blockClass) return json;\n const { blockClass, ...rest } = json.replays;\n if (typeof blockClass === 'object' && '__regexp' in blockClass) {\n const bc = blockClass as unknown as { __regexp: string, __flags: string };\n return {\n ...json,\n replays: {\n ...rest,\n blockClass: new RegExp(bc.__regexp, bc.__flags),\n },\n };\n }\n return json;\n}\n\n// ---------- Recording internals ----------\n\n// Hexclave rebrand: canonical localStorage prefix (colon delimiters preserved).\nconst LOCAL_STORAGE_PREFIX = \"hexclave:session-replay:v1\";\n// Hexclave rebrand: legacy prefix — dual-read only, so a recording session active\n// across an SDK upgrade is not orphaned. Never written.\nconst LEGACY_LOCAL_STORAGE_PREFIX = \"stack:session-replay:v1\";\nconst IDLE_TTL_MS = 3 * 60 * 1000;\n\nconst FLUSH_INTERVAL_MS = 5_000;\nconst MAX_EVENTS_PER_BATCH = 200;\nconst MAX_APPROX_BYTES_PER_BATCH = 512_000;\n// The server rejects payloads > 1MB. Stay well under to account for JSON\n// envelope overhead (browser_session_id, timestamps, wrapper keys, etc.).\nconst MAX_FLUSH_PAYLOAD_BYTES = 900_000;\n\n// Reused across the emit hot path to avoid per-event allocation.\nconst textEncoder = new TextEncoder();\n\nexport type StoredSession = {\n session_id: string,\n created_at_ms: number,\n last_activity_ms: number,\n};\n\nexport function safeParseStoredSession(raw: string | null): StoredSession | null {\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw);\n if (typeof parsed !== \"object\" || parsed === null) return null;\n if (typeof parsed.session_id !== \"string\") return null;\n if (typeof parsed.created_at_ms !== \"number\") return null;\n if (typeof parsed.last_activity_ms !== \"number\") return null;\n return parsed as StoredSession;\n } catch {\n return null;\n }\n}\n\nexport function makeStorageKey(projectId: string) {\n return `${LOCAL_STORAGE_PREFIX}:${projectId}`;\n}\n\n// Hexclave rebrand: legacy key, dual-read only (never written).\nexport function makeLegacyStorageKey(projectId: string) {\n return `${LEGACY_LOCAL_STORAGE_PREFIX}:${projectId}`;\n}\n\nexport function generateUuid() {\n return crypto.randomUUID();\n}\n\nexport function getOrRotateSession(options: { key: string, legacyKey?: string, nowMs: number }): StoredSession {\n // Hexclave rebrand: prefer the new key; fall back to the legacy key so a\n // recording session active across an SDK upgrade is not orphaned.\n const existing = safeParseStoredSession(localStorage.getItem(options.key))\n ?? (options.legacyKey ? safeParseStoredSession(localStorage.getItem(options.legacyKey)) : null);\n if (existing && options.nowMs - existing.last_activity_ms <= IDLE_TTL_MS) {\n return existing;\n }\n const next: StoredSession = {\n session_id: generateUuid(),\n created_at_ms: options.nowMs,\n last_activity_ms: options.nowMs,\n };\n localStorage.setItem(options.key, JSON.stringify(next));\n return next;\n}\n\nexport type SessionRecorderDeps = {\n projectId: string,\n sendBatch: (body: string, options: { keepalive: boolean }) => Promise<Result<Response, Error>>,\n};\n\nexport function isAnalyticsNotEnabledError(error: unknown): boolean {\n return KnownErrors.AnalyticsNotEnabled.isInstance(error);\n}\n\n/**\n * Whether the error looks like a network failure caused by an ad blocker or\n * similar extension blocking analytics requests. These are expected in\n * production and should be silently ignored rather than logged as warnings.\n */\nexport function isAdBlockerNetworkError(error: unknown): boolean {\n if (error instanceof Error) {\n return error.message.includes(\"Failed to fetch\")\n || error.message.includes(\"NetworkError\")\n || error.message.includes(\"Load failed\")\n || error.message.includes(\"network connection\");\n }\n return false;\n}\n\nexport class SessionRecorder {\n private _started = false;\n private _cancelled = false;\n private _disabled = false;\n private _stopRecording: (() => void) | null = null;\n private _detachListeners: (() => void) | null = null;\n private _flushTimer: ReturnType<typeof setInterval> | null = null;\n private _events: unknown[] = [];\n private _eventSizes: number[] = [];\n private _approxBytes = 0;\n private _lastPersistActivity = 0;\n private _recording = false;\n private _rrwebModule: typeof import(\"rrweb\") | null = null;\n private _lastBrowserSessionId: string | null = null;\n private _takingSnapshot = false;\n private _flushInProgress = false;\n private readonly _sessionReplaySegmentId: string;\n private readonly _storageKey: string;\n // Hexclave rebrand: legacy key used for dual-read fallback only.\n private readonly _legacyStorageKey: string;\n private readonly _deps: SessionRecorderDeps;\n private readonly _replayOptions: AnalyticsReplayOptions;\n\n constructor(deps: SessionRecorderDeps, replayOptions: AnalyticsReplayOptions) {\n this._deps = deps;\n this._replayOptions = replayOptions;\n this._sessionReplaySegmentId = generateUuid();\n this._storageKey = makeStorageKey(deps.projectId);\n this._legacyStorageKey = makeLegacyStorageKey(deps.projectId);\n }\n\n /**\n * Starts recording. Idempotent — calling multiple times is safe.\n */\n start() {\n if (this._started) return;\n if (!isBrowserLike()) return;\n this._started = true;\n\n // Kick off rrweb recording\n runAsynchronously(() => this._startRecording(), { noErrorLogging: true });\n\n // Periodic flush\n this._flushTimer = setInterval(() => this._tick(), FLUSH_INTERVAL_MS);\n }\n\n stop() {\n this._cancelled = true;\n if (this._flushTimer !== null) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n // Flush remaining events before cleanup\n runAsynchronously(() => this._flush({ keepalive: true }));\n this._stopCurrentRecording();\n }\n\n clearBuffer() {\n this._events = [];\n this._eventSizes = [];\n this._approxBytes = 0;\n }\n\n private _persistActivity(nowMs: number): StoredSession {\n const stored = getOrRotateSession({ key: this._storageKey, legacyKey: this._legacyStorageKey, nowMs });\n if (nowMs - this._lastPersistActivity < 5_000) return stored;\n this._lastPersistActivity = nowMs;\n const updated: StoredSession = { ...stored, last_activity_ms: nowMs };\n localStorage.setItem(this._storageKey, JSON.stringify(updated));\n return stored;\n }\n\n private async _flush(options: { keepalive: boolean }) {\n if (this._disabled) return;\n if (this._events.length === 0) return;\n // Prevent concurrent in-flight HTTP requests. When a flush is already\n // in-flight, a second batch could race on the server (both call\n // findRecentSessionReplay before either upsert commits) and create\n // duplicate SessionReplay records. Events stay in _events and will be\n // picked up by the next tick or batch-size check.\n if (this._flushInProgress) return;\n\n const nowMs = Date.now();\n const stored = getOrRotateSession({ key: this._storageKey, legacyKey: this._legacyStorageKey, nowMs });\n\n // Capture all buffered events upfront (before any await) so that\n // stop() / _stopCurrentRecording() clearing this._events cannot race\n // with the async send loop below and silently discard overflow batches.\n const allEvents = this._events;\n const allSizes = this._eventSizes;\n this._events = [];\n this._eventSizes = [];\n this._approxBytes = 0;\n\n this._flushInProgress = true;\n try {\n let offset = 0;\n while (offset < allEvents.length) {\n // Build a batch that fits under the server's payload limit.\n // When _flushInProgress blocked earlier flushes, events can accumulate\n // well past MAX_APPROX_BYTES_PER_BATCH; sending them all at once would\n // exceed the server's 1MB body limit (413).\n // A single event over the limit can't be sent (rrweb events aren't splittable); drop it and move on.\n const firstSize = allSizes[offset] ?? throwErr(\"_eventSizes out of sync with _events — this should never happen\");\n if (firstSize > MAX_FLUSH_PAYLOAD_BYTES) {\n captureWarning(\n \"SessionRecorder.flush\",\n new Error(`Dropping oversized session replay event (${firstSize} bytes > ${MAX_FLUSH_PAYLOAD_BYTES} byte limit); it cannot be sent without a 413.`),\n );\n offset += 1;\n continue;\n }\n\n let batchBytes = 0;\n let batchEnd = offset;\n for (let i = offset; i < allEvents.length; i++) {\n const nextSize = allSizes[i] ?? throwErr(\"_eventSizes out of sync with _events — this should never happen\");\n if (batchBytes + nextSize > MAX_FLUSH_PAYLOAD_BYTES && batchEnd > offset) break;\n batchBytes += nextSize;\n batchEnd = i + 1;\n }\n\n const batchEvents = allEvents.slice(offset, batchEnd);\n offset = batchEnd;\n\n const batchId = generateUuid();\n const payload = {\n browser_session_id: stored.session_id,\n session_replay_segment_id: this._sessionReplaySegmentId,\n batch_id: batchId,\n started_at_ms: stored.created_at_ms,\n sent_at_ms: nowMs,\n events: batchEvents,\n };\n\n const res = await this._deps.sendBatch(\n JSON.stringify(payload),\n { keepalive: options.keepalive },\n );\n\n if (res.status === \"error\") {\n if (isAnalyticsNotEnabledError(res.error)) {\n this._disable();\n return;\n }\n // Ad blockers commonly block analytics endpoints, causing network\n // errors. These are expected and should not pollute the console.\n if (isAdBlockerNetworkError(res.error)) {\n return;\n }\n captureWarning(\"SessionRecorder.flush\", res.error);\n return;\n }\n\n if (!res.data.ok) {\n captureWarning(\"SessionRecorder.flush\", new Error(`SessionRecorder flush failed: ${res.data.status} ${await res.data.text()}`));\n return;\n }\n }\n } finally {\n this._flushInProgress = false;\n }\n }\n\n private _disable() {\n this._disabled = true;\n this.clearBuffer();\n if (this._flushTimer !== null) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n this._stopCurrentRecording();\n }\n\n private async _startRecording() {\n if (this._recording || this._cancelled) return;\n\n if (!this._rrwebModule) {\n const rrwebImport = await Result.fromPromise(import(\"rrweb\"));\n if (rrwebImport.status === \"error\") {\n console.warn(\"SessionRecorder: rrweb import failed. Is rrweb installed?\", rrwebImport.error);\n return;\n }\n this._rrwebModule = rrwebImport.data;\n }\n\n // cancelled may change during the await above\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this._cancelled) return;\n\n this._stopRecording = this._rrwebModule.record({\n emit: (event) => {\n const nowMs = Date.now();\n const stored = this._persistActivity(nowMs);\n\n // Detect session rotation: after 3+ minutes idle, getOrRotateSession\n // creates a new session ID. We need to inject a FullSnapshot so the\n // new server-side SessionReplay record is playable.\n if (this._lastBrowserSessionId === null) {\n this._lastBrowserSessionId = stored.session_id;\n } else if (stored.session_id !== this._lastBrowserSessionId && !this._takingSnapshot) {\n this._lastBrowserSessionId = stored.session_id;\n // Inject a FullSnapshot for the new session (calls emit synchronously)\n this._takingSnapshot = true;\n try {\n this._rrwebModule!.record.takeFullSnapshot();\n } finally {\n this._takingSnapshot = false;\n }\n }\n\n // Measure UTF-8 byte length to match the server's byte limit (.length counts UTF-16 units, undercounting multibyte content).\n const eventSize = textEncoder.encode(JSON.stringify(event)).byteLength;\n this._events.push(event);\n this._eventSizes.push(eventSize);\n this._approxBytes += eventSize;\n if (this._events.length >= MAX_EVENTS_PER_BATCH || this._approxBytes >= MAX_APPROX_BYTES_PER_BATCH) {\n runAsynchronously(() => this._flush({ keepalive: false }));\n }\n },\n maskAllInputs: this._replayOptions.maskAllInputs ?? true,\n ...(this._replayOptions.blockClass !== undefined ? { blockClass: this._replayOptions.blockClass } : {}),\n ...(this._replayOptions.blockSelector !== undefined ? { blockSelector: this._replayOptions.blockSelector } : {}),\n }) ?? null;\n\n this._recording = true;\n\n const onPageHide = () => {\n runAsynchronously(() => this._flush({ keepalive: true }));\n };\n window.addEventListener(\"pagehide\", onPageHide);\n document.addEventListener(\"visibilitychange\", onPageHide);\n this._detachListeners = () => {\n window.removeEventListener(\"pagehide\", onPageHide);\n document.removeEventListener(\"visibilitychange\", onPageHide);\n };\n }\n\n private _stopCurrentRecording() {\n if (this._detachListeners) {\n this._detachListeners();\n this._detachListeners = null;\n }\n if (this._stopRecording) {\n this._stopRecording();\n this._stopRecording = null;\n }\n this._events = [];\n this._eventSizes = [];\n this._approxBytes = 0;\n this._recording = false;\n }\n\n private _tick() {\n if (this._cancelled) return;\n if (this._events.length > 0) {\n runAsynchronously(() => this._flush({ keepalive: false }));\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"session-replay.js","names":["KnownErrors","Result"],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/session-replay.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { KnownErrors } from \"@hexclave/shared/dist/known-errors\";\nimport { isBrowserLike } from \"@hexclave/shared/dist/utils/env\";\nimport { captureWarning, throwErr } from \"@hexclave/shared/dist/utils/errors\";\nimport { runAsynchronously } from \"@hexclave/shared/dist/utils/promises\";\nimport { Result } from \"@hexclave/shared/dist/utils/results\";\n\nexport type AnalyticsReplayOptions = {\n /**\n * Whether session replays are enabled.\n *\n * @default true\n */\n enabled?: boolean,\n /**\n * Whether to mask the content of all `<input>` elements.\n *\n * @default true\n */\n maskAllInputs?: boolean,\n /**\n * A CSS class name or RegExp. Elements with a matching class will be blocked\n * (replaced with a placeholder in the recording).\n *\n * @default undefined\n */\n blockClass?: string | RegExp,\n /**\n * A CSS selector string. Elements matching this selector will be blocked\n * (replaced with a placeholder in the recording).\n *\n * @default undefined\n */\n blockSelector?: string,\n};\n\nexport type AnalyticsOptions = {\n /**\n * Whether SDK-managed analytics capture is enabled.\n *\n * @default true\n */\n enabled?: boolean,\n /**\n * Options for session replay recording. Replays are enabled by default;\n * set `enabled: false` to opt out.\n */\n replays?: AnalyticsReplayOptions,\n};\n\nexport function getSessionReplayOptions(analyticsOptions: AnalyticsOptions | undefined): AnalyticsReplayOptions {\n return {\n ...analyticsOptions?.replays,\n enabled: analyticsOptions?.replays?.enabled ?? true,\n };\n}\n\n/**\n * Converts AnalyticsOptions to a JSON-safe representation.\n * RegExp blockClass values are serialized as `{ __regexp, __flags }` objects.\n * The return type is AnalyticsOptions to keep StackClientAppJson simple;\n * the actual runtime value is JSON-safe.\n */\nexport function analyticsOptionsToJson(options: AnalyticsOptions | undefined): AnalyticsOptions | undefined {\n if (!options?.replays?.blockClass) return options;\n const { blockClass, ...rest } = options.replays;\n if (!(blockClass instanceof RegExp)) return options;\n return {\n ...options,\n replays: {\n ...rest,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n blockClass: { __regexp: blockClass.source, __flags: blockClass.flags } as any,\n },\n };\n}\n\n/**\n * Reconstructs AnalyticsOptions from a JSON-deserialized value.\n * Converts `{ __regexp, __flags }` objects back to RegExp instances.\n */\nexport function analyticsOptionsFromJson(json: AnalyticsOptions | undefined): AnalyticsOptions | undefined {\n if (!json?.replays?.blockClass) return json;\n const { blockClass, ...rest } = json.replays;\n if (typeof blockClass === 'object' && '__regexp' in blockClass) {\n const bc = blockClass as unknown as { __regexp: string, __flags: string };\n return {\n ...json,\n replays: {\n ...rest,\n blockClass: new RegExp(bc.__regexp, bc.__flags),\n },\n };\n }\n return json;\n}\n\n// ---------- Recording internals ----------\n\n// Hexclave rebrand: canonical localStorage prefix (colon delimiters preserved).\nconst LOCAL_STORAGE_PREFIX = \"hexclave:session-replay:v1\";\n// Hexclave rebrand: legacy prefix — dual-read only, so a recording session active\n// across an SDK upgrade is not orphaned. Never written.\nconst LEGACY_LOCAL_STORAGE_PREFIX = \"stack:session-replay:v1\";\nconst IDLE_TTL_MS = 3 * 60 * 1000;\n\nconst FLUSH_INTERVAL_MS = 5_000;\nconst MAX_EVENTS_PER_BATCH = 200;\nconst MAX_APPROX_BYTES_PER_BATCH = 512_000;\n// Uncompressed per-batch target; the transport gzips before sending.\nconst MAX_BATCH_UNCOMPRESSED_BYTES = 900_000;\n// The server gunzips the whole batch (envelope + events) and rejects anything\n// whose decompressed size exceeds MAX_DECOMPRESSED_BYTES (8 MiB) in the backend\n// route. Since a single oversized event is sent alone, reserve headroom for the\n// JSON envelope (session/batch ids, timestamps, wrapper keys) so an event that\n// passes this check can't render a batch that trips the server's cap by a few\n// hundred bytes. Keep the server's MAX_DECOMPRESSED_BYTES >= this + the margin.\nconst BATCH_ENVELOPE_OVERHEAD_BYTES = 1024;\nconst MAX_SINGLE_EVENT_BYTES = 8 * 1024 * 1024 - BATCH_ENVELOPE_OVERHEAD_BYTES;\n\n// Reused across the emit hot path to avoid per-event allocation.\nconst textEncoder = new TextEncoder();\n\nexport type StoredSession = {\n session_id: string,\n created_at_ms: number,\n last_activity_ms: number,\n};\n\nexport function safeParseStoredSession(raw: string | null): StoredSession | null {\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw);\n if (typeof parsed !== \"object\" || parsed === null) return null;\n if (typeof parsed.session_id !== \"string\") return null;\n if (typeof parsed.created_at_ms !== \"number\") return null;\n if (typeof parsed.last_activity_ms !== \"number\") return null;\n return parsed as StoredSession;\n } catch {\n return null;\n }\n}\n\nexport function makeStorageKey(projectId: string) {\n return `${LOCAL_STORAGE_PREFIX}:${projectId}`;\n}\n\n// Hexclave rebrand: legacy key, dual-read only (never written).\nexport function makeLegacyStorageKey(projectId: string) {\n return `${LEGACY_LOCAL_STORAGE_PREFIX}:${projectId}`;\n}\n\nexport function generateUuid() {\n return crypto.randomUUID();\n}\n\nexport function getOrRotateSession(options: { key: string, legacyKey?: string, nowMs: number }): StoredSession {\n // Hexclave rebrand: prefer the new key; fall back to the legacy key so a\n // recording session active across an SDK upgrade is not orphaned.\n const existing = safeParseStoredSession(localStorage.getItem(options.key))\n ?? (options.legacyKey ? safeParseStoredSession(localStorage.getItem(options.legacyKey)) : null);\n if (existing && options.nowMs - existing.last_activity_ms <= IDLE_TTL_MS) {\n return existing;\n }\n const next: StoredSession = {\n session_id: generateUuid(),\n created_at_ms: options.nowMs,\n last_activity_ms: options.nowMs,\n };\n localStorage.setItem(options.key, JSON.stringify(next));\n return next;\n}\n\nexport type SessionRecorderDeps = {\n projectId: string,\n sendBatch: (body: string, options: { keepalive: boolean }) => Promise<Result<Response, Error>>,\n};\n\nexport function isAnalyticsNotEnabledError(error: unknown): boolean {\n return KnownErrors.AnalyticsNotEnabled.isInstance(error);\n}\n\n/**\n * Whether the error looks like a network failure caused by an ad blocker or\n * similar extension blocking analytics requests. These are expected in\n * production and should be silently ignored rather than logged as warnings.\n */\nexport function isAdBlockerNetworkError(error: unknown): boolean {\n if (error instanceof Error) {\n return error.message.includes(\"Failed to fetch\")\n || error.message.includes(\"NetworkError\")\n || error.message.includes(\"Load failed\")\n || error.message.includes(\"network connection\");\n }\n return false;\n}\n\nexport class SessionRecorder {\n private _started = false;\n private _cancelled = false;\n private _disabled = false;\n private _stopRecording: (() => void) | null = null;\n private _detachListeners: (() => void) | null = null;\n private _flushTimer: ReturnType<typeof setInterval> | null = null;\n private _events: unknown[] = [];\n private _eventSizes: number[] = [];\n private _approxBytes = 0;\n private _lastPersistActivity = 0;\n private _recording = false;\n private _rrwebModule: typeof import(\"rrweb\") | null = null;\n private _lastBrowserSessionId: string | null = null;\n private _takingSnapshot = false;\n private _flushInProgress = false;\n private readonly _sessionReplaySegmentId: string;\n private readonly _storageKey: string;\n // Hexclave rebrand: legacy key used for dual-read fallback only.\n private readonly _legacyStorageKey: string;\n private readonly _deps: SessionRecorderDeps;\n private readonly _replayOptions: AnalyticsReplayOptions;\n\n constructor(deps: SessionRecorderDeps, replayOptions: AnalyticsReplayOptions) {\n this._deps = deps;\n this._replayOptions = replayOptions;\n this._sessionReplaySegmentId = generateUuid();\n this._storageKey = makeStorageKey(deps.projectId);\n this._legacyStorageKey = makeLegacyStorageKey(deps.projectId);\n }\n\n /**\n * Starts recording. Idempotent — calling multiple times is safe.\n */\n start() {\n if (this._started) return;\n if (!isBrowserLike()) return;\n this._started = true;\n\n // Kick off rrweb recording\n runAsynchronously(() => this._startRecording(), { noErrorLogging: true });\n\n // Periodic flush\n this._flushTimer = setInterval(() => this._tick(), FLUSH_INTERVAL_MS);\n }\n\n stop() {\n this._cancelled = true;\n if (this._flushTimer !== null) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n // Flush remaining events before cleanup\n runAsynchronously(() => this._flush({ keepalive: true }));\n this._stopCurrentRecording();\n }\n\n clearBuffer() {\n this._events = [];\n this._eventSizes = [];\n this._approxBytes = 0;\n }\n\n private _persistActivity(nowMs: number): StoredSession {\n const stored = getOrRotateSession({ key: this._storageKey, legacyKey: this._legacyStorageKey, nowMs });\n if (nowMs - this._lastPersistActivity < 5_000) return stored;\n this._lastPersistActivity = nowMs;\n const updated: StoredSession = { ...stored, last_activity_ms: nowMs };\n localStorage.setItem(this._storageKey, JSON.stringify(updated));\n return stored;\n }\n\n private async _flush(options: { keepalive: boolean }) {\n if (this._disabled) return;\n if (this._events.length === 0) return;\n // Prevent concurrent in-flight HTTP requests. When a flush is already\n // in-flight, a second batch could race on the server (both call\n // findRecentSessionReplay before either upsert commits) and create\n // duplicate SessionReplay records. Events stay in _events and will be\n // picked up by the next tick or batch-size check.\n if (this._flushInProgress) return;\n\n const nowMs = Date.now();\n const stored = getOrRotateSession({ key: this._storageKey, legacyKey: this._legacyStorageKey, nowMs });\n\n // Capture all buffered events upfront (before any await) so that\n // stop() / _stopCurrentRecording() clearing this._events cannot race\n // with the async send loop below and silently discard overflow batches.\n const allEvents = this._events;\n const allSizes = this._eventSizes;\n this._events = [];\n this._eventSizes = [];\n this._approxBytes = 0;\n\n // Non-keepalive flushes gzip before sending, so a single event up to the\n // server's decompressed budget can be sent alone. Keepalive flushes\n // (pagehide/visibilitychange/stop) skip async gzip to dispatch before page\n // tear-down, so they're bound by the server's raw ~1MB body limit; cap their\n // single-event size at the uncompressed batch target so an oversized event\n // is dropped rather than 413-ing the flush and losing the events behind it.\n const maxSingleEventBytes = options.keepalive ? MAX_BATCH_UNCOMPRESSED_BYTES : MAX_SINGLE_EVENT_BYTES;\n\n this._flushInProgress = true;\n try {\n let offset = 0;\n while (offset < allEvents.length) {\n // A single event over the limit can't be sent (rrweb events aren't\n // splittable); drop it and move on to the rest of the buffer.\n const firstSize = allSizes[offset] ?? throwErr(\"_eventSizes out of sync with _events — this should never happen\");\n if (firstSize > maxSingleEventBytes) {\n captureWarning(\n \"SessionRecorder.flush\",\n new Error(`Dropping oversized session replay event (${firstSize} bytes > ${maxSingleEventBytes} byte limit); it cannot be sent without exceeding the server's body limit.`),\n );\n offset += 1;\n continue;\n }\n\n let batchBytes = 0;\n let batchEnd = offset;\n for (let i = offset; i < allEvents.length; i++) {\n const nextSize = allSizes[i] ?? throwErr(\"_eventSizes out of sync with _events — this should never happen\");\n if (batchBytes + nextSize > MAX_BATCH_UNCOMPRESSED_BYTES && batchEnd > offset) break;\n batchBytes += nextSize;\n batchEnd = i + 1;\n }\n\n const batchEvents = allEvents.slice(offset, batchEnd);\n offset = batchEnd;\n\n const batchId = generateUuid();\n const payload = {\n browser_session_id: stored.session_id,\n session_replay_segment_id: this._sessionReplaySegmentId,\n batch_id: batchId,\n started_at_ms: stored.created_at_ms,\n sent_at_ms: nowMs,\n events: batchEvents,\n };\n\n const res = await this._deps.sendBatch(\n JSON.stringify(payload),\n { keepalive: options.keepalive },\n );\n\n if (res.status === \"error\") {\n if (isAnalyticsNotEnabledError(res.error)) {\n this._disable();\n return;\n }\n // Ad blockers commonly block analytics endpoints, causing network\n // errors. These are expected and should not pollute the console.\n if (isAdBlockerNetworkError(res.error)) {\n return;\n }\n captureWarning(\"SessionRecorder.flush\", res.error);\n return;\n }\n\n if (!res.data.ok) {\n // On any non-2xx we stop the loop, so this batch and every event still\n // buffered behind it are dropped (not retried). Count them for the log.\n const droppedCount = batchEvents.length + (allEvents.length - offset);\n if (res.data.status === 413) {\n // The payload exceeded the server's body limit despite the client-side\n // size caps — most likely a single poorly-compressible event (e.g. an\n // embedded image/canvas) that gzipped above the wire limit. Distinct\n // from other failures because the caps are supposed to prevent it.\n captureWarning(\n \"SessionRecorder.flush\",\n new Error(`Session replay batch rejected with 413 (payload too large) despite client-side size caps; dropping ${droppedCount} buffered event(s). A poorly-compressible event likely exceeded the server's body limit after gzip.`),\n );\n return;\n }\n captureWarning(\"SessionRecorder.flush\", new Error(`SessionRecorder flush failed (dropping ${droppedCount} buffered event(s)): ${res.data.status} ${await res.data.text()}`));\n return;\n }\n }\n } finally {\n this._flushInProgress = false;\n }\n }\n\n private _disable() {\n this._disabled = true;\n this.clearBuffer();\n if (this._flushTimer !== null) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n this._stopCurrentRecording();\n }\n\n private async _startRecording() {\n if (this._recording || this._cancelled) return;\n\n if (!this._rrwebModule) {\n const rrwebImport = await Result.fromPromise(import(\"rrweb\"));\n if (rrwebImport.status === \"error\") {\n console.warn(\"SessionRecorder: rrweb import failed. Is rrweb installed?\", rrwebImport.error);\n return;\n }\n this._rrwebModule = rrwebImport.data;\n }\n\n // cancelled may change during the await above\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this._cancelled) return;\n\n this._stopRecording = this._rrwebModule.record({\n emit: (event) => {\n const nowMs = Date.now();\n const stored = this._persistActivity(nowMs);\n\n // Detect session rotation: after 3+ minutes idle, getOrRotateSession\n // creates a new session ID. We need to inject a FullSnapshot so the\n // new server-side SessionReplay record is playable.\n if (this._lastBrowserSessionId === null) {\n this._lastBrowserSessionId = stored.session_id;\n } else if (stored.session_id !== this._lastBrowserSessionId && !this._takingSnapshot) {\n this._lastBrowserSessionId = stored.session_id;\n // Inject a FullSnapshot for the new session (calls emit synchronously)\n this._takingSnapshot = true;\n try {\n this._rrwebModule!.record.takeFullSnapshot();\n } finally {\n this._takingSnapshot = false;\n }\n }\n\n // Measure UTF-8 byte length to match the server's byte limit (.length counts UTF-16 units, undercounting multibyte content).\n const eventSize = textEncoder.encode(JSON.stringify(event)).byteLength;\n this._events.push(event);\n this._eventSizes.push(eventSize);\n this._approxBytes += eventSize;\n if (this._events.length >= MAX_EVENTS_PER_BATCH || this._approxBytes >= MAX_APPROX_BYTES_PER_BATCH) {\n runAsynchronously(() => this._flush({ keepalive: false }));\n }\n },\n maskAllInputs: this._replayOptions.maskAllInputs ?? true,\n ...(this._replayOptions.blockClass !== undefined ? { blockClass: this._replayOptions.blockClass } : {}),\n ...(this._replayOptions.blockSelector !== undefined ? { blockSelector: this._replayOptions.blockSelector } : {}),\n }) ?? null;\n\n this._recording = true;\n\n const onPageHide = () => {\n runAsynchronously(() => this._flush({ keepalive: true }));\n };\n window.addEventListener(\"pagehide\", onPageHide);\n document.addEventListener(\"visibilitychange\", onPageHide);\n this._detachListeners = () => {\n window.removeEventListener(\"pagehide\", onPageHide);\n document.removeEventListener(\"visibilitychange\", onPageHide);\n };\n }\n\n private _stopCurrentRecording() {\n if (this._detachListeners) {\n this._detachListeners();\n this._detachListeners = null;\n }\n if (this._stopRecording) {\n this._stopRecording();\n this._stopRecording = null;\n }\n this._events = [];\n this._eventSizes = [];\n this._approxBytes = 0;\n this._recording = false;\n }\n\n private _tick() {\n if (this._cancelled) return;\n if (this._events.length > 0) {\n runAsynchronously(() => this._flush({ keepalive: false }));\n }\n }\n}\n"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- const require_chunk = require('../../../../chunk-BE-pF4vm.js');
1
+ const require_rolldown_runtime = require("../../../../rolldown-runtime-D6vf50IK.js");
2
+ let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/errors");
3
+ _hexclave_shared_dist_utils_errors = require_rolldown_runtime.__toESM(_hexclave_shared_dist_utils_errors);
2
4
  let vitest = require("vitest");
3
5
  let _hexclave_shared_dist_utils_results = require("@hexclave/shared/dist/utils/results");
4
6
  let _hexclave_shared_dist_known_errors = require("@hexclave/shared/dist/known-errors");
5
7
  let __session_replay_js = require("./session-replay.js");
6
-
7
8
  //#region src/lib/hexclave-app/apps/implementations/session-replay.test.ts
8
9
  // @vitest-environment jsdom
9
10
  (0, vitest.describe)("session replay options", () => {
@@ -166,6 +167,137 @@ let __session_replay_js = require("./session-replay.js");
166
167
  vitest.vi.useRealTimers();
167
168
  }
168
169
  });
170
+ (0, vitest.it)("drops a single event that exceeds the server's decompressed budget", async () => {
171
+ vitest.vi.useFakeTimers();
172
+ const storageKey = `hexclave:session-replay:v1:test-project`;
173
+ localStorage.setItem(storageKey, JSON.stringify({
174
+ session_id: "test-session",
175
+ created_at_ms: Date.now(),
176
+ last_activity_ms: Date.now()
177
+ }));
178
+ const sentBodies = [];
179
+ const recorder = new __session_replay_js.SessionRecorder({
180
+ projectId: "test-project",
181
+ sendBatch: async (body) => {
182
+ sentBodies.push(body);
183
+ return _hexclave_shared_dist_utils_results.Result.ok(new Response("ok", { status: 200 }));
184
+ }
185
+ }, {});
186
+ try {
187
+ const hugeEvent = {
188
+ type: 2,
189
+ timestamp: Date.now(),
190
+ data: "z".repeat(9e6)
191
+ };
192
+ const smallEvent = {
193
+ type: 3,
194
+ timestamp: Date.now(),
195
+ data: "ok"
196
+ };
197
+ const sizeOf = (e) => JSON.stringify(e).length;
198
+ recorder._events = [hugeEvent, smallEvent];
199
+ recorder._eventSizes = [sizeOf(hugeEvent), sizeOf(smallEvent)];
200
+ recorder._approxBytes = sizeOf(hugeEvent) + sizeOf(smallEvent);
201
+ recorder._tick();
202
+ await vitest.vi.advanceTimersByTimeAsync(0);
203
+ (0, vitest.expect)(sentBodies).toHaveLength(1);
204
+ const batch = JSON.parse(sentBodies[0]);
205
+ (0, vitest.expect)(batch.events).toHaveLength(1);
206
+ (0, vitest.expect)(batch.events[0].type).toBe(3);
207
+ } finally {
208
+ recorder.stop();
209
+ localStorage.removeItem(storageKey);
210
+ vitest.vi.useRealTimers();
211
+ }
212
+ });
213
+ (0, vitest.it)("on a keepalive flush, drops an event over the uncompressed batch target (it can't be gzipped before page tear-down)", async () => {
214
+ vitest.vi.useFakeTimers();
215
+ const storageKey = `hexclave:session-replay:v1:test-project`;
216
+ localStorage.setItem(storageKey, JSON.stringify({
217
+ session_id: "test-session",
218
+ created_at_ms: Date.now(),
219
+ last_activity_ms: Date.now()
220
+ }));
221
+ const sentBodies = [];
222
+ const recorder = new __session_replay_js.SessionRecorder({
223
+ projectId: "test-project",
224
+ sendBatch: async (body) => {
225
+ sentBodies.push(body);
226
+ return _hexclave_shared_dist_utils_results.Result.ok(new Response("ok", { status: 200 }));
227
+ }
228
+ }, {});
229
+ try {
230
+ const midEvent = {
231
+ type: 2,
232
+ timestamp: Date.now(),
233
+ data: "z".repeat(2e6)
234
+ };
235
+ const smallEvent = {
236
+ type: 3,
237
+ timestamp: Date.now(),
238
+ data: "ok"
239
+ };
240
+ const sizeOf = (e) => new TextEncoder().encode(JSON.stringify(e)).byteLength;
241
+ recorder._events = [midEvent, smallEvent];
242
+ recorder._eventSizes = [sizeOf(midEvent), sizeOf(smallEvent)];
243
+ recorder._approxBytes = sizeOf(midEvent) + sizeOf(smallEvent);
244
+ await recorder._flush({ keepalive: true });
245
+ (0, vitest.expect)(sentBodies).toHaveLength(1);
246
+ const batch = JSON.parse(sentBodies[0]);
247
+ (0, vitest.expect)(batch.events).toHaveLength(1);
248
+ (0, vitest.expect)(batch.events[0].type).toBe(3);
249
+ } finally {
250
+ recorder.stop();
251
+ localStorage.removeItem(storageKey);
252
+ vitest.vi.useRealTimers();
253
+ }
254
+ });
255
+ (0, vitest.it)("logs a distinct 413 warning and drops the buffered events when the server rejects a batch as too large", async () => {
256
+ vitest.vi.useFakeTimers();
257
+ const captureWarningSpy = vitest.vi.spyOn(_hexclave_shared_dist_utils_errors, "captureWarning").mockImplementation(() => {});
258
+ const storageKey = `hexclave:session-replay:v1:test-project`;
259
+ localStorage.setItem(storageKey, JSON.stringify({
260
+ session_id: "test-session",
261
+ created_at_ms: Date.now(),
262
+ last_activity_ms: Date.now()
263
+ }));
264
+ let calls = 0;
265
+ const recorder = new __session_replay_js.SessionRecorder({
266
+ projectId: "test-project",
267
+ sendBatch: async () => {
268
+ calls += 1;
269
+ return _hexclave_shared_dist_utils_results.Result.ok(new Response("payload too large", { status: 413 }));
270
+ }
271
+ }, {});
272
+ try {
273
+ const eventA = {
274
+ type: 3,
275
+ timestamp: Date.now(),
276
+ data: "a"
277
+ };
278
+ const eventB = {
279
+ type: 3,
280
+ timestamp: Date.now(),
281
+ data: "b"
282
+ };
283
+ const sizeOf = (e) => new TextEncoder().encode(JSON.stringify(e)).byteLength;
284
+ recorder._events = [eventA, eventB];
285
+ recorder._eventSizes = [sizeOf(eventA), sizeOf(eventB)];
286
+ recorder._approxBytes = sizeOf(eventA) + sizeOf(eventB);
287
+ await recorder._flush({ keepalive: false });
288
+ (0, vitest.expect)(calls).toBe(1);
289
+ (0, vitest.expect)(captureWarningSpy).toHaveBeenCalledTimes(1);
290
+ const warned = captureWarningSpy.mock.calls[0]?.[1];
291
+ (0, vitest.expect)(warned).toBeInstanceOf(Error);
292
+ (0, vitest.expect)(warned.message).toContain("413");
293
+ (0, vitest.expect)(warned.message).toContain("2 buffered event");
294
+ } finally {
295
+ recorder.stop();
296
+ localStorage.removeItem(storageKey);
297
+ captureWarningSpy.mockRestore();
298
+ vitest.vi.useRealTimers();
299
+ }
300
+ });
169
301
  (0, vitest.it)("silently disables when client interface returns ANALYTICS_NOT_ENABLED as an error", async () => {
170
302
  vitest.vi.useFakeTimers();
171
303
  const storageKey = `hexclave:session-replay:v1:test-project`;
@@ -213,6 +345,6 @@ let __session_replay_js = require("./session-replay.js");
213
345
  }
214
346
  });
215
347
  });
216
-
217
348
  //#endregion
349
+
218
350
  //# sourceMappingURL=session-replay.test.js.map