@hexclave/shared 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1144) hide show
  1. package/LICENSE +7 -0
  2. package/dist/ai/image-limits.d.ts +24 -0
  3. package/dist/ai/image-limits.d.ts.map +1 -0
  4. package/dist/ai/image-limits.js +61 -0
  5. package/dist/ai/image-limits.js.map +1 -0
  6. package/dist/ai/unified-prompts/reminders.d.ts +5 -0
  7. package/dist/ai/unified-prompts/reminders.d.ts.map +1 -0
  8. package/dist/ai/unified-prompts/reminders.js +33 -0
  9. package/dist/ai/unified-prompts/reminders.js.map +1 -0
  10. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts +11 -0
  11. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -0
  12. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +851 -0
  13. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -0
  14. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts +5 -0
  15. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts.map +1 -0
  16. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js +12 -0
  17. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -0
  18. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts +5 -0
  19. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts.map +1 -0
  20. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +12 -0
  21. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -0
  22. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts +5 -0
  23. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts.map +1 -0
  24. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +12 -0
  25. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -0
  26. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts +5 -0
  27. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts.map +1 -0
  28. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +12 -0
  29. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -0
  30. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts +5 -0
  31. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts.map +1 -0
  32. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +12 -0
  33. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -0
  34. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +5 -0
  35. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -0
  36. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +64 -0
  37. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -0
  38. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts +5 -0
  39. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts.map +1 -0
  40. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +12 -0
  41. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -0
  42. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts +5 -0
  43. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts.map +1 -0
  44. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +12 -0
  45. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -0
  46. package/dist/ai/unified-prompts/skill-site-prompt.d.ts +5 -0
  47. package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -0
  48. package/dist/ai/unified-prompts/skill-site-prompt.js +75 -0
  49. package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -0
  50. package/dist/apps/apps-config.d.ts +168 -0
  51. package/dist/apps/apps-config.d.ts.map +1 -0
  52. package/dist/apps/apps-config.js +157 -0
  53. package/dist/apps/apps-config.js.map +1 -0
  54. package/dist/apps/apps-ui.d.ts +45 -0
  55. package/dist/apps/apps-ui.d.ts.map +1 -0
  56. package/dist/apps/apps-ui.js +109 -0
  57. package/dist/apps/apps-ui.js.map +1 -0
  58. package/dist/chunk-BE-pF4vm.js +34 -0
  59. package/dist/config/db-sync-mappings.d.ts +193 -0
  60. package/dist/config/db-sync-mappings.d.ts.map +1 -0
  61. package/dist/config/db-sync-mappings.js +2255 -0
  62. package/dist/config/db-sync-mappings.js.map +1 -0
  63. package/dist/config/format.d.ts +61 -0
  64. package/dist/config/format.d.ts.map +1 -0
  65. package/dist/config/format.js +337 -0
  66. package/dist/config/format.js.map +1 -0
  67. package/dist/config/migrate-catalogs-to-product-lines.d.ts +14 -0
  68. package/dist/config/migrate-catalogs-to-product-lines.d.ts.map +1 -0
  69. package/dist/config/migrate-catalogs-to-product-lines.js +379 -0
  70. package/dist/config/migrate-catalogs-to-product-lines.js.map +1 -0
  71. package/dist/config/schema-fuzzer.test.d.ts +1 -0
  72. package/dist/config/schema-fuzzer.test.js +401 -0
  73. package/dist/config/schema-fuzzer.test.js.map +1 -0
  74. package/dist/config/schema.d.ts +2315 -0
  75. package/dist/config/schema.d.ts.map +1 -0
  76. package/dist/config/schema.js +1085 -0
  77. package/dist/config/schema.js.map +1 -0
  78. package/dist/config-authoring.d.ts +12 -0
  79. package/dist/config-authoring.d.ts.map +1 -0
  80. package/dist/config-authoring.js +12 -0
  81. package/dist/config-authoring.js.map +1 -0
  82. package/dist/config-authoring.test.d.ts +1 -0
  83. package/dist/config-authoring.test.js +29 -0
  84. package/dist/config-authoring.test.js.map +1 -0
  85. package/dist/config-rendering.d.ts +17 -0
  86. package/dist/config-rendering.d.ts.map +1 -0
  87. package/dist/config-rendering.js +114 -0
  88. package/dist/config-rendering.js.map +1 -0
  89. package/dist/crud.d.ts +98 -0
  90. package/dist/crud.d.ts.map +1 -0
  91. package/dist/crud.js +129 -0
  92. package/dist/crud.js.map +1 -0
  93. package/dist/esm/ai/image-limits.d.ts +24 -0
  94. package/dist/esm/ai/image-limits.d.ts.map +1 -0
  95. package/dist/esm/ai/image-limits.js +53 -0
  96. package/dist/esm/ai/image-limits.js.map +1 -0
  97. package/dist/esm/ai/unified-prompts/reminders.d.ts +5 -0
  98. package/dist/esm/ai/unified-prompts/reminders.d.ts.map +1 -0
  99. package/dist/esm/ai/unified-prompts/reminders.js +31 -0
  100. package/dist/esm/ai/unified-prompts/reminders.js.map +1 -0
  101. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts +11 -0
  102. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -0
  103. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +843 -0
  104. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -0
  105. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts +5 -0
  106. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts.map +1 -0
  107. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js +10 -0
  108. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -0
  109. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts +5 -0
  110. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts.map +1 -0
  111. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +10 -0
  112. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -0
  113. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts +5 -0
  114. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts.map +1 -0
  115. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +10 -0
  116. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -0
  117. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts +5 -0
  118. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts.map +1 -0
  119. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +10 -0
  120. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -0
  121. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts +5 -0
  122. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts.map +1 -0
  123. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +10 -0
  124. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -0
  125. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +5 -0
  126. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -0
  127. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +61 -0
  128. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -0
  129. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts +5 -0
  130. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts.map +1 -0
  131. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +10 -0
  132. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -0
  133. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts +5 -0
  134. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts.map +1 -0
  135. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +10 -0
  136. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -0
  137. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts +5 -0
  138. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -0
  139. package/dist/esm/ai/unified-prompts/skill-site-prompt.js +73 -0
  140. package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -0
  141. package/dist/esm/apps/apps-config.d.ts +168 -0
  142. package/dist/esm/apps/apps-config.d.ts.map +1 -0
  143. package/dist/esm/apps/apps-config.js +154 -0
  144. package/dist/esm/apps/apps-config.js.map +1 -0
  145. package/dist/esm/apps/apps-ui.d.ts +45 -0
  146. package/dist/esm/apps/apps-ui.d.ts.map +1 -0
  147. package/dist/esm/apps/apps-ui.js +104 -0
  148. package/dist/esm/apps/apps-ui.js.map +1 -0
  149. package/dist/esm/config/db-sync-mappings.d.ts +193 -0
  150. package/dist/esm/config/db-sync-mappings.d.ts.map +1 -0
  151. package/dist/esm/config/db-sync-mappings.js +2253 -0
  152. package/dist/esm/config/db-sync-mappings.js.map +1 -0
  153. package/dist/esm/config/format.d.ts +61 -0
  154. package/dist/esm/config/format.d.ts.map +1 -0
  155. package/dist/esm/config/format.js +327 -0
  156. package/dist/esm/config/format.js.map +1 -0
  157. package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts +14 -0
  158. package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts.map +1 -0
  159. package/dist/esm/config/migrate-catalogs-to-product-lines.js +377 -0
  160. package/dist/esm/config/migrate-catalogs-to-product-lines.js.map +1 -0
  161. package/dist/esm/config/schema-fuzzer.test.d.ts +1 -0
  162. package/dist/esm/config/schema-fuzzer.test.js +401 -0
  163. package/dist/esm/config/schema-fuzzer.test.js.map +1 -0
  164. package/dist/esm/config/schema.d.ts +2315 -0
  165. package/dist/esm/config/schema.d.ts.map +1 -0
  166. package/dist/esm/config/schema.js +1065 -0
  167. package/dist/esm/config/schema.js.map +1 -0
  168. package/dist/esm/config-authoring.d.ts +12 -0
  169. package/dist/esm/config-authoring.d.ts.map +1 -0
  170. package/dist/esm/config-authoring.js +9 -0
  171. package/dist/esm/config-authoring.js.map +1 -0
  172. package/dist/esm/config-authoring.test.d.ts +1 -0
  173. package/dist/esm/config-authoring.test.js +29 -0
  174. package/dist/esm/config-authoring.test.js.map +1 -0
  175. package/dist/esm/config-rendering.d.ts +17 -0
  176. package/dist/esm/config-rendering.d.ts.map +1 -0
  177. package/dist/esm/config-rendering.js +108 -0
  178. package/dist/esm/config-rendering.js.map +1 -0
  179. package/dist/esm/crud.d.ts +98 -0
  180. package/dist/esm/crud.d.ts.map +1 -0
  181. package/dist/esm/crud.js +127 -0
  182. package/dist/esm/crud.js.map +1 -0
  183. package/dist/esm/global.d.ts +1 -0
  184. package/dist/esm/helpers/emails.d.ts +69 -0
  185. package/dist/esm/helpers/emails.d.ts.map +1 -0
  186. package/dist/esm/helpers/emails.js +243 -0
  187. package/dist/esm/helpers/emails.js.map +1 -0
  188. package/dist/esm/helpers/init-prompt.d.ts +5 -0
  189. package/dist/esm/helpers/init-prompt.d.ts.map +1 -0
  190. package/dist/esm/helpers/init-prompt.js +40 -0
  191. package/dist/esm/helpers/init-prompt.js.map +1 -0
  192. package/dist/esm/helpers/password.d.ts +7 -0
  193. package/dist/esm/helpers/password.d.ts.map +1 -0
  194. package/dist/esm/helpers/password.js +13 -0
  195. package/dist/esm/helpers/password.js.map +1 -0
  196. package/dist/esm/helpers/production-mode.d.ts +11 -0
  197. package/dist/esm/helpers/production-mode.d.ts.map +1 -0
  198. package/dist/esm/helpers/production-mode.js +46 -0
  199. package/dist/esm/helpers/production-mode.js.map +1 -0
  200. package/dist/esm/helpers/support-sla.d.ts +48 -0
  201. package/dist/esm/helpers/support-sla.d.ts.map +1 -0
  202. package/dist/esm/helpers/support-sla.js +65 -0
  203. package/dist/esm/helpers/support-sla.js.map +1 -0
  204. package/dist/esm/helpers/support-sla.test.d.ts +1 -0
  205. package/dist/esm/helpers/support-sla.test.js +102 -0
  206. package/dist/esm/helpers/support-sla.test.js.map +1 -0
  207. package/dist/esm/helpers/vault/client-side.d.ts +16 -0
  208. package/dist/esm/helpers/vault/client-side.d.ts.map +1 -0
  209. package/dist/esm/helpers/vault/client-side.js +69 -0
  210. package/dist/esm/helpers/vault/client-side.js.map +1 -0
  211. package/dist/esm/helpers/vault/server-side.d.ts +9 -0
  212. package/dist/esm/helpers/vault/server-side.d.ts.map +1 -0
  213. package/dist/esm/helpers/vault/server-side.js +123 -0
  214. package/dist/esm/helpers/vault/server-side.js.map +1 -0
  215. package/dist/esm/hooks/use-async-callback.d.ts +8 -0
  216. package/dist/esm/hooks/use-async-callback.d.ts.map +1 -0
  217. package/dist/esm/hooks/use-async-callback.js +38 -0
  218. package/dist/esm/hooks/use-async-callback.js.map +1 -0
  219. package/dist/esm/hooks/use-async-external-store.d.ts +9 -0
  220. package/dist/esm/hooks/use-async-external-store.d.ts.map +1 -0
  221. package/dist/esm/hooks/use-async-external-store.js +20 -0
  222. package/dist/esm/hooks/use-async-external-store.js.map +1 -0
  223. package/dist/esm/hooks/use-hash.d.ts +5 -0
  224. package/dist/esm/hooks/use-hash.d.ts.map +1 -0
  225. package/dist/esm/hooks/use-hash.js +15 -0
  226. package/dist/esm/hooks/use-hash.js.map +1 -0
  227. package/dist/esm/hooks/use-hover.d.ts +8 -0
  228. package/dist/esm/hooks/use-hover.d.ts.map +1 -0
  229. package/dist/esm/hooks/use-hover.js +59 -0
  230. package/dist/esm/hooks/use-hover.js.map +1 -0
  231. package/dist/esm/hooks/use-strict-memo.d.ts +10 -0
  232. package/dist/esm/hooks/use-strict-memo.d.ts.map +1 -0
  233. package/dist/esm/hooks/use-strict-memo.js +119 -0
  234. package/dist/esm/hooks/use-strict-memo.js.map +1 -0
  235. package/dist/esm/index.d.ts +5 -0
  236. package/dist/esm/index.js +6 -0
  237. package/dist/esm/interface/admin-interface.d.ts +308 -0
  238. package/dist/esm/interface/admin-interface.d.ts.map +1 -0
  239. package/dist/esm/interface/admin-interface.js +463 -0
  240. package/dist/esm/interface/admin-interface.js.map +1 -0
  241. package/dist/esm/interface/admin-metrics.d.ts +597 -0
  242. package/dist/esm/interface/admin-metrics.d.ts.map +1 -0
  243. package/dist/esm/interface/admin-metrics.js +134 -0
  244. package/dist/esm/interface/admin-metrics.js.map +1 -0
  245. package/dist/esm/interface/client-interface.d.ts +447 -0
  246. package/dist/esm/interface/client-interface.d.ts.map +1 -0
  247. package/dist/esm/interface/client-interface.js +1946 -0
  248. package/dist/esm/interface/client-interface.js.map +1 -0
  249. package/dist/esm/interface/client-interface.test.d.ts +1 -0
  250. package/dist/esm/interface/client-interface.test.js +559 -0
  251. package/dist/esm/interface/client-interface.test.js.map +1 -0
  252. package/dist/esm/interface/conversations.d.ts +314 -0
  253. package/dist/esm/interface/conversations.d.ts.map +1 -0
  254. package/dist/esm/interface/conversations.js +108 -0
  255. package/dist/esm/interface/conversations.js.map +1 -0
  256. package/dist/esm/interface/crud/analytics.d.ts +14 -0
  257. package/dist/esm/interface/crud/analytics.d.ts.map +1 -0
  258. package/dist/esm/interface/crud/analytics.js +1 -0
  259. package/dist/esm/interface/crud/connected-accounts.d.ts +69 -0
  260. package/dist/esm/interface/crud/connected-accounts.d.ts.map +1 -0
  261. package/dist/esm/interface/crud/connected-accounts.js +35 -0
  262. package/dist/esm/interface/crud/connected-accounts.js.map +1 -0
  263. package/dist/esm/interface/crud/contact-channels.d.ts +182 -0
  264. package/dist/esm/interface/crud/contact-channels.d.ts.map +1 -0
  265. package/dist/esm/interface/crud/contact-channels.js +68 -0
  266. package/dist/esm/interface/crud/contact-channels.js.map +1 -0
  267. package/dist/esm/interface/crud/current-user.d.ts +286 -0
  268. package/dist/esm/interface/crud/current-user.d.ts.map +1 -0
  269. package/dist/esm/interface/crud/current-user.js +69 -0
  270. package/dist/esm/interface/crud/current-user.js.map +1 -0
  271. package/dist/esm/interface/crud/email-outbox.d.ts +1466 -0
  272. package/dist/esm/interface/crud/email-outbox.d.ts.map +1 -0
  273. package/dist/esm/interface/crud/email-outbox.js +190 -0
  274. package/dist/esm/interface/crud/email-outbox.js.map +1 -0
  275. package/dist/esm/interface/crud/email-templates.d.ts +86 -0
  276. package/dist/esm/interface/crud/email-templates.d.ts.map +1 -0
  277. package/dist/esm/interface/crud/email-templates.js +46 -0
  278. package/dist/esm/interface/crud/email-templates.js.map +1 -0
  279. package/dist/esm/interface/crud/emails.d.ts +42 -0
  280. package/dist/esm/interface/crud/emails.d.ts.map +1 -0
  281. package/dist/esm/interface/crud/emails.js +19 -0
  282. package/dist/esm/interface/crud/emails.js.map +1 -0
  283. package/dist/esm/interface/crud/internal-api-keys.d.ts +141 -0
  284. package/dist/esm/interface/crud/internal-api-keys.d.ts.map +1 -0
  285. package/dist/esm/interface/crud/internal-api-keys.js +49 -0
  286. package/dist/esm/interface/crud/internal-api-keys.js.map +1 -0
  287. package/dist/esm/interface/crud/invoices.d.ts +43 -0
  288. package/dist/esm/interface/crud/invoices.d.ts.map +1 -0
  289. package/dist/esm/interface/crud/invoices.js +25 -0
  290. package/dist/esm/interface/crud/invoices.js.map +1 -0
  291. package/dist/esm/interface/crud/items.d.ts +31 -0
  292. package/dist/esm/interface/crud/items.d.ts.map +1 -0
  293. package/dist/esm/interface/crud/items.js +23 -0
  294. package/dist/esm/interface/crud/items.js.map +1 -0
  295. package/dist/esm/interface/crud/notification-preferences.d.ts +39 -0
  296. package/dist/esm/interface/crud/notification-preferences.d.ts.map +1 -0
  297. package/dist/esm/interface/crud/notification-preferences.js +31 -0
  298. package/dist/esm/interface/crud/notification-preferences.js.map +1 -0
  299. package/dist/esm/interface/crud/oauth-providers.d.ts +187 -0
  300. package/dist/esm/interface/crud/oauth-providers.d.ts.map +1 -0
  301. package/dist/esm/interface/crud/oauth-providers.js +75 -0
  302. package/dist/esm/interface/crud/oauth-providers.js.map +1 -0
  303. package/dist/esm/interface/crud/products.d.ts +182 -0
  304. package/dist/esm/interface/crud/products.d.ts.map +1 -0
  305. package/dist/esm/interface/crud/products.js +29 -0
  306. package/dist/esm/interface/crud/products.js.map +1 -0
  307. package/dist/esm/interface/crud/project-api-keys.d.ts +204 -0
  308. package/dist/esm/interface/crud/project-api-keys.d.ts.map +1 -0
  309. package/dist/esm/interface/crud/project-api-keys.js +72 -0
  310. package/dist/esm/interface/crud/project-api-keys.js.map +1 -0
  311. package/dist/esm/interface/crud/project-permissions.d.ts +162 -0
  312. package/dist/esm/interface/crud/project-permissions.d.ts.map +1 -0
  313. package/dist/esm/interface/crud/project-permissions.js +104 -0
  314. package/dist/esm/interface/crud/project-permissions.js.map +1 -0
  315. package/dist/esm/interface/crud/projects.d.ts +852 -0
  316. package/dist/esm/interface/crud/projects.d.ts.map +1 -0
  317. package/dist/esm/interface/crud/projects.js +193 -0
  318. package/dist/esm/interface/crud/projects.js.map +1 -0
  319. package/dist/esm/interface/crud/session-replays.d.ts +83 -0
  320. package/dist/esm/interface/crud/session-replays.d.ts.map +1 -0
  321. package/dist/esm/interface/crud/session-replays.js +1 -0
  322. package/dist/esm/interface/crud/sessions.d.ts +151 -0
  323. package/dist/esm/interface/crud/sessions.d.ts.map +1 -0
  324. package/dist/esm/interface/crud/sessions.js +56 -0
  325. package/dist/esm/interface/crud/sessions.js.map +1 -0
  326. package/dist/esm/interface/crud/sign-up-rules.d.ts +15 -0
  327. package/dist/esm/interface/crud/sign-up-rules.d.ts.map +1 -0
  328. package/dist/esm/interface/crud/sign-up-rules.js +1 -0
  329. package/dist/esm/interface/crud/svix-token.d.ts +32 -0
  330. package/dist/esm/interface/crud/svix-token.d.ts.map +1 -0
  331. package/dist/esm/interface/crud/svix-token.js +18 -0
  332. package/dist/esm/interface/crud/svix-token.js.map +1 -0
  333. package/dist/esm/interface/crud/team-invitation-details.d.ts +32 -0
  334. package/dist/esm/interface/crud/team-invitation-details.d.ts.map +1 -0
  335. package/dist/esm/interface/crud/team-invitation-details.js +21 -0
  336. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -0
  337. package/dist/esm/interface/crud/team-invitation.d.ts +55 -0
  338. package/dist/esm/interface/crud/team-invitation.d.ts.map +1 -0
  339. package/dist/esm/interface/crud/team-invitation.js +37 -0
  340. package/dist/esm/interface/crud/team-invitation.js.map +1 -0
  341. package/dist/esm/interface/crud/team-member-profiles.d.ts +287 -0
  342. package/dist/esm/interface/crud/team-member-profiles.d.ts.map +1 -0
  343. package/dist/esm/interface/crud/team-member-profiles.js +58 -0
  344. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -0
  345. package/dist/esm/interface/crud/team-memberships.d.ts +76 -0
  346. package/dist/esm/interface/crud/team-memberships.d.ts.map +1 -0
  347. package/dist/esm/interface/crud/team-memberships.js +54 -0
  348. package/dist/esm/interface/crud/team-memberships.js.map +1 -0
  349. package/dist/esm/interface/crud/team-permissions.d.ts +170 -0
  350. package/dist/esm/interface/crud/team-permissions.d.ts.map +1 -0
  351. package/dist/esm/interface/crud/team-permissions.js +105 -0
  352. package/dist/esm/interface/crud/team-permissions.js.map +1 -0
  353. package/dist/esm/interface/crud/teams.d.ts +300 -0
  354. package/dist/esm/interface/crud/teams.d.ts.map +1 -0
  355. package/dist/esm/interface/crud/teams.js +129 -0
  356. package/dist/esm/interface/crud/teams.js.map +1 -0
  357. package/dist/esm/interface/crud/transactions.d.ts +183 -0
  358. package/dist/esm/interface/crud/transactions.d.ts.map +1 -0
  359. package/dist/esm/interface/crud/transactions.js +85 -0
  360. package/dist/esm/interface/crud/transactions.js.map +1 -0
  361. package/dist/esm/interface/crud/users.d.ts +654 -0
  362. package/dist/esm/interface/crud/users.d.ts.map +1 -0
  363. package/dist/esm/interface/crud/users.js +181 -0
  364. package/dist/esm/interface/crud/users.js.map +1 -0
  365. package/dist/esm/interface/handler-urls.d.ts +51 -0
  366. package/dist/esm/interface/handler-urls.d.ts.map +1 -0
  367. package/dist/esm/interface/handler-urls.js +3 -0
  368. package/dist/esm/interface/page-component-versions.d.ts +25 -0
  369. package/dist/esm/interface/page-component-versions.d.ts.map +1 -0
  370. package/dist/esm/interface/page-component-versions.js +1661 -0
  371. package/dist/esm/interface/page-component-versions.js.map +1 -0
  372. package/dist/esm/interface/server-interface.d.ts +255 -0
  373. package/dist/esm/interface/server-interface.d.ts.map +1 -0
  374. package/dist/esm/interface/server-interface.js +459 -0
  375. package/dist/esm/interface/server-interface.js.map +1 -0
  376. package/dist/esm/interface/webhooks.d.ts +326 -0
  377. package/dist/esm/interface/webhooks.d.ts.map +1 -0
  378. package/dist/esm/interface/webhooks.js +22 -0
  379. package/dist/esm/interface/webhooks.js.map +1 -0
  380. package/dist/esm/known-errors.d.ts +575 -0
  381. package/dist/esm/known-errors.d.ts.map +1 -0
  382. package/dist/esm/known-errors.js +791 -0
  383. package/dist/esm/known-errors.js.map +1 -0
  384. package/dist/esm/local-emulator.d.ts +6 -0
  385. package/dist/esm/local-emulator.d.ts.map +1 -0
  386. package/dist/esm/local-emulator.js +7 -0
  387. package/dist/esm/local-emulator.js.map +1 -0
  388. package/dist/esm/payments/payment-methods.d.ts +64 -0
  389. package/dist/esm/payments/payment-methods.d.ts.map +1 -0
  390. package/dist/esm/payments/payment-methods.js +205 -0
  391. package/dist/esm/payments/payment-methods.js.map +1 -0
  392. package/dist/esm/payments/stripe-limits.d.ts +17 -0
  393. package/dist/esm/payments/stripe-limits.d.ts.map +1 -0
  394. package/dist/esm/payments/stripe-limits.js +17 -0
  395. package/dist/esm/payments/stripe-limits.js.map +1 -0
  396. package/dist/esm/plans.d.ts +72 -0
  397. package/dist/esm/plans.d.ts.map +1 -0
  398. package/dist/esm/plans.js +81 -0
  399. package/dist/esm/plans.js.map +1 -0
  400. package/dist/esm/schema-fields.d.ts +472 -0
  401. package/dist/esm/schema-fields.d.ts.map +1 -0
  402. package/dist/esm/schema-fields.js +1009 -0
  403. package/dist/esm/schema-fields.js.map +1 -0
  404. package/dist/esm/sessions.d.ts +165 -0
  405. package/dist/esm/sessions.d.ts.map +1 -0
  406. package/dist/esm/sessions.js +226 -0
  407. package/dist/esm/sessions.js.map +1 -0
  408. package/dist/esm/stack-config-file.d.ts +15 -0
  409. package/dist/esm/stack-config-file.d.ts.map +1 -0
  410. package/dist/esm/stack-config-file.js +76 -0
  411. package/dist/esm/stack-config-file.js.map +1 -0
  412. package/dist/esm/utils/api-keys.d.ts +26 -0
  413. package/dist/esm/utils/api-keys.d.ts.map +1 -0
  414. package/dist/esm/utils/api-keys.js +77 -0
  415. package/dist/esm/utils/api-keys.js.map +1 -0
  416. package/dist/esm/utils/arrays.d.ts +25 -0
  417. package/dist/esm/utils/arrays.d.ts.map +1 -0
  418. package/dist/esm/utils/arrays.js +552 -0
  419. package/dist/esm/utils/arrays.js.map +1 -0
  420. package/dist/esm/utils/auth-methods.d.ts +6 -0
  421. package/dist/esm/utils/auth-methods.d.ts.map +1 -0
  422. package/dist/esm/utils/auth-methods.js +11 -0
  423. package/dist/esm/utils/auth-methods.js.map +1 -0
  424. package/dist/esm/utils/base64.d.ts +6 -0
  425. package/dist/esm/utils/base64.d.ts.map +1 -0
  426. package/dist/esm/utils/base64.js +25 -0
  427. package/dist/esm/utils/base64.js.map +1 -0
  428. package/dist/esm/utils/booleans.d.ts +8 -0
  429. package/dist/esm/utils/booleans.d.ts.map +1 -0
  430. package/dist/esm/utils/booleans.js +35 -0
  431. package/dist/esm/utils/booleans.js.map +1 -0
  432. package/dist/esm/utils/browser-compat.d.ts +10 -0
  433. package/dist/esm/utils/browser-compat.d.ts.map +1 -0
  434. package/dist/esm/utils/browser-compat.js +21 -0
  435. package/dist/esm/utils/browser-compat.js.map +1 -0
  436. package/dist/esm/utils/bytes.d.ts +17 -0
  437. package/dist/esm/utils/bytes.d.ts.map +1 -0
  438. package/dist/esm/utils/bytes.js +290 -0
  439. package/dist/esm/utils/bytes.js.map +1 -0
  440. package/dist/esm/utils/caches.d.ts +102 -0
  441. package/dist/esm/utils/caches.d.ts.map +1 -0
  442. package/dist/esm/utils/caches.js +185 -0
  443. package/dist/esm/utils/caches.js.map +1 -0
  444. package/dist/esm/utils/cel-fields.d.ts +23 -0
  445. package/dist/esm/utils/cel-fields.d.ts.map +1 -0
  446. package/dist/esm/utils/cel-fields.js +99 -0
  447. package/dist/esm/utils/cel-fields.js.map +1 -0
  448. package/dist/esm/utils/compile-time.d.ts +10 -0
  449. package/dist/esm/utils/compile-time.d.ts.map +1 -0
  450. package/dist/esm/utils/compile-time.js +14 -0
  451. package/dist/esm/utils/compile-time.js.map +1 -0
  452. package/dist/esm/utils/country-codes.d.ts +11 -0
  453. package/dist/esm/utils/country-codes.d.ts.map +1 -0
  454. package/dist/esm/utils/country-codes.js +36 -0
  455. package/dist/esm/utils/country-codes.js.map +1 -0
  456. package/dist/esm/utils/crypto.d.ts +48 -0
  457. package/dist/esm/utils/crypto.d.ts.map +1 -0
  458. package/dist/esm/utils/crypto.js +208 -0
  459. package/dist/esm/utils/crypto.js.map +1 -0
  460. package/dist/esm/utils/currencies.d.ts +8 -0
  461. package/dist/esm/utils/currencies.d.ts.map +1 -0
  462. package/dist/esm/utils/currencies.js +50 -0
  463. package/dist/esm/utils/currencies.js.map +1 -0
  464. package/dist/esm/utils/currency-constants.d.ts +39 -0
  465. package/dist/esm/utils/currency-constants.d.ts.map +1 -0
  466. package/dist/esm/utils/currency-constants.js +42 -0
  467. package/dist/esm/utils/currency-constants.js.map +1 -0
  468. package/dist/esm/utils/dates.d.ts +23 -0
  469. package/dist/esm/utils/dates.d.ts.map +1 -0
  470. package/dist/esm/utils/dates.js +167 -0
  471. package/dist/esm/utils/dates.js.map +1 -0
  472. package/dist/esm/utils/dev-env-state-path.d.ts +6 -0
  473. package/dist/esm/utils/dev-env-state-path.d.ts.map +1 -0
  474. package/dist/esm/utils/dev-env-state-path.js +15 -0
  475. package/dist/esm/utils/dev-env-state-path.js.map +1 -0
  476. package/dist/esm/utils/dom.d.ts +5 -0
  477. package/dist/esm/utils/dom.d.ts.map +1 -0
  478. package/dist/esm/utils/dom.js +11 -0
  479. package/dist/esm/utils/dom.js.map +1 -0
  480. package/dist/esm/utils/env.d.ts +25 -0
  481. package/dist/esm/utils/env.d.ts.map +1 -0
  482. package/dist/esm/utils/env.js +78 -0
  483. package/dist/esm/utils/env.js.map +1 -0
  484. package/dist/esm/utils/errors.d.ts +231 -0
  485. package/dist/esm/utils/errors.d.ts.map +1 -0
  486. package/dist/esm/utils/errors.js +385 -0
  487. package/dist/esm/utils/errors.js.map +1 -0
  488. package/dist/esm/utils/esbuild.d.ts +16 -0
  489. package/dist/esm/utils/esbuild.d.ts.map +1 -0
  490. package/dist/esm/utils/esbuild.js +182 -0
  491. package/dist/esm/utils/esbuild.js.map +1 -0
  492. package/dist/esm/utils/featurebase.d.ts +30 -0
  493. package/dist/esm/utils/featurebase.d.ts.map +1 -0
  494. package/dist/esm/utils/featurebase.js +166 -0
  495. package/dist/esm/utils/featurebase.js.map +1 -0
  496. package/dist/esm/utils/fs.d.ts +9 -0
  497. package/dist/esm/utils/fs.d.ts.map +1 -0
  498. package/dist/esm/utils/fs.js +25 -0
  499. package/dist/esm/utils/fs.js.map +1 -0
  500. package/dist/esm/utils/functions.d.ts +6 -0
  501. package/dist/esm/utils/functions.d.ts.map +1 -0
  502. package/dist/esm/utils/functions.js +34 -0
  503. package/dist/esm/utils/functions.js.map +1 -0
  504. package/dist/esm/utils/geo.d.ts +24 -0
  505. package/dist/esm/utils/geo.d.ts.map +1 -0
  506. package/dist/esm/utils/geo.js +16 -0
  507. package/dist/esm/utils/geo.js.map +1 -0
  508. package/dist/esm/utils/globals.d.ts +13 -0
  509. package/dist/esm/utils/globals.d.ts.map +1 -0
  510. package/dist/esm/utils/globals.js +34 -0
  511. package/dist/esm/utils/globals.js.map +1 -0
  512. package/dist/esm/utils/hashes.d.ts +9 -0
  513. package/dist/esm/utils/hashes.d.ts.map +1 -0
  514. package/dist/esm/utils/hashes.js +40 -0
  515. package/dist/esm/utils/hashes.js.map +1 -0
  516. package/dist/esm/utils/html.d.ts +7 -0
  517. package/dist/esm/utils/html.d.ts.map +1 -0
  518. package/dist/esm/utils/html.js +33 -0
  519. package/dist/esm/utils/html.js.map +1 -0
  520. package/dist/esm/utils/http.d.ts +45 -0
  521. package/dist/esm/utils/http.d.ts.map +1 -0
  522. package/dist/esm/utils/http.js +75 -0
  523. package/dist/esm/utils/http.js.map +1 -0
  524. package/dist/esm/utils/ips.d.ts +8 -0
  525. package/dist/esm/utils/ips.d.ts.map +1 -0
  526. package/dist/esm/utils/ips.js +36 -0
  527. package/dist/esm/utils/ips.js.map +1 -0
  528. package/dist/esm/utils/json.d.ts +15 -0
  529. package/dist/esm/utils/json.d.ts.map +1 -0
  530. package/dist/esm/utils/json.js +178 -0
  531. package/dist/esm/utils/json.js.map +1 -0
  532. package/dist/esm/utils/jsx-editable-transpiler.d.ts +68 -0
  533. package/dist/esm/utils/jsx-editable-transpiler.d.ts.map +1 -0
  534. package/dist/esm/utils/jsx-editable-transpiler.js +216 -0
  535. package/dist/esm/utils/jsx-editable-transpiler.js.map +1 -0
  536. package/dist/esm/utils/jsx-editable-transpiler.test.d.ts +1 -0
  537. package/dist/esm/utils/jsx-editable-transpiler.test.js +122 -0
  538. package/dist/esm/utils/jsx-editable-transpiler.test.js.map +1 -0
  539. package/dist/esm/utils/jwt.d.ts +79 -0
  540. package/dist/esm/utils/jwt.d.ts.map +1 -0
  541. package/dist/esm/utils/jwt.js +102 -0
  542. package/dist/esm/utils/jwt.js.map +1 -0
  543. package/dist/esm/utils/locks.d.ts +17 -0
  544. package/dist/esm/utils/locks.d.ts.map +1 -0
  545. package/dist/esm/utils/locks.js +54 -0
  546. package/dist/esm/utils/locks.js.map +1 -0
  547. package/dist/esm/utils/maps.d.ts +61 -0
  548. package/dist/esm/utils/maps.d.ts.map +1 -0
  549. package/dist/esm/utils/maps.js +297 -0
  550. package/dist/esm/utils/maps.js.map +1 -0
  551. package/dist/esm/utils/math.d.ts +8 -0
  552. package/dist/esm/utils/math.d.ts.map +1 -0
  553. package/dist/esm/utils/math.js +21 -0
  554. package/dist/esm/utils/math.js.map +1 -0
  555. package/dist/esm/utils/monkey-patch.d.ts +7 -0
  556. package/dist/esm/utils/monkey-patch.d.ts.map +1 -0
  557. package/dist/esm/utils/monkey-patch.js +21 -0
  558. package/dist/esm/utils/monkey-patch.js.map +1 -0
  559. package/dist/esm/utils/node-http.d.ts +17 -0
  560. package/dist/esm/utils/node-http.d.ts.map +1 -0
  561. package/dist/esm/utils/node-http.js +38 -0
  562. package/dist/esm/utils/node-http.js.map +1 -0
  563. package/dist/esm/utils/numbers.d.ts +7 -0
  564. package/dist/esm/utils/numbers.d.ts.map +1 -0
  565. package/dist/esm/utils/numbers.js +75 -0
  566. package/dist/esm/utils/numbers.js.map +1 -0
  567. package/dist/esm/utils/oauth.d.ts +11 -0
  568. package/dist/esm/utils/oauth.d.ts.map +1 -0
  569. package/dist/esm/utils/oauth.js +27 -0
  570. package/dist/esm/utils/oauth.js.map +1 -0
  571. package/dist/esm/utils/objects.d.ts +59 -0
  572. package/dist/esm/utils/objects.d.ts.map +1 -0
  573. package/dist/esm/utils/objects.js +818 -0
  574. package/dist/esm/utils/objects.js.map +1 -0
  575. package/dist/esm/utils/paginated-lists.d.ts +442 -0
  576. package/dist/esm/utils/paginated-lists.d.ts.map +1 -0
  577. package/dist/esm/utils/paginated-lists.js +411 -0
  578. package/dist/esm/utils/paginated-lists.js.map +1 -0
  579. package/dist/esm/utils/paginated-lists.test.d.ts +1 -0
  580. package/dist/esm/utils/paginated-lists.test.js +1304 -0
  581. package/dist/esm/utils/paginated-lists.test.js.map +1 -0
  582. package/dist/esm/utils/passkey.d.ts +2 -0
  583. package/dist/esm/utils/passkey.js +1 -0
  584. package/dist/esm/utils/promises.d.ts +80 -0
  585. package/dist/esm/utils/promises.d.ts.map +1 -0
  586. package/dist/esm/utils/promises.js +333 -0
  587. package/dist/esm/utils/promises.js.map +1 -0
  588. package/dist/esm/utils/proxies.d.ts +13 -0
  589. package/dist/esm/utils/proxies.d.ts.map +1 -0
  590. package/dist/esm/utils/proxies.js +197 -0
  591. package/dist/esm/utils/proxies.js.map +1 -0
  592. package/dist/esm/utils/react.d.ts +61 -0
  593. package/dist/esm/utils/react.d.ts.map +1 -0
  594. package/dist/esm/utils/react.js +229 -0
  595. package/dist/esm/utils/react.js.map +1 -0
  596. package/dist/esm/utils/redirect-urls.d.ts +30 -0
  597. package/dist/esm/utils/redirect-urls.d.ts.map +1 -0
  598. package/dist/esm/utils/redirect-urls.js +215 -0
  599. package/dist/esm/utils/redirect-urls.js.map +1 -0
  600. package/dist/esm/utils/regex.d.ts +5 -0
  601. package/dist/esm/utils/regex.d.ts.map +1 -0
  602. package/dist/esm/utils/regex.js +13 -0
  603. package/dist/esm/utils/regex.js.map +1 -0
  604. package/dist/esm/utils/results.d.ts +70 -0
  605. package/dist/esm/utils/results.d.ts.map +1 -0
  606. package/dist/esm/utils/results.js +339 -0
  607. package/dist/esm/utils/results.js.map +1 -0
  608. package/dist/esm/utils/sentry.d.ts +13 -0
  609. package/dist/esm/utils/sentry.d.ts.map +1 -0
  610. package/dist/esm/utils/sentry.js +14 -0
  611. package/dist/esm/utils/sentry.js.map +1 -0
  612. package/dist/esm/utils/stores.d.ts +104 -0
  613. package/dist/esm/utils/stores.d.ts.map +1 -0
  614. package/dist/esm/utils/stores.js +175 -0
  615. package/dist/esm/utils/stores.js.map +1 -0
  616. package/dist/esm/utils/strings.d.ts +76 -0
  617. package/dist/esm/utils/strings.d.ts.map +1 -0
  618. package/dist/esm/utils/strings.js +530 -0
  619. package/dist/esm/utils/strings.js.map +1 -0
  620. package/dist/esm/utils/strings.nicify.test.d.ts +1 -0
  621. package/dist/esm/utils/strings.nicify.test.js +243 -0
  622. package/dist/esm/utils/strings.nicify.test.js.map +1 -0
  623. package/dist/esm/utils/telemetry.d.ts +15 -0
  624. package/dist/esm/utils/telemetry.d.ts.map +1 -0
  625. package/dist/esm/utils/telemetry.js +31 -0
  626. package/dist/esm/utils/telemetry.js.map +1 -0
  627. package/dist/esm/utils/turnstile-browser.d.ts +32 -0
  628. package/dist/esm/utils/turnstile-browser.d.ts.map +1 -0
  629. package/dist/esm/utils/turnstile-browser.js +61 -0
  630. package/dist/esm/utils/turnstile-browser.js.map +1 -0
  631. package/dist/esm/utils/turnstile-flow.d.ts +29 -0
  632. package/dist/esm/utils/turnstile-flow.d.ts.map +1 -0
  633. package/dist/esm/utils/turnstile-flow.js +219 -0
  634. package/dist/esm/utils/turnstile-flow.js.map +1 -0
  635. package/dist/esm/utils/turnstile-flow.test.d.ts +1 -0
  636. package/dist/esm/utils/turnstile-flow.test.js +75 -0
  637. package/dist/esm/utils/turnstile-flow.test.js.map +1 -0
  638. package/dist/esm/utils/turnstile.d.ts +17 -0
  639. package/dist/esm/utils/turnstile.d.ts.map +1 -0
  640. package/dist/esm/utils/turnstile.js +25 -0
  641. package/dist/esm/utils/turnstile.js.map +1 -0
  642. package/dist/esm/utils/typed-arrays.d.ts +14 -0
  643. package/dist/esm/utils/typed-arrays.d.ts.map +1 -0
  644. package/dist/esm/utils/typed-arrays.js +20 -0
  645. package/dist/esm/utils/typed-arrays.js.map +1 -0
  646. package/dist/esm/utils/types.d.ts +77 -0
  647. package/dist/esm/utils/types.d.ts.map +1 -0
  648. package/dist/esm/utils/types.js +55 -0
  649. package/dist/esm/utils/types.js.map +1 -0
  650. package/dist/esm/utils/unicode.d.ts +5 -0
  651. package/dist/esm/utils/unicode.d.ts.map +1 -0
  652. package/dist/esm/utils/unicode.js +24 -0
  653. package/dist/esm/utils/unicode.js.map +1 -0
  654. package/dist/esm/utils/urls.d.ts +28 -0
  655. package/dist/esm/utils/urls.d.ts.map +1 -0
  656. package/dist/esm/utils/urls.js +259 -0
  657. package/dist/esm/utils/urls.js.map +1 -0
  658. package/dist/esm/utils/uuids.d.ts +6 -0
  659. package/dist/esm/utils/uuids.d.ts.map +1 -0
  660. package/dist/esm/utils/uuids.js +36 -0
  661. package/dist/esm/utils/uuids.js.map +1 -0
  662. package/dist/global.d.d.ts +0 -0
  663. package/dist/global.d.ts +1 -0
  664. package/dist/helpers/emails.d.ts +69 -0
  665. package/dist/helpers/emails.d.ts.map +1 -0
  666. package/dist/helpers/emails.js +252 -0
  667. package/dist/helpers/emails.js.map +1 -0
  668. package/dist/helpers/init-prompt.d.ts +5 -0
  669. package/dist/helpers/init-prompt.d.ts.map +1 -0
  670. package/dist/helpers/init-prompt.js +42 -0
  671. package/dist/helpers/init-prompt.js.map +1 -0
  672. package/dist/helpers/password.d.ts +6 -0
  673. package/dist/helpers/password.d.ts.map +1 -0
  674. package/dist/helpers/password.js +15 -0
  675. package/dist/helpers/password.js.map +1 -0
  676. package/dist/helpers/production-mode.d.ts +11 -0
  677. package/dist/helpers/production-mode.d.ts.map +1 -0
  678. package/dist/helpers/production-mode.js +48 -0
  679. package/dist/helpers/production-mode.js.map +1 -0
  680. package/dist/helpers/support-sla.d.ts +48 -0
  681. package/dist/helpers/support-sla.d.ts.map +1 -0
  682. package/dist/helpers/support-sla.js +72 -0
  683. package/dist/helpers/support-sla.js.map +1 -0
  684. package/dist/helpers/support-sla.test.d.ts +1 -0
  685. package/dist/helpers/support-sla.test.js +102 -0
  686. package/dist/helpers/support-sla.test.js.map +1 -0
  687. package/dist/helpers/vault/client-side.d.ts +16 -0
  688. package/dist/helpers/vault/client-side.d.ts.map +1 -0
  689. package/dist/helpers/vault/client-side.js +73 -0
  690. package/dist/helpers/vault/client-side.js.map +1 -0
  691. package/dist/helpers/vault/server-side.d.ts +9 -0
  692. package/dist/helpers/vault/server-side.d.ts.map +1 -0
  693. package/dist/helpers/vault/server-side.js +126 -0
  694. package/dist/helpers/vault/server-side.js.map +1 -0
  695. package/dist/hooks/use-async-callback.d.ts +8 -0
  696. package/dist/hooks/use-async-callback.d.ts.map +1 -0
  697. package/dist/hooks/use-async-callback.js +42 -0
  698. package/dist/hooks/use-async-callback.js.map +1 -0
  699. package/dist/hooks/use-async-external-store.d.ts +9 -0
  700. package/dist/hooks/use-async-external-store.d.ts.map +1 -0
  701. package/dist/hooks/use-async-external-store.js +22 -0
  702. package/dist/hooks/use-async-external-store.js.map +1 -0
  703. package/dist/hooks/use-hash.d.ts +5 -0
  704. package/dist/hooks/use-hash.d.ts.map +1 -0
  705. package/dist/hooks/use-hash.js +17 -0
  706. package/dist/hooks/use-hash.js.map +1 -0
  707. package/dist/hooks/use-hover.d.ts +8 -0
  708. package/dist/hooks/use-hover.d.ts.map +1 -0
  709. package/dist/hooks/use-hover.js +61 -0
  710. package/dist/hooks/use-hover.js.map +1 -0
  711. package/dist/hooks/use-strict-memo.d.ts +10 -0
  712. package/dist/hooks/use-strict-memo.d.ts.map +1 -0
  713. package/dist/hooks/use-strict-memo.js +121 -0
  714. package/dist/hooks/use-strict-memo.js.map +1 -0
  715. package/dist/index-D9ysacya.d.ts +153 -0
  716. package/dist/index-D9ysacya.d.ts.map +1 -0
  717. package/dist/index.d.ts +5 -0
  718. package/dist/index.js +37 -0
  719. package/dist/interface/admin-interface.d.ts +308 -0
  720. package/dist/interface/admin-interface.d.ts.map +1 -0
  721. package/dist/interface/admin-interface.js +465 -0
  722. package/dist/interface/admin-interface.js.map +1 -0
  723. package/dist/interface/admin-metrics.d.ts +597 -0
  724. package/dist/interface/admin-metrics.d.ts.map +1 -0
  725. package/dist/interface/admin-metrics.js +153 -0
  726. package/dist/interface/admin-metrics.js.map +1 -0
  727. package/dist/interface/client-interface.d.ts +447 -0
  728. package/dist/interface/client-interface.d.ts.map +1 -0
  729. package/dist/interface/client-interface.js +1948 -0
  730. package/dist/interface/client-interface.js.map +1 -0
  731. package/dist/interface/client-interface.test.d.ts +1 -0
  732. package/dist/interface/client-interface.test.js +559 -0
  733. package/dist/interface/client-interface.test.js.map +1 -0
  734. package/dist/interface/conversations.d.ts +314 -0
  735. package/dist/interface/conversations.d.ts.map +1 -0
  736. package/dist/interface/conversations.js +121 -0
  737. package/dist/interface/conversations.js.map +1 -0
  738. package/dist/interface/crud/analytics.d.ts +14 -0
  739. package/dist/interface/crud/analytics.d.ts.map +1 -0
  740. package/dist/interface/crud/analytics.js +0 -0
  741. package/dist/interface/crud/connected-accounts.d.ts +68 -0
  742. package/dist/interface/crud/connected-accounts.d.ts.map +1 -0
  743. package/dist/interface/crud/connected-accounts.js +41 -0
  744. package/dist/interface/crud/connected-accounts.js.map +1 -0
  745. package/dist/interface/crud/contact-channels.d.ts +181 -0
  746. package/dist/interface/crud/contact-channels.d.ts.map +1 -0
  747. package/dist/interface/crud/contact-channels.js +76 -0
  748. package/dist/interface/crud/contact-channels.js.map +1 -0
  749. package/dist/interface/crud/current-user.d.ts +285 -0
  750. package/dist/interface/crud/current-user.d.ts.map +1 -0
  751. package/dist/interface/crud/current-user.js +71 -0
  752. package/dist/interface/crud/current-user.js.map +1 -0
  753. package/dist/interface/crud/email-outbox.d.ts +1465 -0
  754. package/dist/interface/crud/email-outbox.d.ts.map +1 -0
  755. package/dist/interface/crud/email-outbox.js +195 -0
  756. package/dist/interface/crud/email-outbox.js.map +1 -0
  757. package/dist/interface/crud/email-templates.d.ts +85 -0
  758. package/dist/interface/crud/email-templates.d.ts.map +1 -0
  759. package/dist/interface/crud/email-templates.js +53 -0
  760. package/dist/interface/crud/email-templates.js.map +1 -0
  761. package/dist/interface/crud/emails.d.ts +41 -0
  762. package/dist/interface/crud/emails.d.ts.map +1 -0
  763. package/dist/interface/crud/emails.js +23 -0
  764. package/dist/interface/crud/emails.js.map +1 -0
  765. package/dist/interface/crud/internal-api-keys.d.ts +140 -0
  766. package/dist/interface/crud/internal-api-keys.d.ts.map +1 -0
  767. package/dist/interface/crud/internal-api-keys.js +56 -0
  768. package/dist/interface/crud/internal-api-keys.js.map +1 -0
  769. package/dist/interface/crud/invoices.d.ts +43 -0
  770. package/dist/interface/crud/invoices.d.ts.map +1 -0
  771. package/dist/interface/crud/invoices.js +28 -0
  772. package/dist/interface/crud/invoices.js.map +1 -0
  773. package/dist/interface/crud/items.d.ts +30 -0
  774. package/dist/interface/crud/items.d.ts.map +1 -0
  775. package/dist/interface/crud/items.js +25 -0
  776. package/dist/interface/crud/items.js.map +1 -0
  777. package/dist/interface/crud/notification-preferences.d.ts +38 -0
  778. package/dist/interface/crud/notification-preferences.d.ts.map +1 -0
  779. package/dist/interface/crud/notification-preferences.js +33 -0
  780. package/dist/interface/crud/notification-preferences.js.map +1 -0
  781. package/dist/interface/crud/oauth-providers.d.ts +186 -0
  782. package/dist/interface/crud/oauth-providers.d.ts.map +1 -0
  783. package/dist/interface/crud/oauth-providers.js +83 -0
  784. package/dist/interface/crud/oauth-providers.js.map +1 -0
  785. package/dist/interface/crud/products.d.ts +182 -0
  786. package/dist/interface/crud/products.d.ts.map +1 -0
  787. package/dist/interface/crud/products.js +32 -0
  788. package/dist/interface/crud/products.js.map +1 -0
  789. package/dist/interface/crud/project-api-keys.d.ts +203 -0
  790. package/dist/interface/crud/project-api-keys.d.ts.map +1 -0
  791. package/dist/interface/crud/project-api-keys.js +79 -0
  792. package/dist/interface/crud/project-api-keys.js.map +1 -0
  793. package/dist/interface/crud/project-permissions.d.ts +161 -0
  794. package/dist/interface/crud/project-permissions.d.ts.map +1 -0
  795. package/dist/interface/crud/project-permissions.js +116 -0
  796. package/dist/interface/crud/project-permissions.js.map +1 -0
  797. package/dist/interface/crud/projects.d.ts +851 -0
  798. package/dist/interface/crud/projects.d.ts.map +1 -0
  799. package/dist/interface/crud/projects.js +204 -0
  800. package/dist/interface/crud/projects.js.map +1 -0
  801. package/dist/interface/crud/session-replays.d.ts +83 -0
  802. package/dist/interface/crud/session-replays.d.ts.map +1 -0
  803. package/dist/interface/crud/session-replays.js +0 -0
  804. package/dist/interface/crud/sessions.d.ts +150 -0
  805. package/dist/interface/crud/sessions.d.ts.map +1 -0
  806. package/dist/interface/crud/sessions.js +62 -0
  807. package/dist/interface/crud/sessions.js.map +1 -0
  808. package/dist/interface/crud/sign-up-rules.d.ts +15 -0
  809. package/dist/interface/crud/sign-up-rules.d.ts.map +1 -0
  810. package/dist/interface/crud/sign-up-rules.js +0 -0
  811. package/dist/interface/crud/svix-token.d.ts +31 -0
  812. package/dist/interface/crud/svix-token.d.ts.map +1 -0
  813. package/dist/interface/crud/svix-token.js +22 -0
  814. package/dist/interface/crud/svix-token.js.map +1 -0
  815. package/dist/interface/crud/team-invitation-details.d.ts +31 -0
  816. package/dist/interface/crud/team-invitation-details.d.ts.map +1 -0
  817. package/dist/interface/crud/team-invitation-details.js +24 -0
  818. package/dist/interface/crud/team-invitation-details.js.map +1 -0
  819. package/dist/interface/crud/team-invitation.d.ts +54 -0
  820. package/dist/interface/crud/team-invitation.d.ts.map +1 -0
  821. package/dist/interface/crud/team-invitation.js +40 -0
  822. package/dist/interface/crud/team-invitation.js.map +1 -0
  823. package/dist/interface/crud/team-member-profiles.d.ts +286 -0
  824. package/dist/interface/crud/team-member-profiles.d.ts.map +1 -0
  825. package/dist/interface/crud/team-member-profiles.js +63 -0
  826. package/dist/interface/crud/team-member-profiles.js.map +1 -0
  827. package/dist/interface/crud/team-memberships.d.ts +75 -0
  828. package/dist/interface/crud/team-memberships.d.ts.map +1 -0
  829. package/dist/interface/crud/team-memberships.js +61 -0
  830. package/dist/interface/crud/team-memberships.js.map +1 -0
  831. package/dist/interface/crud/team-permissions.d.ts +169 -0
  832. package/dist/interface/crud/team-permissions.d.ts.map +1 -0
  833. package/dist/interface/crud/team-permissions.js +117 -0
  834. package/dist/interface/crud/team-permissions.js.map +1 -0
  835. package/dist/interface/crud/teams.d.ts +299 -0
  836. package/dist/interface/crud/teams.d.ts.map +1 -0
  837. package/dist/interface/crud/teams.js +142 -0
  838. package/dist/interface/crud/teams.js.map +1 -0
  839. package/dist/interface/crud/transactions.d.ts +183 -0
  840. package/dist/interface/crud/transactions.d.ts.map +1 -0
  841. package/dist/interface/crud/transactions.js +89 -0
  842. package/dist/interface/crud/transactions.js.map +1 -0
  843. package/dist/interface/crud/users.d.ts +653 -0
  844. package/dist/interface/crud/users.d.ts.map +1 -0
  845. package/dist/interface/crud/users.js +193 -0
  846. package/dist/interface/crud/users.js.map +1 -0
  847. package/dist/interface/handler-urls.d.ts +51 -0
  848. package/dist/interface/handler-urls.d.ts.map +1 -0
  849. package/dist/interface/handler-urls.js +16 -0
  850. package/dist/interface/page-component-versions.d.ts +25 -0
  851. package/dist/interface/page-component-versions.d.ts.map +1 -0
  852. package/dist/interface/page-component-versions.js +1664 -0
  853. package/dist/interface/page-component-versions.js.map +1 -0
  854. package/dist/interface/server-interface.d.ts +255 -0
  855. package/dist/interface/server-interface.d.ts.map +1 -0
  856. package/dist/interface/server-interface.js +461 -0
  857. package/dist/interface/server-interface.js.map +1 -0
  858. package/dist/interface/webhooks.d.ts +326 -0
  859. package/dist/interface/webhooks.d.ts.map +1 -0
  860. package/dist/interface/webhooks.js +24 -0
  861. package/dist/interface/webhooks.js.map +1 -0
  862. package/dist/known-errors.d.ts +575 -0
  863. package/dist/known-errors.d.ts.map +1 -0
  864. package/dist/known-errors.js +794 -0
  865. package/dist/known-errors.js.map +1 -0
  866. package/dist/local-emulator.d.ts +6 -0
  867. package/dist/local-emulator.d.ts.map +1 -0
  868. package/dist/local-emulator.js +10 -0
  869. package/dist/local-emulator.js.map +1 -0
  870. package/dist/payments/payment-methods.d.ts +64 -0
  871. package/dist/payments/payment-methods.d.ts.map +1 -0
  872. package/dist/payments/payment-methods.js +216 -0
  873. package/dist/payments/payment-methods.js.map +1 -0
  874. package/dist/payments/stripe-limits.d.ts +17 -0
  875. package/dist/payments/stripe-limits.d.ts.map +1 -0
  876. package/dist/payments/stripe-limits.js +20 -0
  877. package/dist/payments/stripe-limits.js.map +1 -0
  878. package/dist/plans.d.ts +72 -0
  879. package/dist/plans.d.ts.map +1 -0
  880. package/dist/plans.js +88 -0
  881. package/dist/plans.js.map +1 -0
  882. package/dist/schema-fields.d.ts +472 -0
  883. package/dist/schema-fields.d.ts.map +1 -0
  884. package/dist/schema-fields.js +1188 -0
  885. package/dist/schema-fields.js.map +1 -0
  886. package/dist/sessions.d.ts +165 -0
  887. package/dist/sessions.d.ts.map +1 -0
  888. package/dist/sessions.js +231 -0
  889. package/dist/sessions.js.map +1 -0
  890. package/dist/stack-config-file.d.ts +15 -0
  891. package/dist/stack-config-file.d.ts.map +1 -0
  892. package/dist/stack-config-file.js +82 -0
  893. package/dist/stack-config-file.js.map +1 -0
  894. package/dist/utils/api-keys.d.ts +26 -0
  895. package/dist/utils/api-keys.d.ts.map +1 -0
  896. package/dist/utils/api-keys.js +82 -0
  897. package/dist/utils/api-keys.js.map +1 -0
  898. package/dist/utils/arrays.d.ts +25 -0
  899. package/dist/utils/arrays.d.ts.map +1 -0
  900. package/dist/utils/arrays.js +569 -0
  901. package/dist/utils/arrays.js.map +1 -0
  902. package/dist/utils/auth-methods.d.ts +6 -0
  903. package/dist/utils/auth-methods.d.ts.map +1 -0
  904. package/dist/utils/auth-methods.js +13 -0
  905. package/dist/utils/auth-methods.js.map +1 -0
  906. package/dist/utils/base64.d.ts +6 -0
  907. package/dist/utils/base64.d.ts.map +1 -0
  908. package/dist/utils/base64.js +28 -0
  909. package/dist/utils/base64.js.map +1 -0
  910. package/dist/utils/booleans.d.ts +8 -0
  911. package/dist/utils/booleans.d.ts.map +1 -0
  912. package/dist/utils/booleans.js +38 -0
  913. package/dist/utils/booleans.js.map +1 -0
  914. package/dist/utils/browser-compat.d.ts +10 -0
  915. package/dist/utils/browser-compat.d.ts.map +1 -0
  916. package/dist/utils/browser-compat.js +23 -0
  917. package/dist/utils/browser-compat.js.map +1 -0
  918. package/dist/utils/bytes.d.ts +17 -0
  919. package/dist/utils/bytes.d.ts.map +1 -0
  920. package/dist/utils/bytes.js +304 -0
  921. package/dist/utils/bytes.js.map +1 -0
  922. package/dist/utils/caches.d.ts +102 -0
  923. package/dist/utils/caches.d.ts.map +1 -0
  924. package/dist/utils/caches.js +188 -0
  925. package/dist/utils/caches.js.map +1 -0
  926. package/dist/utils/cel-fields.d.ts +23 -0
  927. package/dist/utils/cel-fields.d.ts.map +1 -0
  928. package/dist/utils/cel-fields.js +108 -0
  929. package/dist/utils/cel-fields.js.map +1 -0
  930. package/dist/utils/compile-time.d.ts +10 -0
  931. package/dist/utils/compile-time.d.ts.map +1 -0
  932. package/dist/utils/compile-time.js +16 -0
  933. package/dist/utils/compile-time.js.map +1 -0
  934. package/dist/utils/country-codes.d.ts +11 -0
  935. package/dist/utils/country-codes.d.ts.map +1 -0
  936. package/dist/utils/country-codes.js +40 -0
  937. package/dist/utils/country-codes.js.map +1 -0
  938. package/dist/utils/crypto.d.ts +48 -0
  939. package/dist/utils/crypto.d.ts.map +1 -0
  940. package/dist/utils/crypto.js +215 -0
  941. package/dist/utils/crypto.js.map +1 -0
  942. package/dist/utils/currencies.d.ts +8 -0
  943. package/dist/utils/currencies.d.ts.map +1 -0
  944. package/dist/utils/currencies.js +52 -0
  945. package/dist/utils/currencies.js.map +1 -0
  946. package/dist/utils/currency-constants.d.ts +39 -0
  947. package/dist/utils/currency-constants.d.ts.map +1 -0
  948. package/dist/utils/currency-constants.js +44 -0
  949. package/dist/utils/currency-constants.js.map +1 -0
  950. package/dist/utils/dates.d.ts +23 -0
  951. package/dist/utils/dates.d.ts.map +1 -0
  952. package/dist/utils/dates.js +176 -0
  953. package/dist/utils/dates.js.map +1 -0
  954. package/dist/utils/dev-env-state-path.d.ts +6 -0
  955. package/dist/utils/dev-env-state-path.d.ts.map +1 -0
  956. package/dist/utils/dev-env-state-path.js +18 -0
  957. package/dist/utils/dev-env-state-path.js.map +1 -0
  958. package/dist/utils/dom.d.ts +5 -0
  959. package/dist/utils/dom.d.ts.map +1 -0
  960. package/dist/utils/dom.js +13 -0
  961. package/dist/utils/dom.js.map +1 -0
  962. package/dist/utils/env.d.ts +25 -0
  963. package/dist/utils/env.d.ts.map +1 -0
  964. package/dist/utils/env.js +85 -0
  965. package/dist/utils/env.js.map +1 -0
  966. package/dist/utils/errors.d.ts +231 -0
  967. package/dist/utils/errors.d.ts.map +1 -0
  968. package/dist/utils/errors.js +393 -0
  969. package/dist/utils/errors.js.map +1 -0
  970. package/dist/utils/esbuild.d.ts +16 -0
  971. package/dist/utils/esbuild.d.ts.map +1 -0
  972. package/dist/utils/esbuild.js +186 -0
  973. package/dist/utils/esbuild.js.map +1 -0
  974. package/dist/utils/featurebase.d.ts +30 -0
  975. package/dist/utils/featurebase.d.ts.map +1 -0
  976. package/dist/utils/featurebase.js +168 -0
  977. package/dist/utils/featurebase.js.map +1 -0
  978. package/dist/utils/fs.d.ts +9 -0
  979. package/dist/utils/fs.d.ts.map +1 -0
  980. package/dist/utils/fs.js +31 -0
  981. package/dist/utils/fs.js.map +1 -0
  982. package/dist/utils/functions.d.ts +6 -0
  983. package/dist/utils/functions.d.ts.map +1 -0
  984. package/dist/utils/functions.js +37 -0
  985. package/dist/utils/functions.js.map +1 -0
  986. package/dist/utils/geo.d.ts +24 -0
  987. package/dist/utils/geo.d.ts.map +1 -0
  988. package/dist/utils/geo.js +18 -0
  989. package/dist/utils/geo.js.map +1 -0
  990. package/dist/utils/globals.d.ts +13 -0
  991. package/dist/utils/globals.d.ts.map +1 -0
  992. package/dist/utils/globals.js +40 -0
  993. package/dist/utils/globals.js.map +1 -0
  994. package/dist/utils/hashes.d.ts +9 -0
  995. package/dist/utils/hashes.d.ts.map +1 -0
  996. package/dist/utils/hashes.js +47 -0
  997. package/dist/utils/hashes.js.map +1 -0
  998. package/dist/utils/html.d.ts +7 -0
  999. package/dist/utils/html.d.ts.map +1 -0
  1000. package/dist/utils/html.js +37 -0
  1001. package/dist/utils/html.js.map +1 -0
  1002. package/dist/utils/http.d.ts +45 -0
  1003. package/dist/utils/http.d.ts.map +1 -0
  1004. package/dist/utils/http.js +79 -0
  1005. package/dist/utils/http.js.map +1 -0
  1006. package/dist/utils/ips.d.ts +8 -0
  1007. package/dist/utils/ips.d.ts.map +1 -0
  1008. package/dist/utils/ips.js +40 -0
  1009. package/dist/utils/ips.js.map +1 -0
  1010. package/dist/utils/json.d.ts +15 -0
  1011. package/dist/utils/json.d.ts.map +1 -0
  1012. package/dist/utils/json.js +182 -0
  1013. package/dist/utils/json.js.map +1 -0
  1014. package/dist/utils/jsx-editable-transpiler.d.ts +68 -0
  1015. package/dist/utils/jsx-editable-transpiler.d.ts.map +1 -0
  1016. package/dist/utils/jsx-editable-transpiler.js +223 -0
  1017. package/dist/utils/jsx-editable-transpiler.js.map +1 -0
  1018. package/dist/utils/jsx-editable-transpiler.test.d.ts +1 -0
  1019. package/dist/utils/jsx-editable-transpiler.test.js +122 -0
  1020. package/dist/utils/jsx-editable-transpiler.test.js.map +1 -0
  1021. package/dist/utils/jwt.d.ts +79 -0
  1022. package/dist/utils/jwt.d.ts.map +1 -0
  1023. package/dist/utils/jwt.js +112 -0
  1024. package/dist/utils/jwt.js.map +1 -0
  1025. package/dist/utils/locks.d.ts +17 -0
  1026. package/dist/utils/locks.d.ts.map +1 -0
  1027. package/dist/utils/locks.js +56 -0
  1028. package/dist/utils/locks.js.map +1 -0
  1029. package/dist/utils/maps.d.ts +61 -0
  1030. package/dist/utils/maps.d.ts.map +1 -0
  1031. package/dist/utils/maps.js +302 -0
  1032. package/dist/utils/maps.js.map +1 -0
  1033. package/dist/utils/math.d.ts +8 -0
  1034. package/dist/utils/math.d.ts.map +1 -0
  1035. package/dist/utils/math.js +23 -0
  1036. package/dist/utils/math.js.map +1 -0
  1037. package/dist/utils/monkey-patch.d.ts +7 -0
  1038. package/dist/utils/monkey-patch.d.ts.map +1 -0
  1039. package/dist/utils/monkey-patch.js +25 -0
  1040. package/dist/utils/monkey-patch.js.map +1 -0
  1041. package/dist/utils/node-http.d.ts +17 -0
  1042. package/dist/utils/node-http.d.ts.map +1 -0
  1043. package/dist/utils/node-http.js +40 -0
  1044. package/dist/utils/node-http.js.map +1 -0
  1045. package/dist/utils/numbers.d.ts +7 -0
  1046. package/dist/utils/numbers.d.ts.map +1 -0
  1047. package/dist/utils/numbers.js +79 -0
  1048. package/dist/utils/numbers.js.map +1 -0
  1049. package/dist/utils/oauth.d.ts +11 -0
  1050. package/dist/utils/oauth.d.ts.map +1 -0
  1051. package/dist/utils/oauth.js +32 -0
  1052. package/dist/utils/oauth.js.map +1 -0
  1053. package/dist/utils/objects.d.ts +59 -0
  1054. package/dist/utils/objects.d.ts.map +1 -0
  1055. package/dist/utils/objects.js +846 -0
  1056. package/dist/utils/objects.js.map +1 -0
  1057. package/dist/utils/paginated-lists.d.ts +442 -0
  1058. package/dist/utils/paginated-lists.d.ts.map +1 -0
  1059. package/dist/utils/paginated-lists.js +414 -0
  1060. package/dist/utils/paginated-lists.js.map +1 -0
  1061. package/dist/utils/paginated-lists.test.d.ts +1 -0
  1062. package/dist/utils/paginated-lists.test.js +1304 -0
  1063. package/dist/utils/paginated-lists.test.js.map +1 -0
  1064. package/dist/utils/passkey.d.ts +2 -0
  1065. package/dist/utils/passkey.js +0 -0
  1066. package/dist/utils/promises.d.ts +80 -0
  1067. package/dist/utils/promises.d.ts.map +1 -0
  1068. package/dist/utils/promises.js +349 -0
  1069. package/dist/utils/promises.js.map +1 -0
  1070. package/dist/utils/proxies.d.ts +13 -0
  1071. package/dist/utils/proxies.d.ts.map +1 -0
  1072. package/dist/utils/proxies.js +201 -0
  1073. package/dist/utils/proxies.js.map +1 -0
  1074. package/dist/utils/react.d.ts +61 -0
  1075. package/dist/utils/react.d.ts.map +1 -0
  1076. package/dist/utils/react.js +243 -0
  1077. package/dist/utils/react.js.map +1 -0
  1078. package/dist/utils/redirect-urls.d.ts +30 -0
  1079. package/dist/utils/redirect-urls.d.ts.map +1 -0
  1080. package/dist/utils/redirect-urls.js +222 -0
  1081. package/dist/utils/redirect-urls.js.map +1 -0
  1082. package/dist/utils/regex.d.ts +5 -0
  1083. package/dist/utils/regex.d.ts.map +1 -0
  1084. package/dist/utils/regex.js +15 -0
  1085. package/dist/utils/regex.js.map +1 -0
  1086. package/dist/utils/results.d.ts +70 -0
  1087. package/dist/utils/results.d.ts.map +1 -0
  1088. package/dist/utils/results.js +342 -0
  1089. package/dist/utils/results.js.map +1 -0
  1090. package/dist/utils/sentry.d.ts +13 -0
  1091. package/dist/utils/sentry.d.ts.map +1 -0
  1092. package/dist/utils/sentry.js +16 -0
  1093. package/dist/utils/sentry.js.map +1 -0
  1094. package/dist/utils/stores.d.ts +104 -0
  1095. package/dist/utils/stores.d.ts.map +1 -0
  1096. package/dist/utils/stores.js +179 -0
  1097. package/dist/utils/stores.js.map +1 -0
  1098. package/dist/utils/strings.d.ts +76 -0
  1099. package/dist/utils/strings.d.ts.map +1 -0
  1100. package/dist/utils/strings.js +549 -0
  1101. package/dist/utils/strings.js.map +1 -0
  1102. package/dist/utils/strings.nicify.test.d.ts +1 -0
  1103. package/dist/utils/strings.nicify.test.js +243 -0
  1104. package/dist/utils/strings.nicify.test.js.map +1 -0
  1105. package/dist/utils/telemetry.d.ts +15 -0
  1106. package/dist/utils/telemetry.d.ts.map +1 -0
  1107. package/dist/utils/telemetry.js +35 -0
  1108. package/dist/utils/telemetry.js.map +1 -0
  1109. package/dist/utils/turnstile-browser.d.ts +32 -0
  1110. package/dist/utils/turnstile-browser.d.ts.map +1 -0
  1111. package/dist/utils/turnstile-browser.js +65 -0
  1112. package/dist/utils/turnstile-browser.js.map +1 -0
  1113. package/dist/utils/turnstile-flow.d.ts +29 -0
  1114. package/dist/utils/turnstile-flow.d.ts.map +1 -0
  1115. package/dist/utils/turnstile-flow.js +225 -0
  1116. package/dist/utils/turnstile-flow.js.map +1 -0
  1117. package/dist/utils/turnstile-flow.test.d.ts +1 -0
  1118. package/dist/utils/turnstile-flow.test.js +75 -0
  1119. package/dist/utils/turnstile-flow.test.js.map +1 -0
  1120. package/dist/utils/turnstile.d.ts +17 -0
  1121. package/dist/utils/turnstile.d.ts.map +1 -0
  1122. package/dist/utils/turnstile.js +31 -0
  1123. package/dist/utils/turnstile.js.map +1 -0
  1124. package/dist/utils/typed-arrays.d.ts +14 -0
  1125. package/dist/utils/typed-arrays.d.ts.map +1 -0
  1126. package/dist/utils/typed-arrays.js +22 -0
  1127. package/dist/utils/typed-arrays.js.map +1 -0
  1128. package/dist/utils/types.d.ts +77 -0
  1129. package/dist/utils/types.d.ts.map +1 -0
  1130. package/dist/utils/types.js +59 -0
  1131. package/dist/utils/types.js.map +1 -0
  1132. package/dist/utils/unicode.d.ts +5 -0
  1133. package/dist/utils/unicode.d.ts.map +1 -0
  1134. package/dist/utils/unicode.js +26 -0
  1135. package/dist/utils/unicode.js.map +1 -0
  1136. package/dist/utils/urls.d.ts +28 -0
  1137. package/dist/utils/urls.d.ts.map +1 -0
  1138. package/dist/utils/urls.js +274 -0
  1139. package/dist/utils/urls.js.map +1 -0
  1140. package/dist/utils/uuids.d.ts +6 -0
  1141. package/dist/utils/uuids.d.ts.map +1 -0
  1142. package/dist/utils/uuids.js +39 -0
  1143. package/dist/utils/uuids.js.map +1 -0
  1144. package/package.json +99 -0
