@hexclave/js 1.0.2 → 1.0.5

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 (450) hide show
  1. package/dist/dev-tool/dev-tool-core.d.ts +1 -1
  2. package/dist/dev-tool/dev-tool-core.js +11 -11
  3. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  4. package/dist/dev-tool/dev-tool-styles.d.ts +1 -1
  5. package/dist/dev-tool/dev-tool-styles.js +371 -371
  6. package/dist/dev-tool/dev-tool-styles.js.map +1 -1
  7. package/dist/dev-tool/dev-tool-trigger-position.js.map +1 -1
  8. package/dist/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  9. package/dist/dev-tool/index.d.ts +4 -4
  10. package/dist/dev-tool/index.js +4 -4
  11. package/dist/dev-tool/index.js.map +1 -1
  12. package/dist/esm/dev-tool/dev-tool-core.d.ts +1 -1
  13. package/dist/esm/dev-tool/dev-tool-core.js +10 -10
  14. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  15. package/dist/esm/dev-tool/dev-tool-styles.d.ts +1 -1
  16. package/dist/esm/dev-tool/dev-tool-styles.js +371 -371
  17. package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -1
  18. package/dist/esm/dev-tool/dev-tool-trigger-position.js.map +1 -1
  19. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  20. package/dist/esm/dev-tool/index.d.ts +4 -4
  21. package/dist/esm/dev-tool/index.js +4 -4
  22. package/dist/esm/dev-tool/index.js.map +1 -1
  23. package/dist/esm/index.d.ts +1 -1
  24. package/dist/esm/index.js +1 -1
  25. package/dist/esm/integrations/convex/component/convex.config.js.map +1 -1
  26. package/dist/esm/integrations/convex.js +1 -1
  27. package/dist/esm/integrations/convex.js.map +1 -1
  28. package/dist/esm/lib/auth.js.map +1 -1
  29. package/dist/esm/lib/auth.test.js.map +1 -1
  30. package/dist/esm/lib/cookie.js.map +1 -1
  31. package/dist/esm/lib/env.js.map +1 -1
  32. package/dist/esm/lib/{stack-app → hexclave-app}/api-keys/index.d.ts +1 -1
  33. package/dist/esm/lib/hexclave-app/api-keys/index.d.ts.map +1 -0
  34. package/dist/esm/lib/{stack-app → hexclave-app}/api-keys/index.js +1 -1
  35. package/dist/esm/lib/hexclave-app/api-keys/index.js.map +1 -0
  36. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.d.ts +6 -6
  37. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  38. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.js +7 -7
  39. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -0
  40. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.js +2 -2
  41. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  42. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.d.ts +13 -13
  43. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  44. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.js +23 -30
  45. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -0
  46. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -1
  47. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  48. package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/common.d.ts +3 -3
  49. package/dist/esm/lib/hexclave-app/apps/implementations/common.d.ts.map +1 -0
  50. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/common.js +6 -6
  51. package/dist/esm/lib/hexclave-app/apps/implementations/common.js.map +1 -0
  52. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.d.ts +1 -1
  53. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -0
  54. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.js +1 -1
  55. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -0
  56. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.js +1 -1
  57. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -0
  58. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts +9 -0
  59. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -0
  60. package/dist/esm/lib/hexclave-app/apps/implementations/index.js +27 -0
  61. package/dist/esm/lib/hexclave-app/apps/implementations/index.js.map +1 -0
  62. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.d.ts +1 -1
  63. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.d.ts.map +1 -0
  64. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.js +1 -1
  65. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -0
  66. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.d.ts +4 -4
  67. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +1 -0
  68. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.js +5 -5
  69. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -0
  70. package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts +1 -1
  71. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -0
  72. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.js +1 -1
  73. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  74. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.js +1 -1
  75. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  76. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.d.ts +1 -1
  77. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -0
  78. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.js +1 -1
  79. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -0
  80. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.js +1 -1
  81. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -0
  82. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.d.ts +1 -1
  83. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -0
  84. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.js +3 -3
  85. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -0
  86. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.d.ts +4 -4
  87. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -0
  88. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.js +3 -3
  89. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -0
  90. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.d.ts +1 -1
  91. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.d.ts.map +1 -0
  92. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.js +3 -3
  93. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -0
  94. package/dist/esm/lib/{stack-app → hexclave-app}/common.d.ts +7 -7
  95. package/dist/esm/lib/hexclave-app/common.d.ts.map +1 -0
  96. package/dist/esm/lib/hexclave-app/common.js +7 -0
  97. package/dist/esm/lib/hexclave-app/common.js.map +1 -0
  98. package/dist/{lib/stack-app → esm/lib/hexclave-app}/connected-accounts/index.d.ts +1 -1
  99. package/dist/esm/lib/hexclave-app/connected-accounts/index.d.ts.map +1 -0
  100. package/dist/{lib/stack-app → esm/lib/hexclave-app}/contact-channels/index.d.ts +1 -1
  101. package/dist/esm/lib/hexclave-app/contact-channels/index.d.ts.map +1 -0
  102. package/dist/esm/lib/{stack-app → hexclave-app}/contact-channels/index.js +1 -1
  103. package/dist/esm/lib/hexclave-app/contact-channels/index.js.map +1 -0
  104. package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.d.ts +1 -1
  105. package/dist/esm/lib/hexclave-app/customers/index.d.ts.map +1 -0
  106. package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.d.ts +1 -1
  107. package/dist/esm/lib/hexclave-app/data-vault/index.d.ts.map +1 -0
  108. package/dist/esm/lib/{stack-app → hexclave-app}/email/index.d.ts +1 -1
  109. package/dist/esm/lib/hexclave-app/email/index.d.ts.map +1 -0
  110. package/dist/{lib/stack-app → esm/lib/hexclave-app}/email-templates/index.d.ts +1 -1
  111. package/dist/esm/lib/hexclave-app/email-templates/index.d.ts.map +1 -0
  112. package/dist/esm/lib/{stack-app → hexclave-app}/email-templates/index.js +1 -1
  113. package/dist/esm/lib/hexclave-app/email-templates/index.js.map +1 -0
  114. package/dist/esm/lib/{stack-app → hexclave-app}/index.d.ts +2 -2
  115. package/dist/esm/lib/{stack-app → hexclave-app}/index.js +2 -2
  116. package/dist/{lib/stack-app → esm/lib/hexclave-app}/internal-api-keys/index.d.ts +1 -1
  117. package/dist/esm/lib/hexclave-app/internal-api-keys/index.d.ts.map +1 -0
  118. package/dist/esm/lib/{stack-app → hexclave-app}/internal-api-keys/index.js +1 -1
  119. package/dist/esm/lib/hexclave-app/internal-api-keys/index.js.map +1 -0
  120. package/dist/{lib/stack-app → esm/lib/hexclave-app}/notification-categories/index.d.ts +1 -1
  121. package/dist/esm/lib/hexclave-app/notification-categories/index.d.ts.map +1 -0
  122. package/dist/esm/lib/{stack-app → hexclave-app}/permissions/index.d.ts +1 -1
  123. package/dist/esm/lib/hexclave-app/permissions/index.d.ts.map +1 -0
  124. package/dist/esm/lib/{stack-app → hexclave-app}/permissions/index.js +1 -1
  125. package/dist/esm/lib/hexclave-app/permissions/index.js.map +1 -0
  126. package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.d.ts +1 -1
  127. package/dist/esm/lib/hexclave-app/project-configs/index.d.ts.map +1 -0
  128. package/dist/esm/lib/{stack-app → hexclave-app}/projects/index.d.ts +1 -1
  129. package/dist/esm/lib/hexclave-app/projects/index.d.ts.map +1 -0
  130. package/dist/esm/lib/{stack-app → hexclave-app}/projects/index.js +1 -1
  131. package/dist/esm/lib/hexclave-app/projects/index.js.map +1 -0
  132. package/dist/{lib/stack-app → esm/lib/hexclave-app}/session-replays/index.d.ts +1 -1
  133. package/dist/esm/lib/hexclave-app/session-replays/index.d.ts.map +1 -0
  134. package/dist/esm/lib/{stack-app → hexclave-app}/teams/index.d.ts +1 -1
  135. package/dist/esm/lib/hexclave-app/teams/index.d.ts.map +1 -0
  136. package/dist/esm/lib/{stack-app → hexclave-app}/teams/index.js +1 -1
  137. package/dist/esm/lib/hexclave-app/teams/index.js.map +1 -0
  138. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.d.ts +1 -1
  139. package/dist/esm/lib/hexclave-app/url-targets.d.ts.map +1 -0
  140. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.js +2 -2
  141. package/dist/esm/lib/hexclave-app/url-targets.js.map +1 -0
  142. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.js +1 -1
  143. package/dist/esm/lib/hexclave-app/url-targets.test.js.map +1 -0
  144. package/dist/esm/lib/{stack-app → hexclave-app}/users/index.d.ts +1 -1
  145. package/dist/esm/lib/hexclave-app/users/index.d.ts.map +1 -0
  146. package/dist/esm/lib/{stack-app → hexclave-app}/users/index.js +1 -1
  147. package/dist/esm/lib/hexclave-app/users/index.js.map +1 -0
  148. package/dist/esm/utils/url.js.map +1 -1
  149. package/dist/index.d.ts +15 -15
  150. package/dist/index.js +3 -3
  151. package/dist/integrations/convex/component/convex.config.js.map +1 -1
  152. package/dist/integrations/convex.js +2 -2
  153. package/dist/integrations/convex.js.map +1 -1
  154. package/dist/lib/auth.js.map +1 -1
  155. package/dist/lib/auth.test.js.map +1 -1
  156. package/dist/lib/cookie.js.map +1 -1
  157. package/dist/lib/env.js.map +1 -1
  158. package/dist/lib/{stack-app → hexclave-app}/api-keys/index.d.ts +1 -1
  159. package/dist/{esm/lib/stack-app → lib/hexclave-app}/api-keys/index.d.ts.map +1 -1
  160. package/dist/lib/{stack-app → hexclave-app}/api-keys/index.js +1 -1
  161. package/dist/lib/hexclave-app/api-keys/index.js.map +1 -0
  162. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.d.ts +6 -6
  163. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  164. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.js +5 -5
  165. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -0
  166. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.js +2 -2
  167. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  168. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.d.ts +13 -13
  169. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  170. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.js +22 -29
  171. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -0
  172. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -1
  173. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  174. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/common.d.ts +3 -3
  175. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/common.d.ts.map +1 -1
  176. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/common.js +5 -5
  177. package/dist/lib/hexclave-app/apps/implementations/common.js.map +1 -0
  178. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.d.ts +1 -1
  179. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/event-tracker.d.ts.map +1 -1
  180. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.js +1 -1
  181. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -0
  182. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.js +1 -1
  183. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -0
  184. package/dist/lib/hexclave-app/apps/implementations/index.d.ts +9 -0
  185. package/dist/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -0
  186. package/dist/lib/hexclave-app/apps/implementations/index.js +31 -0
  187. package/dist/lib/hexclave-app/apps/implementations/index.js.map +1 -0
  188. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.d.ts +1 -1
  189. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/redirect-page-urls.d.ts.map +1 -1
  190. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.js +1 -1
  191. package/dist/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -0
  192. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.d.ts +4 -4
  193. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/server-app-impl.d.ts.map +1 -1
  194. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.js +4 -4
  195. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -0
  196. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts +1 -1
  197. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts.map +1 -1
  198. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.js +1 -1
  199. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  200. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.js +1 -1
  201. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  202. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.d.ts +1 -1
  203. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-replay.d.ts.map +1 -1
  204. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.js +1 -1
  205. package/dist/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -0
  206. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.js +1 -1
  207. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -0
  208. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.d.ts +1 -1
  209. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/admin-app.d.ts.map +1 -1
  210. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.js +2 -2
  211. package/dist/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -0
  212. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.d.ts +4 -4
  213. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/client-app.d.ts.map +1 -1
  214. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.js +2 -2
  215. package/dist/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -0
  216. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.d.ts +1 -1
  217. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/server-app.d.ts.map +1 -1
  218. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.js +2 -2
  219. package/dist/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -0
  220. package/dist/lib/{stack-app → hexclave-app}/common.d.ts +7 -7
  221. package/dist/{esm/lib/stack-app → lib/hexclave-app}/common.d.ts.map +1 -1
  222. package/dist/lib/hexclave-app/common.js +9 -0
  223. package/dist/lib/hexclave-app/common.js.map +1 -0
  224. package/dist/{esm/lib/stack-app → lib/hexclave-app}/connected-accounts/index.d.ts +1 -1
  225. package/dist/{esm/lib/stack-app → lib/hexclave-app}/connected-accounts/index.d.ts.map +1 -1
  226. package/dist/{esm/lib/stack-app → lib/hexclave-app}/contact-channels/index.d.ts +1 -1
  227. package/dist/{esm/lib/stack-app → lib/hexclave-app}/contact-channels/index.d.ts.map +1 -1
  228. package/dist/lib/{stack-app → hexclave-app}/contact-channels/index.js +1 -1
  229. package/dist/lib/hexclave-app/contact-channels/index.js.map +1 -0
  230. package/dist/lib/{stack-app → hexclave-app}/customers/index.d.ts +1 -1
  231. package/dist/{esm/lib/stack-app → lib/hexclave-app}/customers/index.d.ts.map +1 -1
  232. package/dist/lib/{stack-app → hexclave-app}/data-vault/index.d.ts +1 -1
  233. package/dist/{esm/lib/stack-app → lib/hexclave-app}/data-vault/index.d.ts.map +1 -1
  234. package/dist/lib/{stack-app → hexclave-app}/email/index.d.ts +1 -1
  235. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email/index.d.ts.map +1 -1
  236. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email-templates/index.d.ts +1 -1
  237. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email-templates/index.d.ts.map +1 -1
  238. package/dist/lib/{stack-app → hexclave-app}/email-templates/index.js +1 -1
  239. package/dist/lib/hexclave-app/email-templates/index.js.map +1 -0
  240. package/dist/lib/{stack-app → hexclave-app}/index.d.ts +2 -2
  241. package/dist/lib/{stack-app → hexclave-app}/index.js +2 -2
  242. package/dist/{esm/lib/stack-app → lib/hexclave-app}/internal-api-keys/index.d.ts +1 -1
  243. package/dist/{esm/lib/stack-app → lib/hexclave-app}/internal-api-keys/index.d.ts.map +1 -1
  244. package/dist/lib/{stack-app → hexclave-app}/internal-api-keys/index.js +1 -1
  245. package/dist/lib/hexclave-app/internal-api-keys/index.js.map +1 -0
  246. package/dist/{esm/lib/stack-app → lib/hexclave-app}/notification-categories/index.d.ts +1 -1
  247. package/dist/{esm/lib/stack-app → lib/hexclave-app}/notification-categories/index.d.ts.map +1 -1
  248. package/dist/lib/{stack-app → hexclave-app}/permissions/index.d.ts +1 -1
  249. package/dist/{esm/lib/stack-app → lib/hexclave-app}/permissions/index.d.ts.map +1 -1
  250. package/dist/lib/{stack-app → hexclave-app}/permissions/index.js +1 -1
  251. package/dist/lib/hexclave-app/permissions/index.js.map +1 -0
  252. package/dist/lib/{stack-app → hexclave-app}/project-configs/index.d.ts +1 -1
  253. package/dist/{esm/lib/stack-app → lib/hexclave-app}/project-configs/index.d.ts.map +1 -1
  254. package/dist/lib/{stack-app → hexclave-app}/projects/index.d.ts +1 -1
  255. package/dist/{esm/lib/stack-app → lib/hexclave-app}/projects/index.d.ts.map +1 -1
  256. package/dist/lib/{stack-app → hexclave-app}/projects/index.js +1 -1
  257. package/dist/lib/hexclave-app/projects/index.js.map +1 -0
  258. package/dist/{esm/lib/stack-app → lib/hexclave-app}/session-replays/index.d.ts +1 -1
  259. package/dist/{esm/lib/stack-app → lib/hexclave-app}/session-replays/index.d.ts.map +1 -1
  260. package/dist/lib/{stack-app → hexclave-app}/teams/index.d.ts +1 -1
  261. package/dist/{esm/lib/stack-app → lib/hexclave-app}/teams/index.d.ts.map +1 -1
  262. package/dist/lib/{stack-app → hexclave-app}/teams/index.js +1 -1
  263. package/dist/lib/hexclave-app/teams/index.js.map +1 -0
  264. package/dist/lib/{stack-app → hexclave-app}/url-targets.d.ts +1 -1
  265. package/dist/{esm/lib/stack-app → lib/hexclave-app}/url-targets.d.ts.map +1 -1
  266. package/dist/lib/{stack-app → hexclave-app}/url-targets.js +2 -2
  267. package/dist/lib/hexclave-app/url-targets.js.map +1 -0
  268. package/dist/lib/{stack-app → hexclave-app}/url-targets.test.js +1 -1
  269. package/dist/lib/hexclave-app/url-targets.test.js.map +1 -0
  270. package/dist/lib/{stack-app → hexclave-app}/users/index.d.ts +1 -1
  271. package/dist/{esm/lib/stack-app → lib/hexclave-app}/users/index.d.ts.map +1 -1
  272. package/dist/lib/{stack-app → hexclave-app}/users/index.js +1 -1
  273. package/dist/lib/hexclave-app/users/index.js.map +1 -0
  274. package/dist/utils/url.js.map +1 -1
  275. package/package.json +4 -3
  276. package/src/dev-tool/dev-tool-core.ts +2460 -0
  277. package/src/dev-tool/dev-tool-styles.ts +2758 -0
  278. package/src/dev-tool/dev-tool-trigger-position.test.ts +113 -0
  279. package/src/dev-tool/dev-tool-trigger-position.ts +109 -0
  280. package/src/dev-tool/index.ts +149 -0
  281. package/src/index.ts +12 -0
  282. package/src/integrations/convex/component/README.md +74 -0
  283. package/src/integrations/convex/component/convex.config.ts +9 -0
  284. package/src/integrations/convex.ts +28 -0
  285. package/src/lib/auth.test.ts +67 -0
  286. package/src/lib/auth.ts +175 -0
  287. package/src/lib/cookie.ts +327 -0
  288. package/src/lib/env.ts +93 -0
  289. package/src/lib/hexclave-app/api-keys/index.ts +73 -0
  290. package/src/lib/hexclave-app/apps/implementations/admin-app-impl.ts +1159 -0
  291. package/src/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.ts +141 -0
  292. package/src/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.ts +36 -0
  293. package/src/lib/hexclave-app/apps/implementations/client-app-impl.ts +3525 -0
  294. package/src/lib/hexclave-app/apps/implementations/common.ts +190 -0
  295. package/src/lib/hexclave-app/apps/implementations/event-tracker.test.ts +105 -0
  296. package/src/lib/hexclave-app/apps/implementations/event-tracker.ts +306 -0
  297. package/src/lib/hexclave-app/apps/implementations/index.ts +35 -0
  298. package/src/lib/hexclave-app/apps/implementations/redirect-page-urls.ts +342 -0
  299. package/src/lib/hexclave-app/apps/implementations/server-app-impl.ts +1322 -0
  300. package/src/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.ts +106 -0
  301. package/src/lib/hexclave-app/apps/implementations/session-refresh-subscription.ts +52 -0
  302. package/src/lib/hexclave-app/apps/implementations/session-replay.test.ts +33 -0
  303. package/src/lib/hexclave-app/apps/implementations/session-replay.ts +356 -0
  304. package/src/lib/hexclave-app/apps/index.ts +40 -0
  305. package/src/lib/hexclave-app/apps/interfaces/admin-app.ts +189 -0
  306. package/src/lib/hexclave-app/apps/interfaces/client-app.ts +172 -0
  307. package/src/lib/hexclave-app/apps/interfaces/server-app.ts +114 -0
  308. package/src/lib/hexclave-app/common.ts +209 -0
  309. package/src/lib/hexclave-app/connected-accounts/index.ts +47 -0
  310. package/src/lib/hexclave-app/contact-channels/index.ts +80 -0
  311. package/src/lib/hexclave-app/customers/index.ts +158 -0
  312. package/src/lib/hexclave-app/data-vault/index.ts +12 -0
  313. package/src/lib/hexclave-app/email/index.ts +280 -0
  314. package/src/lib/hexclave-app/email-templates/index.ts +24 -0
  315. package/src/lib/hexclave-app/index.ts +146 -0
  316. package/src/lib/hexclave-app/internal-api-keys/index.ts +55 -0
  317. package/src/lib/hexclave-app/notification-categories/index.ts +12 -0
  318. package/src/lib/hexclave-app/permissions/index.ts +75 -0
  319. package/src/lib/hexclave-app/project-configs/index.ts +103 -0
  320. package/src/lib/hexclave-app/projects/index.ts +234 -0
  321. package/src/lib/hexclave-app/session-replays/index.ts +72 -0
  322. package/src/lib/hexclave-app/teams/index.ts +203 -0
  323. package/src/lib/hexclave-app/url-targets.test.ts +253 -0
  324. package/src/lib/hexclave-app/url-targets.ts +395 -0
  325. package/src/lib/hexclave-app/users/index.ts +495 -0
  326. package/src/utils/url.ts +24 -0
  327. package/dist/esm/lib/stack-app/api-keys/index.js.map +0 -1
  328. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  329. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  330. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  331. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  332. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  333. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  334. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +0 -1
  335. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  336. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  337. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts +0 -9
  338. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  339. package/dist/esm/lib/stack-app/apps/implementations/index.js +0 -27
  340. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +0 -1
  341. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  342. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  343. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  344. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  345. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  346. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  347. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  348. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  349. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  350. package/dist/esm/lib/stack-app/common.js +0 -7
  351. package/dist/esm/lib/stack-app/common.js.map +0 -1
  352. package/dist/esm/lib/stack-app/contact-channels/index.js.map +0 -1
  353. package/dist/esm/lib/stack-app/email-templates/index.js.map +0 -1
  354. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +0 -1
  355. package/dist/esm/lib/stack-app/permissions/index.js.map +0 -1
  356. package/dist/esm/lib/stack-app/projects/index.js.map +0 -1
  357. package/dist/esm/lib/stack-app/teams/index.js.map +0 -1
  358. package/dist/esm/lib/stack-app/url-targets.js.map +0 -1
  359. package/dist/esm/lib/stack-app/url-targets.test.js.map +0 -1
  360. package/dist/esm/lib/stack-app/users/index.js.map +0 -1
  361. package/dist/lib/stack-app/api-keys/index.d.ts.map +0 -1
  362. package/dist/lib/stack-app/api-keys/index.js.map +0 -1
  363. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  364. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  365. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  366. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  367. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  368. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  369. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +0 -1
  370. package/dist/lib/stack-app/apps/implementations/common.js.map +0 -1
  371. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts.map +0 -1
  372. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  373. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  374. package/dist/lib/stack-app/apps/implementations/index.d.ts +0 -9
  375. package/dist/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  376. package/dist/lib/stack-app/apps/implementations/index.js +0 -31
  377. package/dist/lib/stack-app/apps/implementations/index.js.map +0 -1
  378. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +0 -1
  379. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  380. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +0 -1
  381. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  382. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +0 -1
  383. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  384. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  385. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +0 -1
  386. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  387. package/dist/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  388. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +0 -1
  389. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  390. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +0 -1
  391. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  392. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +0 -1
  393. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  394. package/dist/lib/stack-app/common.d.ts.map +0 -1
  395. package/dist/lib/stack-app/common.js +0 -9
  396. package/dist/lib/stack-app/common.js.map +0 -1
  397. package/dist/lib/stack-app/connected-accounts/index.d.ts.map +0 -1
  398. package/dist/lib/stack-app/contact-channels/index.d.ts.map +0 -1
  399. package/dist/lib/stack-app/contact-channels/index.js.map +0 -1
  400. package/dist/lib/stack-app/customers/index.d.ts.map +0 -1
  401. package/dist/lib/stack-app/data-vault/index.d.ts.map +0 -1
  402. package/dist/lib/stack-app/email/index.d.ts.map +0 -1
  403. package/dist/lib/stack-app/email-templates/index.d.ts.map +0 -1
  404. package/dist/lib/stack-app/email-templates/index.js.map +0 -1
  405. package/dist/lib/stack-app/internal-api-keys/index.d.ts.map +0 -1
  406. package/dist/lib/stack-app/internal-api-keys/index.js.map +0 -1
  407. package/dist/lib/stack-app/notification-categories/index.d.ts.map +0 -1
  408. package/dist/lib/stack-app/permissions/index.d.ts.map +0 -1
  409. package/dist/lib/stack-app/permissions/index.js.map +0 -1
  410. package/dist/lib/stack-app/project-configs/index.d.ts.map +0 -1
  411. package/dist/lib/stack-app/projects/index.d.ts.map +0 -1
  412. package/dist/lib/stack-app/projects/index.js.map +0 -1
  413. package/dist/lib/stack-app/session-replays/index.d.ts.map +0 -1
  414. package/dist/lib/stack-app/teams/index.d.ts.map +0 -1
  415. package/dist/lib/stack-app/teams/index.js.map +0 -1
  416. package/dist/lib/stack-app/url-targets.d.ts.map +0 -1
  417. package/dist/lib/stack-app/url-targets.js.map +0 -1
  418. package/dist/lib/stack-app/url-targets.test.js.map +0 -1
  419. package/dist/lib/stack-app/users/index.d.ts.map +0 -1
  420. package/dist/lib/stack-app/users/index.js.map +0 -1
  421. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  422. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  423. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  424. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  425. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  426. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  427. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  428. /package/dist/esm/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  429. /package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  430. /package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  431. /package/dist/esm/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  432. /package/dist/esm/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  433. /package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  434. /package/dist/esm/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  435. /package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
  436. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  437. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  438. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  439. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  440. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  441. /package/dist/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  442. /package/dist/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  443. /package/dist/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  444. /package/dist/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  445. /package/dist/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  446. /package/dist/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  447. /package/dist/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  448. /package/dist/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  449. /package/dist/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  450. /package/dist/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
