@hexclave/js 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +26 -0
  3. package/dist/chunk-BE-pF4vm.js +34 -0
  4. package/dist/dev-tool/dev-tool-core.d.ts +7 -0
  5. package/dist/dev-tool/dev-tool-core.d.ts.map +1 -0
  6. package/dist/dev-tool/dev-tool-core.js +2116 -0
  7. package/dist/dev-tool/dev-tool-core.js.map +1 -0
  8. package/dist/dev-tool/dev-tool-styles.d.ts +5 -0
  9. package/dist/dev-tool/dev-tool-styles.d.ts.map +1 -0
  10. package/dist/dev-tool/dev-tool-styles.js +2757 -0
  11. package/dist/dev-tool/dev-tool-styles.js.map +1 -0
  12. package/dist/dev-tool/dev-tool-trigger-position.d.ts +36 -0
  13. package/dist/dev-tool/dev-tool-trigger-position.d.ts.map +1 -0
  14. package/dist/dev-tool/dev-tool-trigger-position.js +70 -0
  15. package/dist/dev-tool/dev-tool-trigger-position.js.map +1 -0
  16. package/dist/dev-tool/dev-tool-trigger-position.test.d.ts +1 -0
  17. package/dist/dev-tool/dev-tool-trigger-position.test.js +155 -0
  18. package/dist/dev-tool/dev-tool-trigger-position.test.js.map +1 -0
  19. package/dist/dev-tool/index.d.ts +19 -0
  20. package/dist/dev-tool/index.d.ts.map +1 -0
  21. package/dist/dev-tool/index.js +119 -0
  22. package/dist/dev-tool/index.js.map +1 -0
  23. package/dist/esm/dev-tool/dev-tool-core.d.ts +7 -0
  24. package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -0
  25. package/dist/esm/dev-tool/dev-tool-core.js +2114 -0
  26. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -0
  27. package/dist/esm/dev-tool/dev-tool-styles.d.ts +5 -0
  28. package/dist/esm/dev-tool/dev-tool-styles.d.ts.map +1 -0
  29. package/dist/esm/dev-tool/dev-tool-styles.js +2755 -0
  30. package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -0
  31. package/dist/esm/dev-tool/dev-tool-trigger-position.d.ts +36 -0
  32. package/dist/esm/dev-tool/dev-tool-trigger-position.d.ts.map +1 -0
  33. package/dist/esm/dev-tool/dev-tool-trigger-position.js +65 -0
  34. package/dist/esm/dev-tool/dev-tool-trigger-position.js.map +1 -0
  35. package/dist/esm/dev-tool/dev-tool-trigger-position.test.d.ts +1 -0
  36. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js +155 -0
  37. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js.map +1 -0
  38. package/dist/esm/dev-tool/index.d.ts +19 -0
  39. package/dist/esm/dev-tool/index.d.ts.map +1 -0
  40. package/dist/esm/dev-tool/index.js +117 -0
  41. package/dist/esm/dev-tool/index.js.map +1 -0
  42. package/dist/esm/index.d.ts +4 -0
  43. package/dist/esm/index.js +7 -0
  44. package/dist/esm/integrations/convex/component/convex.config.d.ts +7 -0
  45. package/dist/esm/integrations/convex/component/convex.config.d.ts.map +1 -0
  46. package/dist/esm/integrations/convex/component/convex.config.js +8 -0
  47. package/dist/esm/integrations/convex/component/convex.config.js.map +1 -0
  48. package/dist/esm/integrations/convex.d.ts +13 -0
  49. package/dist/esm/integrations/convex.d.ts.map +1 -0
  50. package/dist/esm/integrations/convex.js +23 -0
  51. package/dist/esm/integrations/convex.js.map +1 -0
  52. package/dist/esm/internal/deprecation-warning.d.ts +1 -0
  53. package/dist/esm/internal/deprecation-warning.js +24 -0
  54. package/dist/esm/internal/deprecation-warning.js.map +1 -0
  55. package/dist/esm/lib/auth.d.ts +31 -0
  56. package/dist/esm/lib/auth.d.ts.map +1 -0
  57. package/dist/esm/lib/auth.js +108 -0
  58. package/dist/esm/lib/auth.js.map +1 -0
  59. package/dist/esm/lib/auth.test.d.ts +1 -0
  60. package/dist/esm/lib/auth.test.js +60 -0
  61. package/dist/esm/lib/auth.test.js.map +1 -0
  62. package/dist/esm/lib/cookie.d.ts +42 -0
  63. package/dist/esm/lib/cookie.d.ts.map +1 -0
  64. package/dist/esm/lib/cookie.js +287 -0
  65. package/dist/esm/lib/cookie.js.map +1 -0
  66. package/dist/esm/lib/env.d.ts +42 -0
  67. package/dist/esm/lib/env.d.ts.map +1 -0
  68. package/dist/esm/lib/env.js +93 -0
  69. package/dist/esm/lib/env.js.map +1 -0
  70. package/dist/esm/lib/stack-app/api-keys/index.d.ts +53 -0
  71. package/dist/esm/lib/stack-app/api-keys/index.d.ts.map +1 -0
  72. package/dist/esm/lib/stack-app/api-keys/index.js +22 -0
  73. package/dist/esm/lib/stack-app/api-keys/index.js.map +1 -0
  74. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts +364 -0
  75. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  76. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +924 -0
  77. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -0
  78. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.d.ts +1 -0
  79. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js +55 -0
  80. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  81. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts +542 -0
  82. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  83. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +2504 -0
  84. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -0
  85. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +1 -0
  86. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js +32 -0
  87. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  88. package/dist/esm/lib/stack-app/apps/implementations/common.d.ts +65 -0
  89. package/dist/esm/lib/stack-app/apps/implementations/common.d.ts.map +1 -0
  90. package/dist/esm/lib/stack-app/apps/implementations/common.js +127 -0
  91. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -0
  92. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.d.ts +42 -0
  93. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.d.ts.map +1 -0
  94. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js +211 -0
  95. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +1 -0
  96. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.d.ts +1 -0
  97. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js +87 -0
  98. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -0
  99. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts +9 -0
  100. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts.map +1 -0
  101. package/dist/esm/lib/stack-app/apps/implementations/index.js +27 -0
  102. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +1 -0
  103. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.d.ts +35 -0
  104. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +1 -0
  105. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js +197 -0
  106. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -0
  107. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.d.ts +203 -0
  108. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +1 -0
  109. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js +1094 -0
  110. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -0
  111. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts +28 -0
  112. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -0
  113. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js +31 -0
  114. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  115. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.d.ts +1 -0
  116. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js +82 -0
  117. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  118. package/dist/esm/lib/stack-app/apps/implementations/session-replay.d.ts +111 -0
  119. package/dist/esm/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -0
  120. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js +241 -0
  121. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +1 -0
  122. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.d.ts +1 -0
  123. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js +29 -0
  124. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js.map +1 -0
  125. package/dist/esm/lib/stack-app/apps/index.d.ts +4 -0
  126. package/dist/esm/lib/stack-app/apps/index.js +5 -0
  127. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts +244 -0
  128. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -0
  129. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js +9 -0
  130. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +1 -0
  131. package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts +208 -0
  132. package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -0
  133. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js +9 -0
  134. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -0
  135. package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts +116 -0
  136. package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -0
  137. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js +9 -0
  138. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +1 -0
  139. package/dist/esm/lib/stack-app/common.d.ts +174 -0
  140. package/dist/esm/lib/stack-app/common.d.ts.map +1 -0
  141. package/dist/esm/lib/stack-app/common.js +7 -0
  142. package/dist/esm/lib/stack-app/common.js.map +1 -0
  143. package/dist/esm/lib/stack-app/connected-accounts/index.d.ts +40 -0
  144. package/dist/esm/lib/stack-app/connected-accounts/index.d.ts.map +1 -0
  145. package/dist/esm/lib/stack-app/connected-accounts/index.js +1 -0
  146. package/dist/esm/lib/stack-app/contact-channels/index.d.ts +43 -0
  147. package/dist/esm/lib/stack-app/contact-channels/index.d.ts.map +1 -0
  148. package/dist/esm/lib/stack-app/contact-channels/index.js +39 -0
  149. package/dist/esm/lib/stack-app/contact-channels/index.js.map +1 -0
  150. package/dist/esm/lib/stack-app/customers/index.d.ts +129 -0
  151. package/dist/esm/lib/stack-app/customers/index.d.ts.map +1 -0
  152. package/dist/esm/lib/stack-app/customers/index.js +1 -0
  153. package/dist/esm/lib/stack-app/data-vault/index.d.ts +14 -0
  154. package/dist/esm/lib/stack-app/data-vault/index.d.ts.map +1 -0
  155. package/dist/esm/lib/stack-app/data-vault/index.js +1 -0
  156. package/dist/esm/lib/stack-app/email/index.d.ts +204 -0
  157. package/dist/esm/lib/stack-app/email/index.d.ts.map +1 -0
  158. package/dist/esm/lib/stack-app/email/index.js +1 -0
  159. package/dist/esm/lib/stack-app/email-templates/index.d.ts +17 -0
  160. package/dist/esm/lib/stack-app/email-templates/index.d.ts.map +1 -0
  161. package/dist/esm/lib/stack-app/email-templates/index.js +11 -0
  162. package/dist/esm/lib/stack-app/email-templates/index.js.map +1 -0
  163. package/dist/esm/lib/stack-app/index.d.ts +14 -0
  164. package/dist/esm/lib/stack-app/index.js +5 -0
  165. package/dist/esm/lib/stack-app/internal-api-keys/index.d.ts +42 -0
  166. package/dist/esm/lib/stack-app/internal-api-keys/index.d.ts.map +1 -0
  167. package/dist/esm/lib/stack-app/internal-api-keys/index.js +14 -0
  168. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +1 -0
  169. package/dist/esm/lib/stack-app/notification-categories/index.d.ts +11 -0
  170. package/dist/esm/lib/stack-app/notification-categories/index.d.ts.map +1 -0
  171. package/dist/esm/lib/stack-app/notification-categories/index.js +1 -0
  172. package/dist/esm/lib/stack-app/permissions/index.d.ts +43 -0
  173. package/dist/esm/lib/stack-app/permissions/index.d.ts.map +1 -0
  174. package/dist/esm/lib/stack-app/permissions/index.js +31 -0
  175. package/dist/esm/lib/stack-app/permissions/index.js.map +1 -0
  176. package/dist/esm/lib/stack-app/project-configs/index.d.ts +99 -0
  177. package/dist/esm/lib/stack-app/project-configs/index.d.ts.map +1 -0
  178. package/dist/esm/lib/stack-app/project-configs/index.js +1 -0
  179. package/dist/esm/lib/stack-app/projects/index.d.ts +145 -0
  180. package/dist/esm/lib/stack-app/projects/index.d.ts.map +1 -0
  181. package/dist/esm/lib/stack-app/projects/index.js +66 -0
  182. package/dist/esm/lib/stack-app/projects/index.js.map +1 -0
  183. package/dist/esm/lib/stack-app/session-replays/index.d.ts +66 -0
  184. package/dist/esm/lib/stack-app/session-replays/index.d.ts.map +1 -0
  185. package/dist/esm/lib/stack-app/session-replays/index.js +1 -0
  186. package/dist/esm/lib/stack-app/teams/index.d.ts +160 -0
  187. package/dist/esm/lib/stack-app/teams/index.d.ts.map +1 -0
  188. package/dist/esm/lib/stack-app/teams/index.js +35 -0
  189. package/dist/esm/lib/stack-app/teams/index.js.map +1 -0
  190. package/dist/esm/lib/stack-app/url-targets.d.ts +39 -0
  191. package/dist/esm/lib/stack-app/url-targets.d.ts.map +1 -0
  192. package/dist/esm/lib/stack-app/url-targets.js +266 -0
  193. package/dist/esm/lib/stack-app/url-targets.js.map +1 -0
  194. package/dist/esm/lib/stack-app/url-targets.test.d.ts +1 -0
  195. package/dist/esm/lib/stack-app/url-targets.test.js +213 -0
  196. package/dist/esm/lib/stack-app/url-targets.test.js.map +1 -0
  197. package/dist/esm/lib/stack-app/users/index.d.ts +357 -0
  198. package/dist/esm/lib/stack-app/users/index.d.ts.map +1 -0
  199. package/dist/esm/lib/stack-app/users/index.js +71 -0
  200. package/dist/esm/lib/stack-app/users/index.js.map +1 -0
  201. package/dist/esm/utils/url.d.ts +5 -0
  202. package/dist/esm/utils/url.d.ts.map +1 -0
  203. package/dist/esm/utils/url.js +16 -0
  204. package/dist/esm/utils/url.js.map +1 -0
  205. package/dist/index.d.ts +17 -0
  206. package/dist/index.js +31 -0
  207. package/dist/integrations/convex/component/convex.config.d.ts +61 -0
  208. package/dist/integrations/convex/component/convex.config.d.ts.map +1 -0
  209. package/dist/integrations/convex/component/convex.config.js +9 -0
  210. package/dist/integrations/convex/component/convex.config.js.map +1 -0
  211. package/dist/integrations/convex.d.ts +13 -0
  212. package/dist/integrations/convex.d.ts.map +1 -0
  213. package/dist/integrations/convex.js +25 -0
  214. package/dist/integrations/convex.js.map +1 -0
  215. package/dist/internal/deprecation-warning.d.ts +1 -0
  216. package/dist/internal/deprecation-warning.js +24 -0
  217. package/dist/internal/deprecation-warning.js.map +1 -0
  218. package/dist/lib/auth.d.ts +31 -0
  219. package/dist/lib/auth.d.ts.map +1 -0
  220. package/dist/lib/auth.js +111 -0
  221. package/dist/lib/auth.js.map +1 -0
  222. package/dist/lib/auth.test.d.ts +1 -0
  223. package/dist/lib/auth.test.js +60 -0
  224. package/dist/lib/auth.test.js.map +1 -0
  225. package/dist/lib/cookie.d.ts +42 -0
  226. package/dist/lib/cookie.d.ts.map +1 -0
  227. package/dist/lib/cookie.js +305 -0
  228. package/dist/lib/cookie.js.map +1 -0
  229. package/dist/lib/env.d.ts +42 -0
  230. package/dist/lib/env.d.ts.map +1 -0
  231. package/dist/lib/env.js +95 -0
  232. package/dist/lib/env.js.map +1 -0
  233. package/dist/lib/stack-app/api-keys/index.d.ts +53 -0
  234. package/dist/lib/stack-app/api-keys/index.d.ts.map +1 -0
  235. package/dist/lib/stack-app/api-keys/index.js +25 -0
  236. package/dist/lib/stack-app/api-keys/index.js.map +1 -0
  237. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts +362 -0
  238. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  239. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +926 -0
  240. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -0
  241. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.d.ts +1 -0
  242. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js +55 -0
  243. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  244. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts +541 -0
  245. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  246. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +2507 -0
  247. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -0
  248. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +1 -0
  249. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js +32 -0
  250. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  251. package/dist/lib/stack-app/apps/implementations/common.d.ts +65 -0
  252. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +1 -0
  253. package/dist/lib/stack-app/apps/implementations/common.js +144 -0
  254. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -0
  255. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts +42 -0
  256. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts.map +1 -0
  257. package/dist/lib/stack-app/apps/implementations/event-tracker.js +213 -0
  258. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +1 -0
  259. package/dist/lib/stack-app/apps/implementations/event-tracker.test.d.ts +1 -0
  260. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js +87 -0
  261. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -0
  262. package/dist/lib/stack-app/apps/implementations/index.d.ts +9 -0
  263. package/dist/lib/stack-app/apps/implementations/index.d.ts.map +1 -0
  264. package/dist/lib/stack-app/apps/implementations/index.js +31 -0
  265. package/dist/lib/stack-app/apps/implementations/index.js.map +1 -0
  266. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts +35 -0
  267. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +1 -0
  268. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js +201 -0
  269. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -0
  270. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts +203 -0
  271. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +1 -0
  272. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +1096 -0
  273. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -0
  274. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts +28 -0
  275. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -0
  276. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js +33 -0
  277. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  278. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.d.ts +1 -0
  279. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js +82 -0
  280. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  281. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts +111 -0
  282. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -0
  283. package/dist/lib/stack-app/apps/implementations/session-replay.js +250 -0
  284. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +1 -0
  285. package/dist/lib/stack-app/apps/implementations/session-replay.test.d.ts +1 -0
  286. package/dist/lib/stack-app/apps/implementations/session-replay.test.js +29 -0
  287. package/dist/lib/stack-app/apps/implementations/session-replay.test.js.map +1 -0
  288. package/dist/lib/stack-app/apps/index.d.ts +4 -0
  289. package/dist/lib/stack-app/apps/index.js +42 -0
  290. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts +244 -0
  291. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -0
  292. package/dist/lib/stack-app/apps/interfaces/admin-app.js +12 -0
  293. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +1 -0
  294. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts +208 -0
  295. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -0
  296. package/dist/lib/stack-app/apps/interfaces/client-app.js +12 -0
  297. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -0
  298. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts +116 -0
  299. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -0
  300. package/dist/lib/stack-app/apps/interfaces/server-app.js +12 -0
  301. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +1 -0
  302. package/dist/lib/stack-app/common.d.ts +174 -0
  303. package/dist/lib/stack-app/common.d.ts.map +1 -0
  304. package/dist/lib/stack-app/common.js +9 -0
  305. package/dist/lib/stack-app/common.js.map +1 -0
  306. package/dist/lib/stack-app/connected-accounts/index.d.ts +40 -0
  307. package/dist/lib/stack-app/connected-accounts/index.d.ts.map +1 -0
  308. package/dist/lib/stack-app/connected-accounts/index.js +0 -0
  309. package/dist/lib/stack-app/contact-channels/index.d.ts +43 -0
  310. package/dist/lib/stack-app/contact-channels/index.d.ts.map +1 -0
  311. package/dist/lib/stack-app/contact-channels/index.js +44 -0
  312. package/dist/lib/stack-app/contact-channels/index.js.map +1 -0
  313. package/dist/lib/stack-app/customers/index.d.ts +129 -0
  314. package/dist/lib/stack-app/customers/index.d.ts.map +1 -0
  315. package/dist/lib/stack-app/customers/index.js +0 -0
  316. package/dist/lib/stack-app/data-vault/index.d.ts +14 -0
  317. package/dist/lib/stack-app/data-vault/index.d.ts.map +1 -0
  318. package/dist/lib/stack-app/data-vault/index.js +0 -0
  319. package/dist/lib/stack-app/email/index.d.ts +204 -0
  320. package/dist/lib/stack-app/email/index.d.ts.map +1 -0
  321. package/dist/lib/stack-app/email/index.js +0 -0
  322. package/dist/lib/stack-app/email-templates/index.d.ts +17 -0
  323. package/dist/lib/stack-app/email-templates/index.d.ts.map +1 -0
  324. package/dist/lib/stack-app/email-templates/index.js +13 -0
  325. package/dist/lib/stack-app/email-templates/index.js.map +1 -0
  326. package/dist/lib/stack-app/index.d.ts +15 -0
  327. package/dist/lib/stack-app/index.js +54 -0
  328. package/dist/lib/stack-app/internal-api-keys/index.d.ts +42 -0
  329. package/dist/lib/stack-app/internal-api-keys/index.d.ts.map +1 -0
  330. package/dist/lib/stack-app/internal-api-keys/index.js +16 -0
  331. package/dist/lib/stack-app/internal-api-keys/index.js.map +1 -0
  332. package/dist/lib/stack-app/notification-categories/index.d.ts +11 -0
  333. package/dist/lib/stack-app/notification-categories/index.d.ts.map +1 -0
  334. package/dist/lib/stack-app/notification-categories/index.js +0 -0
  335. package/dist/lib/stack-app/permissions/index.d.ts +43 -0
  336. package/dist/lib/stack-app/permissions/index.d.ts.map +1 -0
  337. package/dist/lib/stack-app/permissions/index.js +36 -0
  338. package/dist/lib/stack-app/permissions/index.js.map +1 -0
  339. package/dist/lib/stack-app/project-configs/index.d.ts +99 -0
  340. package/dist/lib/stack-app/project-configs/index.d.ts.map +1 -0
  341. package/dist/lib/stack-app/project-configs/index.js +0 -0
  342. package/dist/lib/stack-app/projects/index.d.ts +145 -0
  343. package/dist/lib/stack-app/projects/index.d.ts.map +1 -0
  344. package/dist/lib/stack-app/projects/index.js +69 -0
  345. package/dist/lib/stack-app/projects/index.js.map +1 -0
  346. package/dist/lib/stack-app/session-replays/index.d.ts +66 -0
  347. package/dist/lib/stack-app/session-replays/index.d.ts.map +1 -0
  348. package/dist/lib/stack-app/session-replays/index.js +0 -0
  349. package/dist/lib/stack-app/teams/index.d.ts +160 -0
  350. package/dist/lib/stack-app/teams/index.d.ts.map +1 -0
  351. package/dist/lib/stack-app/teams/index.js +40 -0
  352. package/dist/lib/stack-app/teams/index.js.map +1 -0
  353. package/dist/lib/stack-app/url-targets.d.ts +39 -0
  354. package/dist/lib/stack-app/url-targets.d.ts.map +1 -0
  355. package/dist/lib/stack-app/url-targets.js +274 -0
  356. package/dist/lib/stack-app/url-targets.js.map +1 -0
  357. package/dist/lib/stack-app/url-targets.test.d.ts +1 -0
  358. package/dist/lib/stack-app/url-targets.test.js +213 -0
  359. package/dist/lib/stack-app/url-targets.test.js.map +1 -0
  360. package/dist/lib/stack-app/users/index.d.ts +357 -0
  361. package/dist/lib/stack-app/users/index.d.ts.map +1 -0
  362. package/dist/lib/stack-app/users/index.js +76 -0
  363. package/dist/lib/stack-app/users/index.js.map +1 -0
  364. package/dist/storage-CKsyME2q.d.ts +1912 -0
  365. package/dist/storage-CKsyME2q.d.ts.map +1 -0
  366. package/dist/utils/url.d.ts +5 -0
  367. package/dist/utils/url.d.ts.map +1 -0
  368. package/dist/utils/url.js +18 -0
  369. package/dist/utils/url.js.map +1 -0
  370. package/package.json +88 -0
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,213 @@
1
+ const require_chunk = require('../../chunk-BE-pF4vm.js');
2
+ let vitest = require("vitest");
3
+ let __url_targets_js = require("./url-targets.js");
4
+
5
+ //#region src/lib/stack-app/url-targets.test.ts
6
+ (0, vitest.describe)("handler URL targets", () => {
7
+ (0, vitest.afterEach)(() => {
8
+ vitest.vi.unstubAllEnvs();
9
+ });
10
+ (0, vitest.it)("treats handler-component targets the same as omitted values", () => {
11
+ (0, vitest.expect)((0, __url_targets_js.resolveHandlerUrls)({
12
+ projectId: "project-id",
13
+ urls: {
14
+ handler: "/custom-handler",
15
+ signIn: { type: "handler-component" }
16
+ }
17
+ }).signIn).toBe("/custom-handler/sign-in");
18
+ });
19
+ (0, vitest.it)("treats custom v0 page targets like legacy string targets", () => {
20
+ const urls = (0, __url_targets_js.resolveHandlerUrls)({
21
+ projectId: "project-id",
22
+ urls: {
23
+ handler: "/custom-handler",
24
+ signIn: { type: "handler-component" },
25
+ signUp: {
26
+ type: "custom",
27
+ url: "/sign-up-explicit",
28
+ version: 0
29
+ }
30
+ }
31
+ });
32
+ (0, vitest.expect)(urls.signIn).toBe("/custom-handler/sign-in");
33
+ (0, vitest.expect)(urls.signUp).toBe("/sign-up-explicit");
34
+ });
35
+ (0, vitest.it)("throws on v0 custom target for handler page", () => {
36
+ (0, vitest.expect)(() => (0, __url_targets_js.resolveHandlerUrls)({
37
+ projectId: "project-id",
38
+ urls: { handler: {
39
+ type: "custom",
40
+ url: "/custom-handler",
41
+ version: 0
42
+ } }
43
+ })).toThrowError(/cannot be a custom page/);
44
+ });
45
+ (0, vitest.it)("supports the latest documented custom target version", () => {
46
+ const signInPrompt = (0, __url_targets_js.getPagePrompt)("signIn");
47
+ if (signInPrompt == null) throw new Error("Expected signIn prompt metadata to exist");
48
+ (0, vitest.expect)((0, __url_targets_js.resolveHandlerUrls)({
49
+ projectId: "project-id",
50
+ urls: { signIn: {
51
+ type: "custom",
52
+ url: "/custom-sign-in",
53
+ version: signInPrompt.latestVersion
54
+ } }
55
+ }).signIn).toBe("/custom-sign-in");
56
+ });
57
+ (0, vitest.it)("throws on custom target versions newer than the latest supported version", () => {
58
+ const signInPrompt = (0, __url_targets_js.getPagePrompt)("signIn");
59
+ if (signInPrompt == null) throw new Error("Expected signIn prompt metadata to exist");
60
+ (0, vitest.expect)(() => (0, __url_targets_js.resolveHandlerUrls)({
61
+ projectId: "project-id",
62
+ urls: { signIn: {
63
+ type: "custom",
64
+ url: "/custom-sign-in",
65
+ version: signInPrompt.latestVersion + 1
66
+ } }
67
+ })).toThrowError(/Unsupported custom page version/);
68
+ });
69
+ (0, vitest.it)("throws on non-zero custom version for handler page", () => {
70
+ (0, vitest.expect)(() => (0, __url_targets_js.resolveHandlerUrls)({
71
+ projectId: "project-id",
72
+ urls: { handler: {
73
+ type: "custom",
74
+ url: "/custom-handler",
75
+ version: 1
76
+ } }
77
+ })).toThrowError(/cannot be a custom page/);
78
+ });
79
+ (0, vitest.it)("uses hosted defaults for unspecified URLs", () => {
80
+ vitest.vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");
81
+ const urls = (0, __url_targets_js.resolveHandlerUrls)({
82
+ projectId: "project-id",
83
+ urls: {
84
+ signUp: "/sign-up",
85
+ default: { type: "hosted" }
86
+ }
87
+ });
88
+ (0, vitest.expect)(urls.signUp).toBe("/sign-up");
89
+ (0, vitest.expect)(urls.signIn).toBe("https://project-id.example-stack-hosted.test/handler/sign-in");
90
+ (0, vitest.expect)(urls.cliAuthConfirm).toBe("https://project-id.example-stack-hosted.test/handler/cli-auth-confirm");
91
+ });
92
+ (0, vitest.it)("rejects absolute OAuth callback string targets", () => {
93
+ (0, vitest.expect)(() => (0, __url_targets_js.resolveHandlerUrls)({
94
+ projectId: "project-id",
95
+ urls: { oauthCallback: "https://app.example.test/oauth-callback" }
96
+ })).toThrowErrorMatchingInlineSnapshot(`
97
+ [HexclaveAssertionError: OAuth callback URLs must be relative.
98
+
99
+ This is likely an error in Hexclave. Please make sure you are running the newest version and report it.]
100
+ `);
101
+ });
102
+ (0, vitest.it)("rejects absolute OAuth callback custom targets", () => {
103
+ (0, vitest.expect)(() => (0, __url_targets_js.resolveHandlerUrls)({
104
+ projectId: "project-id",
105
+ urls: { oauthCallback: {
106
+ type: "custom",
107
+ url: "https://app.example.test/oauth-callback",
108
+ version: 0
109
+ } }
110
+ })).toThrowErrorMatchingInlineSnapshot(`
111
+ [HexclaveAssertionError: OAuth callback URLs must be relative.
112
+
113
+ This is likely an error in Hexclave. Please make sure you are running the newest version and report it.]
114
+ `);
115
+ });
116
+ (0, vitest.it)("inherits a hosted default target for the OAuth callback", () => {
117
+ vitest.vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");
118
+ const urls = (0, __url_targets_js.resolveHandlerUrls)({
119
+ projectId: "project-id",
120
+ urls: { default: { type: "hosted" } }
121
+ });
122
+ (0, vitest.expect)(urls.signIn).toBe("https://project-id.example-stack-hosted.test/handler/sign-in");
123
+ (0, vitest.expect)(urls.oauthCallback).toBe("https://project-id.example-stack-hosted.test/handler/oauth-callback");
124
+ });
125
+ (0, vitest.it)("supports custom CLI auth confirmation targets", () => {
126
+ const cliAuthConfirmPrompt = (0, __url_targets_js.getPagePrompt)("cliAuthConfirm");
127
+ if (cliAuthConfirmPrompt == null) throw new Error("Expected cliAuthConfirm prompt metadata to exist");
128
+ (0, vitest.expect)((0, __url_targets_js.resolveHandlerUrls)({
129
+ projectId: "project-id",
130
+ urls: { cliAuthConfirm: {
131
+ type: "custom",
132
+ url: "/cli/authorize",
133
+ version: cliAuthConfirmPrompt.latestVersion
134
+ } }
135
+ }).cliAuthConfirm).toBe("/cli/authorize");
136
+ });
137
+ (0, vitest.it)("builds CLI auth login URLs from the resolved confirmation target", () => {
138
+ (0, vitest.expect)((0, __url_targets_js.buildCliAuthConfirmUrl)({
139
+ cliAuthConfirmUrl: "/cli/authorize",
140
+ appUrl: "https://app.example.test/base",
141
+ loginCode: "login-code"
142
+ })).toBe("https://app.example.test/cli/authorize?login_code=login-code");
143
+ });
144
+ (0, vitest.it)("uses default target for unknown /handler/* pages", () => {
145
+ vitest.vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");
146
+ (0, vitest.expect)((0, __url_targets_js.resolveUnknownHandlerPathFallbackUrl)({
147
+ defaultTarget: { type: "hosted" },
148
+ projectId: "project-id",
149
+ unknownPath: "custom-page"
150
+ })).toBe("https://project-id.example-stack-hosted.test/handler/custom-page");
151
+ });
152
+ (0, vitest.it)("uses the full hosted handler URL template when configured", () => {
153
+ vitest.vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://{projectId}.localhost:${NEXT_PUBLIC_STACK_PORT_PREFIX:-81}09/{hostedPath}");
154
+ vitest.vi.stubEnv("NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX", "93");
155
+ const urls = (0, __url_targets_js.resolveHandlerUrls)({
156
+ projectId: "project-id",
157
+ urls: { default: { type: "hosted" } }
158
+ });
159
+ (0, vitest.expect)(urls.signIn).toBe("http://project-id.localhost:9309/handler/sign-in");
160
+ (0, vitest.expect)(urls.accountSettings).toBe("http://project-id.localhost:9309/handler/account-settings");
161
+ });
162
+ (0, vitest.it)("validates the hosted handler URL template placeholders", () => {
163
+ vitest.vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://localhost:9309/{projectId}/handler");
164
+ (0, vitest.expect)(() => (0, __url_targets_js.resolveHandlerUrls)({
165
+ projectId: "project-id",
166
+ urls: { default: { type: "hosted" } }
167
+ })).toThrowError(/\{projectId\} and \{hostedPath\}/);
168
+ });
169
+ (0, vitest.it)("rejects hosted handler URL templates that put the project ID in the path", () => {
170
+ vitest.vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://localhost:9309/{projectId}/{hostedPath}");
171
+ (0, vitest.expect)(() => (0, __url_targets_js.resolveHandlerUrls)({
172
+ projectId: "project-id",
173
+ urls: { default: { type: "hosted" } }
174
+ })).toThrowErrorMatchingInlineSnapshot(`
175
+ [HexclaveAssertionError: The hosted handler URL template must put {projectId} in the hostname.
176
+
177
+ This is likely an error in Hexclave. Please make sure you are running the newest version and report it.]
178
+ `);
179
+ });
180
+ });
181
+ (0, vitest.describe)("isLocalHandlerUrlTarget", () => {
182
+ (0, vitest.it)("treats relative handler URLs as local targets", () => {
183
+ (0, vitest.expect)((0, __url_targets_js.isLocalHandlerUrlTarget)({
184
+ targetUrl: "/handler/sign-in",
185
+ handlerPath: "/handler",
186
+ currentOrigin: "http://p91.localhost:9101"
187
+ })).toBe(true);
188
+ });
189
+ (0, vitest.it)("treats same-origin absolute handler URLs as local targets", () => {
190
+ (0, vitest.expect)((0, __url_targets_js.isLocalHandlerUrlTarget)({
191
+ targetUrl: "http://p91.localhost:9101/handler/sign-in",
192
+ handlerPath: "/handler",
193
+ currentOrigin: "http://p91.localhost:9101"
194
+ })).toBe(true);
195
+ });
196
+ (0, vitest.it)("treats cross-origin absolute handler URLs as non-local targets", () => {
197
+ (0, vitest.expect)((0, __url_targets_js.isLocalHandlerUrlTarget)({
198
+ targetUrl: "https://project-id.built-with-hexclave.com/handler/sign-in",
199
+ handlerPath: "/handler",
200
+ currentOrigin: "http://p91.localhost:9101"
201
+ })).toBe(false);
202
+ });
203
+ (0, vitest.it)("treats non-handler paths as non-local targets", () => {
204
+ (0, vitest.expect)((0, __url_targets_js.isLocalHandlerUrlTarget)({
205
+ targetUrl: "/projects",
206
+ handlerPath: "/handler",
207
+ currentOrigin: "http://p91.localhost:9101"
208
+ })).toBe(false);
209
+ });
210
+ });
211
+
212
+ //#endregion
213
+ //# sourceMappingURL=url-targets.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-targets.test.js","names":[],"sources":["../../../src/lib/stack-app/url-targets.test.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { afterEach, describe, expect, it, vi } from \"vitest\";\nimport { buildCliAuthConfirmUrl, getPagePrompt, isLocalHandlerUrlTarget, resolveHandlerUrls, resolveUnknownHandlerPathFallbackUrl } from \"./url-targets\";\n\ndescribe(\"handler URL targets\", () => {\n afterEach(() => {\n vi.unstubAllEnvs();\n });\n\n it(\"treats handler-component targets the same as omitted values\", () => {\n const urls = resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n handler: \"/custom-handler\",\n signIn: { type: \"handler-component\" },\n },\n });\n\n expect(urls.signIn).toBe(\"/custom-handler/sign-in\");\n });\n\n it(\"treats custom v0 page targets like legacy string targets\", () => {\n const urls = resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n handler: \"/custom-handler\",\n signIn: { type: \"handler-component\" },\n signUp: { type: \"custom\", url: \"/sign-up-explicit\", version: 0 },\n },\n });\n\n expect(urls.signIn).toBe(\"/custom-handler/sign-in\");\n expect(urls.signUp).toBe(\"/sign-up-explicit\");\n });\n\n it(\"throws on v0 custom target for handler page\", () => {\n expect(() => resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n handler: { type: \"custom\", url: \"/custom-handler\", version: 0 },\n },\n })).toThrowError(/cannot be a custom page/);\n });\n\n it(\"supports the latest documented custom target version\", () => {\n const signInPrompt = getPagePrompt(\"signIn\");\n if (signInPrompt == null) {\n throw new Error(\"Expected signIn prompt metadata to exist\");\n }\n\n const urls = resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n signIn: { type: \"custom\", url: \"/custom-sign-in\", version: signInPrompt.latestVersion },\n },\n });\n\n expect(urls.signIn).toBe(\"/custom-sign-in\");\n });\n\n it(\"throws on custom target versions newer than the latest supported version\", () => {\n const signInPrompt = getPagePrompt(\"signIn\");\n if (signInPrompt == null) {\n throw new Error(\"Expected signIn prompt metadata to exist\");\n }\n\n expect(() => resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n signIn: { type: \"custom\", url: \"/custom-sign-in\", version: signInPrompt.latestVersion + 1 },\n },\n })).toThrowError(/Unsupported custom page version/);\n });\n\n it(\"throws on non-zero custom version for handler page\", () => {\n expect(() => resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n handler: { type: \"custom\", url: \"/custom-handler\", version: 1 },\n },\n })).toThrowError(/cannot be a custom page/);\n });\n\n it(\"uses hosted defaults for unspecified URLs\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX\", \".example-stack-hosted.test\");\n\n const urls = resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n signUp: \"/sign-up\",\n default: { type: \"hosted\" },\n },\n });\n\n expect(urls.signUp).toBe(\"/sign-up\");\n expect(urls.signIn).toBe(\"https://project-id.example-stack-hosted.test/handler/sign-in\");\n expect(urls.cliAuthConfirm).toBe(\"https://project-id.example-stack-hosted.test/handler/cli-auth-confirm\");\n });\n\n it(\"rejects absolute OAuth callback string targets\", () => {\n expect(() => resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n oauthCallback: \"https://app.example.test/oauth-callback\",\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [HexclaveAssertionError: OAuth callback URLs must be relative.\n\n This is likely an error in Hexclave. Please make sure you are running the newest version and report it.]\n `);\n });\n\n it(\"rejects absolute OAuth callback custom targets\", () => {\n expect(() => resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n oauthCallback: { type: \"custom\", url: \"https://app.example.test/oauth-callback\", version: 0 },\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [HexclaveAssertionError: OAuth callback URLs must be relative.\n\n This is likely an error in Hexclave. Please make sure you are running the newest version and report it.]\n `);\n });\n\n it(\"inherits a hosted default target for the OAuth callback\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX\", \".example-stack-hosted.test\");\n\n const urls = resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n default: { type: \"hosted\" },\n },\n });\n\n expect(urls.signIn).toBe(\"https://project-id.example-stack-hosted.test/handler/sign-in\");\n expect(urls.oauthCallback).toBe(\"https://project-id.example-stack-hosted.test/handler/oauth-callback\");\n });\n\n it(\"supports custom CLI auth confirmation targets\", () => {\n const cliAuthConfirmPrompt = getPagePrompt(\"cliAuthConfirm\");\n if (cliAuthConfirmPrompt == null) {\n throw new Error(\"Expected cliAuthConfirm prompt metadata to exist\");\n }\n\n const urls = resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n cliAuthConfirm: { type: \"custom\", url: \"/cli/authorize\", version: cliAuthConfirmPrompt.latestVersion },\n },\n });\n\n expect(urls.cliAuthConfirm).toBe(\"/cli/authorize\");\n });\n\n it(\"builds CLI auth login URLs from the resolved confirmation target\", () => {\n expect(buildCliAuthConfirmUrl({\n cliAuthConfirmUrl: \"/cli/authorize\",\n appUrl: \"https://app.example.test/base\",\n loginCode: \"login-code\",\n })).toBe(\"https://app.example.test/cli/authorize?login_code=login-code\");\n });\n\n it(\"uses default target for unknown /handler/* pages\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX\", \".example-stack-hosted.test\");\n\n const url = resolveUnknownHandlerPathFallbackUrl({\n defaultTarget: { type: \"hosted\" },\n projectId: \"project-id\",\n unknownPath: \"custom-page\",\n });\n\n expect(url).toBe(\"https://project-id.example-stack-hosted.test/handler/custom-page\");\n });\n\n it(\"uses the full hosted handler URL template when configured\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE\", \"http://{projectId}.localhost:${NEXT_PUBLIC_STACK_PORT_PREFIX:-81}09/{hostedPath}\");\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX\", \"93\");\n\n const urls = resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n default: { type: \"hosted\" },\n },\n });\n\n expect(urls.signIn).toBe(\"http://project-id.localhost:9309/handler/sign-in\");\n expect(urls.accountSettings).toBe(\"http://project-id.localhost:9309/handler/account-settings\");\n });\n\n it(\"validates the hosted handler URL template placeholders\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE\", \"http://localhost:9309/{projectId}/handler\");\n\n expect(() => resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n default: { type: \"hosted\" },\n },\n })).toThrowError(/\\{projectId\\} and \\{hostedPath\\}/);\n });\n\n it(\"rejects hosted handler URL templates that put the project ID in the path\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE\", \"http://localhost:9309/{projectId}/{hostedPath}\");\n\n expect(() => resolveHandlerUrls({\n projectId: \"project-id\",\n urls: {\n default: { type: \"hosted\" },\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [HexclaveAssertionError: The hosted handler URL template must put {projectId} in the hostname.\n\n This is likely an error in Hexclave. Please make sure you are running the newest version and report it.]\n `);\n });\n});\n\ndescribe(\"isLocalHandlerUrlTarget\", () => {\n it(\"treats relative handler URLs as local targets\", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: \"/handler/sign-in\",\n handlerPath: \"/handler\",\n currentOrigin: \"http://p91.localhost:9101\",\n })).toBe(true);\n });\n\n it(\"treats same-origin absolute handler URLs as local targets\", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: \"http://p91.localhost:9101/handler/sign-in\",\n handlerPath: \"/handler\",\n currentOrigin: \"http://p91.localhost:9101\",\n })).toBe(true);\n });\n\n it(\"treats cross-origin absolute handler URLs as non-local targets\", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: \"https://project-id.built-with-hexclave.com/handler/sign-in\",\n handlerPath: \"/handler\",\n currentOrigin: \"http://p91.localhost:9101\",\n })).toBe(false);\n });\n\n it(\"treats non-handler paths as non-local targets\", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: \"/projects\",\n handlerPath: \"/handler\",\n currentOrigin: \"http://p91.localhost:9101\",\n })).toBe(false);\n });\n});\n"],"mappings":"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"}
@@ -0,0 +1,357 @@
1
+ import { AsyncStoreProperty, AuthLike } from "../common.js";
2
+ import { Customer } from "../customers/index.js";
3
+ import { AdminTeamPermission, TeamPermission } from "../permissions/index.js";
4
+ import { ApiKeyCreationOptions, UserApiKey, UserApiKeyFirstView } from "../api-keys/index.js";
5
+ import { DeprecatedOAuthConnection, OAuthConnection } from "../connected-accounts/index.js";
6
+ import { ContactChannel, ContactChannelCreateOptions, ServerContactChannel, ServerContactChannelCreateOptions } from "../contact-channels/index.js";
7
+ import { NotificationCategory } from "../notification-categories/index.js";
8
+ import { EditableTeamMemberProfile, ReceivedTeamInvitation, ServerListTeamsOptions, ServerTeam, ServerTeamCreateOptions, Team, TeamCreateOptions } from "../teams/index.js";
9
+ import { AdminOwnedProject, AdminProjectCreateOptions } from "../projects/index.js";
10
+ import { KnownErrors } from "@hexclave/shared";
11
+ import { CurrentUserCrud } from "@hexclave/shared/dist/interface/crud/current-user";
12
+ import { Result } from "@hexclave/shared/dist/utils/results";
13
+ import { ProviderType } from "@hexclave/shared/dist/utils/oauth";
14
+ import { RestrictedReason } from "@hexclave/shared/dist/schema-fields";
15
+ import { InternalSession } from "@hexclave/shared/dist/sessions";
16
+ import { ReadonlyJson } from "@hexclave/shared/dist/utils/json";
17
+ import { UsersCrud } from "@hexclave/shared/dist/interface/crud/users";
18
+ import { GeoInfo } from "@hexclave/shared/dist/utils/geo";
19
+
20
+ //#region src/lib/stack-app/users/index.d.ts
21
+ declare function withUserDestructureGuard<T extends object>(target: T): T;
22
+ type OAuthProvider = {
23
+ readonly id: string;
24
+ readonly type: string;
25
+ readonly userId: string;
26
+ readonly accountId?: string;
27
+ readonly email?: string;
28
+ readonly allowSignIn: boolean;
29
+ readonly allowConnectedAccounts: boolean;
30
+ update(data: {
31
+ allowSignIn?: boolean;
32
+ allowConnectedAccounts?: boolean;
33
+ }): Promise<Result<void, InstanceType<typeof KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn>>>;
34
+ delete(): Promise<void>;
35
+ };
36
+ type ServerOAuthProvider = {
37
+ readonly id: string;
38
+ readonly type: string;
39
+ readonly userId: string;
40
+ readonly accountId: string;
41
+ readonly email?: string;
42
+ readonly allowSignIn: boolean;
43
+ readonly allowConnectedAccounts: boolean;
44
+ update(data: {
45
+ accountId?: string;
46
+ email?: string;
47
+ allowSignIn?: boolean;
48
+ allowConnectedAccounts?: boolean;
49
+ }): Promise<Result<void, InstanceType<typeof KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn>>>;
50
+ delete(): Promise<void>;
51
+ };
52
+ /**
53
+ * Contains everything related to the current user session.
54
+ */
55
+ type Auth = AuthLike<{}> & {
56
+ readonly _internalSession: InternalSession;
57
+ readonly currentSession: {
58
+ getTokens(): Promise<{
59
+ accessToken: string | null;
60
+ refreshToken: string | null;
61
+ }>;
62
+ };
63
+ };
64
+ /**
65
+ * ```
66
+ * +----------+-------------+-------------------+
67
+ * | \ | !Server | Server |
68
+ * +----------+-------------+-------------------+
69
+ * | !Session | User | ServerUser |
70
+ * | Session | CurrentUser | CurrentServerUser |
71
+ * +----------+-------------+-------------------+
72
+ * ```
73
+ *
74
+ * The fields on each of these types are available iff:
75
+ * BaseUser: true
76
+ * Auth: Session
77
+ * ServerBaseUser: Server
78
+ * UserExtra: Session OR Server
79
+ *
80
+ * The types are defined as follows (in the typescript manner):
81
+ * User = BaseUser
82
+ * CurrentUser = BaseUser & Auth & UserExtra
83
+ * ServerUser = BaseUser & ServerBaseUser & UserExtra
84
+ * CurrentServerUser = BaseUser & ServerBaseUser & Auth & UserExtra
85
+ **/
86
+ type BaseUser = {
87
+ readonly id: string;
88
+ readonly displayName: string | null;
89
+ /**
90
+ * The user's email address.
91
+ *
92
+ * Note: This might NOT be unique across multiple users, so always use `id` for unique identification.
93
+ */
94
+ readonly primaryEmail: string | null;
95
+ readonly primaryEmailVerified: boolean;
96
+ readonly profileImageUrl: string | null;
97
+ readonly signedUpAt: Date;
98
+ readonly clientMetadata: any;
99
+ readonly clientReadOnlyMetadata: any;
100
+ /**
101
+ * Whether the user has a password set.
102
+ */
103
+ readonly hasPassword: boolean;
104
+ readonly otpAuthEnabled: boolean;
105
+ readonly passkeyAuthEnabled: boolean;
106
+ readonly isMultiFactorRequired: boolean;
107
+ readonly isAnonymous: boolean;
108
+ /**
109
+ * Whether the user is in restricted state (signed up but hasn't completed onboarding requirements).
110
+ * For example, if email verification is required but the user hasn't verified their email yet.
111
+ */
112
+ readonly isRestricted: boolean;
113
+ /**
114
+ * The reason why the user is restricted, e.g., { type: "email_not_verified" }, { type: "anonymous" }, or { type: "restricted_by_administrator" }.
115
+ * Null if the user is not restricted.
116
+ */
117
+ readonly restrictedReason: RestrictedReason | null;
118
+ toClientJson(): CurrentUserCrud["Client"]["Read"];
119
+ /**
120
+ * @deprecated, use contact channel's usedForAuth instead
121
+ */
122
+ readonly emailAuthEnabled: boolean;
123
+ /**
124
+ * @deprecated
125
+ */
126
+ readonly oauthProviders: readonly {
127
+ id: string;
128
+ }[];
129
+ };
130
+ type UserExtra = {
131
+ setDisplayName(displayName: string | null): Promise<void>; /** @deprecated Use contact channel's sendVerificationEmail instead */
132
+ sendVerificationEmail(): Promise<KnownErrors["EmailAlreadyVerified"] | void>;
133
+ setClientMetadata(metadata: any): Promise<void>;
134
+ updatePassword(options: {
135
+ oldPassword: string;
136
+ newPassword: string;
137
+ }): Promise<KnownErrors["PasswordConfirmationMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
138
+ setPassword(options: {
139
+ password: string;
140
+ }): Promise<KnownErrors["PasswordRequirementsNotMet"] | void>;
141
+ /**
142
+ * A shorthand method to update multiple fields of the user at once.
143
+ */
144
+ update(update: UserUpdateOptions): Promise<void>;
145
+ listContactChannels(): Promise<ContactChannel[]>;
146
+ createContactChannel(data: ContactChannelCreateOptions): Promise<ContactChannel>;
147
+ listNotificationCategories(): Promise<NotificationCategory[]>;
148
+ delete(): Promise<void>; /** @deprecated Use `getOrLinkConnectedAccount` for redirect behavior, or `getConnectedAccount({ provider, providerAccountId })` for existence check. */
149
+ getConnectedAccount(id: ProviderType, options: {
150
+ or: 'redirect';
151
+ scopes?: string[];
152
+ }): Promise<DeprecatedOAuthConnection>; /** @deprecated Use `getConnectedAccount({ provider, providerAccountId })` for existence check, or `getOrLinkConnectedAccount` for redirect behavior. */
153
+ getConnectedAccount(id: ProviderType, options?: {
154
+ or?: 'redirect' | 'throw' | 'return-null';
155
+ scopes?: string[];
156
+ }): Promise<DeprecatedOAuthConnection | null>; /** Get a specific connected account by provider and providerAccountId. Returns null if not found. */
157
+ getConnectedAccount(account: {
158
+ provider: string;
159
+ providerAccountId: string;
160
+ }): Promise<OAuthConnection | null>; /** List all connected accounts for this user (only those with allowConnectedAccounts enabled). */
161
+ listConnectedAccounts(): Promise<OAuthConnection[]>;
162
+ /** React hook to list all connected accounts. */
163
+ /** Redirect the user to the OAuth flow to link a new connected account. Always redirects, never returns. */
164
+ linkConnectedAccount(provider: string, options?: {
165
+ scopes?: string[];
166
+ }): Promise<void>; /** Get a connected account for the given provider, or redirect to link one if none exists or the token/scopes are insufficient. */
167
+ getOrLinkConnectedAccount(provider: string, options?: {
168
+ scopes?: string[];
169
+ }): Promise<OAuthConnection>; /** React hook: get a connected account for the given provider, or redirect to link one if none exists or the token/scopes are insufficient. */
170
+ hasPermission(scope: Team, permissionId: string): Promise<boolean>;
171
+ hasPermission(permissionId: string): Promise<boolean>;
172
+ getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null>;
173
+ getPermission(permissionId: string): Promise<TeamPermission | null>;
174
+ listPermissions(scope: Team, options?: {
175
+ recursive?: boolean;
176
+ }): Promise<TeamPermission[]>;
177
+ listPermissions(options?: {
178
+ recursive?: boolean;
179
+ }): Promise<TeamPermission[]>;
180
+ readonly selectedTeam: Team | null;
181
+ setSelectedTeam(teamOrId: string | Team | null): Promise<void>;
182
+ createTeam(data: TeamCreateOptions): Promise<Team>;
183
+ leaveTeam(team: Team): Promise<void>;
184
+ /**
185
+ * Lists all pending team invitations sent to any of the current user's verified email addresses.
186
+ *
187
+ * This allows the user to discover which teams have invited them, even if they haven't
188
+ * joined those teams yet. Only invitations sent to verified email addresses are included.
189
+ *
190
+ * @returns An array of `ReceivedTeamInvitation` objects, each containing the team ID, team
191
+ * display name, recipient email, and expiration date.
192
+ *
193
+ * @example
194
+ * ```ts
195
+ * const invitations = await user.listTeamInvitations();
196
+ * for (const invitation of invitations) {
197
+ * console.log(`Invited to ${invitation.teamDisplayName} via ${invitation.recipientEmail}`);
198
+ * }
199
+ * ```
200
+ */
201
+ listTeamInvitations(): Promise<ReceivedTeamInvitation[]>;
202
+ /**
203
+ * Lists all pending team invitations sent to any of the current user's verified email addresses.
204
+ *
205
+ * React hook version of `listTeamInvitations()`. Automatically re-renders when invitations change.
206
+ */
207
+ getActiveSessions(): Promise<ActiveSession[]>;
208
+ revokeSession(sessionId: string): Promise<void>;
209
+ getTeamProfile(team: Team): Promise<EditableTeamMemberProfile>;
210
+ createApiKey(options: ApiKeyCreationOptions<"user">): Promise<UserApiKeyFirstView>;
211
+ listOAuthProviders(): Promise<OAuthProvider[]>;
212
+ getOAuthProvider(id: string): Promise<OAuthProvider | null>;
213
+ registerPasskey(options?: {
214
+ hostname?: string;
215
+ }): Promise<Result<undefined, KnownErrors["PasskeyRegistrationFailed"] | KnownErrors["PasskeyWebAuthnError"]>>;
216
+ } & AsyncStoreProperty<"apiKeys", [], UserApiKey[], true> & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> & AsyncStoreProperty<"teamInvitations", [], ReceivedTeamInvitation[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
217
+ recursive?: boolean;
218
+ }], TeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
219
+ recursive?: boolean;
220
+ }], TeamPermission[], true>;
221
+ type InternalUserExtra = {
222
+ createProject(newProject: AdminProjectCreateOptions): Promise<AdminOwnedProject>;
223
+ transferProject(projectIdToTransfer: string, newTeamId: string): Promise<void>;
224
+ } & AsyncStoreProperty<"ownedProjects", [], AdminOwnedProject[], true>;
225
+ type User = BaseUser;
226
+ type CurrentUser = BaseUser & Auth & UserExtra & Customer;
227
+ type CurrentInternalUser = CurrentUser & InternalUserExtra;
228
+ type ProjectCurrentUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser;
229
+ type TokenPartialUser = Pick<User, "id" | "displayName" | "primaryEmail" | "primaryEmailVerified" | "isAnonymous" | "isMultiFactorRequired" | "isRestricted" | "restrictedReason">;
230
+ type SyncedPartialUser = TokenPartialUser & Pick<User, "id" | "displayName" | "primaryEmail" | "primaryEmailVerified" | "profileImageUrl" | "signedUpAt" | "clientMetadata" | "clientReadOnlyMetadata" | "isAnonymous" | "hasPassword" | "isRestricted" | "restrictedReason">;
231
+ type ActiveSession = {
232
+ id: string;
233
+ userId: string;
234
+ createdAt: Date;
235
+ isImpersonation: boolean;
236
+ lastUsedAt: Date | undefined;
237
+ isCurrentSession: boolean;
238
+ geoInfo?: GeoInfo;
239
+ };
240
+ type UserUpdateOptions = {
241
+ displayName?: string | null;
242
+ clientMetadata?: ReadonlyJson;
243
+ selectedTeamId?: string | null;
244
+ totpMultiFactorSecret?: Uint8Array | null;
245
+ profileImageUrl?: string | null;
246
+ otpAuthEnabled?: boolean;
247
+ passkeyAuthEnabled?: boolean;
248
+ primaryEmail?: string | null;
249
+ };
250
+ declare function userUpdateOptionsToCrud(options: UserUpdateOptions): CurrentUserCrud["Client"]["Update"];
251
+ type ServerBaseUser = {
252
+ setPrimaryEmail(email: string | null, options?: {
253
+ verified?: boolean | undefined;
254
+ }): Promise<void>;
255
+ readonly lastActiveAt: Date;
256
+ readonly serverMetadata: any;
257
+ setServerMetadata(metadata: any): Promise<void>;
258
+ setClientReadOnlyMetadata(metadata: any): Promise<void>; /** Whether the user is restricted by an administrator. Can be set manually or by sign-up rules. */
259
+ readonly restrictedByAdmin: boolean; /** Public reason shown to the user explaining why they are restricted. Optional. */
260
+ readonly restrictedByAdminReason: string | null; /** Private details about the restriction (e.g., which sign-up rule triggered). Only visible to server access and above. */
261
+ readonly restrictedByAdminPrivateDetails: string | null; /** Best-effort ISO country code captured at sign-up time from request geo headers. */
262
+ readonly countryCode: string | null; /** Server-only risk scores used during sign-up risk evaluation. */
263
+ readonly riskScores: {
264
+ readonly signUp: {
265
+ readonly bot: number;
266
+ readonly freeTrialAbuse: number;
267
+ };
268
+ };
269
+ createTeam(data: Omit<ServerTeamCreateOptions, "creatorUserId">): Promise<ServerTeam>;
270
+ listContactChannels(): Promise<ServerContactChannel[]>;
271
+ createContactChannel(data: ServerContactChannelCreateOptions): Promise<ServerContactChannel>;
272
+ update(user: ServerUserUpdateOptions): Promise<void>;
273
+ grantPermission(scope: Team, permissionId: string): Promise<void>;
274
+ grantPermission(permissionId: string): Promise<void>;
275
+ revokePermission(scope: Team, permissionId: string): Promise<void>;
276
+ revokePermission(permissionId: string): Promise<void>;
277
+ getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null>;
278
+ getPermission(permissionId: string): Promise<TeamPermission | null>;
279
+ hasPermission(scope: Team, permissionId: string): Promise<boolean>;
280
+ hasPermission(permissionId: string): Promise<boolean>;
281
+ listPermissions(scope: Team, options?: {
282
+ recursive?: boolean;
283
+ }): Promise<TeamPermission[]>;
284
+ listPermissions(options?: {
285
+ recursive?: boolean;
286
+ }): Promise<TeamPermission[]>;
287
+ listOAuthProviders(): Promise<ServerOAuthProvider[]>;
288
+ getOAuthProvider(id: string): Promise<ServerOAuthProvider | null>;
289
+ /**
290
+ * Creates a new session object with a refresh token for this user. Can be used to impersonate them.
291
+ */
292
+ createSession(options?: {
293
+ expiresInMillis?: number;
294
+ isImpersonation?: boolean;
295
+ }): Promise<{
296
+ getTokens(): Promise<{
297
+ accessToken: string | null;
298
+ refreshToken: string | null;
299
+ }>;
300
+ }>;
301
+ } & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [options?: ServerListTeamsOptions], ServerTeam[] & {
302
+ nextCursor: string | null;
303
+ }, true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
304
+ direct?: boolean;
305
+ }], AdminTeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
306
+ direct?: boolean;
307
+ }], AdminTeamPermission[], true>;
308
+ /**
309
+ * A user including sensitive fields that should only be used on the server, never sent to the client
310
+ * (such as sensitive information and serverMetadata).
311
+ */
312
+ type ServerUser = ServerBaseUser & BaseUser & UserExtra & Customer<true>;
313
+ type CurrentServerUser = Auth & ServerUser;
314
+ type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;
315
+ type ProjectCurrentServerUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalServerUser : CurrentServerUser;
316
+ type SyncedPartialServerUser = SyncedPartialUser & Pick<ServerUser, "serverMetadata">;
317
+ type ServerUserUpdateOptions = {
318
+ primaryEmail?: string | null;
319
+ primaryEmailVerified?: boolean;
320
+ primaryEmailAuthEnabled?: boolean;
321
+ clientReadOnlyMetadata?: ReadonlyJson;
322
+ serverMetadata?: ReadonlyJson;
323
+ password?: string;
324
+ restrictedByAdmin?: boolean;
325
+ restrictedByAdminReason?: string | null;
326
+ restrictedByAdminPrivateDetails?: string | null;
327
+ countryCode?: string | null;
328
+ riskScores?: {
329
+ signUp: {
330
+ bot: number;
331
+ freeTrialAbuse: number;
332
+ };
333
+ };
334
+ } & UserUpdateOptions;
335
+ declare function serverUserUpdateOptionsToCrud(options: ServerUserUpdateOptions): CurrentUserCrud["Server"]["Update"];
336
+ type ServerUserCreateOptions = {
337
+ primaryEmail?: string | null;
338
+ primaryEmailAuthEnabled?: boolean;
339
+ password?: string;
340
+ otpAuthEnabled?: boolean;
341
+ displayName?: string;
342
+ primaryEmailVerified?: boolean;
343
+ clientMetadata?: any;
344
+ clientReadOnlyMetadata?: any;
345
+ serverMetadata?: any;
346
+ countryCode?: string | null;
347
+ riskScores?: {
348
+ signUp: {
349
+ bot: number;
350
+ freeTrialAbuse: number;
351
+ };
352
+ };
353
+ };
354
+ declare function serverUserCreateOptionsToCrud(options: ServerUserCreateOptions): UsersCrud["Server"]["Create"];
355
+ //#endregion
356
+ export { ActiveSession, Auth, BaseUser, CurrentInternalServerUser, CurrentInternalUser, CurrentServerUser, CurrentUser, InternalUserExtra, OAuthProvider, ProjectCurrentServerUser, ProjectCurrentUser, ServerBaseUser, ServerOAuthProvider, ServerUser, ServerUserCreateOptions, ServerUserUpdateOptions, SyncedPartialServerUser, SyncedPartialUser, TokenPartialUser, User, UserExtra, UserUpdateOptions, serverUserCreateOptionsToCrud, serverUserUpdateOptionsToCrud, userUpdateOptionsToCrud, withUserDestructureGuard };
357
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/lib/stack-app/users/index.ts"],"mappings":"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"}