@hexclave/js 1.0.3 → 1.0.6

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 (452) 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/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js +304 -0
  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 +14 -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 +54 -39
  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 +6 -6
  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 +8 -8
  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 +23 -9
  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 +13 -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/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js +304 -0
  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 +14 -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 +52 -37
  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 +5 -5
  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 +23 -9
  267. package/dist/lib/hexclave-app/url-targets.js.map +1 -0
  268. package/dist/lib/{stack-app → hexclave-app}/url-targets.test.js +13 -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 +353 -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 +3554 -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 +270 -0
  324. package/src/lib/hexclave-app/url-targets.ts +413 -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 +0 -121
  331. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  332. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  333. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  334. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  335. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +0 -1
  336. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  337. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  338. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts +0 -9
  339. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  340. package/dist/esm/lib/stack-app/apps/implementations/index.js +0 -27
  341. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +0 -1
  342. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  343. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  344. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  345. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  346. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  347. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  348. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  349. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  350. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  351. package/dist/esm/lib/stack-app/common.js +0 -7
  352. package/dist/esm/lib/stack-app/common.js.map +0 -1
  353. package/dist/esm/lib/stack-app/contact-channels/index.js.map +0 -1
  354. package/dist/esm/lib/stack-app/email-templates/index.js.map +0 -1
  355. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +0 -1
  356. package/dist/esm/lib/stack-app/permissions/index.js.map +0 -1
  357. package/dist/esm/lib/stack-app/projects/index.js.map +0 -1
  358. package/dist/esm/lib/stack-app/teams/index.js.map +0 -1
  359. package/dist/esm/lib/stack-app/url-targets.js.map +0 -1
  360. package/dist/esm/lib/stack-app/url-targets.test.js.map +0 -1
  361. package/dist/esm/lib/stack-app/users/index.js.map +0 -1
  362. package/dist/lib/stack-app/api-keys/index.d.ts.map +0 -1
  363. package/dist/lib/stack-app/api-keys/index.js.map +0 -1
  364. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  365. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  366. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js +0 -121
  367. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  368. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  369. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  370. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  371. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +0 -1
  372. package/dist/lib/stack-app/apps/implementations/common.js.map +0 -1
  373. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts.map +0 -1
  374. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  375. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  376. package/dist/lib/stack-app/apps/implementations/index.d.ts +0 -9
  377. package/dist/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  378. package/dist/lib/stack-app/apps/implementations/index.js +0 -31
  379. package/dist/lib/stack-app/apps/implementations/index.js.map +0 -1
  380. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +0 -1
  381. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  382. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +0 -1
  383. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  384. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +0 -1
  385. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  386. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  387. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +0 -1
  388. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  389. package/dist/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  390. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +0 -1
  391. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  392. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +0 -1
  393. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  394. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +0 -1
  395. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  396. package/dist/lib/stack-app/common.d.ts.map +0 -1
  397. package/dist/lib/stack-app/common.js +0 -9
  398. package/dist/lib/stack-app/common.js.map +0 -1
  399. package/dist/lib/stack-app/connected-accounts/index.d.ts.map +0 -1
  400. package/dist/lib/stack-app/contact-channels/index.d.ts.map +0 -1
  401. package/dist/lib/stack-app/contact-channels/index.js.map +0 -1
  402. package/dist/lib/stack-app/customers/index.d.ts.map +0 -1
  403. package/dist/lib/stack-app/data-vault/index.d.ts.map +0 -1
  404. package/dist/lib/stack-app/email/index.d.ts.map +0 -1
  405. package/dist/lib/stack-app/email-templates/index.d.ts.map +0 -1
  406. package/dist/lib/stack-app/email-templates/index.js.map +0 -1
  407. package/dist/lib/stack-app/internal-api-keys/index.d.ts.map +0 -1
  408. package/dist/lib/stack-app/internal-api-keys/index.js.map +0 -1
  409. package/dist/lib/stack-app/notification-categories/index.d.ts.map +0 -1
  410. package/dist/lib/stack-app/permissions/index.d.ts.map +0 -1
  411. package/dist/lib/stack-app/permissions/index.js.map +0 -1
  412. package/dist/lib/stack-app/project-configs/index.d.ts.map +0 -1
  413. package/dist/lib/stack-app/projects/index.d.ts.map +0 -1
  414. package/dist/lib/stack-app/projects/index.js.map +0 -1
  415. package/dist/lib/stack-app/session-replays/index.d.ts.map +0 -1
  416. package/dist/lib/stack-app/teams/index.d.ts.map +0 -1
  417. package/dist/lib/stack-app/teams/index.js.map +0 -1
  418. package/dist/lib/stack-app/url-targets.d.ts.map +0 -1
  419. package/dist/lib/stack-app/url-targets.js.map +0 -1
  420. package/dist/lib/stack-app/url-targets.test.js.map +0 -1
  421. package/dist/lib/stack-app/users/index.d.ts.map +0 -1
  422. package/dist/lib/stack-app/users/index.js.map +0 -1
  423. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  424. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  425. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  426. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  427. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  428. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  429. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  430. /package/dist/esm/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  431. /package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  432. /package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  433. /package/dist/esm/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  434. /package/dist/esm/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  435. /package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  436. /package/dist/esm/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  437. /package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
  438. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  439. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  440. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  441. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  442. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  443. /package/dist/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  444. /package/dist/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  445. /package/dist/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  446. /package/dist/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  447. /package/dist/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  448. /package/dist/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  449. /package/dist/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  450. /package/dist/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  451. /package/dist/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  452. /package/dist/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