@@ -0,0 +1,190 @@
1
+
2
+ //===========================================
3
+ // THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template
4
+ //===========================================
5
+ import { InternalSession } from "@hexclave/shared/dist/sessions";
6
+ import { AsyncCache } from "@hexclave/shared/dist/utils/caches";
7
+ import { isBrowserLike } from "@hexclave/shared/dist/utils/env";
8
+ import { HexclaveAssertionError, captureError, concatStacktraces, throwErr } from "@hexclave/shared/dist/utils/errors";
9
+ import { createGlobal, getGlobal } from "@hexclave/shared/dist/utils/globals";
10
+ import { filterUndefined, omit } from "@hexclave/shared/dist/utils/objects";
11
+ import { ReactPromise, runAsynchronously } from "@hexclave/shared/dist/utils/promises";
12
+ import { suspendIfSsr, use } from "@hexclave/shared/dist/utils/react";
13
+ import { Result } from "@hexclave/shared/dist/utils/results";
14
+ import { Store } from "@hexclave/shared/dist/utils/stores";
15
+ import { getDefaultApiUrls } from "@hexclave/shared/dist/utils/urls";
16
+ import { envVars } from "../../../env";
17
+ import { HandlerUrlOptions, ResolvedHandlerUrls, hexclaveAppInternalsSymbol } from "../../common";
18
+ import { resolveHandlerUrls } from "../../url-targets";
19
+
20
+ export const clientVersion = "STACK_COMPILE_TIME_CLIENT_PACKAGE_VERSION_SENTINEL";
21
+ if (clientVersion.startsWith("STACK_COMPILE_TIME")) {
22
+ throw new HexclaveAssertionError("Client version was not replaced. Something went wrong during build!");
23
+ }
24
+
25
+ const replaceHexclavePortPrefix = <T extends string | undefined>(input: T): T => {
26
+ if (!input) return input;
27
+ const prefix = envVars.NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX;
28
+ return prefix ? input.replace(/\$\{NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81\}/g, prefix) as T : input;
29
+ };
30
+
31
+
32
+ export const createCache = <D extends any[], T>(fetcher: (dependencies: D) => Promise<T>) => {
33
+ return new AsyncCache<D, Result<T>>(
34
+ async (dependencies) => await Result.fromThrowingAsync(async () => await fetcher(dependencies)),
35
+ {},
36
+ );
37
+ };
38
+
39
+ export const createCacheBySession = <D extends any[], T>(fetcher: (session: InternalSession, extraDependencies: D) => Promise<T> ) => {
40
+ return new AsyncCache<[InternalSession, ...D], Result<T>>(
41
+ async ([session, ...extraDependencies]) => await Result.fromThrowingAsync(async () => await fetcher(session, extraDependencies)),
42
+ {
43
+ onSubscribe: ([session], refresh) => {
44
+ const handler = session.onInvalidate(() => refresh());
45
+ return () => handler.unsubscribe();
46
+ },
47
+ },
48
+ );
49
+ };
50
+
51
+
52
+ type AppLike = { [hexclaveAppInternalsSymbol]: { getConstructorOptions: () => any } };
53
+ export function resolveConstructorOptions<T extends { inheritsFrom?: AppLike }>(options: T): T & { inheritsFrom?: undefined } {
54
+ return {
55
+ ...options.inheritsFrom?.[hexclaveAppInternalsSymbol].getConstructorOptions() ?? {},
56
+ ...filterUndefined(omit(options, ["inheritsFrom"])),
57
+ };
58
+ }
59
+
60
+ export function getUrls(partial: HandlerUrlOptions, options: { projectId: string }): ResolvedHandlerUrls {
61
+ return resolveHandlerUrls({
62
+ urls: partial,
63
+ projectId: options.projectId,
64
+ });
65
+ }
66
+
67
+ export function getDefaultProjectId() {
68
+ return envVars.NEXT_PUBLIC_STACK_PROJECT_ID || envVars.STACK_PROJECT_ID || throwErr(new Error("Welcome to Hexclave! It seems that you haven't provided a project ID. Please create a project on the Hexclave dashboard at https://app.hexclave.com and put it in the NEXT_PUBLIC_STACK_PROJECT_ID environment variable."));
69
+ }
70
+
71
+ export function getDefaultPublishableClientKey() {
72
+ return envVars.NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY || envVars.STACK_PUBLISHABLE_CLIENT_KEY;
73
+ }
74
+
75
+ export function getDefaultSecretServerKey() {
76
+ return envVars.STACK_SECRET_SERVER_KEY || throwErr(new Error("No secret server key provided. Please copy your key from the Hexclave dashboard and put it in the STACK_SECRET_SERVER_KEY environment variable."));
77
+ }
78
+
79
+ export function getDefaultSuperSecretAdminKey() {
80
+ return envVars.STACK_SUPER_SECRET_ADMIN_KEY || throwErr(new Error("No super secret admin key provided. Please copy your key from the Hexclave dashboard and put it in the STACK_SUPER_SECRET_ADMIN_KEY environment variable."));
81
+ }
82
+
83
+ export function getDefaultExtraRequestHeaders() {
84
+ return JSON.parse(envVars.NEXT_PUBLIC_STACK_EXTRA_REQUEST_HEADERS || envVars.STACK_EXTRA_REQUEST_HEADERS || '{}');
85
+ }
86
+
87
+ /**
88
+ * Returns the base URL for the Stack API.
89
+ *
90
+ * The URL can be specified in several ways, in order of precedence:
91
+ * 1. Directly through userSpecifiedBaseUrl parameter as string or browser/server object
92
+ * 2. Through environment variables:
93
+ * - Browser: NEXT_PUBLIC_BROWSER_STACK_API_URL
94
+ * - Server: NEXT_PUBLIC_SERVER_STACK_API_URL
95
+ * - Fallback: NEXT_PUBLIC_STACK_API_URL or NEXT_PUBLIC_STACK_URL
96
+ * 3. Default base URL if none of the above are specified
97
+ *
98
+ * The function also ensures the URL doesn't end with a trailing slash
99
+ * by removing it if present.
100
+ *
101
+ * @param userSpecifiedBaseUrl - Optional URL override as string or {browser, server} object
102
+ * @returns The configured base URL without trailing slash
103
+
104
+ */
105
+ export function getBaseUrl(userSpecifiedBaseUrl: string | { browser: string, server: string } | undefined) {
106
+ let url;
107
+ if (userSpecifiedBaseUrl) {
108
+ if (typeof userSpecifiedBaseUrl === "string") {
109
+ url = userSpecifiedBaseUrl;
110
+ } else {
111
+ if (isBrowserLike()) {
112
+ url = userSpecifiedBaseUrl.browser;
113
+ } else {
114
+ url = userSpecifiedBaseUrl.server;
115
+ }
116
+ }
117
+ } else {
118
+ // note: NEXT_PUBLIC_BROWSER_STACK_API_URL was renamed to NEXT_PUBLIC_STACK_API_URL_BROWSER, and NEXT_PUBLIC_STACK_URL to NEXT_PUBLIC_STACK_API_URL
119
+ if (isBrowserLike()) {
120
+ url = envVars.NEXT_PUBLIC_BROWSER_STACK_API_URL || envVars.NEXT_PUBLIC_STACK_API_URL_BROWSER || envVars.STACK_API_URL_BROWSER;
121
+ } else {
122
+ url = envVars.NEXT_PUBLIC_SERVER_STACK_API_URL || envVars.NEXT_PUBLIC_STACK_API_URL_SERVER || envVars.STACK_API_URL_SERVER;
123
+ }
124
+ url = url || envVars.NEXT_PUBLIC_STACK_API_URL || envVars.STACK_API_URL || envVars.NEXT_PUBLIC_STACK_URL || defaultBaseUrl;
125
+ }
126
+
127
+ return replaceHexclavePortPrefix(url.endsWith('/') ? url.slice(0, -1) : url);
128
+ }
129
+
130
+ export const defaultBaseUrl = "https://api.hexclave.com";
131
+ export const defaultAnalyticsBaseUrl = "https://r.hexclave.com";
132
+
133
+ const analyticsBaseUrlsByApiBaseUrl = new Map<string, string>([
134
+ [defaultBaseUrl, defaultAnalyticsBaseUrl],
135
+ ["https://api.stack-auth.com", "https://r.stack-auth.com"],
136
+ ]);
137
+
138
+ export function getAnalyticsBaseUrl(regularBaseUrl: string): string {
139
+ return analyticsBaseUrlsByApiBaseUrl.get(regularBaseUrl) ?? regularBaseUrl;
140
+ }
141
+
142
+
143
+ function fetchBackendUrlsInBackground(primaryBaseUrl: string): void {
144
+ createGlobal('__stack-fetch-backend-urls-started', () => {
145
+ runAsynchronously(async () => {
146
+ try {
147
+ const res = await fetch(`${primaryBaseUrl}/api/v1/internal/backend-urls`);
148
+ if (!res.ok) {
149
+ return;
150
+ }
151
+ const data = await res.json();
152
+ if (!Array.isArray(data.urls) || !data.urls.every((u: unknown) => typeof u === 'string')) {
153
+ return;
154
+ }
155
+ createGlobal('__stack-fetched-backend-urls', () => data.urls as string[]);
156
+ } catch (e) {
157
+ captureError('fetch-backend-urls-in-background', e);
158
+ }
159
+ });
160
+ return true;
161
+ });
162
+ }
163
+
164
+ export function resolveApiUrls(userExplicitBaseUrl: string | { browser: string, server: string } | undefined): () => string[] {
165
+ return () => {
166
+ if (userExplicitBaseUrl != null) {
167
+ return [getBaseUrl(userExplicitBaseUrl)];
168
+ }
169
+ const primary = getBaseUrl(undefined);
170
+ // Always try to fetch server-configured URLs (supports custom domains via
171
+ // STACK_BACKEND_URLS_CONFIG). Hardcoded fallbacks are used as a default
172
+ // until the background fetch completes.
173
+ fetchBackendUrlsInBackground(primary);
174
+ return getGlobal('__stack-fetched-backend-urls') ?? getDefaultApiUrls(primary);
175
+ };
176
+ }
177
+
178
+ export type TokenObject = {
179
+ accessToken: string | null,
180
+ refreshToken: string | null,
181
+ };
182
+
183
+ export function createEmptyTokenStore() {
184
+ return new Store<TokenObject>({
185
+ refreshToken: null,
186
+ accessToken: null,
187
+ });
188
+ }
189
+
190
+
@@ -0,0 +1,105 @@
1
+
2
+ //===========================================
3
+ // THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template
4
+ //===========================================
5
+ // @vitest-environment jsdom
6
+
7
+ import { Result } from "@hexclave/shared/dist/utils/results";
8
+ import { afterEach, describe, expect, it, vi } from "vitest";
9
+ import { EventTracker } from "./event-tracker";
10
+
11
+ async function advancePastFlush() {
12
+ await vi.advanceTimersByTimeAsync(10_000);
13
+ await Promise.resolve();
14
+ }
15
+
16
+ function getSentEventTypes(sentBodies: string[]) {
17
+ const [body] = sentBodies;
18
+
19
+ const payload = JSON.parse(body);
20
+ if (typeof payload !== "object" || payload === null || !("events" in payload) || !Array.isArray(payload.events)) {
21
+ throw new Error("Expected analytics batch payload to include an events array.");
22
+ }
23
+
24
+ return (payload.events as { event_type: string }[]).map((event) => event.event_type);
25
+ }
26
+
27
+ describe("EventTracker", () => {
28
+ afterEach(() => {
29
+ vi.useRealTimers();
30
+ });
31
+
32
+ it("captures events when browser globals are exposed as accessor descriptors", async () => {
33
+ vi.useFakeTimers();
34
+ document.body.innerHTML = "<button>Open project</button>";
35
+
36
+ const screenDescriptor = Object.getOwnPropertyDescriptor(window, "screen");
37
+ const historyDescriptor = Object.getOwnPropertyDescriptor(window, "history");
38
+ expect(screenDescriptor?.value).toBeUndefined();
39
+ expect(historyDescriptor?.value).toBeUndefined();
40
+ expect(screenDescriptor?.get).toBeTypeOf("function");
41
+ expect(historyDescriptor?.get).toBeTypeOf("function");
42
+
43
+ const sentBodies: string[] = [];
44
+ const tracker = new EventTracker({
45
+ projectId: "internal",
46
+ sendBatch: async (body) => {
47
+ sentBodies.push(body);
48
+ return Result.ok(new Response());
49
+ },
50
+ });
51
+
52
+ try {
53
+ tracker.start();
54
+ document.querySelector("button")?.dispatchEvent(new MouseEvent("click", {
55
+ bubbles: true,
56
+ clientX: 12,
57
+ clientY: 34,
58
+ }));
59
+
60
+ await advancePastFlush();
61
+
62
+ expect(getSentEventTypes(sentBodies)).toMatchInlineSnapshot(`
63
+ [
64
+ "$page-view",
65
+ "$click",
66
+ ]
67
+ `);
68
+ } finally {
69
+ tracker.stop();
70
+ }
71
+ });
72
+
73
+ it("captures client-side navigations when history is exposed as an accessor descriptor", async () => {
74
+ vi.useFakeTimers();
75
+
76
+ const historyDescriptor = Object.getOwnPropertyDescriptor(window, "history");
77
+ expect(historyDescriptor?.value).toBeUndefined();
78
+ expect(historyDescriptor?.get).toBeTypeOf("function");
79
+
80
+ const sentBodies: string[] = [];
81
+ const tracker = new EventTracker({
82
+ projectId: "internal",
83
+ sendBatch: async (body) => {
84
+ sentBodies.push(body);
85
+ return Result.ok(new Response());
86
+ },
87
+ });
88
+
89
+ try {
90
+ tracker.start();
91
+ window.history.pushState({}, "", "/projects/test-project");
92
+
93
+ await advancePastFlush();
94
+
95
+ expect(getSentEventTypes(sentBodies)).toMatchInlineSnapshot(`
96
+ [
97
+ "$page-view",
98
+ "$page-view",
99
+ ]
100
+ `);
101
+ } finally {
102
+ tracker.stop();
103
+ }
104
+ });
105
+ });
@@ -0,0 +1,306 @@
1
+
2
+ //===========================================
3
+ // THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template
4
+ //===========================================
5
+ import { isBrowserLike } from "@hexclave/shared/dist/utils/env";
6
+ import { runAsynchronously } from "@hexclave/shared/dist/utils/promises";
7
+ import { Result } from "@hexclave/shared/dist/utils/results";
8
+ import { generateUuid } from "./session-replay";
9
+
10
+ const FLUSH_INTERVAL_MS = 10_000;
11
+ const MAX_EVENTS_PER_BATCH = 50;
12
+ const MAX_APPROX_BYTES_PER_BATCH = 64_000;
13
+
14
+ function hasScreenDimensions(value: unknown): value is { width: number, height: number } {
15
+ if (value == null || typeof value !== "object") {
16
+ return false;
17
+ }
18
+ if (!("width" in value) || !("height" in value)) {
19
+ return false;
20
+ }
21
+ return typeof value.width === "number" && typeof value.height === "number";
22
+ }
23
+
24
+ function hasHistoryMethods(value: unknown): value is { pushState: History["pushState"], replaceState: History["replaceState"] } {
25
+ if (value == null || typeof value !== "object") {
26
+ return false;
27
+ }
28
+ if (!("pushState" in value) || !("replaceState" in value)) {
29
+ return false;
30
+ }
31
+ return typeof value.pushState === "function" && typeof value.replaceState === "function";
32
+ }
33
+
34
+ export type EventTrackerDeps = {
35
+ projectId: string,
36
+ sendBatch: (body: string, options: { keepalive: boolean }) => Promise<Result<Response, Error>>,
37
+ };
38
+
39
+ type TrackedEvent = {
40
+ event_type: "$page-view" | "$click",
41
+ event_at_ms: number,
42
+ data: Record<string, unknown>,
43
+ };
44
+
45
+ export class EventTracker {
46
+ private _started = false;
47
+ private _cancelled = false;
48
+ private _detachListeners: (() => void) | null = null;
49
+ private _flushTimer: ReturnType<typeof setInterval> | null = null;
50
+ private _events: TrackedEvent[] = [];
51
+ private _approxBytes = 0;
52
+ private _lastUrl: string | null = null;
53
+ private readonly _sessionReplaySegmentId: string;
54
+ private readonly _deps: EventTrackerDeps;
55
+
56
+ private _originalPushState: History["pushState"] | null = null;
57
+ private _originalReplaceState: History["replaceState"] | null = null;
58
+
59
+ constructor(deps: EventTrackerDeps) {
60
+ this._deps = deps;
61
+ this._sessionReplaySegmentId = generateUuid();
62
+ }
63
+
64
+ start() {
65
+ if (this._started) return;
66
+ if (!isBrowserLike()) return;
67
+ if (
68
+ typeof window.addEventListener !== "function"
69
+ || typeof window.removeEventListener !== "function"
70
+ || typeof document.addEventListener !== "function"
71
+ || typeof document.removeEventListener !== "function"
72
+ || !hasScreenDimensions(window.screen)
73
+ ) {
74
+ return;
75
+ }
76
+ this._started = true;
77
+
78
+ this._setupPageViewCapture();
79
+ this._setupClickCapture();
80
+ this._setupPageHideListeners();
81
+
82
+ this._flushTimer = setInterval(() => this._tick(), FLUSH_INTERVAL_MS);
83
+ }
84
+
85
+ stop() {
86
+ this._cancelled = true;
87
+ if (this._flushTimer !== null) {
88
+ clearInterval(this._flushTimer);
89
+ this._flushTimer = null;
90
+ }
91
+ runAsynchronously(() => this._flush({ keepalive: true }));
92
+ this._teardown();
93
+ }
94
+
95
+ clearBuffer() {
96
+ this._events = [];
97
+ this._approxBytes = 0;
98
+ }
99
+
100
+ private _pushEvent(event: TrackedEvent) {
101
+ this._events.push(event);
102
+ this._approxBytes += JSON.stringify(event).length;
103
+ if (this._events.length >= MAX_EVENTS_PER_BATCH || this._approxBytes >= MAX_APPROX_BYTES_PER_BATCH) {
104
+ runAsynchronously(() => this._flush({ keepalive: false }));
105
+ }
106
+ }
107
+
108
+ private _capturePageView(entryType: "initial" | "push" | "replace" | "pop") {
109
+ const screenObject = window.screen;
110
+ if (!hasScreenDimensions(screenObject)) {
111
+ return;
112
+ }
113
+
114
+ const url = window.location.href;
115
+ if (url === this._lastUrl && entryType !== "initial") return;
116
+ this._lastUrl = url;
117
+
118
+ this._pushEvent({
119
+ event_type: "$page-view",
120
+ event_at_ms: Date.now(),
121
+ data: {
122
+ url,
123
+ path: window.location.pathname,
124
+ referrer: document.referrer,
125
+ title: document.title,
126
+ entry_type: entryType,
127
+ viewport_width: window.innerWidth,
128
+ viewport_height: window.innerHeight,
129
+ screen_width: screenObject.width,
130
+ screen_height: screenObject.height,
131
+ },
132
+ });
133
+ }
134
+
135
+ private _setupPageViewCapture() {
136
+ // Fire initial page-view
137
+ this._capturePageView("initial");
138
+ const historyObject = window.history;
139
+ if (!hasHistoryMethods(historyObject)) {
140
+ return;
141
+ }
142
+ const originalPushState = historyObject.pushState;
143
+ const originalReplaceState = historyObject.replaceState;
144
+
145
+ // Monkey-patch history.pushState
146
+ this._originalPushState = (...args: Parameters<History["pushState"]>) => originalPushState.apply(historyObject, args);
147
+ historyObject.pushState = (...args: Parameters<History["pushState"]>) => {
148
+ this._originalPushState!(...args);
149
+ this._capturePageView("push");
150
+ };
151
+
152
+ // Monkey-patch history.replaceState
153
+ this._originalReplaceState = (...args: Parameters<History["replaceState"]>) => originalReplaceState.apply(historyObject, args);
154
+ historyObject.replaceState = (...args: Parameters<History["replaceState"]>) => {
155
+ this._originalReplaceState!(...args);
156
+ this._capturePageView("replace");
157
+ };
158
+
159
+ // Listen for popstate (back/forward navigation)
160
+ window.addEventListener("popstate", this._onPopState);
161
+ }
162
+
163
+ private readonly _onPopState = () => {
164
+ this._capturePageView("pop");
165
+ };
166
+
167
+ private _buildSelector(element: Element): string {
168
+ const parts: string[] = [];
169
+ let current: Element | null = element;
170
+ let depth = 0;
171
+
172
+ while (current && depth < 5) {
173
+ let part = current.tagName.toLowerCase();
174
+ if (current.id) {
175
+ part += `#${current.id}`;
176
+ parts.unshift(part);
177
+ break;
178
+ }
179
+ if (current.className && typeof current.className === "string") {
180
+ const classes = current.className.trim().split(/\s+/).filter(Boolean);
181
+ if (classes.length > 0) {
182
+ part += `.${classes.join(".")}`;
183
+ }
184
+ }
185
+ parts.unshift(part);
186
+ current = current.parentElement;
187
+ depth++;
188
+ }
189
+
190
+ return parts.join(" > ");
191
+ }
192
+
193
+ private _findNearestAnchorHref(element: Element): string | null {
194
+ let current: Element | null = element;
195
+ while (current) {
196
+ if (current.tagName === "A" && current.hasAttribute("href")) {
197
+ return current.getAttribute("href");
198
+ }
199
+ current = current.parentElement;
200
+ }
201
+ return null;
202
+ }
203
+
204
+ private readonly _onClickCapture = (event: MouseEvent) => {
205
+ const target = event.target;
206
+ if (!(target instanceof Element)) return;
207
+
208
+ this._pushEvent({
209
+ event_type: "$click",
210
+ event_at_ms: Date.now(),
211
+ data: {
212
+ tag_name: target.tagName.toLowerCase(),
213
+ text: target.textContent.trim().substring(0, 200),
214
+ href: this._findNearestAnchorHref(target),
215
+ selector: this._buildSelector(target),
216
+ x: event.clientX,
217
+ y: event.clientY,
218
+ page_x: event.pageX,
219
+ page_y: event.pageY,
220
+ viewport_width: window.innerWidth,
221
+ viewport_height: window.innerHeight,
222
+ },
223
+ });
224
+ };
225
+
226
+ private _setupClickCapture() {
227
+ document.addEventListener("click", this._onClickCapture, { capture: true });
228
+ }
229
+
230
+ private readonly _onPageHide = () => {
231
+ runAsynchronously(() => this._flush({ keepalive: true }));
232
+ };
233
+
234
+ private _setupPageHideListeners() {
235
+ window.addEventListener("pagehide", this._onPageHide);
236
+ document.addEventListener("visibilitychange", this._onPageHide);
237
+ this._detachListeners = () => {
238
+ window.removeEventListener("pagehide", this._onPageHide);
239
+ document.removeEventListener("visibilitychange", this._onPageHide);
240
+ };
241
+ }
242
+
243
+ private _teardown() {
244
+ if (this._detachListeners) {
245
+ this._detachListeners();
246
+ this._detachListeners = null;
247
+ }
248
+
249
+ // Restore history methods
250
+ const historyObject = window.history;
251
+ if (hasHistoryMethods(historyObject)) {
252
+ if (this._originalPushState) {
253
+ historyObject.pushState = this._originalPushState;
254
+ }
255
+ if (this._originalReplaceState) {
256
+ historyObject.replaceState = this._originalReplaceState;
257
+ }
258
+ }
259
+ this._originalPushState = null;
260
+ this._originalReplaceState = null;
261
+
262
+ window.removeEventListener("popstate", this._onPopState);
263
+ document.removeEventListener("click", this._onClickCapture, { capture: true });
264
+
265
+ this._events = [];
266
+ this._approxBytes = 0;
267
+ }
268
+
269
+ private async _flush(options: { keepalive: boolean }) {
270
+ if (this._events.length === 0) return;
271
+
272
+ const nowMs = Date.now();
273
+
274
+ const batchId = generateUuid();
275
+ const payload = {
276
+ session_replay_segment_id: this._sessionReplaySegmentId,
277
+ batch_id: batchId,
278
+ sent_at_ms: nowMs,
279
+ events: this._events,
280
+ };
281
+
282
+ this._events = [];
283
+ this._approxBytes = 0;
284
+
285
+ const res = await this._deps.sendBatch(
286
+ JSON.stringify(payload),
287
+ { keepalive: options.keepalive },
288
+ );
289
+
290
+ if (res.status === "error") {
291
+ console.warn("EventTracker flush failed:", res.error);
292
+ return;
293
+ }
294
+
295
+ if (!res.data.ok) {
296
+ console.warn("EventTracker flush failed:", res.data.status, await res.data.text());
297
+ }
298
+ }
299
+
300
+ private _tick() {
301
+ if (this._cancelled) return;
302
+ if (this._events.length > 0) {
303
+ runAsynchronously(() => this._flush({ keepalive: false }));
304
+ }
305
+ }
306
+ }
@@ -0,0 +1,35 @@
1
+
2
+ //===========================================
3
+ // THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template
4
+ //===========================================
5
+
6
+ import { scrambleDuringCompileTime } from "@hexclave/shared/dist/utils/compile-time";
7
+ import { _HexclaveAdminAppImplIncomplete } from "./admin-app-impl";
8
+ import { _HexclaveClientAppImplIncomplete } from "./client-app-impl";
9
+ import { _HexclaveServerAppImplIncomplete } from "./server-app-impl";
10
+
11
+
12
+ /**
13
+ * Prevents a circular dependency between the client and admin apps. For more information, see the documentation comment
14
+ * of `_HexclaveClientAppImplIncomplete.LazyStackAdminAppImpl`.
15
+ *
16
+ * Note: This is an explicitly defined function that returns the new values (and not a barrel file with top-level side
17
+ * effects) because we have `sideEffects: false` in the package.json, and so it would be tree-shaken away if we just
18
+ * exported the values directly.
19
+ */
20
+ function complete() {
21
+ _HexclaveClientAppImplIncomplete.LazyStackAdminAppImpl.value = _HexclaveAdminAppImplIncomplete;
22
+
23
+ return {
24
+ _HexclaveAdminAppImpl: scrambleDuringCompileTime(_HexclaveAdminAppImplIncomplete),
25
+ _HexclaveClientAppImpl: scrambleDuringCompileTime(_HexclaveClientAppImplIncomplete),
26
+ _HexclaveServerAppImpl: scrambleDuringCompileTime(_HexclaveServerAppImplIncomplete),
27
+ };
28
+ }
29
+
30
+ export const {
31
+ _HexclaveAdminAppImpl,
32
+ _HexclaveClientAppImpl,
33
+ _HexclaveServerAppImpl
34
+ } = complete();
35
+