@hexclave/shared 1.0.41 → 1.0.42

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 (1066) hide show
  1. package/dist/admin-interface-Y9EZqwD6.d.ts +379 -0
  2. package/dist/admin-interface-Y9EZqwD6.d.ts.map +1 -0
  3. package/dist/admin-metrics-bsOkw4YQ.d.ts +807 -0
  4. package/dist/admin-metrics-bsOkw4YQ.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 +3 -6
  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-iIw4nU5k.d.ts +447 -0
  48. package/dist/client-interface-iIw4nU5k.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-BBoN3hsn.d.ts +284 -0
  88. package/dist/current-user-BBoN3hsn.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-B1wmVPRG.d.ts +1464 -0
  92. package/dist/{interface/crud/email-outbox.d.ts.map → email-outbox-B1wmVPRG.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 +2 -3
  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 +227 -228
  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 +2 -3
  213. package/dist/esm/interface/admin-interface.js.map +1 -1
  214. package/dist/esm/interface/admin-metrics.d.ts +10 -10
  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 +32 -16
  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 +8 -8
  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 +22 -24
  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 +30 -32
  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.map +1 -1
  259. package/dist/esm/interface/crud/invoices.js +1 -2
  260. package/dist/esm/interface/crud/invoices.js.map +1 -1
  261. package/dist/esm/interface/crud/items.d.ts +6 -8
  262. package/dist/esm/interface/crud/items.d.ts.map +1 -1
  263. package/dist/esm/interface/crud/items.js +12 -16
  264. package/dist/esm/interface/crud/items.js.map +1 -1
  265. package/dist/esm/interface/crud/notification-preferences.d.ts +6 -8
  266. package/dist/esm/interface/crud/notification-preferences.d.ts.map +1 -1
  267. package/dist/esm/interface/crud/notification-preferences.js +8 -12
  268. package/dist/esm/interface/crud/notification-preferences.js.map +1 -1
  269. package/dist/esm/interface/crud/oauth-providers.d.ts +24 -26
  270. package/dist/esm/interface/crud/oauth-providers.d.ts.map +1 -1
  271. package/dist/esm/interface/crud/oauth-providers.js +1 -2
  272. package/dist/esm/interface/crud/oauth-providers.js.map +1 -1
  273. package/dist/esm/interface/crud/products.d.ts +21 -22
  274. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  275. package/dist/esm/interface/crud/products.js +3 -2
  276. package/dist/esm/interface/crud/products.js.map +1 -1
  277. package/dist/esm/interface/crud/project-api-keys.d.ts +5 -6
  278. package/dist/esm/interface/crud/project-api-keys.d.ts.map +1 -1
  279. package/dist/esm/interface/crud/project-api-keys.js +1 -2
  280. package/dist/esm/interface/crud/project-api-keys.js.map +1 -1
  281. package/dist/esm/interface/crud/project-permissions.d.ts +29 -31
  282. package/dist/esm/interface/crud/project-permissions.d.ts.map +1 -1
  283. package/dist/esm/interface/crud/project-permissions.js +1 -2
  284. package/dist/esm/interface/crud/project-permissions.js.map +1 -1
  285. package/dist/esm/interface/crud/projects.d.ts +63 -65
  286. package/dist/esm/interface/crud/projects.d.ts.map +1 -1
  287. package/dist/esm/interface/crud/projects.js +3 -2
  288. package/dist/esm/interface/crud/projects.js.map +1 -1
  289. package/dist/esm/interface/crud/session-replays.d.ts.map +1 -1
  290. package/dist/esm/interface/crud/session-replays.js +1 -1
  291. package/dist/esm/interface/crud/sessions.d.ts +15 -17
  292. package/dist/esm/interface/crud/sessions.d.ts.map +1 -1
  293. package/dist/esm/interface/crud/sessions.js +1 -2
  294. package/dist/esm/interface/crud/sessions.js.map +1 -1
  295. package/dist/esm/interface/crud/sign-up-rules.d.ts.map +1 -1
  296. package/dist/esm/interface/crud/sign-up-rules.js +1 -1
  297. package/dist/esm/interface/crud/svix-token.d.ts +8 -10
  298. package/dist/esm/interface/crud/svix-token.d.ts.map +1 -1
  299. package/dist/esm/interface/crud/svix-token.js +1 -2
  300. package/dist/esm/interface/crud/svix-token.js.map +1 -1
  301. package/dist/esm/interface/crud/team-invitation-details.d.ts +6 -8
  302. package/dist/esm/interface/crud/team-invitation-details.d.ts.map +1 -1
  303. package/dist/esm/interface/crud/team-invitation-details.js +1 -2
  304. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -1
  305. package/dist/esm/interface/crud/team-invitation.d.ts +7 -9
  306. package/dist/esm/interface/crud/team-invitation.d.ts.map +1 -1
  307. package/dist/esm/interface/crud/team-invitation.js +1 -2
  308. package/dist/esm/interface/crud/team-invitation.js.map +1 -1
  309. package/dist/esm/interface/crud/team-member-profiles.d.ts +36 -38
  310. package/dist/esm/interface/crud/team-member-profiles.d.ts.map +1 -1
  311. package/dist/esm/interface/crud/team-member-profiles.js +1 -2
  312. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -1
  313. package/dist/esm/interface/crud/team-memberships.d.ts +14 -16
  314. package/dist/esm/interface/crud/team-memberships.d.ts.map +1 -1
  315. package/dist/esm/interface/crud/team-memberships.js +1 -2
  316. package/dist/esm/interface/crud/team-memberships.js.map +1 -1
  317. package/dist/esm/interface/crud/team-permissions.d.ts +29 -31
  318. package/dist/esm/interface/crud/team-permissions.d.ts.map +1 -1
  319. package/dist/esm/interface/crud/team-permissions.js +1 -2
  320. package/dist/esm/interface/crud/team-permissions.js.map +1 -1
  321. package/dist/esm/interface/crud/teams.d.ts +36 -38
  322. package/dist/esm/interface/crud/teams.d.ts.map +1 -1
  323. package/dist/esm/interface/crud/teams.js +2 -4
  324. package/dist/esm/interface/crud/teams.js.map +1 -1
  325. package/dist/esm/interface/crud/transactions.d.ts +14 -16
  326. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  327. package/dist/esm/interface/crud/transactions.js +7 -13
  328. package/dist/esm/interface/crud/transactions.js.map +1 -1
  329. package/dist/esm/interface/crud/users.d.ts +21 -22
  330. package/dist/esm/interface/crud/users.d.ts.map +1 -1
  331. package/dist/esm/interface/crud/users.js +9 -5
  332. package/dist/esm/interface/crud/users.js.map +1 -1
  333. package/dist/esm/interface/handler-urls.d.ts +1 -1
  334. package/dist/esm/interface/handler-urls.d.ts.map +1 -1
  335. package/dist/esm/interface/handler-urls.js +1 -2
  336. package/dist/esm/interface/page-component-versions.d.ts +1 -1
  337. package/dist/esm/interface/page-component-versions.d.ts.map +1 -1
  338. package/dist/esm/interface/page-component-versions.js +1 -2
  339. package/dist/esm/interface/page-component-versions.js.map +1 -1
  340. package/dist/esm/interface/plan-usage.d.ts +1 -1
  341. package/dist/esm/interface/plan-usage.d.ts.map +1 -1
  342. package/dist/esm/interface/plan-usage.js +1 -2
  343. package/dist/esm/interface/plan-usage.js.map +1 -1
  344. package/dist/esm/interface/server-interface.d.ts +19 -19
  345. package/dist/esm/interface/server-interface.d.ts.map +1 -1
  346. package/dist/esm/interface/server-interface.js +2 -3
  347. package/dist/esm/interface/server-interface.js.map +1 -1
  348. package/dist/esm/interface/webhooks.d.ts +4 -4
  349. package/dist/esm/interface/webhooks.d.ts.map +1 -1
  350. package/dist/esm/interface/webhooks.js +1 -2
  351. package/dist/esm/interface/webhooks.js.map +1 -1
  352. package/dist/esm/known-errors.d.ts +2 -2
  353. package/dist/esm/known-errors.d.ts.map +1 -1
  354. package/dist/esm/known-errors.js +10 -21
  355. package/dist/esm/known-errors.js.map +1 -1
  356. package/dist/esm/payments/payment-methods.d.ts.map +1 -1
  357. package/dist/esm/payments/payment-methods.js +1 -1
  358. package/dist/esm/payments/payment-methods.js.map +1 -1
  359. package/dist/esm/payments/stripe-limits.d.ts.map +1 -1
  360. package/dist/esm/payments/stripe-limits.js +1 -1
  361. package/dist/esm/payments/stripe-limits.js.map +1 -1
  362. package/dist/esm/plans.d.ts.map +1 -1
  363. package/dist/esm/plans.js +1 -1
  364. package/dist/esm/plans.js.map +1 -1
  365. package/dist/esm/schema-fields.d.ts +14 -14
  366. package/dist/esm/schema-fields.d.ts.map +1 -1
  367. package/dist/esm/schema-fields.js +3 -64
  368. package/dist/esm/schema-fields.js.map +1 -1
  369. package/dist/esm/sessions.d.ts +6 -6
  370. package/dist/esm/sessions.d.ts.map +1 -1
  371. package/dist/esm/sessions.js +1 -2
  372. package/dist/esm/sessions.js.map +1 -1
  373. package/dist/esm/sessions.test.js +2 -3
  374. package/dist/esm/sessions.test.js.map +1 -1
  375. package/dist/esm/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  376. package/dist/esm/utils/analytics-clickmap-overlay.js +1 -1
  377. package/dist/esm/utils/api-keys.d.ts.map +1 -1
  378. package/dist/esm/utils/api-keys.js +1 -2
  379. package/dist/esm/utils/api-keys.js.map +1 -1
  380. package/dist/esm/utils/arrays.d.ts.map +1 -1
  381. package/dist/esm/utils/arrays.js +1 -470
  382. package/dist/esm/utils/arrays.js.map +1 -1
  383. package/dist/esm/utils/auth-methods.d.ts.map +1 -1
  384. package/dist/esm/utils/auth-methods.js +1 -1
  385. package/dist/esm/utils/auth-methods.js.map +1 -1
  386. package/dist/esm/utils/base64.d.ts.map +1 -1
  387. package/dist/esm/utils/base64.js +1 -10
  388. package/dist/esm/utils/base64.js.map +1 -1
  389. package/dist/esm/utils/booleans.d.ts.map +1 -1
  390. package/dist/esm/utils/booleans.js +1 -25
  391. package/dist/esm/utils/booleans.js.map +1 -1
  392. package/dist/esm/utils/browser-compat.d.ts.map +1 -1
  393. package/dist/esm/utils/browser-compat.js +1 -1
  394. package/dist/esm/utils/browser-compat.js.map +1 -1
  395. package/dist/esm/utils/bytes.d.ts.map +1 -1
  396. package/dist/esm/utils/bytes.js +3 -198
  397. package/dist/esm/utils/bytes.js.map +1 -1
  398. package/dist/esm/utils/caches.d.ts +1 -1
  399. package/dist/esm/utils/caches.d.ts.map +1 -1
  400. package/dist/esm/utils/caches.js +1 -27
  401. package/dist/esm/utils/caches.js.map +1 -1
  402. package/dist/esm/utils/cel-fields.d.ts.map +1 -1
  403. package/dist/esm/utils/cel-fields.js +1 -2
  404. package/dist/esm/utils/cel-fields.js.map +1 -1
  405. package/dist/esm/utils/cloud-hosts.d.ts.map +1 -1
  406. package/dist/esm/utils/cloud-hosts.js +1 -27
  407. package/dist/esm/utils/cloud-hosts.js.map +1 -1
  408. package/dist/esm/utils/compile-time.d.ts.map +1 -1
  409. package/dist/esm/utils/compile-time.js +1 -1
  410. package/dist/esm/utils/compile-time.js.map +1 -1
  411. package/dist/esm/utils/country-codes.d.ts.map +1 -1
  412. package/dist/esm/utils/country-codes.js +1 -16
  413. package/dist/esm/utils/country-codes.js.map +1 -1
  414. package/dist/esm/utils/crypto.d.ts.map +1 -1
  415. package/dist/esm/utils/crypto.js +3 -113
  416. package/dist/esm/utils/crypto.js.map +1 -1
  417. package/dist/esm/utils/currencies.d.ts +1 -1
  418. package/dist/esm/utils/currencies.d.ts.map +1 -1
  419. package/dist/esm/utils/currencies.js +2 -37
  420. package/dist/esm/utils/currencies.js.map +1 -1
  421. package/dist/esm/utils/currency-constants.d.ts.map +1 -1
  422. package/dist/esm/utils/currency-constants.js +1 -1
  423. package/dist/esm/utils/currency-constants.js.map +1 -1
  424. package/dist/esm/utils/dates.d.ts.map +1 -1
  425. package/dist/esm/utils/dates.js +1 -44
  426. package/dist/esm/utils/dates.js.map +1 -1
  427. package/dist/esm/utils/dev-env-state-path.d.ts.map +1 -1
  428. package/dist/esm/utils/dev-env-state-path.js +1 -2
  429. package/dist/esm/utils/dev-env-state-path.js.map +1 -1
  430. package/dist/esm/utils/dev-tool.d.ts.map +1 -1
  431. package/dist/esm/utils/dev-tool.js +1 -1
  432. package/dist/esm/utils/dom.d.ts.map +1 -1
  433. package/dist/esm/utils/dom.js +1 -1
  434. package/dist/esm/utils/dom.js.map +1 -1
  435. package/dist/esm/utils/elements-chain.d.ts.map +1 -1
  436. package/dist/esm/utils/elements-chain.js +5 -50
  437. package/dist/esm/utils/elements-chain.js.map +1 -1
  438. package/dist/esm/utils/env.d.ts.map +1 -1
  439. package/dist/esm/utils/env.js +1 -2
  440. package/dist/esm/utils/env.js.map +1 -1
  441. package/dist/esm/utils/env.test.js +2 -3
  442. package/dist/esm/utils/env.test.js.map +1 -1
  443. package/dist/esm/utils/errors.d.ts +1 -1
  444. package/dist/esm/utils/errors.d.ts.map +1 -1
  445. package/dist/esm/utils/errors.js +1 -2
  446. package/dist/esm/utils/errors.js.map +1 -1
  447. package/dist/esm/utils/esbuild.d.ts +1 -1
  448. package/dist/esm/utils/esbuild.d.ts.map +1 -1
  449. package/dist/esm/utils/esbuild.js +2 -3
  450. package/dist/esm/utils/esbuild.js.map +1 -1
  451. package/dist/esm/utils/featurebase.d.ts.map +1 -1
  452. package/dist/esm/utils/featurebase.js +1 -2
  453. package/dist/esm/utils/featurebase.js.map +1 -1
  454. package/dist/esm/utils/fs.d.ts.map +1 -1
  455. package/dist/esm/utils/fs.js +1 -2
  456. package/dist/esm/utils/fs.js.map +1 -1
  457. package/dist/esm/utils/functions.d.ts.map +1 -1
  458. package/dist/esm/utils/functions.js +1 -24
  459. package/dist/esm/utils/functions.js.map +1 -1
  460. package/dist/esm/utils/geo.d.ts.map +1 -1
  461. package/dist/esm/utils/geo.js +1 -2
  462. package/dist/esm/utils/geo.js.map +1 -1
  463. package/dist/esm/utils/globals.d.ts.map +1 -1
  464. package/dist/esm/utils/globals.js +1 -1
  465. package/dist/esm/utils/globals.js.map +1 -1
  466. package/dist/esm/utils/hashes.d.ts.map +1 -1
  467. package/dist/esm/utils/hashes.js +1 -2
  468. package/dist/esm/utils/hashes.js.map +1 -1
  469. package/dist/esm/utils/html.d.ts.map +1 -1
  470. package/dist/esm/utils/html.js +1 -19
  471. package/dist/esm/utils/html.js.map +1 -1
  472. package/dist/esm/utils/http.d.ts.map +1 -1
  473. package/dist/esm/utils/http.js +1 -19
  474. package/dist/esm/utils/http.js.map +1 -1
  475. package/dist/esm/utils/ips.d.ts.map +1 -1
  476. package/dist/esm/utils/ips.js +1 -25
  477. package/dist/esm/utils/ips.js.map +1 -1
  478. package/dist/esm/utils/json.d.ts +1 -1
  479. package/dist/esm/utils/json.d.ts.map +1 -1
  480. package/dist/esm/utils/json.js +1 -155
  481. package/dist/esm/utils/json.js.map +1 -1
  482. package/dist/esm/utils/jsx-editable-transpiler.d.ts.map +1 -1
  483. package/dist/esm/utils/jsx-editable-transpiler.js +1 -2
  484. package/dist/esm/utils/jsx-editable-transpiler.js.map +1 -1
  485. package/dist/esm/utils/jsx-editable-transpiler.test.js +2 -3
  486. package/dist/esm/utils/jsx-editable-transpiler.test.js.map +1 -1
  487. package/dist/esm/utils/jwt.d.ts.map +1 -1
  488. package/dist/esm/utils/jwt.js +1 -2
  489. package/dist/esm/utils/jwt.js.map +1 -1
  490. package/dist/esm/utils/locks.d.ts.map +1 -1
  491. package/dist/esm/utils/locks.js +1 -2
  492. package/dist/esm/utils/locks.js.map +1 -1
  493. package/dist/esm/utils/maps.d.ts.map +1 -1
  494. package/dist/esm/utils/maps.js +1 -111
  495. package/dist/esm/utils/maps.js.map +1 -1
  496. package/dist/esm/utils/math.d.ts.map +1 -1
  497. package/dist/esm/utils/math.js +1 -11
  498. package/dist/esm/utils/math.js.map +1 -1
  499. package/dist/esm/utils/monkey-patch.d.ts.map +1 -1
  500. package/dist/esm/utils/monkey-patch.js +2 -3
  501. package/dist/esm/utils/monkey-patch.js.map +1 -1
  502. package/dist/esm/utils/node-http.js +1 -2
  503. package/dist/esm/utils/node-http.js.map +1 -1
  504. package/dist/esm/utils/numbers.d.ts.map +1 -1
  505. package/dist/esm/utils/numbers.js +1 -45
  506. package/dist/esm/utils/numbers.js.map +1 -1
  507. package/dist/esm/utils/oauth.d.ts.map +1 -1
  508. package/dist/esm/utils/oauth.js +1 -1
  509. package/dist/esm/utils/oauth.js.map +1 -1
  510. package/dist/esm/utils/objects.d.ts.map +1 -1
  511. package/dist/esm/utils/objects.js +1 -622
  512. package/dist/esm/utils/objects.js.map +1 -1
  513. package/dist/esm/utils/paginated-lists.d.ts.map +1 -1
  514. package/dist/esm/utils/paginated-lists.js +1 -2
  515. package/dist/esm/utils/paginated-lists.js.map +1 -1
  516. package/dist/esm/utils/paginated-lists.test.js +2 -3
  517. package/dist/esm/utils/paginated-lists.test.js.map +1 -1
  518. package/dist/esm/utils/passkey.d.ts +1 -1
  519. package/dist/esm/utils/passkey.js +1 -1
  520. package/dist/esm/utils/promises.d.ts +1 -1
  521. package/dist/esm/utils/promises.d.ts.map +1 -1
  522. package/dist/esm/utils/promises.js +2 -161
  523. package/dist/esm/utils/promises.js.map +1 -1
  524. package/dist/esm/utils/proxies.d.ts.map +1 -1
  525. package/dist/esm/utils/proxies.js +1 -37
  526. package/dist/esm/utils/proxies.js.map +1 -1
  527. package/dist/esm/utils/react.d.ts.map +1 -1
  528. package/dist/esm/utils/react.js +1 -41
  529. package/dist/esm/utils/react.js.map +1 -1
  530. package/dist/esm/utils/redirect-urls.d.ts.map +1 -1
  531. package/dist/esm/utils/redirect-urls.js +2 -92
  532. package/dist/esm/utils/redirect-urls.js.map +1 -1
  533. package/dist/esm/utils/regex.js +1 -1
  534. package/dist/esm/utils/regex.js.map +1 -1
  535. package/dist/esm/utils/results.d.ts.map +1 -1
  536. package/dist/esm/utils/results.js +1 -213
  537. package/dist/esm/utils/results.js.map +1 -1
  538. package/dist/esm/utils/sentry.js +1 -1
  539. package/dist/esm/utils/sentry.js.map +1 -1
  540. package/dist/esm/utils/stores.d.ts +3 -3
  541. package/dist/esm/utils/stores.d.ts.map +1 -1
  542. package/dist/esm/utils/stores.js +1 -2
  543. package/dist/esm/utils/stores.js.map +1 -1
  544. package/dist/esm/utils/strings.d.ts.map +1 -1
  545. package/dist/esm/utils/strings.js +1 -251
  546. package/dist/esm/utils/strings.js.map +1 -1
  547. package/dist/esm/utils/strings.nicify.test.js +2 -3
  548. package/dist/esm/utils/strings.nicify.test.js.map +1 -1
  549. package/dist/esm/utils/telemetry.d.ts.map +1 -1
  550. package/dist/esm/utils/telemetry.js +1 -2
  551. package/dist/esm/utils/telemetry.js.map +1 -1
  552. package/dist/esm/utils/turnstile-browser.d.ts +1 -1
  553. package/dist/esm/utils/turnstile-browser.d.ts.map +1 -1
  554. package/dist/esm/utils/turnstile-browser.js +1 -2
  555. package/dist/esm/utils/turnstile-browser.js.map +1 -1
  556. package/dist/esm/utils/turnstile-flow.d.ts +1 -1
  557. package/dist/esm/utils/turnstile-flow.d.ts.map +1 -1
  558. package/dist/esm/utils/turnstile-flow.js +1 -2
  559. package/dist/esm/utils/turnstile-flow.js.map +1 -1
  560. package/dist/esm/utils/turnstile-flow.test.js +2 -3
  561. package/dist/esm/utils/turnstile-flow.test.js.map +1 -1
  562. package/dist/esm/utils/turnstile.d.ts.map +1 -1
  563. package/dist/esm/utils/turnstile.js +1 -1
  564. package/dist/esm/utils/turnstile.js.map +1 -1
  565. package/dist/esm/utils/typed-arrays.js +1 -2
  566. package/dist/esm/utils/typed-arrays.js.map +1 -1
  567. package/dist/esm/utils/types.d.ts +1 -1
  568. package/dist/esm/utils/types.d.ts.map +1 -1
  569. package/dist/esm/utils/types.js +1 -1
  570. package/dist/esm/utils/types.js.map +1 -1
  571. package/dist/esm/utils/unicode.d.ts.map +1 -1
  572. package/dist/esm/utils/unicode.js +1 -13
  573. package/dist/esm/utils/unicode.js.map +1 -1
  574. package/dist/esm/utils/urls.d.ts.map +1 -1
  575. package/dist/esm/utils/urls.js +1 -151
  576. package/dist/esm/utils/urls.js.map +1 -1
  577. package/dist/esm/utils/uuids.d.ts.map +1 -1
  578. package/dist/esm/utils/uuids.js +2 -26
  579. package/dist/esm/utils/uuids.js.map +1 -1
  580. package/dist/format-4JG1MGv5.d.ts +61 -0
  581. package/dist/format-4JG1MGv5.d.ts.map +1 -0
  582. package/dist/handler-urls-BHt3v8Ai.d.ts +70 -0
  583. package/dist/handler-urls-BHt3v8Ai.d.ts.map +1 -0
  584. package/dist/helpers/emails.js +2 -4
  585. package/dist/helpers/emails.js.map +1 -1
  586. package/dist/helpers/init-prompt.d.ts.map +1 -1
  587. package/dist/helpers/init-prompt.js +2 -4
  588. package/dist/helpers/init-prompt.js.map +1 -1
  589. package/dist/helpers/password.d.ts +1 -1
  590. package/dist/helpers/password.d.ts.map +1 -1
  591. package/dist/helpers/password.js +2 -4
  592. package/dist/helpers/password.js.map +1 -1
  593. package/dist/helpers/production-mode.d.ts +1 -1
  594. package/dist/helpers/production-mode.d.ts.map +1 -1
  595. package/dist/helpers/production-mode.js +2 -4
  596. package/dist/helpers/production-mode.js.map +1 -1
  597. package/dist/helpers/support-sla.d.ts.map +1 -1
  598. package/dist/helpers/support-sla.js +2 -3
  599. package/dist/helpers/support-sla.js.map +1 -1
  600. package/dist/helpers/support-sla.test.js +1 -3
  601. package/dist/helpers/support-sla.test.js.map +1 -1
  602. package/dist/helpers/vault/client-side.d.ts.map +1 -1
  603. package/dist/helpers/vault/client-side.js +2 -22
  604. package/dist/helpers/vault/client-side.js.map +1 -1
  605. package/dist/helpers/vault/server-side.js +2 -4
  606. package/dist/helpers/vault/server-side.js.map +1 -1
  607. package/dist/hooks/use-async-callback.d.ts.map +1 -1
  608. package/dist/hooks/use-async-callback.js +4 -5
  609. package/dist/hooks/use-async-callback.js.map +1 -1
  610. package/dist/hooks/use-async-external-store.d.ts +1 -1
  611. package/dist/hooks/use-async-external-store.d.ts.map +1 -1
  612. package/dist/hooks/use-async-external-store.js +2 -4
  613. package/dist/hooks/use-async-external-store.js.map +1 -1
  614. package/dist/hooks/use-hash.js +2 -4
  615. package/dist/hooks/use-hash.js.map +1 -1
  616. package/dist/hooks/use-hover.d.ts.map +1 -1
  617. package/dist/hooks/use-hover.js +2 -4
  618. package/dist/hooks/use-hover.js.map +1 -1
  619. package/dist/hooks/use-strict-memo.d.ts.map +1 -1
  620. package/dist/hooks/use-strict-memo.js +2 -72
  621. package/dist/hooks/use-strict-memo.js.map +1 -1
  622. package/dist/index.d.ts +4 -4
  623. package/dist/index.js +27 -29
  624. package/dist/interface/admin-interface.d.ts +3 -379
  625. package/dist/interface/admin-interface.js +3 -5
  626. package/dist/interface/admin-interface.js.map +1 -1
  627. package/dist/interface/admin-metrics.d.ts +2 -807
  628. package/dist/interface/admin-metrics.js +2 -4
  629. package/dist/interface/admin-metrics.js.map +1 -1
  630. package/dist/interface/client-interface.d.ts +2 -447
  631. package/dist/interface/client-interface.js +33 -18
  632. package/dist/interface/client-interface.js.map +1 -1
  633. package/dist/interface/client-interface.test.js +83 -13
  634. package/dist/interface/client-interface.test.js.map +1 -1
  635. package/dist/interface/conversations.d.ts +8 -8
  636. package/dist/interface/conversations.d.ts.map +1 -1
  637. package/dist/interface/conversations.js +2 -4
  638. package/dist/interface/conversations.js.map +1 -1
  639. package/dist/interface/crud/analytics.d.ts +2 -14
  640. package/dist/interface/crud/connected-accounts.d.ts +2 -68
  641. package/dist/interface/crud/connected-accounts.js +2 -4
  642. package/dist/interface/crud/connected-accounts.js.map +1 -1
  643. package/dist/interface/crud/contact-channels.d.ts +2 -181
  644. package/dist/interface/crud/contact-channels.js +2 -4
  645. package/dist/interface/crud/contact-channels.js.map +1 -1
  646. package/dist/interface/crud/current-user.d.ts +2 -285
  647. package/dist/interface/crud/current-user.js +2 -4
  648. package/dist/interface/crud/current-user.js.map +1 -1
  649. package/dist/interface/crud/email-outbox.d.ts +2 -1465
  650. package/dist/interface/crud/email-outbox.js +4 -5
  651. package/dist/interface/crud/email-outbox.js.map +1 -1
  652. package/dist/interface/crud/email-templates.d.ts +15 -16
  653. package/dist/interface/crud/email-templates.d.ts.map +1 -1
  654. package/dist/interface/crud/email-templates.js +2 -4
  655. package/dist/interface/crud/email-templates.js.map +1 -1
  656. package/dist/interface/crud/emails.d.ts +2 -41
  657. package/dist/interface/crud/emails.js +4 -5
  658. package/dist/interface/crud/emails.js.map +1 -1
  659. package/dist/interface/crud/internal-api-keys.d.ts +2 -140
  660. package/dist/interface/crud/internal-api-keys.js +2 -4
  661. package/dist/interface/crud/internal-api-keys.js.map +1 -1
  662. package/dist/interface/crud/invoices.d.ts +2 -43
  663. package/dist/interface/crud/invoices.js +2 -4
  664. package/dist/interface/crud/invoices.js.map +1 -1
  665. package/dist/interface/crud/items.d.ts +2 -30
  666. package/dist/interface/crud/items.js +2 -4
  667. package/dist/interface/crud/items.js.map +1 -1
  668. package/dist/interface/crud/notification-preferences.d.ts +2 -38
  669. package/dist/interface/crud/notification-preferences.js +2 -4
  670. package/dist/interface/crud/notification-preferences.js.map +1 -1
  671. package/dist/interface/crud/oauth-providers.d.ts +2 -186
  672. package/dist/interface/crud/oauth-providers.js +2 -4
  673. package/dist/interface/crud/oauth-providers.js.map +1 -1
  674. package/dist/interface/crud/products.d.ts +2 -182
  675. package/dist/interface/crud/products.js +4 -4
  676. package/dist/interface/crud/products.js.map +1 -1
  677. package/dist/interface/crud/project-api-keys.d.ts +2 -203
  678. package/dist/interface/crud/project-api-keys.js +2 -4
  679. package/dist/interface/crud/project-api-keys.js.map +1 -1
  680. package/dist/interface/crud/project-permissions.d.ts +2 -161
  681. package/dist/interface/crud/project-permissions.js +4 -5
  682. package/dist/interface/crud/project-permissions.js.map +1 -1
  683. package/dist/interface/crud/projects.d.ts +2 -901
  684. package/dist/interface/crud/projects.js +6 -5
  685. package/dist/interface/crud/projects.js.map +1 -1
  686. package/dist/interface/crud/session-replays.d.ts +2 -83
  687. package/dist/interface/crud/sessions.d.ts +2 -150
  688. package/dist/interface/crud/sessions.js +2 -4
  689. package/dist/interface/crud/sessions.js.map +1 -1
  690. package/dist/interface/crud/sign-up-rules.d.ts.map +1 -1
  691. package/dist/interface/crud/svix-token.d.ts +2 -31
  692. package/dist/interface/crud/svix-token.js +2 -4
  693. package/dist/interface/crud/svix-token.js.map +1 -1
  694. package/dist/interface/crud/team-invitation-details.d.ts +5 -6
  695. package/dist/interface/crud/team-invitation-details.d.ts.map +1 -1
  696. package/dist/interface/crud/team-invitation-details.js +4 -5
  697. package/dist/interface/crud/team-invitation-details.js.map +1 -1
  698. package/dist/interface/crud/team-invitation.d.ts +2 -54
  699. package/dist/interface/crud/team-invitation.js +4 -5
  700. package/dist/interface/crud/team-invitation.js.map +1 -1
  701. package/dist/interface/crud/team-member-profiles.d.ts +2 -286
  702. package/dist/interface/crud/team-member-profiles.js +4 -5
  703. package/dist/interface/crud/team-member-profiles.js.map +1 -1
  704. package/dist/interface/crud/team-memberships.d.ts +2 -75
  705. package/dist/interface/crud/team-memberships.js +2 -4
  706. package/dist/interface/crud/team-memberships.js.map +1 -1
  707. package/dist/interface/crud/team-permissions.d.ts +2 -169
  708. package/dist/interface/crud/team-permissions.js +4 -5
  709. package/dist/interface/crud/team-permissions.js.map +1 -1
  710. package/dist/interface/crud/teams.d.ts +2 -299
  711. package/dist/interface/crud/teams.js +5 -7
  712. package/dist/interface/crud/teams.js.map +1 -1
  713. package/dist/interface/crud/transactions.d.ts +2 -183
  714. package/dist/interface/crud/transactions.js +2 -4
  715. package/dist/interface/crud/transactions.js.map +1 -1
  716. package/dist/interface/crud/users.d.ts +2 -653
  717. package/dist/interface/crud/users.js +12 -8
  718. package/dist/interface/crud/users.js.map +1 -1
  719. package/dist/interface/handler-urls.d.ts +2 -51
  720. package/dist/interface/handler-urls.js +12 -14
  721. package/dist/interface/page-component-versions.d.ts +2 -25
  722. package/dist/interface/page-component-versions.js +2 -4
  723. package/dist/interface/page-component-versions.js.map +1 -1
  724. package/dist/interface/plan-usage.d.ts +2 -57
  725. package/dist/interface/plan-usage.js +2 -4
  726. package/dist/interface/plan-usage.js.map +1 -1
  727. package/dist/interface/server-interface.d.ts +2 -257
  728. package/dist/interface/server-interface.js +3 -5
  729. package/dist/interface/server-interface.js.map +1 -1
  730. package/dist/interface/webhooks.d.ts +2 -326
  731. package/dist/interface/webhooks.js +2 -4
  732. package/dist/interface/webhooks.js.map +1 -1
  733. package/dist/internal-api-keys-D8IYDodH.d.ts +139 -0
  734. package/dist/internal-api-keys-D8IYDodH.d.ts.map +1 -0
  735. package/dist/invoices-CHo9YKbI.d.ts +43 -0
  736. package/dist/invoices-CHo9YKbI.d.ts.map +1 -0
  737. package/dist/items-DlLSlVUD.d.ts +29 -0
  738. package/dist/items-DlLSlVUD.d.ts.map +1 -0
  739. package/dist/json-a1QIXu5z.d.ts +15 -0
  740. package/dist/json-a1QIXu5z.d.ts.map +1 -0
  741. package/dist/known-errors-Bm4a61wL.d.ts +575 -0
  742. package/dist/known-errors-Bm4a61wL.d.ts.map +1 -0
  743. package/dist/known-errors.d.ts +2 -575
  744. package/dist/known-errors.js +11 -23
  745. package/dist/known-errors.js.map +1 -1
  746. package/dist/notification-preferences-Bmzr_EOY.d.ts +37 -0
  747. package/dist/notification-preferences-Bmzr_EOY.d.ts.map +1 -0
  748. package/dist/oauth-providers-BMkKSSlA.d.ts +185 -0
  749. package/dist/oauth-providers-BMkKSSlA.d.ts.map +1 -0
  750. package/dist/objects-DkCkeBWE.d.ts +59 -0
  751. package/dist/objects-DkCkeBWE.d.ts.map +1 -0
  752. package/dist/passkey-CKg87UH-.d.ts +2 -0
  753. package/dist/payments/payment-methods.d.ts.map +1 -1
  754. package/dist/payments/payment-methods.js +2 -3
  755. package/dist/payments/payment-methods.js.map +1 -1
  756. package/dist/payments/stripe-limits.d.ts.map +1 -1
  757. package/dist/payments/stripe-limits.js +2 -3
  758. package/dist/payments/stripe-limits.js.map +1 -1
  759. package/dist/plan-usage-DfDoj5K4.d.ts +57 -0
  760. package/dist/plan-usage-DfDoj5K4.d.ts.map +1 -0
  761. package/dist/plans.d.ts.map +1 -1
  762. package/dist/plans.js +2 -3
  763. package/dist/plans.js.map +1 -1
  764. package/dist/products-Bs74ld-v.d.ts +182 -0
  765. package/dist/products-Bs74ld-v.d.ts.map +1 -0
  766. package/dist/project-api-keys--7V5X_UW.d.ts +203 -0
  767. package/dist/project-api-keys--7V5X_UW.d.ts.map +1 -0
  768. package/dist/project-permissions-kdi675F-.d.ts +160 -0
  769. package/dist/project-permissions-kdi675F-.d.ts.map +1 -0
  770. package/dist/projects-CFTNXRfG.d.ts +900 -0
  771. package/dist/projects-CFTNXRfG.d.ts.map +1 -0
  772. package/dist/results-DP3BzoL6.d.ts +70 -0
  773. package/dist/results-DP3BzoL6.d.ts.map +1 -0
  774. package/dist/{chunk-BE-pF4vm.js → rolldown-runtime-D6vf50IK.js} +12 -18
  775. package/dist/schema-CJwkGkdf.d.ts +2328 -0
  776. package/dist/schema-CJwkGkdf.d.ts.map +1 -0
  777. package/dist/schema-fields-DqGQ4kF7.d.ts +517 -0
  778. package/dist/schema-fields-DqGQ4kF7.d.ts.map +1 -0
  779. package/dist/schema-fields.d.ts +3 -518
  780. package/dist/schema-fields.js +21 -82
  781. package/dist/schema-fields.js.map +1 -1
  782. package/dist/server-interface-CgpxsLT_.d.ts +257 -0
  783. package/dist/server-interface-CgpxsLT_.d.ts.map +1 -0
  784. package/dist/session-replays-CXqhDpZq.d.ts +83 -0
  785. package/dist/session-replays-CXqhDpZq.d.ts.map +1 -0
  786. package/dist/sessions-B7Ko2Ldr.d.ts +149 -0
  787. package/dist/sessions-B7Ko2Ldr.d.ts.map +1 -0
  788. package/dist/sessions-d8qtvBUB.d.ts +175 -0
  789. package/dist/sessions-d8qtvBUB.d.ts.map +1 -0
  790. package/dist/sessions.d.ts +2 -175
  791. package/dist/sessions.js +4 -5
  792. package/dist/sessions.js.map +1 -1
  793. package/dist/sessions.test.js +1 -3
  794. package/dist/sessions.test.js.map +1 -1
  795. package/dist/strings-DWgkUybS.d.ts +76 -0
  796. package/dist/strings-DWgkUybS.d.ts.map +1 -0
  797. package/dist/svix-token-BsMrLGvy.d.ts +30 -0
  798. package/dist/svix-token-BsMrLGvy.d.ts.map +1 -0
  799. package/dist/team-invitation-Cyqt9oWw.d.ts +53 -0
  800. package/dist/team-invitation-Cyqt9oWw.d.ts.map +1 -0
  801. package/dist/team-member-profiles-BoDEqx-0.d.ts +285 -0
  802. package/dist/team-member-profiles-BoDEqx-0.d.ts.map +1 -0
  803. package/dist/team-memberships-DZHk2A5b.d.ts +74 -0
  804. package/dist/team-memberships-DZHk2A5b.d.ts.map +1 -0
  805. package/dist/team-permissions-DqOpaOWh.d.ts +168 -0
  806. package/dist/team-permissions-DqOpaOWh.d.ts.map +1 -0
  807. package/dist/teams-CQMcBnjM.d.ts +298 -0
  808. package/dist/teams-CQMcBnjM.d.ts.map +1 -0
  809. package/dist/transactions-DhnbvGH5.d.ts +182 -0
  810. package/dist/transactions-DhnbvGH5.d.ts.map +1 -0
  811. package/dist/types-DfTcxNtM.d.ts +77 -0
  812. package/dist/types-DfTcxNtM.d.ts.map +1 -0
  813. package/dist/users-DHNRwoSz.d.ts +653 -0
  814. package/dist/users-DHNRwoSz.d.ts.map +1 -0
  815. package/dist/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  816. package/dist/utils/analytics-clickmap-overlay.js +2 -3
  817. package/dist/utils/analytics-clickmap-overlay.js.map +1 -1
  818. package/dist/utils/api-keys.d.ts.map +1 -1
  819. package/dist/utils/api-keys.js +4 -5
  820. package/dist/utils/api-keys.js.map +1 -1
  821. package/dist/utils/arrays.d.ts.map +1 -1
  822. package/dist/utils/arrays.js +2 -472
  823. package/dist/utils/arrays.js.map +1 -1
  824. package/dist/utils/auth-methods.d.ts.map +1 -1
  825. package/dist/utils/auth-methods.js +2 -3
  826. package/dist/utils/auth-methods.js.map +1 -1
  827. package/dist/utils/base64.d.ts.map +1 -1
  828. package/dist/utils/base64.js +2 -12
  829. package/dist/utils/base64.js.map +1 -1
  830. package/dist/utils/booleans.d.ts.map +1 -1
  831. package/dist/utils/booleans.js +2 -27
  832. package/dist/utils/booleans.js.map +1 -1
  833. package/dist/utils/browser-compat.d.ts.map +1 -1
  834. package/dist/utils/browser-compat.js +2 -3
  835. package/dist/utils/browser-compat.js.map +1 -1
  836. package/dist/utils/bytes.d.ts.map +1 -1
  837. package/dist/utils/bytes.js +4 -200
  838. package/dist/utils/bytes.js.map +1 -1
  839. package/dist/utils/caches.d.ts.map +1 -1
  840. package/dist/utils/caches.js +2 -29
  841. package/dist/utils/caches.js.map +1 -1
  842. package/dist/utils/cel-fields.d.ts.map +1 -1
  843. package/dist/utils/cel-fields.js +2 -4
  844. package/dist/utils/cel-fields.js.map +1 -1
  845. package/dist/utils/cloud-hosts.d.ts.map +1 -1
  846. package/dist/utils/cloud-hosts.js +2 -29
  847. package/dist/utils/cloud-hosts.js.map +1 -1
  848. package/dist/utils/compile-time.d.ts.map +1 -1
  849. package/dist/utils/compile-time.js +2 -3
  850. package/dist/utils/compile-time.js.map +1 -1
  851. package/dist/utils/country-codes.d.ts +2 -11
  852. package/dist/utils/country-codes.js +2 -18
  853. package/dist/utils/country-codes.js.map +1 -1
  854. package/dist/utils/crypto.d.ts.map +1 -1
  855. package/dist/utils/crypto.js +4 -115
  856. package/dist/utils/crypto.js.map +1 -1
  857. package/dist/utils/currencies.d.ts +1 -1
  858. package/dist/utils/currencies.d.ts.map +1 -1
  859. package/dist/utils/currencies.js +3 -39
  860. package/dist/utils/currencies.js.map +1 -1
  861. package/dist/utils/currency-constants.d.ts +2 -45
  862. package/dist/utils/currency-constants.js +2 -3
  863. package/dist/utils/currency-constants.js.map +1 -1
  864. package/dist/utils/dates.d.ts +2 -23
  865. package/dist/utils/dates.js +2 -46
  866. package/dist/utils/dates.js.map +1 -1
  867. package/dist/utils/dev-env-state-path.d.ts.map +1 -1
  868. package/dist/utils/dev-env-state-path.js +2 -4
  869. package/dist/utils/dev-env-state-path.js.map +1 -1
  870. package/dist/utils/dev-tool.d.ts.map +1 -1
  871. package/dist/utils/dev-tool.js +2 -3
  872. package/dist/utils/dev-tool.js.map +1 -1
  873. package/dist/utils/dom.d.ts.map +1 -1
  874. package/dist/utils/dom.js +2 -3
  875. package/dist/utils/dom.js.map +1 -1
  876. package/dist/utils/elements-chain.d.ts.map +1 -1
  877. package/dist/utils/elements-chain.js +6 -52
  878. package/dist/utils/elements-chain.js.map +1 -1
  879. package/dist/utils/env.d.ts.map +1 -1
  880. package/dist/utils/env.js +2 -4
  881. package/dist/utils/env.js.map +1 -1
  882. package/dist/utils/env.test.js +1 -3
  883. package/dist/utils/env.test.js.map +1 -1
  884. package/dist/utils/errors.d.ts +2 -238
  885. package/dist/utils/errors.js +2 -4
  886. package/dist/utils/errors.js.map +1 -1
  887. package/dist/utils/esbuild.d.ts +1 -1
  888. package/dist/utils/esbuild.d.ts.map +1 -1
  889. package/dist/utils/esbuild.js +5 -6
  890. package/dist/utils/esbuild.js.map +1 -1
  891. package/dist/utils/featurebase.d.ts.map +1 -1
  892. package/dist/utils/featurebase.js +2 -4
  893. package/dist/utils/featurebase.js.map +1 -1
  894. package/dist/utils/fs.d.ts.map +1 -1
  895. package/dist/utils/fs.js +5 -6
  896. package/dist/utils/fs.js.map +1 -1
  897. package/dist/utils/functions.d.ts.map +1 -1
  898. package/dist/utils/functions.js +2 -26
  899. package/dist/utils/functions.js.map +1 -1
  900. package/dist/utils/geo.d.ts.map +1 -1
  901. package/dist/utils/geo.js +2 -4
  902. package/dist/utils/geo.js.map +1 -1
  903. package/dist/utils/globals.d.ts.map +1 -1
  904. package/dist/utils/globals.js +2 -3
  905. package/dist/utils/globals.js.map +1 -1
  906. package/dist/utils/hashes.d.ts.map +1 -1
  907. package/dist/utils/hashes.js +4 -5
  908. package/dist/utils/hashes.js.map +1 -1
  909. package/dist/utils/html.d.ts.map +1 -1
  910. package/dist/utils/html.js +2 -21
  911. package/dist/utils/html.js.map +1 -1
  912. package/dist/utils/http.d.ts.map +1 -1
  913. package/dist/utils/http.js +2 -21
  914. package/dist/utils/http.js.map +1 -1
  915. package/dist/utils/ips.d.ts.map +1 -1
  916. package/dist/utils/ips.js +4 -28
  917. package/dist/utils/ips.js.map +1 -1
  918. package/dist/utils/json.d.ts +2 -15
  919. package/dist/utils/json.js +2 -157
  920. package/dist/utils/json.js.map +1 -1
  921. package/dist/utils/jsx-editable-transpiler.d.ts.map +1 -1
  922. package/dist/utils/jsx-editable-transpiler.js +7 -8
  923. package/dist/utils/jsx-editable-transpiler.js.map +1 -1
  924. package/dist/utils/jsx-editable-transpiler.test.js +1 -3
  925. package/dist/utils/jsx-editable-transpiler.test.js.map +1 -1
  926. package/dist/utils/jwt.d.ts.map +1 -1
  927. package/dist/utils/jwt.js +6 -7
  928. package/dist/utils/jwt.js.map +1 -1
  929. package/dist/utils/locks.d.ts.map +1 -1
  930. package/dist/utils/locks.js +2 -4
  931. package/dist/utils/locks.js.map +1 -1
  932. package/dist/utils/maps.d.ts.map +1 -1
  933. package/dist/utils/maps.js +2 -113
  934. package/dist/utils/maps.js.map +1 -1
  935. package/dist/utils/math.d.ts.map +1 -1
  936. package/dist/utils/math.js +2 -13
  937. package/dist/utils/math.js.map +1 -1
  938. package/dist/utils/monkey-patch.d.ts.map +1 -1
  939. package/dist/utils/monkey-patch.js +3 -5
  940. package/dist/utils/monkey-patch.js.map +1 -1
  941. package/dist/utils/node-http.js +2 -4
  942. package/dist/utils/node-http.js.map +1 -1
  943. package/dist/utils/numbers.d.ts.map +1 -1
  944. package/dist/utils/numbers.js +2 -47
  945. package/dist/utils/numbers.js.map +1 -1
  946. package/dist/utils/oauth.d.ts.map +1 -1
  947. package/dist/utils/oauth.js +2 -3
  948. package/dist/utils/oauth.js.map +1 -1
  949. package/dist/utils/objects.d.ts +2 -59
  950. package/dist/utils/objects.js +2 -624
  951. package/dist/utils/objects.js.map +1 -1
  952. package/dist/utils/paginated-lists.d.ts.map +1 -1
  953. package/dist/utils/paginated-lists.js +2 -4
  954. package/dist/utils/paginated-lists.js.map +1 -1
  955. package/dist/utils/paginated-lists.test.js +1 -3
  956. package/dist/utils/paginated-lists.test.js.map +1 -1
  957. package/dist/utils/passkey.d.ts +2 -2
  958. package/dist/utils/promises.d.ts +1 -1
  959. package/dist/utils/promises.d.ts.map +1 -1
  960. package/dist/utils/promises.js +3 -163
  961. package/dist/utils/promises.js.map +1 -1
  962. package/dist/utils/proxies.d.ts.map +1 -1
  963. package/dist/utils/proxies.js +2 -39
  964. package/dist/utils/proxies.js.map +1 -1
  965. package/dist/utils/react.d.ts.map +1 -1
  966. package/dist/utils/react.js +4 -44
  967. package/dist/utils/react.js.map +1 -1
  968. package/dist/utils/redirect-urls.d.ts.map +1 -1
  969. package/dist/utils/redirect-urls.js +3 -94
  970. package/dist/utils/redirect-urls.js.map +1 -1
  971. package/dist/utils/regex.js +2 -3
  972. package/dist/utils/regex.js.map +1 -1
  973. package/dist/utils/results.d.ts +2 -70
  974. package/dist/utils/results.js +2 -215
  975. package/dist/utils/results.js.map +1 -1
  976. package/dist/utils/sentry.js +2 -3
  977. package/dist/utils/sentry.js.map +1 -1
  978. package/dist/utils/stores.d.ts +1 -1
  979. package/dist/utils/stores.d.ts.map +1 -1
  980. package/dist/utils/stores.js +2 -4
  981. package/dist/utils/stores.js.map +1 -1
  982. package/dist/utils/strings.d.ts +2 -76
  983. package/dist/utils/strings.js +2 -253
  984. package/dist/utils/strings.js.map +1 -1
  985. package/dist/utils/strings.nicify.test.js +1 -3
  986. package/dist/utils/strings.nicify.test.js.map +1 -1
  987. package/dist/utils/telemetry.d.ts.map +1 -1
  988. package/dist/utils/telemetry.js +2 -4
  989. package/dist/utils/telemetry.js.map +1 -1
  990. package/dist/utils/turnstile-browser.d.ts.map +1 -1
  991. package/dist/utils/turnstile-browser.js +2 -4
  992. package/dist/utils/turnstile-browser.js.map +1 -1
  993. package/dist/utils/turnstile-flow.d.ts.map +1 -1
  994. package/dist/utils/turnstile-flow.js +2 -4
  995. package/dist/utils/turnstile-flow.js.map +1 -1
  996. package/dist/utils/turnstile-flow.test.js +1 -3
  997. package/dist/utils/turnstile-flow.test.js.map +1 -1
  998. package/dist/utils/turnstile.d.ts.map +1 -1
  999. package/dist/utils/turnstile.js +2 -3
  1000. package/dist/utils/turnstile.js.map +1 -1
  1001. package/dist/utils/typed-arrays.js +2 -4
  1002. package/dist/utils/typed-arrays.js.map +1 -1
  1003. package/dist/utils/types.d.ts +2 -77
  1004. package/dist/utils/types.js +2 -3
  1005. package/dist/utils/types.js.map +1 -1
  1006. package/dist/utils/unicode.d.ts.map +1 -1
  1007. package/dist/utils/unicode.js +2 -15
  1008. package/dist/utils/unicode.js.map +1 -1
  1009. package/dist/utils/urls.d.ts.map +1 -1
  1010. package/dist/utils/urls.js +2 -153
  1011. package/dist/utils/urls.js.map +1 -1
  1012. package/dist/utils/uuids.d.ts.map +1 -1
  1013. package/dist/utils/uuids.js +3 -28
  1014. package/dist/utils/uuids.js.map +1 -1
  1015. package/dist/webhooks-8Ts1Clcb.d.ts +326 -0
  1016. package/dist/webhooks-8Ts1Clcb.d.ts.map +1 -0
  1017. package/package.json +2 -8
  1018. package/src/interface/client-interface.test.ts +77 -12
  1019. package/src/interface/client-interface.ts +9 -9
  1020. package/dist/config/format.d.ts.map +0 -1
  1021. package/dist/config/schema.d.ts.map +0 -1
  1022. package/dist/crud.d.ts.map +0 -1
  1023. package/dist/interface/admin-interface.d.ts.map +0 -1
  1024. package/dist/interface/admin-metrics.d.ts.map +0 -1
  1025. package/dist/interface/client-interface.d.ts.map +0 -1
  1026. package/dist/interface/crud/analytics.d.ts.map +0 -1
  1027. package/dist/interface/crud/connected-accounts.d.ts.map +0 -1
  1028. package/dist/interface/crud/contact-channels.d.ts.map +0 -1
  1029. package/dist/interface/crud/current-user.d.ts.map +0 -1
  1030. package/dist/interface/crud/emails.d.ts.map +0 -1
  1031. package/dist/interface/crud/internal-api-keys.d.ts.map +0 -1
  1032. package/dist/interface/crud/invoices.d.ts.map +0 -1
  1033. package/dist/interface/crud/items.d.ts.map +0 -1
  1034. package/dist/interface/crud/notification-preferences.d.ts.map +0 -1
  1035. package/dist/interface/crud/oauth-providers.d.ts.map +0 -1
  1036. package/dist/interface/crud/products.d.ts.map +0 -1
  1037. package/dist/interface/crud/project-api-keys.d.ts.map +0 -1
  1038. package/dist/interface/crud/project-permissions.d.ts.map +0 -1
  1039. package/dist/interface/crud/projects.d.ts.map +0 -1
  1040. package/dist/interface/crud/session-replays.d.ts.map +0 -1
  1041. package/dist/interface/crud/sessions.d.ts.map +0 -1
  1042. package/dist/interface/crud/svix-token.d.ts.map +0 -1
  1043. package/dist/interface/crud/team-invitation.d.ts.map +0 -1
  1044. package/dist/interface/crud/team-member-profiles.d.ts.map +0 -1
  1045. package/dist/interface/crud/team-memberships.d.ts.map +0 -1
  1046. package/dist/interface/crud/team-permissions.d.ts.map +0 -1
  1047. package/dist/interface/crud/teams.d.ts.map +0 -1
  1048. package/dist/interface/crud/transactions.d.ts.map +0 -1
  1049. package/dist/interface/crud/users.d.ts.map +0 -1
  1050. package/dist/interface/handler-urls.d.ts.map +0 -1
  1051. package/dist/interface/page-component-versions.d.ts.map +0 -1
  1052. package/dist/interface/plan-usage.d.ts.map +0 -1
  1053. package/dist/interface/server-interface.d.ts.map +0 -1
  1054. package/dist/interface/webhooks.d.ts.map +0 -1
  1055. package/dist/known-errors.d.ts.map +0 -1
  1056. package/dist/schema-fields.d.ts.map +0 -1
  1057. package/dist/sessions.d.ts.map +0 -1
  1058. package/dist/utils/country-codes.d.ts.map +0 -1
  1059. package/dist/utils/currency-constants.d.ts.map +0 -1
  1060. package/dist/utils/dates.d.ts.map +0 -1
  1061. package/dist/utils/errors.d.ts.map +0 -1
  1062. package/dist/utils/json.d.ts.map +0 -1
  1063. package/dist/utils/objects.d.ts.map +0 -1
  1064. package/dist/utils/results.d.ts.map +0 -1
  1065. package/dist/utils/strings.d.ts.map +0 -1
  1066. package/dist/utils/types.d.ts.map +0 -1
@@ -1,6 +1,5 @@
1
1
  import { join } from "path";
2
2
  import { homedir } from "os";
3
-
4
3
  //#region src/utils/dev-env-state-path.ts
5
4
  function defaultHexclaveDevEnvStatePath() {
6
5
  if (process.platform === "win32") return join(process.env.LOCALAPPDATA ?? join(homedir(), "AppData", "Local"), "Hexclave", "dev-envs.json");
@@ -9,7 +8,7 @@ function defaultHexclaveDevEnvStatePath() {
9
8
  function hexclaveDevEnvStatePath() {
10
9
  return process.env.STACK_DEV_ENVS_PATH ?? defaultHexclaveDevEnvStatePath();
11
10
  }
12
-
13
11
  //#endregion
14
12
  export { defaultHexclaveDevEnvStatePath, hexclaveDevEnvStatePath };
13
+
15
14
  //# sourceMappingURL=dev-env-state-path.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev-env-state-path.js","names":[],"sources":["../../../src/utils/dev-env-state-path.ts"],"sourcesContent":["import { homedir } from \"os\";\nimport { join } from \"path\";\n\nexport function defaultHexclaveDevEnvStatePath(): string {\n if (process.platform === \"win32\") {\n const localAppData = process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\");\n return join(localAppData, \"Hexclave\", \"dev-envs.json\");\n }\n return join(homedir(), \".stack\", \"dev-envs.json\");\n}\n\nexport function hexclaveDevEnvStatePath(): string {\n return process.env.STACK_DEV_ENVS_PATH ?? defaultHexclaveDevEnvStatePath();\n}\n"],"mappings":";;;;AAGA,SAAgB,iCAAyC;AACvD,KAAI,QAAQ,aAAa,QAEvB,QAAO,KADc,QAAQ,IAAI,gBAAgB,KAAK,SAAS,EAAE,WAAW,QAAQ,EAC1D,YAAY,gBAAgB;AAExD,QAAO,KAAK,SAAS,EAAE,UAAU,gBAAgB;;AAGnD,SAAgB,0BAAkC;AAChD,QAAO,QAAQ,IAAI,uBAAuB,gCAAgC"}
1
+ {"version":3,"file":"dev-env-state-path.js","names":[],"sources":["../../../src/utils/dev-env-state-path.ts"],"sourcesContent":["import { homedir } from \"os\";\nimport { join } from \"path\";\n\nexport function defaultHexclaveDevEnvStatePath(): string {\n if (process.platform === \"win32\") {\n const localAppData = process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\");\n return join(localAppData, \"Hexclave\", \"dev-envs.json\");\n }\n return join(homedir(), \".stack\", \"dev-envs.json\");\n}\n\nexport function hexclaveDevEnvStatePath(): string {\n return process.env.STACK_DEV_ENVS_PATH ?? defaultHexclaveDevEnvStatePath();\n}\n"],"mappings":";;;AAGA,SAAgB,iCAAyC;CACvD,IAAI,QAAQ,aAAa,SAEvB,OAAO,KADc,QAAQ,IAAI,gBAAgB,KAAK,QAAQ,GAAG,WAAW,OAAO,GACzD,YAAY,eAAe;CAEvD,OAAO,KAAK,QAAQ,GAAG,UAAU,eAAe;AAClD;AAEA,SAAgB,0BAAkC;CAChD,OAAO,QAAQ,IAAI,uBAAuB,+BAA+B;AAC3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"dev-tool.d.ts","names":[],"sources":["../../../src/utils/dev-tool.tsx"],"mappings":";;AAeA;;;;;AAQA;;;;;AAGA;;;;cAXa,gBAAA;AAcb;;;;;;AAAA,cANa,gBAAA;;cAGA,qBAAA;;cAGA,qBAAA"}
1
+ {"version":3,"file":"dev-tool.d.ts","names":[],"sources":["../../../src/utils/dev-tool.tsx"],"mappings":";;AAeA;;;;AAA6B;AAQ7B;;;;AAA6B;AAG7B;;;;cAXa,gBAAA;AAcb;;;;AAAkC;;AAAlC,cANa,gBAAA;;cAGA,qBAAA;;cAGA,qBAAA"}
@@ -26,7 +26,7 @@ const CLICKMAP_ROOT_ID = "__hexclave-clickmap-root";
26
26
  const DEV_TOOL_CLASS_PREFIX = "sdt-";
27
27
  /** Legacy class marker still present on older dev-tool builds. */
28
28
  const DEV_TOOL_LEGACY_CLASS = "stack-devtool";
29
-
30
29
  //#endregion
31
30
  export { CLICKMAP_ROOT_ID, DEV_TOOL_CLASS_PREFIX, DEV_TOOL_LEGACY_CLASS, DEV_TOOL_ROOT_ID };
31
+
32
32
  //# sourceMappingURL=dev-tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.ts","names":[],"sources":["../../../src/utils/dom.tsx"],"mappings":";iBAAgB,kBAAA,CAAmB,OAAA,EAAS,WAAA;AAA5C;;;;;AAAA,iBAagB,cAAA,CAAe,KAAA"}
1
+ {"version":3,"file":"dom.d.ts","names":[],"sources":["../../../src/utils/dom.tsx"],"mappings":";iBAAgB,kBAAA,CAAmB,OAAoB,EAAX,WAAW;AAAvD;;;;AAAuD;AAAvD,iBAagB,cAAA,CAAe,KAAa"}
@@ -24,7 +24,7 @@ function cssEscapeIdent(value) {
24
24
  }
25
25
  return escaped;
26
26
  }
27
-
28
27
  //#endregion
29
28
  export { cssEscapeIdent, hasClickableParent };
29
+
30
30
  //# sourceMappingURL=dom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","names":[],"sources":["../../../src/utils/dom.tsx"],"sourcesContent":["export function hasClickableParent(element: HTMLElement): boolean {\n const parent = element.parentElement;\n if (!parent) return false;\n if (parent.dataset.n2Clickable) return true;\n\n return hasClickableParent(element.parentElement);\n}\n\n/**\n * Escape a string so it is safe to use as a CSS identifier (id/class) inside a selector.\n * Prefers the native `CSS.escape` when available, falling back to a conservative\n * backslash-escape for non-DOM environments (SSR, tests, older runtimes).\n */\nexport function cssEscapeIdent(value: string): string {\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\n return CSS.escape(value);\n }\n\n let escaped = \"\";\n for (let i = 0; i < value.length; i += 1) {\n const char = value.charAt(i);\n const codeUnit = value.charCodeAt(i);\n\n if (codeUnit === 0x0000) {\n escaped += \"\\uFFFD\";\n } else if (\n (codeUnit >= 0x0001 && codeUnit <= 0x001f) ||\n codeUnit === 0x007f ||\n (i === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n (i === 1 && codeUnit >= 0x0030 && codeUnit <= 0x0039 && value.charCodeAt(0) === 0x002d)\n ) {\n escaped += `\\\\${codeUnit.toString(16)} `;\n } else if (i === 0 && codeUnit === 0x002d && value.length === 1) {\n escaped += \"\\\\-\";\n } else if (\n codeUnit >= 0x0080 ||\n codeUnit === 0x002d ||\n codeUnit === 0x005f ||\n (codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n (codeUnit >= 0x0041 && codeUnit <= 0x005a) ||\n (codeUnit >= 0x0061 && codeUnit <= 0x007a)\n ) {\n escaped += char;\n } else {\n escaped += `\\\\${char}`;\n }\n }\n return escaped;\n}\n"],"mappings":";AAAA,SAAgB,mBAAmB,SAA+B;CAChE,MAAM,SAAS,QAAQ;AACvB,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,OAAO,QAAQ,YAAa,QAAO;AAEvC,QAAO,mBAAmB,QAAQ,cAAc;;;;;;;AAQlD,SAAgB,eAAe,OAAuB;AACpD,KAAI,OAAO,QAAQ,eAAe,OAAO,IAAI,WAAW,WACtD,QAAO,IAAI,OAAO,MAAM;CAG1B,IAAI,UAAU;AACd,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxC,MAAM,OAAO,MAAM,OAAO,EAAE;EAC5B,MAAM,WAAW,MAAM,WAAW,EAAE;AAEpC,MAAI,aAAa,EACf,YAAW;WAEV,YAAY,KAAU,YAAY,MACnC,aAAa,OACZ,MAAM,KAAK,YAAY,MAAU,YAAY,MAC7C,MAAM,KAAK,YAAY,MAAU,YAAY,MAAU,MAAM,WAAW,EAAE,KAAK,GAEhF,YAAW,KAAK,SAAS,SAAS,GAAG,CAAC;WAC7B,MAAM,KAAK,aAAa,MAAU,MAAM,WAAW,EAC5D,YAAW;WAEX,YAAY,OACZ,aAAa,MACb,aAAa,MACZ,YAAY,MAAU,YAAY,MAClC,YAAY,MAAU,YAAY,MAClC,YAAY,MAAU,YAAY,IAEnC,YAAW;MAEX,YAAW,KAAK;;AAGpB,QAAO"}
1
+ {"version":3,"file":"dom.js","names":[],"sources":["../../../src/utils/dom.tsx"],"sourcesContent":["export function hasClickableParent(element: HTMLElement): boolean {\n const parent = element.parentElement;\n if (!parent) return false;\n if (parent.dataset.n2Clickable) return true;\n\n return hasClickableParent(element.parentElement);\n}\n\n/**\n * Escape a string so it is safe to use as a CSS identifier (id/class) inside a selector.\n * Prefers the native `CSS.escape` when available, falling back to a conservative\n * backslash-escape for non-DOM environments (SSR, tests, older runtimes).\n */\nexport function cssEscapeIdent(value: string): string {\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\n return CSS.escape(value);\n }\n\n let escaped = \"\";\n for (let i = 0; i < value.length; i += 1) {\n const char = value.charAt(i);\n const codeUnit = value.charCodeAt(i);\n\n if (codeUnit === 0x0000) {\n escaped += \"\\uFFFD\";\n } else if (\n (codeUnit >= 0x0001 && codeUnit <= 0x001f) ||\n codeUnit === 0x007f ||\n (i === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n (i === 1 && codeUnit >= 0x0030 && codeUnit <= 0x0039 && value.charCodeAt(0) === 0x002d)\n ) {\n escaped += `\\\\${codeUnit.toString(16)} `;\n } else if (i === 0 && codeUnit === 0x002d && value.length === 1) {\n escaped += \"\\\\-\";\n } else if (\n codeUnit >= 0x0080 ||\n codeUnit === 0x002d ||\n codeUnit === 0x005f ||\n (codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n (codeUnit >= 0x0041 && codeUnit <= 0x005a) ||\n (codeUnit >= 0x0061 && codeUnit <= 0x007a)\n ) {\n escaped += char;\n } else {\n escaped += `\\\\${char}`;\n }\n }\n return escaped;\n}\n"],"mappings":";AAAA,SAAgB,mBAAmB,SAA+B;CAChE,MAAM,SAAS,QAAQ;CACvB,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,OAAO,QAAQ,aAAa,OAAO;CAEvC,OAAO,mBAAmB,QAAQ,aAAa;AACjD;;;;;;AAOA,SAAgB,eAAe,OAAuB;CACpD,IAAI,OAAO,QAAQ,eAAe,OAAO,IAAI,WAAW,YACtD,OAAO,IAAI,OAAO,KAAK;CAGzB,IAAI,UAAU;CACd,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxC,MAAM,OAAO,MAAM,OAAO,CAAC;EAC3B,MAAM,WAAW,MAAM,WAAW,CAAC;EAEnC,IAAI,aAAa,GACf,WAAW;OACN,IACJ,YAAY,KAAU,YAAY,MACnC,aAAa,OACZ,MAAM,KAAK,YAAY,MAAU,YAAY,MAC7C,MAAM,KAAK,YAAY,MAAU,YAAY,MAAU,MAAM,WAAW,CAAC,MAAM,IAEhF,WAAW,KAAK,SAAS,SAAS,EAAE,EAAE;OACjC,IAAI,MAAM,KAAK,aAAa,MAAU,MAAM,WAAW,GAC5D,WAAW;OACN,IACL,YAAY,OACZ,aAAa,MACb,aAAa,MACZ,YAAY,MAAU,YAAY,MAClC,YAAY,MAAU,YAAY,MAClC,YAAY,MAAU,YAAY,KAEnC,WAAW;OAEX,WAAW,KAAK;CAEpB;CACA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"elements-chain.d.ts","names":[],"sources":["../../../src/utils/elements-chain.tsx"],"mappings":";;AAeA;;;;;;;;;;;;;KAAY,oBAAA;EACV,GAAA;EACA,OAAA;EACA,KAAA,EAAO,MAAA;EACP,IAAA;EACA,QAAA;EACA,SAAA;EACA,IAAA;AAAA;AAAA,cAGW,wBAAA;AAAA,cACA,uBAAA;AAAA,cACA,uBAAA;AAAA,cAKA,oBAAA;;;;AAAb;iBAyFgB,kBAAA,CAAmB,OAAA,EAAS,OAAA;;iBA0K5B,kBAAA,CAAmB,KAAA,WAAgB,oBAAA"}
1
+ {"version":3,"file":"elements-chain.d.ts","names":[],"sources":["../../../src/utils/elements-chain.tsx"],"mappings":";;AAeA;;;;;;;;;;;;;KAAY,oBAAA;EACV,GAAA;EACA,OAAA;EACA,KAAA,EAAO,MAAM;EACb,IAAA;EACA,QAAA;EACA,SAAA;EACA,IAAA;AAAA;AAAA,cAGW,wBAAA;AAAA,cACA,uBAAA;AAAA,cACA,uBAAA;AAAA,cAKA,oBAAA;;;AALuB;AAKpC;iBAyFgB,kBAAA,CAAmB,OAAgB,EAAP,OAAO;;iBA0KnC,kBAAA,CAAmB,KAAA,WAAgB,oBAAoB"}
@@ -45,7 +45,7 @@ function serializeElementsChainSegment(element) {
45
45
  parts.push(element.tagName.toLowerCase());
46
46
  const classes = getElementClasses(element);
47
47
  if (classes.length > 0) parts.push(`.${classes.map(escapeElementsChainClass).join(".")}`);
48
- const text = element.textContent.trim().replace(/\s+/g, " ").slice(0, ELEMENTS_CHAIN_TEXT_MAX);
48
+ const text = element.textContent.trim().replace(/\s+/g, " ").slice(0, 80);
49
49
  const nthChild = getNthChildIndex(element);
50
50
  const nthOfType = getNthOfTypeIndex(element);
51
51
  const attrPairs = [];
@@ -55,11 +55,11 @@ function serializeElementsChainSegment(element) {
55
55
  for (const attrName of ELEMENTS_CHAIN_ATTRS) {
56
56
  const value = element.getAttribute(attrName);
57
57
  if (value == null || value === "") continue;
58
- attrPairs.push(`attr__${attrName}="${escapeElementsChainValue(value.slice(0, ELEMENTS_CHAIN_ATTR_MAX))}"`);
58
+ attrPairs.push(`attr__${attrName}="${escapeElementsChainValue(value.slice(0, 200))}"`);
59
59
  }
60
60
  if (element.tagName === "A") {
61
61
  const href = element.getAttribute("href");
62
- if (href != null && href !== "") attrPairs.push(`href="${escapeElementsChainValue(href.slice(0, ELEMENTS_CHAIN_ATTR_MAX))}"`);
62
+ if (href != null && href !== "") attrPairs.push(`href="${escapeElementsChainValue(href.slice(0, 200))}"`);
63
63
  }
64
64
  if (attrPairs.length > 0) parts.push(`:${attrPairs.join(":")}`);
65
65
  return parts.join("");
@@ -72,7 +72,7 @@ function buildElementsChain(element) {
72
72
  const segments = [];
73
73
  let current = element;
74
74
  let depth = 0;
75
- while (current != null && depth < ELEMENTS_CHAIN_MAX_DEPTH && current !== document.documentElement) {
75
+ while (current != null && depth < 8 && current !== document.documentElement) {
76
76
  segments.push(serializeElementsChainSegment(current));
77
77
  current = current.parentElement;
78
78
  depth += 1;
@@ -246,52 +246,7 @@ function parseElementsChain(chain) {
246
246
  if (current.length > 0) segments.push(current);
247
247
  return segments.map(parseElementsChainSegment).filter((segment) => segment != null);
248
248
  }
249
- (void 0)?.test("parseElementsChain parses a simple leaf+ancestor chain", ({ expect }) => {
250
- expect(parseElementsChain("button.btn.btn-primary:nth-of-type=\"1\":text=\"Save\":attr__id=\"save-btn\";div.container")).toEqual([{
251
- tag: "button",
252
- classes: ["btn", "btn-primary"],
253
- attrs: { id: "save-btn" },
254
- text: "Save",
255
- nthChild: null,
256
- nthOfType: 1,
257
- href: null
258
- }, {
259
- tag: "div",
260
- classes: ["container"],
261
- attrs: {},
262
- text: null,
263
- nthChild: null,
264
- nthOfType: null,
265
- href: null
266
- }]);
267
- });
268
- (void 0)?.test("parseElementsChain reverses class escaping for Tailwind-style tokens", ({ expect }) => {
269
- expect(parseElementsChain("a.md\\:hover\\:bg-blue-500.w-\\[1\\.5rem\\]:href=\"/p?a=1\"")).toEqual([{
270
- tag: "a",
271
- classes: ["md:hover:bg-blue-500", "w-[1.5rem]"],
272
- attrs: { href: "/p?a=1" },
273
- text: null,
274
- nthChild: null,
275
- nthOfType: null,
276
- href: "/p?a=1"
277
- }]);
278
- });
279
- (void 0)?.test("parseElementsChain unescapes quotes/backslashes and ignores ';' inside quoted values", ({ expect }) => {
280
- expect(parseElementsChain("span:text=\"a \\\"b\\\"; c \\\\ d\"")).toEqual([{
281
- tag: "span",
282
- classes: [],
283
- attrs: {},
284
- text: "a \"b\"; c \\ d",
285
- nthChild: null,
286
- nthOfType: null,
287
- href: null
288
- }]);
289
- });
290
- (void 0)?.test("parseElementsChain drops empty/tagless segments", ({ expect }) => {
291
- expect(parseElementsChain("")).toEqual([]);
292
- expect(parseElementsChain(";;")).toEqual([]);
293
- });
294
-
295
249
  //#endregion
296
250
  export { ELEMENTS_CHAIN_ATTRS, ELEMENTS_CHAIN_ATTR_MAX, ELEMENTS_CHAIN_MAX_DEPTH, ELEMENTS_CHAIN_TEXT_MAX, buildElementsChain, parseElementsChain };
251
+
297
252
  //# sourceMappingURL=elements-chain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"elements-chain.js","names":[],"sources":["../../../src/utils/elements-chain.tsx"],"sourcesContent":["/**\n * PostHog-style `elements_chain` format — the single owner of both halves of the\n * contract. The event tracker {@link buildElementsChain serializes} a clicked\n * element (and its ancestors) into a string; the clickmap overlay\n * {@link parseElementsChain parses} that string back into structured segments so\n * it can re-locate the element in a live DOM.\n *\n * Encode and decode MUST round-trip exactly, which is why they live together:\n * the escaping applied here on the write side is reversed by the parser below,\n * and a single round-trip test in `elements-chain.test.tsx` guards the pair.\n *\n * Segment shape (leaf-first, joined by `;`):\n * tag.class1.class2:nth-child=\"2\":nth-of-type=\"1\":text=\"Save\":attr__id=\"x\":href=\"...\"\n */\n\nexport type ElementsChainSegment = {\n tag: string,\n classes: string[],\n attrs: Record<string, string>,\n text: string | null,\n nthChild: number | null,\n nthOfType: number | null,\n href: string | null,\n};\n\nexport const ELEMENTS_CHAIN_MAX_DEPTH = 8;\nexport const ELEMENTS_CHAIN_TEXT_MAX = 80;\nexport const ELEMENTS_CHAIN_ATTR_MAX = 200;\n\n// Attributes we serialise into elements_chain. Mirrors the set PostHog persists:\n// stable identifiers (id, data-testid), semantics (role, type, name, aria-label),\n// and a few we expect downstream tooling to want to match against.\nexport const ELEMENTS_CHAIN_ATTRS = [\n \"id\",\n \"data-testid\",\n \"data-test-id\",\n \"data-hexclave-id\",\n \"name\",\n \"type\",\n \"role\",\n \"aria-label\",\n \"placeholder\",\n \"title\",\n] as const;\n\n// ---------------------------------------------------------------------------\n// Serialization (DOM element -> elements_chain string)\n// ---------------------------------------------------------------------------\n\nfunction escapeElementsChainValue(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\n// Class tokens are written into the unquoted, dot-joined prefix of a segment, so\n// any \".\" or \":\" inside a class (e.g. Tailwind variants like `md:hover:bg-blue-500`\n// or arbitrary values like `w-[1.5rem]`) must be escaped to round-trip through the\n// parser, which splits the prefix on unescaped \".\" and the segment on unescaped \":\".\nfunction escapeElementsChainClass(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\./g, \"\\\\.\").replace(/:/g, \"\\\\:\");\n}\n\nfunction getElementClasses(element: Element): string[] {\n const className = (element as HTMLElement).className;\n if (typeof className !== \"string\" || className.trim() === \"\") {\n return [];\n }\n return className.trim().split(/\\s+/).filter(Boolean).slice(0, 4);\n}\n\nfunction getNthChildIndex(element: Element): number | null {\n const parent = element.parentElement;\n if (parent == null) return null;\n const index = Array.prototype.indexOf.call(parent.children, element);\n return index >= 0 ? index + 1 : null;\n}\n\nfunction getNthOfTypeIndex(element: Element): number | null {\n const parent = element.parentElement;\n if (parent == null) return null;\n const tagName = element.tagName;\n const siblings = Array.from(parent.children).filter((child) => child.tagName === tagName);\n if (siblings.length <= 1) return null;\n const index = siblings.indexOf(element);\n return index >= 0 ? index + 1 : null;\n}\n\nfunction serializeElementsChainSegment(element: Element): string {\n const parts: string[] = [];\n parts.push(element.tagName.toLowerCase());\n const classes = getElementClasses(element);\n if (classes.length > 0) {\n parts.push(`.${classes.map(escapeElementsChainClass).join(\".\")}`);\n }\n const text = element.textContent.trim().replace(/\\s+/g, \" \").slice(0, ELEMENTS_CHAIN_TEXT_MAX);\n const nthChild = getNthChildIndex(element);\n const nthOfType = getNthOfTypeIndex(element);\n const attrPairs: string[] = [];\n if (nthChild != null) attrPairs.push(`nth-child=\"${nthChild}\"`);\n if (nthOfType != null) attrPairs.push(`nth-of-type=\"${nthOfType}\"`);\n if (text !== \"\") attrPairs.push(`text=\"${escapeElementsChainValue(text)}\"`);\n for (const attrName of ELEMENTS_CHAIN_ATTRS) {\n const value = element.getAttribute(attrName);\n if (value == null || value === \"\") continue;\n attrPairs.push(`attr__${attrName}=\"${escapeElementsChainValue(value.slice(0, ELEMENTS_CHAIN_ATTR_MAX))}\"`);\n }\n if (element.tagName === \"A\") {\n const href = element.getAttribute(\"href\");\n if (href != null && href !== \"\") {\n attrPairs.push(`href=\"${escapeElementsChainValue(href.slice(0, ELEMENTS_CHAIN_ATTR_MAX))}\"`);\n }\n }\n if (attrPairs.length > 0) {\n parts.push(`:${attrPairs.join(\":\")}`);\n }\n return parts.join(\"\");\n}\n\n/**\n * Serialise a clicked element and up to {@link ELEMENTS_CHAIN_MAX_DEPTH}\n * ancestors (leaf-first) into an `elements_chain` string.\n */\nexport function buildElementsChain(element: Element): string {\n const segments: string[] = [];\n let current: Element | null = element;\n let depth = 0;\n while (current != null && depth < ELEMENTS_CHAIN_MAX_DEPTH && current !== document.documentElement) {\n segments.push(serializeElementsChainSegment(current));\n current = current.parentElement;\n depth += 1;\n }\n return segments.join(\";\");\n}\n\n// ---------------------------------------------------------------------------\n// Parsing (elements_chain string -> structured segments)\n// ---------------------------------------------------------------------------\n\n// Split a string on unescaped occurrences of `.`, unescaping `\\.`, `\\:` and `\\\\`\n// back to their literal characters. Reverses `escapeElementsChainClass`.\nfunction splitEscapedDots(input: string): string[] {\n const out: string[] = [];\n let cur = '';\n for (let i = 0; i < input.length; i++) {\n const ch = input[i];\n if (ch === '\\\\' && i + 1 < input.length) {\n cur += input[i + 1];\n i += 1;\n continue;\n }\n if (ch === '.') {\n out.push(cur);\n cur = '';\n continue;\n }\n cur += ch;\n }\n out.push(cur);\n return out;\n}\n\ntype ElementsChainAttrResult = {\n nthChild?: number,\n nthOfType?: number,\n text?: string,\n href?: string,\n attrKey?: string,\n attrValue?: string,\n};\n\nfunction applyElementsChainAttr(key: string, value: string): ElementsChainAttrResult {\n if (key === 'nth-child') {\n const n = Number.parseInt(value, 10);\n return Number.isFinite(n) ? { nthChild: n } : {};\n }\n if (key === 'nth-of-type') {\n const n = Number.parseInt(value, 10);\n return Number.isFinite(n) ? { nthOfType: n } : {};\n }\n if (key === 'text') {\n return { text: value };\n }\n if (key === 'href') {\n return { href: value, attrKey: key, attrValue: value };\n }\n if (key.startsWith('attr__')) {\n return { attrKey: key.slice('attr__'.length), attrValue: value };\n }\n return { attrKey: key, attrValue: value };\n}\n\nfunction parseElementsChainSegment(segment: string): ElementsChainSegment | null {\n const trimmed = segment.trim();\n if (trimmed === '') return null;\n\n // Find first ':' at top level — separates tag/classes prefix from attribute pairs.\n let prefixEnd = trimmed.length;\n let inQuotes = false;\n for (let i = 0; i < trimmed.length; i++) {\n const ch = trimmed[i];\n if (ch === '\\\\' && i + 1 < trimmed.length) {\n i += 1;\n continue;\n }\n if (ch === '\"') {\n inQuotes = !inQuotes;\n continue;\n }\n if (ch === ':' && !inQuotes) {\n prefixEnd = i;\n break;\n }\n }\n\n const prefix = trimmed.slice(0, prefixEnd);\n const rest = trimmed.slice(prefixEnd);\n const prefixParts = splitEscapedDots(prefix);\n const tag = prefixParts[0].trim().toLowerCase();\n if (tag === '') return null;\n const classes = prefixParts.slice(1).map((c) => c.trim()).filter((c) => c !== '');\n\n const attrs: Record<string, string> = {};\n let nthChild: number | null = null;\n let nthOfType: number | null = null;\n let text: string | null = null;\n let href: string | null = null;\n\n // Parse :key=\"value\" pairs from rest.\n let i = 0;\n while (i < rest.length) {\n if (rest[i] !== ':') {\n i += 1;\n continue;\n }\n i += 1; // skip ':'\n // read key up to '='\n let keyEnd = i;\n while (keyEnd < rest.length && rest[keyEnd] !== '=' && rest[keyEnd] !== ':') keyEnd += 1;\n const key = rest.slice(i, keyEnd).trim();\n if (keyEnd >= rest.length || rest[keyEnd] !== '=') {\n i = keyEnd;\n continue;\n }\n let valStart = keyEnd + 1;\n if (rest[valStart] !== '\"') {\n // unquoted — read until next ':' at top level\n let end = valStart;\n while (end < rest.length && rest[end] !== ':') end += 1;\n const value = rest.slice(valStart, end);\n const result = applyElementsChainAttr(key, value);\n if (result.nthChild != null) nthChild = result.nthChild;\n if (result.nthOfType != null) nthOfType = result.nthOfType;\n if (result.text != null) text = result.text;\n if (result.href != null) href = result.href;\n if (result.attrKey != null) attrs[result.attrKey] = result.attrValue ?? '';\n i = end;\n continue;\n }\n // quoted value — find unescaped closing quote\n valStart += 1;\n let end = valStart;\n let value = '';\n while (end < rest.length) {\n const ch = rest[end];\n if (ch === '\\\\' && end + 1 < rest.length) {\n const next = rest[end + 1];\n if (next === '\"' || next === '\\\\') {\n value += next;\n end += 2;\n continue;\n }\n value += ch;\n end += 1;\n continue;\n }\n if (ch === '\"') break;\n value += ch;\n end += 1;\n }\n const result = applyElementsChainAttr(key, value);\n if (result.nthChild != null) nthChild = result.nthChild;\n if (result.nthOfType != null) nthOfType = result.nthOfType;\n if (result.text != null) text = result.text;\n if (result.href != null) href = result.href;\n if (result.attrKey != null) attrs[result.attrKey] = result.attrValue ?? '';\n i = end + 1; // skip closing quote\n }\n\n return { tag, classes, attrs, text, nthChild, nthOfType, href };\n}\n\n/** Parse an `elements_chain` string into structured, leaf-first segments. */\nexport function parseElementsChain(chain: string): ElementsChainSegment[] {\n // Split top-level by ';' respecting quoted strings.\n const segments: string[] = [];\n let current = '';\n let inQuotes = false;\n for (let i = 0; i < chain.length; i++) {\n const ch = chain[i];\n if (ch === '\\\\' && i + 1 < chain.length) {\n current += ch + chain[i + 1];\n i += 1;\n continue;\n }\n if (ch === '\"') {\n inQuotes = !inQuotes;\n current += ch;\n continue;\n }\n if (ch === ';' && !inQuotes) {\n segments.push(current);\n current = '';\n continue;\n }\n current += ch;\n }\n if (current.length > 0) {\n segments.push(current);\n }\n return segments.map(parseElementsChainSegment).filter((segment): segment is ElementsChainSegment => segment != null);\n}\n\nimport.meta.vitest?.test(\"parseElementsChain parses a simple leaf+ancestor chain\", ({ expect }) => {\n const parsed = parseElementsChain('button.btn.btn-primary:nth-of-type=\"1\":text=\"Save\":attr__id=\"save-btn\";div.container');\n expect(parsed).toEqual([\n { tag: \"button\", classes: [\"btn\", \"btn-primary\"], attrs: { id: \"save-btn\" }, text: \"Save\", nthChild: null, nthOfType: 1, href: null },\n { tag: \"div\", classes: [\"container\"], attrs: {}, text: null, nthChild: null, nthOfType: null, href: null },\n ]);\n});\n\nimport.meta.vitest?.test(\"parseElementsChain reverses class escaping for Tailwind-style tokens\", ({ expect }) => {\n // `md:hover:bg-blue-500` and `w-[1.5rem]` contain the prefix delimiters `:`/`.`,\n // so the serializer escapes them; the parser must recover the literal classes.\n const parsed = parseElementsChain('a.md\\\\:hover\\\\:bg-blue-500.w-\\\\[1\\\\.5rem\\\\]:href=\"/p?a=1\"');\n expect(parsed).toEqual([\n { tag: \"a\", classes: [\"md:hover:bg-blue-500\", \"w-[1.5rem]\"], attrs: { href: \"/p?a=1\" }, text: null, nthChild: null, nthOfType: null, href: \"/p?a=1\" },\n ]);\n});\n\nimport.meta.vitest?.test(\"parseElementsChain unescapes quotes/backslashes and ignores ';' inside quoted values\", ({ expect }) => {\n const parsed = parseElementsChain('span:text=\"a \\\\\"b\\\\\"; c \\\\\\\\ d\"');\n expect(parsed).toEqual([\n { tag: \"span\", classes: [], attrs: {}, text: 'a \"b\"; c \\\\ d', nthChild: null, nthOfType: null, href: null },\n ]);\n});\n\nimport.meta.vitest?.test(\"parseElementsChain drops empty/tagless segments\", ({ expect }) => {\n expect(parseElementsChain(\"\")).toEqual([]);\n expect(parseElementsChain(\";;\")).toEqual([]);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"elements-chain.js","names":[],"sources":["../../../src/utils/elements-chain.tsx"],"sourcesContent":["/**\n * PostHog-style `elements_chain` format — the single owner of both halves of the\n * contract. The event tracker {@link buildElementsChain serializes} a clicked\n * element (and its ancestors) into a string; the clickmap overlay\n * {@link parseElementsChain parses} that string back into structured segments so\n * it can re-locate the element in a live DOM.\n *\n * Encode and decode MUST round-trip exactly, which is why they live together:\n * the escaping applied here on the write side is reversed by the parser below,\n * and a single round-trip test in `elements-chain.test.tsx` guards the pair.\n *\n * Segment shape (leaf-first, joined by `;`):\n * tag.class1.class2:nth-child=\"2\":nth-of-type=\"1\":text=\"Save\":attr__id=\"x\":href=\"...\"\n */\n\nexport type ElementsChainSegment = {\n tag: string,\n classes: string[],\n attrs: Record<string, string>,\n text: string | null,\n nthChild: number | null,\n nthOfType: number | null,\n href: string | null,\n};\n\nexport const ELEMENTS_CHAIN_MAX_DEPTH = 8;\nexport const ELEMENTS_CHAIN_TEXT_MAX = 80;\nexport const ELEMENTS_CHAIN_ATTR_MAX = 200;\n\n// Attributes we serialise into elements_chain. Mirrors the set PostHog persists:\n// stable identifiers (id, data-testid), semantics (role, type, name, aria-label),\n// and a few we expect downstream tooling to want to match against.\nexport const ELEMENTS_CHAIN_ATTRS = [\n \"id\",\n \"data-testid\",\n \"data-test-id\",\n \"data-hexclave-id\",\n \"name\",\n \"type\",\n \"role\",\n \"aria-label\",\n \"placeholder\",\n \"title\",\n] as const;\n\n// ---------------------------------------------------------------------------\n// Serialization (DOM element -> elements_chain string)\n// ---------------------------------------------------------------------------\n\nfunction escapeElementsChainValue(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\n// Class tokens are written into the unquoted, dot-joined prefix of a segment, so\n// any \".\" or \":\" inside a class (e.g. Tailwind variants like `md:hover:bg-blue-500`\n// or arbitrary values like `w-[1.5rem]`) must be escaped to round-trip through the\n// parser, which splits the prefix on unescaped \".\" and the segment on unescaped \":\".\nfunction escapeElementsChainClass(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\./g, \"\\\\.\").replace(/:/g, \"\\\\:\");\n}\n\nfunction getElementClasses(element: Element): string[] {\n const className = (element as HTMLElement).className;\n if (typeof className !== \"string\" || className.trim() === \"\") {\n return [];\n }\n return className.trim().split(/\\s+/).filter(Boolean).slice(0, 4);\n}\n\nfunction getNthChildIndex(element: Element): number | null {\n const parent = element.parentElement;\n if (parent == null) return null;\n const index = Array.prototype.indexOf.call(parent.children, element);\n return index >= 0 ? index + 1 : null;\n}\n\nfunction getNthOfTypeIndex(element: Element): number | null {\n const parent = element.parentElement;\n if (parent == null) return null;\n const tagName = element.tagName;\n const siblings = Array.from(parent.children).filter((child) => child.tagName === tagName);\n if (siblings.length <= 1) return null;\n const index = siblings.indexOf(element);\n return index >= 0 ? index + 1 : null;\n}\n\nfunction serializeElementsChainSegment(element: Element): string {\n const parts: string[] = [];\n parts.push(element.tagName.toLowerCase());\n const classes = getElementClasses(element);\n if (classes.length > 0) {\n parts.push(`.${classes.map(escapeElementsChainClass).join(\".\")}`);\n }\n const text = element.textContent.trim().replace(/\\s+/g, \" \").slice(0, ELEMENTS_CHAIN_TEXT_MAX);\n const nthChild = getNthChildIndex(element);\n const nthOfType = getNthOfTypeIndex(element);\n const attrPairs: string[] = [];\n if (nthChild != null) attrPairs.push(`nth-child=\"${nthChild}\"`);\n if (nthOfType != null) attrPairs.push(`nth-of-type=\"${nthOfType}\"`);\n if (text !== \"\") attrPairs.push(`text=\"${escapeElementsChainValue(text)}\"`);\n for (const attrName of ELEMENTS_CHAIN_ATTRS) {\n const value = element.getAttribute(attrName);\n if (value == null || value === \"\") continue;\n attrPairs.push(`attr__${attrName}=\"${escapeElementsChainValue(value.slice(0, ELEMENTS_CHAIN_ATTR_MAX))}\"`);\n }\n if (element.tagName === \"A\") {\n const href = element.getAttribute(\"href\");\n if (href != null && href !== \"\") {\n attrPairs.push(`href=\"${escapeElementsChainValue(href.slice(0, ELEMENTS_CHAIN_ATTR_MAX))}\"`);\n }\n }\n if (attrPairs.length > 0) {\n parts.push(`:${attrPairs.join(\":\")}`);\n }\n return parts.join(\"\");\n}\n\n/**\n * Serialise a clicked element and up to {@link ELEMENTS_CHAIN_MAX_DEPTH}\n * ancestors (leaf-first) into an `elements_chain` string.\n */\nexport function buildElementsChain(element: Element): string {\n const segments: string[] = [];\n let current: Element | null = element;\n let depth = 0;\n while (current != null && depth < ELEMENTS_CHAIN_MAX_DEPTH && current !== document.documentElement) {\n segments.push(serializeElementsChainSegment(current));\n current = current.parentElement;\n depth += 1;\n }\n return segments.join(\";\");\n}\n\n// ---------------------------------------------------------------------------\n// Parsing (elements_chain string -> structured segments)\n// ---------------------------------------------------------------------------\n\n// Split a string on unescaped occurrences of `.`, unescaping `\\.`, `\\:` and `\\\\`\n// back to their literal characters. Reverses `escapeElementsChainClass`.\nfunction splitEscapedDots(input: string): string[] {\n const out: string[] = [];\n let cur = '';\n for (let i = 0; i < input.length; i++) {\n const ch = input[i];\n if (ch === '\\\\' && i + 1 < input.length) {\n cur += input[i + 1];\n i += 1;\n continue;\n }\n if (ch === '.') {\n out.push(cur);\n cur = '';\n continue;\n }\n cur += ch;\n }\n out.push(cur);\n return out;\n}\n\ntype ElementsChainAttrResult = {\n nthChild?: number,\n nthOfType?: number,\n text?: string,\n href?: string,\n attrKey?: string,\n attrValue?: string,\n};\n\nfunction applyElementsChainAttr(key: string, value: string): ElementsChainAttrResult {\n if (key === 'nth-child') {\n const n = Number.parseInt(value, 10);\n return Number.isFinite(n) ? { nthChild: n } : {};\n }\n if (key === 'nth-of-type') {\n const n = Number.parseInt(value, 10);\n return Number.isFinite(n) ? { nthOfType: n } : {};\n }\n if (key === 'text') {\n return { text: value };\n }\n if (key === 'href') {\n return { href: value, attrKey: key, attrValue: value };\n }\n if (key.startsWith('attr__')) {\n return { attrKey: key.slice('attr__'.length), attrValue: value };\n }\n return { attrKey: key, attrValue: value };\n}\n\nfunction parseElementsChainSegment(segment: string): ElementsChainSegment | null {\n const trimmed = segment.trim();\n if (trimmed === '') return null;\n\n // Find first ':' at top level — separates tag/classes prefix from attribute pairs.\n let prefixEnd = trimmed.length;\n let inQuotes = false;\n for (let i = 0; i < trimmed.length; i++) {\n const ch = trimmed[i];\n if (ch === '\\\\' && i + 1 < trimmed.length) {\n i += 1;\n continue;\n }\n if (ch === '\"') {\n inQuotes = !inQuotes;\n continue;\n }\n if (ch === ':' && !inQuotes) {\n prefixEnd = i;\n break;\n }\n }\n\n const prefix = trimmed.slice(0, prefixEnd);\n const rest = trimmed.slice(prefixEnd);\n const prefixParts = splitEscapedDots(prefix);\n const tag = prefixParts[0].trim().toLowerCase();\n if (tag === '') return null;\n const classes = prefixParts.slice(1).map((c) => c.trim()).filter((c) => c !== '');\n\n const attrs: Record<string, string> = {};\n let nthChild: number | null = null;\n let nthOfType: number | null = null;\n let text: string | null = null;\n let href: string | null = null;\n\n // Parse :key=\"value\" pairs from rest.\n let i = 0;\n while (i < rest.length) {\n if (rest[i] !== ':') {\n i += 1;\n continue;\n }\n i += 1; // skip ':'\n // read key up to '='\n let keyEnd = i;\n while (keyEnd < rest.length && rest[keyEnd] !== '=' && rest[keyEnd] !== ':') keyEnd += 1;\n const key = rest.slice(i, keyEnd).trim();\n if (keyEnd >= rest.length || rest[keyEnd] !== '=') {\n i = keyEnd;\n continue;\n }\n let valStart = keyEnd + 1;\n if (rest[valStart] !== '\"') {\n // unquoted — read until next ':' at top level\n let end = valStart;\n while (end < rest.length && rest[end] !== ':') end += 1;\n const value = rest.slice(valStart, end);\n const result = applyElementsChainAttr(key, value);\n if (result.nthChild != null) nthChild = result.nthChild;\n if (result.nthOfType != null) nthOfType = result.nthOfType;\n if (result.text != null) text = result.text;\n if (result.href != null) href = result.href;\n if (result.attrKey != null) attrs[result.attrKey] = result.attrValue ?? '';\n i = end;\n continue;\n }\n // quoted value — find unescaped closing quote\n valStart += 1;\n let end = valStart;\n let value = '';\n while (end < rest.length) {\n const ch = rest[end];\n if (ch === '\\\\' && end + 1 < rest.length) {\n const next = rest[end + 1];\n if (next === '\"' || next === '\\\\') {\n value += next;\n end += 2;\n continue;\n }\n value += ch;\n end += 1;\n continue;\n }\n if (ch === '\"') break;\n value += ch;\n end += 1;\n }\n const result = applyElementsChainAttr(key, value);\n if (result.nthChild != null) nthChild = result.nthChild;\n if (result.nthOfType != null) nthOfType = result.nthOfType;\n if (result.text != null) text = result.text;\n if (result.href != null) href = result.href;\n if (result.attrKey != null) attrs[result.attrKey] = result.attrValue ?? '';\n i = end + 1; // skip closing quote\n }\n\n return { tag, classes, attrs, text, nthChild, nthOfType, href };\n}\n\n/** Parse an `elements_chain` string into structured, leaf-first segments. */\nexport function parseElementsChain(chain: string): ElementsChainSegment[] {\n // Split top-level by ';' respecting quoted strings.\n const segments: string[] = [];\n let current = '';\n let inQuotes = false;\n for (let i = 0; i < chain.length; i++) {\n const ch = chain[i];\n if (ch === '\\\\' && i + 1 < chain.length) {\n current += ch + chain[i + 1];\n i += 1;\n continue;\n }\n if (ch === '\"') {\n inQuotes = !inQuotes;\n current += ch;\n continue;\n }\n if (ch === ';' && !inQuotes) {\n segments.push(current);\n current = '';\n continue;\n }\n current += ch;\n }\n if (current.length > 0) {\n segments.push(current);\n }\n return segments.map(parseElementsChainSegment).filter((segment): segment is ElementsChainSegment => segment != null);\n}\n\nimport.meta.vitest?.test(\"parseElementsChain parses a simple leaf+ancestor chain\", ({ expect }) => {\n const parsed = parseElementsChain('button.btn.btn-primary:nth-of-type=\"1\":text=\"Save\":attr__id=\"save-btn\";div.container');\n expect(parsed).toEqual([\n { tag: \"button\", classes: [\"btn\", \"btn-primary\"], attrs: { id: \"save-btn\" }, text: \"Save\", nthChild: null, nthOfType: 1, href: null },\n { tag: \"div\", classes: [\"container\"], attrs: {}, text: null, nthChild: null, nthOfType: null, href: null },\n ]);\n});\n\nimport.meta.vitest?.test(\"parseElementsChain reverses class escaping for Tailwind-style tokens\", ({ expect }) => {\n // `md:hover:bg-blue-500` and `w-[1.5rem]` contain the prefix delimiters `:`/`.`,\n // so the serializer escapes them; the parser must recover the literal classes.\n const parsed = parseElementsChain('a.md\\\\:hover\\\\:bg-blue-500.w-\\\\[1\\\\.5rem\\\\]:href=\"/p?a=1\"');\n expect(parsed).toEqual([\n { tag: \"a\", classes: [\"md:hover:bg-blue-500\", \"w-[1.5rem]\"], attrs: { href: \"/p?a=1\" }, text: null, nthChild: null, nthOfType: null, href: \"/p?a=1\" },\n ]);\n});\n\nimport.meta.vitest?.test(\"parseElementsChain unescapes quotes/backslashes and ignores ';' inside quoted values\", ({ expect }) => {\n const parsed = parseElementsChain('span:text=\"a \\\\\"b\\\\\"; c \\\\\\\\ d\"');\n expect(parsed).toEqual([\n { tag: \"span\", classes: [], attrs: {}, text: 'a \"b\"; c \\\\ d', nthChild: null, nthOfType: null, href: null },\n ]);\n});\n\nimport.meta.vitest?.test(\"parseElementsChain drops empty/tagless segments\", ({ expect }) => {\n expect(parseElementsChain(\"\")).toEqual([]);\n expect(parseElementsChain(\";;\")).toEqual([]);\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","names":[],"sources":["../../../src/utils/env.tsx"],"mappings":";iBAGgB,aAAA,CAAA;AAAA,iBASA,+BAAA,CAAgC,YAAA,UAAsB,SAAA,UAAmB,aAAA,sBAAmC,UAAA;;;;iBAgC5G,cAAA,CAAe,IAAA,UAAc,YAAA;AAAA,iBAgD7B,aAAA,CAAc,IAAA;AAAA,iBAWd,cAAA,CAAA;AAAA,iBAKA,kBAAA,CAAA;;;;;;;;AAhEhB;;;;;iBAgFgB,aAAA,CAAc,IAAA"}
1
+ {"version":3,"file":"env.d.ts","names":[],"sources":["../../../src/utils/env.tsx"],"mappings":";iBAGgB,aAAA;AAAA,iBASA,+BAAA,CAAgC,YAAA,UAAsB,SAAA,UAAmB,aAAA,sBAAmC,UAAA;;;;iBAgC5G,cAAA,CAAe,IAAA,UAAc,YAAiC;AAAA,iBAgD9D,aAAA,CAAc,IAAY;AAAA,iBAW1B,cAAA;AAAA,iBAKA,kBAAA;;;;;;;AAhG0I;AAgC1J;;;;AAA8E;iBAgF9D,aAAA,CAAc,IAAY"}
@@ -1,6 +1,5 @@
1
1
  import { HexclaveAssertionError, throwErr } from "./errors.js";
2
2
  import { deindent } from "./strings.js";
3
-
4
3
  //#region src/utils/env.tsx
5
4
  function isBrowserLike() {
6
5
  return typeof window !== "undefined" && typeof document !== "undefined" && typeof document.createElement !== "undefined";
@@ -84,7 +83,7 @@ function getProcessEnv(name) {
84
83
  if (typeof process === "undefined" || typeof process.env === "undefined") return;
85
84
  return getEnvVarWithHexclaveFallback(name);
86
85
  }
87
-
88
86
  //#endregion
89
87
  export { getEnvBoolean, getEnvVariable, getNextRuntime, getNodeEnvironment, getProcessEnv, isBrowserLike, resolveHexclaveStackEnvVarValue };
88
+
90
89
  //# sourceMappingURL=env.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","names":[],"sources":["../../../src/utils/env.tsx"],"sourcesContent":["import { HexclaveAssertionError, throwErr } from \"./errors\";\nimport { deindent } from \"./strings\";\n\nexport function isBrowserLike() {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\" && typeof document.createElement !== \"undefined\";\n}\n\n// newName: oldName\nconst ENV_VAR_RENAME: Record<string, string[] | undefined> = {\n NEXT_PUBLIC_STACK_API_URL: ['STACK_BASE_URL', 'NEXT_PUBLIC_STACK_URL'],\n};\n\nexport function resolveHexclaveStackEnvVarValue(hexclaveName: string, stackName: string, hexclaveValue: string | undefined, stackValue: string | undefined): string | undefined {\n if (hexclaveValue && stackValue && hexclaveValue !== stackValue) {\n throw new Error(`Environment variables ${hexclaveName} and ${stackName} are both set to different values. Remove one of them or set them to the same value.`);\n }\n return hexclaveValue || stackValue || undefined;\n}\n\n/**\n * Hexclave rebrand: resolve an env var by reading both the `HEXCLAVE_*` and\n * `STACK_*` spellings, preferring the canonical Hexclave value and falling back\n * to the legacy Stack value (empty counts as unset). Works in BOTH directions —\n * whether the caller passes the legacy `STACK_FOO` name or the canonical\n * `HEXCLAVE_FOO` name, the other spelling is still honored. Covers `STACK_FOO`,\n * `NEXT_PUBLIC_STACK_FOO`, `NEXT_PUBLIC_BROWSER_STACK_FOO`,\n * `NEXT_PUBLIC_SERVER_STACK_FOO`, `VITE_STACK_FOO` and their HEXCLAVE_ twins.\n * Names with neither segment behave exactly as before.\n */\nfunction getEnvVarWithHexclaveFallback(name: string): string | undefined {\n if (name.includes(\"STACK_\")) {\n const hexclaveName = name.replace(\"STACK_\", \"HEXCLAVE_\");\n return resolveHexclaveStackEnvVarValue(hexclaveName, name, process.env[hexclaveName], process.env[name]);\n }\n if (name.includes(\"HEXCLAVE_\")) {\n const stackName = name.replace(\"HEXCLAVE_\", \"STACK_\");\n return resolveHexclaveStackEnvVarValue(name, stackName, process.env[name], process.env[stackName]);\n }\n return process.env[name];\n}\n\n/**\n * Returns the environment variable with the given name, returning the default (if given) or throwing an error (otherwise) if it's undefined or the empty string.\n */\nexport function getEnvVariable(name: string, defaultValue?: string | undefined): string {\n if (isBrowserLike()) {\n throw new Error(deindent`\n Can't use getEnvVariable on the client because Next.js transpiles expressions of the kind process.env.XYZ at build-time on the client.\n \n Use process.env.XYZ directly instead.\n `);\n }\n if (name === \"NEXT_RUNTIME\") {\n throw new Error(deindent`\n Can't use getEnvVariable to access the NEXT_RUNTIME environment variable because it's compiled into the client bundle.\n \n Use getNextRuntime() instead.\n `);\n }\n\n // throw error if the old name is used as the retrieve key\n for (const [newName, oldNames] of Object.entries(ENV_VAR_RENAME)) {\n if (oldNames?.includes(name)) {\n throwErr(`Environment variable ${name} has been renamed to ${newName}. Please update your configuration to use the new name.`);\n }\n }\n\n // Hexclave rebrand: prefer the HEXCLAVE_*-prefixed equivalent, fall back to the STACK_* name.\n // Treat the empty string as unset — the checked-in .env templates define empty\n // HEXCLAVE_* placeholders, which must not shadow a real value under the legacy name.\n let value = getEnvVarWithHexclaveFallback(name);\n\n // check the key under the old name if the new name is not found\n const renamedNames = ENV_VAR_RENAME[name];\n if (!value && renamedNames != null) {\n for (const oldName of renamedNames) {\n value = getEnvVarWithHexclaveFallback(oldName);\n if (value) break;\n }\n }\n\n if (!value) {\n if (defaultValue !== undefined) {\n value = defaultValue;\n } else {\n throwErr(`Missing environment variable: ${name}`);\n }\n }\n\n return value;\n}\n\nexport function getEnvBoolean(name: string): boolean {\n const value = getEnvVariable(name, \"false\");\n if (value === \"true\") {\n return true;\n } else if (value === \"false\") {\n return false;\n } else {\n throw new HexclaveAssertionError(`Environment variable ${name} must be either \"true\" or \"false\": found ${JSON.stringify(value)}`);\n }\n}\n\nexport function getNextRuntime() {\n // This variable is compiled into the client bundle, so we can't use getEnvVariable here.\n return process.env.NEXT_RUNTIME || throwErr(\"Missing environment variable: NEXT_RUNTIME\");\n}\n\nexport function getNodeEnvironment() {\n return getEnvVariable(\"NODE_ENV\", \"\");\n}\n\n/**\n * Browser-safe access to `process.env` for server-only or genuinely dynamic\n * env-var lookups. Returns `undefined` when `process` is not defined (e.g. in\n * a Vite browser bundle without a `process` shim).\n *\n * Note: uses `process.env[name]` (bracket form), which is NOT recognized by\n * Next.js / webpack DefinePlugin for compile-time inlining. If you need\n * build-time inlining for a `NEXT_PUBLIC_*` var, use the literal dot-form at\n * the call site, guarded with `typeof process`:\n *\n * const value = (typeof process !== \"undefined\" ? process.env.NEXT_PUBLIC_FOO : undefined);\n */\nexport function getProcessEnv(name: string): string | undefined {\n if (typeof process === \"undefined\" || typeof process.env === \"undefined\") {\n return undefined;\n }\n // Hexclave rebrand: prefer the HEXCLAVE_*-prefixed equivalent, fall back to the STACK_* name.\n // Empty counts as unset — the checked-in .env templates define empty HEXCLAVE_* placeholders,\n // which must not shadow a real value under the legacy name.\n return getEnvVarWithHexclaveFallback(name);\n}\n"],"mappings":";;;;AAGA,SAAgB,gBAAgB;AAC9B,QAAO,OAAO,WAAW,eAAe,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB;;AAI/G,MAAM,iBAAuD,EAC3D,2BAA2B,CAAC,kBAAkB,wBAAwB,EACvE;AAED,SAAgB,gCAAgC,cAAsB,WAAmB,eAAmC,YAAoD;AAC9K,KAAI,iBAAiB,cAAc,kBAAkB,WACnD,OAAM,IAAI,MAAM,yBAAyB,aAAa,OAAO,UAAU,sFAAsF;AAE/J,QAAO,iBAAiB,cAAc;;;;;;;;;;;;AAaxC,SAAS,8BAA8B,MAAkC;AACvE,KAAI,KAAK,SAAS,SAAS,EAAE;EAC3B,MAAM,eAAe,KAAK,QAAQ,UAAU,YAAY;AACxD,SAAO,gCAAgC,cAAc,MAAM,QAAQ,IAAI,eAAe,QAAQ,IAAI,MAAM;;AAE1G,KAAI,KAAK,SAAS,YAAY,EAAE;EAC9B,MAAM,YAAY,KAAK,QAAQ,aAAa,SAAS;AACrD,SAAO,gCAAgC,MAAM,WAAW,QAAQ,IAAI,OAAO,QAAQ,IAAI,WAAW;;AAEpG,QAAO,QAAQ,IAAI;;;;;AAMrB,SAAgB,eAAe,MAAc,cAA2C;AACtF,KAAI,eAAe,CACjB,OAAM,IAAI,MAAM,QAAQ;;;;MAItB;AAEJ,KAAI,SAAS,eACX,OAAM,IAAI,MAAM,QAAQ;;;;MAItB;AAIJ,MAAK,MAAM,CAAC,SAAS,aAAa,OAAO,QAAQ,eAAe,CAC9D,KAAI,UAAU,SAAS,KAAK,CAC1B,UAAS,wBAAwB,KAAK,uBAAuB,QAAQ,yDAAyD;CAOlI,IAAI,QAAQ,8BAA8B,KAAK;CAG/C,MAAM,eAAe,eAAe;AACpC,KAAI,CAAC,SAAS,gBAAgB,KAC5B,MAAK,MAAM,WAAW,cAAc;AAClC,UAAQ,8BAA8B,QAAQ;AAC9C,MAAI,MAAO;;AAIf,KAAI,CAAC,MACH,KAAI,iBAAiB,OACnB,SAAQ;KAER,UAAS,iCAAiC,OAAO;AAIrD,QAAO;;AAGT,SAAgB,cAAc,MAAuB;CACnD,MAAM,QAAQ,eAAe,MAAM,QAAQ;AAC3C,KAAI,UAAU,OACZ,QAAO;UACE,UAAU,QACnB,QAAO;KAEP,OAAM,IAAI,uBAAuB,wBAAwB,KAAK,2CAA2C,KAAK,UAAU,MAAM,GAAG;;AAIrI,SAAgB,iBAAiB;AAE/B,QAAO,QAAQ,IAAI,gBAAgB,SAAS,6CAA6C;;AAG3F,SAAgB,qBAAqB;AACnC,QAAO,eAAe,YAAY,GAAG;;;;;;;;;;;;;;AAevC,SAAgB,cAAc,MAAkC;AAC9D,KAAI,OAAO,YAAY,eAAe,OAAO,QAAQ,QAAQ,YAC3D;AAKF,QAAO,8BAA8B,KAAK"}
1
+ {"version":3,"file":"env.js","names":[],"sources":["../../../src/utils/env.tsx"],"sourcesContent":["import { HexclaveAssertionError, throwErr } from \"./errors\";\nimport { deindent } from \"./strings\";\n\nexport function isBrowserLike() {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\" && typeof document.createElement !== \"undefined\";\n}\n\n// newName: oldName\nconst ENV_VAR_RENAME: Record<string, string[] | undefined> = {\n NEXT_PUBLIC_STACK_API_URL: ['STACK_BASE_URL', 'NEXT_PUBLIC_STACK_URL'],\n};\n\nexport function resolveHexclaveStackEnvVarValue(hexclaveName: string, stackName: string, hexclaveValue: string | undefined, stackValue: string | undefined): string | undefined {\n if (hexclaveValue && stackValue && hexclaveValue !== stackValue) {\n throw new Error(`Environment variables ${hexclaveName} and ${stackName} are both set to different values. Remove one of them or set them to the same value.`);\n }\n return hexclaveValue || stackValue || undefined;\n}\n\n/**\n * Hexclave rebrand: resolve an env var by reading both the `HEXCLAVE_*` and\n * `STACK_*` spellings, preferring the canonical Hexclave value and falling back\n * to the legacy Stack value (empty counts as unset). Works in BOTH directions —\n * whether the caller passes the legacy `STACK_FOO` name or the canonical\n * `HEXCLAVE_FOO` name, the other spelling is still honored. Covers `STACK_FOO`,\n * `NEXT_PUBLIC_STACK_FOO`, `NEXT_PUBLIC_BROWSER_STACK_FOO`,\n * `NEXT_PUBLIC_SERVER_STACK_FOO`, `VITE_STACK_FOO` and their HEXCLAVE_ twins.\n * Names with neither segment behave exactly as before.\n */\nfunction getEnvVarWithHexclaveFallback(name: string): string | undefined {\n if (name.includes(\"STACK_\")) {\n const hexclaveName = name.replace(\"STACK_\", \"HEXCLAVE_\");\n return resolveHexclaveStackEnvVarValue(hexclaveName, name, process.env[hexclaveName], process.env[name]);\n }\n if (name.includes(\"HEXCLAVE_\")) {\n const stackName = name.replace(\"HEXCLAVE_\", \"STACK_\");\n return resolveHexclaveStackEnvVarValue(name, stackName, process.env[name], process.env[stackName]);\n }\n return process.env[name];\n}\n\n/**\n * Returns the environment variable with the given name, returning the default (if given) or throwing an error (otherwise) if it's undefined or the empty string.\n */\nexport function getEnvVariable(name: string, defaultValue?: string | undefined): string {\n if (isBrowserLike()) {\n throw new Error(deindent`\n Can't use getEnvVariable on the client because Next.js transpiles expressions of the kind process.env.XYZ at build-time on the client.\n \n Use process.env.XYZ directly instead.\n `);\n }\n if (name === \"NEXT_RUNTIME\") {\n throw new Error(deindent`\n Can't use getEnvVariable to access the NEXT_RUNTIME environment variable because it's compiled into the client bundle.\n \n Use getNextRuntime() instead.\n `);\n }\n\n // throw error if the old name is used as the retrieve key\n for (const [newName, oldNames] of Object.entries(ENV_VAR_RENAME)) {\n if (oldNames?.includes(name)) {\n throwErr(`Environment variable ${name} has been renamed to ${newName}. Please update your configuration to use the new name.`);\n }\n }\n\n // Hexclave rebrand: prefer the HEXCLAVE_*-prefixed equivalent, fall back to the STACK_* name.\n // Treat the empty string as unset — the checked-in .env templates define empty\n // HEXCLAVE_* placeholders, which must not shadow a real value under the legacy name.\n let value = getEnvVarWithHexclaveFallback(name);\n\n // check the key under the old name if the new name is not found\n const renamedNames = ENV_VAR_RENAME[name];\n if (!value && renamedNames != null) {\n for (const oldName of renamedNames) {\n value = getEnvVarWithHexclaveFallback(oldName);\n if (value) break;\n }\n }\n\n if (!value) {\n if (defaultValue !== undefined) {\n value = defaultValue;\n } else {\n throwErr(`Missing environment variable: ${name}`);\n }\n }\n\n return value;\n}\n\nexport function getEnvBoolean(name: string): boolean {\n const value = getEnvVariable(name, \"false\");\n if (value === \"true\") {\n return true;\n } else if (value === \"false\") {\n return false;\n } else {\n throw new HexclaveAssertionError(`Environment variable ${name} must be either \"true\" or \"false\": found ${JSON.stringify(value)}`);\n }\n}\n\nexport function getNextRuntime() {\n // This variable is compiled into the client bundle, so we can't use getEnvVariable here.\n return process.env.NEXT_RUNTIME || throwErr(\"Missing environment variable: NEXT_RUNTIME\");\n}\n\nexport function getNodeEnvironment() {\n return getEnvVariable(\"NODE_ENV\", \"\");\n}\n\n/**\n * Browser-safe access to `process.env` for server-only or genuinely dynamic\n * env-var lookups. Returns `undefined` when `process` is not defined (e.g. in\n * a Vite browser bundle without a `process` shim).\n *\n * Note: uses `process.env[name]` (bracket form), which is NOT recognized by\n * Next.js / webpack DefinePlugin for compile-time inlining. If you need\n * build-time inlining for a `NEXT_PUBLIC_*` var, use the literal dot-form at\n * the call site, guarded with `typeof process`:\n *\n * const value = (typeof process !== \"undefined\" ? process.env.NEXT_PUBLIC_FOO : undefined);\n */\nexport function getProcessEnv(name: string): string | undefined {\n if (typeof process === \"undefined\" || typeof process.env === \"undefined\") {\n return undefined;\n }\n // Hexclave rebrand: prefer the HEXCLAVE_*-prefixed equivalent, fall back to the STACK_* name.\n // Empty counts as unset — the checked-in .env templates define empty HEXCLAVE_* placeholders,\n // which must not shadow a real value under the legacy name.\n return getEnvVarWithHexclaveFallback(name);\n}\n"],"mappings":";;;AAGA,SAAgB,gBAAgB;CAC9B,OAAO,OAAO,WAAW,eAAe,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB;AAC/G;AAGA,MAAM,iBAAuD,EAC3D,2BAA2B,CAAC,kBAAkB,uBAAuB,EACvE;AAEA,SAAgB,gCAAgC,cAAsB,WAAmB,eAAmC,YAAoD;CAC9K,IAAI,iBAAiB,cAAc,kBAAkB,YACnD,MAAM,IAAI,MAAM,yBAAyB,aAAa,OAAO,UAAU,qFAAqF;CAE9J,OAAO,iBAAiB,cAAc,KAAA;AACxC;;;;;;;;;;;AAYA,SAAS,8BAA8B,MAAkC;CACvE,IAAI,KAAK,SAAS,QAAQ,GAAG;EAC3B,MAAM,eAAe,KAAK,QAAQ,UAAU,WAAW;EACvD,OAAO,gCAAgC,cAAc,MAAM,QAAQ,IAAI,eAAe,QAAQ,IAAI,KAAK;CACzG;CACA,IAAI,KAAK,SAAS,WAAW,GAAG;EAC9B,MAAM,YAAY,KAAK,QAAQ,aAAa,QAAQ;EACpD,OAAO,gCAAgC,MAAM,WAAW,QAAQ,IAAI,OAAO,QAAQ,IAAI,UAAU;CACnG;CACA,OAAO,QAAQ,IAAI;AACrB;;;;AAKA,SAAgB,eAAe,MAAc,cAA2C;CACtF,IAAI,cAAc,GAChB,MAAM,IAAI,MAAM,QAAQ;;;;KAIvB;CAEH,IAAI,SAAS,gBACX,MAAM,IAAI,MAAM,QAAQ;;;;KAIvB;CAIH,KAAK,MAAM,CAAC,SAAS,aAAa,OAAO,QAAQ,cAAc,GAC7D,IAAI,UAAU,SAAS,IAAI,GACzB,SAAS,wBAAwB,KAAK,uBAAuB,QAAQ,wDAAwD;CAOjI,IAAI,QAAQ,8BAA8B,IAAI;CAG9C,MAAM,eAAe,eAAe;CACpC,IAAI,CAAC,SAAS,gBAAgB,MAC5B,KAAK,MAAM,WAAW,cAAc;EAClC,QAAQ,8BAA8B,OAAO;EAC7C,IAAI,OAAO;CACb;CAGF,IAAI,CAAC,OACH,IAAI,iBAAiB,KAAA,GACnB,QAAQ;MAER,SAAS,iCAAiC,MAAM;CAIpD,OAAO;AACT;AAEA,SAAgB,cAAc,MAAuB;CACnD,MAAM,QAAQ,eAAe,MAAM,OAAO;CAC1C,IAAI,UAAU,QACZ,OAAO;MACF,IAAI,UAAU,SACnB,OAAO;MAEP,MAAM,IAAI,uBAAuB,wBAAwB,KAAK,2CAA2C,KAAK,UAAU,KAAK,GAAG;AAEpI;AAEA,SAAgB,iBAAiB;CAE/B,OAAO,QAAQ,IAAI,gBAAgB,SAAS,4CAA4C;AAC1F;AAEA,SAAgB,qBAAqB;CACnC,OAAO,eAAe,YAAY,EAAE;AACtC;;;;;;;;;;;;;AAcA,SAAgB,cAAc,MAAkC;CAC9D,IAAI,OAAO,YAAY,eAAe,OAAO,QAAQ,QAAQ,aAC3D;CAKF,OAAO,8BAA8B,IAAI;AAC3C"}
@@ -1,6 +1,5 @@
1
1
  import { afterEach, describe, expect, it, vi } from "vitest";
2
2
  import { getEnvVariable, getProcessEnv, resolveHexclaveStackEnvVarValue } from "./env.js";
3
-
4
3
  //#region src/utils/env.test.tsx
5
4
  afterEach(() => {
6
5
  vi.unstubAllEnvs();
@@ -43,7 +42,7 @@ describe("Hexclave/Stack env var dual-read", () => {
43
42
  expect(() => getEnvVariable("NEXT_PUBLIC_HEXCLAVE_API_URL")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);
44
43
  });
45
44
  });
46
-
47
45
  //#endregion
48
- export { };
46
+ export {};
47
+
49
48
  //# sourceMappingURL=env.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.test.js","names":[],"sources":["../../../src/utils/env.test.tsx"],"sourcesContent":["import { afterEach, describe, expect, it, vi } from \"vitest\";\nimport { getEnvVariable, getProcessEnv, resolveHexclaveStackEnvVarValue } from \"./env\";\n\nafterEach(() => {\n vi.unstubAllEnvs();\n});\n\ndescribe(\"Hexclave/Stack env var dual-read\", () => {\n it(\"falls back to the legacy Stack name when the Hexclave value is empty\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\", \"\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://stack.example.test\");\n\n expect(getEnvVariable(\"NEXT_PUBLIC_STACK_API_URL\")).toBe(\"https://stack.example.test\");\n expect(getProcessEnv(\"NEXT_PUBLIC_STACK_API_URL\")).toBe(\"https://stack.example.test\");\n });\n\n it(\"allows both names when they have the same non-empty value\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\", \"https://api.example.test\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://api.example.test\");\n\n expect(getEnvVariable(\"NEXT_PUBLIC_STACK_API_URL\")).toBe(\"https://api.example.test\");\n expect(getProcessEnv(\"NEXT_PUBLIC_STACK_API_URL\")).toBe(\"https://api.example.test\");\n });\n\n it(\"throws when both names are non-empty and different\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\", \"https://hexclave.example.test\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://stack.example.test\");\n\n expect(() => getEnvVariable(\"NEXT_PUBLIC_STACK_API_URL\")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);\n expect(() => getProcessEnv(\"NEXT_PUBLIC_STACK_API_URL\")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);\n });\n\n it(\"checks renamed legacy aliases when falling back\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_URL\", \"https://hexclave-url.example.test\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_URL\", \"https://stack-url.example.test\");\n\n expect(() => getEnvVariable(\"NEXT_PUBLIC_STACK_API_URL\")).toThrow(/NEXT_PUBLIC_HEXCLAVE_URL.*NEXT_PUBLIC_STACK_URL.*different values/);\n });\n\n it(\"returns undefined when both names are empty\", () => {\n expect(resolveHexclaveStackEnvVarValue(\"HEXCLAVE_FOO\", \"STACK_FOO\", \"\", \"\")).toBeUndefined();\n });\n\n it(\"falls back to the legacy Stack name when a canonical Hexclave name is looked up\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://stack.example.test\");\n\n // Caller passes the canonical HEXCLAVE_ name but only the legacy value is set.\n expect(getEnvVariable(\"NEXT_PUBLIC_HEXCLAVE_API_URL\")).toBe(\"https://stack.example.test\");\n expect(getProcessEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\")).toBe(\"https://stack.example.test\");\n });\n\n it(\"throws on a conflict when a canonical Hexclave name is looked up\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\", \"https://hexclave.example.test\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://stack.example.test\");\n\n expect(() => getEnvVariable(\"NEXT_PUBLIC_HEXCLAVE_API_URL\")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);\n });\n});\n"],"mappings":";;;;AAGA,gBAAgB;AACd,IAAG,eAAe;EAClB;AAEF,SAAS,0CAA0C;AACjD,IAAG,8EAA8E;AAC/E,KAAG,QAAQ,gCAAgC,GAAG;AAC9C,KAAG,QAAQ,6BAA6B,6BAA6B;AAErE,SAAO,eAAe,4BAA4B,CAAC,CAAC,KAAK,6BAA6B;AACtF,SAAO,cAAc,4BAA4B,CAAC,CAAC,KAAK,6BAA6B;GACrF;AAEF,IAAG,mEAAmE;AACpE,KAAG,QAAQ,gCAAgC,2BAA2B;AACtE,KAAG,QAAQ,6BAA6B,2BAA2B;AAEnE,SAAO,eAAe,4BAA4B,CAAC,CAAC,KAAK,2BAA2B;AACpF,SAAO,cAAc,4BAA4B,CAAC,CAAC,KAAK,2BAA2B;GACnF;AAEF,IAAG,4DAA4D;AAC7D,KAAG,QAAQ,gCAAgC,gCAAgC;AAC3E,KAAG,QAAQ,6BAA6B,6BAA6B;AAErE,eAAa,eAAe,4BAA4B,CAAC,CAAC,QAAQ,4EAA4E;AAC9I,eAAa,cAAc,4BAA4B,CAAC,CAAC,QAAQ,4EAA4E;GAC7I;AAEF,IAAG,yDAAyD;AAC1D,KAAG,QAAQ,4BAA4B,oCAAoC;AAC3E,KAAG,QAAQ,yBAAyB,iCAAiC;AAErE,eAAa,eAAe,4BAA4B,CAAC,CAAC,QAAQ,oEAAoE;GACtI;AAEF,IAAG,qDAAqD;AACtD,SAAO,gCAAgC,gBAAgB,aAAa,IAAI,GAAG,CAAC,CAAC,eAAe;GAC5F;AAEF,IAAG,yFAAyF;AAC1F,KAAG,QAAQ,6BAA6B,6BAA6B;AAGrE,SAAO,eAAe,+BAA+B,CAAC,CAAC,KAAK,6BAA6B;AACzF,SAAO,cAAc,+BAA+B,CAAC,CAAC,KAAK,6BAA6B;GACxF;AAEF,IAAG,0EAA0E;AAC3E,KAAG,QAAQ,gCAAgC,gCAAgC;AAC3E,KAAG,QAAQ,6BAA6B,6BAA6B;AAErE,eAAa,eAAe,+BAA+B,CAAC,CAAC,QAAQ,4EAA4E;GACjJ;EACF"}
1
+ {"version":3,"file":"env.test.js","names":[],"sources":["../../../src/utils/env.test.tsx"],"sourcesContent":["import { afterEach, describe, expect, it, vi } from \"vitest\";\nimport { getEnvVariable, getProcessEnv, resolveHexclaveStackEnvVarValue } from \"./env\";\n\nafterEach(() => {\n vi.unstubAllEnvs();\n});\n\ndescribe(\"Hexclave/Stack env var dual-read\", () => {\n it(\"falls back to the legacy Stack name when the Hexclave value is empty\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\", \"\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://stack.example.test\");\n\n expect(getEnvVariable(\"NEXT_PUBLIC_STACK_API_URL\")).toBe(\"https://stack.example.test\");\n expect(getProcessEnv(\"NEXT_PUBLIC_STACK_API_URL\")).toBe(\"https://stack.example.test\");\n });\n\n it(\"allows both names when they have the same non-empty value\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\", \"https://api.example.test\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://api.example.test\");\n\n expect(getEnvVariable(\"NEXT_PUBLIC_STACK_API_URL\")).toBe(\"https://api.example.test\");\n expect(getProcessEnv(\"NEXT_PUBLIC_STACK_API_URL\")).toBe(\"https://api.example.test\");\n });\n\n it(\"throws when both names are non-empty and different\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\", \"https://hexclave.example.test\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://stack.example.test\");\n\n expect(() => getEnvVariable(\"NEXT_PUBLIC_STACK_API_URL\")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);\n expect(() => getProcessEnv(\"NEXT_PUBLIC_STACK_API_URL\")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);\n });\n\n it(\"checks renamed legacy aliases when falling back\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_URL\", \"https://hexclave-url.example.test\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_URL\", \"https://stack-url.example.test\");\n\n expect(() => getEnvVariable(\"NEXT_PUBLIC_STACK_API_URL\")).toThrow(/NEXT_PUBLIC_HEXCLAVE_URL.*NEXT_PUBLIC_STACK_URL.*different values/);\n });\n\n it(\"returns undefined when both names are empty\", () => {\n expect(resolveHexclaveStackEnvVarValue(\"HEXCLAVE_FOO\", \"STACK_FOO\", \"\", \"\")).toBeUndefined();\n });\n\n it(\"falls back to the legacy Stack name when a canonical Hexclave name is looked up\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://stack.example.test\");\n\n // Caller passes the canonical HEXCLAVE_ name but only the legacy value is set.\n expect(getEnvVariable(\"NEXT_PUBLIC_HEXCLAVE_API_URL\")).toBe(\"https://stack.example.test\");\n expect(getProcessEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\")).toBe(\"https://stack.example.test\");\n });\n\n it(\"throws on a conflict when a canonical Hexclave name is looked up\", () => {\n vi.stubEnv(\"NEXT_PUBLIC_HEXCLAVE_API_URL\", \"https://hexclave.example.test\");\n vi.stubEnv(\"NEXT_PUBLIC_STACK_API_URL\", \"https://stack.example.test\");\n\n expect(() => getEnvVariable(\"NEXT_PUBLIC_HEXCLAVE_API_URL\")).toThrow(/NEXT_PUBLIC_HEXCLAVE_API_URL.*NEXT_PUBLIC_STACK_API_URL.*different values/);\n });\n});\n"],"mappings":";;;AAGA,gBAAgB;CACd,GAAG,cAAc;AACnB,CAAC;AAED,SAAS,0CAA0C;CACjD,GAAG,8EAA8E;EAC/E,GAAG,QAAQ,gCAAgC,EAAE;EAC7C,GAAG,QAAQ,6BAA6B,4BAA4B;EAEpE,OAAO,eAAe,2BAA2B,CAAC,CAAC,CAAC,KAAK,4BAA4B;EACrF,OAAO,cAAc,2BAA2B,CAAC,CAAC,CAAC,KAAK,4BAA4B;CACtF,CAAC;CAED,GAAG,mEAAmE;EACpE,GAAG,QAAQ,gCAAgC,0BAA0B;EACrE,GAAG,QAAQ,6BAA6B,0BAA0B;EAElE,OAAO,eAAe,2BAA2B,CAAC,CAAC,CAAC,KAAK,0BAA0B;EACnF,OAAO,cAAc,2BAA2B,CAAC,CAAC,CAAC,KAAK,0BAA0B;CACpF,CAAC;CAED,GAAG,4DAA4D;EAC7D,GAAG,QAAQ,gCAAgC,+BAA+B;EAC1E,GAAG,QAAQ,6BAA6B,4BAA4B;EAEpE,aAAa,eAAe,2BAA2B,CAAC,CAAC,CAAC,QAAQ,2EAA2E;EAC7I,aAAa,cAAc,2BAA2B,CAAC,CAAC,CAAC,QAAQ,2EAA2E;CAC9I,CAAC;CAED,GAAG,yDAAyD;EAC1D,GAAG,QAAQ,4BAA4B,mCAAmC;EAC1E,GAAG,QAAQ,yBAAyB,gCAAgC;EAEpE,aAAa,eAAe,2BAA2B,CAAC,CAAC,CAAC,QAAQ,mEAAmE;CACvI,CAAC;CAED,GAAG,qDAAqD;EACtD,OAAO,gCAAgC,gBAAgB,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc;CAC7F,CAAC;CAED,GAAG,yFAAyF;EAC1F,GAAG,QAAQ,6BAA6B,4BAA4B;EAGpE,OAAO,eAAe,8BAA8B,CAAC,CAAC,CAAC,KAAK,4BAA4B;EACxF,OAAO,cAAc,8BAA8B,CAAC,CAAC,CAAC,KAAK,4BAA4B;CACzF,CAAC;CAED,GAAG,0EAA0E;EAC3E,GAAG,QAAQ,gCAAgC,+BAA+B;EAC1E,GAAG,QAAQ,6BAA6B,4BAA4B;EAEpE,aAAa,eAAe,8BAA8B,CAAC,CAAC,CAAC,QAAQ,2EAA2E;CAClJ,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Json } from "./json";
1
+ import { Json } from "./json.js";
2
2
 
3
3
  //#region src/utils/errors.d.ts
4
4
  declare function throwErr(errorMessage: string, extraData?: any): never;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","names":[],"sources":["../../../src/utils/errors.tsx"],"mappings":";;;iBAMgB,QAAA,CAAS,YAAA,UAAsB,SAAA;AAAA,iBAC/B,QAAA,CAAS,KAAA,EAAO,KAAA;AAAA,iBAChB,QAAA,CAAA,GAAY,IAAA,EAAM,gCAAA;;;;;AADlC;;;;;AACA;;;;;AA0CA;;;;;;;;;iBAAgB,iBAAA,CAAkB,KAAA,EAAO,KAAA,KAAU,MAAA,EAAQ,KAAA;AAAA,cAkB9C,sBAAA,SAA+B,KAAA;EAAA,SACG,SAAA,IAAY,MAAA,gBAAsB,YAAA;cAAnE,OAAA,UAAiC,SAAA,IAAY,MAAA,gBAAsB,YAAA;AAAA;AAAA,iBA0BjE,iBAAA,CAAkB,KAAA;AAAA,KAMtB,YAAA;AAAA,KAEP,SAAA,IAAa,QAAA,UAAkB,KAAA,WAAgB,KAAA,EAAO,YAAA,KAAiB,SAAA;AAAA,iBAG5D,iBAAA,CAAkB,IAAA,EAAM,SAAA;;;;;;;;;;iBA4CxB,YAAA,CAAa,QAAA,UAAkB,KAAA;;;;AAvD/C;iBA+DgB,cAAA,CAAe,QAAA,UAAkB,KAAA;AAAA,KAK5C,MAAA;EACH,UAAA;EACA,OAAA;AAAA;AAAA,KAGG,gCAAA,IAEH,MAAA,EAAQ,MAAA,EACR,OAAA,cAGA,UAAA,WAAqB,MAAA,EACrB,OAAA;AAAA,cAGW,WAAA,SAAoB,KAAA;EAAA,iBACd,uBAAA;EACV,IAAA;EAAA,SACS,UAAA;EAAA,OAEF,UAAA;;;;SACA,YAAA;;;;SACA,eAAA;;;;SACA,SAAA;;;;SACA,QAAA;;;;SACA,gBAAA;;;;SACA,aAAA;;;;SACA,2BAAA;;;;SACA,cAAA;;;;SACA,QAAA;;;;SACA,IAAA;;;;SACA,cAAA;;;;SACA,kBAAA;;;;SACA,eAAA;;;;SACA,UAAA;;;;SACA,oBAAA;;;;SACA,mBAAA;;;;SACA,iBAAA;;;;SACA,SAAA;;;;SACA,kBAAA;;;;SACA,mBAAA;;;;SACA,MAAA;;;;SACA,gBAAA;;;;SACA,QAAA;;;;SACA,eAAA;;;;SACA,oBAAA;;;;SACA,eAAA;;;;SACA,2BAAA;;;;SACA,0BAAA;;;;SAEA,mBAAA;;;;SACA,cAAA;;;;SACA,UAAA;;;;SACA,kBAAA;;;;SACA,cAAA;;;;SACA,uBAAA;;;;SACA,qBAAA;;;;SACA,mBAAA;;;;SACA,YAAA;;;;SACA,WAAA;;;;SACA,6BAAA;;;;iBAGC,IAAA,EAAM,gCAAA;EAAA,OAgBP,aAAA,CAAc,KAAA,YAAiB,KAAA,IAAS,WAAA;EAK/C,aAAA,CAAA;EAIA,aAAA,CAAA;EAIA,aAAA,CAAA;EAIA,OAAA,CAAA,GAAW,UAAA;EAIX,UAAA,CAAA,GAAc,MAAA;EAMd,iBAAA,CAAA,GAAqB,IAAA;;;;EAWrB,UAAA,CAAA,GAAc,IAAA;AAAA"}
1
+ {"version":3,"file":"errors.d.ts","names":[],"sources":["../../../src/utils/errors.tsx"],"mappings":";;;iBAMgB,QAAA,CAAS,YAAA,UAAsB,SAAe;AAAA,iBAC9C,QAAA,CAAS,KAAY,EAAL,KAAK;AAAA,iBACrB,QAAA,IAAY,IAAA,EAAM,gCAAgC;;;;AAFJ;AAC9D;;;;AAAqC;AACrC;;;;AAAkE;AA0ClE;;;;;;;;;iBAAgB,iBAAA,CAAkB,KAAA,EAAO,KAAA,KAAU,MAAA,EAAQ,KAAK;AAAA,cAkBnD,sBAAA,SAA+B,KAAA;EAAA,SACG,SAAA,IAAY,MAAA,gBAAsB,YAAA;cAAnE,OAAA,UAAiC,SAAA,IAAY,MAAA,gBAAsB,YAAA;AAAA;AAAA,iBA0BjE,iBAAA,CAAkB,KAAc;AAAA,KAMpC,YAAA;AAAA,KAEP,SAAA,IAAa,QAAA,UAAkB,KAAA,WAAgB,KAAA,EAAO,YAAY,KAAK,SAAA;AAAA,iBAG5D,iBAAA,CAAkB,IAAe,EAAT,SAAS;;;;;;;;;;iBA4CjC,YAAA,CAAa,QAAA,UAAkB,KAAc;;;AAjFgC;AA0B7F;iBA+DgB,cAAA,CAAe,QAAA,UAAkB,KAAc;AAAA,KAK1D,MAAA;EACH,UAAA;EACA,OAAO;AAAA;AAAA,KAGJ,gCAAA,IAEH,MAAA,EAAQ,MAAA,EACR,OAAA,cAGA,UAAA,WAAqB,MAAM,EAC3B,OAAA;AAAA,cAGW,WAAA,SAAoB,KAAA;EAAA,iBACd,uBAAA;EACV,IAAA;EAAA,SACS,UAAA;EAAA,OAEF,UAAA;;;;SACA,YAAA;;;;SACA,eAAA;;;;SACA,SAAA;;;;SACA,QAAA;;;;SACA,gBAAA;;;;SACA,aAAA;;;;SACA,2BAAA;;;;SACA,cAAA;;;;SACA,QAAA;;;;SACA,IAAA;;;;SACA,cAAA;;;;SACA,kBAAA;;;;SACA,eAAA;;;;SACA,UAAA;;;;SACA,oBAAA;;;;SACA,mBAAA;;;;SACA,iBAAA;;;;SACA,SAAA;;;;SACA,kBAAA;;;;SACA,mBAAA;;;;SACA,MAAA;;;;SACA,gBAAA;;;;SACA,QAAA;;;;SACA,eAAA;;;;SACA,oBAAA;;;;SACA,eAAA;;;;SACA,2BAAA;;;;SACA,0BAAA;;;;SAEA,mBAAA;;;;SACA,cAAA;;;;SACA,UAAA;;;;SACA,kBAAA;;;;SACA,cAAA;;;;SACA,uBAAA;;;;SACA,qBAAA;;;;SACA,mBAAA;;;;SACA,YAAA;;;;SACA,WAAA;;;;SACA,6BAAA;;;;iBAGC,IAAA,EAAM,gCAAA;EAAA,OAgBP,aAAA,CAAc,KAAA,YAAiB,KAAA,IAAS,WAAA;EAK/C,aAAA;EAIA,aAAA;EAIA,aAAA;EAIA,OAAA,IAAW,UAAA;EAIX,UAAA,IAAc,MAAA;EAMd,iBAAA,IAAqB,IAAA;;;;EAWrB,UAAA,IAAc,IAAA;AAAA"}
@@ -1,7 +1,6 @@
1
1
  import { pick } from "./objects.js";
2
2
  import { globalVar } from "./globals.js";
3
3
  import { nicify } from "./strings.js";
4
-
5
4
  //#region src/utils/errors.tsx
6
5
  function throwErr(...args) {
7
6
  if (typeof args[0] === "string") throw new HexclaveAssertionError(args[0], args[1]);
@@ -393,7 +392,7 @@ var StatusError = class extends Error {
393
392
  }
394
393
  };
395
394
  StatusError.prototype.name = "StatusError";
396
-
397
395
  //#endregion
398
396
  export { HexclaveAssertionError, StatusError, captureError, captureWarning, concatStacktraces, errorToNiceString, registerErrorSink, throwErr };
397
+
399
398
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../../../src/utils/errors.tsx"],"sourcesContent":["import { globalVar } from \"./globals\";\nimport { Json } from \"./json\";\nimport { pick } from \"./objects\";\nimport { nicify } from \"./strings\";\n\n\nexport function throwErr(errorMessage: string, extraData?: any): never;\nexport function throwErr(error: Error): never;\nexport function throwErr(...args: StatusErrorConstructorParameters): never;\nexport function throwErr(...args: any[]): never {\n if (typeof args[0] === \"string\") {\n throw new HexclaveAssertionError(args[0], args[1]);\n } else if (args[0] instanceof Error) {\n throw args[0];\n } else {\n // @ts-expect-error\n throw new StatusError(...args);\n }\n}\n\nfunction removeStacktraceNameLine(stack: string): string {\n // some browsers (eg. Chrome) prepend the stack with an extra line with the error name\n const addsNameLine = new Error().stack?.startsWith(\"Error\\n\");\n return stack.split(\"\\n\").slice(addsNameLine ? 1 : 0).join(\"\\n\");\n}\n\n\n/**\n * Concatenates the (original) stacktraces of the given errors onto the first.\n *\n * Note: Very often, the concatStacktracesIfRejected function in promises.tsx is an easier way to use this function.\n *\n * Useful when you invoke an async function to receive a promise without awaiting it immediately. Browsers are smart\n * enough to keep track of the call stack in async function calls when you invoke `.then` within the same async tick,\n * but if you don't, the stacktrace will be lost.\n *\n * Here's an example of the unwanted behavior:\n *\n * ```tsx\n * async function log() {\n * await wait(0); // put the task on the event loop\n * console.log(new Error().stack);\n * }\n *\n * async function main() {\n * await log(); // good; prints both \"log\" and \"main\" on the stacktrace\n * log(); // bad; prints only \"log\" on the stacktrace\n * }\n * ```\n */\nexport function concatStacktraces(first: Error, ...errors: Error[]): void {\n // some browsers (eg. Firefox) add an extra empty line at the end\n const addsEmptyLineAtEnd = first.stack?.endsWith(\"\\n\");\n\n\n // Add a reference to this function itself so that we know that stacktraces were concatenated\n // If you are coming here from a stacktrace, please know that the two parts before and after this line are different\n // stacktraces that were concatenated with concatStacktraces\n const separator = removeStacktraceNameLine(new Error().stack ?? \"\").split(\"\\n\")[0];\n\n\n for (const error of errors) {\n const toAppend = removeStacktraceNameLine(error.stack ?? \"\");\n first.stack += (addsEmptyLineAtEnd ? \"\" : \"\\n\") + separator + \"\\n\" + toAppend;\n }\n}\n\n\nexport class HexclaveAssertionError extends Error {\n constructor(message: string, public readonly extraData?: Record<string, any> & ErrorOptions) {\n const disclaimer = `\\n\\nThis is likely an error in Hexclave. Please make sure you are running the newest version and report it.`;\n super(`${message}${message.endsWith(disclaimer) ? \"\" : disclaimer}`, pick(extraData ?? {}, [\"cause\"]));\n\n Object.defineProperty(this, \"customCaptureExtraArgs\", {\n get() {\n return [this.extraData];\n },\n enumerable: false,\n });\n\n // Use literal dot-form (guarded with `typeof process`) so Next.js / webpack\n // DefinePlugin can inline the value at build time. See getProcessEnv in ./env.\n const hexclaveDebuggerValue = typeof process !== \"undefined\" ? process.env.NEXT_PUBLIC_HEXCLAVE_DEBUGGER_ON_ASSERTION_ERROR : undefined;\n const stackDebuggerValue = typeof process !== \"undefined\" ? process.env.NEXT_PUBLIC_STACK_DEBUGGER_ON_ASSERTION_ERROR : undefined;\n if (hexclaveDebuggerValue && stackDebuggerValue && hexclaveDebuggerValue !== stackDebuggerValue) {\n throw new Error(\"Environment variables NEXT_PUBLIC_HEXCLAVE_DEBUGGER_ON_ASSERTION_ERROR and NEXT_PUBLIC_STACK_DEBUGGER_ON_ASSERTION_ERROR are both set to different values. Remove one of them or set them to the same value.\");\n }\n if ((hexclaveDebuggerValue || stackDebuggerValue) === \"true\") {\n debugger;\n }\n }\n}\nHexclaveAssertionError.prototype.name = \"HexclaveAssertionError\";\n\n\nexport function errorToNiceString(error: unknown): string {\n if (!(error instanceof Error)) return `${typeof error}<${nicify(error)}>`;\n return nicify(error, { maxDepth: 8 });\n}\n\n\nexport type CaptureLevel = \"error\" | \"warning\";\n\ntype ErrorSink = (location: string, error: unknown, level: CaptureLevel, ...extraArgs: unknown[]) => void;\n\nconst errorSinks = new Set<ErrorSink>();\nexport function registerErrorSink(sink: ErrorSink): void {\n if (errorSinks.has(sink)) {\n return;\n }\n errorSinks.add(sink);\n}\nregisterErrorSink((location, error, level, ...extraArgs) => {\n const logger = level === \"warning\" ? console.warn : console.error;\n const colorCode = level === \"warning\" ? \"\\x1b[43m\" : \"\\x1b[41m\";\n const label = level === \"warning\" ? \"warning\" : \"error\";\n logger(\n `${colorCode}Captured ${label} in ${location}:`,\n // HACK: Log a nicified version of the error to get around buggy Next.js pretty-printing\n // https://www.reddit.com/r/nextjs/comments/1gkxdqe/comment/m19kxgn/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button\n errorToNiceString(error),\n ...extraArgs,\n \"\\x1b[0m\",\n );\n});\nregisterErrorSink((location, error, level, ...extraArgs) => {\n globalVar.hexclaveCapturedErrors = globalVar.hexclaveCapturedErrors ?? [];\n globalVar.hexclaveCapturedErrors.push({ location, error, level, extraArgs });\n});\n\nfunction dispatchToSinks(location: string, error: unknown, level: CaptureLevel): void {\n for (const sink of errorSinks) {\n sink(\n location,\n error,\n level,\n ...error && (typeof error === 'object' || typeof error === 'function') && \"customCaptureExtraArgs\" in error && Array.isArray(error.customCaptureExtraArgs) ? (error.customCaptureExtraArgs as any[]) : [],\n );\n }\n}\n\n/**\n * Captures an error and sends it to the error sinks (most notably, Sentry). Errors caught with captureError are\n * supposed to be seen by an engineer, so they should be actionable and important.\n *\n * The location string is a machine-readable ID, and should hence not contain spaces or anything like that. Good\n * examples are: \"api-route-handler\", \"renderPart()\", etc.\n *\n * Errors that bubble up to the top of runAsynchronously or a route handler are already captured with captureError.\n */\nexport function captureError(location: string, error: unknown): void {\n dispatchToSinks(location, error, \"error\");\n}\n\n/**\n * Like captureError, but logs at warning level. Use for issues that an engineer should know about but that aren't\n * severe enough to be treated as an error (e.g. recoverable failures in background tasks).\n */\nexport function captureWarning(location: string, error: unknown): void {\n dispatchToSinks(location, error, \"warning\");\n}\n\n\ntype Status = {\n statusCode: number,\n message: string,\n};\n\ntype StatusErrorConstructorParameters =\n| [\n status: Status,\n message?: string\n]\n| [\n statusCode: number | Status,\n message: string,\n];\n\nexport class StatusError extends Error {\n private readonly __stackStatusErrorBrand = \"stack-status-error-brand-sentinel\" as const;\n public name = \"StatusError\";\n public readonly statusCode: number;\n\n public static BadRequest = { statusCode: 400, message: \"Bad Request\" };\n public static Unauthorized = { statusCode: 401, message: \"Unauthorized\" };\n public static PaymentRequired = { statusCode: 402, message: \"Payment Required\" };\n public static Forbidden = { statusCode: 403, message: \"Forbidden\" };\n public static NotFound = { statusCode: 404, message: \"Not Found\" };\n public static MethodNotAllowed = { statusCode: 405, message: \"Method Not Allowed\" };\n public static NotAcceptable = { statusCode: 406, message: \"Not Acceptable\" };\n public static ProxyAuthenticationRequired = { statusCode: 407, message: \"Proxy Authentication Required\" };\n public static RequestTimeout = { statusCode: 408, message: \"Request Timeout\" };\n public static Conflict = { statusCode: 409, message: \"Conflict\" };\n public static Gone = { statusCode: 410, message: \"Gone\" };\n public static LengthRequired = { statusCode: 411, message: \"Length Required\" };\n public static PreconditionFailed = { statusCode: 412, message: \"Precondition Failed\" };\n public static PayloadTooLarge = { statusCode: 413, message: \"Payload Too Large\" };\n public static URITooLong = { statusCode: 414, message: \"URI Too Long\" };\n public static UnsupportedMediaType = { statusCode: 415, message: \"Unsupported Media Type\" };\n public static RangeNotSatisfiable = { statusCode: 416, message: \"Range Not Satisfiable\" };\n public static ExpectationFailed = { statusCode: 417, message: \"Expectation Failed\" };\n public static ImATeapot = { statusCode: 418, message: \"I'm a teapot\" };\n public static MisdirectedRequest = { statusCode: 421, message: \"Misdirected Request\" };\n public static UnprocessableEntity = { statusCode: 422, message: \"Unprocessable Entity\" };\n public static Locked = { statusCode: 423, message: \"Locked\" };\n public static FailedDependency = { statusCode: 424, message: \"Failed Dependency\" };\n public static TooEarly = { statusCode: 425, message: \"Too Early\" };\n public static UpgradeRequired = { statusCode: 426, message: \"Upgrade Required\" };\n public static PreconditionRequired = { statusCode: 428, message: \"Precondition Required\" };\n public static TooManyRequests = { statusCode: 429, message: \"Too Many Requests\" };\n public static RequestHeaderFieldsTooLarge = { statusCode: 431, message: \"Request Header Fields Too Large\" };\n public static UnavailableForLegalReasons = { statusCode: 451, message: \"Unavailable For Legal Reasons\" };\n\n public static InternalServerError = { statusCode: 500, message: \"Internal Server Error\" };\n public static NotImplemented = { statusCode: 501, message: \"Not Implemented\" };\n public static BadGateway = { statusCode: 502, message: \"Bad Gateway\" };\n public static ServiceUnavailable = { statusCode: 503, message: \"Service Unavailable\" };\n public static GatewayTimeout = { statusCode: 504, message: \"Gateway Timeout\" };\n public static HTTPVersionNotSupported = { statusCode: 505, message: \"HTTP Version Not Supported\" };\n public static VariantAlsoNegotiates = { statusCode: 506, message: \"Variant Also Negotiates\" };\n public static InsufficientStorage = { statusCode: 507, message: \"Insufficient Storage\" };\n public static LoopDetected = { statusCode: 508, message: \"Loop Detected\" };\n public static NotExtended = { statusCode: 510, message: \"Not Extended\" };\n public static NetworkAuthenticationRequired = { statusCode: 511, message: \"Network Authentication Required\" };\n\n\n constructor(...args: StatusErrorConstructorParameters);\n constructor(\n status: number | Status,\n message?: string,\n ) {\n if (typeof status === \"object\") {\n message ??= status.message;\n status = status.statusCode;\n }\n super(message);\n this.statusCode = status;\n if (!message) {\n throw new HexclaveAssertionError(\"StatusError always requires a message unless a Status object is passed\", { cause: this });\n }\n }\n\n public static isStatusError(error: unknown): error is StatusError {\n // like instanceof, but also works for errors thrown in other realms or by different versions of the same package\n return typeof error === \"object\" && error !== null && \"__stackStatusErrorBrand\" in error && error.__stackStatusErrorBrand === \"stack-status-error-brand-sentinel\";\n }\n\n public isClientError() {\n return this.statusCode >= 400 && this.statusCode < 500;\n }\n\n public isServerError() {\n return !this.isClientError();\n }\n\n public getStatusCode(): number {\n return this.statusCode;\n }\n\n public getBody(): Uint8Array {\n return new TextEncoder().encode(this.message);\n }\n\n public getHeaders(): Record<string, string[]> {\n return {\n \"Content-Type\": [\"text/plain; charset=utf-8\"],\n };\n }\n\n public toDescriptiveJson(): Json {\n return {\n status_code: this.getStatusCode(),\n message: this.message,\n headers: this.getHeaders(),\n };\n }\n\n /**\n * @deprecated this is not a good way to make status errors human-readable, use toDescriptiveJson instead\n */\n public toHttpJson(): Json {\n return {\n status_code: this.statusCode,\n body: this.message,\n headers: this.getHeaders(),\n };\n }\n}\nStatusError.prototype.name = \"StatusError\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../../../src/utils/errors.tsx"],"sourcesContent":["import { globalVar } from \"./globals\";\nimport { Json } from \"./json\";\nimport { pick } from \"./objects\";\nimport { nicify } from \"./strings\";\n\n\nexport function throwErr(errorMessage: string, extraData?: any): never;\nexport function throwErr(error: Error): never;\nexport function throwErr(...args: StatusErrorConstructorParameters): never;\nexport function throwErr(...args: any[]): never {\n if (typeof args[0] === \"string\") {\n throw new HexclaveAssertionError(args[0], args[1]);\n } else if (args[0] instanceof Error) {\n throw args[0];\n } else {\n // @ts-expect-error\n throw new StatusError(...args);\n }\n}\n\nfunction removeStacktraceNameLine(stack: string): string {\n // some browsers (eg. Chrome) prepend the stack with an extra line with the error name\n const addsNameLine = new Error().stack?.startsWith(\"Error\\n\");\n return stack.split(\"\\n\").slice(addsNameLine ? 1 : 0).join(\"\\n\");\n}\n\n\n/**\n * Concatenates the (original) stacktraces of the given errors onto the first.\n *\n * Note: Very often, the concatStacktracesIfRejected function in promises.tsx is an easier way to use this function.\n *\n * Useful when you invoke an async function to receive a promise without awaiting it immediately. Browsers are smart\n * enough to keep track of the call stack in async function calls when you invoke `.then` within the same async tick,\n * but if you don't, the stacktrace will be lost.\n *\n * Here's an example of the unwanted behavior:\n *\n * ```tsx\n * async function log() {\n * await wait(0); // put the task on the event loop\n * console.log(new Error().stack);\n * }\n *\n * async function main() {\n * await log(); // good; prints both \"log\" and \"main\" on the stacktrace\n * log(); // bad; prints only \"log\" on the stacktrace\n * }\n * ```\n */\nexport function concatStacktraces(first: Error, ...errors: Error[]): void {\n // some browsers (eg. Firefox) add an extra empty line at the end\n const addsEmptyLineAtEnd = first.stack?.endsWith(\"\\n\");\n\n\n // Add a reference to this function itself so that we know that stacktraces were concatenated\n // If you are coming here from a stacktrace, please know that the two parts before and after this line are different\n // stacktraces that were concatenated with concatStacktraces\n const separator = removeStacktraceNameLine(new Error().stack ?? \"\").split(\"\\n\")[0];\n\n\n for (const error of errors) {\n const toAppend = removeStacktraceNameLine(error.stack ?? \"\");\n first.stack += (addsEmptyLineAtEnd ? \"\" : \"\\n\") + separator + \"\\n\" + toAppend;\n }\n}\n\n\nexport class HexclaveAssertionError extends Error {\n constructor(message: string, public readonly extraData?: Record<string, any> & ErrorOptions) {\n const disclaimer = `\\n\\nThis is likely an error in Hexclave. Please make sure you are running the newest version and report it.`;\n super(`${message}${message.endsWith(disclaimer) ? \"\" : disclaimer}`, pick(extraData ?? {}, [\"cause\"]));\n\n Object.defineProperty(this, \"customCaptureExtraArgs\", {\n get() {\n return [this.extraData];\n },\n enumerable: false,\n });\n\n // Use literal dot-form (guarded with `typeof process`) so Next.js / webpack\n // DefinePlugin can inline the value at build time. See getProcessEnv in ./env.\n const hexclaveDebuggerValue = typeof process !== \"undefined\" ? process.env.NEXT_PUBLIC_HEXCLAVE_DEBUGGER_ON_ASSERTION_ERROR : undefined;\n const stackDebuggerValue = typeof process !== \"undefined\" ? process.env.NEXT_PUBLIC_STACK_DEBUGGER_ON_ASSERTION_ERROR : undefined;\n if (hexclaveDebuggerValue && stackDebuggerValue && hexclaveDebuggerValue !== stackDebuggerValue) {\n throw new Error(\"Environment variables NEXT_PUBLIC_HEXCLAVE_DEBUGGER_ON_ASSERTION_ERROR and NEXT_PUBLIC_STACK_DEBUGGER_ON_ASSERTION_ERROR are both set to different values. Remove one of them or set them to the same value.\");\n }\n if ((hexclaveDebuggerValue || stackDebuggerValue) === \"true\") {\n debugger;\n }\n }\n}\nHexclaveAssertionError.prototype.name = \"HexclaveAssertionError\";\n\n\nexport function errorToNiceString(error: unknown): string {\n if (!(error instanceof Error)) return `${typeof error}<${nicify(error)}>`;\n return nicify(error, { maxDepth: 8 });\n}\n\n\nexport type CaptureLevel = \"error\" | \"warning\";\n\ntype ErrorSink = (location: string, error: unknown, level: CaptureLevel, ...extraArgs: unknown[]) => void;\n\nconst errorSinks = new Set<ErrorSink>();\nexport function registerErrorSink(sink: ErrorSink): void {\n if (errorSinks.has(sink)) {\n return;\n }\n errorSinks.add(sink);\n}\nregisterErrorSink((location, error, level, ...extraArgs) => {\n const logger = level === \"warning\" ? console.warn : console.error;\n const colorCode = level === \"warning\" ? \"\\x1b[43m\" : \"\\x1b[41m\";\n const label = level === \"warning\" ? \"warning\" : \"error\";\n logger(\n `${colorCode}Captured ${label} in ${location}:`,\n // HACK: Log a nicified version of the error to get around buggy Next.js pretty-printing\n // https://www.reddit.com/r/nextjs/comments/1gkxdqe/comment/m19kxgn/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button\n errorToNiceString(error),\n ...extraArgs,\n \"\\x1b[0m\",\n );\n});\nregisterErrorSink((location, error, level, ...extraArgs) => {\n globalVar.hexclaveCapturedErrors = globalVar.hexclaveCapturedErrors ?? [];\n globalVar.hexclaveCapturedErrors.push({ location, error, level, extraArgs });\n});\n\nfunction dispatchToSinks(location: string, error: unknown, level: CaptureLevel): void {\n for (const sink of errorSinks) {\n sink(\n location,\n error,\n level,\n ...error && (typeof error === 'object' || typeof error === 'function') && \"customCaptureExtraArgs\" in error && Array.isArray(error.customCaptureExtraArgs) ? (error.customCaptureExtraArgs as any[]) : [],\n );\n }\n}\n\n/**\n * Captures an error and sends it to the error sinks (most notably, Sentry). Errors caught with captureError are\n * supposed to be seen by an engineer, so they should be actionable and important.\n *\n * The location string is a machine-readable ID, and should hence not contain spaces or anything like that. Good\n * examples are: \"api-route-handler\", \"renderPart()\", etc.\n *\n * Errors that bubble up to the top of runAsynchronously or a route handler are already captured with captureError.\n */\nexport function captureError(location: string, error: unknown): void {\n dispatchToSinks(location, error, \"error\");\n}\n\n/**\n * Like captureError, but logs at warning level. Use for issues that an engineer should know about but that aren't\n * severe enough to be treated as an error (e.g. recoverable failures in background tasks).\n */\nexport function captureWarning(location: string, error: unknown): void {\n dispatchToSinks(location, error, \"warning\");\n}\n\n\ntype Status = {\n statusCode: number,\n message: string,\n};\n\ntype StatusErrorConstructorParameters =\n| [\n status: Status,\n message?: string\n]\n| [\n statusCode: number | Status,\n message: string,\n];\n\nexport class StatusError extends Error {\n private readonly __stackStatusErrorBrand = \"stack-status-error-brand-sentinel\" as const;\n public name = \"StatusError\";\n public readonly statusCode: number;\n\n public static BadRequest = { statusCode: 400, message: \"Bad Request\" };\n public static Unauthorized = { statusCode: 401, message: \"Unauthorized\" };\n public static PaymentRequired = { statusCode: 402, message: \"Payment Required\" };\n public static Forbidden = { statusCode: 403, message: \"Forbidden\" };\n public static NotFound = { statusCode: 404, message: \"Not Found\" };\n public static MethodNotAllowed = { statusCode: 405, message: \"Method Not Allowed\" };\n public static NotAcceptable = { statusCode: 406, message: \"Not Acceptable\" };\n public static ProxyAuthenticationRequired = { statusCode: 407, message: \"Proxy Authentication Required\" };\n public static RequestTimeout = { statusCode: 408, message: \"Request Timeout\" };\n public static Conflict = { statusCode: 409, message: \"Conflict\" };\n public static Gone = { statusCode: 410, message: \"Gone\" };\n public static LengthRequired = { statusCode: 411, message: \"Length Required\" };\n public static PreconditionFailed = { statusCode: 412, message: \"Precondition Failed\" };\n public static PayloadTooLarge = { statusCode: 413, message: \"Payload Too Large\" };\n public static URITooLong = { statusCode: 414, message: \"URI Too Long\" };\n public static UnsupportedMediaType = { statusCode: 415, message: \"Unsupported Media Type\" };\n public static RangeNotSatisfiable = { statusCode: 416, message: \"Range Not Satisfiable\" };\n public static ExpectationFailed = { statusCode: 417, message: \"Expectation Failed\" };\n public static ImATeapot = { statusCode: 418, message: \"I'm a teapot\" };\n public static MisdirectedRequest = { statusCode: 421, message: \"Misdirected Request\" };\n public static UnprocessableEntity = { statusCode: 422, message: \"Unprocessable Entity\" };\n public static Locked = { statusCode: 423, message: \"Locked\" };\n public static FailedDependency = { statusCode: 424, message: \"Failed Dependency\" };\n public static TooEarly = { statusCode: 425, message: \"Too Early\" };\n public static UpgradeRequired = { statusCode: 426, message: \"Upgrade Required\" };\n public static PreconditionRequired = { statusCode: 428, message: \"Precondition Required\" };\n public static TooManyRequests = { statusCode: 429, message: \"Too Many Requests\" };\n public static RequestHeaderFieldsTooLarge = { statusCode: 431, message: \"Request Header Fields Too Large\" };\n public static UnavailableForLegalReasons = { statusCode: 451, message: \"Unavailable For Legal Reasons\" };\n\n public static InternalServerError = { statusCode: 500, message: \"Internal Server Error\" };\n public static NotImplemented = { statusCode: 501, message: \"Not Implemented\" };\n public static BadGateway = { statusCode: 502, message: \"Bad Gateway\" };\n public static ServiceUnavailable = { statusCode: 503, message: \"Service Unavailable\" };\n public static GatewayTimeout = { statusCode: 504, message: \"Gateway Timeout\" };\n public static HTTPVersionNotSupported = { statusCode: 505, message: \"HTTP Version Not Supported\" };\n public static VariantAlsoNegotiates = { statusCode: 506, message: \"Variant Also Negotiates\" };\n public static InsufficientStorage = { statusCode: 507, message: \"Insufficient Storage\" };\n public static LoopDetected = { statusCode: 508, message: \"Loop Detected\" };\n public static NotExtended = { statusCode: 510, message: \"Not Extended\" };\n public static NetworkAuthenticationRequired = { statusCode: 511, message: \"Network Authentication Required\" };\n\n\n constructor(...args: StatusErrorConstructorParameters);\n constructor(\n status: number | Status,\n message?: string,\n ) {\n if (typeof status === \"object\") {\n message ??= status.message;\n status = status.statusCode;\n }\n super(message);\n this.statusCode = status;\n if (!message) {\n throw new HexclaveAssertionError(\"StatusError always requires a message unless a Status object is passed\", { cause: this });\n }\n }\n\n public static isStatusError(error: unknown): error is StatusError {\n // like instanceof, but also works for errors thrown in other realms or by different versions of the same package\n return typeof error === \"object\" && error !== null && \"__stackStatusErrorBrand\" in error && error.__stackStatusErrorBrand === \"stack-status-error-brand-sentinel\";\n }\n\n public isClientError() {\n return this.statusCode >= 400 && this.statusCode < 500;\n }\n\n public isServerError() {\n return !this.isClientError();\n }\n\n public getStatusCode(): number {\n return this.statusCode;\n }\n\n public getBody(): Uint8Array {\n return new TextEncoder().encode(this.message);\n }\n\n public getHeaders(): Record<string, string[]> {\n return {\n \"Content-Type\": [\"text/plain; charset=utf-8\"],\n };\n }\n\n public toDescriptiveJson(): Json {\n return {\n status_code: this.getStatusCode(),\n message: this.message,\n headers: this.getHeaders(),\n };\n }\n\n /**\n * @deprecated this is not a good way to make status errors human-readable, use toDescriptiveJson instead\n */\n public toHttpJson(): Json {\n return {\n status_code: this.statusCode,\n body: this.message,\n headers: this.getHeaders(),\n };\n }\n}\nStatusError.prototype.name = \"StatusError\";\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Result } from "./results";
1
+ import { Result } from "./results.js";
2
2
 
3
3
  //#region src/utils/esbuild.d.ts
4
4
  declare function initializeEsbuild(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild.d.ts","names":[],"sources":["../../../src/utils/esbuild.tsx"],"mappings":";;;iBA0BgB,iBAAA,CAAA,GAAqB,OAAA;AAAA,iBAgDf,gBAAA,CAAiB,WAAA,EAAa,MAAA;EAA2B,WAAA;AAAA,GAAuB,OAAA;EACpG,MAAA;EACA,gBAAA,GAAmB,MAAA;EACnB,aAAA;EACA,SAAA;EACA,gBAAA;AAAA,IACO,OAAA,CAAQ,MAAA"}
1
+ {"version":3,"file":"esbuild.d.ts","names":[],"sources":["../../../src/utils/esbuild.tsx"],"mappings":";;;iBA0BgB,iBAAA,IAAqB,OAAO;AAAA,iBAgDtB,gBAAA,CAAiB,WAAA,EAAa,MAAA;EAA2B,WAAA;AAAA,GAAuB,OAAA;EACpG,MAAA;EACA,gBAAA,GAAmB,MAAA;EACnB,aAAA;EACA,SAAA;EACA,gBAAA;AAAA,IACO,OAAA,CAAQ,MAAA"}
@@ -6,7 +6,6 @@ import { createGlobalAsync } from "./globals.js";
6
6
  import { Result } from "./results.js";
7
7
  import * as esbuild from "esbuild-wasm/lib/browser.js";
8
8
  import { traceSpan, withTraceSpan } from "./telemetry.js";
9
-
10
9
  //#region src/utils/esbuild.tsx
11
10
  globalThis.self ??= globalThis;
12
11
  let esbuildInitializePromise = null;
@@ -55,7 +54,7 @@ async function bundleJavaScript(sourceFiles, options = {}) {
55
54
  const externalPackagesMap = new Map(Object.entries(options.externalPackages ?? {}));
56
55
  const keepAsImports = options.keepAsImports ?? [];
57
56
  const httpImportCache = /* @__PURE__ */ new Map();
58
- const extToLoader = new Map([
57
+ const extToLoader = /* @__PURE__ */ new Map([
59
58
  ["tsx", "tsx"],
60
59
  ["ts", "ts"],
61
60
  ["js", "js"],
@@ -175,7 +174,7 @@ async function bundleJavaScript(sourceFiles, options = {}) {
175
174
  if (result.outputFiles.length > 0) return Result.ok(result.outputFiles[0].text);
176
175
  return throwErr("No output generated??");
177
176
  }
178
-
179
177
  //#endregion
180
178
  export { bundleJavaScript, initializeEsbuild };
179
+
181
180
  //# sourceMappingURL=esbuild.js.map