@@ -0,0 +1,2255 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ //#region src/config/db-sync-mappings.ts
4
+ const DEFAULT_DB_SYNC_MAPPINGS = {
5
+ "users": {
6
+ sourceTables: { "ProjectUser": "ProjectUser" },
7
+ targetTable: "users",
8
+ targetTableSchemas: {
9
+ postgres: `
10
+ CREATE TABLE IF NOT EXISTS "users" (
11
+ "id" uuid PRIMARY KEY NOT NULL,
12
+ "display_name" text,
13
+ "profile_image_url" text,
14
+ "primary_email" text,
15
+ "primary_email_verified" boolean NOT NULL DEFAULT false,
16
+ "signed_up_at" timestamp without time zone NOT NULL,
17
+ "client_metadata" jsonb NOT NULL DEFAULT '{}'::jsonb,
18
+ "client_read_only_metadata" jsonb NOT NULL DEFAULT '{}'::jsonb,
19
+ "server_metadata" jsonb NOT NULL DEFAULT '{}'::jsonb,
20
+ "is_anonymous" boolean NOT NULL DEFAULT false
21
+ );
22
+ REVOKE ALL ON "users" FROM PUBLIC;
23
+ GRANT SELECT ON "users" TO PUBLIC;
24
+
25
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
26
+ "mapping_name" text PRIMARY KEY NOT NULL,
27
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
28
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
29
+ );
30
+ `.trim(),
31
+ clickhouse: `
32
+ CREATE TABLE IF NOT EXISTS analytics_internal.users (
33
+ project_id String,
34
+ branch_id String,
35
+ id UUID,
36
+ display_name Nullable(String),
37
+ profile_image_url Nullable(String),
38
+ primary_email Nullable(String),
39
+ primary_email_verified UInt8,
40
+ signed_up_at DateTime64(3, 'UTC'),
41
+ client_metadata String,
42
+ client_read_only_metadata String,
43
+ server_metadata String,
44
+ is_anonymous UInt8,
45
+ restricted_by_admin UInt8,
46
+ restricted_by_admin_reason Nullable(String),
47
+ restricted_by_admin_private_details Nullable(String),
48
+ sync_sequence_id Int64,
49
+ sync_is_deleted UInt8,
50
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
51
+ )
52
+ ENGINE ReplacingMergeTree(sync_sequence_id)
53
+ PARTITION BY toYYYYMM(signed_up_at)
54
+ ORDER BY (project_id, branch_id, id);
55
+
56
+ CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (
57
+ tenancy_id UUID,
58
+ mapping_name String,
59
+ last_synced_sequence_id Int64,
60
+ updated_at DateTime64(3, 'UTC') DEFAULT now64(3)
61
+ )
62
+ ENGINE ReplacingMergeTree(updated_at)
63
+ ORDER BY (tenancy_id, mapping_name);
64
+ `.trim()
65
+ },
66
+ internalDbFetchQueries: { clickhouse: `
67
+ SELECT *
68
+ FROM (
69
+ SELECT
70
+ "Tenancy"."projectId" AS "project_id",
71
+ "Tenancy"."branchId" AS "branch_id",
72
+ "ProjectUser"."projectUserId" AS "id",
73
+ "ProjectUser"."displayName" AS "display_name",
74
+ "ProjectUser"."profileImageUrl" AS "profile_image_url",
75
+ (
76
+ SELECT "ContactChannel"."value"
77
+ FROM "ContactChannel"
78
+ WHERE "ContactChannel"."projectUserId" = "ProjectUser"."projectUserId"
79
+ AND "ContactChannel"."tenancyId" = "ProjectUser"."tenancyId"
80
+ AND "ContactChannel"."type" = 'EMAIL'
81
+ AND "ContactChannel"."isPrimary" = 'TRUE'
82
+ LIMIT 1
83
+ ) AS "primary_email",
84
+ COALESCE(
85
+ (
86
+ SELECT "ContactChannel"."isVerified"
87
+ FROM "ContactChannel"
88
+ WHERE "ContactChannel"."projectUserId" = "ProjectUser"."projectUserId"
89
+ AND "ContactChannel"."tenancyId" = "ProjectUser"."tenancyId"
90
+ AND "ContactChannel"."type" = 'EMAIL'
91
+ AND "ContactChannel"."isPrimary" = 'TRUE'
92
+ LIMIT 1
93
+ ),
94
+ false
95
+ ) AS "primary_email_verified",
96
+ COALESCE("ProjectUser"."signedUpAt", "ProjectUser"."createdAt") AS "signed_up_at",
97
+ COALESCE("ProjectUser"."clientMetadata", '{}'::jsonb) AS "client_metadata",
98
+ COALESCE("ProjectUser"."clientReadOnlyMetadata", '{}'::jsonb) AS "client_read_only_metadata",
99
+ COALESCE("ProjectUser"."serverMetadata", '{}'::jsonb) AS "server_metadata",
100
+ "ProjectUser"."isAnonymous" AS "is_anonymous",
101
+ "ProjectUser"."restrictedByAdmin" AS "restricted_by_admin",
102
+ "ProjectUser"."restrictedByAdminReason" AS "restricted_by_admin_reason",
103
+ "ProjectUser"."restrictedByAdminPrivateDetails" AS "restricted_by_admin_private_details",
104
+ "ProjectUser"."sequenceId" AS "sync_sequence_id",
105
+ "ProjectUser"."tenancyId" AS "tenancyId",
106
+ false AS "sync_is_deleted"
107
+ FROM "ProjectUser"
108
+ JOIN "Tenancy" ON "Tenancy"."id" = "ProjectUser"."tenancyId"
109
+ WHERE "ProjectUser"."tenancyId" = $1::uuid
110
+
111
+ UNION ALL
112
+
113
+ SELECT
114
+ "Tenancy"."projectId" AS "project_id",
115
+ "Tenancy"."branchId" AS "branch_id",
116
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "id",
117
+ NULL::text AS "display_name",
118
+ NULL::text AS "profile_image_url",
119
+ NULL::text AS "primary_email",
120
+ false AS "primary_email_verified",
121
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "signed_up_at",
122
+ '{}'::jsonb AS "client_metadata",
123
+ '{}'::jsonb AS "client_read_only_metadata",
124
+ '{}'::jsonb AS "server_metadata",
125
+ false AS "is_anonymous",
126
+ false AS "restricted_by_admin",
127
+ NULL::text AS "restricted_by_admin_reason",
128
+ NULL::text AS "restricted_by_admin_private_details",
129
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
130
+ "DeletedRow"."tenancyId" AS "tenancyId",
131
+ true AS "sync_is_deleted"
132
+ FROM "DeletedRow"
133
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
134
+ WHERE
135
+ "DeletedRow"."tenancyId" = $1::uuid
136
+ AND "DeletedRow"."tableName" = 'ProjectUser'
137
+ ) AS "_src"
138
+ WHERE "sync_sequence_id" IS NOT NULL
139
+ AND "sync_sequence_id" > $2::bigint
140
+ ORDER BY "sync_sequence_id" ASC
141
+ LIMIT 1000
142
+ `.trim() },
143
+ internalDbFetchQuery: `
144
+ SELECT *
145
+ FROM (
146
+ SELECT
147
+ "ProjectUser"."projectUserId" AS "id",
148
+ "ProjectUser"."displayName" AS "display_name",
149
+ "ProjectUser"."profileImageUrl" AS "profile_image_url",
150
+ (
151
+ SELECT "ContactChannel"."value"
152
+ FROM "ContactChannel"
153
+ WHERE "ContactChannel"."projectUserId" = "ProjectUser"."projectUserId"
154
+ AND "ContactChannel"."tenancyId" = "ProjectUser"."tenancyId"
155
+ AND "ContactChannel"."type" = 'EMAIL'
156
+ AND "ContactChannel"."isPrimary" = 'TRUE'
157
+ LIMIT 1
158
+ ) AS "primary_email",
159
+ COALESCE(
160
+ (
161
+ SELECT "ContactChannel"."isVerified"
162
+ FROM "ContactChannel"
163
+ WHERE "ContactChannel"."projectUserId" = "ProjectUser"."projectUserId"
164
+ AND "ContactChannel"."tenancyId" = "ProjectUser"."tenancyId"
165
+ AND "ContactChannel"."type" = 'EMAIL'
166
+ AND "ContactChannel"."isPrimary" = 'TRUE'
167
+ LIMIT 1
168
+ ),
169
+ false
170
+ ) AS "primary_email_verified",
171
+ COALESCE("ProjectUser"."signedUpAt", "ProjectUser"."createdAt") AS "signed_up_at",
172
+ COALESCE("ProjectUser"."clientMetadata", '{}'::jsonb) AS "client_metadata",
173
+ COALESCE("ProjectUser"."clientReadOnlyMetadata", '{}'::jsonb) AS "client_read_only_metadata",
174
+ COALESCE("ProjectUser"."serverMetadata", '{}'::jsonb) AS "server_metadata",
175
+ "ProjectUser"."isAnonymous" AS "is_anonymous",
176
+ "ProjectUser"."sequenceId" AS "sequence_id",
177
+ "ProjectUser"."tenancyId",
178
+ false AS "is_deleted"
179
+ FROM "ProjectUser"
180
+ WHERE "ProjectUser"."tenancyId" = $1::uuid
181
+
182
+ UNION ALL
183
+
184
+ SELECT
185
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "id",
186
+ NULL::text AS "display_name",
187
+ NULL::text AS "profile_image_url",
188
+ NULL::text AS "primary_email",
189
+ false AS "primary_email_verified",
190
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "signed_up_at",
191
+ '{}'::jsonb AS "client_metadata",
192
+ '{}'::jsonb AS "client_read_only_metadata",
193
+ '{}'::jsonb AS "server_metadata",
194
+ false AS "is_anonymous",
195
+ "DeletedRow"."sequenceId" AS "sequence_id",
196
+ "DeletedRow"."tenancyId",
197
+ true AS "is_deleted"
198
+ FROM "DeletedRow"
199
+ WHERE
200
+ "DeletedRow"."tenancyId" = $1::uuid
201
+ AND "DeletedRow"."tableName" = 'ProjectUser'
202
+ ) AS "_src"
203
+ WHERE "sequence_id" IS NOT NULL
204
+ AND "sequence_id" > $2::bigint
205
+ ORDER BY "sequence_id" ASC
206
+ LIMIT 1000
207
+ `.trim(),
208
+ externalDbUpdateQueries: { postgres: `
209
+ WITH params AS (
210
+ SELECT
211
+ $1::uuid AS "id",
212
+ $2::text AS "display_name",
213
+ $3::text AS "profile_image_url",
214
+ $4::text AS "primary_email",
215
+ $5::boolean AS "primary_email_verified",
216
+ $6::timestamp without time zone AS "signed_up_at",
217
+ $7::jsonb AS "client_metadata",
218
+ $8::jsonb AS "client_read_only_metadata",
219
+ $9::jsonb AS "server_metadata",
220
+ $10::boolean AS "is_anonymous",
221
+ $11::bigint AS "sequence_id",
222
+ $12::boolean AS "is_deleted",
223
+ $13::text AS "mapping_name"
224
+ ),
225
+ deleted AS (
226
+ DELETE FROM "users" u
227
+ USING params p
228
+ WHERE p."is_deleted" = true AND u."id" = p."id"
229
+ RETURNING 1
230
+ ),
231
+ upserted AS (
232
+ INSERT INTO "users" (
233
+ "id",
234
+ "display_name",
235
+ "profile_image_url",
236
+ "primary_email",
237
+ "primary_email_verified",
238
+ "signed_up_at",
239
+ "client_metadata",
240
+ "client_read_only_metadata",
241
+ "server_metadata",
242
+ "is_anonymous"
243
+ )
244
+ SELECT
245
+ p."id",
246
+ p."display_name",
247
+ p."profile_image_url",
248
+ p."primary_email",
249
+ p."primary_email_verified",
250
+ p."signed_up_at",
251
+ p."client_metadata",
252
+ p."client_read_only_metadata",
253
+ p."server_metadata",
254
+ p."is_anonymous"
255
+ FROM params p
256
+ WHERE p."is_deleted" = false
257
+ ON CONFLICT ("id") DO UPDATE SET
258
+ "display_name" = EXCLUDED."display_name",
259
+ "profile_image_url" = EXCLUDED."profile_image_url",
260
+ "primary_email" = EXCLUDED."primary_email",
261
+ "primary_email_verified" = EXCLUDED."primary_email_verified",
262
+ "signed_up_at" = EXCLUDED."signed_up_at",
263
+ "client_metadata" = EXCLUDED."client_metadata",
264
+ "client_read_only_metadata" = EXCLUDED."client_read_only_metadata",
265
+ "server_metadata" = EXCLUDED."server_metadata",
266
+ "is_anonymous" = EXCLUDED."is_anonymous"
267
+ RETURNING 1
268
+ )
269
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
270
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
271
+ ON CONFLICT ("mapping_name") DO UPDATE SET
272
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
273
+ "updated_at" = now();
274
+ `.trim() }
275
+ },
276
+ "contact_channels": {
277
+ sourceTables: { "ContactChannel": "ContactChannel" },
278
+ targetTable: "contact_channels",
279
+ targetTableSchemas: {
280
+ postgres: `
281
+ CREATE TABLE IF NOT EXISTS "contact_channels" (
282
+ "id" uuid PRIMARY KEY NOT NULL,
283
+ "user_id" uuid NOT NULL,
284
+ "type" text NOT NULL,
285
+ "value" text NOT NULL,
286
+ "is_primary" boolean NOT NULL DEFAULT false,
287
+ "is_verified" boolean NOT NULL DEFAULT false,
288
+ "used_for_auth" boolean NOT NULL DEFAULT false,
289
+ "created_at" timestamp without time zone NOT NULL
290
+ );
291
+ REVOKE ALL ON "contact_channels" FROM PUBLIC;
292
+ GRANT SELECT ON "contact_channels" TO PUBLIC;
293
+
294
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
295
+ "mapping_name" text PRIMARY KEY NOT NULL,
296
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
297
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
298
+ );
299
+ `.trim(),
300
+ clickhouse: `
301
+ CREATE TABLE IF NOT EXISTS analytics_internal.contact_channels (
302
+ project_id String,
303
+ branch_id String,
304
+ id UUID,
305
+ user_id UUID,
306
+ type LowCardinality(String),
307
+ value String,
308
+ is_primary UInt8,
309
+ is_verified UInt8,
310
+ used_for_auth UInt8,
311
+ created_at DateTime64(3, 'UTC'),
312
+ sync_sequence_id Int64,
313
+ sync_is_deleted UInt8,
314
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
315
+ )
316
+ ENGINE ReplacingMergeTree(sync_sequence_id)
317
+ PARTITION BY toYYYYMM(created_at)
318
+ ORDER BY (project_id, branch_id, id);
319
+ `.trim()
320
+ },
321
+ internalDbFetchQueries: { clickhouse: `
322
+ SELECT *
323
+ FROM (
324
+ SELECT
325
+ "Tenancy"."projectId" AS "project_id",
326
+ "Tenancy"."branchId" AS "branch_id",
327
+ "ContactChannel"."id" AS "id",
328
+ "ContactChannel"."projectUserId" AS "user_id",
329
+ "ContactChannel"."type"::text AS "type",
330
+ "ContactChannel"."value" AS "value",
331
+ CASE WHEN "ContactChannel"."isPrimary" = 'TRUE' THEN true ELSE false END AS "is_primary",
332
+ "ContactChannel"."isVerified" AS "is_verified",
333
+ CASE WHEN "ContactChannel"."usedForAuth" = 'TRUE' THEN true ELSE false END AS "used_for_auth",
334
+ "ContactChannel"."createdAt" AS "created_at",
335
+ "ContactChannel"."sequenceId" AS "sync_sequence_id",
336
+ "ContactChannel"."tenancyId" AS "tenancyId",
337
+ false AS "sync_is_deleted"
338
+ FROM "ContactChannel"
339
+ JOIN "Tenancy" ON "Tenancy"."id" = "ContactChannel"."tenancyId"
340
+ WHERE "ContactChannel"."tenancyId" = $1::uuid
341
+
342
+ UNION ALL
343
+
344
+ SELECT
345
+ "Tenancy"."projectId" AS "project_id",
346
+ "Tenancy"."branchId" AS "branch_id",
347
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
348
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "user_id",
349
+ NULL::text AS "type",
350
+ NULL::text AS "value",
351
+ false AS "is_primary",
352
+ false AS "is_verified",
353
+ false AS "used_for_auth",
354
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
355
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
356
+ "DeletedRow"."tenancyId" AS "tenancyId",
357
+ true AS "sync_is_deleted"
358
+ FROM "DeletedRow"
359
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
360
+ WHERE
361
+ "DeletedRow"."tenancyId" = $1::uuid
362
+ AND "DeletedRow"."tableName" = 'ContactChannel'
363
+ ) AS "_src"
364
+ WHERE "sync_sequence_id" IS NOT NULL
365
+ AND "sync_sequence_id" > $2::bigint
366
+ ORDER BY "sync_sequence_id" ASC
367
+ LIMIT 1000
368
+ `.trim() },
369
+ internalDbFetchQuery: `
370
+ SELECT *
371
+ FROM (
372
+ SELECT
373
+ "ContactChannel"."id" AS "id",
374
+ "ContactChannel"."projectUserId" AS "user_id",
375
+ "ContactChannel"."type"::text AS "type",
376
+ "ContactChannel"."value" AS "value",
377
+ CASE WHEN "ContactChannel"."isPrimary" = 'TRUE' THEN true ELSE false END AS "is_primary",
378
+ "ContactChannel"."isVerified" AS "is_verified",
379
+ CASE WHEN "ContactChannel"."usedForAuth" = 'TRUE' THEN true ELSE false END AS "used_for_auth",
380
+ "ContactChannel"."createdAt" AS "created_at",
381
+ "ContactChannel"."sequenceId" AS "sequence_id",
382
+ "ContactChannel"."tenancyId",
383
+ false AS "is_deleted"
384
+ FROM "ContactChannel"
385
+ WHERE "ContactChannel"."tenancyId" = $1::uuid
386
+
387
+ UNION ALL
388
+
389
+ SELECT
390
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
391
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "user_id",
392
+ NULL::text AS "type",
393
+ NULL::text AS "value",
394
+ false AS "is_primary",
395
+ false AS "is_verified",
396
+ false AS "used_for_auth",
397
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
398
+ "DeletedRow"."sequenceId" AS "sequence_id",
399
+ "DeletedRow"."tenancyId",
400
+ true AS "is_deleted"
401
+ FROM "DeletedRow"
402
+ WHERE
403
+ "DeletedRow"."tenancyId" = $1::uuid
404
+ AND "DeletedRow"."tableName" = 'ContactChannel'
405
+ ) AS "_src"
406
+ WHERE "sequence_id" IS NOT NULL
407
+ AND "sequence_id" > $2::bigint
408
+ ORDER BY "sequence_id" ASC
409
+ LIMIT 1000
410
+ `.trim(),
411
+ externalDbUpdateQueries: { postgres: `
412
+ WITH params AS (
413
+ SELECT
414
+ $1::uuid AS "id",
415
+ $2::uuid AS "user_id",
416
+ $3::text AS "type",
417
+ $4::text AS "value",
418
+ $5::boolean AS "is_primary",
419
+ $6::boolean AS "is_verified",
420
+ $7::boolean AS "used_for_auth",
421
+ $8::timestamp without time zone AS "created_at",
422
+ $9::bigint AS "sequence_id",
423
+ $10::boolean AS "is_deleted",
424
+ $11::text AS "mapping_name"
425
+ ),
426
+ deleted AS (
427
+ DELETE FROM "contact_channels" c
428
+ USING params p
429
+ WHERE p."is_deleted" = true AND c."id" = p."id"
430
+ RETURNING 1
431
+ ),
432
+ upserted AS (
433
+ INSERT INTO "contact_channels" (
434
+ "id",
435
+ "user_id",
436
+ "type",
437
+ "value",
438
+ "is_primary",
439
+ "is_verified",
440
+ "used_for_auth",
441
+ "created_at"
442
+ )
443
+ SELECT
444
+ p."id",
445
+ p."user_id",
446
+ p."type",
447
+ p."value",
448
+ p."is_primary",
449
+ p."is_verified",
450
+ p."used_for_auth",
451
+ p."created_at"
452
+ FROM params p
453
+ WHERE p."is_deleted" = false
454
+ ON CONFLICT ("id") DO UPDATE SET
455
+ "user_id" = EXCLUDED."user_id",
456
+ "type" = EXCLUDED."type",
457
+ "value" = EXCLUDED."value",
458
+ "is_primary" = EXCLUDED."is_primary",
459
+ "is_verified" = EXCLUDED."is_verified",
460
+ "used_for_auth" = EXCLUDED."used_for_auth",
461
+ "created_at" = EXCLUDED."created_at"
462
+ RETURNING 1
463
+ )
464
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
465
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
466
+ ON CONFLICT ("mapping_name") DO UPDATE SET
467
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
468
+ "updated_at" = now();
469
+ `.trim() }
470
+ },
471
+ "teams": {
472
+ sourceTables: { "Team": "Team" },
473
+ targetTable: "teams",
474
+ targetTableSchemas: {
475
+ postgres: `
476
+ CREATE TABLE IF NOT EXISTS "teams" (
477
+ "id" uuid PRIMARY KEY NOT NULL,
478
+ "display_name" text NOT NULL,
479
+ "profile_image_url" text,
480
+ "created_at" timestamp without time zone NOT NULL,
481
+ "client_metadata" jsonb NOT NULL DEFAULT '{}'::jsonb,
482
+ "client_read_only_metadata" jsonb NOT NULL DEFAULT '{}'::jsonb,
483
+ "server_metadata" jsonb NOT NULL DEFAULT '{}'::jsonb
484
+ );
485
+ REVOKE ALL ON "teams" FROM PUBLIC;
486
+ GRANT SELECT ON "teams" TO PUBLIC;
487
+
488
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
489
+ "mapping_name" text PRIMARY KEY NOT NULL,
490
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
491
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
492
+ );
493
+ `.trim(),
494
+ clickhouse: `
495
+ CREATE TABLE IF NOT EXISTS analytics_internal.teams (
496
+ project_id String,
497
+ branch_id String,
498
+ id UUID,
499
+ display_name String,
500
+ profile_image_url Nullable(String),
501
+ created_at DateTime64(3, 'UTC'),
502
+ client_metadata String,
503
+ client_read_only_metadata String,
504
+ server_metadata String,
505
+ sync_sequence_id Int64,
506
+ sync_is_deleted UInt8,
507
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
508
+ )
509
+ ENGINE ReplacingMergeTree(sync_sequence_id)
510
+ PARTITION BY toYYYYMM(created_at)
511
+ ORDER BY (project_id, branch_id, id);
512
+ `.trim()
513
+ },
514
+ internalDbFetchQueries: { clickhouse: `
515
+ SELECT *
516
+ FROM (
517
+ SELECT
518
+ "Tenancy"."projectId" AS "project_id",
519
+ "Tenancy"."branchId" AS "branch_id",
520
+ "Team"."teamId" AS "id",
521
+ "Team"."displayName" AS "display_name",
522
+ "Team"."profileImageUrl" AS "profile_image_url",
523
+ "Team"."createdAt" AS "created_at",
524
+ COALESCE("Team"."clientMetadata", '{}'::jsonb) AS "client_metadata",
525
+ COALESCE("Team"."clientReadOnlyMetadata", '{}'::jsonb) AS "client_read_only_metadata",
526
+ COALESCE("Team"."serverMetadata", '{}'::jsonb) AS "server_metadata",
527
+ "Team"."sequenceId" AS "sync_sequence_id",
528
+ "Team"."tenancyId" AS "tenancyId",
529
+ false AS "sync_is_deleted"
530
+ FROM "Team"
531
+ JOIN "Tenancy" ON "Tenancy"."id" = "Team"."tenancyId"
532
+ WHERE "Team"."tenancyId" = $1::uuid
533
+
534
+ UNION ALL
535
+
536
+ SELECT
537
+ "Tenancy"."projectId" AS "project_id",
538
+ "Tenancy"."branchId" AS "branch_id",
539
+ ("DeletedRow"."primaryKey"->>'teamId')::uuid AS "id",
540
+ NULL::text AS "display_name",
541
+ NULL::text AS "profile_image_url",
542
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
543
+ '{}'::jsonb AS "client_metadata",
544
+ '{}'::jsonb AS "client_read_only_metadata",
545
+ '{}'::jsonb AS "server_metadata",
546
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
547
+ "DeletedRow"."tenancyId" AS "tenancyId",
548
+ true AS "sync_is_deleted"
549
+ FROM "DeletedRow"
550
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
551
+ WHERE
552
+ "DeletedRow"."tenancyId" = $1::uuid
553
+ AND "DeletedRow"."tableName" = 'Team'
554
+ ) AS "_src"
555
+ WHERE "sync_sequence_id" IS NOT NULL
556
+ AND "sync_sequence_id" > $2::bigint
557
+ ORDER BY "sync_sequence_id" ASC
558
+ LIMIT 1000
559
+ `.trim() },
560
+ internalDbFetchQuery: `
561
+ SELECT *
562
+ FROM (
563
+ SELECT
564
+ "Team"."teamId" AS "id",
565
+ "Team"."displayName" AS "display_name",
566
+ "Team"."profileImageUrl" AS "profile_image_url",
567
+ "Team"."createdAt" AS "created_at",
568
+ COALESCE("Team"."clientMetadata", '{}'::jsonb) AS "client_metadata",
569
+ COALESCE("Team"."clientReadOnlyMetadata", '{}'::jsonb) AS "client_read_only_metadata",
570
+ COALESCE("Team"."serverMetadata", '{}'::jsonb) AS "server_metadata",
571
+ "Team"."sequenceId" AS "sequence_id",
572
+ "Team"."tenancyId",
573
+ false AS "is_deleted"
574
+ FROM "Team"
575
+ WHERE "Team"."tenancyId" = $1::uuid
576
+
577
+ UNION ALL
578
+
579
+ SELECT
580
+ ("DeletedRow"."primaryKey"->>'teamId')::uuid AS "id",
581
+ NULL::text AS "display_name",
582
+ NULL::text AS "profile_image_url",
583
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
584
+ '{}'::jsonb AS "client_metadata",
585
+ '{}'::jsonb AS "client_read_only_metadata",
586
+ '{}'::jsonb AS "server_metadata",
587
+ "DeletedRow"."sequenceId" AS "sequence_id",
588
+ "DeletedRow"."tenancyId",
589
+ true AS "is_deleted"
590
+ FROM "DeletedRow"
591
+ WHERE
592
+ "DeletedRow"."tenancyId" = $1::uuid
593
+ AND "DeletedRow"."tableName" = 'Team'
594
+ ) AS "_src"
595
+ WHERE "sequence_id" IS NOT NULL
596
+ AND "sequence_id" > $2::bigint
597
+ ORDER BY "sequence_id" ASC
598
+ LIMIT 1000
599
+ `.trim(),
600
+ externalDbUpdateQueries: { postgres: `
601
+ WITH params AS (
602
+ SELECT
603
+ $1::uuid AS "id",
604
+ $2::text AS "display_name",
605
+ $3::text AS "profile_image_url",
606
+ $4::timestamp without time zone AS "created_at",
607
+ $5::jsonb AS "client_metadata",
608
+ $6::jsonb AS "client_read_only_metadata",
609
+ $7::jsonb AS "server_metadata",
610
+ $8::bigint AS "sequence_id",
611
+ $9::boolean AS "is_deleted",
612
+ $10::text AS "mapping_name"
613
+ ),
614
+ deleted AS (
615
+ DELETE FROM "teams" t
616
+ USING params p
617
+ WHERE p."is_deleted" = true AND t."id" = p."id"
618
+ RETURNING 1
619
+ ),
620
+ upserted AS (
621
+ INSERT INTO "teams" (
622
+ "id",
623
+ "display_name",
624
+ "profile_image_url",
625
+ "created_at",
626
+ "client_metadata",
627
+ "client_read_only_metadata",
628
+ "server_metadata"
629
+ )
630
+ SELECT
631
+ p."id",
632
+ p."display_name",
633
+ p."profile_image_url",
634
+ p."created_at",
635
+ p."client_metadata",
636
+ p."client_read_only_metadata",
637
+ p."server_metadata"
638
+ FROM params p
639
+ WHERE p."is_deleted" = false
640
+ ON CONFLICT ("id") DO UPDATE SET
641
+ "display_name" = EXCLUDED."display_name",
642
+ "profile_image_url" = EXCLUDED."profile_image_url",
643
+ "created_at" = EXCLUDED."created_at",
644
+ "client_metadata" = EXCLUDED."client_metadata",
645
+ "client_read_only_metadata" = EXCLUDED."client_read_only_metadata",
646
+ "server_metadata" = EXCLUDED."server_metadata"
647
+ RETURNING 1
648
+ )
649
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
650
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
651
+ ON CONFLICT ("mapping_name") DO UPDATE SET
652
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
653
+ "updated_at" = now();
654
+ `.trim() }
655
+ },
656
+ "team_member_profiles": {
657
+ sourceTables: { "TeamMember": "TeamMember" },
658
+ targetTable: "team_member_profiles",
659
+ targetTableSchemas: {
660
+ postgres: `
661
+ CREATE TABLE IF NOT EXISTS "team_member_profiles" (
662
+ "team_id" uuid NOT NULL,
663
+ "user_id" uuid NOT NULL,
664
+ "display_name" text,
665
+ "profile_image_url" text,
666
+ "created_at" timestamp without time zone NOT NULL,
667
+ PRIMARY KEY ("team_id", "user_id")
668
+ );
669
+ REVOKE ALL ON "team_member_profiles" FROM PUBLIC;
670
+ GRANT SELECT ON "team_member_profiles" TO PUBLIC;
671
+
672
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
673
+ "mapping_name" text PRIMARY KEY NOT NULL,
674
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
675
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
676
+ );
677
+ `.trim(),
678
+ clickhouse: `
679
+ CREATE TABLE IF NOT EXISTS analytics_internal.team_member_profiles (
680
+ project_id String,
681
+ branch_id String,
682
+ team_id UUID,
683
+ user_id UUID,
684
+ display_name Nullable(String),
685
+ profile_image_url Nullable(String),
686
+ created_at DateTime64(3, 'UTC'),
687
+ sync_sequence_id Int64,
688
+ sync_is_deleted UInt8,
689
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
690
+ )
691
+ ENGINE ReplacingMergeTree(sync_sequence_id)
692
+ PARTITION BY toYYYYMM(created_at)
693
+ ORDER BY (project_id, branch_id, team_id, user_id);
694
+ `.trim()
695
+ },
696
+ internalDbFetchQueries: { clickhouse: `
697
+ SELECT *
698
+ FROM (
699
+ SELECT
700
+ "Tenancy"."projectId" AS "project_id",
701
+ "Tenancy"."branchId" AS "branch_id",
702
+ "TeamMember"."teamId" AS "team_id",
703
+ "TeamMember"."projectUserId" AS "user_id",
704
+ "TeamMember"."displayName" AS "display_name",
705
+ "TeamMember"."profileImageUrl" AS "profile_image_url",
706
+ "TeamMember"."createdAt" AS "created_at",
707
+ "TeamMember"."sequenceId" AS "sync_sequence_id",
708
+ "TeamMember"."tenancyId" AS "tenancyId",
709
+ false AS "sync_is_deleted"
710
+ FROM "TeamMember"
711
+ JOIN "Tenancy" ON "Tenancy"."id" = "TeamMember"."tenancyId"
712
+ WHERE "TeamMember"."tenancyId" = $1::uuid
713
+
714
+ UNION ALL
715
+
716
+ SELECT
717
+ "Tenancy"."projectId" AS "project_id",
718
+ "Tenancy"."branchId" AS "branch_id",
719
+ ("DeletedRow"."primaryKey"->>'teamId')::uuid AS "team_id",
720
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "user_id",
721
+ NULL::text AS "display_name",
722
+ NULL::text AS "profile_image_url",
723
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
724
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
725
+ "DeletedRow"."tenancyId" AS "tenancyId",
726
+ true AS "sync_is_deleted"
727
+ FROM "DeletedRow"
728
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
729
+ WHERE
730
+ "DeletedRow"."tenancyId" = $1::uuid
731
+ AND "DeletedRow"."tableName" = 'TeamMember'
732
+ ) AS "_src"
733
+ WHERE "sync_sequence_id" IS NOT NULL
734
+ AND "sync_sequence_id" > $2::bigint
735
+ ORDER BY "sync_sequence_id" ASC
736
+ LIMIT 1000
737
+ `.trim() },
738
+ internalDbFetchQuery: `
739
+ SELECT *
740
+ FROM (
741
+ SELECT
742
+ "TeamMember"."teamId" AS "team_id",
743
+ "TeamMember"."projectUserId" AS "user_id",
744
+ "TeamMember"."displayName" AS "display_name",
745
+ "TeamMember"."profileImageUrl" AS "profile_image_url",
746
+ "TeamMember"."createdAt" AS "created_at",
747
+ "TeamMember"."sequenceId" AS "sequence_id",
748
+ "TeamMember"."tenancyId",
749
+ false AS "is_deleted"
750
+ FROM "TeamMember"
751
+ WHERE "TeamMember"."tenancyId" = $1::uuid
752
+
753
+ UNION ALL
754
+
755
+ SELECT
756
+ ("DeletedRow"."primaryKey"->>'teamId')::uuid AS "team_id",
757
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "user_id",
758
+ NULL::text AS "display_name",
759
+ NULL::text AS "profile_image_url",
760
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
761
+ "DeletedRow"."sequenceId" AS "sequence_id",
762
+ "DeletedRow"."tenancyId",
763
+ true AS "is_deleted"
764
+ FROM "DeletedRow"
765
+ WHERE
766
+ "DeletedRow"."tenancyId" = $1::uuid
767
+ AND "DeletedRow"."tableName" = 'TeamMember'
768
+ ) AS "_src"
769
+ WHERE "sequence_id" IS NOT NULL
770
+ AND "sequence_id" > $2::bigint
771
+ ORDER BY "sequence_id" ASC
772
+ LIMIT 1000
773
+ `.trim(),
774
+ externalDbUpdateQueries: { postgres: `
775
+ WITH params AS (
776
+ SELECT
777
+ $1::uuid AS "team_id",
778
+ $2::uuid AS "user_id",
779
+ $3::text AS "display_name",
780
+ $4::text AS "profile_image_url",
781
+ $5::timestamp without time zone AS "created_at",
782
+ $6::bigint AS "sequence_id",
783
+ $7::boolean AS "is_deleted",
784
+ $8::text AS "mapping_name"
785
+ ),
786
+ deleted AS (
787
+ DELETE FROM "team_member_profiles" tm
788
+ USING params p
789
+ WHERE p."is_deleted" = true AND tm."team_id" = p."team_id" AND tm."user_id" = p."user_id"
790
+ RETURNING 1
791
+ ),
792
+ upserted AS (
793
+ INSERT INTO "team_member_profiles" (
794
+ "team_id",
795
+ "user_id",
796
+ "display_name",
797
+ "profile_image_url",
798
+ "created_at"
799
+ )
800
+ SELECT
801
+ p."team_id",
802
+ p."user_id",
803
+ p."display_name",
804
+ p."profile_image_url",
805
+ p."created_at"
806
+ FROM params p
807
+ WHERE p."is_deleted" = false
808
+ ON CONFLICT ("team_id", "user_id") DO UPDATE SET
809
+ "display_name" = EXCLUDED."display_name",
810
+ "profile_image_url" = EXCLUDED."profile_image_url",
811
+ "created_at" = EXCLUDED."created_at"
812
+ RETURNING 1
813
+ )
814
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
815
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
816
+ ON CONFLICT ("mapping_name") DO UPDATE SET
817
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
818
+ "updated_at" = now();
819
+ `.trim() }
820
+ },
821
+ "team_permissions": {
822
+ sourceTables: { "TeamMemberDirectPermission": "TeamMemberDirectPermission" },
823
+ targetTable: "team_permissions",
824
+ targetTableSchemas: {
825
+ postgres: `
826
+ CREATE TABLE IF NOT EXISTS "team_permissions" (
827
+ "team_id" uuid NOT NULL,
828
+ "user_id" uuid NOT NULL,
829
+ "permission_id" text NOT NULL,
830
+ "created_at" timestamp without time zone NOT NULL,
831
+ PRIMARY KEY ("team_id", "user_id", "permission_id")
832
+ );
833
+ REVOKE ALL ON "team_permissions" FROM PUBLIC;
834
+ GRANT SELECT ON "team_permissions" TO PUBLIC;
835
+
836
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
837
+ "mapping_name" text PRIMARY KEY NOT NULL,
838
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
839
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
840
+ );
841
+ `.trim(),
842
+ clickhouse: `
843
+ CREATE TABLE IF NOT EXISTS analytics_internal.team_permissions (
844
+ project_id String,
845
+ branch_id String,
846
+ team_id UUID,
847
+ user_id UUID,
848
+ id String,
849
+ created_at DateTime64(3, 'UTC'),
850
+ sync_sequence_id Int64,
851
+ sync_is_deleted UInt8,
852
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
853
+ )
854
+ ENGINE ReplacingMergeTree(sync_sequence_id)
855
+ PARTITION BY toYYYYMM(created_at)
856
+ ORDER BY (project_id, branch_id, team_id, user_id, id);
857
+ `.trim()
858
+ },
859
+ internalDbFetchQueries: { clickhouse: `
860
+ SELECT *
861
+ FROM (
862
+ SELECT
863
+ "Tenancy"."projectId" AS "project_id",
864
+ "Tenancy"."branchId" AS "branch_id",
865
+ "TeamMemberDirectPermission"."teamId" AS "team_id",
866
+ "TeamMemberDirectPermission"."projectUserId" AS "user_id",
867
+ "TeamMemberDirectPermission"."permissionId" AS "id",
868
+ "TeamMemberDirectPermission"."createdAt" AS "created_at",
869
+ "TeamMemberDirectPermission"."sequenceId" AS "sync_sequence_id",
870
+ "TeamMemberDirectPermission"."tenancyId" AS "tenancyId",
871
+ false AS "sync_is_deleted"
872
+ FROM "TeamMemberDirectPermission"
873
+ JOIN "Tenancy" ON "Tenancy"."id" = "TeamMemberDirectPermission"."tenancyId"
874
+ WHERE "TeamMemberDirectPermission"."tenancyId" = $1::uuid
875
+
876
+ UNION ALL
877
+
878
+ SELECT
879
+ "Tenancy"."projectId" AS "project_id",
880
+ "Tenancy"."branchId" AS "branch_id",
881
+ ("DeletedRow"."primaryKey"->>'teamId')::uuid AS "team_id",
882
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "user_id",
883
+ "DeletedRow"."primaryKey"->>'permissionId' AS "id",
884
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
885
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
886
+ "DeletedRow"."tenancyId" AS "tenancyId",
887
+ true AS "sync_is_deleted"
888
+ FROM "DeletedRow"
889
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
890
+ WHERE
891
+ "DeletedRow"."tenancyId" = $1::uuid
892
+ AND "DeletedRow"."tableName" = 'TeamMemberDirectPermission'
893
+ ) AS "_src"
894
+ WHERE "sync_sequence_id" IS NOT NULL
895
+ AND "sync_sequence_id" > $2::bigint
896
+ ORDER BY "sync_sequence_id" ASC
897
+ LIMIT 1000
898
+ `.trim() },
899
+ internalDbFetchQuery: `
900
+ SELECT *
901
+ FROM (
902
+ SELECT
903
+ "TeamMemberDirectPermission"."teamId" AS "team_id",
904
+ "TeamMemberDirectPermission"."projectUserId" AS "user_id",
905
+ "TeamMemberDirectPermission"."permissionId" AS "permission_id",
906
+ "TeamMemberDirectPermission"."createdAt" AS "created_at",
907
+ "TeamMemberDirectPermission"."sequenceId" AS "sequence_id",
908
+ "TeamMemberDirectPermission"."tenancyId",
909
+ false AS "is_deleted"
910
+ FROM "TeamMemberDirectPermission"
911
+ WHERE "TeamMemberDirectPermission"."tenancyId" = $1::uuid
912
+
913
+ UNION ALL
914
+
915
+ SELECT
916
+ ("DeletedRow"."primaryKey"->>'teamId')::uuid AS "team_id",
917
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "user_id",
918
+ "DeletedRow"."primaryKey"->>'permissionId' AS "id",
919
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
920
+ "DeletedRow"."sequenceId" AS "sequence_id",
921
+ "DeletedRow"."tenancyId",
922
+ true AS "is_deleted"
923
+ FROM "DeletedRow"
924
+ WHERE
925
+ "DeletedRow"."tenancyId" = $1::uuid
926
+ AND "DeletedRow"."tableName" = 'TeamMemberDirectPermission'
927
+ ) AS "_src"
928
+ WHERE "sequence_id" IS NOT NULL
929
+ AND "sequence_id" > $2::bigint
930
+ ORDER BY "sequence_id" ASC
931
+ LIMIT 1000
932
+ `.trim(),
933
+ externalDbUpdateQueries: { postgres: `
934
+ WITH params AS (
935
+ SELECT
936
+ $1::uuid AS "team_id",
937
+ $2::uuid AS "user_id",
938
+ $3::text AS "permission_id",
939
+ $4::timestamp without time zone AS "created_at",
940
+ $5::bigint AS "sequence_id",
941
+ $6::boolean AS "is_deleted",
942
+ $7::text AS "mapping_name"
943
+ ),
944
+ deleted AS (
945
+ DELETE FROM "team_permissions" tp
946
+ USING params p
947
+ WHERE p."is_deleted" = true AND tp."team_id" = p."team_id" AND tp."user_id" = p."user_id" AND tp."permission_id" = p."permission_id"
948
+ RETURNING 1
949
+ ),
950
+ upserted AS (
951
+ INSERT INTO "team_permissions" (
952
+ "team_id",
953
+ "user_id",
954
+ "permission_id",
955
+ "created_at"
956
+ )
957
+ SELECT
958
+ p."team_id",
959
+ p."user_id",
960
+ p."permission_id",
961
+ p."created_at"
962
+ FROM params p
963
+ WHERE p."is_deleted" = false
964
+ ON CONFLICT ("team_id", "user_id", "permission_id") DO UPDATE SET
965
+ "created_at" = EXCLUDED."created_at"
966
+ RETURNING 1
967
+ )
968
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
969
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
970
+ ON CONFLICT ("mapping_name") DO UPDATE SET
971
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
972
+ "updated_at" = now();
973
+ `.trim() }
974
+ },
975
+ "team_invitations": {
976
+ sourceTables: { "VerificationCode": "VerificationCode" },
977
+ targetTable: "team_invitations",
978
+ targetTableSchemas: {
979
+ postgres: `
980
+ CREATE TABLE IF NOT EXISTS "team_invitations" (
981
+ "id" uuid PRIMARY KEY NOT NULL,
982
+ "team_id" uuid NOT NULL,
983
+ "team_display_name" text NOT NULL,
984
+ "recipient_email" text NOT NULL,
985
+ "expires_at_millis" bigint NOT NULL,
986
+ "created_at" timestamp without time zone NOT NULL
987
+ );
988
+ REVOKE ALL ON "team_invitations" FROM PUBLIC;
989
+ GRANT SELECT ON "team_invitations" TO PUBLIC;
990
+
991
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
992
+ "mapping_name" text PRIMARY KEY NOT NULL,
993
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
994
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
995
+ );
996
+ `.trim(),
997
+ clickhouse: `
998
+ CREATE TABLE IF NOT EXISTS analytics_internal.team_invitations (
999
+ project_id String,
1000
+ branch_id String,
1001
+ id UUID,
1002
+ team_id UUID,
1003
+ team_display_name String,
1004
+ recipient_email String,
1005
+ expires_at_millis Int64,
1006
+ created_at DateTime64(3, 'UTC'),
1007
+ sync_sequence_id Int64,
1008
+ sync_is_deleted UInt8,
1009
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
1010
+ )
1011
+ ENGINE ReplacingMergeTree(sync_sequence_id)
1012
+ PARTITION BY toYYYYMM(created_at)
1013
+ ORDER BY (project_id, branch_id, id);
1014
+ `.trim()
1015
+ },
1016
+ internalDbFetchQueries: { clickhouse: `
1017
+ SELECT *
1018
+ FROM (
1019
+ SELECT
1020
+ "Tenancy"."projectId" AS "project_id",
1021
+ "Tenancy"."branchId" AS "branch_id",
1022
+ "VerificationCode"."id"::uuid AS "id",
1023
+ ("VerificationCode"."data"->>'team_id')::uuid AS "team_id",
1024
+ "Team"."displayName" AS "team_display_name",
1025
+ "VerificationCode"."method"->>'email' AS "recipient_email",
1026
+ FLOOR(EXTRACT(EPOCH FROM "VerificationCode"."expiresAt") * 1000)::bigint AS "expires_at_millis",
1027
+ "VerificationCode"."createdAt" AS "created_at",
1028
+ "VerificationCode"."sequenceId" AS "sync_sequence_id",
1029
+ "Tenancy"."id" AS "tenancyId",
1030
+ false AS "sync_is_deleted"
1031
+ FROM "VerificationCode"
1032
+ JOIN "Tenancy" ON "Tenancy"."projectId" = "VerificationCode"."projectId"
1033
+ AND "Tenancy"."branchId" = "VerificationCode"."branchId"
1034
+ LEFT JOIN "Team" ON "Team"."teamId" = ("VerificationCode"."data"->>'team_id')::uuid
1035
+ AND "Team"."tenancyId" = "Tenancy"."id"
1036
+ WHERE "Tenancy"."id" = $1::uuid
1037
+ AND "VerificationCode"."type" = 'TEAM_INVITATION'
1038
+
1039
+ UNION ALL
1040
+
1041
+ SELECT
1042
+ "Tenancy"."projectId" AS "project_id",
1043
+ "Tenancy"."branchId" AS "branch_id",
1044
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
1045
+ '00000000-0000-0000-0000-000000000000'::uuid AS "team_id",
1046
+ ''::text AS "team_display_name",
1047
+ ''::text AS "recipient_email",
1048
+ 0::bigint AS "expires_at_millis",
1049
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
1050
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
1051
+ "DeletedRow"."tenancyId" AS "tenancyId",
1052
+ true AS "sync_is_deleted"
1053
+ FROM "DeletedRow"
1054
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
1055
+ WHERE
1056
+ "DeletedRow"."tenancyId" = $1::uuid
1057
+ AND "DeletedRow"."tableName" = 'VerificationCode_TEAM_INVITATION'
1058
+ ) AS "_src"
1059
+ WHERE "sync_sequence_id" IS NOT NULL
1060
+ AND "sync_sequence_id" > $2::bigint
1061
+ ORDER BY "sync_sequence_id" ASC
1062
+ LIMIT 1000
1063
+ `.trim() },
1064
+ internalDbFetchQuery: `
1065
+ SELECT *
1066
+ FROM (
1067
+ SELECT
1068
+ "VerificationCode"."id"::uuid AS "id",
1069
+ ("VerificationCode"."data"->>'team_id')::uuid AS "team_id",
1070
+ "Team"."displayName" AS "team_display_name",
1071
+ "VerificationCode"."method"->>'email' AS "recipient_email",
1072
+ FLOOR(EXTRACT(EPOCH FROM "VerificationCode"."expiresAt") * 1000)::bigint AS "expires_at_millis",
1073
+ "VerificationCode"."createdAt" AS "created_at",
1074
+ "VerificationCode"."sequenceId" AS "sequence_id",
1075
+ "Tenancy"."id" AS "tenancyId",
1076
+ false AS "is_deleted"
1077
+ FROM "VerificationCode"
1078
+ JOIN "Tenancy" ON "Tenancy"."projectId" = "VerificationCode"."projectId"
1079
+ AND "Tenancy"."branchId" = "VerificationCode"."branchId"
1080
+ LEFT JOIN "Team" ON "Team"."teamId" = ("VerificationCode"."data"->>'team_id')::uuid
1081
+ AND "Team"."tenancyId" = "Tenancy"."id"
1082
+ WHERE "Tenancy"."id" = $1::uuid
1083
+ AND "VerificationCode"."type" = 'TEAM_INVITATION'
1084
+
1085
+ UNION ALL
1086
+
1087
+ SELECT
1088
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
1089
+ '00000000-0000-0000-0000-000000000000'::uuid AS "team_id",
1090
+ ''::text AS "team_display_name",
1091
+ ''::text AS "recipient_email",
1092
+ 0::bigint AS "expires_at_millis",
1093
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
1094
+ "DeletedRow"."sequenceId" AS "sequence_id",
1095
+ "DeletedRow"."tenancyId" AS "tenancyId",
1096
+ true AS "is_deleted"
1097
+ FROM "DeletedRow"
1098
+ WHERE
1099
+ "DeletedRow"."tenancyId" = $1::uuid
1100
+ AND "DeletedRow"."tableName" = 'VerificationCode_TEAM_INVITATION'
1101
+ ) AS "_src"
1102
+ WHERE "sequence_id" IS NOT NULL
1103
+ AND "sequence_id" > $2::bigint
1104
+ ORDER BY "sequence_id" ASC
1105
+ LIMIT 1000
1106
+ `.trim(),
1107
+ externalDbUpdateQueries: { postgres: `
1108
+ WITH params AS (
1109
+ SELECT
1110
+ $1::uuid AS "id",
1111
+ $2::uuid AS "team_id",
1112
+ $3::text AS "team_display_name",
1113
+ $4::text AS "recipient_email",
1114
+ $5::bigint AS "expires_at_millis",
1115
+ $6::timestamp without time zone AS "created_at",
1116
+ $7::bigint AS "sequence_id",
1117
+ $8::boolean AS "is_deleted",
1118
+ $9::text AS "mapping_name"
1119
+ ),
1120
+ deleted AS (
1121
+ DELETE FROM "team_invitations" ti
1122
+ USING params p
1123
+ WHERE p."is_deleted" = true AND ti."id" = p."id"
1124
+ RETURNING 1
1125
+ ),
1126
+ upserted AS (
1127
+ INSERT INTO "team_invitations" (
1128
+ "id",
1129
+ "team_id",
1130
+ "team_display_name",
1131
+ "recipient_email",
1132
+ "expires_at_millis",
1133
+ "created_at"
1134
+ )
1135
+ SELECT
1136
+ p."id",
1137
+ p."team_id",
1138
+ p."team_display_name",
1139
+ p."recipient_email",
1140
+ p."expires_at_millis",
1141
+ p."created_at"
1142
+ FROM params p
1143
+ WHERE p."is_deleted" = false
1144
+ ON CONFLICT ("id") DO UPDATE SET
1145
+ "team_id" = EXCLUDED."team_id",
1146
+ "team_display_name" = EXCLUDED."team_display_name",
1147
+ "recipient_email" = EXCLUDED."recipient_email",
1148
+ "expires_at_millis" = EXCLUDED."expires_at_millis",
1149
+ "created_at" = EXCLUDED."created_at"
1150
+ RETURNING 1
1151
+ )
1152
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
1153
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
1154
+ ON CONFLICT ("mapping_name") DO UPDATE SET
1155
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
1156
+ "updated_at" = now();
1157
+ `.trim() }
1158
+ },
1159
+ "email_outboxes": {
1160
+ sourceTables: { "EmailOutbox": "EmailOutbox" },
1161
+ targetTable: "email_outboxes",
1162
+ targetTableSchemas: {
1163
+ postgres: `
1164
+ CREATE TABLE IF NOT EXISTS "email_outboxes" (
1165
+ "id" uuid PRIMARY KEY NOT NULL,
1166
+ "status" text NOT NULL,
1167
+ "simple_status" text NOT NULL,
1168
+ "created_with" text NOT NULL,
1169
+ "email_draft_id" text,
1170
+ "email_programmatic_call_template_id" text,
1171
+ "theme_id" text,
1172
+ "is_high_priority" boolean NOT NULL DEFAULT false,
1173
+ "rendered_is_transactional" boolean,
1174
+ "rendered_subject" text,
1175
+ "rendered_notification_category_id" text,
1176
+ "started_rendering_at" timestamp without time zone,
1177
+ "finished_rendering_at" timestamp without time zone,
1178
+ "render_error" text,
1179
+ "scheduled_at" timestamp without time zone NOT NULL,
1180
+ "created_at" timestamp without time zone NOT NULL,
1181
+ "started_sending_at" timestamp without time zone,
1182
+ "finished_sending_at" timestamp without time zone,
1183
+ "server_error" text,
1184
+ "sent_at" timestamp without time zone,
1185
+ "delivered_at" timestamp without time zone,
1186
+ "opened_at" timestamp without time zone,
1187
+ "clicked_at" timestamp without time zone,
1188
+ "unsubscribed_at" timestamp without time zone,
1189
+ "marked_as_spam_at" timestamp without time zone,
1190
+ "bounced_at" timestamp without time zone,
1191
+ "delivery_delayed_at" timestamp without time zone,
1192
+ "can_have_delivery_info" boolean,
1193
+ "skipped_reason" text,
1194
+ "skipped_details" jsonb,
1195
+ "send_retries" integer NOT NULL DEFAULT 0,
1196
+ "is_paused" boolean NOT NULL DEFAULT false
1197
+ );
1198
+ REVOKE ALL ON "email_outboxes" FROM PUBLIC;
1199
+ GRANT SELECT ON "email_outboxes" TO PUBLIC;
1200
+
1201
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
1202
+ "mapping_name" text PRIMARY KEY NOT NULL,
1203
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
1204
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
1205
+ );
1206
+ `.trim(),
1207
+ clickhouse: `
1208
+ CREATE TABLE IF NOT EXISTS analytics_internal.email_outboxes (
1209
+ project_id String,
1210
+ branch_id String,
1211
+ id UUID,
1212
+ status LowCardinality(String),
1213
+ simple_status LowCardinality(String),
1214
+ created_with LowCardinality(String),
1215
+ email_draft_id Nullable(String),
1216
+ email_programmatic_call_template_id Nullable(String),
1217
+ theme_id Nullable(String),
1218
+ is_high_priority UInt8,
1219
+ is_transactional Nullable(UInt8),
1220
+ subject Nullable(String),
1221
+ notification_category_id Nullable(String),
1222
+ started_rendering_at Nullable(DateTime64(3, 'UTC')),
1223
+ rendered_at Nullable(DateTime64(3, 'UTC')),
1224
+ render_error Nullable(String),
1225
+ scheduled_at DateTime64(3, 'UTC'),
1226
+ created_at DateTime64(3, 'UTC'),
1227
+ updated_at DateTime64(3, 'UTC'),
1228
+ started_sending_at Nullable(DateTime64(3, 'UTC')),
1229
+ server_error Nullable(String),
1230
+ delivered_at Nullable(DateTime64(3, 'UTC')),
1231
+ opened_at Nullable(DateTime64(3, 'UTC')),
1232
+ clicked_at Nullable(DateTime64(3, 'UTC')),
1233
+ unsubscribed_at Nullable(DateTime64(3, 'UTC')),
1234
+ marked_as_spam_at Nullable(DateTime64(3, 'UTC')),
1235
+ bounced_at Nullable(DateTime64(3, 'UTC')),
1236
+ delivery_delayed_at Nullable(DateTime64(3, 'UTC')),
1237
+ can_have_delivery_info Nullable(UInt8),
1238
+ skipped_reason LowCardinality(Nullable(String)),
1239
+ skipped_details Nullable(String),
1240
+ send_retries Int32,
1241
+ is_paused UInt8,
1242
+ sync_sequence_id Int64,
1243
+ sync_is_deleted UInt8,
1244
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
1245
+ )
1246
+ ENGINE ReplacingMergeTree(sync_sequence_id)
1247
+ PARTITION BY toYYYYMM(created_at)
1248
+ ORDER BY (project_id, branch_id, id);
1249
+ `.trim()
1250
+ },
1251
+ internalDbFetchQueries: { clickhouse: `
1252
+ SELECT *
1253
+ FROM (
1254
+ SELECT
1255
+ "Tenancy"."projectId" AS "project_id",
1256
+ "Tenancy"."branchId" AS "branch_id",
1257
+ "EmailOutbox"."id" AS "id",
1258
+ LOWER(REPLACE("EmailOutbox"."status"::text, '_', '-')) AS "status",
1259
+ LOWER(REPLACE("EmailOutbox"."simpleStatus"::text, '_', '-')) AS "simple_status",
1260
+ CASE WHEN "EmailOutbox"."createdWith"::text = 'DRAFT' THEN 'draft' ELSE 'programmatic-call' END AS "created_with",
1261
+ "EmailOutbox"."emailDraftId" AS "email_draft_id",
1262
+ "EmailOutbox"."emailProgrammaticCallTemplateId" AS "email_programmatic_call_template_id",
1263
+ "EmailOutbox"."themeId" AS "theme_id",
1264
+ "EmailOutbox"."isHighPriority" AS "is_high_priority",
1265
+ "EmailOutbox"."renderedIsTransactional" AS "is_transactional",
1266
+ "EmailOutbox"."renderedSubject" AS "subject",
1267
+ "EmailOutbox"."renderedNotificationCategoryId" AS "notification_category_id",
1268
+ "EmailOutbox"."startedRenderingAt" AS "started_rendering_at",
1269
+ "EmailOutbox"."finishedRenderingAt" AS "rendered_at",
1270
+ "EmailOutbox"."renderErrorExternalMessage" AS "render_error",
1271
+ "EmailOutbox"."scheduledAt" AS "scheduled_at",
1272
+ "EmailOutbox"."createdAt" AS "created_at",
1273
+ "EmailOutbox"."updatedAt" AS "updated_at",
1274
+ "EmailOutbox"."startedSendingAt" AS "started_sending_at",
1275
+ "EmailOutbox"."sendServerErrorExternalMessage" AS "server_error",
1276
+ "EmailOutbox"."deliveredAt" AS "delivered_at",
1277
+ "EmailOutbox"."openedAt" AS "opened_at",
1278
+ "EmailOutbox"."clickedAt" AS "clicked_at",
1279
+ "EmailOutbox"."unsubscribedAt" AS "unsubscribed_at",
1280
+ "EmailOutbox"."markedAsSpamAt" AS "marked_as_spam_at",
1281
+ "EmailOutbox"."bouncedAt" AS "bounced_at",
1282
+ "EmailOutbox"."deliveryDelayedAt" AS "delivery_delayed_at",
1283
+ "EmailOutbox"."canHaveDeliveryInfo" AS "can_have_delivery_info",
1284
+ LOWER(REPLACE("EmailOutbox"."skippedReason"::text, '_', '-')) AS "skipped_reason",
1285
+ "EmailOutbox"."skippedDetails" AS "skipped_details",
1286
+ "EmailOutbox"."sendRetries" AS "send_retries",
1287
+ "EmailOutbox"."isPaused" AS "is_paused",
1288
+ "EmailOutbox"."sequenceId" AS "sync_sequence_id",
1289
+ "EmailOutbox"."tenancyId" AS "tenancyId",
1290
+ false AS "sync_is_deleted"
1291
+ FROM "EmailOutbox"
1292
+ JOIN "Tenancy" ON "Tenancy"."id" = "EmailOutbox"."tenancyId"
1293
+ WHERE "EmailOutbox"."tenancyId" = $1::uuid
1294
+
1295
+ UNION ALL
1296
+
1297
+ SELECT
1298
+ "Tenancy"."projectId" AS "project_id",
1299
+ "Tenancy"."branchId" AS "branch_id",
1300
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
1301
+ ''::text AS "status",
1302
+ ''::text AS "simple_status",
1303
+ ''::text AS "created_with",
1304
+ NULL::text AS "email_draft_id",
1305
+ NULL::text AS "email_programmatic_call_template_id",
1306
+ NULL::text AS "theme_id",
1307
+ false AS "is_high_priority",
1308
+ NULL::boolean AS "is_transactional",
1309
+ NULL::text AS "subject",
1310
+ NULL::text AS "notification_category_id",
1311
+ NULL::timestamp without time zone AS "started_rendering_at",
1312
+ NULL::timestamp without time zone AS "rendered_at",
1313
+ NULL::text AS "render_error",
1314
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "scheduled_at",
1315
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
1316
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "updated_at",
1317
+ NULL::timestamp without time zone AS "started_sending_at",
1318
+ NULL::text AS "server_error",
1319
+ NULL::timestamp without time zone AS "delivered_at",
1320
+ NULL::timestamp without time zone AS "opened_at",
1321
+ NULL::timestamp without time zone AS "clicked_at",
1322
+ NULL::timestamp without time zone AS "unsubscribed_at",
1323
+ NULL::timestamp without time zone AS "marked_as_spam_at",
1324
+ NULL::timestamp without time zone AS "bounced_at",
1325
+ NULL::timestamp without time zone AS "delivery_delayed_at",
1326
+ NULL::boolean AS "can_have_delivery_info",
1327
+ NULL::text AS "skipped_reason",
1328
+ NULL::jsonb AS "skipped_details",
1329
+ 0 AS "send_retries",
1330
+ false AS "is_paused",
1331
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
1332
+ "DeletedRow"."tenancyId" AS "tenancyId",
1333
+ true AS "sync_is_deleted"
1334
+ FROM "DeletedRow"
1335
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
1336
+ WHERE
1337
+ "DeletedRow"."tenancyId" = $1::uuid
1338
+ AND "DeletedRow"."tableName" = 'EmailOutbox'
1339
+ ) AS "_src"
1340
+ WHERE "sync_sequence_id" IS NOT NULL
1341
+ AND "sync_sequence_id" > $2::bigint
1342
+ ORDER BY "sync_sequence_id" ASC
1343
+ LIMIT 1000
1344
+ `.trim() },
1345
+ internalDbFetchQuery: `
1346
+ SELECT *
1347
+ FROM (
1348
+ SELECT
1349
+ "EmailOutbox"."id" AS "id",
1350
+ "EmailOutbox"."status"::text AS "status",
1351
+ "EmailOutbox"."simpleStatus"::text AS "simple_status",
1352
+ "EmailOutbox"."createdWith"::text AS "created_with",
1353
+ "EmailOutbox"."emailDraftId" AS "email_draft_id",
1354
+ "EmailOutbox"."emailProgrammaticCallTemplateId" AS "email_programmatic_call_template_id",
1355
+ "EmailOutbox"."themeId" AS "theme_id",
1356
+ "EmailOutbox"."isHighPriority" AS "is_high_priority",
1357
+ "EmailOutbox"."renderedIsTransactional" AS "rendered_is_transactional",
1358
+ "EmailOutbox"."renderedSubject" AS "rendered_subject",
1359
+ "EmailOutbox"."renderedNotificationCategoryId" AS "rendered_notification_category_id",
1360
+ "EmailOutbox"."startedRenderingAt" AS "started_rendering_at",
1361
+ "EmailOutbox"."finishedRenderingAt" AS "finished_rendering_at",
1362
+ "EmailOutbox"."renderErrorExternalMessage" AS "render_error",
1363
+ "EmailOutbox"."scheduledAt" AS "scheduled_at",
1364
+ "EmailOutbox"."createdAt" AS "created_at",
1365
+ "EmailOutbox"."startedSendingAt" AS "started_sending_at",
1366
+ "EmailOutbox"."finishedSendingAt" AS "finished_sending_at",
1367
+ "EmailOutbox"."sendServerErrorExternalMessage" AS "server_error",
1368
+ "EmailOutbox"."sentAt" AS "sent_at",
1369
+ "EmailOutbox"."deliveredAt" AS "delivered_at",
1370
+ "EmailOutbox"."openedAt" AS "opened_at",
1371
+ "EmailOutbox"."clickedAt" AS "clicked_at",
1372
+ "EmailOutbox"."unsubscribedAt" AS "unsubscribed_at",
1373
+ "EmailOutbox"."markedAsSpamAt" AS "marked_as_spam_at",
1374
+ "EmailOutbox"."bouncedAt" AS "bounced_at",
1375
+ "EmailOutbox"."deliveryDelayedAt" AS "delivery_delayed_at",
1376
+ "EmailOutbox"."canHaveDeliveryInfo" AS "can_have_delivery_info",
1377
+ "EmailOutbox"."skippedReason"::text AS "skipped_reason",
1378
+ "EmailOutbox"."skippedDetails" AS "skipped_details",
1379
+ "EmailOutbox"."sendRetries" AS "send_retries",
1380
+ "EmailOutbox"."isPaused" AS "is_paused",
1381
+ "EmailOutbox"."sequenceId" AS "sequence_id",
1382
+ "EmailOutbox"."tenancyId",
1383
+ false AS "is_deleted"
1384
+ FROM "EmailOutbox"
1385
+ WHERE "EmailOutbox"."tenancyId" = $1::uuid
1386
+
1387
+ UNION ALL
1388
+
1389
+ SELECT
1390
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
1391
+ ''::text AS "status",
1392
+ ''::text AS "simple_status",
1393
+ ''::text AS "created_with",
1394
+ NULL::text AS "email_draft_id",
1395
+ NULL::text AS "email_programmatic_call_template_id",
1396
+ NULL::text AS "theme_id",
1397
+ false AS "is_high_priority",
1398
+ NULL::boolean AS "rendered_is_transactional",
1399
+ NULL::text AS "rendered_subject",
1400
+ NULL::text AS "rendered_notification_category_id",
1401
+ NULL::timestamp without time zone AS "started_rendering_at",
1402
+ NULL::timestamp without time zone AS "finished_rendering_at",
1403
+ NULL::text AS "render_error",
1404
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "scheduled_at",
1405
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
1406
+ NULL::timestamp without time zone AS "started_sending_at",
1407
+ NULL::timestamp without time zone AS "finished_sending_at",
1408
+ NULL::text AS "server_error",
1409
+ NULL::timestamp without time zone AS "sent_at",
1410
+ NULL::timestamp without time zone AS "delivered_at",
1411
+ NULL::timestamp without time zone AS "opened_at",
1412
+ NULL::timestamp without time zone AS "clicked_at",
1413
+ NULL::timestamp without time zone AS "unsubscribed_at",
1414
+ NULL::timestamp without time zone AS "marked_as_spam_at",
1415
+ NULL::timestamp without time zone AS "bounced_at",
1416
+ NULL::timestamp without time zone AS "delivery_delayed_at",
1417
+ NULL::boolean AS "can_have_delivery_info",
1418
+ NULL::text AS "skipped_reason",
1419
+ NULL::jsonb AS "skipped_details",
1420
+ 0 AS "send_retries",
1421
+ false AS "is_paused",
1422
+ "DeletedRow"."sequenceId" AS "sequence_id",
1423
+ "DeletedRow"."tenancyId",
1424
+ true AS "is_deleted"
1425
+ FROM "DeletedRow"
1426
+ WHERE
1427
+ "DeletedRow"."tenancyId" = $1::uuid
1428
+ AND "DeletedRow"."tableName" = 'EmailOutbox'
1429
+ ) AS "_src"
1430
+ WHERE "sequence_id" IS NOT NULL
1431
+ AND "sequence_id" > $2::bigint
1432
+ ORDER BY "sequence_id" ASC
1433
+ LIMIT 1000
1434
+ `.trim(),
1435
+ externalDbUpdateQueries: { postgres: `
1436
+ WITH params AS (
1437
+ SELECT
1438
+ $1::uuid AS "id",
1439
+ $2::text AS "status",
1440
+ $3::text AS "simple_status",
1441
+ $4::text AS "created_with",
1442
+ $5::text AS "email_draft_id",
1443
+ $6::text AS "email_programmatic_call_template_id",
1444
+ $7::text AS "theme_id",
1445
+ $8::boolean AS "is_high_priority",
1446
+ $9::boolean AS "rendered_is_transactional",
1447
+ $10::text AS "rendered_subject",
1448
+ $11::text AS "rendered_notification_category_id",
1449
+ $12::timestamp without time zone AS "started_rendering_at",
1450
+ $13::timestamp without time zone AS "finished_rendering_at",
1451
+ $14::text AS "render_error",
1452
+ $15::timestamp without time zone AS "scheduled_at",
1453
+ $16::timestamp without time zone AS "created_at",
1454
+ $17::timestamp without time zone AS "started_sending_at",
1455
+ $18::timestamp without time zone AS "finished_sending_at",
1456
+ $19::text AS "server_error",
1457
+ $20::timestamp without time zone AS "sent_at",
1458
+ $21::timestamp without time zone AS "delivered_at",
1459
+ $22::timestamp without time zone AS "opened_at",
1460
+ $23::timestamp without time zone AS "clicked_at",
1461
+ $24::timestamp without time zone AS "unsubscribed_at",
1462
+ $25::timestamp without time zone AS "marked_as_spam_at",
1463
+ $26::timestamp without time zone AS "bounced_at",
1464
+ $27::timestamp without time zone AS "delivery_delayed_at",
1465
+ $28::boolean AS "can_have_delivery_info",
1466
+ $29::text AS "skipped_reason",
1467
+ $30::jsonb AS "skipped_details",
1468
+ $31::integer AS "send_retries",
1469
+ $32::boolean AS "is_paused",
1470
+ $33::bigint AS "sequence_id",
1471
+ $34::boolean AS "is_deleted",
1472
+ $35::text AS "mapping_name"
1473
+ ),
1474
+ deleted AS (
1475
+ DELETE FROM "email_outboxes" eo
1476
+ USING params p
1477
+ WHERE p."is_deleted" = true AND eo."id" = p."id"
1478
+ RETURNING 1
1479
+ ),
1480
+ upserted AS (
1481
+ INSERT INTO "email_outboxes" (
1482
+ "id",
1483
+ "status",
1484
+ "simple_status",
1485
+ "created_with",
1486
+ "email_draft_id",
1487
+ "email_programmatic_call_template_id",
1488
+ "theme_id",
1489
+ "is_high_priority",
1490
+ "rendered_is_transactional",
1491
+ "rendered_subject",
1492
+ "rendered_notification_category_id",
1493
+ "started_rendering_at",
1494
+ "finished_rendering_at",
1495
+ "render_error",
1496
+ "scheduled_at",
1497
+ "created_at",
1498
+ "started_sending_at",
1499
+ "finished_sending_at",
1500
+ "server_error",
1501
+ "sent_at",
1502
+ "delivered_at",
1503
+ "opened_at",
1504
+ "clicked_at",
1505
+ "unsubscribed_at",
1506
+ "marked_as_spam_at",
1507
+ "bounced_at",
1508
+ "delivery_delayed_at",
1509
+ "can_have_delivery_info",
1510
+ "skipped_reason",
1511
+ "skipped_details",
1512
+ "send_retries",
1513
+ "is_paused"
1514
+ )
1515
+ SELECT
1516
+ p."id",
1517
+ p."status",
1518
+ p."simple_status",
1519
+ p."created_with",
1520
+ p."email_draft_id",
1521
+ p."email_programmatic_call_template_id",
1522
+ p."theme_id",
1523
+ p."is_high_priority",
1524
+ p."rendered_is_transactional",
1525
+ p."rendered_subject",
1526
+ p."rendered_notification_category_id",
1527
+ p."started_rendering_at",
1528
+ p."finished_rendering_at",
1529
+ p."render_error",
1530
+ p."scheduled_at",
1531
+ p."created_at",
1532
+ p."started_sending_at",
1533
+ p."finished_sending_at",
1534
+ p."server_error",
1535
+ p."sent_at",
1536
+ p."delivered_at",
1537
+ p."opened_at",
1538
+ p."clicked_at",
1539
+ p."unsubscribed_at",
1540
+ p."marked_as_spam_at",
1541
+ p."bounced_at",
1542
+ p."delivery_delayed_at",
1543
+ p."can_have_delivery_info",
1544
+ p."skipped_reason",
1545
+ p."skipped_details",
1546
+ p."send_retries",
1547
+ p."is_paused"
1548
+ FROM params p
1549
+ WHERE p."is_deleted" = false
1550
+ ON CONFLICT ("id") DO UPDATE SET
1551
+ "status" = EXCLUDED."status",
1552
+ "simple_status" = EXCLUDED."simple_status",
1553
+ "created_with" = EXCLUDED."created_with",
1554
+ "email_draft_id" = EXCLUDED."email_draft_id",
1555
+ "email_programmatic_call_template_id" = EXCLUDED."email_programmatic_call_template_id",
1556
+ "theme_id" = EXCLUDED."theme_id",
1557
+ "is_high_priority" = EXCLUDED."is_high_priority",
1558
+ "rendered_is_transactional" = EXCLUDED."rendered_is_transactional",
1559
+ "rendered_subject" = EXCLUDED."rendered_subject",
1560
+ "rendered_notification_category_id" = EXCLUDED."rendered_notification_category_id",
1561
+ "started_rendering_at" = EXCLUDED."started_rendering_at",
1562
+ "finished_rendering_at" = EXCLUDED."finished_rendering_at",
1563
+ "render_error" = EXCLUDED."render_error",
1564
+ "scheduled_at" = EXCLUDED."scheduled_at",
1565
+ "created_at" = EXCLUDED."created_at",
1566
+ "started_sending_at" = EXCLUDED."started_sending_at",
1567
+ "finished_sending_at" = EXCLUDED."finished_sending_at",
1568
+ "server_error" = EXCLUDED."server_error",
1569
+ "sent_at" = EXCLUDED."sent_at",
1570
+ "delivered_at" = EXCLUDED."delivered_at",
1571
+ "opened_at" = EXCLUDED."opened_at",
1572
+ "clicked_at" = EXCLUDED."clicked_at",
1573
+ "unsubscribed_at" = EXCLUDED."unsubscribed_at",
1574
+ "marked_as_spam_at" = EXCLUDED."marked_as_spam_at",
1575
+ "bounced_at" = EXCLUDED."bounced_at",
1576
+ "delivery_delayed_at" = EXCLUDED."delivery_delayed_at",
1577
+ "can_have_delivery_info" = EXCLUDED."can_have_delivery_info",
1578
+ "skipped_reason" = EXCLUDED."skipped_reason",
1579
+ "skipped_details" = EXCLUDED."skipped_details",
1580
+ "send_retries" = EXCLUDED."send_retries",
1581
+ "is_paused" = EXCLUDED."is_paused"
1582
+ RETURNING 1
1583
+ )
1584
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
1585
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
1586
+ ON CONFLICT ("mapping_name") DO UPDATE SET
1587
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
1588
+ "updated_at" = now();
1589
+ `.trim() }
1590
+ },
1591
+ "project_permissions": {
1592
+ sourceTables: { "ProjectUserDirectPermission": "ProjectUserDirectPermission" },
1593
+ targetTable: "project_permissions",
1594
+ targetTableSchemas: {
1595
+ postgres: `
1596
+ CREATE TABLE IF NOT EXISTS "project_permissions" (
1597
+ "user_id" uuid NOT NULL,
1598
+ "permission_id" text NOT NULL,
1599
+ "created_at" timestamp without time zone NOT NULL,
1600
+ PRIMARY KEY ("user_id", "permission_id")
1601
+ );
1602
+ REVOKE ALL ON "project_permissions" FROM PUBLIC;
1603
+ GRANT SELECT ON "project_permissions" TO PUBLIC;
1604
+
1605
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
1606
+ "mapping_name" text PRIMARY KEY NOT NULL,
1607
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
1608
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
1609
+ );
1610
+ `.trim(),
1611
+ clickhouse: `
1612
+ CREATE TABLE IF NOT EXISTS analytics_internal.project_permissions (
1613
+ project_id String,
1614
+ branch_id String,
1615
+ user_id UUID,
1616
+ id String,
1617
+ created_at DateTime64(3, 'UTC'),
1618
+ sync_sequence_id Int64,
1619
+ sync_is_deleted UInt8,
1620
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
1621
+ )
1622
+ ENGINE ReplacingMergeTree(sync_sequence_id)
1623
+ PARTITION BY toYYYYMM(created_at)
1624
+ ORDER BY (project_id, branch_id, user_id, id);
1625
+ `.trim()
1626
+ },
1627
+ internalDbFetchQueries: { clickhouse: `
1628
+ SELECT *
1629
+ FROM (
1630
+ SELECT
1631
+ "Tenancy"."projectId" AS "project_id",
1632
+ "Tenancy"."branchId" AS "branch_id",
1633
+ "ProjectUserDirectPermission"."projectUserId" AS "user_id",
1634
+ "ProjectUserDirectPermission"."permissionId" AS "id",
1635
+ "ProjectUserDirectPermission"."createdAt" AS "created_at",
1636
+ "ProjectUserDirectPermission"."sequenceId" AS "sync_sequence_id",
1637
+ "ProjectUserDirectPermission"."tenancyId" AS "tenancyId",
1638
+ false AS "sync_is_deleted"
1639
+ FROM "ProjectUserDirectPermission"
1640
+ JOIN "Tenancy" ON "Tenancy"."id" = "ProjectUserDirectPermission"."tenancyId"
1641
+ WHERE "ProjectUserDirectPermission"."tenancyId" = $1::uuid
1642
+
1643
+ UNION ALL
1644
+
1645
+ SELECT
1646
+ "Tenancy"."projectId" AS "project_id",
1647
+ "Tenancy"."branchId" AS "branch_id",
1648
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "user_id",
1649
+ "DeletedRow"."primaryKey"->>'permissionId' AS "id",
1650
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
1651
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
1652
+ "DeletedRow"."tenancyId" AS "tenancyId",
1653
+ true AS "sync_is_deleted"
1654
+ FROM "DeletedRow"
1655
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
1656
+ WHERE
1657
+ "DeletedRow"."tenancyId" = $1::uuid
1658
+ AND "DeletedRow"."tableName" = 'ProjectUserDirectPermission'
1659
+ ) AS "_src"
1660
+ WHERE "sync_sequence_id" IS NOT NULL
1661
+ AND "sync_sequence_id" > $2::bigint
1662
+ ORDER BY "sync_sequence_id" ASC
1663
+ LIMIT 1000
1664
+ `.trim() },
1665
+ internalDbFetchQuery: `
1666
+ SELECT *
1667
+ FROM (
1668
+ SELECT
1669
+ "ProjectUserDirectPermission"."projectUserId" AS "user_id",
1670
+ "ProjectUserDirectPermission"."permissionId" AS "permission_id",
1671
+ "ProjectUserDirectPermission"."createdAt" AS "created_at",
1672
+ "ProjectUserDirectPermission"."sequenceId" AS "sequence_id",
1673
+ "ProjectUserDirectPermission"."tenancyId",
1674
+ false AS "is_deleted"
1675
+ FROM "ProjectUserDirectPermission"
1676
+ WHERE "ProjectUserDirectPermission"."tenancyId" = $1::uuid
1677
+
1678
+ UNION ALL
1679
+
1680
+ SELECT
1681
+ ("DeletedRow"."primaryKey"->>'projectUserId')::uuid AS "user_id",
1682
+ "DeletedRow"."primaryKey"->>'permissionId' AS "id",
1683
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
1684
+ "DeletedRow"."sequenceId" AS "sequence_id",
1685
+ "DeletedRow"."tenancyId",
1686
+ true AS "is_deleted"
1687
+ FROM "DeletedRow"
1688
+ WHERE
1689
+ "DeletedRow"."tenancyId" = $1::uuid
1690
+ AND "DeletedRow"."tableName" = 'ProjectUserDirectPermission'
1691
+ ) AS "_src"
1692
+ WHERE "sequence_id" IS NOT NULL
1693
+ AND "sequence_id" > $2::bigint
1694
+ ORDER BY "sequence_id" ASC
1695
+ LIMIT 1000
1696
+ `.trim(),
1697
+ externalDbUpdateQueries: { postgres: `
1698
+ WITH params AS (
1699
+ SELECT
1700
+ $1::uuid AS "user_id",
1701
+ $2::text AS "permission_id",
1702
+ $3::timestamp without time zone AS "created_at",
1703
+ $4::bigint AS "sequence_id",
1704
+ $5::boolean AS "is_deleted",
1705
+ $6::text AS "mapping_name"
1706
+ ),
1707
+ deleted AS (
1708
+ DELETE FROM "project_permissions" pp
1709
+ USING params p
1710
+ WHERE p."is_deleted" = true AND pp."user_id" = p."user_id" AND pp."permission_id" = p."permission_id"
1711
+ RETURNING 1
1712
+ ),
1713
+ upserted AS (
1714
+ INSERT INTO "project_permissions" (
1715
+ "user_id",
1716
+ "permission_id",
1717
+ "created_at"
1718
+ )
1719
+ SELECT
1720
+ p."user_id",
1721
+ p."permission_id",
1722
+ p."created_at"
1723
+ FROM params p
1724
+ WHERE p."is_deleted" = false
1725
+ ON CONFLICT ("user_id", "permission_id") DO UPDATE SET
1726
+ "created_at" = EXCLUDED."created_at"
1727
+ RETURNING 1
1728
+ )
1729
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
1730
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
1731
+ ON CONFLICT ("mapping_name") DO UPDATE SET
1732
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
1733
+ "updated_at" = now();
1734
+ `.trim() }
1735
+ },
1736
+ "notification_preferences": {
1737
+ sourceTables: { "UserNotificationPreference": "UserNotificationPreference" },
1738
+ targetTable: "notification_preferences",
1739
+ targetTableSchemas: {
1740
+ postgres: `
1741
+ CREATE TABLE IF NOT EXISTS "notification_preferences" (
1742
+ "id" uuid PRIMARY KEY NOT NULL,
1743
+ "user_id" uuid NOT NULL,
1744
+ "notification_category_id" text NOT NULL,
1745
+ "enabled" boolean NOT NULL DEFAULT true
1746
+ );
1747
+ REVOKE ALL ON "notification_preferences" FROM PUBLIC;
1748
+ GRANT SELECT ON "notification_preferences" TO PUBLIC;
1749
+
1750
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
1751
+ "mapping_name" text PRIMARY KEY NOT NULL,
1752
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
1753
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
1754
+ );
1755
+ `.trim(),
1756
+ clickhouse: `
1757
+ CREATE TABLE IF NOT EXISTS analytics_internal.notification_preferences (
1758
+ project_id String,
1759
+ branch_id String,
1760
+ user_id UUID,
1761
+ notification_category_id String,
1762
+ enabled UInt8,
1763
+ sync_sequence_id Int64,
1764
+ sync_is_deleted UInt8,
1765
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
1766
+ )
1767
+ ENGINE ReplacingMergeTree(sync_sequence_id)
1768
+ ORDER BY (project_id, branch_id, user_id, notification_category_id);
1769
+ `.trim()
1770
+ },
1771
+ internalDbFetchQueries: { clickhouse: `
1772
+ SELECT *
1773
+ FROM (
1774
+ SELECT
1775
+ "Tenancy"."projectId" AS "project_id",
1776
+ "Tenancy"."branchId" AS "branch_id",
1777
+ "UserNotificationPreference"."projectUserId" AS "user_id",
1778
+ "UserNotificationPreference"."notificationCategoryId" AS "notification_category_id",
1779
+ "UserNotificationPreference"."enabled" AS "enabled",
1780
+ "UserNotificationPreference"."sequenceId" AS "sync_sequence_id",
1781
+ "UserNotificationPreference"."tenancyId" AS "tenancyId",
1782
+ false AS "sync_is_deleted"
1783
+ FROM "UserNotificationPreference"
1784
+ JOIN "Tenancy" ON "Tenancy"."id" = "UserNotificationPreference"."tenancyId"
1785
+ WHERE "UserNotificationPreference"."tenancyId" = $1::uuid
1786
+
1787
+ UNION ALL
1788
+
1789
+ SELECT
1790
+ "Tenancy"."projectId" AS "project_id",
1791
+ "Tenancy"."branchId" AS "branch_id",
1792
+ ("DeletedRow"."data"->>'projectUserId')::uuid AS "user_id",
1793
+ ("DeletedRow"."data"->>'notificationCategoryId')::uuid AS "notification_category_id",
1794
+ ("DeletedRow"."data"->>'enabled')::boolean AS "enabled",
1795
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
1796
+ "DeletedRow"."tenancyId" AS "tenancyId",
1797
+ true AS "sync_is_deleted"
1798
+ FROM "DeletedRow"
1799
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
1800
+ WHERE
1801
+ "DeletedRow"."tenancyId" = $1::uuid
1802
+ AND "DeletedRow"."tableName" = 'UserNotificationPreference'
1803
+ ) AS "_src"
1804
+ WHERE "sync_sequence_id" IS NOT NULL
1805
+ AND "sync_sequence_id" > $2::bigint
1806
+ ORDER BY "sync_sequence_id" ASC
1807
+ LIMIT 1000
1808
+ `.trim() },
1809
+ internalDbFetchQuery: `
1810
+ SELECT *
1811
+ FROM (
1812
+ SELECT
1813
+ "UserNotificationPreference"."id" AS "id",
1814
+ "UserNotificationPreference"."projectUserId" AS "user_id",
1815
+ "UserNotificationPreference"."notificationCategoryId" AS "notification_category_id",
1816
+ "UserNotificationPreference"."enabled" AS "enabled",
1817
+ "UserNotificationPreference"."sequenceId" AS "sequence_id",
1818
+ "UserNotificationPreference"."tenancyId",
1819
+ false AS "is_deleted"
1820
+ FROM "UserNotificationPreference"
1821
+ WHERE "UserNotificationPreference"."tenancyId" = $1::uuid
1822
+
1823
+ UNION ALL
1824
+
1825
+ SELECT
1826
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
1827
+ ("DeletedRow"."data"->>'projectUserId')::uuid AS "user_id",
1828
+ ("DeletedRow"."data"->>'notificationCategoryId')::uuid AS "notification_category_id",
1829
+ ("DeletedRow"."data"->>'enabled')::boolean AS "enabled",
1830
+ "DeletedRow"."sequenceId" AS "sequence_id",
1831
+ "DeletedRow"."tenancyId",
1832
+ true AS "is_deleted"
1833
+ FROM "DeletedRow"
1834
+ WHERE
1835
+ "DeletedRow"."tenancyId" = $1::uuid
1836
+ AND "DeletedRow"."tableName" = 'UserNotificationPreference'
1837
+ ) AS "_src"
1838
+ WHERE "sequence_id" IS NOT NULL
1839
+ AND "sequence_id" > $2::bigint
1840
+ ORDER BY "sequence_id" ASC
1841
+ LIMIT 1000
1842
+ `.trim(),
1843
+ externalDbUpdateQueries: { postgres: `
1844
+ WITH params AS (
1845
+ SELECT
1846
+ $1::uuid AS "id",
1847
+ $2::uuid AS "user_id",
1848
+ $3::text AS "notification_category_id",
1849
+ $4::boolean AS "enabled",
1850
+ $5::bigint AS "sequence_id",
1851
+ $6::boolean AS "is_deleted",
1852
+ $7::text AS "mapping_name"
1853
+ ),
1854
+ deleted AS (
1855
+ DELETE FROM "notification_preferences" np
1856
+ USING params p
1857
+ WHERE p."is_deleted" = true AND np."id" = p."id"
1858
+ RETURNING 1
1859
+ ),
1860
+ upserted AS (
1861
+ INSERT INTO "notification_preferences" (
1862
+ "id",
1863
+ "user_id",
1864
+ "notification_category_id",
1865
+ "enabled"
1866
+ )
1867
+ SELECT
1868
+ p."id",
1869
+ p."user_id",
1870
+ p."notification_category_id",
1871
+ p."enabled"
1872
+ FROM params p
1873
+ WHERE p."is_deleted" = false
1874
+ ON CONFLICT ("id") DO UPDATE SET
1875
+ "user_id" = EXCLUDED."user_id",
1876
+ "notification_category_id" = EXCLUDED."notification_category_id",
1877
+ "enabled" = EXCLUDED."enabled"
1878
+ RETURNING 1
1879
+ )
1880
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
1881
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
1882
+ ON CONFLICT ("mapping_name") DO UPDATE SET
1883
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
1884
+ "updated_at" = now();
1885
+ `.trim() }
1886
+ },
1887
+ "refresh_tokens": {
1888
+ sourceTables: { "ProjectUserRefreshToken": "ProjectUserRefreshToken" },
1889
+ targetTable: "refresh_tokens",
1890
+ targetTableSchemas: {
1891
+ postgres: `
1892
+ CREATE TABLE IF NOT EXISTS "refresh_tokens" (
1893
+ "id" uuid PRIMARY KEY NOT NULL,
1894
+ "user_id" uuid NOT NULL,
1895
+ "created_at" timestamp without time zone NOT NULL,
1896
+ "last_used_at" timestamp without time zone NOT NULL,
1897
+ "is_impersonation" boolean NOT NULL DEFAULT false,
1898
+ "expires_at" timestamp without time zone
1899
+ );
1900
+ REVOKE ALL ON "refresh_tokens" FROM PUBLIC;
1901
+ GRANT SELECT ON "refresh_tokens" TO PUBLIC;
1902
+
1903
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
1904
+ "mapping_name" text PRIMARY KEY NOT NULL,
1905
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
1906
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
1907
+ );
1908
+ `.trim(),
1909
+ clickhouse: `
1910
+ CREATE TABLE IF NOT EXISTS analytics_internal.refresh_tokens (
1911
+ project_id String,
1912
+ branch_id String,
1913
+ id UUID,
1914
+ user_id UUID,
1915
+ created_at DateTime64(3, 'UTC'),
1916
+ last_used_at DateTime64(3, 'UTC'),
1917
+ is_impersonation UInt8,
1918
+ expires_at Nullable(DateTime64(3, 'UTC')),
1919
+ sync_sequence_id Int64,
1920
+ sync_is_deleted UInt8,
1921
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
1922
+ )
1923
+ ENGINE ReplacingMergeTree(sync_sequence_id)
1924
+ PARTITION BY toYYYYMM(created_at)
1925
+ ORDER BY (project_id, branch_id, id);
1926
+
1927
+ CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (
1928
+ tenancy_id UUID,
1929
+ mapping_name String,
1930
+ last_synced_sequence_id Int64,
1931
+ updated_at DateTime64(3, 'UTC') DEFAULT now64(3)
1932
+ )
1933
+ ENGINE ReplacingMergeTree(updated_at)
1934
+ ORDER BY (tenancy_id, mapping_name);
1935
+ `.trim()
1936
+ },
1937
+ internalDbFetchQueries: { clickhouse: `
1938
+ SELECT *
1939
+ FROM (
1940
+ SELECT
1941
+ "Tenancy"."projectId" AS "project_id",
1942
+ "Tenancy"."branchId" AS "branch_id",
1943
+ "ProjectUserRefreshToken"."id" AS "id",
1944
+ "ProjectUserRefreshToken"."projectUserId" AS "user_id",
1945
+ "ProjectUserRefreshToken"."createdAt" AS "created_at",
1946
+ "ProjectUserRefreshToken"."lastActiveAt" AS "last_used_at",
1947
+ "ProjectUserRefreshToken"."isImpersonation" AS "is_impersonation",
1948
+ "ProjectUserRefreshToken"."expiresAt" AS "expires_at",
1949
+ "ProjectUserRefreshToken"."sequenceId" AS "sync_sequence_id",
1950
+ "ProjectUserRefreshToken"."tenancyId" AS "tenancyId",
1951
+ false AS "sync_is_deleted"
1952
+ FROM "ProjectUserRefreshToken"
1953
+ JOIN "Tenancy" ON "Tenancy"."id" = "ProjectUserRefreshToken"."tenancyId"
1954
+ WHERE "ProjectUserRefreshToken"."tenancyId" = $1::uuid
1955
+
1956
+ UNION ALL
1957
+
1958
+ SELECT
1959
+ "Tenancy"."projectId" AS "project_id",
1960
+ "Tenancy"."branchId" AS "branch_id",
1961
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
1962
+ ("DeletedRow"."data"->>'projectUserId')::uuid AS "user_id",
1963
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
1964
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "last_used_at",
1965
+ false AS "is_impersonation",
1966
+ NULL::timestamp without time zone AS "expires_at",
1967
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
1968
+ "DeletedRow"."tenancyId" AS "tenancyId",
1969
+ true AS "sync_is_deleted"
1970
+ FROM "DeletedRow"
1971
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
1972
+ WHERE
1973
+ "DeletedRow"."tenancyId" = $1::uuid
1974
+ AND "DeletedRow"."tableName" = 'ProjectUserRefreshToken'
1975
+ ) AS "_src"
1976
+ WHERE "sync_sequence_id" IS NOT NULL
1977
+ AND "sync_sequence_id" > $2::bigint
1978
+ ORDER BY "sync_sequence_id" ASC
1979
+ LIMIT 1000
1980
+ `.trim() },
1981
+ internalDbFetchQuery: `
1982
+ SELECT *
1983
+ FROM (
1984
+ SELECT
1985
+ "ProjectUserRefreshToken"."id" AS "id",
1986
+ "ProjectUserRefreshToken"."projectUserId" AS "user_id",
1987
+ "ProjectUserRefreshToken"."createdAt" AS "created_at",
1988
+ "ProjectUserRefreshToken"."lastActiveAt" AS "last_used_at",
1989
+ "ProjectUserRefreshToken"."isImpersonation" AS "is_impersonation",
1990
+ "ProjectUserRefreshToken"."expiresAt" AS "expires_at",
1991
+ "ProjectUserRefreshToken"."sequenceId" AS "sequence_id",
1992
+ "ProjectUserRefreshToken"."tenancyId",
1993
+ false AS "is_deleted"
1994
+ FROM "ProjectUserRefreshToken"
1995
+ WHERE "ProjectUserRefreshToken"."tenancyId" = $1::uuid
1996
+
1997
+ UNION ALL
1998
+
1999
+ SELECT
2000
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
2001
+ ("DeletedRow"."data"->>'projectUserId')::uuid AS "user_id",
2002
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
2003
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "last_used_at",
2004
+ false AS "is_impersonation",
2005
+ NULL::timestamp without time zone AS "expires_at",
2006
+ "DeletedRow"."sequenceId" AS "sequence_id",
2007
+ "DeletedRow"."tenancyId",
2008
+ true AS "is_deleted"
2009
+ FROM "DeletedRow"
2010
+ WHERE
2011
+ "DeletedRow"."tenancyId" = $1::uuid
2012
+ AND "DeletedRow"."tableName" = 'ProjectUserRefreshToken'
2013
+ ) AS "_src"
2014
+ WHERE "sequence_id" IS NOT NULL
2015
+ AND "sequence_id" > $2::bigint
2016
+ ORDER BY "sequence_id" ASC
2017
+ LIMIT 1000
2018
+ `.trim(),
2019
+ externalDbUpdateQueries: { postgres: `
2020
+ WITH params AS (
2021
+ SELECT
2022
+ $1::uuid AS "id",
2023
+ $2::uuid AS "user_id",
2024
+ $3::timestamp without time zone AS "created_at",
2025
+ $4::timestamp without time zone AS "last_used_at",
2026
+ $5::boolean AS "is_impersonation",
2027
+ $6::timestamp without time zone AS "expires_at",
2028
+ $7::bigint AS "sequence_id",
2029
+ $8::boolean AS "is_deleted",
2030
+ $9::text AS "mapping_name"
2031
+ ),
2032
+ deleted AS (
2033
+ DELETE FROM "refresh_tokens" rt
2034
+ USING params p
2035
+ WHERE p."is_deleted" = true AND rt."id" = p."id"
2036
+ RETURNING 1
2037
+ ),
2038
+ upserted AS (
2039
+ INSERT INTO "refresh_tokens" (
2040
+ "id",
2041
+ "user_id",
2042
+ "created_at",
2043
+ "last_used_at",
2044
+ "is_impersonation",
2045
+ "expires_at"
2046
+ )
2047
+ SELECT
2048
+ p."id",
2049
+ p."user_id",
2050
+ p."created_at",
2051
+ p."last_used_at",
2052
+ p."is_impersonation",
2053
+ p."expires_at"
2054
+ FROM params p
2055
+ WHERE p."is_deleted" = false
2056
+ ON CONFLICT ("id") DO UPDATE SET
2057
+ "user_id" = EXCLUDED."user_id",
2058
+ "created_at" = EXCLUDED."created_at",
2059
+ "last_used_at" = EXCLUDED."last_used_at",
2060
+ "is_impersonation" = EXCLUDED."is_impersonation",
2061
+ "expires_at" = EXCLUDED."expires_at"
2062
+ RETURNING 1
2063
+ )
2064
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
2065
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
2066
+ ON CONFLICT ("mapping_name") DO UPDATE SET
2067
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
2068
+ "updated_at" = now();
2069
+ `.trim() }
2070
+ },
2071
+ "connected_accounts": {
2072
+ sourceTables: { "ProjectUserOAuthAccount": "ProjectUserOAuthAccount" },
2073
+ targetTable: "connected_accounts",
2074
+ targetTableSchemas: {
2075
+ postgres: `
2076
+ CREATE TABLE IF NOT EXISTS "connected_accounts" (
2077
+ "id" uuid PRIMARY KEY NOT NULL,
2078
+ "user_id" uuid NOT NULL,
2079
+ "provider" text NOT NULL,
2080
+ "provider_account_id" text NOT NULL,
2081
+ "email" text,
2082
+ "created_at" timestamp without time zone NOT NULL
2083
+ );
2084
+ REVOKE ALL ON "connected_accounts" FROM PUBLIC;
2085
+ GRANT SELECT ON "connected_accounts" TO PUBLIC;
2086
+
2087
+ CREATE TABLE IF NOT EXISTS "_stack_sync_metadata" (
2088
+ "mapping_name" text PRIMARY KEY NOT NULL,
2089
+ "last_synced_sequence_id" bigint NOT NULL DEFAULT -1,
2090
+ "updated_at" timestamp without time zone NOT NULL DEFAULT now()
2091
+ );
2092
+ `.trim(),
2093
+ clickhouse: `
2094
+ CREATE TABLE IF NOT EXISTS analytics_internal.connected_accounts (
2095
+ project_id String,
2096
+ branch_id String,
2097
+ user_id UUID,
2098
+ provider String,
2099
+ provider_account_id String,
2100
+ created_at DateTime64(3, 'UTC'),
2101
+ sync_sequence_id Int64,
2102
+ sync_is_deleted UInt8,
2103
+ sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)
2104
+ )
2105
+ ENGINE ReplacingMergeTree(sync_sequence_id)
2106
+ PARTITION BY toYYYYMM(created_at)
2107
+ ORDER BY (project_id, branch_id, user_id, provider, provider_account_id);
2108
+
2109
+ CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (
2110
+ tenancy_id UUID,
2111
+ mapping_name String,
2112
+ last_synced_sequence_id Int64,
2113
+ updated_at DateTime64(3, 'UTC') DEFAULT now64(3)
2114
+ )
2115
+ ENGINE ReplacingMergeTree(updated_at)
2116
+ ORDER BY (tenancy_id, mapping_name);
2117
+ `.trim()
2118
+ },
2119
+ internalDbFetchQueries: { clickhouse: `
2120
+ SELECT *
2121
+ FROM (
2122
+ SELECT
2123
+ "Tenancy"."projectId" AS "project_id",
2124
+ "Tenancy"."branchId" AS "branch_id",
2125
+ "ProjectUserOAuthAccount"."projectUserId" AS "user_id",
2126
+ "ProjectUserOAuthAccount"."configOAuthProviderId" AS "provider",
2127
+ "ProjectUserOAuthAccount"."providerAccountId" AS "provider_account_id",
2128
+ "ProjectUserOAuthAccount"."createdAt" AS "created_at",
2129
+ "ProjectUserOAuthAccount"."sequenceId" AS "sync_sequence_id",
2130
+ "ProjectUserOAuthAccount"."tenancyId" AS "tenancyId",
2131
+ false AS "sync_is_deleted"
2132
+ FROM "ProjectUserOAuthAccount"
2133
+ JOIN "Tenancy" ON "Tenancy"."id" = "ProjectUserOAuthAccount"."tenancyId"
2134
+ WHERE "ProjectUserOAuthAccount"."tenancyId" = $1::uuid
2135
+ AND "ProjectUserOAuthAccount"."projectUserId" IS NOT NULL
2136
+
2137
+ UNION ALL
2138
+
2139
+ SELECT
2140
+ "Tenancy"."projectId" AS "project_id",
2141
+ "Tenancy"."branchId" AS "branch_id",
2142
+ ("DeletedRow"."data"->>'projectUserId')::uuid AS "user_id",
2143
+ "DeletedRow"."data"->>'configOAuthProviderId' AS "provider",
2144
+ "DeletedRow"."data"->>'providerAccountId' AS "provider_account_id",
2145
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
2146
+ "DeletedRow"."sequenceId" AS "sync_sequence_id",
2147
+ "DeletedRow"."tenancyId" AS "tenancyId",
2148
+ true AS "sync_is_deleted"
2149
+ FROM "DeletedRow"
2150
+ JOIN "Tenancy" ON "Tenancy"."id" = "DeletedRow"."tenancyId"
2151
+ WHERE
2152
+ "DeletedRow"."tenancyId" = $1::uuid
2153
+ AND "DeletedRow"."tableName" = 'ProjectUserOAuthAccount'
2154
+ ) AS "_src"
2155
+ WHERE "sync_sequence_id" IS NOT NULL
2156
+ AND "sync_sequence_id" > $2::bigint
2157
+ ORDER BY "sync_sequence_id" ASC
2158
+ LIMIT 1000
2159
+ `.trim() },
2160
+ internalDbFetchQuery: `
2161
+ SELECT *
2162
+ FROM (
2163
+ SELECT
2164
+ "ProjectUserOAuthAccount"."id" AS "id",
2165
+ "ProjectUserOAuthAccount"."projectUserId" AS "user_id",
2166
+ "ProjectUserOAuthAccount"."configOAuthProviderId" AS "provider",
2167
+ "ProjectUserOAuthAccount"."providerAccountId" AS "provider_account_id",
2168
+ "ProjectUserOAuthAccount"."email" AS "email",
2169
+ "ProjectUserOAuthAccount"."createdAt" AS "created_at",
2170
+ "ProjectUserOAuthAccount"."sequenceId" AS "sequence_id",
2171
+ "ProjectUserOAuthAccount"."tenancyId",
2172
+ false AS "is_deleted"
2173
+ FROM "ProjectUserOAuthAccount"
2174
+ WHERE "ProjectUserOAuthAccount"."tenancyId" = $1::uuid
2175
+ AND "ProjectUserOAuthAccount"."projectUserId" IS NOT NULL
2176
+
2177
+ UNION ALL
2178
+
2179
+ SELECT
2180
+ ("DeletedRow"."primaryKey"->>'id')::uuid AS "id",
2181
+ ("DeletedRow"."data"->>'projectUserId')::uuid AS "user_id",
2182
+ NULL::text AS "provider",
2183
+ NULL::text AS "provider_account_id",
2184
+ NULL::text AS "email",
2185
+ "DeletedRow"."deletedAt"::timestamp without time zone AS "created_at",
2186
+ "DeletedRow"."sequenceId" AS "sequence_id",
2187
+ "DeletedRow"."tenancyId",
2188
+ true AS "is_deleted"
2189
+ FROM "DeletedRow"
2190
+ WHERE
2191
+ "DeletedRow"."tenancyId" = $1::uuid
2192
+ AND "DeletedRow"."tableName" = 'ProjectUserOAuthAccount'
2193
+ ) AS "_src"
2194
+ WHERE "sequence_id" IS NOT NULL
2195
+ AND "sequence_id" > $2::bigint
2196
+ ORDER BY "sequence_id" ASC
2197
+ LIMIT 1000
2198
+ `.trim(),
2199
+ externalDbUpdateQueries: { postgres: `
2200
+ WITH params AS (
2201
+ SELECT
2202
+ $1::uuid AS "id",
2203
+ $2::uuid AS "user_id",
2204
+ $3::text AS "provider",
2205
+ $4::text AS "provider_account_id",
2206
+ $5::text AS "email",
2207
+ $6::timestamp without time zone AS "created_at",
2208
+ $7::bigint AS "sequence_id",
2209
+ $8::boolean AS "is_deleted",
2210
+ $9::text AS "mapping_name"
2211
+ ),
2212
+ deleted AS (
2213
+ DELETE FROM "connected_accounts" ca
2214
+ USING params p
2215
+ WHERE p."is_deleted" = true AND ca."id" = p."id"
2216
+ RETURNING 1
2217
+ ),
2218
+ upserted AS (
2219
+ INSERT INTO "connected_accounts" (
2220
+ "id",
2221
+ "user_id",
2222
+ "provider",
2223
+ "provider_account_id",
2224
+ "email",
2225
+ "created_at"
2226
+ )
2227
+ SELECT
2228
+ p."id",
2229
+ p."user_id",
2230
+ p."provider",
2231
+ p."provider_account_id",
2232
+ p."email",
2233
+ p."created_at"
2234
+ FROM params p
2235
+ WHERE p."is_deleted" = false
2236
+ ON CONFLICT ("id") DO UPDATE SET
2237
+ "user_id" = EXCLUDED."user_id",
2238
+ "provider" = EXCLUDED."provider",
2239
+ "provider_account_id" = EXCLUDED."provider_account_id",
2240
+ "email" = EXCLUDED."email",
2241
+ "created_at" = EXCLUDED."created_at"
2242
+ RETURNING 1
2243
+ )
2244
+ INSERT INTO "_stack_sync_metadata" ("mapping_name", "last_synced_sequence_id", "updated_at")
2245
+ SELECT p."mapping_name", p."sequence_id", now() FROM params p
2246
+ ON CONFLICT ("mapping_name") DO UPDATE SET
2247
+ "last_synced_sequence_id" = GREATEST("_stack_sync_metadata"."last_synced_sequence_id", EXCLUDED."last_synced_sequence_id"),
2248
+ "updated_at" = now();
2249
+ `.trim() }
2250
+ }
2251
+ };
2252
+
2253
+ //#endregion
2254
+ exports.DEFAULT_DB_SYNC_MAPPINGS = DEFAULT_DB_SYNC_MAPPINGS;
2255
+ //# sourceMappingURL=db-sync-mappings.js.map