@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,113 @@
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 { describe, expect, it } from "vitest";
6
+ import { clampTriggerPosition, getSnappedTriggerPlacement, resolveTriggerPosition } from "./dev-tool-trigger-position";
7
+
8
+ const triggerSize = { width: 36, height: 36 };
9
+ const viewport = { width: 1000, height: 700 };
10
+
11
+ describe("corner snapping", () => {
12
+ it("snaps to bottom-right when trigger is in the bottom-right quadrant", () => {
13
+ const placement = getSnappedTriggerPlacement({ left: 800, top: 600 }, triggerSize, viewport);
14
+ expect(placement).toEqual({ corner: "bottom-right" });
15
+ });
16
+
17
+ it("snaps to top-left when trigger is in the top-left quadrant", () => {
18
+ const placement = getSnappedTriggerPlacement({ left: 10, top: 20 }, triggerSize, viewport);
19
+ expect(placement).toEqual({ corner: "top-left" });
20
+ });
21
+
22
+ it("snaps to top-right when trigger is in the top-right quadrant", () => {
23
+ const placement = getSnappedTriggerPlacement({ left: 900, top: 50 }, triggerSize, viewport);
24
+ expect(placement).toEqual({ corner: "top-right" });
25
+ });
26
+
27
+ it("snaps to bottom-left when trigger is in the bottom-left quadrant", () => {
28
+ const placement = getSnappedTriggerPlacement({ left: 50, top: 650 }, triggerSize, viewport);
29
+ expect(placement).toEqual({ corner: "bottom-left" });
30
+ });
31
+ });
32
+
33
+ describe("corner position resolution", () => {
34
+ it("resolves bottom-right to margin from bottom and right edges", () => {
35
+ const pos = resolveTriggerPosition({ corner: "bottom-right" }, triggerSize, viewport);
36
+ expect(pos).toEqual({ left: 1000 - 36 - 16, top: 700 - 36 - 16 });
37
+ });
38
+
39
+ it("resolves top-left to margin from top and left edges", () => {
40
+ const pos = resolveTriggerPosition({ corner: "top-left" }, triggerSize, viewport);
41
+ expect(pos).toEqual({ left: 16, top: 16 });
42
+ });
43
+
44
+ it("resolves top-right to margin from top and right edges", () => {
45
+ const pos = resolveTriggerPosition({ corner: "top-right" }, triggerSize, viewport);
46
+ expect(pos).toEqual({ left: 1000 - 36 - 16, top: 16 });
47
+ });
48
+
49
+ it("resolves bottom-left to margin from bottom and left edges", () => {
50
+ const pos = resolveTriggerPosition({ corner: "bottom-left" }, triggerSize, viewport);
51
+ expect(pos).toEqual({ left: 16, top: 700 - 36 - 16 });
52
+ });
53
+
54
+ it("has equal left/top margin for top-left corner", () => {
55
+ const pos = resolveTriggerPosition({ corner: "top-left" }, triggerSize, viewport);
56
+ expect(pos.left).toBe(pos.top);
57
+ });
58
+
59
+ it("keeps the trigger on-screen when the viewport is smaller than the margin and trigger", () => {
60
+ const tinyViewport = { width: 40, height: 40 };
61
+ const pos = resolveTriggerPosition({ corner: "bottom-right" }, triggerSize, tinyViewport);
62
+ expect(pos).toEqual({ left: 4, top: 4 });
63
+ });
64
+ });
65
+
66
+ describe("resize anchor regression", () => {
67
+ it("bottom-right corner tracks the bottom-right edge after viewport shrinks", () => {
68
+ const placement = { corner: "bottom-right" } as const;
69
+ const pos1 = resolveTriggerPosition(placement, triggerSize, { width: 800, height: 600 });
70
+ expect(pos1).toEqual({ left: 800 - 36 - 16, top: 600 - 36 - 16 });
71
+ });
72
+
73
+ it("bottom-right corner tracks the bottom-right edge after viewport grows", () => {
74
+ const placement = { corner: "bottom-right" } as const;
75
+ const pos2 = resolveTriggerPosition(placement, triggerSize, { width: 1440, height: 900 });
76
+ expect(pos2).toEqual({ left: 1440 - 36 - 16, top: 900 - 36 - 16 });
77
+ });
78
+
79
+ it("top-right corner tracks the top-right edge across resize cycles", () => {
80
+ const placement = { corner: "top-right" } as const;
81
+ for (const vw of [600, 800, 1000, 1440]) {
82
+ const pos = resolveTriggerPosition(placement, triggerSize, { width: vw, height: 700 });
83
+ expect(pos.left).toBe(vw - 36 - 16);
84
+ expect(pos.top).toBe(16);
85
+ }
86
+ });
87
+
88
+ it("corner does not change on resize (placement is stable)", () => {
89
+ // The same corner placement always resolves without changing its corner.
90
+ const placement = getSnappedTriggerPlacement({ left: 950, top: 650 }, triggerSize, viewport);
91
+ expect(placement.corner).toBe("bottom-right");
92
+
93
+ // After resize, applying resolveTriggerPosition still produces bottom-right geometry.
94
+ const smallVp = resolveTriggerPosition(placement, triggerSize, { width: 400, height: 300 });
95
+ expect(smallVp.left).toBe(400 - 36 - 16);
96
+ expect(smallVp.top).toBe(300 - 36 - 16);
97
+ });
98
+ });
99
+
100
+ describe("clampTriggerPosition", () => {
101
+ it("clamps positions outside the viewport", () => {
102
+ expect(clampTriggerPosition({ left: -50, top: -20 }, triggerSize, viewport)).toEqual({ left: 0, top: 0 });
103
+ expect(clampTriggerPosition({ left: 9999, top: 9999 }, triggerSize, viewport)).toEqual({
104
+ left: viewport.width - triggerSize.width,
105
+ top: viewport.height - triggerSize.height,
106
+ });
107
+ });
108
+
109
+ it("preserves positions already within bounds", () => {
110
+ const pos = { left: 200, top: 300 };
111
+ expect(clampTriggerPosition(pos, triggerSize, viewport)).toEqual(pos);
112
+ });
113
+ });
@@ -0,0 +1,109 @@
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
+ export type TriggerCorner = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
6
+
7
+ export type TriggerPlacement = {
8
+ corner: TriggerCorner;
9
+ };
10
+
11
+ export type TriggerPosition = {
12
+ left: number;
13
+ top: number;
14
+ };
15
+
16
+ export type TriggerSize = {
17
+ width: number;
18
+ height: number;
19
+ };
20
+
21
+ export type TriggerViewport = {
22
+ width: number;
23
+ height: number;
24
+ };
25
+
26
+ export const TRIGGER_EDGE_MARGIN = 16;
27
+
28
+ function getSnapBounds(
29
+ triggerSize: TriggerSize,
30
+ viewport: TriggerViewport,
31
+ ) {
32
+ const maxLeft = Math.max(0, viewport.width - triggerSize.width);
33
+ const maxTop = Math.max(0, viewport.height - triggerSize.height);
34
+ const minLeft = Math.min(TRIGGER_EDGE_MARGIN, maxLeft);
35
+ const minTop = Math.min(TRIGGER_EDGE_MARGIN, maxTop);
36
+ return {
37
+ minLeft,
38
+ maxLeft: Math.max(minLeft, maxLeft - TRIGGER_EDGE_MARGIN),
39
+ minTop,
40
+ maxTop: Math.max(minTop, maxTop - TRIGGER_EDGE_MARGIN),
41
+ };
42
+ }
43
+
44
+ /**
45
+ * Clamps a position so the trigger stays fully within the viewport.
46
+ * Used during drag to prevent the pill from leaving the screen.
47
+ */
48
+ export function clampTriggerPosition(
49
+ position: TriggerPosition,
50
+ triggerSize: TriggerSize,
51
+ viewport: TriggerViewport,
52
+ ): TriggerPosition {
53
+ const maxLeft = Math.max(0, viewport.width - triggerSize.width);
54
+ const maxTop = Math.max(0, viewport.height - triggerSize.height);
55
+ return {
56
+ left: Math.max(0, Math.min(position.left, maxLeft)),
57
+ top: Math.max(0, Math.min(position.top, maxTop)),
58
+ };
59
+ }
60
+
61
+ /**
62
+ * Returns the exact pixel position for a corner placement.
63
+ * The trigger is always `TRIGGER_EDGE_MARGIN` px from both adjacent edges.
64
+ */
65
+ export function resolveTriggerPosition(
66
+ placement: TriggerPlacement,
67
+ triggerSize: TriggerSize,
68
+ viewport: TriggerViewport,
69
+ ): TriggerPosition {
70
+ const bounds = getSnapBounds(triggerSize, viewport);
71
+ const position = (() => {
72
+ switch (placement.corner) {
73
+ case 'top-left': {
74
+ return { left: bounds.minLeft, top: bounds.minTop };
75
+ }
76
+ case 'top-right': {
77
+ return { left: bounds.maxLeft, top: bounds.minTop };
78
+ }
79
+ case 'bottom-left': {
80
+ return { left: bounds.minLeft, top: bounds.maxTop };
81
+ }
82
+ case 'bottom-right': {
83
+ return { left: bounds.maxLeft, top: bounds.maxTop };
84
+ }
85
+ }
86
+ })();
87
+
88
+ return clampTriggerPosition(position, triggerSize, viewport);
89
+ }
90
+
91
+ /**
92
+ * Snaps a free position to the nearest corner by checking which viewport
93
+ * quadrant the trigger center falls in.
94
+ */
95
+ export function getSnappedTriggerPlacement(
96
+ position: TriggerPosition,
97
+ triggerSize: TriggerSize,
98
+ viewport: TriggerViewport,
99
+ ): TriggerPlacement {
100
+ const cx = position.left + triggerSize.width / 2;
101
+ const cy = position.top + triggerSize.height / 2;
102
+
103
+ const corner: TriggerCorner =
104
+ cy < viewport.height / 2
105
+ ? cx < viewport.width / 2 ? 'top-left' : 'top-right'
106
+ : cx < viewport.width / 2 ? 'bottom-left' : 'bottom-right';
107
+
108
+ return { corner };
109
+ }
@@ -0,0 +1,149 @@
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 type { StackClientApp } from "../lib/hexclave-app";
7
+ import { captureError } from "@hexclave/shared/dist/utils/errors";
8
+ import { runAsynchronously } from "@hexclave/shared/dist/utils/promises";
9
+ import { isLocalhost } from "@hexclave/shared/dist/utils/urls";
10
+ import type { createDevTool as CreateDevToolFn } from "./dev-tool-core";
11
+
12
+ // Hexclave rebrand: UI-only local pref — straight rename (one-time reset is harmless)
13
+ const OVERRIDE_KEY = '__hexclave-dev-tool-override';
14
+
15
+ function hasAppendChild(value: unknown): value is { appendChild(node: Node): void } {
16
+ return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'appendChild') === 'function';
17
+ }
18
+
19
+ function canMountIntoDom(): boolean {
20
+ if (typeof window === 'undefined' || typeof document === 'undefined') {
21
+ return false;
22
+ }
23
+ if (typeof document.createElement !== 'function') {
24
+ return false;
25
+ }
26
+ return hasAppendChild(Reflect.get(document, 'body'));
27
+ }
28
+
29
+ function getOverride(): boolean | null {
30
+ try {
31
+ const val = localStorage.getItem(OVERRIDE_KEY);
32
+ if (val === 'true') return true;
33
+ if (val === 'false') return false;
34
+ } catch {}
35
+ return null;
36
+ }
37
+
38
+ function shouldShow(): boolean {
39
+ const override = getOverride();
40
+ if (override !== null) return override;
41
+ if (!canMountIntoDom()) return false;
42
+ return isLocalhost(window.location.href);
43
+ }
44
+
45
+ let activeCleanup: (() => void) | null = null;
46
+ let activeApp: StackClientApp<true> | null = null;
47
+ let mountGeneration = 0;
48
+
49
+ let createDevToolPromise: Promise<typeof CreateDevToolFn> | null = null;
50
+ function loadCreateDevTool(): Promise<typeof CreateDevToolFn> {
51
+ if (!createDevToolPromise) {
52
+ createDevToolPromise = import("./dev-tool-core").then(m => m.createDevTool).catch((err) => {
53
+ createDevToolPromise = null;
54
+ throw err;
55
+ });
56
+ }
57
+ return createDevToolPromise;
58
+ }
59
+
60
+ function tryMount() {
61
+ if (activeCleanup) {
62
+ activeCleanup();
63
+ activeCleanup = null;
64
+ }
65
+
66
+ if (!shouldShow() || !activeApp || !canMountIntoDom()) return;
67
+
68
+ const generation = ++mountGeneration;
69
+ const app = activeApp;
70
+
71
+ runAsynchronously(async () => {
72
+ const createDevTool = await loadCreateDevTool();
73
+ if (generation !== mountGeneration) return;
74
+ if (!shouldShow() || activeApp !== app || !canMountIntoDom()) return;
75
+ activeCleanup = createDevTool(app);
76
+ }, {
77
+ noErrorLogging: true,
78
+ onError: (error) => {
79
+ captureError("dev-tool-mount", error);
80
+ },
81
+ });
82
+ }
83
+
84
+ /**
85
+ * Mounts the Hexclave dev tool on the page.
86
+ *
87
+ * - Only renders on localhost (or when overridden via console)
88
+ * - Lazily loads the dev tool UI via dynamic import
89
+ * - Returns a cleanup function to unmount
90
+ *
91
+ * Console commands (also work in production):
92
+ * HexclaveDevTool.enable() — force-show the dev tool
93
+ * HexclaveDevTool.disable() — force-hide the dev tool
94
+ * HexclaveDevTool.reset() — revert to default (localhost-only)
95
+ */
96
+ export function mountDevTool(app: StackClientApp<true>): () => void {
97
+ activeApp = app;
98
+ tryMount();
99
+
100
+ // Capture the cleanup created by THIS specific mount call so that React
101
+ // StrictMode's double-invoke doesn't let the first effect's cleanup tear
102
+ // down the second mount (which would cause the tool to disappear silently).
103
+ const myCleanup = activeCleanup;
104
+
105
+ return () => {
106
+ activeApp = null;
107
+ if (activeCleanup === myCleanup && myCleanup != null) {
108
+ activeCleanup = null;
109
+ myCleanup();
110
+ }
111
+ };
112
+ }
113
+
114
+ // Expose console commands: HexclaveDevTool.enable() / .disable() / .reset()
115
+ if (typeof window !== 'undefined') {
116
+ // Hexclave rebrand: expose under both the legacy and new global names.
117
+ (window as any).HexclaveDevTool = (window as any).HexclaveDevTool = {
118
+ enable() {
119
+ try {
120
+ localStorage.setItem(OVERRIDE_KEY, 'true');
121
+ } catch {}
122
+ tryMount();
123
+ console.log('[Stack DevTool] Enabled. Refresh if the panel does not appear.');
124
+ },
125
+ disable() {
126
+ try {
127
+ localStorage.setItem(OVERRIDE_KEY, 'false');
128
+ } catch {}
129
+ if (activeCleanup) {
130
+ activeCleanup();
131
+ activeCleanup = null;
132
+ }
133
+ console.log('[Stack DevTool] Disabled.');
134
+ },
135
+ reset() {
136
+ try {
137
+ localStorage.removeItem(OVERRIDE_KEY);
138
+ } catch {}
139
+ if (shouldShow()) {
140
+ tryMount();
141
+ } else if (activeCleanup) {
142
+ activeCleanup();
143
+ activeCleanup = null;
144
+ }
145
+ console.log('[Stack DevTool] Reset to default (visible on localhost only).');
146
+ },
147
+ };
148
+ }
149
+
package/src/index.ts ADDED
@@ -0,0 +1,12 @@
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
+ export * from './lib/hexclave-app';
6
+ export { getConvexProvidersConfig } from "./integrations/convex";
7
+ // Hexclave aliases and legacy Stack* names — @deprecated JSDoc lives on the original
8
+ // declarations in @hexclave/shared/config so it survives dts bundling
9
+ // (per-specifier JSDoc on re-exports does not).
10
+ export type { HexclaveConfig, StackConfig } from "@hexclave/shared/config";
11
+ export { defineHexclaveConfig, defineStackConfig } from "@hexclave/shared/config";
12
+
@@ -0,0 +1,74 @@
1
+ # Hexclave Convex Component
2
+
3
+ This component is the official way to integrate Hexclave with your Convex project.
4
+
5
+ ## Installation
6
+
7
+ To get started, first install Hexclave using the setup wizard:
8
+
9
+ ```bash
10
+ npx @hexclave/cli@latest init
11
+ ```
12
+
13
+ ## Get Started
14
+
15
+ [Create a new Hexclave project](https://app.hexclave.com) and set the environment variables in Convex to the project ID & API key environment variables from the Hexclave dashboard. Also, add the same values to the `.env.local` file.
16
+
17
+ Next, update or create a file in `convex/auth.config.ts`:
18
+
19
+ ```ts
20
+ import { getConvexProvidersConfig } from "@hexclave/js/convex-auth.config"; // Vanilla JS
21
+ // or: import { getConvexProvidersConfig } from "@hexclave/react/convex-auth.config"; // React
22
+ // or: import { getConvexProvidersConfig } from "@hexclave/next/convex-auth.config"; // Next.js
23
+
24
+ export default {
25
+ providers: getConvexProvidersConfig({
26
+ projectId: process.env.STACK_PROJECT_ID, // or: process.env.NEXT_PUBLIC_STACK_PROJECT_ID
27
+ }),
28
+ }
29
+ ```
30
+
31
+ Next, update or create a file in `convex/convex.config.ts`:
32
+
33
+ ```ts
34
+ import { defineApp } from "convex/server";
35
+ import stackAuthComponent from "@hexclave/js/convex.config"; // Vanilla JS
36
+ // or: import stackAuthComponent from "@hexclave/react/convex.config"; // React
37
+ // or: import stackAuthComponent from "@hexclave/next/convex.config"; // Next.js
38
+
39
+
40
+ const app = defineApp();
41
+ app.use(stackAuthComponent);
42
+
43
+ export default app;
44
+ ```
45
+
46
+ Then, update your Convex client to use Hexclave:
47
+
48
+ ```ts
49
+ convexClient.setAuth(hexclaveClientApp.getConvexClientAuth({})); // browser JS
50
+ convexReactClient.setAuth(hexclaveClientApp.getConvexClientAuth({})); // React
51
+ convexHttpClient.setAuth(hexclaveClientApp.getConvexHttpClientAuth({ tokenStore: requestObject })); // HTTP, see Hexclave docs for more information on tokenStore
52
+ ```
53
+
54
+ Now, you'll be able to access Hexclave's functionality from your frontend & backend:
55
+
56
+ ```ts
57
+ // MyPage.tsx
58
+ export function MyPage() {
59
+ // see https://docs.hexclave.com for more information on how to use Hexclave
60
+ const user = useUser();
61
+ return <div>Your email is {user.email}</div>;
62
+ }
63
+
64
+ // myFunctions.ts
65
+ export const myQuery = query({
66
+ handler: async (ctx, args) => {
67
+ // In queries & mutations, use the special `getPartialUser` function to get user info
68
+ const obj = await hexclaveServerApp.getPartialUser({ from: "convex", ctx });
69
+ return JSON.stringify(obj);
70
+ },
71
+ });
72
+ ```
73
+
74
+ For more information on how to use Hexclave, see the [Hexclave docs](https://docs.hexclave.com).
@@ -0,0 +1,9 @@
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 { defineComponent } from "convex/server";
6
+
7
+ const component = defineComponent("stack_auth");
8
+
9
+ export default component;
@@ -0,0 +1,28 @@
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 { urlString } from "@hexclave/shared/dist/utils/urls";
6
+ import { defaultBaseUrl } from "../lib/hexclave-app/apps/implementations/common";
7
+
8
+ export function getConvexProvidersConfig(options: {
9
+ baseUrl?: string,
10
+ projectId: string,
11
+ }) {
12
+ const baseUrl = options.baseUrl || defaultBaseUrl;
13
+ const projectId = options.projectId;
14
+ return [
15
+ {
16
+ type: "customJwt",
17
+ issuer: new URL(urlString`/api/v1/projects/${projectId}`, baseUrl),
18
+ jwks: new URL(urlString`/api/v1/projects/${projectId}/.well-known/jwks.json`, baseUrl),
19
+ algorithm: "ES256",
20
+ },
21
+ {
22
+ type: "customJwt",
23
+ issuer: new URL(urlString`/api/v1/projects-anonymous-users/${projectId}`, baseUrl),
24
+ jwks: new URL(urlString`/api/v1/projects/${projectId}/.well-known/jwks.json?include_anonymous=true`, baseUrl),
25
+ algorithm: "ES256",
26
+ },
27
+ ];
28
+ }
@@ -0,0 +1,67 @@
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 { HexclaveClientInterface } from "@hexclave/shared";
8
+ import { describe, expect, it, vi } from "vitest";
9
+ import { getNewOAuthProviderOrScopeUrl } from "./auth";
10
+
11
+ vi.mock("./cookie", async (importOriginal) => {
12
+ const actual = await importOriginal<typeof import("./cookie")>();
13
+ return {
14
+ ...actual,
15
+ saveVerifierAndState: async () => ({
16
+ codeChallenge: "<stripped code challenge>",
17
+ state: "<stripped state>",
18
+ }),
19
+ };
20
+ });
21
+
22
+ describe("getNewOAuthProviderOrScopeUrl", () => {
23
+ it("returns the OAuth URL without performing navigation", async () => {
24
+ window.history.replaceState({}, "", "/account?after_auth_return_to=%2Fsettings");
25
+
26
+ const iface = new HexclaveClientInterface({
27
+ clientVersion: "test",
28
+ getBaseUrl: () => "https://api.example.com",
29
+ getApiUrls: () => ["https://api.example.com"],
30
+ extraRequestHeaders: {},
31
+ projectId: "00000000-0000-4000-8000-000000000000",
32
+ publishableClientKey: "pck_test",
33
+ });
34
+ const session = iface.createSession({ refreshToken: null, accessToken: null });
35
+
36
+ const location = await getNewOAuthProviderOrScopeUrl(
37
+ iface,
38
+ {
39
+ provider: "github",
40
+ redirectUrl: "/handler/oauth-callback",
41
+ errorRedirectUrl: "/handler/error",
42
+ providerScope: "repo user",
43
+ },
44
+ session,
45
+ );
46
+
47
+ const url = new URL(location);
48
+ expect(`${url.origin}${url.pathname}`).toBe("https://api.example.com/api/v1/auth/oauth/authorize/github");
49
+ expect(Object.fromEntries(url.searchParams.entries())).toMatchInlineSnapshot(`
50
+ {
51
+ "after_callback_redirect_url": "http://localhost:3000/account?after_auth_return_to=%2Fsettings",
52
+ "client_id": "00000000-0000-4000-8000-000000000000",
53
+ "client_secret": "pck_test",
54
+ "code_challenge": "<stripped code challenge>",
55
+ "code_challenge_method": "S256",
56
+ "error_redirect_url": "http://localhost:3000/handler/error?after_auth_return_to=%2Fsettings",
57
+ "grant_type": "authorization_code",
58
+ "provider_scope": "repo user",
59
+ "redirect_uri": "http://localhost:3000/handler/oauth-callback?after_auth_return_to=%2Fsettings",
60
+ "response_type": "code",
61
+ "scope": "legacy",
62
+ "state": "<stripped state>",
63
+ "type": "link",
64
+ }
65
+ `);
66
+ });
67
+ });