@hexclave/shared 1.0.41 → 1.0.43

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 (1067) hide show
  1. package/dist/admin-interface-Bv8rBJo-.d.ts +379 -0
  2. package/dist/admin-interface-Bv8rBJo-.d.ts.map +1 -0
  3. package/dist/admin-metrics-DyW8_G82.d.ts +807 -0
  4. package/dist/admin-metrics-DyW8_G82.d.ts.map +1 -0
  5. package/dist/ai/image-limits.d.ts.map +1 -1
  6. package/dist/ai/image-limits.js +6 -7
  7. package/dist/ai/image-limits.js.map +1 -1
  8. package/dist/ai/llms/llms.d.ts.map +1 -1
  9. package/dist/ai/llms/llms.js +2 -4
  10. package/dist/ai/llms/llms.js.map +1 -1
  11. package/dist/ai/unified-prompts/reminders.js +2 -4
  12. package/dist/ai/unified-prompts/reminders.js.map +1 -1
  13. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  14. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +2 -5
  15. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  16. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js +3 -6
  17. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -1
  18. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +3 -6
  19. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -1
  20. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +3 -6
  21. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -1
  22. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +3 -6
  23. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -1
  24. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +3 -6
  25. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -1
  26. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  27. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +5 -6
  28. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  29. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +1 -2
  30. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -1
  31. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +3 -6
  32. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -1
  33. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +3 -6
  34. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -1
  35. package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  36. package/dist/ai/unified-prompts/skill-site-prompt.js +2 -4
  37. package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  38. package/dist/analytics-IjkAsefy.d.ts +14 -0
  39. package/dist/analytics-IjkAsefy.d.ts.map +1 -0
  40. package/dist/apps/apps-config.d.ts.map +1 -1
  41. package/dist/apps/apps-config.js +2 -3
  42. package/dist/apps/apps-config.js.map +1 -1
  43. package/dist/apps/apps-ui.d.ts +1 -2
  44. package/dist/apps/apps-ui.d.ts.map +1 -1
  45. package/dist/apps/apps-ui.js +4 -5
  46. package/dist/apps/apps-ui.js.map +1 -1
  47. package/dist/client-interface-CGrvUtX0.d.ts +447 -0
  48. package/dist/client-interface-CGrvUtX0.d.ts.map +1 -0
  49. package/dist/config/db-sync-mappings.js +2 -3
  50. package/dist/config/db-sync-mappings.js.map +1 -1
  51. package/dist/config/format.d.ts +2 -61
  52. package/dist/config/format.js +2 -192
  53. package/dist/config/format.js.map +1 -1
  54. package/dist/config/migrate-catalogs-to-product-lines.d.ts.map +1 -1
  55. package/dist/config/migrate-catalogs-to-product-lines.js +2 -196
  56. package/dist/config/migrate-catalogs-to-product-lines.js.map +1 -1
  57. package/dist/config/schema-fuzzer.test.js +18 -172
  58. package/dist/config/schema-fuzzer.test.js.map +1 -1
  59. package/dist/config/schema.d.ts +2 -2328
  60. package/dist/config/schema.js +6 -351
  61. package/dist/config/schema.js.map +1 -1
  62. package/dist/config-authoring.d.ts +1 -1
  63. package/dist/config-authoring.d.ts.map +1 -1
  64. package/dist/config-authoring.js +2 -3
  65. package/dist/config-authoring.js.map +1 -1
  66. package/dist/config-authoring.test.js +1 -3
  67. package/dist/config-authoring.test.js.map +1 -1
  68. package/dist/config-eval.d.ts.map +1 -1
  69. package/dist/config-eval.js +4 -46
  70. package/dist/config-eval.js.map +1 -1
  71. package/dist/config-rendering.d.ts.map +1 -1
  72. package/dist/config-rendering.js +2 -48
  73. package/dist/config-rendering.js.map +1 -1
  74. package/dist/connected-accounts-D5CKe50A.d.ts +67 -0
  75. package/dist/connected-accounts-D5CKe50A.d.ts.map +1 -0
  76. package/dist/contact-channels-DW8yQxlc.d.ts +180 -0
  77. package/dist/contact-channels-DW8yQxlc.d.ts.map +1 -0
  78. package/dist/country-codes-CRWDroBE.d.ts +11 -0
  79. package/dist/country-codes-CRWDroBE.d.ts.map +1 -0
  80. package/dist/crud-CqmEW9s6.d.ts +98 -0
  81. package/dist/crud-CqmEW9s6.d.ts.map +1 -0
  82. package/dist/crud.d.ts +2 -98
  83. package/dist/crud.js +3 -71
  84. package/dist/crud.js.map +1 -1
  85. package/dist/currency-constants-Cq_q8twn.d.ts +45 -0
  86. package/dist/currency-constants-Cq_q8twn.d.ts.map +1 -0
  87. package/dist/current-user-Dvf8Ttjo.d.ts +284 -0
  88. package/dist/current-user-Dvf8Ttjo.d.ts.map +1 -0
  89. package/dist/dates-B6ne9iOR.d.ts +23 -0
  90. package/dist/dates-B6ne9iOR.d.ts.map +1 -0
  91. package/dist/email-outbox-BVqBaXpn.d.ts +1464 -0
  92. package/dist/{interface/crud/email-outbox.d.ts.map → email-outbox-BVqBaXpn.d.ts.map} +1 -1
  93. package/dist/emails-Ba4yEaCS.d.ts +40 -0
  94. package/dist/emails-Ba4yEaCS.d.ts.map +1 -0
  95. package/dist/errors-Cl-RUyed.d.ts +238 -0
  96. package/dist/errors-Cl-RUyed.d.ts.map +1 -0
  97. package/dist/esm/ai/image-limits.d.ts.map +1 -1
  98. package/dist/esm/ai/image-limits.js +5 -5
  99. package/dist/esm/ai/image-limits.js.map +1 -1
  100. package/dist/esm/ai/llms/llms.d.ts +1 -1
  101. package/dist/esm/ai/llms/llms.d.ts.map +1 -1
  102. package/dist/esm/ai/llms/llms.js +1 -2
  103. package/dist/esm/ai/llms/llms.js.map +1 -1
  104. package/dist/esm/ai/unified-prompts/reminders.js +1 -2
  105. package/dist/esm/ai/unified-prompts/reminders.js.map +1 -1
  106. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  107. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +25 -28
  108. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  109. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js +1 -2
  110. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -1
  111. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +1 -2
  112. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -1
  113. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +1 -2
  114. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -1
  115. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +1 -2
  116. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -1
  117. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +1 -2
  118. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -1
  119. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  120. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +2 -3
  121. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  122. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +1 -1
  123. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -1
  124. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +1 -2
  125. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -1
  126. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +1 -2
  127. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -1
  128. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  129. package/dist/esm/ai/unified-prompts/skill-site-prompt.js +1 -2
  130. package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  131. package/dist/esm/apps/apps-config.d.ts.map +1 -1
  132. package/dist/esm/apps/apps-config.js +1 -1
  133. package/dist/esm/apps/apps-config.js.map +1 -1
  134. package/dist/esm/apps/apps-ui.d.ts +2 -3
  135. package/dist/esm/apps/apps-ui.d.ts.map +1 -1
  136. package/dist/esm/apps/apps-ui.js +2 -3
  137. package/dist/esm/apps/apps-ui.js.map +1 -1
  138. package/dist/esm/config/db-sync-mappings.js +1 -1
  139. package/dist/esm/config/db-sync-mappings.js.map +1 -1
  140. package/dist/esm/config/format.d.ts +1 -1
  141. package/dist/esm/config/format.d.ts.map +1 -1
  142. package/dist/esm/config/format.js +1 -190
  143. package/dist/esm/config/format.js.map +1 -1
  144. package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts.map +1 -1
  145. package/dist/esm/config/migrate-catalogs-to-product-lines.js +1 -194
  146. package/dist/esm/config/migrate-catalogs-to-product-lines.js.map +1 -1
  147. package/dist/esm/config/schema-fuzzer.test.js +20 -173
  148. package/dist/esm/config/schema-fuzzer.test.js.map +1 -1
  149. package/dist/esm/config/schema.d.ts +249 -250
  150. package/dist/esm/config/schema.d.ts.map +1 -1
  151. package/dist/esm/config/schema.js +2 -347
  152. package/dist/esm/config/schema.js.map +1 -1
  153. package/dist/esm/config-authoring.d.ts +1 -1
  154. package/dist/esm/config-authoring.d.ts.map +1 -1
  155. package/dist/esm/config-authoring.js +1 -1
  156. package/dist/esm/config-authoring.js.map +1 -1
  157. package/dist/esm/config-authoring.test.js +2 -3
  158. package/dist/esm/config-authoring.test.js.map +1 -1
  159. package/dist/esm/config-eval.d.ts +1 -1
  160. package/dist/esm/config-eval.d.ts.map +1 -1
  161. package/dist/esm/config-eval.js +1 -43
  162. package/dist/esm/config-eval.js.map +1 -1
  163. package/dist/esm/config-rendering.d.ts.map +1 -1
  164. package/dist/esm/config-rendering.js +1 -46
  165. package/dist/esm/config-rendering.js.map +1 -1
  166. package/dist/esm/crud.d.ts +1 -1
  167. package/dist/esm/crud.d.ts.map +1 -1
  168. package/dist/esm/crud.js +2 -69
  169. package/dist/esm/crud.js.map +1 -1
  170. package/dist/esm/helpers/emails.js +1 -2
  171. package/dist/esm/helpers/emails.js.map +1 -1
  172. package/dist/esm/helpers/init-prompt.d.ts.map +1 -1
  173. package/dist/esm/helpers/init-prompt.js +1 -2
  174. package/dist/esm/helpers/init-prompt.js.map +1 -1
  175. package/dist/esm/helpers/password.d.ts +1 -1
  176. package/dist/esm/helpers/password.d.ts.map +1 -1
  177. package/dist/esm/helpers/password.js +1 -2
  178. package/dist/esm/helpers/password.js.map +1 -1
  179. package/dist/esm/helpers/production-mode.d.ts +1 -1
  180. package/dist/esm/helpers/production-mode.d.ts.map +1 -1
  181. package/dist/esm/helpers/production-mode.js +1 -2
  182. package/dist/esm/helpers/production-mode.js.map +1 -1
  183. package/dist/esm/helpers/support-sla.d.ts.map +1 -1
  184. package/dist/esm/helpers/support-sla.js +1 -1
  185. package/dist/esm/helpers/support-sla.js.map +1 -1
  186. package/dist/esm/helpers/support-sla.test.js +2 -3
  187. package/dist/esm/helpers/support-sla.test.js.map +1 -1
  188. package/dist/esm/helpers/vault/client-side.d.ts.map +1 -1
  189. package/dist/esm/helpers/vault/client-side.js +1 -20
  190. package/dist/esm/helpers/vault/client-side.js.map +1 -1
  191. package/dist/esm/helpers/vault/server-side.js +1 -2
  192. package/dist/esm/helpers/vault/server-side.js.map +1 -1
  193. package/dist/esm/hooks/use-async-callback.d.ts.map +1 -1
  194. package/dist/esm/hooks/use-async-callback.js +1 -2
  195. package/dist/esm/hooks/use-async-callback.js.map +1 -1
  196. package/dist/esm/hooks/use-async-external-store.d.ts +1 -1
  197. package/dist/esm/hooks/use-async-external-store.d.ts.map +1 -1
  198. package/dist/esm/hooks/use-async-external-store.js +1 -2
  199. package/dist/esm/hooks/use-async-external-store.js.map +1 -1
  200. package/dist/esm/hooks/use-hash.js +1 -2
  201. package/dist/esm/hooks/use-hash.js.map +1 -1
  202. package/dist/esm/hooks/use-hover.d.ts.map +1 -1
  203. package/dist/esm/hooks/use-hover.js +1 -2
  204. package/dist/esm/hooks/use-hover.js.map +1 -1
  205. package/dist/esm/hooks/use-strict-memo.d.ts.map +1 -1
  206. package/dist/esm/hooks/use-strict-memo.js +1 -70
  207. package/dist/esm/hooks/use-strict-memo.js.map +1 -1
  208. package/dist/esm/index.d.ts +4 -4
  209. package/dist/esm/index.js +1 -2
  210. package/dist/esm/interface/admin-interface.d.ts +19 -19
  211. package/dist/esm/interface/admin-interface.d.ts.map +1 -1
  212. package/dist/esm/interface/admin-interface.js +1 -2
  213. package/dist/esm/interface/admin-interface.js.map +1 -1
  214. package/dist/esm/interface/admin-metrics.d.ts +11 -11
  215. package/dist/esm/interface/admin-metrics.d.ts.map +1 -1
  216. package/dist/esm/interface/admin-metrics.js +1 -2
  217. package/dist/esm/interface/admin-metrics.js.map +1 -1
  218. package/dist/esm/interface/client-interface.d.ts +22 -22
  219. package/dist/esm/interface/client-interface.d.ts.map +1 -1
  220. package/dist/esm/interface/client-interface.js +31 -15
  221. package/dist/esm/interface/client-interface.js.map +1 -1
  222. package/dist/esm/interface/client-interface.test.js +84 -13
  223. package/dist/esm/interface/client-interface.test.js.map +1 -1
  224. package/dist/esm/interface/conversations.d.ts +33 -33
  225. package/dist/esm/interface/conversations.d.ts.map +1 -1
  226. package/dist/esm/interface/conversations.js +1 -2
  227. package/dist/esm/interface/conversations.js.map +1 -1
  228. package/dist/esm/interface/crud/analytics.d.ts.map +1 -1
  229. package/dist/esm/interface/crud/analytics.js +1 -1
  230. package/dist/esm/interface/crud/connected-accounts.d.ts +15 -17
  231. package/dist/esm/interface/crud/connected-accounts.d.ts.map +1 -1
  232. package/dist/esm/interface/crud/connected-accounts.js +1 -2
  233. package/dist/esm/interface/crud/connected-accounts.js.map +1 -1
  234. package/dist/esm/interface/crud/contact-channels.d.ts +24 -26
  235. package/dist/esm/interface/crud/contact-channels.d.ts.map +1 -1
  236. package/dist/esm/interface/crud/contact-channels.js +1 -2
  237. package/dist/esm/interface/crud/contact-channels.js.map +1 -1
  238. package/dist/esm/interface/crud/current-user.d.ts +20 -22
  239. package/dist/esm/interface/crud/current-user.d.ts.map +1 -1
  240. package/dist/esm/interface/crud/current-user.js +25 -29
  241. package/dist/esm/interface/crud/current-user.js.map +1 -1
  242. package/dist/esm/interface/crud/email-outbox.d.ts +32 -34
  243. package/dist/esm/interface/crud/email-outbox.d.ts.map +1 -1
  244. package/dist/esm/interface/crud/email-outbox.js +1 -2
  245. package/dist/esm/interface/crud/email-outbox.js.map +1 -1
  246. package/dist/esm/interface/crud/email-templates.d.ts +16 -18
  247. package/dist/esm/interface/crud/email-templates.d.ts.map +1 -1
  248. package/dist/esm/interface/crud/email-templates.js +1 -2
  249. package/dist/esm/interface/crud/email-templates.js.map +1 -1
  250. package/dist/esm/interface/crud/emails.d.ts +6 -8
  251. package/dist/esm/interface/crud/emails.d.ts.map +1 -1
  252. package/dist/esm/interface/crud/emails.js +1 -2
  253. package/dist/esm/interface/crud/emails.js.map +1 -1
  254. package/dist/esm/interface/crud/internal-api-keys.d.ts +16 -18
  255. package/dist/esm/interface/crud/internal-api-keys.d.ts.map +1 -1
  256. package/dist/esm/interface/crud/internal-api-keys.js +1 -2
  257. package/dist/esm/interface/crud/internal-api-keys.js.map +1 -1
  258. package/dist/esm/interface/crud/invoices.d.ts +2 -2
  259. package/dist/esm/interface/crud/invoices.d.ts.map +1 -1
  260. package/dist/esm/interface/crud/invoices.js +1 -2
  261. package/dist/esm/interface/crud/invoices.js.map +1 -1
  262. package/dist/esm/interface/crud/items.d.ts +6 -8
  263. package/dist/esm/interface/crud/items.d.ts.map +1 -1
  264. package/dist/esm/interface/crud/items.js +12 -16
  265. package/dist/esm/interface/crud/items.js.map +1 -1
  266. package/dist/esm/interface/crud/notification-preferences.d.ts +6 -8
  267. package/dist/esm/interface/crud/notification-preferences.d.ts.map +1 -1
  268. package/dist/esm/interface/crud/notification-preferences.js +8 -12
  269. package/dist/esm/interface/crud/notification-preferences.js.map +1 -1
  270. package/dist/esm/interface/crud/oauth-providers.d.ts +24 -26
  271. package/dist/esm/interface/crud/oauth-providers.d.ts.map +1 -1
  272. package/dist/esm/interface/crud/oauth-providers.js +1 -2
  273. package/dist/esm/interface/crud/oauth-providers.js.map +1 -1
  274. package/dist/esm/interface/crud/products.d.ts +21 -22
  275. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  276. package/dist/esm/interface/crud/products.js +3 -2
  277. package/dist/esm/interface/crud/products.js.map +1 -1
  278. package/dist/esm/interface/crud/project-api-keys.d.ts +5 -6
  279. package/dist/esm/interface/crud/project-api-keys.d.ts.map +1 -1
  280. package/dist/esm/interface/crud/project-api-keys.js +1 -2
  281. package/dist/esm/interface/crud/project-api-keys.js.map +1 -1
  282. package/dist/esm/interface/crud/project-permissions.d.ts +29 -31
  283. package/dist/esm/interface/crud/project-permissions.d.ts.map +1 -1
  284. package/dist/esm/interface/crud/project-permissions.js +1 -2
  285. package/dist/esm/interface/crud/project-permissions.js.map +1 -1
  286. package/dist/esm/interface/crud/projects.d.ts +71 -73
  287. package/dist/esm/interface/crud/projects.d.ts.map +1 -1
  288. package/dist/esm/interface/crud/projects.js +3 -2
  289. package/dist/esm/interface/crud/projects.js.map +1 -1
  290. package/dist/esm/interface/crud/session-replays.d.ts.map +1 -1
  291. package/dist/esm/interface/crud/session-replays.js +1 -1
  292. package/dist/esm/interface/crud/sessions.d.ts +15 -17
  293. package/dist/esm/interface/crud/sessions.d.ts.map +1 -1
  294. package/dist/esm/interface/crud/sessions.js +1 -2
  295. package/dist/esm/interface/crud/sessions.js.map +1 -1
  296. package/dist/esm/interface/crud/sign-up-rules.d.ts.map +1 -1
  297. package/dist/esm/interface/crud/sign-up-rules.js +1 -1
  298. package/dist/esm/interface/crud/svix-token.d.ts +8 -10
  299. package/dist/esm/interface/crud/svix-token.d.ts.map +1 -1
  300. package/dist/esm/interface/crud/svix-token.js +1 -2
  301. package/dist/esm/interface/crud/svix-token.js.map +1 -1
  302. package/dist/esm/interface/crud/team-invitation-details.d.ts +6 -8
  303. package/dist/esm/interface/crud/team-invitation-details.d.ts.map +1 -1
  304. package/dist/esm/interface/crud/team-invitation-details.js +1 -2
  305. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -1
  306. package/dist/esm/interface/crud/team-invitation.d.ts +7 -9
  307. package/dist/esm/interface/crud/team-invitation.d.ts.map +1 -1
  308. package/dist/esm/interface/crud/team-invitation.js +1 -2
  309. package/dist/esm/interface/crud/team-invitation.js.map +1 -1
  310. package/dist/esm/interface/crud/team-member-profiles.d.ts +26 -28
  311. package/dist/esm/interface/crud/team-member-profiles.d.ts.map +1 -1
  312. package/dist/esm/interface/crud/team-member-profiles.js +1 -2
  313. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -1
  314. package/dist/esm/interface/crud/team-memberships.d.ts +14 -16
  315. package/dist/esm/interface/crud/team-memberships.d.ts.map +1 -1
  316. package/dist/esm/interface/crud/team-memberships.js +1 -2
  317. package/dist/esm/interface/crud/team-memberships.js.map +1 -1
  318. package/dist/esm/interface/crud/team-permissions.d.ts +29 -31
  319. package/dist/esm/interface/crud/team-permissions.d.ts.map +1 -1
  320. package/dist/esm/interface/crud/team-permissions.js +1 -2
  321. package/dist/esm/interface/crud/team-permissions.js.map +1 -1
  322. package/dist/esm/interface/crud/teams.d.ts +36 -38
  323. package/dist/esm/interface/crud/teams.d.ts.map +1 -1
  324. package/dist/esm/interface/crud/teams.js +2 -4
  325. package/dist/esm/interface/crud/teams.js.map +1 -1
  326. package/dist/esm/interface/crud/transactions.d.ts +14 -16
  327. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  328. package/dist/esm/interface/crud/transactions.js +7 -13
  329. package/dist/esm/interface/crud/transactions.js.map +1 -1
  330. package/dist/esm/interface/crud/users.d.ts +11 -12
  331. package/dist/esm/interface/crud/users.d.ts.map +1 -1
  332. package/dist/esm/interface/crud/users.js +9 -5
  333. package/dist/esm/interface/crud/users.js.map +1 -1
  334. package/dist/esm/interface/handler-urls.d.ts +1 -1
  335. package/dist/esm/interface/handler-urls.d.ts.map +1 -1
  336. package/dist/esm/interface/handler-urls.js +1 -2
  337. package/dist/esm/interface/page-component-versions.d.ts +1 -1
  338. package/dist/esm/interface/page-component-versions.d.ts.map +1 -1
  339. package/dist/esm/interface/page-component-versions.js +1 -2
  340. package/dist/esm/interface/page-component-versions.js.map +1 -1
  341. package/dist/esm/interface/plan-usage.d.ts +1 -1
  342. package/dist/esm/interface/plan-usage.d.ts.map +1 -1
  343. package/dist/esm/interface/plan-usage.js +1 -2
  344. package/dist/esm/interface/plan-usage.js.map +1 -1
  345. package/dist/esm/interface/server-interface.d.ts +19 -19
  346. package/dist/esm/interface/server-interface.d.ts.map +1 -1
  347. package/dist/esm/interface/server-interface.js +1 -2
  348. package/dist/esm/interface/server-interface.js.map +1 -1
  349. package/dist/esm/interface/webhooks.d.ts +2 -2
  350. package/dist/esm/interface/webhooks.d.ts.map +1 -1
  351. package/dist/esm/interface/webhooks.js +1 -2
  352. package/dist/esm/interface/webhooks.js.map +1 -1
  353. package/dist/esm/known-errors.d.ts +2 -2
  354. package/dist/esm/known-errors.d.ts.map +1 -1
  355. package/dist/esm/known-errors.js +10 -21
  356. package/dist/esm/known-errors.js.map +1 -1
  357. package/dist/esm/payments/payment-methods.d.ts.map +1 -1
  358. package/dist/esm/payments/payment-methods.js +1 -1
  359. package/dist/esm/payments/payment-methods.js.map +1 -1
  360. package/dist/esm/payments/stripe-limits.d.ts.map +1 -1
  361. package/dist/esm/payments/stripe-limits.js +1 -1
  362. package/dist/esm/payments/stripe-limits.js.map +1 -1
  363. package/dist/esm/plans.d.ts.map +1 -1
  364. package/dist/esm/plans.js +1 -1
  365. package/dist/esm/plans.js.map +1 -1
  366. package/dist/esm/schema-fields.d.ts +14 -14
  367. package/dist/esm/schema-fields.d.ts.map +1 -1
  368. package/dist/esm/schema-fields.js +3 -64
  369. package/dist/esm/schema-fields.js.map +1 -1
  370. package/dist/esm/sessions.d.ts +6 -6
  371. package/dist/esm/sessions.d.ts.map +1 -1
  372. package/dist/esm/sessions.js +1 -2
  373. package/dist/esm/sessions.js.map +1 -1
  374. package/dist/esm/sessions.test.js +2 -3
  375. package/dist/esm/sessions.test.js.map +1 -1
  376. package/dist/esm/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  377. package/dist/esm/utils/analytics-clickmap-overlay.js +1 -1
  378. package/dist/esm/utils/api-keys.d.ts.map +1 -1
  379. package/dist/esm/utils/api-keys.js +1 -2
  380. package/dist/esm/utils/api-keys.js.map +1 -1
  381. package/dist/esm/utils/arrays.d.ts.map +1 -1
  382. package/dist/esm/utils/arrays.js +1 -470
  383. package/dist/esm/utils/arrays.js.map +1 -1
  384. package/dist/esm/utils/auth-methods.d.ts.map +1 -1
  385. package/dist/esm/utils/auth-methods.js +1 -1
  386. package/dist/esm/utils/auth-methods.js.map +1 -1
  387. package/dist/esm/utils/base64.d.ts.map +1 -1
  388. package/dist/esm/utils/base64.js +1 -10
  389. package/dist/esm/utils/base64.js.map +1 -1
  390. package/dist/esm/utils/booleans.d.ts.map +1 -1
  391. package/dist/esm/utils/booleans.js +1 -25
  392. package/dist/esm/utils/booleans.js.map +1 -1
  393. package/dist/esm/utils/browser-compat.d.ts.map +1 -1
  394. package/dist/esm/utils/browser-compat.js +1 -1
  395. package/dist/esm/utils/browser-compat.js.map +1 -1
  396. package/dist/esm/utils/bytes.d.ts.map +1 -1
  397. package/dist/esm/utils/bytes.js +3 -198
  398. package/dist/esm/utils/bytes.js.map +1 -1
  399. package/dist/esm/utils/caches.d.ts +1 -1
  400. package/dist/esm/utils/caches.d.ts.map +1 -1
  401. package/dist/esm/utils/caches.js +1 -27
  402. package/dist/esm/utils/caches.js.map +1 -1
  403. package/dist/esm/utils/cel-fields.d.ts.map +1 -1
  404. package/dist/esm/utils/cel-fields.js +1 -2
  405. package/dist/esm/utils/cel-fields.js.map +1 -1
  406. package/dist/esm/utils/cloud-hosts.d.ts.map +1 -1
  407. package/dist/esm/utils/cloud-hosts.js +1 -27
  408. package/dist/esm/utils/cloud-hosts.js.map +1 -1
  409. package/dist/esm/utils/compile-time.d.ts.map +1 -1
  410. package/dist/esm/utils/compile-time.js +1 -1
  411. package/dist/esm/utils/compile-time.js.map +1 -1
  412. package/dist/esm/utils/country-codes.d.ts.map +1 -1
  413. package/dist/esm/utils/country-codes.js +1 -16
  414. package/dist/esm/utils/country-codes.js.map +1 -1
  415. package/dist/esm/utils/crypto.d.ts.map +1 -1
  416. package/dist/esm/utils/crypto.js +3 -113
  417. package/dist/esm/utils/crypto.js.map +1 -1
  418. package/dist/esm/utils/currencies.d.ts +1 -1
  419. package/dist/esm/utils/currencies.d.ts.map +1 -1
  420. package/dist/esm/utils/currencies.js +2 -37
  421. package/dist/esm/utils/currencies.js.map +1 -1
  422. package/dist/esm/utils/currency-constants.d.ts.map +1 -1
  423. package/dist/esm/utils/currency-constants.js +1 -1
  424. package/dist/esm/utils/currency-constants.js.map +1 -1
  425. package/dist/esm/utils/dates.d.ts.map +1 -1
  426. package/dist/esm/utils/dates.js +1 -44
  427. package/dist/esm/utils/dates.js.map +1 -1
  428. package/dist/esm/utils/dev-env-state-path.d.ts.map +1 -1
  429. package/dist/esm/utils/dev-env-state-path.js +1 -2
  430. package/dist/esm/utils/dev-env-state-path.js.map +1 -1
  431. package/dist/esm/utils/dev-tool.d.ts.map +1 -1
  432. package/dist/esm/utils/dev-tool.js +1 -1
  433. package/dist/esm/utils/dom.d.ts.map +1 -1
  434. package/dist/esm/utils/dom.js +1 -1
  435. package/dist/esm/utils/dom.js.map +1 -1
  436. package/dist/esm/utils/elements-chain.d.ts.map +1 -1
  437. package/dist/esm/utils/elements-chain.js +5 -50
  438. package/dist/esm/utils/elements-chain.js.map +1 -1
  439. package/dist/esm/utils/env.d.ts.map +1 -1
  440. package/dist/esm/utils/env.js +1 -2
  441. package/dist/esm/utils/env.js.map +1 -1
  442. package/dist/esm/utils/env.test.js +2 -3
  443. package/dist/esm/utils/env.test.js.map +1 -1
  444. package/dist/esm/utils/errors.d.ts +1 -1
  445. package/dist/esm/utils/errors.d.ts.map +1 -1
  446. package/dist/esm/utils/errors.js +1 -2
  447. package/dist/esm/utils/errors.js.map +1 -1
  448. package/dist/esm/utils/esbuild.d.ts +1 -1
  449. package/dist/esm/utils/esbuild.d.ts.map +1 -1
  450. package/dist/esm/utils/esbuild.js +2 -3
  451. package/dist/esm/utils/esbuild.js.map +1 -1
  452. package/dist/esm/utils/featurebase.d.ts.map +1 -1
  453. package/dist/esm/utils/featurebase.js +1 -2
  454. package/dist/esm/utils/featurebase.js.map +1 -1
  455. package/dist/esm/utils/fs.d.ts.map +1 -1
  456. package/dist/esm/utils/fs.js +1 -2
  457. package/dist/esm/utils/fs.js.map +1 -1
  458. package/dist/esm/utils/functions.d.ts.map +1 -1
  459. package/dist/esm/utils/functions.js +1 -24
  460. package/dist/esm/utils/functions.js.map +1 -1
  461. package/dist/esm/utils/geo.d.ts.map +1 -1
  462. package/dist/esm/utils/geo.js +1 -2
  463. package/dist/esm/utils/geo.js.map +1 -1
  464. package/dist/esm/utils/globals.d.ts.map +1 -1
  465. package/dist/esm/utils/globals.js +1 -1
  466. package/dist/esm/utils/globals.js.map +1 -1
  467. package/dist/esm/utils/hashes.d.ts.map +1 -1
  468. package/dist/esm/utils/hashes.js +1 -2
  469. package/dist/esm/utils/hashes.js.map +1 -1
  470. package/dist/esm/utils/html.d.ts.map +1 -1
  471. package/dist/esm/utils/html.js +1 -19
  472. package/dist/esm/utils/html.js.map +1 -1
  473. package/dist/esm/utils/http.d.ts.map +1 -1
  474. package/dist/esm/utils/http.js +1 -19
  475. package/dist/esm/utils/http.js.map +1 -1
  476. package/dist/esm/utils/ips.d.ts.map +1 -1
  477. package/dist/esm/utils/ips.js +1 -25
  478. package/dist/esm/utils/ips.js.map +1 -1
  479. package/dist/esm/utils/json.d.ts +1 -1
  480. package/dist/esm/utils/json.d.ts.map +1 -1
  481. package/dist/esm/utils/json.js +1 -155
  482. package/dist/esm/utils/json.js.map +1 -1
  483. package/dist/esm/utils/jsx-editable-transpiler.d.ts.map +1 -1
  484. package/dist/esm/utils/jsx-editable-transpiler.js +1 -2
  485. package/dist/esm/utils/jsx-editable-transpiler.js.map +1 -1
  486. package/dist/esm/utils/jsx-editable-transpiler.test.js +2 -3
  487. package/dist/esm/utils/jsx-editable-transpiler.test.js.map +1 -1
  488. package/dist/esm/utils/jwt.d.ts.map +1 -1
  489. package/dist/esm/utils/jwt.js +1 -2
  490. package/dist/esm/utils/jwt.js.map +1 -1
  491. package/dist/esm/utils/locks.d.ts.map +1 -1
  492. package/dist/esm/utils/locks.js +1 -2
  493. package/dist/esm/utils/locks.js.map +1 -1
  494. package/dist/esm/utils/maps.d.ts.map +1 -1
  495. package/dist/esm/utils/maps.js +1 -111
  496. package/dist/esm/utils/maps.js.map +1 -1
  497. package/dist/esm/utils/math.d.ts.map +1 -1
  498. package/dist/esm/utils/math.js +1 -11
  499. package/dist/esm/utils/math.js.map +1 -1
  500. package/dist/esm/utils/monkey-patch.d.ts.map +1 -1
  501. package/dist/esm/utils/monkey-patch.js +2 -3
  502. package/dist/esm/utils/monkey-patch.js.map +1 -1
  503. package/dist/esm/utils/node-http.js +1 -2
  504. package/dist/esm/utils/node-http.js.map +1 -1
  505. package/dist/esm/utils/numbers.d.ts.map +1 -1
  506. package/dist/esm/utils/numbers.js +1 -45
  507. package/dist/esm/utils/numbers.js.map +1 -1
  508. package/dist/esm/utils/oauth.d.ts.map +1 -1
  509. package/dist/esm/utils/oauth.js +1 -1
  510. package/dist/esm/utils/oauth.js.map +1 -1
  511. package/dist/esm/utils/objects.d.ts.map +1 -1
  512. package/dist/esm/utils/objects.js +1 -622
  513. package/dist/esm/utils/objects.js.map +1 -1
  514. package/dist/esm/utils/paginated-lists.d.ts.map +1 -1
  515. package/dist/esm/utils/paginated-lists.js +1 -2
  516. package/dist/esm/utils/paginated-lists.js.map +1 -1
  517. package/dist/esm/utils/paginated-lists.test.js +2 -3
  518. package/dist/esm/utils/paginated-lists.test.js.map +1 -1
  519. package/dist/esm/utils/passkey.d.ts +1 -1
  520. package/dist/esm/utils/passkey.js +1 -1
  521. package/dist/esm/utils/promises.d.ts +1 -1
  522. package/dist/esm/utils/promises.d.ts.map +1 -1
  523. package/dist/esm/utils/promises.js +1 -160
  524. package/dist/esm/utils/promises.js.map +1 -1
  525. package/dist/esm/utils/proxies.d.ts.map +1 -1
  526. package/dist/esm/utils/proxies.js +1 -37
  527. package/dist/esm/utils/proxies.js.map +1 -1
  528. package/dist/esm/utils/react.d.ts.map +1 -1
  529. package/dist/esm/utils/react.js +1 -41
  530. package/dist/esm/utils/react.js.map +1 -1
  531. package/dist/esm/utils/redirect-urls.d.ts.map +1 -1
  532. package/dist/esm/utils/redirect-urls.js +2 -92
  533. package/dist/esm/utils/redirect-urls.js.map +1 -1
  534. package/dist/esm/utils/regex.js +1 -1
  535. package/dist/esm/utils/regex.js.map +1 -1
  536. package/dist/esm/utils/results.d.ts.map +1 -1
  537. package/dist/esm/utils/results.js +1 -213
  538. package/dist/esm/utils/results.js.map +1 -1
  539. package/dist/esm/utils/sentry.js +1 -1
  540. package/dist/esm/utils/sentry.js.map +1 -1
  541. package/dist/esm/utils/stores.d.ts +3 -3
  542. package/dist/esm/utils/stores.d.ts.map +1 -1
  543. package/dist/esm/utils/stores.js +1 -2
  544. package/dist/esm/utils/stores.js.map +1 -1
  545. package/dist/esm/utils/strings.d.ts.map +1 -1
  546. package/dist/esm/utils/strings.js +1 -251
  547. package/dist/esm/utils/strings.js.map +1 -1
  548. package/dist/esm/utils/strings.nicify.test.js +2 -3
  549. package/dist/esm/utils/strings.nicify.test.js.map +1 -1
  550. package/dist/esm/utils/telemetry.d.ts.map +1 -1
  551. package/dist/esm/utils/telemetry.js +1 -2
  552. package/dist/esm/utils/telemetry.js.map +1 -1
  553. package/dist/esm/utils/turnstile-browser.d.ts +1 -1
  554. package/dist/esm/utils/turnstile-browser.d.ts.map +1 -1
  555. package/dist/esm/utils/turnstile-browser.js +1 -2
  556. package/dist/esm/utils/turnstile-browser.js.map +1 -1
  557. package/dist/esm/utils/turnstile-flow.d.ts +1 -1
  558. package/dist/esm/utils/turnstile-flow.d.ts.map +1 -1
  559. package/dist/esm/utils/turnstile-flow.js +1 -2
  560. package/dist/esm/utils/turnstile-flow.js.map +1 -1
  561. package/dist/esm/utils/turnstile-flow.test.js +2 -3
  562. package/dist/esm/utils/turnstile-flow.test.js.map +1 -1
  563. package/dist/esm/utils/turnstile.d.ts.map +1 -1
  564. package/dist/esm/utils/turnstile.js +1 -1
  565. package/dist/esm/utils/turnstile.js.map +1 -1
  566. package/dist/esm/utils/typed-arrays.js +1 -2
  567. package/dist/esm/utils/typed-arrays.js.map +1 -1
  568. package/dist/esm/utils/types.d.ts +1 -1
  569. package/dist/esm/utils/types.d.ts.map +1 -1
  570. package/dist/esm/utils/types.js +1 -1
  571. package/dist/esm/utils/types.js.map +1 -1
  572. package/dist/esm/utils/unicode.d.ts.map +1 -1
  573. package/dist/esm/utils/unicode.js +1 -13
  574. package/dist/esm/utils/unicode.js.map +1 -1
  575. package/dist/esm/utils/urls.d.ts.map +1 -1
  576. package/dist/esm/utils/urls.js +1 -151
  577. package/dist/esm/utils/urls.js.map +1 -1
  578. package/dist/esm/utils/uuids.d.ts.map +1 -1
  579. package/dist/esm/utils/uuids.js +2 -26
  580. package/dist/esm/utils/uuids.js.map +1 -1
  581. package/dist/format-4JG1MGv5.d.ts +61 -0
  582. package/dist/format-4JG1MGv5.d.ts.map +1 -0
  583. package/dist/handler-urls-BHt3v8Ai.d.ts +70 -0
  584. package/dist/handler-urls-BHt3v8Ai.d.ts.map +1 -0
  585. package/dist/helpers/emails.js +2 -4
  586. package/dist/helpers/emails.js.map +1 -1
  587. package/dist/helpers/init-prompt.d.ts.map +1 -1
  588. package/dist/helpers/init-prompt.js +2 -4
  589. package/dist/helpers/init-prompt.js.map +1 -1
  590. package/dist/helpers/password.d.ts +1 -1
  591. package/dist/helpers/password.d.ts.map +1 -1
  592. package/dist/helpers/password.js +2 -4
  593. package/dist/helpers/password.js.map +1 -1
  594. package/dist/helpers/production-mode.d.ts +1 -1
  595. package/dist/helpers/production-mode.d.ts.map +1 -1
  596. package/dist/helpers/production-mode.js +2 -4
  597. package/dist/helpers/production-mode.js.map +1 -1
  598. package/dist/helpers/support-sla.d.ts.map +1 -1
  599. package/dist/helpers/support-sla.js +2 -3
  600. package/dist/helpers/support-sla.js.map +1 -1
  601. package/dist/helpers/support-sla.test.js +1 -3
  602. package/dist/helpers/support-sla.test.js.map +1 -1
  603. package/dist/helpers/vault/client-side.d.ts.map +1 -1
  604. package/dist/helpers/vault/client-side.js +2 -22
  605. package/dist/helpers/vault/client-side.js.map +1 -1
  606. package/dist/helpers/vault/server-side.js +2 -4
  607. package/dist/helpers/vault/server-side.js.map +1 -1
  608. package/dist/hooks/use-async-callback.d.ts.map +1 -1
  609. package/dist/hooks/use-async-callback.js +4 -5
  610. package/dist/hooks/use-async-callback.js.map +1 -1
  611. package/dist/hooks/use-async-external-store.d.ts +1 -1
  612. package/dist/hooks/use-async-external-store.d.ts.map +1 -1
  613. package/dist/hooks/use-async-external-store.js +2 -4
  614. package/dist/hooks/use-async-external-store.js.map +1 -1
  615. package/dist/hooks/use-hash.js +2 -4
  616. package/dist/hooks/use-hash.js.map +1 -1
  617. package/dist/hooks/use-hover.d.ts.map +1 -1
  618. package/dist/hooks/use-hover.js +2 -4
  619. package/dist/hooks/use-hover.js.map +1 -1
  620. package/dist/hooks/use-strict-memo.d.ts.map +1 -1
  621. package/dist/hooks/use-strict-memo.js +2 -72
  622. package/dist/hooks/use-strict-memo.js.map +1 -1
  623. package/dist/index.d.ts +4 -4
  624. package/dist/index.js +27 -29
  625. package/dist/interface/admin-interface.d.ts +3 -379
  626. package/dist/interface/admin-interface.js +2 -4
  627. package/dist/interface/admin-interface.js.map +1 -1
  628. package/dist/interface/admin-metrics.d.ts +2 -807
  629. package/dist/interface/admin-metrics.js +2 -4
  630. package/dist/interface/admin-metrics.js.map +1 -1
  631. package/dist/interface/client-interface.d.ts +2 -447
  632. package/dist/interface/client-interface.js +32 -17
  633. package/dist/interface/client-interface.js.map +1 -1
  634. package/dist/interface/client-interface.test.js +83 -13
  635. package/dist/interface/client-interface.test.js.map +1 -1
  636. package/dist/interface/conversations.d.ts +33 -33
  637. package/dist/interface/conversations.d.ts.map +1 -1
  638. package/dist/interface/conversations.js +2 -4
  639. package/dist/interface/conversations.js.map +1 -1
  640. package/dist/interface/crud/analytics.d.ts +2 -14
  641. package/dist/interface/crud/connected-accounts.d.ts +2 -68
  642. package/dist/interface/crud/connected-accounts.js +2 -4
  643. package/dist/interface/crud/connected-accounts.js.map +1 -1
  644. package/dist/interface/crud/contact-channels.d.ts +2 -181
  645. package/dist/interface/crud/contact-channels.js +2 -4
  646. package/dist/interface/crud/contact-channels.js.map +1 -1
  647. package/dist/interface/crud/current-user.d.ts +2 -285
  648. package/dist/interface/crud/current-user.js +2 -4
  649. package/dist/interface/crud/current-user.js.map +1 -1
  650. package/dist/interface/crud/email-outbox.d.ts +2 -1465
  651. package/dist/interface/crud/email-outbox.js +4 -5
  652. package/dist/interface/crud/email-outbox.js.map +1 -1
  653. package/dist/interface/crud/email-templates.d.ts +15 -16
  654. package/dist/interface/crud/email-templates.d.ts.map +1 -1
  655. package/dist/interface/crud/email-templates.js +2 -4
  656. package/dist/interface/crud/email-templates.js.map +1 -1
  657. package/dist/interface/crud/emails.d.ts +2 -41
  658. package/dist/interface/crud/emails.js +4 -5
  659. package/dist/interface/crud/emails.js.map +1 -1
  660. package/dist/interface/crud/internal-api-keys.d.ts +2 -140
  661. package/dist/interface/crud/internal-api-keys.js +2 -4
  662. package/dist/interface/crud/internal-api-keys.js.map +1 -1
  663. package/dist/interface/crud/invoices.d.ts +2 -43
  664. package/dist/interface/crud/invoices.js +2 -4
  665. package/dist/interface/crud/invoices.js.map +1 -1
  666. package/dist/interface/crud/items.d.ts +2 -30
  667. package/dist/interface/crud/items.js +2 -4
  668. package/dist/interface/crud/items.js.map +1 -1
  669. package/dist/interface/crud/notification-preferences.d.ts +2 -38
  670. package/dist/interface/crud/notification-preferences.js +2 -4
  671. package/dist/interface/crud/notification-preferences.js.map +1 -1
  672. package/dist/interface/crud/oauth-providers.d.ts +2 -186
  673. package/dist/interface/crud/oauth-providers.js +2 -4
  674. package/dist/interface/crud/oauth-providers.js.map +1 -1
  675. package/dist/interface/crud/products.d.ts +2 -182
  676. package/dist/interface/crud/products.js +4 -4
  677. package/dist/interface/crud/products.js.map +1 -1
  678. package/dist/interface/crud/project-api-keys.d.ts +2 -203
  679. package/dist/interface/crud/project-api-keys.js +2 -4
  680. package/dist/interface/crud/project-api-keys.js.map +1 -1
  681. package/dist/interface/crud/project-permissions.d.ts +2 -161
  682. package/dist/interface/crud/project-permissions.js +4 -5
  683. package/dist/interface/crud/project-permissions.js.map +1 -1
  684. package/dist/interface/crud/projects.d.ts +2 -901
  685. package/dist/interface/crud/projects.js +6 -5
  686. package/dist/interface/crud/projects.js.map +1 -1
  687. package/dist/interface/crud/session-replays.d.ts +2 -83
  688. package/dist/interface/crud/sessions.d.ts +2 -150
  689. package/dist/interface/crud/sessions.js +2 -4
  690. package/dist/interface/crud/sessions.js.map +1 -1
  691. package/dist/interface/crud/sign-up-rules.d.ts.map +1 -1
  692. package/dist/interface/crud/svix-token.d.ts +2 -31
  693. package/dist/interface/crud/svix-token.js +2 -4
  694. package/dist/interface/crud/svix-token.js.map +1 -1
  695. package/dist/interface/crud/team-invitation-details.d.ts +5 -6
  696. package/dist/interface/crud/team-invitation-details.d.ts.map +1 -1
  697. package/dist/interface/crud/team-invitation-details.js +4 -5
  698. package/dist/interface/crud/team-invitation-details.js.map +1 -1
  699. package/dist/interface/crud/team-invitation.d.ts +2 -54
  700. package/dist/interface/crud/team-invitation.js +4 -5
  701. package/dist/interface/crud/team-invitation.js.map +1 -1
  702. package/dist/interface/crud/team-member-profiles.d.ts +2 -286
  703. package/dist/interface/crud/team-member-profiles.js +4 -5
  704. package/dist/interface/crud/team-member-profiles.js.map +1 -1
  705. package/dist/interface/crud/team-memberships.d.ts +2 -75
  706. package/dist/interface/crud/team-memberships.js +2 -4
  707. package/dist/interface/crud/team-memberships.js.map +1 -1
  708. package/dist/interface/crud/team-permissions.d.ts +2 -169
  709. package/dist/interface/crud/team-permissions.js +4 -5
  710. package/dist/interface/crud/team-permissions.js.map +1 -1
  711. package/dist/interface/crud/teams.d.ts +2 -299
  712. package/dist/interface/crud/teams.js +5 -7
  713. package/dist/interface/crud/teams.js.map +1 -1
  714. package/dist/interface/crud/transactions.d.ts +2 -183
  715. package/dist/interface/crud/transactions.js +2 -4
  716. package/dist/interface/crud/transactions.js.map +1 -1
  717. package/dist/interface/crud/users.d.ts +2 -653
  718. package/dist/interface/crud/users.js +12 -8
  719. package/dist/interface/crud/users.js.map +1 -1
  720. package/dist/interface/handler-urls.d.ts +2 -51
  721. package/dist/interface/handler-urls.js +12 -14
  722. package/dist/interface/page-component-versions.d.ts +2 -25
  723. package/dist/interface/page-component-versions.js +2 -4
  724. package/dist/interface/page-component-versions.js.map +1 -1
  725. package/dist/interface/plan-usage.d.ts +2 -57
  726. package/dist/interface/plan-usage.js +2 -4
  727. package/dist/interface/plan-usage.js.map +1 -1
  728. package/dist/interface/server-interface.d.ts +2 -257
  729. package/dist/interface/server-interface.js +2 -4
  730. package/dist/interface/server-interface.js.map +1 -1
  731. package/dist/interface/webhooks.d.ts +2 -326
  732. package/dist/interface/webhooks.js +2 -4
  733. package/dist/interface/webhooks.js.map +1 -1
  734. package/dist/internal-api-keys-D8IYDodH.d.ts +139 -0
  735. package/dist/internal-api-keys-D8IYDodH.d.ts.map +1 -0
  736. package/dist/invoices-U65KzAZX.d.ts +43 -0
  737. package/dist/invoices-U65KzAZX.d.ts.map +1 -0
  738. package/dist/items-DlLSlVUD.d.ts +29 -0
  739. package/dist/items-DlLSlVUD.d.ts.map +1 -0
  740. package/dist/json-a1QIXu5z.d.ts +15 -0
  741. package/dist/json-a1QIXu5z.d.ts.map +1 -0
  742. package/dist/known-errors-Bm4a61wL.d.ts +575 -0
  743. package/dist/known-errors-Bm4a61wL.d.ts.map +1 -0
  744. package/dist/known-errors.d.ts +2 -575
  745. package/dist/known-errors.js +11 -23
  746. package/dist/known-errors.js.map +1 -1
  747. package/dist/notification-preferences-Bmzr_EOY.d.ts +37 -0
  748. package/dist/notification-preferences-Bmzr_EOY.d.ts.map +1 -0
  749. package/dist/oauth-providers-BMkKSSlA.d.ts +185 -0
  750. package/dist/oauth-providers-BMkKSSlA.d.ts.map +1 -0
  751. package/dist/objects-DkCkeBWE.d.ts +59 -0
  752. package/dist/objects-DkCkeBWE.d.ts.map +1 -0
  753. package/dist/passkey-CKg87UH-.d.ts +2 -0
  754. package/dist/payments/payment-methods.d.ts.map +1 -1
  755. package/dist/payments/payment-methods.js +2 -3
  756. package/dist/payments/payment-methods.js.map +1 -1
  757. package/dist/payments/stripe-limits.d.ts.map +1 -1
  758. package/dist/payments/stripe-limits.js +2 -3
  759. package/dist/payments/stripe-limits.js.map +1 -1
  760. package/dist/plan-usage-DfDoj5K4.d.ts +57 -0
  761. package/dist/plan-usage-DfDoj5K4.d.ts.map +1 -0
  762. package/dist/plans.d.ts.map +1 -1
  763. package/dist/plans.js +2 -3
  764. package/dist/plans.js.map +1 -1
  765. package/dist/products-Bs74ld-v.d.ts +182 -0
  766. package/dist/products-Bs74ld-v.d.ts.map +1 -0
  767. package/dist/project-api-keys--7V5X_UW.d.ts +203 -0
  768. package/dist/project-api-keys--7V5X_UW.d.ts.map +1 -0
  769. package/dist/project-permissions-kdi675F-.d.ts +160 -0
  770. package/dist/project-permissions-kdi675F-.d.ts.map +1 -0
  771. package/dist/projects-CgFGB3nO.d.ts +900 -0
  772. package/dist/projects-CgFGB3nO.d.ts.map +1 -0
  773. package/dist/results-DP3BzoL6.d.ts +70 -0
  774. package/dist/results-DP3BzoL6.d.ts.map +1 -0
  775. package/dist/{chunk-BE-pF4vm.js → rolldown-runtime-D6vf50IK.js} +12 -18
  776. package/dist/schema-01nWxmb4.d.ts +2328 -0
  777. package/dist/schema-01nWxmb4.d.ts.map +1 -0
  778. package/dist/schema-fields-DqGQ4kF7.d.ts +517 -0
  779. package/dist/schema-fields-DqGQ4kF7.d.ts.map +1 -0
  780. package/dist/schema-fields.d.ts +3 -518
  781. package/dist/schema-fields.js +21 -82
  782. package/dist/schema-fields.js.map +1 -1
  783. package/dist/server-interface-BUPG1kor.d.ts +257 -0
  784. package/dist/server-interface-BUPG1kor.d.ts.map +1 -0
  785. package/dist/session-replays-CXqhDpZq.d.ts +83 -0
  786. package/dist/session-replays-CXqhDpZq.d.ts.map +1 -0
  787. package/dist/sessions-B7Ko2Ldr.d.ts +149 -0
  788. package/dist/sessions-B7Ko2Ldr.d.ts.map +1 -0
  789. package/dist/sessions-d8qtvBUB.d.ts +175 -0
  790. package/dist/sessions-d8qtvBUB.d.ts.map +1 -0
  791. package/dist/sessions.d.ts +2 -175
  792. package/dist/sessions.js +4 -5
  793. package/dist/sessions.js.map +1 -1
  794. package/dist/sessions.test.js +1 -3
  795. package/dist/sessions.test.js.map +1 -1
  796. package/dist/strings-DWgkUybS.d.ts +76 -0
  797. package/dist/strings-DWgkUybS.d.ts.map +1 -0
  798. package/dist/svix-token-BsMrLGvy.d.ts +30 -0
  799. package/dist/svix-token-BsMrLGvy.d.ts.map +1 -0
  800. package/dist/team-invitation-Cyqt9oWw.d.ts +53 -0
  801. package/dist/team-invitation-Cyqt9oWw.d.ts.map +1 -0
  802. package/dist/team-member-profiles-uTluO8XI.d.ts +285 -0
  803. package/dist/team-member-profiles-uTluO8XI.d.ts.map +1 -0
  804. package/dist/team-memberships-DZHk2A5b.d.ts +74 -0
  805. package/dist/team-memberships-DZHk2A5b.d.ts.map +1 -0
  806. package/dist/team-permissions-DqOpaOWh.d.ts +168 -0
  807. package/dist/team-permissions-DqOpaOWh.d.ts.map +1 -0
  808. package/dist/teams-CQMcBnjM.d.ts +298 -0
  809. package/dist/teams-CQMcBnjM.d.ts.map +1 -0
  810. package/dist/transactions-DhnbvGH5.d.ts +182 -0
  811. package/dist/transactions-DhnbvGH5.d.ts.map +1 -0
  812. package/dist/types-DfTcxNtM.d.ts +77 -0
  813. package/dist/types-DfTcxNtM.d.ts.map +1 -0
  814. package/dist/users-CmBBuF00.d.ts +653 -0
  815. package/dist/users-CmBBuF00.d.ts.map +1 -0
  816. package/dist/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  817. package/dist/utils/analytics-clickmap-overlay.js +2 -3
  818. package/dist/utils/analytics-clickmap-overlay.js.map +1 -1
  819. package/dist/utils/api-keys.d.ts.map +1 -1
  820. package/dist/utils/api-keys.js +4 -5
  821. package/dist/utils/api-keys.js.map +1 -1
  822. package/dist/utils/arrays.d.ts.map +1 -1
  823. package/dist/utils/arrays.js +2 -472
  824. package/dist/utils/arrays.js.map +1 -1
  825. package/dist/utils/auth-methods.d.ts.map +1 -1
  826. package/dist/utils/auth-methods.js +2 -3
  827. package/dist/utils/auth-methods.js.map +1 -1
  828. package/dist/utils/base64.d.ts.map +1 -1
  829. package/dist/utils/base64.js +2 -12
  830. package/dist/utils/base64.js.map +1 -1
  831. package/dist/utils/booleans.d.ts.map +1 -1
  832. package/dist/utils/booleans.js +2 -27
  833. package/dist/utils/booleans.js.map +1 -1
  834. package/dist/utils/browser-compat.d.ts.map +1 -1
  835. package/dist/utils/browser-compat.js +2 -3
  836. package/dist/utils/browser-compat.js.map +1 -1
  837. package/dist/utils/bytes.d.ts.map +1 -1
  838. package/dist/utils/bytes.js +4 -200
  839. package/dist/utils/bytes.js.map +1 -1
  840. package/dist/utils/caches.d.ts.map +1 -1
  841. package/dist/utils/caches.js +2 -29
  842. package/dist/utils/caches.js.map +1 -1
  843. package/dist/utils/cel-fields.d.ts.map +1 -1
  844. package/dist/utils/cel-fields.js +2 -4
  845. package/dist/utils/cel-fields.js.map +1 -1
  846. package/dist/utils/cloud-hosts.d.ts.map +1 -1
  847. package/dist/utils/cloud-hosts.js +2 -29
  848. package/dist/utils/cloud-hosts.js.map +1 -1
  849. package/dist/utils/compile-time.d.ts.map +1 -1
  850. package/dist/utils/compile-time.js +2 -3
  851. package/dist/utils/compile-time.js.map +1 -1
  852. package/dist/utils/country-codes.d.ts +2 -11
  853. package/dist/utils/country-codes.js +2 -18
  854. package/dist/utils/country-codes.js.map +1 -1
  855. package/dist/utils/crypto.d.ts.map +1 -1
  856. package/dist/utils/crypto.js +4 -115
  857. package/dist/utils/crypto.js.map +1 -1
  858. package/dist/utils/currencies.d.ts +1 -1
  859. package/dist/utils/currencies.d.ts.map +1 -1
  860. package/dist/utils/currencies.js +3 -39
  861. package/dist/utils/currencies.js.map +1 -1
  862. package/dist/utils/currency-constants.d.ts +2 -45
  863. package/dist/utils/currency-constants.js +2 -3
  864. package/dist/utils/currency-constants.js.map +1 -1
  865. package/dist/utils/dates.d.ts +2 -23
  866. package/dist/utils/dates.js +2 -46
  867. package/dist/utils/dates.js.map +1 -1
  868. package/dist/utils/dev-env-state-path.d.ts.map +1 -1
  869. package/dist/utils/dev-env-state-path.js +2 -4
  870. package/dist/utils/dev-env-state-path.js.map +1 -1
  871. package/dist/utils/dev-tool.d.ts.map +1 -1
  872. package/dist/utils/dev-tool.js +2 -3
  873. package/dist/utils/dev-tool.js.map +1 -1
  874. package/dist/utils/dom.d.ts.map +1 -1
  875. package/dist/utils/dom.js +2 -3
  876. package/dist/utils/dom.js.map +1 -1
  877. package/dist/utils/elements-chain.d.ts.map +1 -1
  878. package/dist/utils/elements-chain.js +6 -52
  879. package/dist/utils/elements-chain.js.map +1 -1
  880. package/dist/utils/env.d.ts.map +1 -1
  881. package/dist/utils/env.js +2 -4
  882. package/dist/utils/env.js.map +1 -1
  883. package/dist/utils/env.test.js +1 -3
  884. package/dist/utils/env.test.js.map +1 -1
  885. package/dist/utils/errors.d.ts +2 -238
  886. package/dist/utils/errors.js +2 -4
  887. package/dist/utils/errors.js.map +1 -1
  888. package/dist/utils/esbuild.d.ts +1 -1
  889. package/dist/utils/esbuild.d.ts.map +1 -1
  890. package/dist/utils/esbuild.js +5 -6
  891. package/dist/utils/esbuild.js.map +1 -1
  892. package/dist/utils/featurebase.d.ts.map +1 -1
  893. package/dist/utils/featurebase.js +2 -4
  894. package/dist/utils/featurebase.js.map +1 -1
  895. package/dist/utils/fs.d.ts.map +1 -1
  896. package/dist/utils/fs.js +5 -6
  897. package/dist/utils/fs.js.map +1 -1
  898. package/dist/utils/functions.d.ts.map +1 -1
  899. package/dist/utils/functions.js +2 -26
  900. package/dist/utils/functions.js.map +1 -1
  901. package/dist/utils/geo.d.ts.map +1 -1
  902. package/dist/utils/geo.js +2 -4
  903. package/dist/utils/geo.js.map +1 -1
  904. package/dist/utils/globals.d.ts.map +1 -1
  905. package/dist/utils/globals.js +2 -3
  906. package/dist/utils/globals.js.map +1 -1
  907. package/dist/utils/hashes.d.ts.map +1 -1
  908. package/dist/utils/hashes.js +4 -5
  909. package/dist/utils/hashes.js.map +1 -1
  910. package/dist/utils/html.d.ts.map +1 -1
  911. package/dist/utils/html.js +2 -21
  912. package/dist/utils/html.js.map +1 -1
  913. package/dist/utils/http.d.ts.map +1 -1
  914. package/dist/utils/http.js +2 -21
  915. package/dist/utils/http.js.map +1 -1
  916. package/dist/utils/ips.d.ts.map +1 -1
  917. package/dist/utils/ips.js +4 -28
  918. package/dist/utils/ips.js.map +1 -1
  919. package/dist/utils/json.d.ts +2 -15
  920. package/dist/utils/json.js +2 -157
  921. package/dist/utils/json.js.map +1 -1
  922. package/dist/utils/jsx-editable-transpiler.d.ts.map +1 -1
  923. package/dist/utils/jsx-editable-transpiler.js +7 -8
  924. package/dist/utils/jsx-editable-transpiler.js.map +1 -1
  925. package/dist/utils/jsx-editable-transpiler.test.js +1 -3
  926. package/dist/utils/jsx-editable-transpiler.test.js.map +1 -1
  927. package/dist/utils/jwt.d.ts.map +1 -1
  928. package/dist/utils/jwt.js +6 -7
  929. package/dist/utils/jwt.js.map +1 -1
  930. package/dist/utils/locks.d.ts.map +1 -1
  931. package/dist/utils/locks.js +2 -4
  932. package/dist/utils/locks.js.map +1 -1
  933. package/dist/utils/maps.d.ts.map +1 -1
  934. package/dist/utils/maps.js +2 -113
  935. package/dist/utils/maps.js.map +1 -1
  936. package/dist/utils/math.d.ts.map +1 -1
  937. package/dist/utils/math.js +2 -13
  938. package/dist/utils/math.js.map +1 -1
  939. package/dist/utils/monkey-patch.d.ts.map +1 -1
  940. package/dist/utils/monkey-patch.js +3 -5
  941. package/dist/utils/monkey-patch.js.map +1 -1
  942. package/dist/utils/node-http.js +2 -4
  943. package/dist/utils/node-http.js.map +1 -1
  944. package/dist/utils/numbers.d.ts.map +1 -1
  945. package/dist/utils/numbers.js +2 -47
  946. package/dist/utils/numbers.js.map +1 -1
  947. package/dist/utils/oauth.d.ts.map +1 -1
  948. package/dist/utils/oauth.js +2 -3
  949. package/dist/utils/oauth.js.map +1 -1
  950. package/dist/utils/objects.d.ts +2 -59
  951. package/dist/utils/objects.js +2 -624
  952. package/dist/utils/objects.js.map +1 -1
  953. package/dist/utils/paginated-lists.d.ts.map +1 -1
  954. package/dist/utils/paginated-lists.js +2 -4
  955. package/dist/utils/paginated-lists.js.map +1 -1
  956. package/dist/utils/paginated-lists.test.js +1 -3
  957. package/dist/utils/paginated-lists.test.js.map +1 -1
  958. package/dist/utils/passkey.d.ts +2 -2
  959. package/dist/utils/promises.d.ts +1 -1
  960. package/dist/utils/promises.d.ts.map +1 -1
  961. package/dist/utils/promises.js +2 -162
  962. package/dist/utils/promises.js.map +1 -1
  963. package/dist/utils/proxies.d.ts.map +1 -1
  964. package/dist/utils/proxies.js +2 -39
  965. package/dist/utils/proxies.js.map +1 -1
  966. package/dist/utils/react.d.ts.map +1 -1
  967. package/dist/utils/react.js +4 -44
  968. package/dist/utils/react.js.map +1 -1
  969. package/dist/utils/redirect-urls.d.ts.map +1 -1
  970. package/dist/utils/redirect-urls.js +3 -94
  971. package/dist/utils/redirect-urls.js.map +1 -1
  972. package/dist/utils/regex.js +2 -3
  973. package/dist/utils/regex.js.map +1 -1
  974. package/dist/utils/results.d.ts +2 -70
  975. package/dist/utils/results.js +2 -215
  976. package/dist/utils/results.js.map +1 -1
  977. package/dist/utils/sentry.js +2 -3
  978. package/dist/utils/sentry.js.map +1 -1
  979. package/dist/utils/stores.d.ts +1 -1
  980. package/dist/utils/stores.d.ts.map +1 -1
  981. package/dist/utils/stores.js +2 -4
  982. package/dist/utils/stores.js.map +1 -1
  983. package/dist/utils/strings.d.ts +2 -76
  984. package/dist/utils/strings.js +2 -253
  985. package/dist/utils/strings.js.map +1 -1
  986. package/dist/utils/strings.nicify.test.js +1 -3
  987. package/dist/utils/strings.nicify.test.js.map +1 -1
  988. package/dist/utils/telemetry.d.ts.map +1 -1
  989. package/dist/utils/telemetry.js +2 -4
  990. package/dist/utils/telemetry.js.map +1 -1
  991. package/dist/utils/turnstile-browser.d.ts.map +1 -1
  992. package/dist/utils/turnstile-browser.js +2 -4
  993. package/dist/utils/turnstile-browser.js.map +1 -1
  994. package/dist/utils/turnstile-flow.d.ts.map +1 -1
  995. package/dist/utils/turnstile-flow.js +2 -4
  996. package/dist/utils/turnstile-flow.js.map +1 -1
  997. package/dist/utils/turnstile-flow.test.js +1 -3
  998. package/dist/utils/turnstile-flow.test.js.map +1 -1
  999. package/dist/utils/turnstile.d.ts.map +1 -1
  1000. package/dist/utils/turnstile.js +2 -3
  1001. package/dist/utils/turnstile.js.map +1 -1
  1002. package/dist/utils/typed-arrays.js +2 -4
  1003. package/dist/utils/typed-arrays.js.map +1 -1
  1004. package/dist/utils/types.d.ts +2 -77
  1005. package/dist/utils/types.js +2 -3
  1006. package/dist/utils/types.js.map +1 -1
  1007. package/dist/utils/unicode.d.ts.map +1 -1
  1008. package/dist/utils/unicode.js +2 -15
  1009. package/dist/utils/unicode.js.map +1 -1
  1010. package/dist/utils/urls.d.ts.map +1 -1
  1011. package/dist/utils/urls.js +2 -153
  1012. package/dist/utils/urls.js.map +1 -1
  1013. package/dist/utils/uuids.d.ts.map +1 -1
  1014. package/dist/utils/uuids.js +3 -28
  1015. package/dist/utils/uuids.js.map +1 -1
  1016. package/dist/webhooks-ByXrdSOx.d.ts +326 -0
  1017. package/dist/webhooks-ByXrdSOx.d.ts.map +1 -0
  1018. package/package.json +2 -8
  1019. package/src/interface/client-interface.test.ts +77 -12
  1020. package/src/interface/client-interface.ts +9 -9
  1021. package/dist/config/format.d.ts.map +0 -1
  1022. package/dist/config/schema.d.ts.map +0 -1
  1023. package/dist/crud.d.ts.map +0 -1
  1024. package/dist/interface/admin-interface.d.ts.map +0 -1
  1025. package/dist/interface/admin-metrics.d.ts.map +0 -1
  1026. package/dist/interface/client-interface.d.ts.map +0 -1
  1027. package/dist/interface/crud/analytics.d.ts.map +0 -1
  1028. package/dist/interface/crud/connected-accounts.d.ts.map +0 -1
  1029. package/dist/interface/crud/contact-channels.d.ts.map +0 -1
  1030. package/dist/interface/crud/current-user.d.ts.map +0 -1
  1031. package/dist/interface/crud/emails.d.ts.map +0 -1
  1032. package/dist/interface/crud/internal-api-keys.d.ts.map +0 -1
  1033. package/dist/interface/crud/invoices.d.ts.map +0 -1
  1034. package/dist/interface/crud/items.d.ts.map +0 -1
  1035. package/dist/interface/crud/notification-preferences.d.ts.map +0 -1
  1036. package/dist/interface/crud/oauth-providers.d.ts.map +0 -1
  1037. package/dist/interface/crud/products.d.ts.map +0 -1
  1038. package/dist/interface/crud/project-api-keys.d.ts.map +0 -1
  1039. package/dist/interface/crud/project-permissions.d.ts.map +0 -1
  1040. package/dist/interface/crud/projects.d.ts.map +0 -1
  1041. package/dist/interface/crud/session-replays.d.ts.map +0 -1
  1042. package/dist/interface/crud/sessions.d.ts.map +0 -1
  1043. package/dist/interface/crud/svix-token.d.ts.map +0 -1
  1044. package/dist/interface/crud/team-invitation.d.ts.map +0 -1
  1045. package/dist/interface/crud/team-member-profiles.d.ts.map +0 -1
  1046. package/dist/interface/crud/team-memberships.d.ts.map +0 -1
  1047. package/dist/interface/crud/team-permissions.d.ts.map +0 -1
  1048. package/dist/interface/crud/teams.d.ts.map +0 -1
  1049. package/dist/interface/crud/transactions.d.ts.map +0 -1
  1050. package/dist/interface/crud/users.d.ts.map +0 -1
  1051. package/dist/interface/handler-urls.d.ts.map +0 -1
  1052. package/dist/interface/page-component-versions.d.ts.map +0 -1
  1053. package/dist/interface/plan-usage.d.ts.map +0 -1
  1054. package/dist/interface/server-interface.d.ts.map +0 -1
  1055. package/dist/interface/webhooks.d.ts.map +0 -1
  1056. package/dist/known-errors.d.ts.map +0 -1
  1057. package/dist/schema-fields.d.ts.map +0 -1
  1058. package/dist/sessions.d.ts.map +0 -1
  1059. package/dist/utils/country-codes.d.ts.map +0 -1
  1060. package/dist/utils/currency-constants.d.ts.map +0 -1
  1061. package/dist/utils/dates.d.ts.map +0 -1
  1062. package/dist/utils/errors.d.ts.map +0 -1
  1063. package/dist/utils/json.d.ts.map +0 -1
  1064. package/dist/utils/objects.d.ts.map +0 -1
  1065. package/dist/utils/results.d.ts.map +0 -1
  1066. package/dist/utils/strings.d.ts.map +0 -1
  1067. package/dist/utils/types.d.ts.map +0 -1