@@ -0,0 +1,353 @@
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, vi } from "vitest";
6
+ import { AccessToken } from "@hexclave/shared/dist/sessions";
7
+ import { Store } from "@hexclave/shared/dist/utils/stores";
8
+ import { StackClientApp } from "../interfaces/client-app";
9
+
10
+ function createAccessTokenString(refreshTokenId: string): string {
11
+ const encode = (value: unknown) => Buffer.from(JSON.stringify(value)).toString("base64url");
12
+ const nowSeconds = Math.floor(Date.now() / 1000);
13
+ return [
14
+ encode({ alg: "none", typ: "JWT" }),
15
+ encode({
16
+ sub: "user-id",
17
+ exp: nowSeconds + 60,
18
+ iat: nowSeconds,
19
+ iss: "https://api.example.test",
20
+ aud: "project-id",
21
+ project_id: "project-id",
22
+ branch_id: "main",
23
+ refresh_token_id: refreshTokenId,
24
+ role: "authenticated",
25
+ name: null,
26
+ email: null,
27
+ email_verified: false,
28
+ selected_team_id: null,
29
+ signed_up_at: nowSeconds,
30
+ is_anonymous: false,
31
+ is_restricted: false,
32
+ restricted_reason: null,
33
+ requires_totp_mfa: false,
34
+ }),
35
+ "",
36
+ ].join(".");
37
+ }
38
+
39
+ function createMockDocument(): Document {
40
+ const cookieJar = new Map<string, string>();
41
+ return {
42
+ get cookie() {
43
+ return [...cookieJar.entries()].map(([key, value]) => `${key}=${value}`).join("; ");
44
+ },
45
+ set cookie(str: string) {
46
+ const [nameValue] = str.split(";");
47
+ const eqIndex = nameValue.indexOf("=");
48
+ if (eqIndex < 0) return;
49
+ cookieJar.set(nameValue.slice(0, eqIndex).trim(), nameValue.slice(eqIndex + 1).trim());
50
+ },
51
+ createElement: () => ({}),
52
+ } as any;
53
+ }
54
+
55
+ describe("StackClientApp cross-domain auth", () => {
56
+ it("uses the fresh post-auth refresh token when minting a cross-domain handoff", async () => {
57
+ const clientApp = new StackClientApp({
58
+ baseUrl: "http://localhost:12345",
59
+ projectId: "00000000-0000-4000-8000-000000000000",
60
+ publishableClientKey: "stack-pk-test",
61
+ tokenStore: {
62
+ accessToken: "stale-access-token",
63
+ refreshToken: "stale-refresh-token",
64
+ },
65
+ redirectMethod: "none",
66
+ noAutomaticPrefetch: true,
67
+ });
68
+
69
+ const clientInterface = Reflect.get(clientApp, "_interface");
70
+ const originalSendClientRequest = Reflect.get(clientInterface, "sendClientRequest");
71
+ const capturedRefreshTokens: string[] = [];
72
+
73
+ Reflect.set(clientInterface, "sendClientRequest", async (_path: unknown, _requestOptions: unknown, session: unknown) => {
74
+ const getRefreshToken = Reflect.get(session ?? {}, "getRefreshToken");
75
+ if (typeof getRefreshToken !== "function") {
76
+ throw new Error("Expected cross-domain auth to pass a session to the client interface.");
77
+ }
78
+ const refreshToken = getRefreshToken.call(session);
79
+ const refreshTokenString = Reflect.get(refreshToken ?? {}, "token");
80
+ if (typeof refreshTokenString !== "string") {
81
+ throw new Error("Expected cross-domain auth to pass a refresh-token-backed session.");
82
+ }
83
+ capturedRefreshTokens.push(refreshTokenString);
84
+ return {
85
+ ok: true,
86
+ json: async () => ({ redirect_url: "https://example.com/handler/oauth-callback?code=handoff-code&state=handoff-state" }),
87
+ };
88
+ });
89
+
90
+ try {
91
+ const createCrossDomainAuthRedirectUrl = Reflect.get(clientApp, "_createCrossDomainAuthRedirectUrl");
92
+ if (typeof createCrossDomainAuthRedirectUrl !== "function") {
93
+ throw new Error("Expected StackClientApp to expose _createCrossDomainAuthRedirectUrl in tests.");
94
+ }
95
+
96
+ await expect(createCrossDomainAuthRedirectUrl.call(clientApp, {
97
+ redirectUri: "https://example.com/handler/oauth-callback",
98
+ state: "handoff-state",
99
+ codeChallenge: "abcdefghijklmnopqrstuvwxyzABCDEFG_0123456789-._~",
100
+ afterCallbackRedirectUrl: "https://example.com/account-settings",
101
+ overrideTokenStoreInit: {
102
+ accessToken: "fresh-access-token",
103
+ refreshToken: "fresh-refresh-token",
104
+ },
105
+ })).resolves.toBe("https://example.com/handler/oauth-callback?code=handoff-code&state=handoff-state");
106
+ } finally {
107
+ Reflect.set(clientInterface, "sendClientRequest", originalSendClientRequest);
108
+ }
109
+
110
+ expect(capturedRefreshTokens).toEqual(["fresh-refresh-token"]);
111
+ });
112
+
113
+ it("uses a fresh nested OAuth state while preserving the outer cross-domain return state", async () => {
114
+ const projectId = "00000000-0000-4000-8000-000000000002";
115
+ const clientApp = new StackClientApp({
116
+ baseUrl: "http://localhost:12345",
117
+ projectId,
118
+ publishableClientKey: "stack-pk-test",
119
+ tokenStore: "memory",
120
+ redirectMethod: "window",
121
+ urls: {
122
+ default: { type: "hosted" },
123
+ },
124
+ noAutomaticPrefetch: true,
125
+ });
126
+ const outerState = "outer-cross-domain-state";
127
+ const outerCodeChallenge = "abcdefghijklmnopqrstuvwxyzABCDEFG_0123456789-._~";
128
+ const currentUrl = new URL(`https://${projectId}.example-stack-hosted.test/handler/sign-in`);
129
+ currentUrl.searchParams.set("after_auth_return_to", `https://demo.stack-auth.com/?hexclave_cross_domain_auth=1&hexclave_cross_domain_state=${outerState}`);
130
+ currentUrl.searchParams.set("hexclave_cross_domain_state", outerState);
131
+ currentUrl.searchParams.set("hexclave_cross_domain_code_challenge", outerCodeChallenge);
132
+ currentUrl.searchParams.set("hexclave_cross_domain_after_callback_redirect_url", "https://demo.stack-auth.com/");
133
+ currentUrl.searchParams.set("stack_nested_cross_domain_auth_refresh_token_id", "source-session");
134
+ currentUrl.searchParams.set("stack_nested_cross_domain_auth_callback_url", "https://demo.stack-auth.com/");
135
+
136
+ const previousWindow = globalThis.window;
137
+ const previousDocument = globalThis.document;
138
+ let redirectedUrl = "";
139
+ vi.spyOn(clientApp as any, "_getCurrentRefreshTokenIdIfSignedIn").mockResolvedValue(null);
140
+ vi.spyOn(clientApp as any, "_getCrossDomainHandoffParamsForRedirect").mockResolvedValue({
141
+ state: "fresh-nested-state",
142
+ codeChallenge: "fresh-nested-code-challenge",
143
+ });
144
+ vi.spyOn(clientApp as any, "_isTrusted").mockResolvedValue(true);
145
+
146
+ globalThis.document = createMockDocument();
147
+ globalThis.window = {
148
+ location: {
149
+ href: currentUrl.toString(),
150
+ replace: (url: string) => {
151
+ redirectedUrl = url;
152
+ throw new Error("INTENTIONAL_TEST_ABORT");
153
+ },
154
+ },
155
+ } as any;
156
+
157
+ try {
158
+ await expect((clientApp as any)._maybeHandleNestedCrossDomainAuth()).rejects.toThrowError("INTENTIONAL_TEST_ABORT");
159
+ } finally {
160
+ globalThis.window = previousWindow;
161
+ globalThis.document = previousDocument;
162
+ }
163
+
164
+ const redirectUrl = new URL(redirectedUrl);
165
+ expect(redirectUrl.searchParams.get("state")).toBe("fresh-nested-state");
166
+ expect(redirectUrl.searchParams.get("code_challenge")).toBe("fresh-nested-code-challenge");
167
+ const redirectUri = new URL(redirectUrl.searchParams.get("redirect_uri") ?? "");
168
+ expect(redirectUri.searchParams.get("hexclave_cross_domain_state")).toBe(outerState);
169
+ expect(redirectUri.searchParams.get("hexclave_cross_domain_code_challenge")).toBe(outerCodeChallenge);
170
+ expect(redirectUri.searchParams.get("hexclave_cross_domain_after_callback_redirect_url")).toBe("https://demo.stack-auth.com/");
171
+ });
172
+
173
+ it("clears a stale target-domain session before deferring to the source-domain session", async () => {
174
+ const projectId = "00000000-0000-4000-8000-000000000006";
175
+ const hostedAccessToken = createAccessTokenString("hosted-old-refresh-token-id");
176
+ const clientApp = new StackClientApp({
177
+ baseUrl: "http://localhost:12345",
178
+ projectId,
179
+ publishableClientKey: "stack-pk-test",
180
+ tokenStore: "memory",
181
+ redirectMethod: "window",
182
+ urls: {
183
+ default: { type: "hosted" },
184
+ },
185
+ noAutomaticPrefetch: true,
186
+ });
187
+ const tokenStore = Reflect.get(clientApp, "_memoryTokenStore");
188
+ if (!(tokenStore instanceof Store)) {
189
+ throw new Error("Expected StackClientApp to use a memory token store in this test.");
190
+ }
191
+ tokenStore.set({
192
+ refreshToken: "hosted-old-refresh-token",
193
+ accessToken: hostedAccessToken,
194
+ });
195
+
196
+ const currentUrl = new URL(`https://${projectId}.example-stack-hosted.test/handler/sign-in`);
197
+ currentUrl.searchParams.set("stack_nested_cross_domain_auth_refresh_token_id", "source-anonymous-refresh-token-id");
198
+ currentUrl.searchParams.set("stack_nested_cross_domain_auth_callback_url", "https://demo.stack-auth.com/handler/oauth-callback");
199
+ currentUrl.searchParams.set("hexclave_cross_domain_state", "outer-state");
200
+ currentUrl.searchParams.set("hexclave_cross_domain_code_challenge", "outer-code-challenge");
201
+ currentUrl.searchParams.set("hexclave_cross_domain_after_callback_redirect_url", "https://demo.stack-auth.com/app");
202
+
203
+ const previousWindow = globalThis.window;
204
+ const previousDocument = globalThis.document;
205
+ let redirectedUrl = "";
206
+ vi.spyOn(clientApp as any, "_isTrusted").mockResolvedValue(true);
207
+
208
+ globalThis.document = createMockDocument();
209
+ globalThis.window = {
210
+ location: {
211
+ href: currentUrl.toString(),
212
+ replace: (url: string) => {
213
+ redirectedUrl = url;
214
+ throw new Error("INTENTIONAL_TEST_ABORT");
215
+ },
216
+ },
217
+ } as any;
218
+
219
+ try {
220
+ await expect((clientApp as any)._maybeHandleNestedCrossDomainAuth()).rejects.toThrowError("INTENTIONAL_TEST_ABORT");
221
+ } finally {
222
+ globalThis.window = previousWindow;
223
+ globalThis.document = previousDocument;
224
+ }
225
+
226
+ expect(tokenStore.get()).toEqual({
227
+ refreshToken: null,
228
+ accessToken: null,
229
+ });
230
+ expect(new URL(redirectedUrl).origin).toBe("https://demo.stack-auth.com");
231
+ });
232
+
233
+ it("uses direct sign-out instead of hosted sign-out redirects when code execution is available", async () => {
234
+ const clientApp = new StackClientApp({
235
+ baseUrl: "http://localhost:12345",
236
+ projectId: "00000000-0000-4000-8000-000000000003",
237
+ publishableClientKey: "stack-pk-test",
238
+ tokenStore: "memory",
239
+ redirectMethod: "window",
240
+ urls: {
241
+ handler: "/handler",
242
+ signOut: { type: "hosted" },
243
+ },
244
+ noAutomaticPrefetch: true,
245
+ });
246
+ const signOutSpy = vi.spyOn(clientApp, "signOut").mockRejectedValue(new Error("INTENTIONAL_TEST_ABORT"));
247
+
248
+ try {
249
+ await expect(clientApp.redirectToSignOut()).rejects.toThrowError("INTENTIONAL_TEST_ABORT");
250
+ expect(signOutSpy).toHaveBeenCalledWith();
251
+ } finally {
252
+ signOutSpy.mockRestore();
253
+ }
254
+ });
255
+
256
+ it("keeps default hosted signOut() on the source domain when afterSignOut is not configured", async () => {
257
+ const clientApp = new StackClientApp({
258
+ baseUrl: "http://localhost:12345",
259
+ projectId: "00000000-0000-4000-8000-000000000004",
260
+ publishableClientKey: "stack-pk-test",
261
+ tokenStore: "memory",
262
+ redirectMethod: "window",
263
+ urls: {
264
+ default: { type: "hosted" },
265
+ },
266
+ noAutomaticPrefetch: true,
267
+ });
268
+ const currentHref = "https://demo.stack-auth.com/settings?tab=profile";
269
+
270
+ const clientInterface = Reflect.get(clientApp, "_interface");
271
+ const originalSignOut = Reflect.get(clientInterface, "signOut");
272
+ Reflect.set(clientInterface, "signOut", async () => {});
273
+ const previousWindow = globalThis.window;
274
+ const previousDocument = globalThis.document;
275
+ let redirectedUrl = "";
276
+
277
+ globalThis.document = createMockDocument();
278
+ globalThis.window = {
279
+ location: {
280
+ href: currentHref,
281
+ replace: (url: string) => {
282
+ redirectedUrl = url;
283
+ throw new Error("INTENTIONAL_TEST_ABORT");
284
+ },
285
+ },
286
+ } as any;
287
+
288
+ try {
289
+ const signOut = Reflect.get(clientApp, "_signOut");
290
+ if (typeof signOut !== "function") {
291
+ throw new Error("Expected StackClientApp to expose _signOut in tests.");
292
+ }
293
+ await expect(signOut.call(clientApp, {})).rejects.toThrowError("INTENTIONAL_TEST_ABORT");
294
+ } finally {
295
+ Reflect.set(clientInterface, "signOut", originalSignOut);
296
+ globalThis.window = previousWindow;
297
+ globalThis.document = previousDocument;
298
+ }
299
+
300
+ expect(redirectedUrl).toBe("/settings?tab=profile");
301
+ });
302
+
303
+ it("ignores stale session callbacks after a newer refresh token owns the token store", async () => {
304
+ const clientApp = new StackClientApp({
305
+ baseUrl: "http://localhost:12345",
306
+ projectId: "00000000-0000-4000-8000-000000000005",
307
+ publishableClientKey: "stack-pk-test",
308
+ tokenStore: "memory",
309
+ redirectMethod: "none",
310
+ noAutomaticPrefetch: true,
311
+ });
312
+ const oldAccessToken = createAccessTokenString("old-refresh-token-id");
313
+ const refreshedOldAccessToken = createAccessTokenString("refreshed-old-refresh-token-id");
314
+ const newAccessToken = createAccessTokenString("new-refresh-token-id");
315
+ const tokenStore = new Store({
316
+ refreshToken: "old-refresh-token",
317
+ accessToken: oldAccessToken,
318
+ });
319
+ const clientInterface = Reflect.get(clientApp, "_interface");
320
+ const originalFetchNewAccessToken = Reflect.get(clientInterface, "fetchNewAccessToken");
321
+ Reflect.set(clientInterface, "fetchNewAccessToken", async () => {
322
+ return AccessToken.createIfValid(refreshedOldAccessToken) ?? (() => {
323
+ throw new Error("Expected test access token to be valid");
324
+ })();
325
+ });
326
+
327
+ try {
328
+ const getSessionFromTokenStore = Reflect.get(clientApp, "_getSessionFromTokenStore");
329
+ if (typeof getSessionFromTokenStore !== "function") {
330
+ throw new Error("Expected StackClientApp to expose _getSessionFromTokenStore in tests.");
331
+ }
332
+ const oldSession = getSessionFromTokenStore.call(clientApp, tokenStore);
333
+ tokenStore.set({
334
+ refreshToken: "new-refresh-token",
335
+ accessToken: newAccessToken,
336
+ });
337
+
338
+ await oldSession.fetchNewTokens();
339
+ expect(tokenStore.get()).toEqual({
340
+ refreshToken: "new-refresh-token",
341
+ accessToken: newAccessToken,
342
+ });
343
+
344
+ oldSession.markInvalid();
345
+ expect(tokenStore.get()).toEqual({
346
+ refreshToken: "new-refresh-token",
347
+ accessToken: newAccessToken,
348
+ });
349
+ } finally {
350
+ Reflect.set(clientInterface, "fetchNewAccessToken", originalFetchNewAccessToken);
351
+ }
352
+ });
353
+ });
@@ -0,0 +1,36 @@
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 { StackClientApp } from "../interfaces/client-app";
7
+
8
+ describe("StackClientApp OAuth prefetch", () => {
9
+ it("does not prefetch cross-domain handoff params on construction", () => {
10
+ const prefetchMethodName = "_prefetchCrossDomainHandoffParamsIfNeeded";
11
+ const originalPrefetch = Reflect.get(StackClientApp.prototype, prefetchMethodName);
12
+ let prefetchCalls = 0;
13
+ Reflect.set(StackClientApp.prototype, prefetchMethodName, () => {
14
+ prefetchCalls += 1;
15
+ });
16
+
17
+ try {
18
+ new StackClientApp({
19
+ baseUrl: "http://localhost:12345",
20
+ projectId: "00000000-0000-4000-8000-000000000000",
21
+ publishableClientKey: "stack-pk-test",
22
+ tokenStore: "memory",
23
+ redirectMethod: "none",
24
+ noAutomaticPrefetch: true,
25
+ });
26
+
27
+ expect(prefetchCalls).toBe(0);
28
+ } finally {
29
+ if (originalPrefetch === undefined) {
30
+ Reflect.deleteProperty(StackClientApp.prototype, prefetchMethodName);
31
+ } else {
32
+ Reflect.set(StackClientApp.prototype, prefetchMethodName, originalPrefetch);
33
+ }
34
+ }
35
+ });
36
+ });