@@ -1,10 +1,8 @@
1
- const require_chunk = require('../chunk-BE-pF4vm.js');
2
1
  let vitest = require("vitest");
3
2
  let ___utils_results_js = require("../utils/results.js");
4
3
  let ___known_errors_js = require("../known-errors.js");
5
4
  let ___sessions_js = require("../sessions.js");
6
5
  let __client_interface_js = require("./client-interface.js");
7
-
8
6
  //#region src/interface/client-interface.test.ts
9
7
  function createClientInterface(options) {
10
8
  const apiUrls = options?.apiUrls ?? [options?.baseUrl ?? "https://api.example.com"];
@@ -481,22 +479,22 @@ function getRequestBody(fetchMock) {
481
479
  (0, vitest.expect)(hitOrder).toContain(1);
482
480
  });
483
481
  });
482
+ function getRequestInit(fetchMock) {
483
+ const init = fetchMock.mock.calls[0]?.[1];
484
+ if (init == null || typeof init !== "object") throw new Error("expected RequestInit");
485
+ return init;
486
+ }
487
+ async function gunzipToText(body) {
488
+ if (!(body instanceof Uint8Array)) throw new Error("expected Uint8Array body");
489
+ const stream = new Blob([body]).stream().pipeThrough(new DecompressionStream("gzip"));
490
+ return await new Response(stream).text();
491
+ }
484
492
  (0, vitest.describe)("sendAnalyticsEventBatch encoding", () => {
485
493
  function captureFetch() {
486
494
  const fetchMock = vitest.vi.fn(async () => createJsonResponse({ inserted: 0 }));
487
495
  vitest.vi.stubGlobal("fetch", fetchMock);
488
496
  return fetchMock;
489
497
  }
490
- function getRequestInit(fetchMock) {
491
- const init = fetchMock.mock.calls[0]?.[1];
492
- if (init == null || typeof init !== "object") throw new Error("expected RequestInit");
493
- return init;
494
- }
495
- async function gunzipToText(body) {
496
- if (!(body instanceof Uint8Array)) throw new Error("expected Uint8Array body");
497
- const stream = new Blob([body]).stream().pipeThrough(new DecompressionStream("gzip"));
498
- return await new Response(stream).text();
499
- }
500
498
  (0, vitest.it)("gzips body and sends application/octet-stream when keepalive is false", async () => {
501
499
  const fetchMock = captureFetch();
502
500
  const iface = createClientInterface();
@@ -554,6 +552,78 @@ function getRequestBody(fetchMock) {
554
552
  (0, vitest.expect)(init.body).toBe(payload);
555
553
  });
556
554
  });
557
-
555
+ (0, vitest.describe)("sendSessionReplayBatch encoding", () => {
556
+ function captureFetch() {
557
+ const fetchMock = vitest.vi.fn(async () => createJsonResponse({
558
+ session_replay_id: "r",
559
+ batch_id: "b",
560
+ s3_key: "k",
561
+ deduped: false
562
+ }));
563
+ vitest.vi.stubGlobal("fetch", fetchMock);
564
+ return fetchMock;
565
+ }
566
+ (0, vitest.it)("gzips body and sends application/octet-stream when keepalive is false", async () => {
567
+ const fetchMock = captureFetch();
568
+ const iface = createClientInterface();
569
+ const payload = JSON.stringify({
570
+ batch_id: "abc",
571
+ events: [{
572
+ type: 2,
573
+ data: "x".repeat(1e6)
574
+ }]
575
+ });
576
+ await iface.sendSessionReplayBatch(payload, null, { keepalive: false });
577
+ const init = getRequestInit(fetchMock);
578
+ (0, vitest.expect)(new Headers(init.headers).get("Content-Type")).toBe("application/octet-stream");
579
+ (0, vitest.expect)(init.body).toBeInstanceOf(Uint8Array);
580
+ (0, vitest.expect)(init.body.byteLength).toBeLessThan(1e5);
581
+ await (0, vitest.expect)(gunzipToText(init.body)).resolves.toBe(payload);
582
+ });
583
+ (0, vitest.it)("falls back to plain JSON when keepalive is true (avoids racing pagehide tear-down)", async () => {
584
+ const fetchMock = captureFetch();
585
+ const iface = createClientInterface();
586
+ const payload = JSON.stringify({
587
+ batch_id: "abc",
588
+ events: []
589
+ });
590
+ await iface.sendSessionReplayBatch(payload, null, { keepalive: true });
591
+ const init = getRequestInit(fetchMock);
592
+ (0, vitest.expect)(new Headers(init.headers).get("Content-Type")).toBe("application/json");
593
+ (0, vitest.expect)(init.body).toBe(payload);
594
+ });
595
+ (0, vitest.it)("falls back to plain JSON when CompressionStream is unavailable", async () => {
596
+ vitest.vi.stubGlobal("CompressionStream", void 0);
597
+ const fetchMock = captureFetch();
598
+ const iface = createClientInterface();
599
+ const payload = JSON.stringify({
600
+ batch_id: "abc",
601
+ events: []
602
+ });
603
+ await iface.sendSessionReplayBatch(payload, null, { keepalive: false });
604
+ const init = getRequestInit(fetchMock);
605
+ (0, vitest.expect)(new Headers(init.headers).get("Content-Type")).toBe("application/json");
606
+ (0, vitest.expect)(init.body).toBe(payload);
607
+ });
608
+ (0, vitest.it)("falls back to plain JSON when CompressionStream throws at runtime", async () => {
609
+ class ThrowingCompressionStream {
610
+ constructor() {
611
+ throw new Error("compression unsupported");
612
+ }
613
+ }
614
+ vitest.vi.stubGlobal("CompressionStream", ThrowingCompressionStream);
615
+ const fetchMock = captureFetch();
616
+ const iface = createClientInterface();
617
+ const payload = JSON.stringify({
618
+ batch_id: "abc",
619
+ events: []
620
+ });
621
+ await iface.sendSessionReplayBatch(payload, null, { keepalive: false });
622
+ const init = getRequestInit(fetchMock);
623
+ (0, vitest.expect)(new Headers(init.headers).get("Content-Type")).toBe("application/json");
624
+ (0, vitest.expect)(init.body).toBe(payload);
625
+ });
626
+ });
558
627
  //#endregion
628
+
559
629
  //# sourceMappingURL=client-interface.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-interface.test.js","names":["HexclaveClientInterface","InternalSession","vi","KnownErrors","Result","expect","RefreshToken"],"sources":["../../src/interface/client-interface.test.ts"],"sourcesContent":["import { afterEach, describe, expect, it, vi } from \"vitest\";\nimport { KnownErrors } from \"../known-errors\";\nimport { InternalSession, RefreshToken } from \"../sessions\";\nimport { Result } from \"../utils/results\";\nimport { HexclaveClientInterface } from \"./client-interface\";\n\nfunction createClientInterface(options?: {\n baseUrl?: string,\n apiUrls?: string[],\n probeRate?: number,\n}) {\n const apiUrls = options?.apiUrls ?? [options?.baseUrl ?? \"https://api.example.com\"];\n return new HexclaveClientInterface({\n clientVersion: \"test\",\n getBaseUrl: () => apiUrls[0],\n getApiUrls: () => apiUrls,\n probeRate: options?.probeRate,\n extraRequestHeaders: {},\n projectId: \"project-id\",\n publishableClientKey: \"publishable-client-key\",\n });\n}\n\nfunction createSession() {\n return new InternalSession({\n refreshAccessTokenCallback: async () => null,\n refreshToken: null,\n accessToken: null,\n });\n}\n\nfunction createJsonResponse(body: unknown): Response {\n return new Response(JSON.stringify(body), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n}\n\nfunction createKnownErrorResponse(error: InstanceType<typeof KnownErrors[keyof typeof KnownErrors]>): Response {\n return new Response(JSON.stringify({\n code: error.errorCode,\n message: error.message,\n details: error.details,\n }), {\n status: error.statusCode,\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-stack-known-error\": error.errorCode,\n },\n });\n}\n\nfunction createTextResponse(body: string, options: { status: number, headers?: Record<string, string> }): Response {\n return new Response(body, options);\n}\n\nfunction getRequestBody(fetchMock: { mock: { calls: unknown[][] } }): Record<string, unknown> {\n const requestInit = fetchMock.mock.calls[0]?.[1];\n if (requestInit == null || typeof requestInit !== \"object\" || !(\"body\" in requestInit)) {\n throw new Error(\"Expected request init to include a body\");\n }\n\n const requestBody = requestInit.body;\n if (requestBody == null || typeof requestBody !== \"string\") {\n throw new Error(\"Expected request body to be a JSON string\");\n }\n\n const parsed = JSON.parse(requestBody);\n if (parsed == null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Expected parsed request body to be an object\");\n }\n\n return parsed;\n}\n\nafterEach(() => {\n vi.unstubAllGlobals();\n vi.restoreAllMocks();\n});\n\ndescribe(\"HexclaveClientInterface bot challenge compatibility\", () => {\n it(\"omits bot challenge from magic link requests when no token is provided\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({ nonce: \"nonce\" }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\");\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n callback_url: \"https://app.example.com/callback\",\n });\n });\n\n it(\"serializes visible bot challenge retry fields for magic link requests\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({ nonce: \"nonce\" }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\", {\n token: \" visible-token \",\n phase: \"visible\",\n });\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n callback_url: \"https://app.example.com/callback\",\n bot_challenge_token: \"visible-token\",\n bot_challenge_phase: \"visible\",\n });\n });\n\n it(\"serializes bot challenge unavailability for magic link requests\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({ nonce: \"nonce\" }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\", {\n phase: \"visible\",\n });\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n callback_url: \"https://app.example.com/callback\",\n bot_challenge_unavailable: \"true\",\n });\n });\n\n it(\"serializes explicit bot challenge unavailability for magic link requests\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({ nonce: \"nonce\" }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\", {\n unavailable: true,\n });\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n callback_url: \"https://app.example.com/callback\",\n bot_challenge_unavailable: \"true\",\n });\n });\n\n it(\"returns BotChallengeFailed as a Result error for magic link requests\", async () => {\n const fetchMock = vi.fn(async () => createKnownErrorResponse(\n new KnownErrors.BotChallengeFailed(\"Visible bot challenge verification failed\"),\n ));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n const result = await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\", {\n phase: \"visible\",\n });\n\n expect(result.status).toBe(\"error\");\n if (result.status !== \"error\") {\n throw new Error(\"Expected magic link request to fail with BotChallengeFailed\");\n }\n expect(result.error).toBeInstanceOf(KnownErrors.BotChallengeFailed);\n });\n\n it(\"omits bot challenge from credential signup requests when no token is provided\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({\n access_token: \"access-token\",\n refresh_token: \"refresh-token\",\n }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.signUpWithCredential(\n \"user@example.com\",\n \"password\",\n undefined,\n createSession(),\n undefined,\n );\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n password: \"password\",\n });\n });\n\n it(\"returns BotChallengeFailed as a Result error for credential signup requests\", async () => {\n const fetchMock = vi.fn(async () => createKnownErrorResponse(\n new KnownErrors.BotChallengeFailed(\"Visible bot challenge verification failed\"),\n ));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n const result = await iface.signUpWithCredential(\n \"user@example.com\",\n \"password\",\n undefined,\n createSession(),\n {\n phase: \"visible\",\n },\n );\n\n expect(result.status).toBe(\"error\");\n if (result.status !== \"error\") {\n throw new Error(\"Expected credential signup to fail with BotChallengeFailed\");\n }\n expect(result.error).toBeInstanceOf(KnownErrors.BotChallengeFailed);\n });\n\n it(\"omits bot challenge from OAuth URLs when no token is provided\", async () => {\n const iface = createClientInterface();\n const oauthUrl = await iface.getOAuthUrl({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n session: createSession(),\n });\n\n expect(new URL(oauthUrl).searchParams.has(\"bot_challenge_token\")).toBe(false);\n });\n\n it(\"serializes visible bot challenge retry fields in OAuth URLs\", async () => {\n const iface = createClientInterface();\n const oauthUrl = await iface.getOAuthUrl({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n botChallenge: {\n token: \"visible-token\",\n phase: \"visible\",\n },\n session: createSession(),\n });\n\n expect(Object.fromEntries(new URL(oauthUrl).searchParams.entries())).toMatchObject({\n bot_challenge_token: \"visible-token\",\n bot_challenge_phase: \"visible\",\n });\n });\n\n it(\"serializes bot challenge unavailability in OAuth URLs\", async () => {\n const iface = createClientInterface();\n const oauthUrl = await iface.getOAuthUrl({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n botChallenge: {\n phase: \"visible\",\n },\n session: createSession(),\n });\n\n expect(Object.fromEntries(new URL(oauthUrl).searchParams.entries())).toMatchObject({\n bot_challenge_unavailable: \"true\",\n });\n });\n\n it(\"authorizes OAuth via a JSON response instead of relying on manual redirects\", async () => {\n const fetchCalls: [input: RequestInfo | URL, init?: RequestInit][] = [];\n const fetchMock = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => {\n fetchCalls.push([input, init]);\n return createJsonResponse({\n location: \"https://accounts.example.com/oauth/authorize\",\n });\n });\n vi.stubGlobal(\"fetch\", fetchMock);\n vi.stubGlobal(\"window\", {} as Window & typeof globalThis);\n\n const iface = createClientInterface();\n const result = await iface.authorizeOAuth({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n session: createSession(),\n });\n\n expect(Result.orThrow(result)).toBe(\"https://accounts.example.com/oauth/authorize\");\n expect(fetchMock).toHaveBeenCalledTimes(1);\n const [requestUrl, requestInit] = fetchCalls[0] ?? [];\n if (!(typeof requestUrl === \"string\" || requestUrl instanceof URL)) {\n throw new Error(\"Expected authorizeOAuth to call fetch with a URL\");\n }\n expect(new URL(requestUrl.toString()).searchParams.get(\"stack_response_mode\")).toBe(\"json\");\n expect(requestInit).toMatchObject({\n method: \"GET\",\n });\n expect(requestInit).not.toHaveProperty(\"credentials\");\n });\n\n it(\"returns BotChallengeFailed as a Result error for OAuth authorization\", async () => {\n const fetchMock = vi.fn(async () => createKnownErrorResponse(\n new KnownErrors.BotChallengeFailed(\"Visible bot challenge verification failed\"),\n ));\n vi.stubGlobal(\"fetch\", fetchMock);\n vi.stubGlobal(\"window\", {} as Window & typeof globalThis);\n\n const iface = createClientInterface();\n const result = await iface.authorizeOAuth({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n session: createSession(),\n });\n\n expect(result.status).toBe(\"error\");\n if (result.status !== \"error\") {\n throw new Error(\"Expected OAuth authorization to fail with BotChallengeFailed\");\n }\n expect(result.error).toBeInstanceOf(KnownErrors.BotChallengeFailed);\n });\n\n it(\"serializes bot challenge unavailability for credential signup requests\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({\n access_token: \"access-token\",\n refresh_token: \"refresh-token\",\n }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.signUpWithCredential(\n \"user@example.com\",\n \"password\",\n undefined,\n createSession(),\n {\n phase: \"visible\",\n },\n );\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n password: \"password\",\n bot_challenge_unavailable: \"true\",\n });\n });\n});\n\ndescribe(\"_withFallback\", () => {\n // ---------------------------------------------------------------------------\n // Helpers — reduce boilerplate across tests\n // ---------------------------------------------------------------------------\n\n /** Builds a list of N URL bases: [\"https://url-0.test\", \"https://url-1.test\", ...] */\n function urlList(n: number): string[] {\n return Array.from({ length: n }, (_, i) => `https://url-${i}.test`);\n }\n\n /** Returns the index of the URL base that `fullUrl` starts with, or -1. */\n function urlIndex(urls: string[], fullUrl: string): number {\n return urls.findIndex(base => fullUrl.startsWith(base));\n }\n\n /** Records every fetch URL and calls `handler` to decide the outcome. */\n function mockFetch(handler: (url: string) => \"ok\" | \"fail\") {\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n const url = input.toString();\n log.push(url);\n if (handler(url) === \"fail\") throw new TypeError(\"Failed to fetch\");\n return createJsonResponse({ display_name: \"test\" });\n }));\n return log;\n }\n\n function sendRequest(iface: HexclaveClientInterface) {\n const session = iface.createSession({ refreshToken: null, accessToken: null });\n return iface.sendClientRequest(\"/users/me\", { method: \"GET\" }, session);\n }\n\n // ---------------------------------------------------------------------------\n // Single URL — no fallback\n // ---------------------------------------------------------------------------\n\n it(\"single URL uses standard 5-retry behavior\", async () => {\n let attempts = 0;\n vi.stubGlobal(\"fetch\", vi.fn(async () => {\n attempts++;\n if (attempts < 3) throw new TypeError(\"Failed to fetch\");\n return createJsonResponse({ display_name: \"test\" });\n }));\n\n const iface = createClientInterface({ apiUrls: urlList(1) });\n await sendRequest(iface);\n expect(attempts).toBe(3);\n });\n\n // ---------------------------------------------------------------------------\n // Normal mode — iterating through URLs in order\n // ---------------------------------------------------------------------------\n\n it(\"uses primary when it is healthy\", async () => {\n const urls = urlList(3);\n const log = mockFetch(() => \"ok\");\n\n const iface = createClientInterface({ apiUrls: urls });\n await sendRequest(iface);\n\n expect(log.every(u => urlIndex(urls, u) === 0)).toBe(true);\n });\n\n it(\"tries URLs in order and succeeds on first working one\", async () => {\n const urls = urlList(4);\n // url-0 and url-1 are down, url-2 is up\n const log = mockFetch((u) => urlIndex(urls, u) < 2 ? \"fail\" : \"ok\");\n\n const iface = createClientInterface({ apiUrls: urls });\n await sendRequest(iface);\n\n expect(urlIndex(urls, log[0])).toBe(0);\n expect(urlIndex(urls, log[1])).toBe(1);\n expect(urlIndex(urls, log[2])).toBe(2);\n expect(log.length).toBe(3);\n });\n\n it(\"does not fall back on KnownError\", async () => {\n const urls = urlList(3);\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n log.push(input.toString());\n return createKnownErrorResponse(new KnownErrors.UserNotFound());\n }));\n\n const iface = createClientInterface({ apiUrls: urls });\n await expect(sendRequest(iface)).rejects.toThrow();\n expect(log.every(u => urlIndex(urls, u) === 0)).toBe(true);\n });\n\n it(\"does not retry or fall back on non-KnownError 4xx responses\", async () => {\n const urls = urlList(3);\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n log.push(input.toString());\n return createTextResponse(\"Payments are not set up\", { status: 402 });\n }));\n\n const iface = createClientInterface({ apiUrls: urls });\n await expect(sendRequest(iface)).rejects.toMatchObject({ name: \"Error\" });\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(0);\n });\n\n it(\"wraps non-KnownError 4xx responses as normal errors\", async () => {\n const response = createTextResponse(\"Payments are not set up\", { status: 402 });\n vi.stubGlobal(\"fetch\", vi.fn(async () => response));\n\n const iface = createClientInterface({ apiUrls: urlList(1) });\n await expect(sendRequest(iface)).rejects.toMatchObject({\n name: \"Error\",\n message: expect.stringContaining(\"402 Payments are not set up\"),\n cause: response,\n });\n });\n\n it(\"does not retry non-KnownError 5xx responses on a single URL\", async () => {\n let attempts = 0;\n vi.stubGlobal(\"fetch\", vi.fn(async () => {\n attempts++;\n return createTextResponse(\"Server unavailable\", { status: 503 });\n }));\n\n const iface = createClientInterface({ apiUrls: urlList(1) });\n await expect(sendRequest(iface)).rejects.toThrow(\"503 Server unavailable\");\n expect(attempts).toBe(1);\n });\n\n it(\"falls back on non-KnownError 5xx responses\", async () => {\n const urls = urlList(3);\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n const url = input.toString();\n log.push(url);\n if (urlIndex(urls, url) === 0) {\n return createTextResponse(\"Server unavailable\", { status: 503 });\n }\n return createJsonResponse({ display_name: \"test\" });\n }));\n\n const iface = createClientInterface({ apiUrls: urls });\n await sendRequest(iface);\n expect(log.length).toBe(2);\n expect(urlIndex(urls, log[0])).toBe(0);\n expect(urlIndex(urls, log[1])).toBe(1);\n });\n\n it(\"does not fall back on wrapped non-KnownError 4xx refresh token responses\", async () => {\n const urls = urlList(3);\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n const url = input instanceof Request ? input.url : input.toString();\n log.push(url);\n return createTextResponse(\"Payments are not set up\", { status: 402 });\n }));\n\n const iface = createClientInterface({ apiUrls: urls });\n await expect(iface.fetchNewAccessToken(new RefreshToken(\"refresh-token\"))).rejects.toThrow(\"Payments are not set up\");\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(0);\n });\n\n it(\"makes 2 passes × N URLs attempts before throwing\", async () => {\n for (const n of [2, 3, 5]) {\n const urls = urlList(n);\n const log = mockFetch(() => \"fail\");\n\n const iface = createClientInterface({ apiUrls: urls });\n await expect(sendRequest(iface)).rejects.toThrow();\n\n expect(log.length).toBe(2 * n);\n for (let i = 0; i < n; i++) {\n expect(log.filter(u => urlIndex(urls, u) === i).length).toBe(2);\n }\n }\n });\n\n it(\"bypasses fallback when apiUrlOverride is provided\", async () => {\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n log.push(input.toString());\n return createJsonResponse({ display_name: \"test\" });\n }));\n\n const iface = createClientInterface({ apiUrls: urlList(3) });\n const session = iface.createSession({ refreshToken: null, accessToken: null });\n await iface.sendClientRequest(\"/users/me\", { method: \"GET\" }, session, \"client\", \"https://override.test/api/v1\");\n\n expect(log.every(u => u.startsWith(\"https://override.test\"))).toBe(true);\n });\n\n // ---------------------------------------------------------------------------\n // Sticky mode — remembering the working fallback\n // ---------------------------------------------------------------------------\n\n it(\"enters sticky mode: subsequent requests skip straight to the working fallback\", async () => {\n const urls = urlList(4);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 0 });\n\n // url-0,1,2 down → sticky on url-3\n mockFetch((u) => urlIndex(urls, u) === 3 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Next request goes directly to url-3 (probeRate=0 means no probe)\n const log = mockFetch(() => \"ok\");\n await sendRequest(iface);\n\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(3);\n });\n\n it(\"probes primary and exits sticky mode when probe succeeds\", async () => {\n const urls = urlList(3);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 1 });\n\n // url-0 down → sticky on url-1\n mockFetch((u) => urlIndex(urls, u) === 0 ? \"fail\" : \"ok\");\n await sendRequest(iface);\n\n // url-0 recovers. probeRate=1 → always probes → probe succeeds → exits sticky\n const log = mockFetch(() => \"ok\");\n await sendRequest(iface);\n expect(urlIndex(urls, log[0])).toBe(0);\n\n // Next request should go to url-0 directly (no longer sticky)\n const log2 = mockFetch(() => \"ok\");\n await sendRequest(iface);\n expect(log2.length).toBe(1);\n expect(urlIndex(urls, log2[0])).toBe(0);\n });\n\n it(\"halves probe rate on each failed probe\", async () => {\n const urls = urlList(2);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 1 });\n\n // Enter sticky on url-1, url-0 stays permanently down\n mockFetch((u) => urlIndex(urls, u) === 0 ? \"fail\" : \"ok\");\n await sendRequest(iface);\n\n // probeRate=1 → probes url-0, fails → rate becomes 0.5\n mockFetch((u) => urlIndex(urls, u) === 0 ? \"fail\" : \"ok\");\n await sendRequest(iface);\n\n // probeRate=0.5 → probes (random < 0.5), fails → rate becomes 0.25\n const randomMock = vi.spyOn(Math, \"random\").mockReturnValue(0.4);\n mockFetch((u) => urlIndex(urls, u) === 0 ? \"fail\" : \"ok\");\n await sendRequest(iface);\n\n // rate=0.25, random=0.3 ≥ 0.25 → should NOT probe primary\n randomMock.mockReturnValue(0.3);\n const log = mockFetch(() => \"ok\");\n await sendRequest(iface);\n\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(1);\n\n randomMock.mockRestore();\n });\n\n // ---------------------------------------------------------------------------\n // Sticky URL goes down — falls through to full iteration\n // ---------------------------------------------------------------------------\n\n it(\"falls through to full iteration when sticky URL also goes down\", async () => {\n const urls = urlList(3);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 0 });\n\n // url-0,1 down → sticky on url-2\n mockFetch((u) => urlIndex(urls, u) === 2 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Now url-2 also down, url-1 recovers\n const log = mockFetch((u) => urlIndex(urls, u) === 1 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Should have tried sticky url-2 (failed), then iterated 0→1 (found url-1)\n expect(log.some(u => urlIndex(urls, u) === 2)).toBe(true);\n expect(log.some(u => urlIndex(urls, u) === 1)).toBe(true);\n });\n\n it(\"re-enters sticky on the new working URL after fallthrough\", async () => {\n const urls = urlList(4);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 0 });\n\n // sticky on url-3\n mockFetch((u) => urlIndex(urls, u) === 3 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // url-3 dies, url-2 recovers → should re-sticky on url-2\n mockFetch((u) => urlIndex(urls, u) === 2 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Next request goes directly to url-2\n const log = mockFetch(() => \"ok\");\n await sendRequest(iface);\n\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(2);\n });\n\n it(\"throws when sticky URL fails and all URLs fail in iteration\", async () => {\n const urls = urlList(3);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 0 });\n\n // sticky on url-1\n mockFetch((u) => urlIndex(urls, u) === 1 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Everything is now down\n const log = mockFetch(() => \"fail\");\n await expect(sendRequest(iface)).rejects.toThrow();\n\n // sticky attempt (1) + 2 passes × 3 URLs (6) = 7\n expect(log.length).toBe(7);\n });\n\n it(\"does not probe primary when sticky URL fails (probe only before sticky attempt)\", async () => {\n const urls = urlList(3);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 1 });\n\n // sticky on url-2, url-0 stays down\n mockFetch((u) => urlIndex(urls, u) === 2 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // url-0 still down, url-2 also dies, url-1 is the only one up\n // probeRate=1 → probes url-0 first (fails), then tries sticky url-2 (fails),\n // then full iteration finds url-1\n const log = mockFetch((u) => urlIndex(urls, u) === 1 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n const hitOrder = log.map(u => urlIndex(urls, u));\n // probe url-0, sticky url-2, then iteration: 0, 1 (succeeds)\n expect(hitOrder[0]).toBe(0); // probe\n expect(hitOrder[1]).toBe(2); // sticky attempt\n expect(hitOrder).toContain(1); // found during iteration\n });\n});\n\ndescribe(\"sendAnalyticsEventBatch encoding\", () => {\n function captureFetch() {\n const fetchMock = vi.fn(async () => createJsonResponse({ inserted: 0 }));\n vi.stubGlobal(\"fetch\", fetchMock);\n return fetchMock;\n }\n\n function getRequestInit(fetchMock: { mock: { calls: unknown[][] } }): RequestInit {\n const init = fetchMock.mock.calls[0]?.[1];\n if (init == null || typeof init !== \"object\") throw new Error(\"expected RequestInit\");\n return init as RequestInit;\n }\n\n async function gunzipToText(body: unknown): Promise<string> {\n if (!(body instanceof Uint8Array)) throw new Error(\"expected Uint8Array body\");\n const stream = new Blob([body as BlobPart]).stream().pipeThrough(new DecompressionStream(\"gzip\"));\n return await new Response(stream).text();\n }\n\n it(\"gzips body and sends application/octet-stream when keepalive is false\", async () => {\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [{ event_type: \"$click\" }] });\n\n await iface.sendAnalyticsEventBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n const contentType = new Headers(init.headers).get(\"Content-Type\");\n expect(contentType).toBe(\"application/octet-stream\");\n expect(init.body).toBeInstanceOf(Uint8Array);\n await expect(gunzipToText(init.body)).resolves.toBe(payload);\n });\n\n it(\"falls back to plain JSON when keepalive is true (avoids racing pagehide tear-down)\", async () => {\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendAnalyticsEventBatch(payload, null, { keepalive: true });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n\n it(\"falls back to plain JSON when CompressionStream is unavailable\", async () => {\n vi.stubGlobal(\"CompressionStream\", undefined);\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendAnalyticsEventBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n\n it(\"falls back to plain JSON when CompressionStream throws at runtime\", async () => {\n class ThrowingCompressionStream {\n constructor() { throw new Error(\"compression unsupported\"); }\n }\n vi.stubGlobal(\"CompressionStream\", ThrowingCompressionStream);\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendAnalyticsEventBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"client-interface.test.js","names":["HexclaveClientInterface","InternalSession","vi","KnownErrors","Result","expect","RefreshToken"],"sources":["../../src/interface/client-interface.test.ts"],"sourcesContent":["import { afterEach, describe, expect, it, vi } from \"vitest\";\nimport { KnownErrors } from \"../known-errors\";\nimport { InternalSession, RefreshToken } from \"../sessions\";\nimport { Result } from \"../utils/results\";\nimport { HexclaveClientInterface } from \"./client-interface\";\n\nfunction createClientInterface(options?: {\n baseUrl?: string,\n apiUrls?: string[],\n probeRate?: number,\n}) {\n const apiUrls = options?.apiUrls ?? [options?.baseUrl ?? \"https://api.example.com\"];\n return new HexclaveClientInterface({\n clientVersion: \"test\",\n getBaseUrl: () => apiUrls[0],\n getApiUrls: () => apiUrls,\n probeRate: options?.probeRate,\n extraRequestHeaders: {},\n projectId: \"project-id\",\n publishableClientKey: \"publishable-client-key\",\n });\n}\n\nfunction createSession() {\n return new InternalSession({\n refreshAccessTokenCallback: async () => null,\n refreshToken: null,\n accessToken: null,\n });\n}\n\nfunction createJsonResponse(body: unknown): Response {\n return new Response(JSON.stringify(body), {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n}\n\nfunction createKnownErrorResponse(error: InstanceType<typeof KnownErrors[keyof typeof KnownErrors]>): Response {\n return new Response(JSON.stringify({\n code: error.errorCode,\n message: error.message,\n details: error.details,\n }), {\n status: error.statusCode,\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-stack-known-error\": error.errorCode,\n },\n });\n}\n\nfunction createTextResponse(body: string, options: { status: number, headers?: Record<string, string> }): Response {\n return new Response(body, options);\n}\n\nfunction getRequestBody(fetchMock: { mock: { calls: unknown[][] } }): Record<string, unknown> {\n const requestInit = fetchMock.mock.calls[0]?.[1];\n if (requestInit == null || typeof requestInit !== \"object\" || !(\"body\" in requestInit)) {\n throw new Error(\"Expected request init to include a body\");\n }\n\n const requestBody = requestInit.body;\n if (requestBody == null || typeof requestBody !== \"string\") {\n throw new Error(\"Expected request body to be a JSON string\");\n }\n\n const parsed = JSON.parse(requestBody);\n if (parsed == null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Expected parsed request body to be an object\");\n }\n\n return parsed;\n}\n\nafterEach(() => {\n vi.unstubAllGlobals();\n vi.restoreAllMocks();\n});\n\ndescribe(\"HexclaveClientInterface bot challenge compatibility\", () => {\n it(\"omits bot challenge from magic link requests when no token is provided\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({ nonce: \"nonce\" }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\");\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n callback_url: \"https://app.example.com/callback\",\n });\n });\n\n it(\"serializes visible bot challenge retry fields for magic link requests\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({ nonce: \"nonce\" }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\", {\n token: \" visible-token \",\n phase: \"visible\",\n });\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n callback_url: \"https://app.example.com/callback\",\n bot_challenge_token: \"visible-token\",\n bot_challenge_phase: \"visible\",\n });\n });\n\n it(\"serializes bot challenge unavailability for magic link requests\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({ nonce: \"nonce\" }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\", {\n phase: \"visible\",\n });\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n callback_url: \"https://app.example.com/callback\",\n bot_challenge_unavailable: \"true\",\n });\n });\n\n it(\"serializes explicit bot challenge unavailability for magic link requests\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({ nonce: \"nonce\" }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\", {\n unavailable: true,\n });\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n callback_url: \"https://app.example.com/callback\",\n bot_challenge_unavailable: \"true\",\n });\n });\n\n it(\"returns BotChallengeFailed as a Result error for magic link requests\", async () => {\n const fetchMock = vi.fn(async () => createKnownErrorResponse(\n new KnownErrors.BotChallengeFailed(\"Visible bot challenge verification failed\"),\n ));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n const result = await iface.sendMagicLinkEmail(\"user@example.com\", \"https://app.example.com/callback\", {\n phase: \"visible\",\n });\n\n expect(result.status).toBe(\"error\");\n if (result.status !== \"error\") {\n throw new Error(\"Expected magic link request to fail with BotChallengeFailed\");\n }\n expect(result.error).toBeInstanceOf(KnownErrors.BotChallengeFailed);\n });\n\n it(\"omits bot challenge from credential signup requests when no token is provided\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({\n access_token: \"access-token\",\n refresh_token: \"refresh-token\",\n }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.signUpWithCredential(\n \"user@example.com\",\n \"password\",\n undefined,\n createSession(),\n undefined,\n );\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n password: \"password\",\n });\n });\n\n it(\"returns BotChallengeFailed as a Result error for credential signup requests\", async () => {\n const fetchMock = vi.fn(async () => createKnownErrorResponse(\n new KnownErrors.BotChallengeFailed(\"Visible bot challenge verification failed\"),\n ));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n const result = await iface.signUpWithCredential(\n \"user@example.com\",\n \"password\",\n undefined,\n createSession(),\n {\n phase: \"visible\",\n },\n );\n\n expect(result.status).toBe(\"error\");\n if (result.status !== \"error\") {\n throw new Error(\"Expected credential signup to fail with BotChallengeFailed\");\n }\n expect(result.error).toBeInstanceOf(KnownErrors.BotChallengeFailed);\n });\n\n it(\"omits bot challenge from OAuth URLs when no token is provided\", async () => {\n const iface = createClientInterface();\n const oauthUrl = await iface.getOAuthUrl({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n session: createSession(),\n });\n\n expect(new URL(oauthUrl).searchParams.has(\"bot_challenge_token\")).toBe(false);\n });\n\n it(\"serializes visible bot challenge retry fields in OAuth URLs\", async () => {\n const iface = createClientInterface();\n const oauthUrl = await iface.getOAuthUrl({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n botChallenge: {\n token: \"visible-token\",\n phase: \"visible\",\n },\n session: createSession(),\n });\n\n expect(Object.fromEntries(new URL(oauthUrl).searchParams.entries())).toMatchObject({\n bot_challenge_token: \"visible-token\",\n bot_challenge_phase: \"visible\",\n });\n });\n\n it(\"serializes bot challenge unavailability in OAuth URLs\", async () => {\n const iface = createClientInterface();\n const oauthUrl = await iface.getOAuthUrl({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n botChallenge: {\n phase: \"visible\",\n },\n session: createSession(),\n });\n\n expect(Object.fromEntries(new URL(oauthUrl).searchParams.entries())).toMatchObject({\n bot_challenge_unavailable: \"true\",\n });\n });\n\n it(\"authorizes OAuth via a JSON response instead of relying on manual redirects\", async () => {\n const fetchCalls: [input: RequestInfo | URL, init?: RequestInit][] = [];\n const fetchMock = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => {\n fetchCalls.push([input, init]);\n return createJsonResponse({\n location: \"https://accounts.example.com/oauth/authorize\",\n });\n });\n vi.stubGlobal(\"fetch\", fetchMock);\n vi.stubGlobal(\"window\", {} as Window & typeof globalThis);\n\n const iface = createClientInterface();\n const result = await iface.authorizeOAuth({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n session: createSession(),\n });\n\n expect(Result.orThrow(result)).toBe(\"https://accounts.example.com/oauth/authorize\");\n expect(fetchMock).toHaveBeenCalledTimes(1);\n const [requestUrl, requestInit] = fetchCalls[0] ?? [];\n if (!(typeof requestUrl === \"string\" || requestUrl instanceof URL)) {\n throw new Error(\"Expected authorizeOAuth to call fetch with a URL\");\n }\n expect(new URL(requestUrl.toString()).searchParams.get(\"stack_response_mode\")).toBe(\"json\");\n expect(requestInit).toMatchObject({\n method: \"GET\",\n });\n expect(requestInit).not.toHaveProperty(\"credentials\");\n });\n\n it(\"returns BotChallengeFailed as a Result error for OAuth authorization\", async () => {\n const fetchMock = vi.fn(async () => createKnownErrorResponse(\n new KnownErrors.BotChallengeFailed(\"Visible bot challenge verification failed\"),\n ));\n vi.stubGlobal(\"fetch\", fetchMock);\n vi.stubGlobal(\"window\", {} as Window & typeof globalThis);\n\n const iface = createClientInterface();\n const result = await iface.authorizeOAuth({\n provider: \"github\",\n redirectUrl: \"https://app.example.com/oauth/callback\",\n errorRedirectUrl: \"https://app.example.com/error\",\n codeChallenge: \"code-challenge\",\n state: \"state\",\n type: \"authenticate\",\n session: createSession(),\n });\n\n expect(result.status).toBe(\"error\");\n if (result.status !== \"error\") {\n throw new Error(\"Expected OAuth authorization to fail with BotChallengeFailed\");\n }\n expect(result.error).toBeInstanceOf(KnownErrors.BotChallengeFailed);\n });\n\n it(\"serializes bot challenge unavailability for credential signup requests\", async () => {\n const fetchMock = vi.fn(async () => createJsonResponse({\n access_token: \"access-token\",\n refresh_token: \"refresh-token\",\n }));\n vi.stubGlobal(\"fetch\", fetchMock);\n\n const iface = createClientInterface();\n await iface.signUpWithCredential(\n \"user@example.com\",\n \"password\",\n undefined,\n createSession(),\n {\n phase: \"visible\",\n },\n );\n\n expect(getRequestBody(fetchMock)).toStrictEqual({\n email: \"user@example.com\",\n password: \"password\",\n bot_challenge_unavailable: \"true\",\n });\n });\n});\n\ndescribe(\"_withFallback\", () => {\n // ---------------------------------------------------------------------------\n // Helpers — reduce boilerplate across tests\n // ---------------------------------------------------------------------------\n\n /** Builds a list of N URL bases: [\"https://url-0.test\", \"https://url-1.test\", ...] */\n function urlList(n: number): string[] {\n return Array.from({ length: n }, (_, i) => `https://url-${i}.test`);\n }\n\n /** Returns the index of the URL base that `fullUrl` starts with, or -1. */\n function urlIndex(urls: string[], fullUrl: string): number {\n return urls.findIndex(base => fullUrl.startsWith(base));\n }\n\n /** Records every fetch URL and calls `handler` to decide the outcome. */\n function mockFetch(handler: (url: string) => \"ok\" | \"fail\") {\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n const url = input.toString();\n log.push(url);\n if (handler(url) === \"fail\") throw new TypeError(\"Failed to fetch\");\n return createJsonResponse({ display_name: \"test\" });\n }));\n return log;\n }\n\n function sendRequest(iface: HexclaveClientInterface) {\n const session = iface.createSession({ refreshToken: null, accessToken: null });\n return iface.sendClientRequest(\"/users/me\", { method: \"GET\" }, session);\n }\n\n // ---------------------------------------------------------------------------\n // Single URL — no fallback\n // ---------------------------------------------------------------------------\n\n it(\"single URL uses standard 5-retry behavior\", async () => {\n let attempts = 0;\n vi.stubGlobal(\"fetch\", vi.fn(async () => {\n attempts++;\n if (attempts < 3) throw new TypeError(\"Failed to fetch\");\n return createJsonResponse({ display_name: \"test\" });\n }));\n\n const iface = createClientInterface({ apiUrls: urlList(1) });\n await sendRequest(iface);\n expect(attempts).toBe(3);\n });\n\n // ---------------------------------------------------------------------------\n // Normal mode — iterating through URLs in order\n // ---------------------------------------------------------------------------\n\n it(\"uses primary when it is healthy\", async () => {\n const urls = urlList(3);\n const log = mockFetch(() => \"ok\");\n\n const iface = createClientInterface({ apiUrls: urls });\n await sendRequest(iface);\n\n expect(log.every(u => urlIndex(urls, u) === 0)).toBe(true);\n });\n\n it(\"tries URLs in order and succeeds on first working one\", async () => {\n const urls = urlList(4);\n // url-0 and url-1 are down, url-2 is up\n const log = mockFetch((u) => urlIndex(urls, u) < 2 ? \"fail\" : \"ok\");\n\n const iface = createClientInterface({ apiUrls: urls });\n await sendRequest(iface);\n\n expect(urlIndex(urls, log[0])).toBe(0);\n expect(urlIndex(urls, log[1])).toBe(1);\n expect(urlIndex(urls, log[2])).toBe(2);\n expect(log.length).toBe(3);\n });\n\n it(\"does not fall back on KnownError\", async () => {\n const urls = urlList(3);\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n log.push(input.toString());\n return createKnownErrorResponse(new KnownErrors.UserNotFound());\n }));\n\n const iface = createClientInterface({ apiUrls: urls });\n await expect(sendRequest(iface)).rejects.toThrow();\n expect(log.every(u => urlIndex(urls, u) === 0)).toBe(true);\n });\n\n it(\"does not retry or fall back on non-KnownError 4xx responses\", async () => {\n const urls = urlList(3);\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n log.push(input.toString());\n return createTextResponse(\"Payments are not set up\", { status: 402 });\n }));\n\n const iface = createClientInterface({ apiUrls: urls });\n await expect(sendRequest(iface)).rejects.toMatchObject({ name: \"Error\" });\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(0);\n });\n\n it(\"wraps non-KnownError 4xx responses as normal errors\", async () => {\n const response = createTextResponse(\"Payments are not set up\", { status: 402 });\n vi.stubGlobal(\"fetch\", vi.fn(async () => response));\n\n const iface = createClientInterface({ apiUrls: urlList(1) });\n await expect(sendRequest(iface)).rejects.toMatchObject({\n name: \"Error\",\n message: expect.stringContaining(\"402 Payments are not set up\"),\n cause: response,\n });\n });\n\n it(\"does not retry non-KnownError 5xx responses on a single URL\", async () => {\n let attempts = 0;\n vi.stubGlobal(\"fetch\", vi.fn(async () => {\n attempts++;\n return createTextResponse(\"Server unavailable\", { status: 503 });\n }));\n\n const iface = createClientInterface({ apiUrls: urlList(1) });\n await expect(sendRequest(iface)).rejects.toThrow(\"503 Server unavailable\");\n expect(attempts).toBe(1);\n });\n\n it(\"falls back on non-KnownError 5xx responses\", async () => {\n const urls = urlList(3);\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n const url = input.toString();\n log.push(url);\n if (urlIndex(urls, url) === 0) {\n return createTextResponse(\"Server unavailable\", { status: 503 });\n }\n return createJsonResponse({ display_name: \"test\" });\n }));\n\n const iface = createClientInterface({ apiUrls: urls });\n await sendRequest(iface);\n expect(log.length).toBe(2);\n expect(urlIndex(urls, log[0])).toBe(0);\n expect(urlIndex(urls, log[1])).toBe(1);\n });\n\n it(\"does not fall back on wrapped non-KnownError 4xx refresh token responses\", async () => {\n const urls = urlList(3);\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n const url = input instanceof Request ? input.url : input.toString();\n log.push(url);\n return createTextResponse(\"Payments are not set up\", { status: 402 });\n }));\n\n const iface = createClientInterface({ apiUrls: urls });\n await expect(iface.fetchNewAccessToken(new RefreshToken(\"refresh-token\"))).rejects.toThrow(\"Payments are not set up\");\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(0);\n });\n\n it(\"makes 2 passes × N URLs attempts before throwing\", async () => {\n for (const n of [2, 3, 5]) {\n const urls = urlList(n);\n const log = mockFetch(() => \"fail\");\n\n const iface = createClientInterface({ apiUrls: urls });\n await expect(sendRequest(iface)).rejects.toThrow();\n\n expect(log.length).toBe(2 * n);\n for (let i = 0; i < n; i++) {\n expect(log.filter(u => urlIndex(urls, u) === i).length).toBe(2);\n }\n }\n });\n\n it(\"bypasses fallback when apiUrlOverride is provided\", async () => {\n const log: string[] = [];\n vi.stubGlobal(\"fetch\", vi.fn(async (input: RequestInfo | URL) => {\n log.push(input.toString());\n return createJsonResponse({ display_name: \"test\" });\n }));\n\n const iface = createClientInterface({ apiUrls: urlList(3) });\n const session = iface.createSession({ refreshToken: null, accessToken: null });\n await iface.sendClientRequest(\"/users/me\", { method: \"GET\" }, session, \"client\", \"https://override.test/api/v1\");\n\n expect(log.every(u => u.startsWith(\"https://override.test\"))).toBe(true);\n });\n\n // ---------------------------------------------------------------------------\n // Sticky mode — remembering the working fallback\n // ---------------------------------------------------------------------------\n\n it(\"enters sticky mode: subsequent requests skip straight to the working fallback\", async () => {\n const urls = urlList(4);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 0 });\n\n // url-0,1,2 down → sticky on url-3\n mockFetch((u) => urlIndex(urls, u) === 3 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Next request goes directly to url-3 (probeRate=0 means no probe)\n const log = mockFetch(() => \"ok\");\n await sendRequest(iface);\n\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(3);\n });\n\n it(\"probes primary and exits sticky mode when probe succeeds\", async () => {\n const urls = urlList(3);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 1 });\n\n // url-0 down → sticky on url-1\n mockFetch((u) => urlIndex(urls, u) === 0 ? \"fail\" : \"ok\");\n await sendRequest(iface);\n\n // url-0 recovers. probeRate=1 → always probes → probe succeeds → exits sticky\n const log = mockFetch(() => \"ok\");\n await sendRequest(iface);\n expect(urlIndex(urls, log[0])).toBe(0);\n\n // Next request should go to url-0 directly (no longer sticky)\n const log2 = mockFetch(() => \"ok\");\n await sendRequest(iface);\n expect(log2.length).toBe(1);\n expect(urlIndex(urls, log2[0])).toBe(0);\n });\n\n it(\"halves probe rate on each failed probe\", async () => {\n const urls = urlList(2);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 1 });\n\n // Enter sticky on url-1, url-0 stays permanently down\n mockFetch((u) => urlIndex(urls, u) === 0 ? \"fail\" : \"ok\");\n await sendRequest(iface);\n\n // probeRate=1 → probes url-0, fails → rate becomes 0.5\n mockFetch((u) => urlIndex(urls, u) === 0 ? \"fail\" : \"ok\");\n await sendRequest(iface);\n\n // probeRate=0.5 → probes (random < 0.5), fails → rate becomes 0.25\n const randomMock = vi.spyOn(Math, \"random\").mockReturnValue(0.4);\n mockFetch((u) => urlIndex(urls, u) === 0 ? \"fail\" : \"ok\");\n await sendRequest(iface);\n\n // rate=0.25, random=0.3 ≥ 0.25 → should NOT probe primary\n randomMock.mockReturnValue(0.3);\n const log = mockFetch(() => \"ok\");\n await sendRequest(iface);\n\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(1);\n\n randomMock.mockRestore();\n });\n\n // ---------------------------------------------------------------------------\n // Sticky URL goes down — falls through to full iteration\n // ---------------------------------------------------------------------------\n\n it(\"falls through to full iteration when sticky URL also goes down\", async () => {\n const urls = urlList(3);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 0 });\n\n // url-0,1 down → sticky on url-2\n mockFetch((u) => urlIndex(urls, u) === 2 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Now url-2 also down, url-1 recovers\n const log = mockFetch((u) => urlIndex(urls, u) === 1 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Should have tried sticky url-2 (failed), then iterated 0→1 (found url-1)\n expect(log.some(u => urlIndex(urls, u) === 2)).toBe(true);\n expect(log.some(u => urlIndex(urls, u) === 1)).toBe(true);\n });\n\n it(\"re-enters sticky on the new working URL after fallthrough\", async () => {\n const urls = urlList(4);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 0 });\n\n // sticky on url-3\n mockFetch((u) => urlIndex(urls, u) === 3 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // url-3 dies, url-2 recovers → should re-sticky on url-2\n mockFetch((u) => urlIndex(urls, u) === 2 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Next request goes directly to url-2\n const log = mockFetch(() => \"ok\");\n await sendRequest(iface);\n\n expect(log.length).toBe(1);\n expect(urlIndex(urls, log[0])).toBe(2);\n });\n\n it(\"throws when sticky URL fails and all URLs fail in iteration\", async () => {\n const urls = urlList(3);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 0 });\n\n // sticky on url-1\n mockFetch((u) => urlIndex(urls, u) === 1 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // Everything is now down\n const log = mockFetch(() => \"fail\");\n await expect(sendRequest(iface)).rejects.toThrow();\n\n // sticky attempt (1) + 2 passes × 3 URLs (6) = 7\n expect(log.length).toBe(7);\n });\n\n it(\"does not probe primary when sticky URL fails (probe only before sticky attempt)\", async () => {\n const urls = urlList(3);\n const iface = createClientInterface({ apiUrls: urls, probeRate: 1 });\n\n // sticky on url-2, url-0 stays down\n mockFetch((u) => urlIndex(urls, u) === 2 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n // url-0 still down, url-2 also dies, url-1 is the only one up\n // probeRate=1 → probes url-0 first (fails), then tries sticky url-2 (fails),\n // then full iteration finds url-1\n const log = mockFetch((u) => urlIndex(urls, u) === 1 ? \"ok\" : \"fail\");\n await sendRequest(iface);\n\n const hitOrder = log.map(u => urlIndex(urls, u));\n // probe url-0, sticky url-2, then iteration: 0, 1 (succeeds)\n expect(hitOrder[0]).toBe(0); // probe\n expect(hitOrder[1]).toBe(2); // sticky attempt\n expect(hitOrder).toContain(1); // found during iteration\n });\n});\n\nfunction getRequestInit(fetchMock: { mock: { calls: unknown[][] } }): RequestInit {\n const init = fetchMock.mock.calls[0]?.[1];\n if (init == null || typeof init !== \"object\") throw new Error(\"expected RequestInit\");\n return init as RequestInit;\n}\n\nasync function gunzipToText(body: unknown): Promise<string> {\n if (!(body instanceof Uint8Array)) throw new Error(\"expected Uint8Array body\");\n const stream = new Blob([body as BlobPart]).stream().pipeThrough(new DecompressionStream(\"gzip\"));\n return await new Response(stream).text();\n}\n\ndescribe(\"sendAnalyticsEventBatch encoding\", () => {\n function captureFetch() {\n const fetchMock = vi.fn(async () => createJsonResponse({ inserted: 0 }));\n vi.stubGlobal(\"fetch\", fetchMock);\n return fetchMock;\n }\n\n it(\"gzips body and sends application/octet-stream when keepalive is false\", async () => {\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [{ event_type: \"$click\" }] });\n\n await iface.sendAnalyticsEventBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n const contentType = new Headers(init.headers).get(\"Content-Type\");\n expect(contentType).toBe(\"application/octet-stream\");\n expect(init.body).toBeInstanceOf(Uint8Array);\n await expect(gunzipToText(init.body)).resolves.toBe(payload);\n });\n\n it(\"falls back to plain JSON when keepalive is true (avoids racing pagehide tear-down)\", async () => {\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendAnalyticsEventBatch(payload, null, { keepalive: true });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n\n it(\"falls back to plain JSON when CompressionStream is unavailable\", async () => {\n vi.stubGlobal(\"CompressionStream\", undefined);\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendAnalyticsEventBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n\n it(\"falls back to plain JSON when CompressionStream throws at runtime\", async () => {\n class ThrowingCompressionStream {\n constructor() { throw new Error(\"compression unsupported\"); }\n }\n vi.stubGlobal(\"CompressionStream\", ThrowingCompressionStream);\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendAnalyticsEventBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n});\n\ndescribe(\"sendSessionReplayBatch encoding\", () => {\n function captureFetch() {\n const fetchMock = vi.fn(async () => createJsonResponse({ session_replay_id: \"r\", batch_id: \"b\", s3_key: \"k\", deduped: false }));\n vi.stubGlobal(\"fetch\", fetchMock);\n return fetchMock;\n }\n\n it(\"gzips body and sends application/octet-stream when keepalive is false\", async () => {\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n // A large, highly-compressible payload — the case the wire-limit drop used to lose.\n const payload = JSON.stringify({ batch_id: \"abc\", events: [{ type: 2, data: \"x\".repeat(1_000_000) }] });\n\n await iface.sendSessionReplayBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/octet-stream\");\n expect(init.body).toBeInstanceOf(Uint8Array);\n // The compressed body is far smaller than the 1MB+ raw payload.\n expect((init.body as Uint8Array).byteLength).toBeLessThan(100_000);\n await expect(gunzipToText(init.body)).resolves.toBe(payload);\n });\n\n it(\"falls back to plain JSON when keepalive is true (avoids racing pagehide tear-down)\", async () => {\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendSessionReplayBatch(payload, null, { keepalive: true });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n\n it(\"falls back to plain JSON when CompressionStream is unavailable\", async () => {\n vi.stubGlobal(\"CompressionStream\", undefined);\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendSessionReplayBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n\n it(\"falls back to plain JSON when CompressionStream throws at runtime\", async () => {\n class ThrowingCompressionStream {\n constructor() { throw new Error(\"compression unsupported\"); }\n }\n vi.stubGlobal(\"CompressionStream\", ThrowingCompressionStream);\n const fetchMock = captureFetch();\n const iface = createClientInterface();\n const payload = JSON.stringify({ batch_id: \"abc\", events: [] });\n\n await iface.sendSessionReplayBatch(payload, null, { keepalive: false });\n\n const init = getRequestInit(fetchMock);\n expect(new Headers(init.headers).get(\"Content-Type\")).toBe(\"application/json\");\n expect(init.body).toBe(payload);\n });\n});\n"],"mappings":"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"}
@@ -49,7 +49,7 @@ declare const conversationSummarySchema: yup$1.ObjectSchema<{
49
49
  userPrimaryEmail: string | null;
50
50
  userProfileImageUrl: string | null;
51
51
  subject: string;
52
- status: "open" | "pending" | "closed";
52
+ status: "pending" | "open" | "closed";
53
53
  priority: "low" | "normal" | "high" | "urgent";
54
54
  source: "email" | "manual" | "chat" | "api";
55
55
  lastMessageType: "message" | "internal-note" | "status-change";
@@ -129,7 +129,7 @@ declare const conversationMessageSchema: yup$1.ObjectSchema<{
129
129
  userId: string | null;
130
130
  teamId: string | null;
131
131
  subject: string;
132
- status: "open" | "pending" | "closed";
132
+ status: "pending" | "open" | "closed";
133
133
  priority: "low" | "normal" | "high" | "urgent";
134
134
  source: "email" | "manual" | "chat" | "api";
135
135
  messageType: "message" | "internal-note" | "status-change";
@@ -139,8 +139,8 @@ declare const conversationMessageSchema: yup$1.ObjectSchema<{
139
139
  createdAt: string;
140
140
  sender: {
141
141
  type: "user" | "agent" | "system";
142
- id: string | null;
143
142
  displayName: string | null;
143
+ id: string | null;
144
144
  primaryEmail: string | null;
145
145
  };
146
146
  }, yup$1.AnyObject, {
@@ -173,19 +173,8 @@ declare const conversationListResponseSchema: yup$1.ObjectSchema<{
173
173
  lastOutboundAt?: string | null | undefined;
174
174
  closedAt?: string | null | undefined;
175
175
  recordMetadata?: {} | null | undefined;
176
- status: "open" | "pending" | "closed";
177
- priority: "low" | "normal" | "high" | "urgent";
178
- conversationId: string;
179
- userId: string | null;
180
- teamId: string | null;
181
- userDisplayName: string | null;
182
- userPrimaryEmail: string | null;
183
- userProfileImageUrl: string | null;
184
- subject: string;
176
+ status: "pending" | "open" | "closed";
185
177
  source: "email" | "manual" | "chat" | "api";
186
- lastMessageType: "message" | "internal-note" | "status-change";
187
- preview: string | null;
188
- lastActivityAt: string;
189
178
  metadata: {
190
179
  tags: string[];
191
180
  assignedToUserId: string | null;
@@ -196,6 +185,17 @@ declare const conversationListResponseSchema: yup$1.ObjectSchema<{
196
185
  lastCustomerReplyAt: string | null;
197
186
  lastAgentReplyAt: string | null;
198
187
  };
188
+ subject: string;
189
+ priority: "low" | "normal" | "high" | "urgent";
190
+ conversationId: string;
191
+ userId: string | null;
192
+ teamId: string | null;
193
+ userDisplayName: string | null;
194
+ userPrimaryEmail: string | null;
195
+ userProfileImageUrl: string | null;
196
+ lastMessageType: "message" | "internal-note" | "status-change";
197
+ preview: string | null;
198
+ lastActivityAt: string;
199
199
  }[];
200
200
  hasMore: boolean;
201
201
  }, yup$1.AnyObject, {
@@ -211,19 +211,8 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
211
211
  lastOutboundAt?: string | null | undefined;
212
212
  closedAt?: string | null | undefined;
213
213
  recordMetadata?: {} | null | undefined;
214
- status: "open" | "pending" | "closed";
215
- priority: "low" | "normal" | "high" | "urgent";
216
- conversationId: string;
217
- userId: string | null;
218
- teamId: string | null;
219
- userDisplayName: string | null;
220
- userPrimaryEmail: string | null;
221
- userProfileImageUrl: string | null;
222
- subject: string;
214
+ status: "pending" | "open" | "closed";
223
215
  source: "email" | "manual" | "chat" | "api";
224
- lastMessageType: "message" | "internal-note" | "status-change";
225
- preview: string | null;
226
- lastActivityAt: string;
227
216
  metadata: {
228
217
  tags: string[];
229
218
  assignedToUserId: string | null;
@@ -234,25 +223,36 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
234
223
  lastCustomerReplyAt: string | null;
235
224
  lastAgentReplyAt: string | null;
236
225
  };
226
+ subject: string;
227
+ priority: "low" | "normal" | "high" | "urgent";
228
+ conversationId: string;
229
+ userId: string | null;
230
+ teamId: string | null;
231
+ userDisplayName: string | null;
232
+ userPrimaryEmail: string | null;
233
+ userProfileImageUrl: string | null;
234
+ lastMessageType: "message" | "internal-note" | "status-change";
235
+ preview: string | null;
236
+ lastActivityAt: string;
237
237
  };
238
238
  messages: {
239
- status: "open" | "pending" | "closed";
239
+ status: "pending" | "open" | "closed";
240
240
  id: string;
241
+ body: string | null;
242
+ source: "email" | "manual" | "chat" | "api";
243
+ metadata: {} | null;
244
+ subject: string;
241
245
  priority: "low" | "normal" | "high" | "urgent";
242
246
  conversationId: string;
243
247
  userId: string | null;
244
248
  teamId: string | null;
245
- subject: string;
246
- source: "email" | "manual" | "chat" | "api";
247
- metadata: {} | null;
248
249
  createdAt: string;
249
250
  messageType: "message" | "internal-note" | "status-change";
250
- body: string | null;
251
251
  attachments: {}[];
252
252
  sender: {
253
253
  type: "user" | "agent" | "system";
254
- id: string | null;
255
254
  displayName: string | null;
255
+ id: string | null;
256
256
  primaryEmail: string | null;
257
257
  };
258
258
  }[];
@@ -1 +1 @@
1
- {"version":3,"file":"conversations.d.ts","names":[],"sources":["../../src/interface/conversations.ts"],"mappings":";;;cAGa,wBAAA;AAAA,KACD,kBAAA,WAA6B,wBAAA;AAAA,cAE5B,0BAAA;AAAA,KACD,oBAAA,WAA+B,0BAAA;AAAA,cAE9B,wBAAA;AAAA,KACD,kBAAA,WAA6B,wBAAA;AAAA,cAE5B,4BAAA;AAAA,KACD,sBAAA,WAAiC,4BAAA;AAAA,cAEhC,6BAAA;AAAA,KACD,uBAAA,WAAkC,6BAAA;AAAA,cAEjC,0BAAA,EAA0B,KAAA,CAAA,YAAA;;;;;;;;;GASrC,KAAA,CAAA,SAAA;;;;;;;;;;cAEW,wBAAA,EAAwB,KAAA,CAAA,YAAA;;;;;GAKnC,KAAA,CAAA,SAAA;;;;;;cAEW,yBAAA,EAAyB,KAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsBpC,KAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,4BAAA,EAA4B,KAAA,CAAA,YAAA;;;;;;;;;GASvC,KAAA,CAAA,SAAA;;;;;;;;;;cAKW,yBAAA,EAAyB,KAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;GAepC,KAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;cAEW,8BAAA,EAA8B,KAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAGzC,KAAA,CAAA,SAAA;;;;cAEW,gCAAA,EAAgC,KAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAI3C,KAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAEU,oBAAA,GAAuB,KAAA,CAAI,SAAA,QAAiB,0BAAA;AAAA,KAC5C,kBAAA,GAAqB,KAAA,CAAI,SAAA,QAAiB,wBAAA;AAAA,KAC1C,mBAAA,GAAsB,KAAA,CAAI,SAAA,QAAiB,yBAAA;AAAA,KAC3C,mBAAA,GAAsB,KAAA,CAAI,SAAA,QAAiB,yBAAA;AAAA,KAC3C,wBAAA,GAA2B,KAAA,CAAI,SAAA,QAAiB,8BAAA;AAAA,KAChD,sBAAA,GAAyB,KAAA,CAAI,SAAA,QAAiB,4BAAA;AAAA,KAC9C,0BAAA,GAA6B,KAAA,CAAI,SAAA,QAAiB,gCAAA"}
1
+ {"version":3,"file":"conversations.d.ts","names":[],"sources":["../../src/interface/conversations.ts"],"mappings":";;;cAGa,wBAAA;AAAA,KACD,kBAAA,WAA6B,wBAAwB;AAAA,cAEpD,0BAAA;AAAA,KACD,oBAAA,WAA+B,0BAA0B;AAAA,cAExD,wBAAA;AAAA,KACD,kBAAA,WAA6B,wBAAwB;AAAA,cAEpD,4BAAA;AAAA,KACD,sBAAA,WAAiC,4BAA4B;AAAA,cAE5D,6BAAA;AAAA,KACD,uBAAA,WAAkC,6BAA6B;AAAA,cAE9D,0BAAA,EAA0B,KAAA,CAAA,YAAA;;;;;;;;;GASrC,KAAA,CAAA,SAAA;;;;;;;;;;cAEW,wBAAA,EAAwB,KAAA,CAAA,YAAA;;;;;GAKnC,KAAA,CAAA,SAAA;;;;;;cAEW,yBAAA,EAAyB,KAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsBpC,KAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,4BAAA,EAA4B,KAAA,CAAA,YAAA;;;;;;;;;GASvC,KAAA,CAAA,SAAA;;;;;;;;;;cAKW,yBAAA,EAAyB,KAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;GAepC,KAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;cAEW,8BAAA,EAA8B,KAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAGzC,KAAA,CAAA,SAAA;;;;cAEW,gCAAA,EAAgC,KAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAI3C,KAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAEU,oBAAA,GAAuB,KAAA,CAAI,SAAS,QAAQ,0BAAA;AAAA,KAC5C,kBAAA,GAAqB,KAAA,CAAI,SAAS,QAAQ,wBAAA;AAAA,KAC1C,mBAAA,GAAsB,KAAA,CAAI,SAAS,QAAQ,yBAAA;AAAA,KAC3C,mBAAA,GAAsB,KAAA,CAAI,SAAS,QAAQ,yBAAA;AAAA,KAC3C,wBAAA,GAA2B,KAAA,CAAI,SAAS,QAAQ,8BAAA;AAAA,KAChD,sBAAA,GAAyB,KAAA,CAAI,SAAS,QAAQ,4BAAA;AAAA,KAC9C,0BAAA,GAA6B,KAAA,CAAI,SAAS,QAAQ,gCAAA"}
@@ -1,7 +1,5 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_chunk = require('../chunk-BE-pF4vm.js');
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
2
  let ___schema_fields_js = require("../schema-fields.js");
4
-
5
3
  //#region src/interface/conversations.ts
6
4
  const conversationStatusValues = [
7
5
  "open",
@@ -104,7 +102,6 @@ const conversationDetailResponseSchema = (0, ___schema_fields_js.yupObject)({
104
102
  messages: (0, ___schema_fields_js.yupArray)(conversationMessageSchema.defined()).defined(),
105
103
  entryPoints: (0, ___schema_fields_js.yupArray)(conversationEntryPointSchema.defined()).defined()
106
104
  });
107
-
108
105
  //#endregion
109
106
  exports.conversationDetailResponseSchema = conversationDetailResponseSchema;
110
107
  exports.conversationEntryPointSchema = conversationEntryPointSchema;
@@ -118,4 +115,5 @@ exports.conversationSenderTypeValues = conversationSenderTypeValues;
118
115
  exports.conversationSourceValues = conversationSourceValues;
119
116
  exports.conversationStatusValues = conversationStatusValues;
120
117
  exports.conversationSummarySchema = conversationSummarySchema;
118
+
121
119
  //# sourceMappingURL=conversations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversations.js","names":[],"sources":["../../src/interface/conversations.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport { yupArray, yupBoolean, yupMixed, yupObject, yupString } from \"../schema-fields\";\n\nexport const conversationStatusValues = [\"open\", \"pending\", \"closed\"] as const;\nexport type ConversationStatus = (typeof conversationStatusValues)[number];\n\nexport const conversationPriorityValues = [\"low\", \"normal\", \"high\", \"urgent\"] as const;\nexport type ConversationPriority = (typeof conversationPriorityValues)[number];\n\nexport const conversationSourceValues = [\"manual\", \"chat\", \"email\", \"api\"] as const;\nexport type ConversationSource = (typeof conversationSourceValues)[number];\n\nexport const conversationSenderTypeValues = [\"user\", \"agent\", \"system\"] as const;\nexport type ConversationSenderType = (typeof conversationSenderTypeValues)[number];\n\nexport const conversationMessageTypeValues = [\"message\", \"internal-note\", \"status-change\"] as const;\nexport type ConversationMessageType = (typeof conversationMessageTypeValues)[number];\n\nexport const conversationMetadataSchema = yupObject({\n assignedToUserId: yupString().nullable().defined(),\n assignedToDisplayName: yupString().nullable().defined(),\n tags: yupArray(yupString().defined()).defined(),\n firstResponseDueAt: yupString().nullable().defined(),\n firstResponseAt: yupString().nullable().defined(),\n nextResponseDueAt: yupString().nullable().defined(),\n lastCustomerReplyAt: yupString().nullable().defined(),\n lastAgentReplyAt: yupString().nullable().defined(),\n});\n\nexport const conversationSenderSchema = yupObject({\n type: yupString().oneOf(conversationSenderTypeValues).defined(),\n id: yupString().nullable().defined(),\n displayName: yupString().nullable().defined(),\n primaryEmail: yupString().nullable().defined(),\n});\n\nexport const conversationSummarySchema = yupObject({\n conversationId: yupString().uuid().defined(),\n userId: yupString().uuid().nullable().defined(),\n teamId: yupString().uuid().nullable().defined(),\n userDisplayName: yupString().nullable().defined(),\n userPrimaryEmail: yupString().nullable().defined(),\n userProfileImageUrl: yupString().nullable().defined(),\n subject: yupString().defined(),\n status: yupString().oneOf(conversationStatusValues).defined(),\n priority: yupString().oneOf(conversationPriorityValues).defined(),\n source: yupString().oneOf(conversationSourceValues).defined(),\n lastMessageType: yupString().oneOf(conversationMessageTypeValues).defined(),\n preview: yupString().nullable().defined(),\n lastActivityAt: yupString().defined(),\n metadata: conversationMetadataSchema.defined(),\n createdAt: yupString().optional(),\n updatedAt: yupString().optional(),\n lastMessageAt: yupString().optional(),\n lastInboundAt: yupString().nullable().optional(),\n lastOutboundAt: yupString().nullable().optional(),\n closedAt: yupString().nullable().optional(),\n recordMetadata: yupMixed().nullable().optional(),\n});\n\nexport const conversationEntryPointSchema = yupObject({\n id: yupString().uuid().defined(),\n channelType: yupString().defined(),\n adapterKey: yupString().defined(),\n externalChannelId: yupString().nullable().defined(),\n isEntryPoint: yupBoolean().defined(),\n metadata: yupMixed().nullable().defined(),\n createdAt: yupString().defined(),\n updatedAt: yupString().defined(),\n});\n\n// Message detail responses include parent conversation context for clients.\n// `subject`, `status`, `priority`, and `source` are populated from the parent\n// Conversation by the backend mapper; they are not stored on ConversationMessage.\nexport const conversationMessageSchema = yupObject({\n id: yupString().uuid().defined(),\n conversationId: yupString().uuid().defined(),\n userId: yupString().uuid().nullable().defined(),\n teamId: yupString().uuid().nullable().defined(),\n subject: yupString().defined(),\n status: yupString().oneOf(conversationStatusValues).defined(),\n priority: yupString().oneOf(conversationPriorityValues).defined(),\n source: yupString().oneOf(conversationSourceValues).defined(),\n messageType: yupString().oneOf(conversationMessageTypeValues).defined(),\n body: yupString().nullable().defined(),\n attachments: yupArray(yupMixed().defined()).defined(),\n metadata: yupMixed().nullable().defined(),\n createdAt: yupString().defined(),\n sender: conversationSenderSchema.defined(),\n});\n\nexport const conversationListResponseSchema = yupObject({\n conversations: yupArray(conversationSummarySchema.defined()).defined(),\n hasMore: yupBoolean().defined(),\n});\n\nexport const conversationDetailResponseSchema = yupObject({\n conversation: conversationSummarySchema.defined(),\n messages: yupArray(conversationMessageSchema.defined()).defined(),\n entryPoints: yupArray(conversationEntryPointSchema.defined()).defined(),\n});\n\nexport type ConversationMetadata = yup.InferType<typeof conversationMetadataSchema>;\nexport type ConversationSender = yup.InferType<typeof conversationSenderSchema>;\nexport type ConversationSummary = yup.InferType<typeof conversationSummarySchema>;\nexport type ConversationMessage = yup.InferType<typeof conversationMessageSchema>;\nexport type ConversationListResponse = yup.InferType<typeof conversationListResponseSchema>;\nexport type ConversationEntryPoint = yup.InferType<typeof conversationEntryPointSchema>;\nexport type ConversationDetailResponse = yup.InferType<typeof conversationDetailResponseSchema>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"conversations.js","names":[],"sources":["../../src/interface/conversations.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport { yupArray, yupBoolean, yupMixed, yupObject, yupString } from \"../schema-fields\";\n\nexport const conversationStatusValues = [\"open\", \"pending\", \"closed\"] as const;\nexport type ConversationStatus = (typeof conversationStatusValues)[number];\n\nexport const conversationPriorityValues = [\"low\", \"normal\", \"high\", \"urgent\"] as const;\nexport type ConversationPriority = (typeof conversationPriorityValues)[number];\n\nexport const conversationSourceValues = [\"manual\", \"chat\", \"email\", \"api\"] as const;\nexport type ConversationSource = (typeof conversationSourceValues)[number];\n\nexport const conversationSenderTypeValues = [\"user\", \"agent\", \"system\"] as const;\nexport type ConversationSenderType = (typeof conversationSenderTypeValues)[number];\n\nexport const conversationMessageTypeValues = [\"message\", \"internal-note\", \"status-change\"] as const;\nexport type ConversationMessageType = (typeof conversationMessageTypeValues)[number];\n\nexport const conversationMetadataSchema = yupObject({\n assignedToUserId: yupString().nullable().defined(),\n assignedToDisplayName: yupString().nullable().defined(),\n tags: yupArray(yupString().defined()).defined(),\n firstResponseDueAt: yupString().nullable().defined(),\n firstResponseAt: yupString().nullable().defined(),\n nextResponseDueAt: yupString().nullable().defined(),\n lastCustomerReplyAt: yupString().nullable().defined(),\n lastAgentReplyAt: yupString().nullable().defined(),\n});\n\nexport const conversationSenderSchema = yupObject({\n type: yupString().oneOf(conversationSenderTypeValues).defined(),\n id: yupString().nullable().defined(),\n displayName: yupString().nullable().defined(),\n primaryEmail: yupString().nullable().defined(),\n});\n\nexport const conversationSummarySchema = yupObject({\n conversationId: yupString().uuid().defined(),\n userId: yupString().uuid().nullable().defined(),\n teamId: yupString().uuid().nullable().defined(),\n userDisplayName: yupString().nullable().defined(),\n userPrimaryEmail: yupString().nullable().defined(),\n userProfileImageUrl: yupString().nullable().defined(),\n subject: yupString().defined(),\n status: yupString().oneOf(conversationStatusValues).defined(),\n priority: yupString().oneOf(conversationPriorityValues).defined(),\n source: yupString().oneOf(conversationSourceValues).defined(),\n lastMessageType: yupString().oneOf(conversationMessageTypeValues).defined(),\n preview: yupString().nullable().defined(),\n lastActivityAt: yupString().defined(),\n metadata: conversationMetadataSchema.defined(),\n createdAt: yupString().optional(),\n updatedAt: yupString().optional(),\n lastMessageAt: yupString().optional(),\n lastInboundAt: yupString().nullable().optional(),\n lastOutboundAt: yupString().nullable().optional(),\n closedAt: yupString().nullable().optional(),\n recordMetadata: yupMixed().nullable().optional(),\n});\n\nexport const conversationEntryPointSchema = yupObject({\n id: yupString().uuid().defined(),\n channelType: yupString().defined(),\n adapterKey: yupString().defined(),\n externalChannelId: yupString().nullable().defined(),\n isEntryPoint: yupBoolean().defined(),\n metadata: yupMixed().nullable().defined(),\n createdAt: yupString().defined(),\n updatedAt: yupString().defined(),\n});\n\n// Message detail responses include parent conversation context for clients.\n// `subject`, `status`, `priority`, and `source` are populated from the parent\n// Conversation by the backend mapper; they are not stored on ConversationMessage.\nexport const conversationMessageSchema = yupObject({\n id: yupString().uuid().defined(),\n conversationId: yupString().uuid().defined(),\n userId: yupString().uuid().nullable().defined(),\n teamId: yupString().uuid().nullable().defined(),\n subject: yupString().defined(),\n status: yupString().oneOf(conversationStatusValues).defined(),\n priority: yupString().oneOf(conversationPriorityValues).defined(),\n source: yupString().oneOf(conversationSourceValues).defined(),\n messageType: yupString().oneOf(conversationMessageTypeValues).defined(),\n body: yupString().nullable().defined(),\n attachments: yupArray(yupMixed().defined()).defined(),\n metadata: yupMixed().nullable().defined(),\n createdAt: yupString().defined(),\n sender: conversationSenderSchema.defined(),\n});\n\nexport const conversationListResponseSchema = yupObject({\n conversations: yupArray(conversationSummarySchema.defined()).defined(),\n hasMore: yupBoolean().defined(),\n});\n\nexport const conversationDetailResponseSchema = yupObject({\n conversation: conversationSummarySchema.defined(),\n messages: yupArray(conversationMessageSchema.defined()).defined(),\n entryPoints: yupArray(conversationEntryPointSchema.defined()).defined(),\n});\n\nexport type ConversationMetadata = yup.InferType<typeof conversationMetadataSchema>;\nexport type ConversationSender = yup.InferType<typeof conversationSenderSchema>;\nexport type ConversationSummary = yup.InferType<typeof conversationSummarySchema>;\nexport type ConversationMessage = yup.InferType<typeof conversationMessageSchema>;\nexport type ConversationListResponse = yup.InferType<typeof conversationListResponseSchema>;\nexport type ConversationEntryPoint = yup.InferType<typeof conversationEntryPointSchema>;\nexport type ConversationDetailResponse = yup.InferType<typeof conversationDetailResponseSchema>;\n"],"mappings":"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"}
@@ -1,14 +1,2 @@
1
- //#region src/interface/crud/analytics.d.ts
2
- type AnalyticsQueryOptions = {
3
- query: string;
4
- params?: Record<string, unknown>;
5
- timeout_ms?: number;
6
- include_all_branches?: boolean;
7
- };
8
- type AnalyticsQueryResponse = {
9
- result: Record<string, unknown>[];
10
- query_id: string;
11
- };
12
- //#endregion
13
- export { AnalyticsQueryOptions, AnalyticsQueryResponse };
14
- //# sourceMappingURL=analytics.d.ts.map
1
+ import { n as AnalyticsQueryResponse, t as AnalyticsQueryOptions } from "../../analytics-IjkAsefy.js";
2
+ export { AnalyticsQueryOptions, AnalyticsQueryResponse };