@hexclave/shared 1.0.41 → 1.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1067) hide show
  1. package/dist/admin-interface-Bv8rBJo-.d.ts +379 -0
  2. package/dist/admin-interface-Bv8rBJo-.d.ts.map +1 -0
  3. package/dist/admin-metrics-DyW8_G82.d.ts +807 -0
  4. package/dist/admin-metrics-DyW8_G82.d.ts.map +1 -0
  5. package/dist/ai/image-limits.d.ts.map +1 -1
  6. package/dist/ai/image-limits.js +6 -7
  7. package/dist/ai/image-limits.js.map +1 -1
  8. package/dist/ai/llms/llms.d.ts.map +1 -1
  9. package/dist/ai/llms/llms.js +2 -4
  10. package/dist/ai/llms/llms.js.map +1 -1
  11. package/dist/ai/unified-prompts/reminders.js +2 -4
  12. package/dist/ai/unified-prompts/reminders.js.map +1 -1
  13. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  14. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +2 -5
  15. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  16. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js +3 -6
  17. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -1
  18. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +3 -6
  19. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -1
  20. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +3 -6
  21. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -1
  22. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +3 -6
  23. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -1
  24. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +3 -6
  25. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -1
  26. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  27. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +5 -6
  28. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  29. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +1 -2
  30. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -1
  31. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +3 -6
  32. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -1
  33. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +3 -6
  34. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -1
  35. package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  36. package/dist/ai/unified-prompts/skill-site-prompt.js +2 -4
  37. package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  38. package/dist/analytics-IjkAsefy.d.ts +14 -0
  39. package/dist/analytics-IjkAsefy.d.ts.map +1 -0
  40. package/dist/apps/apps-config.d.ts.map +1 -1
  41. package/dist/apps/apps-config.js +2 -3
  42. package/dist/apps/apps-config.js.map +1 -1
  43. package/dist/apps/apps-ui.d.ts +1 -2
  44. package/dist/apps/apps-ui.d.ts.map +1 -1
  45. package/dist/apps/apps-ui.js +4 -5
  46. package/dist/apps/apps-ui.js.map +1 -1
  47. package/dist/client-interface-CGrvUtX0.d.ts +447 -0
  48. package/dist/client-interface-CGrvUtX0.d.ts.map +1 -0
  49. package/dist/config/db-sync-mappings.js +2 -3
  50. package/dist/config/db-sync-mappings.js.map +1 -1
  51. package/dist/config/format.d.ts +2 -61
  52. package/dist/config/format.js +2 -192
  53. package/dist/config/format.js.map +1 -1
  54. package/dist/config/migrate-catalogs-to-product-lines.d.ts.map +1 -1
  55. package/dist/config/migrate-catalogs-to-product-lines.js +2 -196
  56. package/dist/config/migrate-catalogs-to-product-lines.js.map +1 -1
  57. package/dist/config/schema-fuzzer.test.js +18 -172
  58. package/dist/config/schema-fuzzer.test.js.map +1 -1
  59. package/dist/config/schema.d.ts +2 -2328
  60. package/dist/config/schema.js +6 -351
  61. package/dist/config/schema.js.map +1 -1
  62. package/dist/config-authoring.d.ts +1 -1
  63. package/dist/config-authoring.d.ts.map +1 -1
  64. package/dist/config-authoring.js +2 -3
  65. package/dist/config-authoring.js.map +1 -1
  66. package/dist/config-authoring.test.js +1 -3
  67. package/dist/config-authoring.test.js.map +1 -1
  68. package/dist/config-eval.d.ts.map +1 -1
  69. package/dist/config-eval.js +4 -46
  70. package/dist/config-eval.js.map +1 -1
  71. package/dist/config-rendering.d.ts.map +1 -1
  72. package/dist/config-rendering.js +2 -48
  73. package/dist/config-rendering.js.map +1 -1
  74. package/dist/connected-accounts-D5CKe50A.d.ts +67 -0
  75. package/dist/connected-accounts-D5CKe50A.d.ts.map +1 -0
  76. package/dist/contact-channels-DW8yQxlc.d.ts +180 -0
  77. package/dist/contact-channels-DW8yQxlc.d.ts.map +1 -0
  78. package/dist/country-codes-CRWDroBE.d.ts +11 -0
  79. package/dist/country-codes-CRWDroBE.d.ts.map +1 -0
  80. package/dist/crud-CqmEW9s6.d.ts +98 -0
  81. package/dist/crud-CqmEW9s6.d.ts.map +1 -0
  82. package/dist/crud.d.ts +2 -98
  83. package/dist/crud.js +3 -71
  84. package/dist/crud.js.map +1 -1
  85. package/dist/currency-constants-Cq_q8twn.d.ts +45 -0
  86. package/dist/currency-constants-Cq_q8twn.d.ts.map +1 -0
  87. package/dist/current-user-Dvf8Ttjo.d.ts +284 -0
  88. package/dist/current-user-Dvf8Ttjo.d.ts.map +1 -0
  89. package/dist/dates-B6ne9iOR.d.ts +23 -0
  90. package/dist/dates-B6ne9iOR.d.ts.map +1 -0
  91. package/dist/email-outbox-BVqBaXpn.d.ts +1464 -0
  92. package/dist/{interface/crud/email-outbox.d.ts.map → email-outbox-BVqBaXpn.d.ts.map} +1 -1
  93. package/dist/emails-Ba4yEaCS.d.ts +40 -0
  94. package/dist/emails-Ba4yEaCS.d.ts.map +1 -0
  95. package/dist/errors-Cl-RUyed.d.ts +238 -0
  96. package/dist/errors-Cl-RUyed.d.ts.map +1 -0
  97. package/dist/esm/ai/image-limits.d.ts.map +1 -1
  98. package/dist/esm/ai/image-limits.js +5 -5
  99. package/dist/esm/ai/image-limits.js.map +1 -1
  100. package/dist/esm/ai/llms/llms.d.ts +1 -1
  101. package/dist/esm/ai/llms/llms.d.ts.map +1 -1
  102. package/dist/esm/ai/llms/llms.js +1 -2
  103. package/dist/esm/ai/llms/llms.js.map +1 -1
  104. package/dist/esm/ai/unified-prompts/reminders.js +1 -2
  105. package/dist/esm/ai/unified-prompts/reminders.js.map +1 -1
  106. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  107. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +25 -28
  108. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  109. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js +1 -2
  110. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -1
  111. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +1 -2
  112. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -1
  113. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +1 -2
  114. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -1
  115. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +1 -2
  116. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -1
  117. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +1 -2
  118. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -1
  119. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  120. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +2 -3
  121. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  122. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +1 -1
  123. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -1
  124. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +1 -2
  125. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -1
  126. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +1 -2
  127. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -1
  128. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  129. package/dist/esm/ai/unified-prompts/skill-site-prompt.js +1 -2
  130. package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  131. package/dist/esm/apps/apps-config.d.ts.map +1 -1
  132. package/dist/esm/apps/apps-config.js +1 -1
  133. package/dist/esm/apps/apps-config.js.map +1 -1
  134. package/dist/esm/apps/apps-ui.d.ts +2 -3
  135. package/dist/esm/apps/apps-ui.d.ts.map +1 -1
  136. package/dist/esm/apps/apps-ui.js +2 -3
  137. package/dist/esm/apps/apps-ui.js.map +1 -1
  138. package/dist/esm/config/db-sync-mappings.js +1 -1
  139. package/dist/esm/config/db-sync-mappings.js.map +1 -1
  140. package/dist/esm/config/format.d.ts +1 -1
  141. package/dist/esm/config/format.d.ts.map +1 -1
  142. package/dist/esm/config/format.js +1 -190
  143. package/dist/esm/config/format.js.map +1 -1
  144. package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts.map +1 -1
  145. package/dist/esm/config/migrate-catalogs-to-product-lines.js +1 -194
  146. package/dist/esm/config/migrate-catalogs-to-product-lines.js.map +1 -1
  147. package/dist/esm/config/schema-fuzzer.test.js +20 -173
  148. package/dist/esm/config/schema-fuzzer.test.js.map +1 -1
  149. package/dist/esm/config/schema.d.ts +249 -250
  150. package/dist/esm/config/schema.d.ts.map +1 -1
  151. package/dist/esm/config/schema.js +2 -347
  152. package/dist/esm/config/schema.js.map +1 -1
  153. package/dist/esm/config-authoring.d.ts +1 -1
  154. package/dist/esm/config-authoring.d.ts.map +1 -1
  155. package/dist/esm/config-authoring.js +1 -1
  156. package/dist/esm/config-authoring.js.map +1 -1
  157. package/dist/esm/config-authoring.test.js +2 -3
  158. package/dist/esm/config-authoring.test.js.map +1 -1
  159. package/dist/esm/config-eval.d.ts +1 -1
  160. package/dist/esm/config-eval.d.ts.map +1 -1
  161. package/dist/esm/config-eval.js +1 -43
  162. package/dist/esm/config-eval.js.map +1 -1
  163. package/dist/esm/config-rendering.d.ts.map +1 -1
  164. package/dist/esm/config-rendering.js +1 -46
  165. package/dist/esm/config-rendering.js.map +1 -1
  166. package/dist/esm/crud.d.ts +1 -1
  167. package/dist/esm/crud.d.ts.map +1 -1
  168. package/dist/esm/crud.js +2 -69
  169. package/dist/esm/crud.js.map +1 -1
  170. package/dist/esm/helpers/emails.js +1 -2
  171. package/dist/esm/helpers/emails.js.map +1 -1
  172. package/dist/esm/helpers/init-prompt.d.ts.map +1 -1
  173. package/dist/esm/helpers/init-prompt.js +1 -2
  174. package/dist/esm/helpers/init-prompt.js.map +1 -1
  175. package/dist/esm/helpers/password.d.ts +1 -1
  176. package/dist/esm/helpers/password.d.ts.map +1 -1
  177. package/dist/esm/helpers/password.js +1 -2
  178. package/dist/esm/helpers/password.js.map +1 -1
  179. package/dist/esm/helpers/production-mode.d.ts +1 -1
  180. package/dist/esm/helpers/production-mode.d.ts.map +1 -1
  181. package/dist/esm/helpers/production-mode.js +1 -2
  182. package/dist/esm/helpers/production-mode.js.map +1 -1
  183. package/dist/esm/helpers/support-sla.d.ts.map +1 -1
  184. package/dist/esm/helpers/support-sla.js +1 -1
  185. package/dist/esm/helpers/support-sla.js.map +1 -1
  186. package/dist/esm/helpers/support-sla.test.js +2 -3
  187. package/dist/esm/helpers/support-sla.test.js.map +1 -1
  188. package/dist/esm/helpers/vault/client-side.d.ts.map +1 -1
  189. package/dist/esm/helpers/vault/client-side.js +1 -20
  190. package/dist/esm/helpers/vault/client-side.js.map +1 -1
  191. package/dist/esm/helpers/vault/server-side.js +1 -2
  192. package/dist/esm/helpers/vault/server-side.js.map +1 -1
  193. package/dist/esm/hooks/use-async-callback.d.ts.map +1 -1
  194. package/dist/esm/hooks/use-async-callback.js +1 -2
  195. package/dist/esm/hooks/use-async-callback.js.map +1 -1
  196. package/dist/esm/hooks/use-async-external-store.d.ts +1 -1
  197. package/dist/esm/hooks/use-async-external-store.d.ts.map +1 -1
  198. package/dist/esm/hooks/use-async-external-store.js +1 -2
  199. package/dist/esm/hooks/use-async-external-store.js.map +1 -1
  200. package/dist/esm/hooks/use-hash.js +1 -2
  201. package/dist/esm/hooks/use-hash.js.map +1 -1
  202. package/dist/esm/hooks/use-hover.d.ts.map +1 -1
  203. package/dist/esm/hooks/use-hover.js +1 -2
  204. package/dist/esm/hooks/use-hover.js.map +1 -1
  205. package/dist/esm/hooks/use-strict-memo.d.ts.map +1 -1
  206. package/dist/esm/hooks/use-strict-memo.js +1 -70
  207. package/dist/esm/hooks/use-strict-memo.js.map +1 -1
  208. package/dist/esm/index.d.ts +4 -4
  209. package/dist/esm/index.js +1 -2
  210. package/dist/esm/interface/admin-interface.d.ts +19 -19
  211. package/dist/esm/interface/admin-interface.d.ts.map +1 -1
  212. package/dist/esm/interface/admin-interface.js +1 -2
  213. package/dist/esm/interface/admin-interface.js.map +1 -1
  214. package/dist/esm/interface/admin-metrics.d.ts +11 -11
  215. package/dist/esm/interface/admin-metrics.d.ts.map +1 -1
  216. package/dist/esm/interface/admin-metrics.js +1 -2
  217. package/dist/esm/interface/admin-metrics.js.map +1 -1
  218. package/dist/esm/interface/client-interface.d.ts +22 -22
  219. package/dist/esm/interface/client-interface.d.ts.map +1 -1
  220. package/dist/esm/interface/client-interface.js +31 -15
  221. package/dist/esm/interface/client-interface.js.map +1 -1
  222. package/dist/esm/interface/client-interface.test.js +84 -13
  223. package/dist/esm/interface/client-interface.test.js.map +1 -1
  224. package/dist/esm/interface/conversations.d.ts +33 -33
  225. package/dist/esm/interface/conversations.d.ts.map +1 -1
  226. package/dist/esm/interface/conversations.js +1 -2
  227. package/dist/esm/interface/conversations.js.map +1 -1
  228. package/dist/esm/interface/crud/analytics.d.ts.map +1 -1
  229. package/dist/esm/interface/crud/analytics.js +1 -1
  230. package/dist/esm/interface/crud/connected-accounts.d.ts +15 -17
  231. package/dist/esm/interface/crud/connected-accounts.d.ts.map +1 -1
  232. package/dist/esm/interface/crud/connected-accounts.js +1 -2
  233. package/dist/esm/interface/crud/connected-accounts.js.map +1 -1
  234. package/dist/esm/interface/crud/contact-channels.d.ts +24 -26
  235. package/dist/esm/interface/crud/contact-channels.d.ts.map +1 -1
  236. package/dist/esm/interface/crud/contact-channels.js +1 -2
  237. package/dist/esm/interface/crud/contact-channels.js.map +1 -1
  238. package/dist/esm/interface/crud/current-user.d.ts +20 -22
  239. package/dist/esm/interface/crud/current-user.d.ts.map +1 -1
  240. package/dist/esm/interface/crud/current-user.js +25 -29
  241. package/dist/esm/interface/crud/current-user.js.map +1 -1
  242. package/dist/esm/interface/crud/email-outbox.d.ts +32 -34
  243. package/dist/esm/interface/crud/email-outbox.d.ts.map +1 -1
  244. package/dist/esm/interface/crud/email-outbox.js +1 -2
  245. package/dist/esm/interface/crud/email-outbox.js.map +1 -1
  246. package/dist/esm/interface/crud/email-templates.d.ts +16 -18
  247. package/dist/esm/interface/crud/email-templates.d.ts.map +1 -1
  248. package/dist/esm/interface/crud/email-templates.js +1 -2
  249. package/dist/esm/interface/crud/email-templates.js.map +1 -1
  250. package/dist/esm/interface/crud/emails.d.ts +6 -8
  251. package/dist/esm/interface/crud/emails.d.ts.map +1 -1
  252. package/dist/esm/interface/crud/emails.js +1 -2
  253. package/dist/esm/interface/crud/emails.js.map +1 -1
  254. package/dist/esm/interface/crud/internal-api-keys.d.ts +16 -18
  255. package/dist/esm/interface/crud/internal-api-keys.d.ts.map +1 -1
  256. package/dist/esm/interface/crud/internal-api-keys.js +1 -2
  257. package/dist/esm/interface/crud/internal-api-keys.js.map +1 -1
  258. package/dist/esm/interface/crud/invoices.d.ts +2 -2
  259. package/dist/esm/interface/crud/invoices.d.ts.map +1 -1
  260. package/dist/esm/interface/crud/invoices.js +1 -2
  261. package/dist/esm/interface/crud/invoices.js.map +1 -1
  262. package/dist/esm/interface/crud/items.d.ts +6 -8
  263. package/dist/esm/interface/crud/items.d.ts.map +1 -1
  264. package/dist/esm/interface/crud/items.js +12 -16
  265. package/dist/esm/interface/crud/items.js.map +1 -1
  266. package/dist/esm/interface/crud/notification-preferences.d.ts +6 -8
  267. package/dist/esm/interface/crud/notification-preferences.d.ts.map +1 -1
  268. package/dist/esm/interface/crud/notification-preferences.js +8 -12
  269. package/dist/esm/interface/crud/notification-preferences.js.map +1 -1
  270. package/dist/esm/interface/crud/oauth-providers.d.ts +24 -26
  271. package/dist/esm/interface/crud/oauth-providers.d.ts.map +1 -1
  272. package/dist/esm/interface/crud/oauth-providers.js +1 -2
  273. package/dist/esm/interface/crud/oauth-providers.js.map +1 -1
  274. package/dist/esm/interface/crud/products.d.ts +21 -22
  275. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  276. package/dist/esm/interface/crud/products.js +3 -2
  277. package/dist/esm/interface/crud/products.js.map +1 -1
  278. package/dist/esm/interface/crud/project-api-keys.d.ts +5 -6
  279. package/dist/esm/interface/crud/project-api-keys.d.ts.map +1 -1
  280. package/dist/esm/interface/crud/project-api-keys.js +1 -2
  281. package/dist/esm/interface/crud/project-api-keys.js.map +1 -1
  282. package/dist/esm/interface/crud/project-permissions.d.ts +29 -31
  283. package/dist/esm/interface/crud/project-permissions.d.ts.map +1 -1
  284. package/dist/esm/interface/crud/project-permissions.js +1 -2
  285. package/dist/esm/interface/crud/project-permissions.js.map +1 -1
  286. package/dist/esm/interface/crud/projects.d.ts +71 -73
  287. package/dist/esm/interface/crud/projects.d.ts.map +1 -1
  288. package/dist/esm/interface/crud/projects.js +3 -2
  289. package/dist/esm/interface/crud/projects.js.map +1 -1
  290. package/dist/esm/interface/crud/session-replays.d.ts.map +1 -1
  291. package/dist/esm/interface/crud/session-replays.js +1 -1
  292. package/dist/esm/interface/crud/sessions.d.ts +15 -17
  293. package/dist/esm/interface/crud/sessions.d.ts.map +1 -1
  294. package/dist/esm/interface/crud/sessions.js +1 -2
  295. package/dist/esm/interface/crud/sessions.js.map +1 -1
  296. package/dist/esm/interface/crud/sign-up-rules.d.ts.map +1 -1
  297. package/dist/esm/interface/crud/sign-up-rules.js +1 -1
  298. package/dist/esm/interface/crud/svix-token.d.ts +8 -10
  299. package/dist/esm/interface/crud/svix-token.d.ts.map +1 -1
  300. package/dist/esm/interface/crud/svix-token.js +1 -2
  301. package/dist/esm/interface/crud/svix-token.js.map +1 -1
  302. package/dist/esm/interface/crud/team-invitation-details.d.ts +6 -8
  303. package/dist/esm/interface/crud/team-invitation-details.d.ts.map +1 -1
  304. package/dist/esm/interface/crud/team-invitation-details.js +1 -2
  305. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -1
  306. package/dist/esm/interface/crud/team-invitation.d.ts +7 -9
  307. package/dist/esm/interface/crud/team-invitation.d.ts.map +1 -1
  308. package/dist/esm/interface/crud/team-invitation.js +1 -2
  309. package/dist/esm/interface/crud/team-invitation.js.map +1 -1
  310. package/dist/esm/interface/crud/team-member-profiles.d.ts +26 -28
  311. package/dist/esm/interface/crud/team-member-profiles.d.ts.map +1 -1
  312. package/dist/esm/interface/crud/team-member-profiles.js +1 -2
  313. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -1
  314. package/dist/esm/interface/crud/team-memberships.d.ts +14 -16
  315. package/dist/esm/interface/crud/team-memberships.d.ts.map +1 -1
  316. package/dist/esm/interface/crud/team-memberships.js +1 -2
  317. package/dist/esm/interface/crud/team-memberships.js.map +1 -1
  318. package/dist/esm/interface/crud/team-permissions.d.ts +29 -31
  319. package/dist/esm/interface/crud/team-permissions.d.ts.map +1 -1
  320. package/dist/esm/interface/crud/team-permissions.js +1 -2
  321. package/dist/esm/interface/crud/team-permissions.js.map +1 -1
  322. package/dist/esm/interface/crud/teams.d.ts +36 -38
  323. package/dist/esm/interface/crud/teams.d.ts.map +1 -1
  324. package/dist/esm/interface/crud/teams.js +2 -4
  325. package/dist/esm/interface/crud/teams.js.map +1 -1
  326. package/dist/esm/interface/crud/transactions.d.ts +14 -16
  327. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  328. package/dist/esm/interface/crud/transactions.js +7 -13
  329. package/dist/esm/interface/crud/transactions.js.map +1 -1
  330. package/dist/esm/interface/crud/users.d.ts +11 -12
  331. package/dist/esm/interface/crud/users.d.ts.map +1 -1
  332. package/dist/esm/interface/crud/users.js +9 -5
  333. package/dist/esm/interface/crud/users.js.map +1 -1
  334. package/dist/esm/interface/handler-urls.d.ts +1 -1
  335. package/dist/esm/interface/handler-urls.d.ts.map +1 -1
  336. package/dist/esm/interface/handler-urls.js +1 -2
  337. package/dist/esm/interface/page-component-versions.d.ts +1 -1
  338. package/dist/esm/interface/page-component-versions.d.ts.map +1 -1
  339. package/dist/esm/interface/page-component-versions.js +1 -2
  340. package/dist/esm/interface/page-component-versions.js.map +1 -1
  341. package/dist/esm/interface/plan-usage.d.ts +1 -1
  342. package/dist/esm/interface/plan-usage.d.ts.map +1 -1
  343. package/dist/esm/interface/plan-usage.js +1 -2
  344. package/dist/esm/interface/plan-usage.js.map +1 -1
  345. package/dist/esm/interface/server-interface.d.ts +19 -19
  346. package/dist/esm/interface/server-interface.d.ts.map +1 -1
  347. package/dist/esm/interface/server-interface.js +1 -2
  348. package/dist/esm/interface/server-interface.js.map +1 -1
  349. package/dist/esm/interface/webhooks.d.ts +2 -2
  350. package/dist/esm/interface/webhooks.d.ts.map +1 -1
  351. package/dist/esm/interface/webhooks.js +1 -2
  352. package/dist/esm/interface/webhooks.js.map +1 -1
  353. package/dist/esm/known-errors.d.ts +2 -2
  354. package/dist/esm/known-errors.d.ts.map +1 -1
  355. package/dist/esm/known-errors.js +10 -21
  356. package/dist/esm/known-errors.js.map +1 -1
  357. package/dist/esm/payments/payment-methods.d.ts.map +1 -1
  358. package/dist/esm/payments/payment-methods.js +1 -1
  359. package/dist/esm/payments/payment-methods.js.map +1 -1
  360. package/dist/esm/payments/stripe-limits.d.ts.map +1 -1
  361. package/dist/esm/payments/stripe-limits.js +1 -1
  362. package/dist/esm/payments/stripe-limits.js.map +1 -1
  363. package/dist/esm/plans.d.ts.map +1 -1
  364. package/dist/esm/plans.js +1 -1
  365. package/dist/esm/plans.js.map +1 -1
  366. package/dist/esm/schema-fields.d.ts +14 -14
  367. package/dist/esm/schema-fields.d.ts.map +1 -1
  368. package/dist/esm/schema-fields.js +3 -64
  369. package/dist/esm/schema-fields.js.map +1 -1
  370. package/dist/esm/sessions.d.ts +6 -6
  371. package/dist/esm/sessions.d.ts.map +1 -1
  372. package/dist/esm/sessions.js +1 -2
  373. package/dist/esm/sessions.js.map +1 -1
  374. package/dist/esm/sessions.test.js +2 -3
  375. package/dist/esm/sessions.test.js.map +1 -1
  376. package/dist/esm/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  377. package/dist/esm/utils/analytics-clickmap-overlay.js +1 -1
  378. package/dist/esm/utils/api-keys.d.ts.map +1 -1
  379. package/dist/esm/utils/api-keys.js +1 -2
  380. package/dist/esm/utils/api-keys.js.map +1 -1
  381. package/dist/esm/utils/arrays.d.ts.map +1 -1
  382. package/dist/esm/utils/arrays.js +1 -470
  383. package/dist/esm/utils/arrays.js.map +1 -1
  384. package/dist/esm/utils/auth-methods.d.ts.map +1 -1
  385. package/dist/esm/utils/auth-methods.js +1 -1
  386. package/dist/esm/utils/auth-methods.js.map +1 -1
  387. package/dist/esm/utils/base64.d.ts.map +1 -1
  388. package/dist/esm/utils/base64.js +1 -10
  389. package/dist/esm/utils/base64.js.map +1 -1
  390. package/dist/esm/utils/booleans.d.ts.map +1 -1
  391. package/dist/esm/utils/booleans.js +1 -25
  392. package/dist/esm/utils/booleans.js.map +1 -1
  393. package/dist/esm/utils/browser-compat.d.ts.map +1 -1
  394. package/dist/esm/utils/browser-compat.js +1 -1
  395. package/dist/esm/utils/browser-compat.js.map +1 -1
  396. package/dist/esm/utils/bytes.d.ts.map +1 -1
  397. package/dist/esm/utils/bytes.js +3 -198
  398. package/dist/esm/utils/bytes.js.map +1 -1
  399. package/dist/esm/utils/caches.d.ts +1 -1
  400. package/dist/esm/utils/caches.d.ts.map +1 -1
  401. package/dist/esm/utils/caches.js +1 -27
  402. package/dist/esm/utils/caches.js.map +1 -1
  403. package/dist/esm/utils/cel-fields.d.ts.map +1 -1
  404. package/dist/esm/utils/cel-fields.js +1 -2
  405. package/dist/esm/utils/cel-fields.js.map +1 -1
  406. package/dist/esm/utils/cloud-hosts.d.ts.map +1 -1
  407. package/dist/esm/utils/cloud-hosts.js +1 -27
  408. package/dist/esm/utils/cloud-hosts.js.map +1 -1
  409. package/dist/esm/utils/compile-time.d.ts.map +1 -1
  410. package/dist/esm/utils/compile-time.js +1 -1
  411. package/dist/esm/utils/compile-time.js.map +1 -1
  412. package/dist/esm/utils/country-codes.d.ts.map +1 -1
  413. package/dist/esm/utils/country-codes.js +1 -16
  414. package/dist/esm/utils/country-codes.js.map +1 -1
  415. package/dist/esm/utils/crypto.d.ts.map +1 -1
  416. package/dist/esm/utils/crypto.js +3 -113
  417. package/dist/esm/utils/crypto.js.map +1 -1
  418. package/dist/esm/utils/currencies.d.ts +1 -1
  419. package/dist/esm/utils/currencies.d.ts.map +1 -1
  420. package/dist/esm/utils/currencies.js +2 -37
  421. package/dist/esm/utils/currencies.js.map +1 -1
  422. package/dist/esm/utils/currency-constants.d.ts.map +1 -1
  423. package/dist/esm/utils/currency-constants.js +1 -1
  424. package/dist/esm/utils/currency-constants.js.map +1 -1
  425. package/dist/esm/utils/dates.d.ts.map +1 -1
  426. package/dist/esm/utils/dates.js +1 -44
  427. package/dist/esm/utils/dates.js.map +1 -1
  428. package/dist/esm/utils/dev-env-state-path.d.ts.map +1 -1
  429. package/dist/esm/utils/dev-env-state-path.js +1 -2
  430. package/dist/esm/utils/dev-env-state-path.js.map +1 -1
  431. package/dist/esm/utils/dev-tool.d.ts.map +1 -1
  432. package/dist/esm/utils/dev-tool.js +1 -1
  433. package/dist/esm/utils/dom.d.ts.map +1 -1
  434. package/dist/esm/utils/dom.js +1 -1
  435. package/dist/esm/utils/dom.js.map +1 -1
  436. package/dist/esm/utils/elements-chain.d.ts.map +1 -1
  437. package/dist/esm/utils/elements-chain.js +5 -50
  438. package/dist/esm/utils/elements-chain.js.map +1 -1
  439. package/dist/esm/utils/env.d.ts.map +1 -1
  440. package/dist/esm/utils/env.js +1 -2
  441. package/dist/esm/utils/env.js.map +1 -1
  442. package/dist/esm/utils/env.test.js +2 -3
  443. package/dist/esm/utils/env.test.js.map +1 -1
  444. package/dist/esm/utils/errors.d.ts +1 -1
  445. package/dist/esm/utils/errors.d.ts.map +1 -1
  446. package/dist/esm/utils/errors.js +1 -2
  447. package/dist/esm/utils/errors.js.map +1 -1
  448. package/dist/esm/utils/esbuild.d.ts +1 -1
  449. package/dist/esm/utils/esbuild.d.ts.map +1 -1
  450. package/dist/esm/utils/esbuild.js +2 -3
  451. package/dist/esm/utils/esbuild.js.map +1 -1
  452. package/dist/esm/utils/featurebase.d.ts.map +1 -1
  453. package/dist/esm/utils/featurebase.js +1 -2
  454. package/dist/esm/utils/featurebase.js.map +1 -1
  455. package/dist/esm/utils/fs.d.ts.map +1 -1
  456. package/dist/esm/utils/fs.js +1 -2
  457. package/dist/esm/utils/fs.js.map +1 -1
  458. package/dist/esm/utils/functions.d.ts.map +1 -1
  459. package/dist/esm/utils/functions.js +1 -24
  460. package/dist/esm/utils/functions.js.map +1 -1
  461. package/dist/esm/utils/geo.d.ts.map +1 -1
  462. package/dist/esm/utils/geo.js +1 -2
  463. package/dist/esm/utils/geo.js.map +1 -1
  464. package/dist/esm/utils/globals.d.ts.map +1 -1
  465. package/dist/esm/utils/globals.js +1 -1
  466. package/dist/esm/utils/globals.js.map +1 -1
  467. package/dist/esm/utils/hashes.d.ts.map +1 -1
  468. package/dist/esm/utils/hashes.js +1 -2
  469. package/dist/esm/utils/hashes.js.map +1 -1
  470. package/dist/esm/utils/html.d.ts.map +1 -1
  471. package/dist/esm/utils/html.js +1 -19
  472. package/dist/esm/utils/html.js.map +1 -1
  473. package/dist/esm/utils/http.d.ts.map +1 -1
  474. package/dist/esm/utils/http.js +1 -19
  475. package/dist/esm/utils/http.js.map +1 -1
  476. package/dist/esm/utils/ips.d.ts.map +1 -1
  477. package/dist/esm/utils/ips.js +1 -25
  478. package/dist/esm/utils/ips.js.map +1 -1
  479. package/dist/esm/utils/json.d.ts +1 -1
  480. package/dist/esm/utils/json.d.ts.map +1 -1
  481. package/dist/esm/utils/json.js +1 -155
  482. package/dist/esm/utils/json.js.map +1 -1
  483. package/dist/esm/utils/jsx-editable-transpiler.d.ts.map +1 -1
  484. package/dist/esm/utils/jsx-editable-transpiler.js +1 -2
  485. package/dist/esm/utils/jsx-editable-transpiler.js.map +1 -1
  486. package/dist/esm/utils/jsx-editable-transpiler.test.js +2 -3
  487. package/dist/esm/utils/jsx-editable-transpiler.test.js.map +1 -1
  488. package/dist/esm/utils/jwt.d.ts.map +1 -1
  489. package/dist/esm/utils/jwt.js +1 -2
  490. package/dist/esm/utils/jwt.js.map +1 -1
  491. package/dist/esm/utils/locks.d.ts.map +1 -1
  492. package/dist/esm/utils/locks.js +1 -2
  493. package/dist/esm/utils/locks.js.map +1 -1
  494. package/dist/esm/utils/maps.d.ts.map +1 -1
  495. package/dist/esm/utils/maps.js +1 -111
  496. package/dist/esm/utils/maps.js.map +1 -1
  497. package/dist/esm/utils/math.d.ts.map +1 -1
  498. package/dist/esm/utils/math.js +1 -11
  499. package/dist/esm/utils/math.js.map +1 -1
  500. package/dist/esm/utils/monkey-patch.d.ts.map +1 -1
  501. package/dist/esm/utils/monkey-patch.js +2 -3
  502. package/dist/esm/utils/monkey-patch.js.map +1 -1
  503. package/dist/esm/utils/node-http.js +1 -2
  504. package/dist/esm/utils/node-http.js.map +1 -1
  505. package/dist/esm/utils/numbers.d.ts.map +1 -1
  506. package/dist/esm/utils/numbers.js +1 -45
  507. package/dist/esm/utils/numbers.js.map +1 -1
  508. package/dist/esm/utils/oauth.d.ts.map +1 -1
  509. package/dist/esm/utils/oauth.js +1 -1
  510. package/dist/esm/utils/oauth.js.map +1 -1
  511. package/dist/esm/utils/objects.d.ts.map +1 -1
  512. package/dist/esm/utils/objects.js +1 -622
  513. package/dist/esm/utils/objects.js.map +1 -1
  514. package/dist/esm/utils/paginated-lists.d.ts.map +1 -1
  515. package/dist/esm/utils/paginated-lists.js +1 -2
  516. package/dist/esm/utils/paginated-lists.js.map +1 -1
  517. package/dist/esm/utils/paginated-lists.test.js +2 -3
  518. package/dist/esm/utils/paginated-lists.test.js.map +1 -1
  519. package/dist/esm/utils/passkey.d.ts +1 -1
  520. package/dist/esm/utils/passkey.js +1 -1
  521. package/dist/esm/utils/promises.d.ts +1 -1
  522. package/dist/esm/utils/promises.d.ts.map +1 -1
  523. package/dist/esm/utils/promises.js +1 -160
  524. package/dist/esm/utils/promises.js.map +1 -1
  525. package/dist/esm/utils/proxies.d.ts.map +1 -1
  526. package/dist/esm/utils/proxies.js +1 -37
  527. package/dist/esm/utils/proxies.js.map +1 -1
  528. package/dist/esm/utils/react.d.ts.map +1 -1
  529. package/dist/esm/utils/react.js +1 -41
  530. package/dist/esm/utils/react.js.map +1 -1
  531. package/dist/esm/utils/redirect-urls.d.ts.map +1 -1
  532. package/dist/esm/utils/redirect-urls.js +2 -92
  533. package/dist/esm/utils/redirect-urls.js.map +1 -1
  534. package/dist/esm/utils/regex.js +1 -1
  535. package/dist/esm/utils/regex.js.map +1 -1
  536. package/dist/esm/utils/results.d.ts.map +1 -1
  537. package/dist/esm/utils/results.js +1 -213
  538. package/dist/esm/utils/results.js.map +1 -1
  539. package/dist/esm/utils/sentry.js +1 -1
  540. package/dist/esm/utils/sentry.js.map +1 -1
  541. package/dist/esm/utils/stores.d.ts +3 -3
  542. package/dist/esm/utils/stores.d.ts.map +1 -1
  543. package/dist/esm/utils/stores.js +1 -2
  544. package/dist/esm/utils/stores.js.map +1 -1
  545. package/dist/esm/utils/strings.d.ts.map +1 -1
  546. package/dist/esm/utils/strings.js +1 -251
  547. package/dist/esm/utils/strings.js.map +1 -1
  548. package/dist/esm/utils/strings.nicify.test.js +2 -3
  549. package/dist/esm/utils/strings.nicify.test.js.map +1 -1
  550. package/dist/esm/utils/telemetry.d.ts.map +1 -1
  551. package/dist/esm/utils/telemetry.js +1 -2
  552. package/dist/esm/utils/telemetry.js.map +1 -1
  553. package/dist/esm/utils/turnstile-browser.d.ts +1 -1
  554. package/dist/esm/utils/turnstile-browser.d.ts.map +1 -1
  555. package/dist/esm/utils/turnstile-browser.js +1 -2
  556. package/dist/esm/utils/turnstile-browser.js.map +1 -1
  557. package/dist/esm/utils/turnstile-flow.d.ts +1 -1
  558. package/dist/esm/utils/turnstile-flow.d.ts.map +1 -1
  559. package/dist/esm/utils/turnstile-flow.js +1 -2
  560. package/dist/esm/utils/turnstile-flow.js.map +1 -1
  561. package/dist/esm/utils/turnstile-flow.test.js +2 -3
  562. package/dist/esm/utils/turnstile-flow.test.js.map +1 -1
  563. package/dist/esm/utils/turnstile.d.ts.map +1 -1
  564. package/dist/esm/utils/turnstile.js +1 -1
  565. package/dist/esm/utils/turnstile.js.map +1 -1
  566. package/dist/esm/utils/typed-arrays.js +1 -2
  567. package/dist/esm/utils/typed-arrays.js.map +1 -1
  568. package/dist/esm/utils/types.d.ts +1 -1
  569. package/dist/esm/utils/types.d.ts.map +1 -1
  570. package/dist/esm/utils/types.js +1 -1
  571. package/dist/esm/utils/types.js.map +1 -1
  572. package/dist/esm/utils/unicode.d.ts.map +1 -1
  573. package/dist/esm/utils/unicode.js +1 -13
  574. package/dist/esm/utils/unicode.js.map +1 -1
  575. package/dist/esm/utils/urls.d.ts.map +1 -1
  576. package/dist/esm/utils/urls.js +1 -151
  577. package/dist/esm/utils/urls.js.map +1 -1
  578. package/dist/esm/utils/uuids.d.ts.map +1 -1
  579. package/dist/esm/utils/uuids.js +2 -26
  580. package/dist/esm/utils/uuids.js.map +1 -1
  581. package/dist/format-4JG1MGv5.d.ts +61 -0
  582. package/dist/format-4JG1MGv5.d.ts.map +1 -0
  583. package/dist/handler-urls-BHt3v8Ai.d.ts +70 -0
  584. package/dist/handler-urls-BHt3v8Ai.d.ts.map +1 -0
  585. package/dist/helpers/emails.js +2 -4
  586. package/dist/helpers/emails.js.map +1 -1
  587. package/dist/helpers/init-prompt.d.ts.map +1 -1
  588. package/dist/helpers/init-prompt.js +2 -4
  589. package/dist/helpers/init-prompt.js.map +1 -1
  590. package/dist/helpers/password.d.ts +1 -1
  591. package/dist/helpers/password.d.ts.map +1 -1
  592. package/dist/helpers/password.js +2 -4
  593. package/dist/helpers/password.js.map +1 -1
  594. package/dist/helpers/production-mode.d.ts +1 -1
  595. package/dist/helpers/production-mode.d.ts.map +1 -1
  596. package/dist/helpers/production-mode.js +2 -4
  597. package/dist/helpers/production-mode.js.map +1 -1
  598. package/dist/helpers/support-sla.d.ts.map +1 -1
  599. package/dist/helpers/support-sla.js +2 -3
  600. package/dist/helpers/support-sla.js.map +1 -1
  601. package/dist/helpers/support-sla.test.js +1 -3
  602. package/dist/helpers/support-sla.test.js.map +1 -1
  603. package/dist/helpers/vault/client-side.d.ts.map +1 -1
  604. package/dist/helpers/vault/client-side.js +2 -22
  605. package/dist/helpers/vault/client-side.js.map +1 -1
  606. package/dist/helpers/vault/server-side.js +2 -4
  607. package/dist/helpers/vault/server-side.js.map +1 -1
  608. package/dist/hooks/use-async-callback.d.ts.map +1 -1
  609. package/dist/hooks/use-async-callback.js +4 -5
  610. package/dist/hooks/use-async-callback.js.map +1 -1
  611. package/dist/hooks/use-async-external-store.d.ts +1 -1
  612. package/dist/hooks/use-async-external-store.d.ts.map +1 -1
  613. package/dist/hooks/use-async-external-store.js +2 -4
  614. package/dist/hooks/use-async-external-store.js.map +1 -1
  615. package/dist/hooks/use-hash.js +2 -4
  616. package/dist/hooks/use-hash.js.map +1 -1
  617. package/dist/hooks/use-hover.d.ts.map +1 -1
  618. package/dist/hooks/use-hover.js +2 -4
  619. package/dist/hooks/use-hover.js.map +1 -1
  620. package/dist/hooks/use-strict-memo.d.ts.map +1 -1
  621. package/dist/hooks/use-strict-memo.js +2 -72
  622. package/dist/hooks/use-strict-memo.js.map +1 -1
  623. package/dist/index.d.ts +4 -4
  624. package/dist/index.js +27 -29
  625. package/dist/interface/admin-interface.d.ts +3 -379
  626. package/dist/interface/admin-interface.js +2 -4
  627. package/dist/interface/admin-interface.js.map +1 -1
  628. package/dist/interface/admin-metrics.d.ts +2 -807
  629. package/dist/interface/admin-metrics.js +2 -4
  630. package/dist/interface/admin-metrics.js.map +1 -1
  631. package/dist/interface/client-interface.d.ts +2 -447
  632. package/dist/interface/client-interface.js +32 -17
  633. package/dist/interface/client-interface.js.map +1 -1
  634. package/dist/interface/client-interface.test.js +83 -13
  635. package/dist/interface/client-interface.test.js.map +1 -1
  636. package/dist/interface/conversations.d.ts +33 -33
  637. package/dist/interface/conversations.d.ts.map +1 -1
  638. package/dist/interface/conversations.js +2 -4
  639. package/dist/interface/conversations.js.map +1 -1
  640. package/dist/interface/crud/analytics.d.ts +2 -14
  641. package/dist/interface/crud/connected-accounts.d.ts +2 -68
  642. package/dist/interface/crud/connected-accounts.js +2 -4
  643. package/dist/interface/crud/connected-accounts.js.map +1 -1
  644. package/dist/interface/crud/contact-channels.d.ts +2 -181
  645. package/dist/interface/crud/contact-channels.js +2 -4
  646. package/dist/interface/crud/contact-channels.js.map +1 -1
  647. package/dist/interface/crud/current-user.d.ts +2 -285
  648. package/dist/interface/crud/current-user.js +2 -4
  649. package/dist/interface/crud/current-user.js.map +1 -1
  650. package/dist/interface/crud/email-outbox.d.ts +2 -1465
  651. package/dist/interface/crud/email-outbox.js +4 -5
  652. package/dist/interface/crud/email-outbox.js.map +1 -1
  653. package/dist/interface/crud/email-templates.d.ts +15 -16
  654. package/dist/interface/crud/email-templates.d.ts.map +1 -1
  655. package/dist/interface/crud/email-templates.js +2 -4
  656. package/dist/interface/crud/email-templates.js.map +1 -1
  657. package/dist/interface/crud/emails.d.ts +2 -41
  658. package/dist/interface/crud/emails.js +4 -5
  659. package/dist/interface/crud/emails.js.map +1 -1
  660. package/dist/interface/crud/internal-api-keys.d.ts +2 -140
  661. package/dist/interface/crud/internal-api-keys.js +2 -4
  662. package/dist/interface/crud/internal-api-keys.js.map +1 -1
  663. package/dist/interface/crud/invoices.d.ts +2 -43
  664. package/dist/interface/crud/invoices.js +2 -4
  665. package/dist/interface/crud/invoices.js.map +1 -1
  666. package/dist/interface/crud/items.d.ts +2 -30
  667. package/dist/interface/crud/items.js +2 -4
  668. package/dist/interface/crud/items.js.map +1 -1
  669. package/dist/interface/crud/notification-preferences.d.ts +2 -38
  670. package/dist/interface/crud/notification-preferences.js +2 -4
  671. package/dist/interface/crud/notification-preferences.js.map +1 -1
  672. package/dist/interface/crud/oauth-providers.d.ts +2 -186
  673. package/dist/interface/crud/oauth-providers.js +2 -4
  674. package/dist/interface/crud/oauth-providers.js.map +1 -1
  675. package/dist/interface/crud/products.d.ts +2 -182
  676. package/dist/interface/crud/products.js +4 -4
  677. package/dist/interface/crud/products.js.map +1 -1
  678. package/dist/interface/crud/project-api-keys.d.ts +2 -203
  679. package/dist/interface/crud/project-api-keys.js +2 -4
  680. package/dist/interface/crud/project-api-keys.js.map +1 -1
  681. package/dist/interface/crud/project-permissions.d.ts +2 -161
  682. package/dist/interface/crud/project-permissions.js +4 -5
  683. package/dist/interface/crud/project-permissions.js.map +1 -1
  684. package/dist/interface/crud/projects.d.ts +2 -901
  685. package/dist/interface/crud/projects.js +6 -5
  686. package/dist/interface/crud/projects.js.map +1 -1
  687. package/dist/interface/crud/session-replays.d.ts +2 -83
  688. package/dist/interface/crud/sessions.d.ts +2 -150
  689. package/dist/interface/crud/sessions.js +2 -4
  690. package/dist/interface/crud/sessions.js.map +1 -1
  691. package/dist/interface/crud/sign-up-rules.d.ts.map +1 -1
  692. package/dist/interface/crud/svix-token.d.ts +2 -31
  693. package/dist/interface/crud/svix-token.js +2 -4
  694. package/dist/interface/crud/svix-token.js.map +1 -1
  695. package/dist/interface/crud/team-invitation-details.d.ts +5 -6
  696. package/dist/interface/crud/team-invitation-details.d.ts.map +1 -1
  697. package/dist/interface/crud/team-invitation-details.js +4 -5
  698. package/dist/interface/crud/team-invitation-details.js.map +1 -1
  699. package/dist/interface/crud/team-invitation.d.ts +2 -54
  700. package/dist/interface/crud/team-invitation.js +4 -5
  701. package/dist/interface/crud/team-invitation.js.map +1 -1
  702. package/dist/interface/crud/team-member-profiles.d.ts +2 -286
  703. package/dist/interface/crud/team-member-profiles.js +4 -5
  704. package/dist/interface/crud/team-member-profiles.js.map +1 -1
  705. package/dist/interface/crud/team-memberships.d.ts +2 -75
  706. package/dist/interface/crud/team-memberships.js +2 -4
  707. package/dist/interface/crud/team-memberships.js.map +1 -1
  708. package/dist/interface/crud/team-permissions.d.ts +2 -169
  709. package/dist/interface/crud/team-permissions.js +4 -5
  710. package/dist/interface/crud/team-permissions.js.map +1 -1
  711. package/dist/interface/crud/teams.d.ts +2 -299
  712. package/dist/interface/crud/teams.js +5 -7
  713. package/dist/interface/crud/teams.js.map +1 -1
  714. package/dist/interface/crud/transactions.d.ts +2 -183
  715. package/dist/interface/crud/transactions.js +2 -4
  716. package/dist/interface/crud/transactions.js.map +1 -1
  717. package/dist/interface/crud/users.d.ts +2 -653
  718. package/dist/interface/crud/users.js +12 -8
  719. package/dist/interface/crud/users.js.map +1 -1
  720. package/dist/interface/handler-urls.d.ts +2 -51
  721. package/dist/interface/handler-urls.js +12 -14
  722. package/dist/interface/page-component-versions.d.ts +2 -25
  723. package/dist/interface/page-component-versions.js +2 -4
  724. package/dist/interface/page-component-versions.js.map +1 -1
  725. package/dist/interface/plan-usage.d.ts +2 -57
  726. package/dist/interface/plan-usage.js +2 -4
  727. package/dist/interface/plan-usage.js.map +1 -1
  728. package/dist/interface/server-interface.d.ts +2 -257
  729. package/dist/interface/server-interface.js +2 -4
  730. package/dist/interface/server-interface.js.map +1 -1
  731. package/dist/interface/webhooks.d.ts +2 -326
  732. package/dist/interface/webhooks.js +2 -4
  733. package/dist/interface/webhooks.js.map +1 -1
  734. package/dist/internal-api-keys-D8IYDodH.d.ts +139 -0
  735. package/dist/internal-api-keys-D8IYDodH.d.ts.map +1 -0
  736. package/dist/invoices-U65KzAZX.d.ts +43 -0
  737. package/dist/invoices-U65KzAZX.d.ts.map +1 -0
  738. package/dist/items-DlLSlVUD.d.ts +29 -0
  739. package/dist/items-DlLSlVUD.d.ts.map +1 -0
  740. package/dist/json-a1QIXu5z.d.ts +15 -0
  741. package/dist/json-a1QIXu5z.d.ts.map +1 -0
  742. package/dist/known-errors-Bm4a61wL.d.ts +575 -0
  743. package/dist/known-errors-Bm4a61wL.d.ts.map +1 -0
  744. package/dist/known-errors.d.ts +2 -575
  745. package/dist/known-errors.js +11 -23
  746. package/dist/known-errors.js.map +1 -1
  747. package/dist/notification-preferences-Bmzr_EOY.d.ts +37 -0
  748. package/dist/notification-preferences-Bmzr_EOY.d.ts.map +1 -0
  749. package/dist/oauth-providers-BMkKSSlA.d.ts +185 -0
  750. package/dist/oauth-providers-BMkKSSlA.d.ts.map +1 -0
  751. package/dist/objects-DkCkeBWE.d.ts +59 -0
  752. package/dist/objects-DkCkeBWE.d.ts.map +1 -0
  753. package/dist/passkey-CKg87UH-.d.ts +2 -0
  754. package/dist/payments/payment-methods.d.ts.map +1 -1
  755. package/dist/payments/payment-methods.js +2 -3
  756. package/dist/payments/payment-methods.js.map +1 -1
  757. package/dist/payments/stripe-limits.d.ts.map +1 -1
  758. package/dist/payments/stripe-limits.js +2 -3
  759. package/dist/payments/stripe-limits.js.map +1 -1
  760. package/dist/plan-usage-DfDoj5K4.d.ts +57 -0
  761. package/dist/plan-usage-DfDoj5K4.d.ts.map +1 -0
  762. package/dist/plans.d.ts.map +1 -1
  763. package/dist/plans.js +2 -3
  764. package/dist/plans.js.map +1 -1
  765. package/dist/products-Bs74ld-v.d.ts +182 -0
  766. package/dist/products-Bs74ld-v.d.ts.map +1 -0
  767. package/dist/project-api-keys--7V5X_UW.d.ts +203 -0
  768. package/dist/project-api-keys--7V5X_UW.d.ts.map +1 -0
  769. package/dist/project-permissions-kdi675F-.d.ts +160 -0
  770. package/dist/project-permissions-kdi675F-.d.ts.map +1 -0
  771. package/dist/projects-CgFGB3nO.d.ts +900 -0
  772. package/dist/projects-CgFGB3nO.d.ts.map +1 -0
  773. package/dist/results-DP3BzoL6.d.ts +70 -0
  774. package/dist/results-DP3BzoL6.d.ts.map +1 -0
  775. package/dist/{chunk-BE-pF4vm.js → rolldown-runtime-D6vf50IK.js} +12 -18
  776. package/dist/schema-01nWxmb4.d.ts +2328 -0
  777. package/dist/schema-01nWxmb4.d.ts.map +1 -0
  778. package/dist/schema-fields-DqGQ4kF7.d.ts +517 -0
  779. package/dist/schema-fields-DqGQ4kF7.d.ts.map +1 -0
  780. package/dist/schema-fields.d.ts +3 -518
  781. package/dist/schema-fields.js +21 -82
  782. package/dist/schema-fields.js.map +1 -1
  783. package/dist/server-interface-BUPG1kor.d.ts +257 -0
  784. package/dist/server-interface-BUPG1kor.d.ts.map +1 -0
  785. package/dist/session-replays-CXqhDpZq.d.ts +83 -0
  786. package/dist/session-replays-CXqhDpZq.d.ts.map +1 -0
  787. package/dist/sessions-B7Ko2Ldr.d.ts +149 -0
  788. package/dist/sessions-B7Ko2Ldr.d.ts.map +1 -0
  789. package/dist/sessions-d8qtvBUB.d.ts +175 -0
  790. package/dist/sessions-d8qtvBUB.d.ts.map +1 -0
  791. package/dist/sessions.d.ts +2 -175
  792. package/dist/sessions.js +4 -5
  793. package/dist/sessions.js.map +1 -1
  794. package/dist/sessions.test.js +1 -3
  795. package/dist/sessions.test.js.map +1 -1
  796. package/dist/strings-DWgkUybS.d.ts +76 -0
  797. package/dist/strings-DWgkUybS.d.ts.map +1 -0
  798. package/dist/svix-token-BsMrLGvy.d.ts +30 -0
  799. package/dist/svix-token-BsMrLGvy.d.ts.map +1 -0
  800. package/dist/team-invitation-Cyqt9oWw.d.ts +53 -0
  801. package/dist/team-invitation-Cyqt9oWw.d.ts.map +1 -0
  802. package/dist/team-member-profiles-uTluO8XI.d.ts +285 -0
  803. package/dist/team-member-profiles-uTluO8XI.d.ts.map +1 -0
  804. package/dist/team-memberships-DZHk2A5b.d.ts +74 -0
  805. package/dist/team-memberships-DZHk2A5b.d.ts.map +1 -0
  806. package/dist/team-permissions-DqOpaOWh.d.ts +168 -0
  807. package/dist/team-permissions-DqOpaOWh.d.ts.map +1 -0
  808. package/dist/teams-CQMcBnjM.d.ts +298 -0
  809. package/dist/teams-CQMcBnjM.d.ts.map +1 -0
  810. package/dist/transactions-DhnbvGH5.d.ts +182 -0
  811. package/dist/transactions-DhnbvGH5.d.ts.map +1 -0
  812. package/dist/types-DfTcxNtM.d.ts +77 -0
  813. package/dist/types-DfTcxNtM.d.ts.map +1 -0
  814. package/dist/users-CmBBuF00.d.ts +653 -0
  815. package/dist/users-CmBBuF00.d.ts.map +1 -0
  816. package/dist/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  817. package/dist/utils/analytics-clickmap-overlay.js +2 -3
  818. package/dist/utils/analytics-clickmap-overlay.js.map +1 -1
  819. package/dist/utils/api-keys.d.ts.map +1 -1
  820. package/dist/utils/api-keys.js +4 -5
  821. package/dist/utils/api-keys.js.map +1 -1
  822. package/dist/utils/arrays.d.ts.map +1 -1
  823. package/dist/utils/arrays.js +2 -472
  824. package/dist/utils/arrays.js.map +1 -1
  825. package/dist/utils/auth-methods.d.ts.map +1 -1
  826. package/dist/utils/auth-methods.js +2 -3
  827. package/dist/utils/auth-methods.js.map +1 -1
  828. package/dist/utils/base64.d.ts.map +1 -1
  829. package/dist/utils/base64.js +2 -12
  830. package/dist/utils/base64.js.map +1 -1
  831. package/dist/utils/booleans.d.ts.map +1 -1
  832. package/dist/utils/booleans.js +2 -27
  833. package/dist/utils/booleans.js.map +1 -1
  834. package/dist/utils/browser-compat.d.ts.map +1 -1
  835. package/dist/utils/browser-compat.js +2 -3
  836. package/dist/utils/browser-compat.js.map +1 -1
  837. package/dist/utils/bytes.d.ts.map +1 -1
  838. package/dist/utils/bytes.js +4 -200
  839. package/dist/utils/bytes.js.map +1 -1
  840. package/dist/utils/caches.d.ts.map +1 -1
  841. package/dist/utils/caches.js +2 -29
  842. package/dist/utils/caches.js.map +1 -1
  843. package/dist/utils/cel-fields.d.ts.map +1 -1
  844. package/dist/utils/cel-fields.js +2 -4
  845. package/dist/utils/cel-fields.js.map +1 -1
  846. package/dist/utils/cloud-hosts.d.ts.map +1 -1
  847. package/dist/utils/cloud-hosts.js +2 -29
  848. package/dist/utils/cloud-hosts.js.map +1 -1
  849. package/dist/utils/compile-time.d.ts.map +1 -1
  850. package/dist/utils/compile-time.js +2 -3
  851. package/dist/utils/compile-time.js.map +1 -1
  852. package/dist/utils/country-codes.d.ts +2 -11
  853. package/dist/utils/country-codes.js +2 -18
  854. package/dist/utils/country-codes.js.map +1 -1
  855. package/dist/utils/crypto.d.ts.map +1 -1
  856. package/dist/utils/crypto.js +4 -115
  857. package/dist/utils/crypto.js.map +1 -1
  858. package/dist/utils/currencies.d.ts +1 -1
  859. package/dist/utils/currencies.d.ts.map +1 -1
  860. package/dist/utils/currencies.js +3 -39
  861. package/dist/utils/currencies.js.map +1 -1
  862. package/dist/utils/currency-constants.d.ts +2 -45
  863. package/dist/utils/currency-constants.js +2 -3
  864. package/dist/utils/currency-constants.js.map +1 -1
  865. package/dist/utils/dates.d.ts +2 -23
  866. package/dist/utils/dates.js +2 -46
  867. package/dist/utils/dates.js.map +1 -1
  868. package/dist/utils/dev-env-state-path.d.ts.map +1 -1
  869. package/dist/utils/dev-env-state-path.js +2 -4
  870. package/dist/utils/dev-env-state-path.js.map +1 -1
  871. package/dist/utils/dev-tool.d.ts.map +1 -1
  872. package/dist/utils/dev-tool.js +2 -3
  873. package/dist/utils/dev-tool.js.map +1 -1
  874. package/dist/utils/dom.d.ts.map +1 -1
  875. package/dist/utils/dom.js +2 -3
  876. package/dist/utils/dom.js.map +1 -1
  877. package/dist/utils/elements-chain.d.ts.map +1 -1
  878. package/dist/utils/elements-chain.js +6 -52
  879. package/dist/utils/elements-chain.js.map +1 -1
  880. package/dist/utils/env.d.ts.map +1 -1
  881. package/dist/utils/env.js +2 -4
  882. package/dist/utils/env.js.map +1 -1
  883. package/dist/utils/env.test.js +1 -3
  884. package/dist/utils/env.test.js.map +1 -1
  885. package/dist/utils/errors.d.ts +2 -238
  886. package/dist/utils/errors.js +2 -4
  887. package/dist/utils/errors.js.map +1 -1
  888. package/dist/utils/esbuild.d.ts +1 -1
  889. package/dist/utils/esbuild.d.ts.map +1 -1
  890. package/dist/utils/esbuild.js +5 -6
  891. package/dist/utils/esbuild.js.map +1 -1
  892. package/dist/utils/featurebase.d.ts.map +1 -1
  893. package/dist/utils/featurebase.js +2 -4
  894. package/dist/utils/featurebase.js.map +1 -1
  895. package/dist/utils/fs.d.ts.map +1 -1
  896. package/dist/utils/fs.js +5 -6
  897. package/dist/utils/fs.js.map +1 -1
  898. package/dist/utils/functions.d.ts.map +1 -1
  899. package/dist/utils/functions.js +2 -26
  900. package/dist/utils/functions.js.map +1 -1
  901. package/dist/utils/geo.d.ts.map +1 -1
  902. package/dist/utils/geo.js +2 -4
  903. package/dist/utils/geo.js.map +1 -1
  904. package/dist/utils/globals.d.ts.map +1 -1
  905. package/dist/utils/globals.js +2 -3
  906. package/dist/utils/globals.js.map +1 -1
  907. package/dist/utils/hashes.d.ts.map +1 -1
  908. package/dist/utils/hashes.js +4 -5
  909. package/dist/utils/hashes.js.map +1 -1
  910. package/dist/utils/html.d.ts.map +1 -1
  911. package/dist/utils/html.js +2 -21
  912. package/dist/utils/html.js.map +1 -1
  913. package/dist/utils/http.d.ts.map +1 -1
  914. package/dist/utils/http.js +2 -21
  915. package/dist/utils/http.js.map +1 -1
  916. package/dist/utils/ips.d.ts.map +1 -1
  917. package/dist/utils/ips.js +4 -28
  918. package/dist/utils/ips.js.map +1 -1
  919. package/dist/utils/json.d.ts +2 -15
  920. package/dist/utils/json.js +2 -157
  921. package/dist/utils/json.js.map +1 -1
  922. package/dist/utils/jsx-editable-transpiler.d.ts.map +1 -1
  923. package/dist/utils/jsx-editable-transpiler.js +7 -8
  924. package/dist/utils/jsx-editable-transpiler.js.map +1 -1
  925. package/dist/utils/jsx-editable-transpiler.test.js +1 -3
  926. package/dist/utils/jsx-editable-transpiler.test.js.map +1 -1
  927. package/dist/utils/jwt.d.ts.map +1 -1
  928. package/dist/utils/jwt.js +6 -7
  929. package/dist/utils/jwt.js.map +1 -1
  930. package/dist/utils/locks.d.ts.map +1 -1
  931. package/dist/utils/locks.js +2 -4
  932. package/dist/utils/locks.js.map +1 -1
  933. package/dist/utils/maps.d.ts.map +1 -1
  934. package/dist/utils/maps.js +2 -113
  935. package/dist/utils/maps.js.map +1 -1
  936. package/dist/utils/math.d.ts.map +1 -1
  937. package/dist/utils/math.js +2 -13
  938. package/dist/utils/math.js.map +1 -1
  939. package/dist/utils/monkey-patch.d.ts.map +1 -1
  940. package/dist/utils/monkey-patch.js +3 -5
  941. package/dist/utils/monkey-patch.js.map +1 -1
  942. package/dist/utils/node-http.js +2 -4
  943. package/dist/utils/node-http.js.map +1 -1
  944. package/dist/utils/numbers.d.ts.map +1 -1
  945. package/dist/utils/numbers.js +2 -47
  946. package/dist/utils/numbers.js.map +1 -1
  947. package/dist/utils/oauth.d.ts.map +1 -1
  948. package/dist/utils/oauth.js +2 -3
  949. package/dist/utils/oauth.js.map +1 -1
  950. package/dist/utils/objects.d.ts +2 -59
  951. package/dist/utils/objects.js +2 -624
  952. package/dist/utils/objects.js.map +1 -1
  953. package/dist/utils/paginated-lists.d.ts.map +1 -1
  954. package/dist/utils/paginated-lists.js +2 -4
  955. package/dist/utils/paginated-lists.js.map +1 -1
  956. package/dist/utils/paginated-lists.test.js +1 -3
  957. package/dist/utils/paginated-lists.test.js.map +1 -1
  958. package/dist/utils/passkey.d.ts +2 -2
  959. package/dist/utils/promises.d.ts +1 -1
  960. package/dist/utils/promises.d.ts.map +1 -1
  961. package/dist/utils/promises.js +2 -162
  962. package/dist/utils/promises.js.map +1 -1
  963. package/dist/utils/proxies.d.ts.map +1 -1
  964. package/dist/utils/proxies.js +2 -39
  965. package/dist/utils/proxies.js.map +1 -1
  966. package/dist/utils/react.d.ts.map +1 -1
  967. package/dist/utils/react.js +4 -44
  968. package/dist/utils/react.js.map +1 -1
  969. package/dist/utils/redirect-urls.d.ts.map +1 -1
  970. package/dist/utils/redirect-urls.js +3 -94
  971. package/dist/utils/redirect-urls.js.map +1 -1
  972. package/dist/utils/regex.js +2 -3
  973. package/dist/utils/regex.js.map +1 -1
  974. package/dist/utils/results.d.ts +2 -70
  975. package/dist/utils/results.js +2 -215
  976. package/dist/utils/results.js.map +1 -1
  977. package/dist/utils/sentry.js +2 -3
  978. package/dist/utils/sentry.js.map +1 -1
  979. package/dist/utils/stores.d.ts +1 -1
  980. package/dist/utils/stores.d.ts.map +1 -1
  981. package/dist/utils/stores.js +2 -4
  982. package/dist/utils/stores.js.map +1 -1
  983. package/dist/utils/strings.d.ts +2 -76
  984. package/dist/utils/strings.js +2 -253
  985. package/dist/utils/strings.js.map +1 -1
  986. package/dist/utils/strings.nicify.test.js +1 -3
  987. package/dist/utils/strings.nicify.test.js.map +1 -1
  988. package/dist/utils/telemetry.d.ts.map +1 -1
  989. package/dist/utils/telemetry.js +2 -4
  990. package/dist/utils/telemetry.js.map +1 -1
  991. package/dist/utils/turnstile-browser.d.ts.map +1 -1
  992. package/dist/utils/turnstile-browser.js +2 -4
  993. package/dist/utils/turnstile-browser.js.map +1 -1
  994. package/dist/utils/turnstile-flow.d.ts.map +1 -1
  995. package/dist/utils/turnstile-flow.js +2 -4
  996. package/dist/utils/turnstile-flow.js.map +1 -1
  997. package/dist/utils/turnstile-flow.test.js +1 -3
  998. package/dist/utils/turnstile-flow.test.js.map +1 -1
  999. package/dist/utils/turnstile.d.ts.map +1 -1
  1000. package/dist/utils/turnstile.js +2 -3
  1001. package/dist/utils/turnstile.js.map +1 -1
  1002. package/dist/utils/typed-arrays.js +2 -4
  1003. package/dist/utils/typed-arrays.js.map +1 -1
  1004. package/dist/utils/types.d.ts +2 -77
  1005. package/dist/utils/types.js +2 -3
  1006. package/dist/utils/types.js.map +1 -1
  1007. package/dist/utils/unicode.d.ts.map +1 -1
  1008. package/dist/utils/unicode.js +2 -15
  1009. package/dist/utils/unicode.js.map +1 -1
  1010. package/dist/utils/urls.d.ts.map +1 -1
  1011. package/dist/utils/urls.js +2 -153
  1012. package/dist/utils/urls.js.map +1 -1
  1013. package/dist/utils/uuids.d.ts.map +1 -1
  1014. package/dist/utils/uuids.js +3 -28
  1015. package/dist/utils/uuids.js.map +1 -1
  1016. package/dist/webhooks-ByXrdSOx.d.ts +326 -0
  1017. package/dist/webhooks-ByXrdSOx.d.ts.map +1 -0
  1018. package/package.json +2 -8
  1019. package/src/interface/client-interface.test.ts +77 -12
  1020. package/src/interface/client-interface.ts +9 -9
  1021. package/dist/config/format.d.ts.map +0 -1
  1022. package/dist/config/schema.d.ts.map +0 -1
  1023. package/dist/crud.d.ts.map +0 -1
  1024. package/dist/interface/admin-interface.d.ts.map +0 -1
  1025. package/dist/interface/admin-metrics.d.ts.map +0 -1
  1026. package/dist/interface/client-interface.d.ts.map +0 -1
  1027. package/dist/interface/crud/analytics.d.ts.map +0 -1
  1028. package/dist/interface/crud/connected-accounts.d.ts.map +0 -1
  1029. package/dist/interface/crud/contact-channels.d.ts.map +0 -1
  1030. package/dist/interface/crud/current-user.d.ts.map +0 -1
  1031. package/dist/interface/crud/emails.d.ts.map +0 -1
  1032. package/dist/interface/crud/internal-api-keys.d.ts.map +0 -1
  1033. package/dist/interface/crud/invoices.d.ts.map +0 -1
  1034. package/dist/interface/crud/items.d.ts.map +0 -1
  1035. package/dist/interface/crud/notification-preferences.d.ts.map +0 -1
  1036. package/dist/interface/crud/oauth-providers.d.ts.map +0 -1
  1037. package/dist/interface/crud/products.d.ts.map +0 -1
  1038. package/dist/interface/crud/project-api-keys.d.ts.map +0 -1
  1039. package/dist/interface/crud/project-permissions.d.ts.map +0 -1
  1040. package/dist/interface/crud/projects.d.ts.map +0 -1
  1041. package/dist/interface/crud/session-replays.d.ts.map +0 -1
  1042. package/dist/interface/crud/sessions.d.ts.map +0 -1
  1043. package/dist/interface/crud/svix-token.d.ts.map +0 -1
  1044. package/dist/interface/crud/team-invitation.d.ts.map +0 -1
  1045. package/dist/interface/crud/team-member-profiles.d.ts.map +0 -1
  1046. package/dist/interface/crud/team-memberships.d.ts.map +0 -1
  1047. package/dist/interface/crud/team-permissions.d.ts.map +0 -1
  1048. package/dist/interface/crud/teams.d.ts.map +0 -1
  1049. package/dist/interface/crud/transactions.d.ts.map +0 -1
  1050. package/dist/interface/crud/users.d.ts.map +0 -1
  1051. package/dist/interface/handler-urls.d.ts.map +0 -1
  1052. package/dist/interface/page-component-versions.d.ts.map +0 -1
  1053. package/dist/interface/plan-usage.d.ts.map +0 -1
  1054. package/dist/interface/server-interface.d.ts.map +0 -1
  1055. package/dist/interface/webhooks.d.ts.map +0 -1
  1056. package/dist/known-errors.d.ts.map +0 -1
  1057. package/dist/schema-fields.d.ts.map +0 -1
  1058. package/dist/sessions.d.ts.map +0 -1
  1059. package/dist/utils/country-codes.d.ts.map +0 -1
  1060. package/dist/utils/currency-constants.d.ts.map +0 -1
  1061. package/dist/utils/dates.d.ts.map +0 -1
  1062. package/dist/utils/errors.d.ts.map +0 -1
  1063. package/dist/utils/json.d.ts.map +0 -1
  1064. package/dist/utils/objects.d.ts.map +0 -1
  1065. package/dist/utils/results.d.ts.map +0 -1
  1066. package/dist/utils/strings.d.ts.map +0 -1
  1067. package/dist/utils/types.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"db-sync-mappings.js","names":[],"sources":["../../../src/config/db-sync-mappings.ts"],"sourcesContent":["export const DEFAULT_DB_SYNC_MAPPINGS = {\n \"users\": {\n sourceTables: { \"ProjectUser\": \"ProjectUser\" },\n targetTable: \"users\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"users\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"display_name\" text,\n \"profile_image_url\" text,\n \"primary_email\" text,\n \"primary_email_verified\" boolean NOT NULL DEFAULT false,\n \"signed_up_at\" timestamp without time zone NOT NULL,\n \"client_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"client_read_only_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"server_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"is_anonymous\" boolean NOT NULL DEFAULT false\n );\n REVOKE ALL ON \"users\" FROM PUBLIC;\n GRANT SELECT ON \"users\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.users (\n project_id String,\n branch_id String,\n id UUID,\n display_name Nullable(String),\n profile_image_url Nullable(String),\n primary_email Nullable(String),\n primary_email_verified UInt8,\n signed_up_at DateTime64(3, 'UTC'),\n client_metadata String,\n client_read_only_metadata String,\n server_metadata String,\n is_anonymous UInt8,\n restricted_by_admin UInt8,\n restricted_by_admin_reason Nullable(String),\n restricted_by_admin_private_details Nullable(String),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(signed_up_at)\n ORDER BY (project_id, branch_id, id);\n\n CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (\n tenancy_id UUID,\n mapping_name String,\n last_synced_sequence_id Int64,\n updated_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(updated_at)\n ORDER BY (tenancy_id, mapping_name);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ProjectUser\".\"projectUserId\" AS \"id\",\n \"ProjectUser\".\"displayName\" AS \"display_name\",\n \"ProjectUser\".\"profileImageUrl\" AS \"profile_image_url\",\n (\n SELECT \"ContactChannel\".\"value\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"projectUserId\" = \"ProjectUser\".\"projectUserId\"\n AND \"ContactChannel\".\"tenancyId\" = \"ProjectUser\".\"tenancyId\"\n AND \"ContactChannel\".\"type\" = 'EMAIL'\n AND \"ContactChannel\".\"isPrimary\" = 'TRUE'\n LIMIT 1\n ) AS \"primary_email\",\n COALESCE(\n (\n SELECT \"ContactChannel\".\"isVerified\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"projectUserId\" = \"ProjectUser\".\"projectUserId\"\n AND \"ContactChannel\".\"tenancyId\" = \"ProjectUser\".\"tenancyId\"\n AND \"ContactChannel\".\"type\" = 'EMAIL'\n AND \"ContactChannel\".\"isPrimary\" = 'TRUE'\n LIMIT 1\n ),\n false\n ) AS \"primary_email_verified\",\n COALESCE(\"ProjectUser\".\"signedUpAt\", \"ProjectUser\".\"createdAt\") AS \"signed_up_at\",\n COALESCE(\"ProjectUser\".\"clientMetadata\", '{}'::jsonb) AS \"client_metadata\",\n COALESCE(\"ProjectUser\".\"clientReadOnlyMetadata\", '{}'::jsonb) AS \"client_read_only_metadata\",\n COALESCE(\"ProjectUser\".\"serverMetadata\", '{}'::jsonb) AS \"server_metadata\",\n \"ProjectUser\".\"isAnonymous\" AS \"is_anonymous\",\n \"ProjectUser\".\"restrictedByAdmin\" AS \"restricted_by_admin\",\n \"ProjectUser\".\"restrictedByAdminReason\" AS \"restricted_by_admin_reason\",\n \"ProjectUser\".\"restrictedByAdminPrivateDetails\" AS \"restricted_by_admin_private_details\",\n \"ProjectUser\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ProjectUser\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ProjectUser\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ProjectUser\".\"tenancyId\"\n WHERE \"ProjectUser\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n NULL::text AS \"primary_email\",\n false AS \"primary_email_verified\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"signed_up_at\",\n '{}'::jsonb AS \"client_metadata\",\n '{}'::jsonb AS \"client_read_only_metadata\",\n '{}'::jsonb AS \"server_metadata\",\n false AS \"is_anonymous\",\n false AS \"restricted_by_admin\",\n NULL::text AS \"restricted_by_admin_reason\",\n NULL::text AS \"restricted_by_admin_private_details\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUser'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ProjectUser\".\"projectUserId\" AS \"id\",\n \"ProjectUser\".\"displayName\" AS \"display_name\",\n \"ProjectUser\".\"profileImageUrl\" AS \"profile_image_url\",\n (\n SELECT \"ContactChannel\".\"value\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"projectUserId\" = \"ProjectUser\".\"projectUserId\"\n AND \"ContactChannel\".\"tenancyId\" = \"ProjectUser\".\"tenancyId\"\n AND \"ContactChannel\".\"type\" = 'EMAIL'\n AND \"ContactChannel\".\"isPrimary\" = 'TRUE'\n LIMIT 1\n ) AS \"primary_email\",\n COALESCE(\n (\n SELECT \"ContactChannel\".\"isVerified\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"projectUserId\" = \"ProjectUser\".\"projectUserId\"\n AND \"ContactChannel\".\"tenancyId\" = \"ProjectUser\".\"tenancyId\"\n AND \"ContactChannel\".\"type\" = 'EMAIL'\n AND \"ContactChannel\".\"isPrimary\" = 'TRUE'\n LIMIT 1\n ),\n false\n ) AS \"primary_email_verified\",\n COALESCE(\"ProjectUser\".\"signedUpAt\", \"ProjectUser\".\"createdAt\") AS \"signed_up_at\",\n COALESCE(\"ProjectUser\".\"clientMetadata\", '{}'::jsonb) AS \"client_metadata\",\n COALESCE(\"ProjectUser\".\"clientReadOnlyMetadata\", '{}'::jsonb) AS \"client_read_only_metadata\",\n COALESCE(\"ProjectUser\".\"serverMetadata\", '{}'::jsonb) AS \"server_metadata\",\n \"ProjectUser\".\"isAnonymous\" AS \"is_anonymous\",\n \"ProjectUser\".\"sequenceId\" AS \"sequence_id\",\n \"ProjectUser\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ProjectUser\"\n WHERE \"ProjectUser\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n NULL::text AS \"primary_email\",\n false AS \"primary_email_verified\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"signed_up_at\",\n '{}'::jsonb AS \"client_metadata\",\n '{}'::jsonb AS \"client_read_only_metadata\",\n '{}'::jsonb AS \"server_metadata\",\n false AS \"is_anonymous\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUser'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n // Last parameter = mapping_name (for metadata tracking)\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::text AS \"display_name\",\n $3::text AS \"profile_image_url\",\n $4::text AS \"primary_email\",\n $5::boolean AS \"primary_email_verified\",\n $6::timestamp without time zone AS \"signed_up_at\",\n $7::jsonb AS \"client_metadata\",\n $8::jsonb AS \"client_read_only_metadata\",\n $9::jsonb AS \"server_metadata\",\n $10::boolean AS \"is_anonymous\",\n $11::bigint AS \"sequence_id\",\n $12::boolean AS \"is_deleted\",\n $13::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"users\" u\n USING params p\n WHERE p.\"is_deleted\" = true AND u.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"users\" (\n \"id\",\n \"display_name\",\n \"profile_image_url\",\n \"primary_email\",\n \"primary_email_verified\",\n \"signed_up_at\",\n \"client_metadata\",\n \"client_read_only_metadata\",\n \"server_metadata\",\n \"is_anonymous\"\n )\n SELECT\n p.\"id\",\n p.\"display_name\",\n p.\"profile_image_url\",\n p.\"primary_email\",\n p.\"primary_email_verified\",\n p.\"signed_up_at\",\n p.\"client_metadata\",\n p.\"client_read_only_metadata\",\n p.\"server_metadata\",\n p.\"is_anonymous\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"display_name\" = EXCLUDED.\"display_name\",\n \"profile_image_url\" = EXCLUDED.\"profile_image_url\",\n \"primary_email\" = EXCLUDED.\"primary_email\",\n \"primary_email_verified\" = EXCLUDED.\"primary_email_verified\",\n \"signed_up_at\" = EXCLUDED.\"signed_up_at\",\n \"client_metadata\" = EXCLUDED.\"client_metadata\",\n \"client_read_only_metadata\" = EXCLUDED.\"client_read_only_metadata\",\n \"server_metadata\" = EXCLUDED.\"server_metadata\",\n \"is_anonymous\" = EXCLUDED.\"is_anonymous\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"contact_channels\": {\n sourceTables: { \"ContactChannel\": \"ContactChannel\" },\n targetTable: \"contact_channels\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"contact_channels\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"type\" text NOT NULL,\n \"value\" text NOT NULL,\n \"is_primary\" boolean NOT NULL DEFAULT false,\n \"is_verified\" boolean NOT NULL DEFAULT false,\n \"used_for_auth\" boolean NOT NULL DEFAULT false,\n \"created_at\" timestamp without time zone NOT NULL\n );\n REVOKE ALL ON \"contact_channels\" FROM PUBLIC;\n GRANT SELECT ON \"contact_channels\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.contact_channels (\n project_id String,\n branch_id String,\n id UUID,\n user_id UUID,\n type LowCardinality(String),\n value String,\n is_primary UInt8,\n is_verified UInt8,\n used_for_auth UInt8,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ContactChannel\".\"id\" AS \"id\",\n \"ContactChannel\".\"projectUserId\" AS \"user_id\",\n \"ContactChannel\".\"type\"::text AS \"type\",\n \"ContactChannel\".\"value\" AS \"value\",\n CASE WHEN \"ContactChannel\".\"isPrimary\" = 'TRUE' THEN true ELSE false END AS \"is_primary\",\n \"ContactChannel\".\"isVerified\" AS \"is_verified\",\n CASE WHEN \"ContactChannel\".\"usedForAuth\" = 'TRUE' THEN true ELSE false END AS \"used_for_auth\",\n \"ContactChannel\".\"createdAt\" AS \"created_at\",\n \"ContactChannel\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ContactChannel\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ContactChannel\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ContactChannel\".\"tenancyId\"\n WHERE \"ContactChannel\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"type\",\n NULL::text AS \"value\",\n false AS \"is_primary\",\n false AS \"is_verified\",\n false AS \"used_for_auth\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ContactChannel'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ContactChannel\".\"id\" AS \"id\",\n \"ContactChannel\".\"projectUserId\" AS \"user_id\",\n \"ContactChannel\".\"type\"::text AS \"type\",\n \"ContactChannel\".\"value\" AS \"value\",\n CASE WHEN \"ContactChannel\".\"isPrimary\" = 'TRUE' THEN true ELSE false END AS \"is_primary\",\n \"ContactChannel\".\"isVerified\" AS \"is_verified\",\n CASE WHEN \"ContactChannel\".\"usedForAuth\" = 'TRUE' THEN true ELSE false END AS \"used_for_auth\",\n \"ContactChannel\".\"createdAt\" AS \"created_at\",\n \"ContactChannel\".\"sequenceId\" AS \"sequence_id\",\n \"ContactChannel\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"type\",\n NULL::text AS \"value\",\n false AS \"is_primary\",\n false AS \"is_verified\",\n false AS \"used_for_auth\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ContactChannel'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"type\",\n $4::text AS \"value\",\n $5::boolean AS \"is_primary\",\n $6::boolean AS \"is_verified\",\n $7::boolean AS \"used_for_auth\",\n $8::timestamp without time zone AS \"created_at\",\n $9::bigint AS \"sequence_id\",\n $10::boolean AS \"is_deleted\",\n $11::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"contact_channels\" c\n USING params p\n WHERE p.\"is_deleted\" = true AND c.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"contact_channels\" (\n \"id\",\n \"user_id\",\n \"type\",\n \"value\",\n \"is_primary\",\n \"is_verified\",\n \"used_for_auth\",\n \"created_at\"\n )\n SELECT\n p.\"id\",\n p.\"user_id\",\n p.\"type\",\n p.\"value\",\n p.\"is_primary\",\n p.\"is_verified\",\n p.\"used_for_auth\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"user_id\" = EXCLUDED.\"user_id\",\n \"type\" = EXCLUDED.\"type\",\n \"value\" = EXCLUDED.\"value\",\n \"is_primary\" = EXCLUDED.\"is_primary\",\n \"is_verified\" = EXCLUDED.\"is_verified\",\n \"used_for_auth\" = EXCLUDED.\"used_for_auth\",\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"teams\": {\n sourceTables: { \"Team\": \"Team\" },\n targetTable: \"teams\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"teams\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"display_name\" text NOT NULL,\n \"profile_image_url\" text,\n \"created_at\" timestamp without time zone NOT NULL,\n \"client_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"client_read_only_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"server_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb\n );\n REVOKE ALL ON \"teams\" FROM PUBLIC;\n GRANT SELECT ON \"teams\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.teams (\n project_id String,\n branch_id String,\n id UUID,\n display_name String,\n profile_image_url Nullable(String),\n created_at DateTime64(3, 'UTC'),\n client_metadata String,\n client_read_only_metadata String,\n server_metadata String,\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"Team\".\"teamId\" AS \"id\",\n \"Team\".\"displayName\" AS \"display_name\",\n \"Team\".\"profileImageUrl\" AS \"profile_image_url\",\n \"Team\".\"createdAt\" AS \"created_at\",\n COALESCE(\"Team\".\"clientMetadata\", '{}'::jsonb) AS \"client_metadata\",\n COALESCE(\"Team\".\"clientReadOnlyMetadata\", '{}'::jsonb) AS \"client_read_only_metadata\",\n COALESCE(\"Team\".\"serverMetadata\", '{}'::jsonb) AS \"server_metadata\",\n \"Team\".\"sequenceId\" AS \"sync_sequence_id\",\n \"Team\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"Team\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"Team\".\"tenancyId\"\n WHERE \"Team\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n '{}'::jsonb AS \"client_metadata\",\n '{}'::jsonb AS \"client_read_only_metadata\",\n '{}'::jsonb AS \"server_metadata\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'Team'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"Team\".\"teamId\" AS \"id\",\n \"Team\".\"displayName\" AS \"display_name\",\n \"Team\".\"profileImageUrl\" AS \"profile_image_url\",\n \"Team\".\"createdAt\" AS \"created_at\",\n COALESCE(\"Team\".\"clientMetadata\", '{}'::jsonb) AS \"client_metadata\",\n COALESCE(\"Team\".\"clientReadOnlyMetadata\", '{}'::jsonb) AS \"client_read_only_metadata\",\n COALESCE(\"Team\".\"serverMetadata\", '{}'::jsonb) AS \"server_metadata\",\n \"Team\".\"sequenceId\" AS \"sequence_id\",\n \"Team\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"Team\"\n WHERE \"Team\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n '{}'::jsonb AS \"client_metadata\",\n '{}'::jsonb AS \"client_read_only_metadata\",\n '{}'::jsonb AS \"server_metadata\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'Team'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::text AS \"display_name\",\n $3::text AS \"profile_image_url\",\n $4::timestamp without time zone AS \"created_at\",\n $5::jsonb AS \"client_metadata\",\n $6::jsonb AS \"client_read_only_metadata\",\n $7::jsonb AS \"server_metadata\",\n $8::bigint AS \"sequence_id\",\n $9::boolean AS \"is_deleted\",\n $10::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"teams\" t\n USING params p\n WHERE p.\"is_deleted\" = true AND t.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"teams\" (\n \"id\",\n \"display_name\",\n \"profile_image_url\",\n \"created_at\",\n \"client_metadata\",\n \"client_read_only_metadata\",\n \"server_metadata\"\n )\n SELECT\n p.\"id\",\n p.\"display_name\",\n p.\"profile_image_url\",\n p.\"created_at\",\n p.\"client_metadata\",\n p.\"client_read_only_metadata\",\n p.\"server_metadata\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"display_name\" = EXCLUDED.\"display_name\",\n \"profile_image_url\" = EXCLUDED.\"profile_image_url\",\n \"created_at\" = EXCLUDED.\"created_at\",\n \"client_metadata\" = EXCLUDED.\"client_metadata\",\n \"client_read_only_metadata\" = EXCLUDED.\"client_read_only_metadata\",\n \"server_metadata\" = EXCLUDED.\"server_metadata\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"team_member_profiles\": {\n sourceTables: { \"TeamMember\": \"TeamMember\" },\n targetTable: \"team_member_profiles\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"team_member_profiles\" (\n \"team_id\" uuid NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"display_name\" text,\n \"profile_image_url\" text,\n \"created_at\" timestamp without time zone NOT NULL,\n PRIMARY KEY (\"team_id\", \"user_id\")\n );\n REVOKE ALL ON \"team_member_profiles\" FROM PUBLIC;\n GRANT SELECT ON \"team_member_profiles\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.team_member_profiles (\n project_id String,\n branch_id String,\n team_id UUID,\n user_id UUID,\n display_name Nullable(String),\n profile_image_url Nullable(String),\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, team_id, user_id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"TeamMember\".\"teamId\" AS \"team_id\",\n \"TeamMember\".\"projectUserId\" AS \"user_id\",\n \"TeamMember\".\"displayName\" AS \"display_name\",\n \"TeamMember\".\"profileImageUrl\" AS \"profile_image_url\",\n \"TeamMember\".\"createdAt\" AS \"created_at\",\n \"TeamMember\".\"sequenceId\" AS \"sync_sequence_id\",\n \"TeamMember\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"TeamMember\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"TeamMember\".\"tenancyId\"\n WHERE \"TeamMember\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"team_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'TeamMember'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"TeamMember\".\"teamId\" AS \"team_id\",\n \"TeamMember\".\"projectUserId\" AS \"user_id\",\n \"TeamMember\".\"displayName\" AS \"display_name\",\n \"TeamMember\".\"profileImageUrl\" AS \"profile_image_url\",\n \"TeamMember\".\"createdAt\" AS \"created_at\",\n \"TeamMember\".\"sequenceId\" AS \"sequence_id\",\n \"TeamMember\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"TeamMember\"\n WHERE \"TeamMember\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"team_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'TeamMember'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"team_id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"display_name\",\n $4::text AS \"profile_image_url\",\n $5::timestamp without time zone AS \"created_at\",\n $6::bigint AS \"sequence_id\",\n $7::boolean AS \"is_deleted\",\n $8::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"team_member_profiles\" tm\n USING params p\n WHERE p.\"is_deleted\" = true AND tm.\"team_id\" = p.\"team_id\" AND tm.\"user_id\" = p.\"user_id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"team_member_profiles\" (\n \"team_id\",\n \"user_id\",\n \"display_name\",\n \"profile_image_url\",\n \"created_at\"\n )\n SELECT\n p.\"team_id\",\n p.\"user_id\",\n p.\"display_name\",\n p.\"profile_image_url\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"team_id\", \"user_id\") DO UPDATE SET\n \"display_name\" = EXCLUDED.\"display_name\",\n \"profile_image_url\" = EXCLUDED.\"profile_image_url\",\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"team_permissions\": {\n sourceTables: { \"TeamMemberDirectPermission\": \"TeamMemberDirectPermission\" },\n targetTable: \"team_permissions\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"team_permissions\" (\n \"team_id\" uuid NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"permission_id\" text NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL,\n PRIMARY KEY (\"team_id\", \"user_id\", \"permission_id\")\n );\n REVOKE ALL ON \"team_permissions\" FROM PUBLIC;\n GRANT SELECT ON \"team_permissions\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.team_permissions (\n project_id String,\n branch_id String,\n team_id UUID,\n user_id UUID,\n id String,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, team_id, user_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"TeamMemberDirectPermission\".\"teamId\" AS \"team_id\",\n \"TeamMemberDirectPermission\".\"projectUserId\" AS \"user_id\",\n \"TeamMemberDirectPermission\".\"permissionId\" AS \"id\",\n \"TeamMemberDirectPermission\".\"createdAt\" AS \"created_at\",\n \"TeamMemberDirectPermission\".\"sequenceId\" AS \"sync_sequence_id\",\n \"TeamMemberDirectPermission\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"TeamMemberDirectPermission\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"TeamMemberDirectPermission\".\"tenancyId\"\n WHERE \"TeamMemberDirectPermission\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"team_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"primaryKey\"->>'permissionId' AS \"id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'TeamMemberDirectPermission'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"TeamMemberDirectPermission\".\"teamId\" AS \"team_id\",\n \"TeamMemberDirectPermission\".\"projectUserId\" AS \"user_id\",\n \"TeamMemberDirectPermission\".\"permissionId\" AS \"permission_id\",\n \"TeamMemberDirectPermission\".\"createdAt\" AS \"created_at\",\n \"TeamMemberDirectPermission\".\"sequenceId\" AS \"sequence_id\",\n \"TeamMemberDirectPermission\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"TeamMemberDirectPermission\"\n WHERE \"TeamMemberDirectPermission\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"team_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"primaryKey\"->>'permissionId' AS \"id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'TeamMemberDirectPermission'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"team_id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"permission_id\",\n $4::timestamp without time zone AS \"created_at\",\n $5::bigint AS \"sequence_id\",\n $6::boolean AS \"is_deleted\",\n $7::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"team_permissions\" tp\n USING params p\n 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\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"team_permissions\" (\n \"team_id\",\n \"user_id\",\n \"permission_id\",\n \"created_at\"\n )\n SELECT\n p.\"team_id\",\n p.\"user_id\",\n p.\"permission_id\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"team_id\", \"user_id\", \"permission_id\") DO UPDATE SET\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"team_invitations\": {\n sourceTables: { \"VerificationCode\": \"VerificationCode\" },\n targetTable: \"team_invitations\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"team_invitations\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"team_id\" uuid NOT NULL,\n \"team_display_name\" text NOT NULL,\n \"recipient_email\" text NOT NULL,\n \"expires_at_millis\" bigint NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL\n );\n REVOKE ALL ON \"team_invitations\" FROM PUBLIC;\n GRANT SELECT ON \"team_invitations\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.team_invitations (\n project_id String,\n branch_id String,\n id UUID,\n team_id UUID,\n team_display_name String,\n recipient_email String,\n expires_at_millis Int64,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"VerificationCode\".\"id\"::uuid AS \"id\",\n (\"VerificationCode\".\"data\"->>'team_id')::uuid AS \"team_id\",\n \"Team\".\"displayName\" AS \"team_display_name\",\n \"VerificationCode\".\"method\"->>'email' AS \"recipient_email\",\n FLOOR(EXTRACT(EPOCH FROM \"VerificationCode\".\"expiresAt\") * 1000)::bigint AS \"expires_at_millis\",\n \"VerificationCode\".\"createdAt\" AS \"created_at\",\n \"VerificationCode\".\"sequenceId\" AS \"sync_sequence_id\",\n \"Tenancy\".\"id\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"VerificationCode\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"projectId\" = \"VerificationCode\".\"projectId\"\n AND \"Tenancy\".\"branchId\" = \"VerificationCode\".\"branchId\"\n LEFT JOIN \"Team\" ON \"Team\".\"teamId\" = (\"VerificationCode\".\"data\"->>'team_id')::uuid\n AND \"Team\".\"tenancyId\" = \"Tenancy\".\"id\"\n WHERE \"Tenancy\".\"id\" = $1::uuid\n AND \"VerificationCode\".\"type\" = 'TEAM_INVITATION'\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n '00000000-0000-0000-0000-000000000000'::uuid AS \"team_id\",\n ''::text AS \"team_display_name\",\n ''::text AS \"recipient_email\",\n 0::bigint AS \"expires_at_millis\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'VerificationCode_TEAM_INVITATION'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"VerificationCode\".\"id\"::uuid AS \"id\",\n (\"VerificationCode\".\"data\"->>'team_id')::uuid AS \"team_id\",\n \"Team\".\"displayName\" AS \"team_display_name\",\n \"VerificationCode\".\"method\"->>'email' AS \"recipient_email\",\n FLOOR(EXTRACT(EPOCH FROM \"VerificationCode\".\"expiresAt\") * 1000)::bigint AS \"expires_at_millis\",\n \"VerificationCode\".\"createdAt\" AS \"created_at\",\n \"VerificationCode\".\"sequenceId\" AS \"sequence_id\",\n \"Tenancy\".\"id\" AS \"tenancyId\",\n false AS \"is_deleted\"\n FROM \"VerificationCode\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"projectId\" = \"VerificationCode\".\"projectId\"\n AND \"Tenancy\".\"branchId\" = \"VerificationCode\".\"branchId\"\n LEFT JOIN \"Team\" ON \"Team\".\"teamId\" = (\"VerificationCode\".\"data\"->>'team_id')::uuid\n AND \"Team\".\"tenancyId\" = \"Tenancy\".\"id\"\n WHERE \"Tenancy\".\"id\" = $1::uuid\n AND \"VerificationCode\".\"type\" = 'TEAM_INVITATION'\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n '00000000-0000-0000-0000-000000000000'::uuid AS \"team_id\",\n ''::text AS \"team_display_name\",\n ''::text AS \"recipient_email\",\n 0::bigint AS \"expires_at_millis\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'VerificationCode_TEAM_INVITATION'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"team_id\",\n $3::text AS \"team_display_name\",\n $4::text AS \"recipient_email\",\n $5::bigint AS \"expires_at_millis\",\n $6::timestamp without time zone AS \"created_at\",\n $7::bigint AS \"sequence_id\",\n $8::boolean AS \"is_deleted\",\n $9::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"team_invitations\" ti\n USING params p\n WHERE p.\"is_deleted\" = true AND ti.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"team_invitations\" (\n \"id\",\n \"team_id\",\n \"team_display_name\",\n \"recipient_email\",\n \"expires_at_millis\",\n \"created_at\"\n )\n SELECT\n p.\"id\",\n p.\"team_id\",\n p.\"team_display_name\",\n p.\"recipient_email\",\n p.\"expires_at_millis\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"team_id\" = EXCLUDED.\"team_id\",\n \"team_display_name\" = EXCLUDED.\"team_display_name\",\n \"recipient_email\" = EXCLUDED.\"recipient_email\",\n \"expires_at_millis\" = EXCLUDED.\"expires_at_millis\",\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"email_outboxes\": {\n sourceTables: { \"EmailOutbox\": \"EmailOutbox\" },\n targetTable: \"email_outboxes\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"email_outboxes\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"status\" text NOT NULL,\n \"simple_status\" text NOT NULL,\n \"created_with\" text NOT NULL,\n \"email_draft_id\" text,\n \"email_programmatic_call_template_id\" text,\n \"theme_id\" text,\n \"is_high_priority\" boolean NOT NULL DEFAULT false,\n \"rendered_is_transactional\" boolean,\n \"rendered_subject\" text,\n \"rendered_notification_category_id\" text,\n \"started_rendering_at\" timestamp without time zone,\n \"finished_rendering_at\" timestamp without time zone,\n \"render_error\" text,\n \"scheduled_at\" timestamp without time zone NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL,\n \"started_sending_at\" timestamp without time zone,\n \"finished_sending_at\" timestamp without time zone,\n \"server_error\" text,\n \"sent_at\" timestamp without time zone,\n \"delivered_at\" timestamp without time zone,\n \"opened_at\" timestamp without time zone,\n \"clicked_at\" timestamp without time zone,\n \"unsubscribed_at\" timestamp without time zone,\n \"marked_as_spam_at\" timestamp without time zone,\n \"bounced_at\" timestamp without time zone,\n \"delivery_delayed_at\" timestamp without time zone,\n \"can_have_delivery_info\" boolean,\n \"skipped_reason\" text,\n \"skipped_details\" jsonb,\n \"send_retries\" integer NOT NULL DEFAULT 0,\n \"is_paused\" boolean NOT NULL DEFAULT false\n );\n REVOKE ALL ON \"email_outboxes\" FROM PUBLIC;\n GRANT SELECT ON \"email_outboxes\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.email_outboxes (\n project_id String,\n branch_id String,\n id UUID,\n status LowCardinality(String),\n simple_status LowCardinality(String),\n created_with LowCardinality(String),\n email_draft_id Nullable(String),\n email_programmatic_call_template_id Nullable(String),\n theme_id Nullable(String),\n is_high_priority UInt8,\n is_transactional Nullable(UInt8),\n subject Nullable(String),\n notification_category_id Nullable(String),\n started_rendering_at Nullable(DateTime64(3, 'UTC')),\n rendered_at Nullable(DateTime64(3, 'UTC')),\n render_error Nullable(String),\n scheduled_at DateTime64(3, 'UTC'),\n created_at DateTime64(3, 'UTC'),\n updated_at DateTime64(3, 'UTC'),\n started_sending_at Nullable(DateTime64(3, 'UTC')),\n server_error Nullable(String),\n delivered_at Nullable(DateTime64(3, 'UTC')),\n opened_at Nullable(DateTime64(3, 'UTC')),\n clicked_at Nullable(DateTime64(3, 'UTC')),\n unsubscribed_at Nullable(DateTime64(3, 'UTC')),\n marked_as_spam_at Nullable(DateTime64(3, 'UTC')),\n bounced_at Nullable(DateTime64(3, 'UTC')),\n delivery_delayed_at Nullable(DateTime64(3, 'UTC')),\n can_have_delivery_info Nullable(UInt8),\n skipped_reason LowCardinality(Nullable(String)),\n skipped_details Nullable(String),\n send_retries Int32,\n is_paused UInt8,\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"EmailOutbox\".\"id\" AS \"id\",\n LOWER(REPLACE(\"EmailOutbox\".\"status\"::text, '_', '-')) AS \"status\",\n LOWER(REPLACE(\"EmailOutbox\".\"simpleStatus\"::text, '_', '-')) AS \"simple_status\",\n CASE WHEN \"EmailOutbox\".\"createdWith\"::text = 'DRAFT' THEN 'draft' ELSE 'programmatic-call' END AS \"created_with\",\n \"EmailOutbox\".\"emailDraftId\" AS \"email_draft_id\",\n \"EmailOutbox\".\"emailProgrammaticCallTemplateId\" AS \"email_programmatic_call_template_id\",\n \"EmailOutbox\".\"themeId\" AS \"theme_id\",\n \"EmailOutbox\".\"isHighPriority\" AS \"is_high_priority\",\n \"EmailOutbox\".\"renderedIsTransactional\" AS \"is_transactional\",\n \"EmailOutbox\".\"renderedSubject\" AS \"subject\",\n \"EmailOutbox\".\"renderedNotificationCategoryId\" AS \"notification_category_id\",\n \"EmailOutbox\".\"startedRenderingAt\" AS \"started_rendering_at\",\n \"EmailOutbox\".\"finishedRenderingAt\" AS \"rendered_at\",\n \"EmailOutbox\".\"renderErrorExternalMessage\" AS \"render_error\",\n \"EmailOutbox\".\"scheduledAt\" AS \"scheduled_at\",\n \"EmailOutbox\".\"createdAt\" AS \"created_at\",\n \"EmailOutbox\".\"updatedAt\" AS \"updated_at\",\n \"EmailOutbox\".\"startedSendingAt\" AS \"started_sending_at\",\n \"EmailOutbox\".\"sendServerErrorExternalMessage\" AS \"server_error\",\n \"EmailOutbox\".\"deliveredAt\" AS \"delivered_at\",\n \"EmailOutbox\".\"openedAt\" AS \"opened_at\",\n \"EmailOutbox\".\"clickedAt\" AS \"clicked_at\",\n \"EmailOutbox\".\"unsubscribedAt\" AS \"unsubscribed_at\",\n \"EmailOutbox\".\"markedAsSpamAt\" AS \"marked_as_spam_at\",\n \"EmailOutbox\".\"bouncedAt\" AS \"bounced_at\",\n \"EmailOutbox\".\"deliveryDelayedAt\" AS \"delivery_delayed_at\",\n \"EmailOutbox\".\"canHaveDeliveryInfo\" AS \"can_have_delivery_info\",\n LOWER(REPLACE(\"EmailOutbox\".\"skippedReason\"::text, '_', '-')) AS \"skipped_reason\",\n \"EmailOutbox\".\"skippedDetails\" AS \"skipped_details\",\n \"EmailOutbox\".\"sendRetries\" AS \"send_retries\",\n \"EmailOutbox\".\"isPaused\" AS \"is_paused\",\n \"EmailOutbox\".\"sequenceId\" AS \"sync_sequence_id\",\n \"EmailOutbox\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"EmailOutbox\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"EmailOutbox\".\"tenancyId\"\n WHERE \"EmailOutbox\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n ''::text AS \"status\",\n ''::text AS \"simple_status\",\n ''::text AS \"created_with\",\n NULL::text AS \"email_draft_id\",\n NULL::text AS \"email_programmatic_call_template_id\",\n NULL::text AS \"theme_id\",\n false AS \"is_high_priority\",\n NULL::boolean AS \"is_transactional\",\n NULL::text AS \"subject\",\n NULL::text AS \"notification_category_id\",\n NULL::timestamp without time zone AS \"started_rendering_at\",\n NULL::timestamp without time zone AS \"rendered_at\",\n NULL::text AS \"render_error\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"scheduled_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"updated_at\",\n NULL::timestamp without time zone AS \"started_sending_at\",\n NULL::text AS \"server_error\",\n NULL::timestamp without time zone AS \"delivered_at\",\n NULL::timestamp without time zone AS \"opened_at\",\n NULL::timestamp without time zone AS \"clicked_at\",\n NULL::timestamp without time zone AS \"unsubscribed_at\",\n NULL::timestamp without time zone AS \"marked_as_spam_at\",\n NULL::timestamp without time zone AS \"bounced_at\",\n NULL::timestamp without time zone AS \"delivery_delayed_at\",\n NULL::boolean AS \"can_have_delivery_info\",\n NULL::text AS \"skipped_reason\",\n NULL::jsonb AS \"skipped_details\",\n 0 AS \"send_retries\",\n false AS \"is_paused\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'EmailOutbox'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"EmailOutbox\".\"id\" AS \"id\",\n \"EmailOutbox\".\"status\"::text AS \"status\",\n \"EmailOutbox\".\"simpleStatus\"::text AS \"simple_status\",\n \"EmailOutbox\".\"createdWith\"::text AS \"created_with\",\n \"EmailOutbox\".\"emailDraftId\" AS \"email_draft_id\",\n \"EmailOutbox\".\"emailProgrammaticCallTemplateId\" AS \"email_programmatic_call_template_id\",\n \"EmailOutbox\".\"themeId\" AS \"theme_id\",\n \"EmailOutbox\".\"isHighPriority\" AS \"is_high_priority\",\n \"EmailOutbox\".\"renderedIsTransactional\" AS \"rendered_is_transactional\",\n \"EmailOutbox\".\"renderedSubject\" AS \"rendered_subject\",\n \"EmailOutbox\".\"renderedNotificationCategoryId\" AS \"rendered_notification_category_id\",\n \"EmailOutbox\".\"startedRenderingAt\" AS \"started_rendering_at\",\n \"EmailOutbox\".\"finishedRenderingAt\" AS \"finished_rendering_at\",\n \"EmailOutbox\".\"renderErrorExternalMessage\" AS \"render_error\",\n \"EmailOutbox\".\"scheduledAt\" AS \"scheduled_at\",\n \"EmailOutbox\".\"createdAt\" AS \"created_at\",\n \"EmailOutbox\".\"startedSendingAt\" AS \"started_sending_at\",\n \"EmailOutbox\".\"finishedSendingAt\" AS \"finished_sending_at\",\n \"EmailOutbox\".\"sendServerErrorExternalMessage\" AS \"server_error\",\n \"EmailOutbox\".\"sentAt\" AS \"sent_at\",\n \"EmailOutbox\".\"deliveredAt\" AS \"delivered_at\",\n \"EmailOutbox\".\"openedAt\" AS \"opened_at\",\n \"EmailOutbox\".\"clickedAt\" AS \"clicked_at\",\n \"EmailOutbox\".\"unsubscribedAt\" AS \"unsubscribed_at\",\n \"EmailOutbox\".\"markedAsSpamAt\" AS \"marked_as_spam_at\",\n \"EmailOutbox\".\"bouncedAt\" AS \"bounced_at\",\n \"EmailOutbox\".\"deliveryDelayedAt\" AS \"delivery_delayed_at\",\n \"EmailOutbox\".\"canHaveDeliveryInfo\" AS \"can_have_delivery_info\",\n \"EmailOutbox\".\"skippedReason\"::text AS \"skipped_reason\",\n \"EmailOutbox\".\"skippedDetails\" AS \"skipped_details\",\n \"EmailOutbox\".\"sendRetries\" AS \"send_retries\",\n \"EmailOutbox\".\"isPaused\" AS \"is_paused\",\n \"EmailOutbox\".\"sequenceId\" AS \"sequence_id\",\n \"EmailOutbox\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"EmailOutbox\"\n WHERE \"EmailOutbox\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n ''::text AS \"status\",\n ''::text AS \"simple_status\",\n ''::text AS \"created_with\",\n NULL::text AS \"email_draft_id\",\n NULL::text AS \"email_programmatic_call_template_id\",\n NULL::text AS \"theme_id\",\n false AS \"is_high_priority\",\n NULL::boolean AS \"rendered_is_transactional\",\n NULL::text AS \"rendered_subject\",\n NULL::text AS \"rendered_notification_category_id\",\n NULL::timestamp without time zone AS \"started_rendering_at\",\n NULL::timestamp without time zone AS \"finished_rendering_at\",\n NULL::text AS \"render_error\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"scheduled_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n NULL::timestamp without time zone AS \"started_sending_at\",\n NULL::timestamp without time zone AS \"finished_sending_at\",\n NULL::text AS \"server_error\",\n NULL::timestamp without time zone AS \"sent_at\",\n NULL::timestamp without time zone AS \"delivered_at\",\n NULL::timestamp without time zone AS \"opened_at\",\n NULL::timestamp without time zone AS \"clicked_at\",\n NULL::timestamp without time zone AS \"unsubscribed_at\",\n NULL::timestamp without time zone AS \"marked_as_spam_at\",\n NULL::timestamp without time zone AS \"bounced_at\",\n NULL::timestamp without time zone AS \"delivery_delayed_at\",\n NULL::boolean AS \"can_have_delivery_info\",\n NULL::text AS \"skipped_reason\",\n NULL::jsonb AS \"skipped_details\",\n 0 AS \"send_retries\",\n false AS \"is_paused\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'EmailOutbox'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::text AS \"status\",\n $3::text AS \"simple_status\",\n $4::text AS \"created_with\",\n $5::text AS \"email_draft_id\",\n $6::text AS \"email_programmatic_call_template_id\",\n $7::text AS \"theme_id\",\n $8::boolean AS \"is_high_priority\",\n $9::boolean AS \"rendered_is_transactional\",\n $10::text AS \"rendered_subject\",\n $11::text AS \"rendered_notification_category_id\",\n $12::timestamp without time zone AS \"started_rendering_at\",\n $13::timestamp without time zone AS \"finished_rendering_at\",\n $14::text AS \"render_error\",\n $15::timestamp without time zone AS \"scheduled_at\",\n $16::timestamp without time zone AS \"created_at\",\n $17::timestamp without time zone AS \"started_sending_at\",\n $18::timestamp without time zone AS \"finished_sending_at\",\n $19::text AS \"server_error\",\n $20::timestamp without time zone AS \"sent_at\",\n $21::timestamp without time zone AS \"delivered_at\",\n $22::timestamp without time zone AS \"opened_at\",\n $23::timestamp without time zone AS \"clicked_at\",\n $24::timestamp without time zone AS \"unsubscribed_at\",\n $25::timestamp without time zone AS \"marked_as_spam_at\",\n $26::timestamp without time zone AS \"bounced_at\",\n $27::timestamp without time zone AS \"delivery_delayed_at\",\n $28::boolean AS \"can_have_delivery_info\",\n $29::text AS \"skipped_reason\",\n $30::jsonb AS \"skipped_details\",\n $31::integer AS \"send_retries\",\n $32::boolean AS \"is_paused\",\n $33::bigint AS \"sequence_id\",\n $34::boolean AS \"is_deleted\",\n $35::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"email_outboxes\" eo\n USING params p\n WHERE p.\"is_deleted\" = true AND eo.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"email_outboxes\" (\n \"id\",\n \"status\",\n \"simple_status\",\n \"created_with\",\n \"email_draft_id\",\n \"email_programmatic_call_template_id\",\n \"theme_id\",\n \"is_high_priority\",\n \"rendered_is_transactional\",\n \"rendered_subject\",\n \"rendered_notification_category_id\",\n \"started_rendering_at\",\n \"finished_rendering_at\",\n \"render_error\",\n \"scheduled_at\",\n \"created_at\",\n \"started_sending_at\",\n \"finished_sending_at\",\n \"server_error\",\n \"sent_at\",\n \"delivered_at\",\n \"opened_at\",\n \"clicked_at\",\n \"unsubscribed_at\",\n \"marked_as_spam_at\",\n \"bounced_at\",\n \"delivery_delayed_at\",\n \"can_have_delivery_info\",\n \"skipped_reason\",\n \"skipped_details\",\n \"send_retries\",\n \"is_paused\"\n )\n SELECT\n p.\"id\",\n p.\"status\",\n p.\"simple_status\",\n p.\"created_with\",\n p.\"email_draft_id\",\n p.\"email_programmatic_call_template_id\",\n p.\"theme_id\",\n p.\"is_high_priority\",\n p.\"rendered_is_transactional\",\n p.\"rendered_subject\",\n p.\"rendered_notification_category_id\",\n p.\"started_rendering_at\",\n p.\"finished_rendering_at\",\n p.\"render_error\",\n p.\"scheduled_at\",\n p.\"created_at\",\n p.\"started_sending_at\",\n p.\"finished_sending_at\",\n p.\"server_error\",\n p.\"sent_at\",\n p.\"delivered_at\",\n p.\"opened_at\",\n p.\"clicked_at\",\n p.\"unsubscribed_at\",\n p.\"marked_as_spam_at\",\n p.\"bounced_at\",\n p.\"delivery_delayed_at\",\n p.\"can_have_delivery_info\",\n p.\"skipped_reason\",\n p.\"skipped_details\",\n p.\"send_retries\",\n p.\"is_paused\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"status\" = EXCLUDED.\"status\",\n \"simple_status\" = EXCLUDED.\"simple_status\",\n \"created_with\" = EXCLUDED.\"created_with\",\n \"email_draft_id\" = EXCLUDED.\"email_draft_id\",\n \"email_programmatic_call_template_id\" = EXCLUDED.\"email_programmatic_call_template_id\",\n \"theme_id\" = EXCLUDED.\"theme_id\",\n \"is_high_priority\" = EXCLUDED.\"is_high_priority\",\n \"rendered_is_transactional\" = EXCLUDED.\"rendered_is_transactional\",\n \"rendered_subject\" = EXCLUDED.\"rendered_subject\",\n \"rendered_notification_category_id\" = EXCLUDED.\"rendered_notification_category_id\",\n \"started_rendering_at\" = EXCLUDED.\"started_rendering_at\",\n \"finished_rendering_at\" = EXCLUDED.\"finished_rendering_at\",\n \"render_error\" = EXCLUDED.\"render_error\",\n \"scheduled_at\" = EXCLUDED.\"scheduled_at\",\n \"created_at\" = EXCLUDED.\"created_at\",\n \"started_sending_at\" = EXCLUDED.\"started_sending_at\",\n \"finished_sending_at\" = EXCLUDED.\"finished_sending_at\",\n \"server_error\" = EXCLUDED.\"server_error\",\n \"sent_at\" = EXCLUDED.\"sent_at\",\n \"delivered_at\" = EXCLUDED.\"delivered_at\",\n \"opened_at\" = EXCLUDED.\"opened_at\",\n \"clicked_at\" = EXCLUDED.\"clicked_at\",\n \"unsubscribed_at\" = EXCLUDED.\"unsubscribed_at\",\n \"marked_as_spam_at\" = EXCLUDED.\"marked_as_spam_at\",\n \"bounced_at\" = EXCLUDED.\"bounced_at\",\n \"delivery_delayed_at\" = EXCLUDED.\"delivery_delayed_at\",\n \"can_have_delivery_info\" = EXCLUDED.\"can_have_delivery_info\",\n \"skipped_reason\" = EXCLUDED.\"skipped_reason\",\n \"skipped_details\" = EXCLUDED.\"skipped_details\",\n \"send_retries\" = EXCLUDED.\"send_retries\",\n \"is_paused\" = EXCLUDED.\"is_paused\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"project_permissions\": {\n sourceTables: { \"ProjectUserDirectPermission\": \"ProjectUserDirectPermission\" },\n targetTable: \"project_permissions\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"project_permissions\" (\n \"user_id\" uuid NOT NULL,\n \"permission_id\" text NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL,\n PRIMARY KEY (\"user_id\", \"permission_id\")\n );\n REVOKE ALL ON \"project_permissions\" FROM PUBLIC;\n GRANT SELECT ON \"project_permissions\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.project_permissions (\n project_id String,\n branch_id String,\n user_id UUID,\n id String,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, user_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ProjectUserDirectPermission\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserDirectPermission\".\"permissionId\" AS \"id\",\n \"ProjectUserDirectPermission\".\"createdAt\" AS \"created_at\",\n \"ProjectUserDirectPermission\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ProjectUserDirectPermission\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ProjectUserDirectPermission\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ProjectUserDirectPermission\".\"tenancyId\"\n WHERE \"ProjectUserDirectPermission\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"primaryKey\"->>'permissionId' AS \"id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserDirectPermission'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ProjectUserDirectPermission\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserDirectPermission\".\"permissionId\" AS \"permission_id\",\n \"ProjectUserDirectPermission\".\"createdAt\" AS \"created_at\",\n \"ProjectUserDirectPermission\".\"sequenceId\" AS \"sequence_id\",\n \"ProjectUserDirectPermission\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ProjectUserDirectPermission\"\n WHERE \"ProjectUserDirectPermission\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"primaryKey\"->>'permissionId' AS \"id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserDirectPermission'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"user_id\",\n $2::text AS \"permission_id\",\n $3::timestamp without time zone AS \"created_at\",\n $4::bigint AS \"sequence_id\",\n $5::boolean AS \"is_deleted\",\n $6::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"project_permissions\" pp\n USING params p\n WHERE p.\"is_deleted\" = true AND pp.\"user_id\" = p.\"user_id\" AND pp.\"permission_id\" = p.\"permission_id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"project_permissions\" (\n \"user_id\",\n \"permission_id\",\n \"created_at\"\n )\n SELECT\n p.\"user_id\",\n p.\"permission_id\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"user_id\", \"permission_id\") DO UPDATE SET\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"notification_preferences\": {\n sourceTables: { \"UserNotificationPreference\": \"UserNotificationPreference\" },\n targetTable: \"notification_preferences\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"notification_preferences\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"notification_category_id\" text NOT NULL,\n \"enabled\" boolean NOT NULL DEFAULT true\n );\n REVOKE ALL ON \"notification_preferences\" FROM PUBLIC;\n GRANT SELECT ON \"notification_preferences\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.notification_preferences (\n project_id String,\n branch_id String,\n user_id UUID,\n notification_category_id String,\n enabled UInt8,\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n ORDER BY (project_id, branch_id, user_id, notification_category_id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"UserNotificationPreference\".\"projectUserId\" AS \"user_id\",\n \"UserNotificationPreference\".\"notificationCategoryId\" AS \"notification_category_id\",\n \"UserNotificationPreference\".\"enabled\" AS \"enabled\",\n \"UserNotificationPreference\".\"sequenceId\" AS \"sync_sequence_id\",\n \"UserNotificationPreference\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"UserNotificationPreference\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"UserNotificationPreference\".\"tenancyId\"\n WHERE \"UserNotificationPreference\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n (\"DeletedRow\".\"data\"->>'notificationCategoryId')::uuid AS \"notification_category_id\",\n (\"DeletedRow\".\"data\"->>'enabled')::boolean AS \"enabled\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'UserNotificationPreference'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"UserNotificationPreference\".\"id\" AS \"id\",\n \"UserNotificationPreference\".\"projectUserId\" AS \"user_id\",\n \"UserNotificationPreference\".\"notificationCategoryId\" AS \"notification_category_id\",\n \"UserNotificationPreference\".\"enabled\" AS \"enabled\",\n \"UserNotificationPreference\".\"sequenceId\" AS \"sequence_id\",\n \"UserNotificationPreference\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"UserNotificationPreference\"\n WHERE \"UserNotificationPreference\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n (\"DeletedRow\".\"data\"->>'notificationCategoryId')::uuid AS \"notification_category_id\",\n (\"DeletedRow\".\"data\"->>'enabled')::boolean AS \"enabled\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'UserNotificationPreference'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"notification_category_id\",\n $4::boolean AS \"enabled\",\n $5::bigint AS \"sequence_id\",\n $6::boolean AS \"is_deleted\",\n $7::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"notification_preferences\" np\n USING params p\n WHERE p.\"is_deleted\" = true AND np.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"notification_preferences\" (\n \"id\",\n \"user_id\",\n \"notification_category_id\",\n \"enabled\"\n )\n SELECT\n p.\"id\",\n p.\"user_id\",\n p.\"notification_category_id\",\n p.\"enabled\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"user_id\" = EXCLUDED.\"user_id\",\n \"notification_category_id\" = EXCLUDED.\"notification_category_id\",\n \"enabled\" = EXCLUDED.\"enabled\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"refresh_tokens\": {\n sourceTables: { \"ProjectUserRefreshToken\": \"ProjectUserRefreshToken\" },\n targetTable: \"refresh_tokens\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"refresh_tokens\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL,\n \"last_used_at\" timestamp without time zone NOT NULL,\n \"is_impersonation\" boolean NOT NULL DEFAULT false,\n \"expires_at\" timestamp without time zone\n );\n REVOKE ALL ON \"refresh_tokens\" FROM PUBLIC;\n GRANT SELECT ON \"refresh_tokens\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.refresh_tokens (\n project_id String,\n branch_id String,\n id UUID,\n user_id UUID,\n created_at DateTime64(3, 'UTC'),\n last_used_at DateTime64(3, 'UTC'),\n is_impersonation UInt8,\n expires_at Nullable(DateTime64(3, 'UTC')),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n\n CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (\n tenancy_id UUID,\n mapping_name String,\n last_synced_sequence_id Int64,\n updated_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(updated_at)\n ORDER BY (tenancy_id, mapping_name);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ProjectUserRefreshToken\".\"id\" AS \"id\",\n \"ProjectUserRefreshToken\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserRefreshToken\".\"createdAt\" AS \"created_at\",\n \"ProjectUserRefreshToken\".\"lastActiveAt\" AS \"last_used_at\",\n \"ProjectUserRefreshToken\".\"isImpersonation\" AS \"is_impersonation\",\n \"ProjectUserRefreshToken\".\"expiresAt\" AS \"expires_at\",\n \"ProjectUserRefreshToken\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ProjectUserRefreshToken\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ProjectUserRefreshToken\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ProjectUserRefreshToken\".\"tenancyId\"\n WHERE \"ProjectUserRefreshToken\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"last_used_at\",\n false AS \"is_impersonation\",\n NULL::timestamp without time zone AS \"expires_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserRefreshToken'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ProjectUserRefreshToken\".\"id\" AS \"id\",\n \"ProjectUserRefreshToken\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserRefreshToken\".\"createdAt\" AS \"created_at\",\n \"ProjectUserRefreshToken\".\"lastActiveAt\" AS \"last_used_at\",\n \"ProjectUserRefreshToken\".\"isImpersonation\" AS \"is_impersonation\",\n \"ProjectUserRefreshToken\".\"expiresAt\" AS \"expires_at\",\n \"ProjectUserRefreshToken\".\"sequenceId\" AS \"sequence_id\",\n \"ProjectUserRefreshToken\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ProjectUserRefreshToken\"\n WHERE \"ProjectUserRefreshToken\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"last_used_at\",\n false AS \"is_impersonation\",\n NULL::timestamp without time zone AS \"expires_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserRefreshToken'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"user_id\",\n $3::timestamp without time zone AS \"created_at\",\n $4::timestamp without time zone AS \"last_used_at\",\n $5::boolean AS \"is_impersonation\",\n $6::timestamp without time zone AS \"expires_at\",\n $7::bigint AS \"sequence_id\",\n $8::boolean AS \"is_deleted\",\n $9::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"refresh_tokens\" rt\n USING params p\n WHERE p.\"is_deleted\" = true AND rt.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"refresh_tokens\" (\n \"id\",\n \"user_id\",\n \"created_at\",\n \"last_used_at\",\n \"is_impersonation\",\n \"expires_at\"\n )\n SELECT\n p.\"id\",\n p.\"user_id\",\n p.\"created_at\",\n p.\"last_used_at\",\n p.\"is_impersonation\",\n p.\"expires_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"user_id\" = EXCLUDED.\"user_id\",\n \"created_at\" = EXCLUDED.\"created_at\",\n \"last_used_at\" = EXCLUDED.\"last_used_at\",\n \"is_impersonation\" = EXCLUDED.\"is_impersonation\",\n \"expires_at\" = EXCLUDED.\"expires_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"connected_accounts\": {\n sourceTables: { \"ProjectUserOAuthAccount\": \"ProjectUserOAuthAccount\" },\n targetTable: \"connected_accounts\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"connected_accounts\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"provider\" text NOT NULL,\n \"provider_account_id\" text NOT NULL,\n \"email\" text,\n \"created_at\" timestamp without time zone NOT NULL\n );\n REVOKE ALL ON \"connected_accounts\" FROM PUBLIC;\n GRANT SELECT ON \"connected_accounts\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.connected_accounts (\n project_id String,\n branch_id String,\n user_id UUID,\n provider String,\n provider_account_id String,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, user_id, provider, provider_account_id);\n\n CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (\n tenancy_id UUID,\n mapping_name String,\n last_synced_sequence_id Int64,\n updated_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(updated_at)\n ORDER BY (tenancy_id, mapping_name);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ProjectUserOAuthAccount\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserOAuthAccount\".\"configOAuthProviderId\" AS \"provider\",\n \"ProjectUserOAuthAccount\".\"providerAccountId\" AS \"provider_account_id\",\n \"ProjectUserOAuthAccount\".\"createdAt\" AS \"created_at\",\n \"ProjectUserOAuthAccount\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ProjectUserOAuthAccount\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ProjectUserOAuthAccount\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ProjectUserOAuthAccount\".\"tenancyId\"\n WHERE \"ProjectUserOAuthAccount\".\"tenancyId\" = $1::uuid\n AND \"ProjectUserOAuthAccount\".\"projectUserId\" IS NOT NULL\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"data\"->>'configOAuthProviderId' AS \"provider\",\n \"DeletedRow\".\"data\"->>'providerAccountId' AS \"provider_account_id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserOAuthAccount'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ProjectUserOAuthAccount\".\"id\" AS \"id\",\n \"ProjectUserOAuthAccount\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserOAuthAccount\".\"configOAuthProviderId\" AS \"provider\",\n \"ProjectUserOAuthAccount\".\"providerAccountId\" AS \"provider_account_id\",\n \"ProjectUserOAuthAccount\".\"email\" AS \"email\",\n \"ProjectUserOAuthAccount\".\"createdAt\" AS \"created_at\",\n \"ProjectUserOAuthAccount\".\"sequenceId\" AS \"sequence_id\",\n \"ProjectUserOAuthAccount\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ProjectUserOAuthAccount\"\n WHERE \"ProjectUserOAuthAccount\".\"tenancyId\" = $1::uuid\n AND \"ProjectUserOAuthAccount\".\"projectUserId\" IS NOT NULL\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"provider\",\n NULL::text AS \"provider_account_id\",\n NULL::text AS \"email\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserOAuthAccount'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"provider\",\n $4::text AS \"provider_account_id\",\n $5::text AS \"email\",\n $6::timestamp without time zone AS \"created_at\",\n $7::bigint AS \"sequence_id\",\n $8::boolean AS \"is_deleted\",\n $9::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"connected_accounts\" ca\n USING params p\n WHERE p.\"is_deleted\" = true AND ca.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"connected_accounts\" (\n \"id\",\n \"user_id\",\n \"provider\",\n \"provider_account_id\",\n \"email\",\n \"created_at\"\n )\n SELECT\n p.\"id\",\n p.\"user_id\",\n p.\"provider\",\n p.\"provider_account_id\",\n p.\"email\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"user_id\" = EXCLUDED.\"user_id\",\n \"provider\" = EXCLUDED.\"provider\",\n \"provider_account_id\" = EXCLUDED.\"provider_account_id\",\n \"email\" = EXCLUDED.\"email\",\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n} as const;\n"],"mappings":";AAAA,MAAa,2BAA2B;CACtC,SAAS;EACP,cAAc,EAAE,eAAe,eAAe;EAC9C,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;;;;;QAqBR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiCV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4EV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgEpB,MAAM;EAER,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkER,MAAM,EACT;EACF;CACD,oBAAoB;EAClB,cAAc,EAAE,kBAAkB,kBAAkB;EACpD,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;;;QAmBR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;;;;;QAmBV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+CV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyCpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0DR,MAAM,EACT;EACF;CACD,SAAS;EACP,cAAc,EAAE,QAAQ,QAAQ;EAChC,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;;QAkBR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;;;;QAkBV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6CV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuCpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsDR,MAAM,EACT;EACF;CACD,wBAAwB;EACtB,cAAc,EAAE,cAAc,cAAc;EAC5C,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;QAiBR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;;QAgBV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyCV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmCpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6CR,MAAM,EACT;EACF;CACD,oBAAoB;EAClB,cAAc,EAAE,8BAA8B,8BAA8B;EAC5E,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;QAgBR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;QAeV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuCV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiCpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwCR,MAAM,EACT;EACF;CACD,oBAAoB;EAClB,cAAc,EAAE,oBAAoB,oBAAoB;EACxD,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;QAiBR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;;;QAiBV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+CV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0CpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkDR,MAAM,EACT;EACF;CACD,kBAAkB;EAChB,cAAc,EAAE,eAAe,eAAe;EAC9C,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2CR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0CV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6FV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyFpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0JR,MAAM,EACT;EACF;CACD,uBAAuB;EACrB,cAAc,EAAE,+BAA+B,+BAA+B;EAC9E,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;QAeR,MAAM;GACR,YAAY;;;;;;;;;;;;;;QAcV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqCV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+BpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqCR,MAAM,EACT;EACF;CACD,4BAA4B;EAC1B,cAAc,EAAE,8BAA8B,8BAA8B;EAC5E,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;QAeR,MAAM;GACR,YAAY;;;;;;;;;;;;;QAaV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqCV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiCpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0CR,MAAM,EACT;EACF;CACD,kBAAkB;EAChB,cAAc,EAAE,2BAA2B,2BAA2B;EACtE,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;QAiBR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;QA0BV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2CV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqCpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkDR,MAAM,EACT;EACF;CACD,sBAAsB;EACpB,cAAc,EAAE,2BAA2B,2BAA2B;EACtE,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;QAiBR,MAAM;GACR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;QAwBV,MAAM;GACT;EACD,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwCV,MAAM,EACT;EACD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCpB,MAAM;EACR,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkDR,MAAM,EACT;EACF;CACF"}
1
+ {"version":3,"file":"db-sync-mappings.js","names":[],"sources":["../../../src/config/db-sync-mappings.ts"],"sourcesContent":["export const DEFAULT_DB_SYNC_MAPPINGS = {\n \"users\": {\n sourceTables: { \"ProjectUser\": \"ProjectUser\" },\n targetTable: \"users\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"users\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"display_name\" text,\n \"profile_image_url\" text,\n \"primary_email\" text,\n \"primary_email_verified\" boolean NOT NULL DEFAULT false,\n \"signed_up_at\" timestamp without time zone NOT NULL,\n \"client_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"client_read_only_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"server_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"is_anonymous\" boolean NOT NULL DEFAULT false\n );\n REVOKE ALL ON \"users\" FROM PUBLIC;\n GRANT SELECT ON \"users\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.users (\n project_id String,\n branch_id String,\n id UUID,\n display_name Nullable(String),\n profile_image_url Nullable(String),\n primary_email Nullable(String),\n primary_email_verified UInt8,\n signed_up_at DateTime64(3, 'UTC'),\n client_metadata String,\n client_read_only_metadata String,\n server_metadata String,\n is_anonymous UInt8,\n restricted_by_admin UInt8,\n restricted_by_admin_reason Nullable(String),\n restricted_by_admin_private_details Nullable(String),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(signed_up_at)\n ORDER BY (project_id, branch_id, id);\n\n CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (\n tenancy_id UUID,\n mapping_name String,\n last_synced_sequence_id Int64,\n updated_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(updated_at)\n ORDER BY (tenancy_id, mapping_name);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ProjectUser\".\"projectUserId\" AS \"id\",\n \"ProjectUser\".\"displayName\" AS \"display_name\",\n \"ProjectUser\".\"profileImageUrl\" AS \"profile_image_url\",\n (\n SELECT \"ContactChannel\".\"value\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"projectUserId\" = \"ProjectUser\".\"projectUserId\"\n AND \"ContactChannel\".\"tenancyId\" = \"ProjectUser\".\"tenancyId\"\n AND \"ContactChannel\".\"type\" = 'EMAIL'\n AND \"ContactChannel\".\"isPrimary\" = 'TRUE'\n LIMIT 1\n ) AS \"primary_email\",\n COALESCE(\n (\n SELECT \"ContactChannel\".\"isVerified\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"projectUserId\" = \"ProjectUser\".\"projectUserId\"\n AND \"ContactChannel\".\"tenancyId\" = \"ProjectUser\".\"tenancyId\"\n AND \"ContactChannel\".\"type\" = 'EMAIL'\n AND \"ContactChannel\".\"isPrimary\" = 'TRUE'\n LIMIT 1\n ),\n false\n ) AS \"primary_email_verified\",\n COALESCE(\"ProjectUser\".\"signedUpAt\", \"ProjectUser\".\"createdAt\") AS \"signed_up_at\",\n COALESCE(\"ProjectUser\".\"clientMetadata\", '{}'::jsonb) AS \"client_metadata\",\n COALESCE(\"ProjectUser\".\"clientReadOnlyMetadata\", '{}'::jsonb) AS \"client_read_only_metadata\",\n COALESCE(\"ProjectUser\".\"serverMetadata\", '{}'::jsonb) AS \"server_metadata\",\n \"ProjectUser\".\"isAnonymous\" AS \"is_anonymous\",\n \"ProjectUser\".\"restrictedByAdmin\" AS \"restricted_by_admin\",\n \"ProjectUser\".\"restrictedByAdminReason\" AS \"restricted_by_admin_reason\",\n \"ProjectUser\".\"restrictedByAdminPrivateDetails\" AS \"restricted_by_admin_private_details\",\n \"ProjectUser\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ProjectUser\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ProjectUser\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ProjectUser\".\"tenancyId\"\n WHERE \"ProjectUser\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n NULL::text AS \"primary_email\",\n false AS \"primary_email_verified\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"signed_up_at\",\n '{}'::jsonb AS \"client_metadata\",\n '{}'::jsonb AS \"client_read_only_metadata\",\n '{}'::jsonb AS \"server_metadata\",\n false AS \"is_anonymous\",\n false AS \"restricted_by_admin\",\n NULL::text AS \"restricted_by_admin_reason\",\n NULL::text AS \"restricted_by_admin_private_details\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUser'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ProjectUser\".\"projectUserId\" AS \"id\",\n \"ProjectUser\".\"displayName\" AS \"display_name\",\n \"ProjectUser\".\"profileImageUrl\" AS \"profile_image_url\",\n (\n SELECT \"ContactChannel\".\"value\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"projectUserId\" = \"ProjectUser\".\"projectUserId\"\n AND \"ContactChannel\".\"tenancyId\" = \"ProjectUser\".\"tenancyId\"\n AND \"ContactChannel\".\"type\" = 'EMAIL'\n AND \"ContactChannel\".\"isPrimary\" = 'TRUE'\n LIMIT 1\n ) AS \"primary_email\",\n COALESCE(\n (\n SELECT \"ContactChannel\".\"isVerified\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"projectUserId\" = \"ProjectUser\".\"projectUserId\"\n AND \"ContactChannel\".\"tenancyId\" = \"ProjectUser\".\"tenancyId\"\n AND \"ContactChannel\".\"type\" = 'EMAIL'\n AND \"ContactChannel\".\"isPrimary\" = 'TRUE'\n LIMIT 1\n ),\n false\n ) AS \"primary_email_verified\",\n COALESCE(\"ProjectUser\".\"signedUpAt\", \"ProjectUser\".\"createdAt\") AS \"signed_up_at\",\n COALESCE(\"ProjectUser\".\"clientMetadata\", '{}'::jsonb) AS \"client_metadata\",\n COALESCE(\"ProjectUser\".\"clientReadOnlyMetadata\", '{}'::jsonb) AS \"client_read_only_metadata\",\n COALESCE(\"ProjectUser\".\"serverMetadata\", '{}'::jsonb) AS \"server_metadata\",\n \"ProjectUser\".\"isAnonymous\" AS \"is_anonymous\",\n \"ProjectUser\".\"sequenceId\" AS \"sequence_id\",\n \"ProjectUser\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ProjectUser\"\n WHERE \"ProjectUser\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n NULL::text AS \"primary_email\",\n false AS \"primary_email_verified\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"signed_up_at\",\n '{}'::jsonb AS \"client_metadata\",\n '{}'::jsonb AS \"client_read_only_metadata\",\n '{}'::jsonb AS \"server_metadata\",\n false AS \"is_anonymous\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUser'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n // Last parameter = mapping_name (for metadata tracking)\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::text AS \"display_name\",\n $3::text AS \"profile_image_url\",\n $4::text AS \"primary_email\",\n $5::boolean AS \"primary_email_verified\",\n $6::timestamp without time zone AS \"signed_up_at\",\n $7::jsonb AS \"client_metadata\",\n $8::jsonb AS \"client_read_only_metadata\",\n $9::jsonb AS \"server_metadata\",\n $10::boolean AS \"is_anonymous\",\n $11::bigint AS \"sequence_id\",\n $12::boolean AS \"is_deleted\",\n $13::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"users\" u\n USING params p\n WHERE p.\"is_deleted\" = true AND u.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"users\" (\n \"id\",\n \"display_name\",\n \"profile_image_url\",\n \"primary_email\",\n \"primary_email_verified\",\n \"signed_up_at\",\n \"client_metadata\",\n \"client_read_only_metadata\",\n \"server_metadata\",\n \"is_anonymous\"\n )\n SELECT\n p.\"id\",\n p.\"display_name\",\n p.\"profile_image_url\",\n p.\"primary_email\",\n p.\"primary_email_verified\",\n p.\"signed_up_at\",\n p.\"client_metadata\",\n p.\"client_read_only_metadata\",\n p.\"server_metadata\",\n p.\"is_anonymous\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"display_name\" = EXCLUDED.\"display_name\",\n \"profile_image_url\" = EXCLUDED.\"profile_image_url\",\n \"primary_email\" = EXCLUDED.\"primary_email\",\n \"primary_email_verified\" = EXCLUDED.\"primary_email_verified\",\n \"signed_up_at\" = EXCLUDED.\"signed_up_at\",\n \"client_metadata\" = EXCLUDED.\"client_metadata\",\n \"client_read_only_metadata\" = EXCLUDED.\"client_read_only_metadata\",\n \"server_metadata\" = EXCLUDED.\"server_metadata\",\n \"is_anonymous\" = EXCLUDED.\"is_anonymous\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"contact_channels\": {\n sourceTables: { \"ContactChannel\": \"ContactChannel\" },\n targetTable: \"contact_channels\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"contact_channels\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"type\" text NOT NULL,\n \"value\" text NOT NULL,\n \"is_primary\" boolean NOT NULL DEFAULT false,\n \"is_verified\" boolean NOT NULL DEFAULT false,\n \"used_for_auth\" boolean NOT NULL DEFAULT false,\n \"created_at\" timestamp without time zone NOT NULL\n );\n REVOKE ALL ON \"contact_channels\" FROM PUBLIC;\n GRANT SELECT ON \"contact_channels\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.contact_channels (\n project_id String,\n branch_id String,\n id UUID,\n user_id UUID,\n type LowCardinality(String),\n value String,\n is_primary UInt8,\n is_verified UInt8,\n used_for_auth UInt8,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ContactChannel\".\"id\" AS \"id\",\n \"ContactChannel\".\"projectUserId\" AS \"user_id\",\n \"ContactChannel\".\"type\"::text AS \"type\",\n \"ContactChannel\".\"value\" AS \"value\",\n CASE WHEN \"ContactChannel\".\"isPrimary\" = 'TRUE' THEN true ELSE false END AS \"is_primary\",\n \"ContactChannel\".\"isVerified\" AS \"is_verified\",\n CASE WHEN \"ContactChannel\".\"usedForAuth\" = 'TRUE' THEN true ELSE false END AS \"used_for_auth\",\n \"ContactChannel\".\"createdAt\" AS \"created_at\",\n \"ContactChannel\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ContactChannel\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ContactChannel\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ContactChannel\".\"tenancyId\"\n WHERE \"ContactChannel\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"type\",\n NULL::text AS \"value\",\n false AS \"is_primary\",\n false AS \"is_verified\",\n false AS \"used_for_auth\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ContactChannel'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ContactChannel\".\"id\" AS \"id\",\n \"ContactChannel\".\"projectUserId\" AS \"user_id\",\n \"ContactChannel\".\"type\"::text AS \"type\",\n \"ContactChannel\".\"value\" AS \"value\",\n CASE WHEN \"ContactChannel\".\"isPrimary\" = 'TRUE' THEN true ELSE false END AS \"is_primary\",\n \"ContactChannel\".\"isVerified\" AS \"is_verified\",\n CASE WHEN \"ContactChannel\".\"usedForAuth\" = 'TRUE' THEN true ELSE false END AS \"used_for_auth\",\n \"ContactChannel\".\"createdAt\" AS \"created_at\",\n \"ContactChannel\".\"sequenceId\" AS \"sequence_id\",\n \"ContactChannel\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ContactChannel\"\n WHERE \"ContactChannel\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"type\",\n NULL::text AS \"value\",\n false AS \"is_primary\",\n false AS \"is_verified\",\n false AS \"used_for_auth\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ContactChannel'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"type\",\n $4::text AS \"value\",\n $5::boolean AS \"is_primary\",\n $6::boolean AS \"is_verified\",\n $7::boolean AS \"used_for_auth\",\n $8::timestamp without time zone AS \"created_at\",\n $9::bigint AS \"sequence_id\",\n $10::boolean AS \"is_deleted\",\n $11::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"contact_channels\" c\n USING params p\n WHERE p.\"is_deleted\" = true AND c.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"contact_channels\" (\n \"id\",\n \"user_id\",\n \"type\",\n \"value\",\n \"is_primary\",\n \"is_verified\",\n \"used_for_auth\",\n \"created_at\"\n )\n SELECT\n p.\"id\",\n p.\"user_id\",\n p.\"type\",\n p.\"value\",\n p.\"is_primary\",\n p.\"is_verified\",\n p.\"used_for_auth\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"user_id\" = EXCLUDED.\"user_id\",\n \"type\" = EXCLUDED.\"type\",\n \"value\" = EXCLUDED.\"value\",\n \"is_primary\" = EXCLUDED.\"is_primary\",\n \"is_verified\" = EXCLUDED.\"is_verified\",\n \"used_for_auth\" = EXCLUDED.\"used_for_auth\",\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"teams\": {\n sourceTables: { \"Team\": \"Team\" },\n targetTable: \"teams\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"teams\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"display_name\" text NOT NULL,\n \"profile_image_url\" text,\n \"created_at\" timestamp without time zone NOT NULL,\n \"client_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"client_read_only_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb,\n \"server_metadata\" jsonb NOT NULL DEFAULT '{}'::jsonb\n );\n REVOKE ALL ON \"teams\" FROM PUBLIC;\n GRANT SELECT ON \"teams\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.teams (\n project_id String,\n branch_id String,\n id UUID,\n display_name String,\n profile_image_url Nullable(String),\n created_at DateTime64(3, 'UTC'),\n client_metadata String,\n client_read_only_metadata String,\n server_metadata String,\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"Team\".\"teamId\" AS \"id\",\n \"Team\".\"displayName\" AS \"display_name\",\n \"Team\".\"profileImageUrl\" AS \"profile_image_url\",\n \"Team\".\"createdAt\" AS \"created_at\",\n COALESCE(\"Team\".\"clientMetadata\", '{}'::jsonb) AS \"client_metadata\",\n COALESCE(\"Team\".\"clientReadOnlyMetadata\", '{}'::jsonb) AS \"client_read_only_metadata\",\n COALESCE(\"Team\".\"serverMetadata\", '{}'::jsonb) AS \"server_metadata\",\n \"Team\".\"sequenceId\" AS \"sync_sequence_id\",\n \"Team\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"Team\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"Team\".\"tenancyId\"\n WHERE \"Team\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n '{}'::jsonb AS \"client_metadata\",\n '{}'::jsonb AS \"client_read_only_metadata\",\n '{}'::jsonb AS \"server_metadata\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'Team'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"Team\".\"teamId\" AS \"id\",\n \"Team\".\"displayName\" AS \"display_name\",\n \"Team\".\"profileImageUrl\" AS \"profile_image_url\",\n \"Team\".\"createdAt\" AS \"created_at\",\n COALESCE(\"Team\".\"clientMetadata\", '{}'::jsonb) AS \"client_metadata\",\n COALESCE(\"Team\".\"clientReadOnlyMetadata\", '{}'::jsonb) AS \"client_read_only_metadata\",\n COALESCE(\"Team\".\"serverMetadata\", '{}'::jsonb) AS \"server_metadata\",\n \"Team\".\"sequenceId\" AS \"sequence_id\",\n \"Team\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"Team\"\n WHERE \"Team\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n '{}'::jsonb AS \"client_metadata\",\n '{}'::jsonb AS \"client_read_only_metadata\",\n '{}'::jsonb AS \"server_metadata\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'Team'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::text AS \"display_name\",\n $3::text AS \"profile_image_url\",\n $4::timestamp without time zone AS \"created_at\",\n $5::jsonb AS \"client_metadata\",\n $6::jsonb AS \"client_read_only_metadata\",\n $7::jsonb AS \"server_metadata\",\n $8::bigint AS \"sequence_id\",\n $9::boolean AS \"is_deleted\",\n $10::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"teams\" t\n USING params p\n WHERE p.\"is_deleted\" = true AND t.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"teams\" (\n \"id\",\n \"display_name\",\n \"profile_image_url\",\n \"created_at\",\n \"client_metadata\",\n \"client_read_only_metadata\",\n \"server_metadata\"\n )\n SELECT\n p.\"id\",\n p.\"display_name\",\n p.\"profile_image_url\",\n p.\"created_at\",\n p.\"client_metadata\",\n p.\"client_read_only_metadata\",\n p.\"server_metadata\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"display_name\" = EXCLUDED.\"display_name\",\n \"profile_image_url\" = EXCLUDED.\"profile_image_url\",\n \"created_at\" = EXCLUDED.\"created_at\",\n \"client_metadata\" = EXCLUDED.\"client_metadata\",\n \"client_read_only_metadata\" = EXCLUDED.\"client_read_only_metadata\",\n \"server_metadata\" = EXCLUDED.\"server_metadata\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"team_member_profiles\": {\n sourceTables: { \"TeamMember\": \"TeamMember\" },\n targetTable: \"team_member_profiles\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"team_member_profiles\" (\n \"team_id\" uuid NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"display_name\" text,\n \"profile_image_url\" text,\n \"created_at\" timestamp without time zone NOT NULL,\n PRIMARY KEY (\"team_id\", \"user_id\")\n );\n REVOKE ALL ON \"team_member_profiles\" FROM PUBLIC;\n GRANT SELECT ON \"team_member_profiles\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.team_member_profiles (\n project_id String,\n branch_id String,\n team_id UUID,\n user_id UUID,\n display_name Nullable(String),\n profile_image_url Nullable(String),\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, team_id, user_id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"TeamMember\".\"teamId\" AS \"team_id\",\n \"TeamMember\".\"projectUserId\" AS \"user_id\",\n \"TeamMember\".\"displayName\" AS \"display_name\",\n \"TeamMember\".\"profileImageUrl\" AS \"profile_image_url\",\n \"TeamMember\".\"createdAt\" AS \"created_at\",\n \"TeamMember\".\"sequenceId\" AS \"sync_sequence_id\",\n \"TeamMember\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"TeamMember\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"TeamMember\".\"tenancyId\"\n WHERE \"TeamMember\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"team_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'TeamMember'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"TeamMember\".\"teamId\" AS \"team_id\",\n \"TeamMember\".\"projectUserId\" AS \"user_id\",\n \"TeamMember\".\"displayName\" AS \"display_name\",\n \"TeamMember\".\"profileImageUrl\" AS \"profile_image_url\",\n \"TeamMember\".\"createdAt\" AS \"created_at\",\n \"TeamMember\".\"sequenceId\" AS \"sequence_id\",\n \"TeamMember\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"TeamMember\"\n WHERE \"TeamMember\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"team_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"display_name\",\n NULL::text AS \"profile_image_url\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'TeamMember'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"team_id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"display_name\",\n $4::text AS \"profile_image_url\",\n $5::timestamp without time zone AS \"created_at\",\n $6::bigint AS \"sequence_id\",\n $7::boolean AS \"is_deleted\",\n $8::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"team_member_profiles\" tm\n USING params p\n WHERE p.\"is_deleted\" = true AND tm.\"team_id\" = p.\"team_id\" AND tm.\"user_id\" = p.\"user_id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"team_member_profiles\" (\n \"team_id\",\n \"user_id\",\n \"display_name\",\n \"profile_image_url\",\n \"created_at\"\n )\n SELECT\n p.\"team_id\",\n p.\"user_id\",\n p.\"display_name\",\n p.\"profile_image_url\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"team_id\", \"user_id\") DO UPDATE SET\n \"display_name\" = EXCLUDED.\"display_name\",\n \"profile_image_url\" = EXCLUDED.\"profile_image_url\",\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"team_permissions\": {\n sourceTables: { \"TeamMemberDirectPermission\": \"TeamMemberDirectPermission\" },\n targetTable: \"team_permissions\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"team_permissions\" (\n \"team_id\" uuid NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"permission_id\" text NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL,\n PRIMARY KEY (\"team_id\", \"user_id\", \"permission_id\")\n );\n REVOKE ALL ON \"team_permissions\" FROM PUBLIC;\n GRANT SELECT ON \"team_permissions\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.team_permissions (\n project_id String,\n branch_id String,\n team_id UUID,\n user_id UUID,\n id String,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, team_id, user_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"TeamMemberDirectPermission\".\"teamId\" AS \"team_id\",\n \"TeamMemberDirectPermission\".\"projectUserId\" AS \"user_id\",\n \"TeamMemberDirectPermission\".\"permissionId\" AS \"id\",\n \"TeamMemberDirectPermission\".\"createdAt\" AS \"created_at\",\n \"TeamMemberDirectPermission\".\"sequenceId\" AS \"sync_sequence_id\",\n \"TeamMemberDirectPermission\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"TeamMemberDirectPermission\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"TeamMemberDirectPermission\".\"tenancyId\"\n WHERE \"TeamMemberDirectPermission\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"team_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"primaryKey\"->>'permissionId' AS \"id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'TeamMemberDirectPermission'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"TeamMemberDirectPermission\".\"teamId\" AS \"team_id\",\n \"TeamMemberDirectPermission\".\"projectUserId\" AS \"user_id\",\n \"TeamMemberDirectPermission\".\"permissionId\" AS \"permission_id\",\n \"TeamMemberDirectPermission\".\"createdAt\" AS \"created_at\",\n \"TeamMemberDirectPermission\".\"sequenceId\" AS \"sequence_id\",\n \"TeamMemberDirectPermission\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"TeamMemberDirectPermission\"\n WHERE \"TeamMemberDirectPermission\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'teamId')::uuid AS \"team_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"primaryKey\"->>'permissionId' AS \"id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'TeamMemberDirectPermission'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"team_id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"permission_id\",\n $4::timestamp without time zone AS \"created_at\",\n $5::bigint AS \"sequence_id\",\n $6::boolean AS \"is_deleted\",\n $7::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"team_permissions\" tp\n USING params p\n 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\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"team_permissions\" (\n \"team_id\",\n \"user_id\",\n \"permission_id\",\n \"created_at\"\n )\n SELECT\n p.\"team_id\",\n p.\"user_id\",\n p.\"permission_id\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"team_id\", \"user_id\", \"permission_id\") DO UPDATE SET\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"team_invitations\": {\n sourceTables: { \"VerificationCode\": \"VerificationCode\" },\n targetTable: \"team_invitations\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"team_invitations\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"team_id\" uuid NOT NULL,\n \"team_display_name\" text NOT NULL,\n \"recipient_email\" text NOT NULL,\n \"expires_at_millis\" bigint NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL\n );\n REVOKE ALL ON \"team_invitations\" FROM PUBLIC;\n GRANT SELECT ON \"team_invitations\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.team_invitations (\n project_id String,\n branch_id String,\n id UUID,\n team_id UUID,\n team_display_name String,\n recipient_email String,\n expires_at_millis Int64,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"VerificationCode\".\"id\"::uuid AS \"id\",\n (\"VerificationCode\".\"data\"->>'team_id')::uuid AS \"team_id\",\n \"Team\".\"displayName\" AS \"team_display_name\",\n \"VerificationCode\".\"method\"->>'email' AS \"recipient_email\",\n FLOOR(EXTRACT(EPOCH FROM \"VerificationCode\".\"expiresAt\") * 1000)::bigint AS \"expires_at_millis\",\n \"VerificationCode\".\"createdAt\" AS \"created_at\",\n \"VerificationCode\".\"sequenceId\" AS \"sync_sequence_id\",\n \"Tenancy\".\"id\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"VerificationCode\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"projectId\" = \"VerificationCode\".\"projectId\"\n AND \"Tenancy\".\"branchId\" = \"VerificationCode\".\"branchId\"\n LEFT JOIN \"Team\" ON \"Team\".\"teamId\" = (\"VerificationCode\".\"data\"->>'team_id')::uuid\n AND \"Team\".\"tenancyId\" = \"Tenancy\".\"id\"\n WHERE \"Tenancy\".\"id\" = $1::uuid\n AND \"VerificationCode\".\"type\" = 'TEAM_INVITATION'\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n '00000000-0000-0000-0000-000000000000'::uuid AS \"team_id\",\n ''::text AS \"team_display_name\",\n ''::text AS \"recipient_email\",\n 0::bigint AS \"expires_at_millis\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'VerificationCode_TEAM_INVITATION'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"VerificationCode\".\"id\"::uuid AS \"id\",\n (\"VerificationCode\".\"data\"->>'team_id')::uuid AS \"team_id\",\n \"Team\".\"displayName\" AS \"team_display_name\",\n \"VerificationCode\".\"method\"->>'email' AS \"recipient_email\",\n FLOOR(EXTRACT(EPOCH FROM \"VerificationCode\".\"expiresAt\") * 1000)::bigint AS \"expires_at_millis\",\n \"VerificationCode\".\"createdAt\" AS \"created_at\",\n \"VerificationCode\".\"sequenceId\" AS \"sequence_id\",\n \"Tenancy\".\"id\" AS \"tenancyId\",\n false AS \"is_deleted\"\n FROM \"VerificationCode\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"projectId\" = \"VerificationCode\".\"projectId\"\n AND \"Tenancy\".\"branchId\" = \"VerificationCode\".\"branchId\"\n LEFT JOIN \"Team\" ON \"Team\".\"teamId\" = (\"VerificationCode\".\"data\"->>'team_id')::uuid\n AND \"Team\".\"tenancyId\" = \"Tenancy\".\"id\"\n WHERE \"Tenancy\".\"id\" = $1::uuid\n AND \"VerificationCode\".\"type\" = 'TEAM_INVITATION'\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n '00000000-0000-0000-0000-000000000000'::uuid AS \"team_id\",\n ''::text AS \"team_display_name\",\n ''::text AS \"recipient_email\",\n 0::bigint AS \"expires_at_millis\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'VerificationCode_TEAM_INVITATION'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"team_id\",\n $3::text AS \"team_display_name\",\n $4::text AS \"recipient_email\",\n $5::bigint AS \"expires_at_millis\",\n $6::timestamp without time zone AS \"created_at\",\n $7::bigint AS \"sequence_id\",\n $8::boolean AS \"is_deleted\",\n $9::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"team_invitations\" ti\n USING params p\n WHERE p.\"is_deleted\" = true AND ti.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"team_invitations\" (\n \"id\",\n \"team_id\",\n \"team_display_name\",\n \"recipient_email\",\n \"expires_at_millis\",\n \"created_at\"\n )\n SELECT\n p.\"id\",\n p.\"team_id\",\n p.\"team_display_name\",\n p.\"recipient_email\",\n p.\"expires_at_millis\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"team_id\" = EXCLUDED.\"team_id\",\n \"team_display_name\" = EXCLUDED.\"team_display_name\",\n \"recipient_email\" = EXCLUDED.\"recipient_email\",\n \"expires_at_millis\" = EXCLUDED.\"expires_at_millis\",\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"email_outboxes\": {\n sourceTables: { \"EmailOutbox\": \"EmailOutbox\" },\n targetTable: \"email_outboxes\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"email_outboxes\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"status\" text NOT NULL,\n \"simple_status\" text NOT NULL,\n \"created_with\" text NOT NULL,\n \"email_draft_id\" text,\n \"email_programmatic_call_template_id\" text,\n \"theme_id\" text,\n \"is_high_priority\" boolean NOT NULL DEFAULT false,\n \"rendered_is_transactional\" boolean,\n \"rendered_subject\" text,\n \"rendered_notification_category_id\" text,\n \"started_rendering_at\" timestamp without time zone,\n \"finished_rendering_at\" timestamp without time zone,\n \"render_error\" text,\n \"scheduled_at\" timestamp without time zone NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL,\n \"started_sending_at\" timestamp without time zone,\n \"finished_sending_at\" timestamp without time zone,\n \"server_error\" text,\n \"sent_at\" timestamp without time zone,\n \"delivered_at\" timestamp without time zone,\n \"opened_at\" timestamp without time zone,\n \"clicked_at\" timestamp without time zone,\n \"unsubscribed_at\" timestamp without time zone,\n \"marked_as_spam_at\" timestamp without time zone,\n \"bounced_at\" timestamp without time zone,\n \"delivery_delayed_at\" timestamp without time zone,\n \"can_have_delivery_info\" boolean,\n \"skipped_reason\" text,\n \"skipped_details\" jsonb,\n \"send_retries\" integer NOT NULL DEFAULT 0,\n \"is_paused\" boolean NOT NULL DEFAULT false\n );\n REVOKE ALL ON \"email_outboxes\" FROM PUBLIC;\n GRANT SELECT ON \"email_outboxes\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.email_outboxes (\n project_id String,\n branch_id String,\n id UUID,\n status LowCardinality(String),\n simple_status LowCardinality(String),\n created_with LowCardinality(String),\n email_draft_id Nullable(String),\n email_programmatic_call_template_id Nullable(String),\n theme_id Nullable(String),\n is_high_priority UInt8,\n is_transactional Nullable(UInt8),\n subject Nullable(String),\n notification_category_id Nullable(String),\n started_rendering_at Nullable(DateTime64(3, 'UTC')),\n rendered_at Nullable(DateTime64(3, 'UTC')),\n render_error Nullable(String),\n scheduled_at DateTime64(3, 'UTC'),\n created_at DateTime64(3, 'UTC'),\n updated_at DateTime64(3, 'UTC'),\n started_sending_at Nullable(DateTime64(3, 'UTC')),\n server_error Nullable(String),\n delivered_at Nullable(DateTime64(3, 'UTC')),\n opened_at Nullable(DateTime64(3, 'UTC')),\n clicked_at Nullable(DateTime64(3, 'UTC')),\n unsubscribed_at Nullable(DateTime64(3, 'UTC')),\n marked_as_spam_at Nullable(DateTime64(3, 'UTC')),\n bounced_at Nullable(DateTime64(3, 'UTC')),\n delivery_delayed_at Nullable(DateTime64(3, 'UTC')),\n can_have_delivery_info Nullable(UInt8),\n skipped_reason LowCardinality(Nullable(String)),\n skipped_details Nullable(String),\n send_retries Int32,\n is_paused UInt8,\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"EmailOutbox\".\"id\" AS \"id\",\n LOWER(REPLACE(\"EmailOutbox\".\"status\"::text, '_', '-')) AS \"status\",\n LOWER(REPLACE(\"EmailOutbox\".\"simpleStatus\"::text, '_', '-')) AS \"simple_status\",\n CASE WHEN \"EmailOutbox\".\"createdWith\"::text = 'DRAFT' THEN 'draft' ELSE 'programmatic-call' END AS \"created_with\",\n \"EmailOutbox\".\"emailDraftId\" AS \"email_draft_id\",\n \"EmailOutbox\".\"emailProgrammaticCallTemplateId\" AS \"email_programmatic_call_template_id\",\n \"EmailOutbox\".\"themeId\" AS \"theme_id\",\n \"EmailOutbox\".\"isHighPriority\" AS \"is_high_priority\",\n \"EmailOutbox\".\"renderedIsTransactional\" AS \"is_transactional\",\n \"EmailOutbox\".\"renderedSubject\" AS \"subject\",\n \"EmailOutbox\".\"renderedNotificationCategoryId\" AS \"notification_category_id\",\n \"EmailOutbox\".\"startedRenderingAt\" AS \"started_rendering_at\",\n \"EmailOutbox\".\"finishedRenderingAt\" AS \"rendered_at\",\n \"EmailOutbox\".\"renderErrorExternalMessage\" AS \"render_error\",\n \"EmailOutbox\".\"scheduledAt\" AS \"scheduled_at\",\n \"EmailOutbox\".\"createdAt\" AS \"created_at\",\n \"EmailOutbox\".\"updatedAt\" AS \"updated_at\",\n \"EmailOutbox\".\"startedSendingAt\" AS \"started_sending_at\",\n \"EmailOutbox\".\"sendServerErrorExternalMessage\" AS \"server_error\",\n \"EmailOutbox\".\"deliveredAt\" AS \"delivered_at\",\n \"EmailOutbox\".\"openedAt\" AS \"opened_at\",\n \"EmailOutbox\".\"clickedAt\" AS \"clicked_at\",\n \"EmailOutbox\".\"unsubscribedAt\" AS \"unsubscribed_at\",\n \"EmailOutbox\".\"markedAsSpamAt\" AS \"marked_as_spam_at\",\n \"EmailOutbox\".\"bouncedAt\" AS \"bounced_at\",\n \"EmailOutbox\".\"deliveryDelayedAt\" AS \"delivery_delayed_at\",\n \"EmailOutbox\".\"canHaveDeliveryInfo\" AS \"can_have_delivery_info\",\n LOWER(REPLACE(\"EmailOutbox\".\"skippedReason\"::text, '_', '-')) AS \"skipped_reason\",\n \"EmailOutbox\".\"skippedDetails\" AS \"skipped_details\",\n \"EmailOutbox\".\"sendRetries\" AS \"send_retries\",\n \"EmailOutbox\".\"isPaused\" AS \"is_paused\",\n \"EmailOutbox\".\"sequenceId\" AS \"sync_sequence_id\",\n \"EmailOutbox\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"EmailOutbox\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"EmailOutbox\".\"tenancyId\"\n WHERE \"EmailOutbox\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n ''::text AS \"status\",\n ''::text AS \"simple_status\",\n ''::text AS \"created_with\",\n NULL::text AS \"email_draft_id\",\n NULL::text AS \"email_programmatic_call_template_id\",\n NULL::text AS \"theme_id\",\n false AS \"is_high_priority\",\n NULL::boolean AS \"is_transactional\",\n NULL::text AS \"subject\",\n NULL::text AS \"notification_category_id\",\n NULL::timestamp without time zone AS \"started_rendering_at\",\n NULL::timestamp without time zone AS \"rendered_at\",\n NULL::text AS \"render_error\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"scheduled_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"updated_at\",\n NULL::timestamp without time zone AS \"started_sending_at\",\n NULL::text AS \"server_error\",\n NULL::timestamp without time zone AS \"delivered_at\",\n NULL::timestamp without time zone AS \"opened_at\",\n NULL::timestamp without time zone AS \"clicked_at\",\n NULL::timestamp without time zone AS \"unsubscribed_at\",\n NULL::timestamp without time zone AS \"marked_as_spam_at\",\n NULL::timestamp without time zone AS \"bounced_at\",\n NULL::timestamp without time zone AS \"delivery_delayed_at\",\n NULL::boolean AS \"can_have_delivery_info\",\n NULL::text AS \"skipped_reason\",\n NULL::jsonb AS \"skipped_details\",\n 0 AS \"send_retries\",\n false AS \"is_paused\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'EmailOutbox'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"EmailOutbox\".\"id\" AS \"id\",\n \"EmailOutbox\".\"status\"::text AS \"status\",\n \"EmailOutbox\".\"simpleStatus\"::text AS \"simple_status\",\n \"EmailOutbox\".\"createdWith\"::text AS \"created_with\",\n \"EmailOutbox\".\"emailDraftId\" AS \"email_draft_id\",\n \"EmailOutbox\".\"emailProgrammaticCallTemplateId\" AS \"email_programmatic_call_template_id\",\n \"EmailOutbox\".\"themeId\" AS \"theme_id\",\n \"EmailOutbox\".\"isHighPriority\" AS \"is_high_priority\",\n \"EmailOutbox\".\"renderedIsTransactional\" AS \"rendered_is_transactional\",\n \"EmailOutbox\".\"renderedSubject\" AS \"rendered_subject\",\n \"EmailOutbox\".\"renderedNotificationCategoryId\" AS \"rendered_notification_category_id\",\n \"EmailOutbox\".\"startedRenderingAt\" AS \"started_rendering_at\",\n \"EmailOutbox\".\"finishedRenderingAt\" AS \"finished_rendering_at\",\n \"EmailOutbox\".\"renderErrorExternalMessage\" AS \"render_error\",\n \"EmailOutbox\".\"scheduledAt\" AS \"scheduled_at\",\n \"EmailOutbox\".\"createdAt\" AS \"created_at\",\n \"EmailOutbox\".\"startedSendingAt\" AS \"started_sending_at\",\n \"EmailOutbox\".\"finishedSendingAt\" AS \"finished_sending_at\",\n \"EmailOutbox\".\"sendServerErrorExternalMessage\" AS \"server_error\",\n \"EmailOutbox\".\"sentAt\" AS \"sent_at\",\n \"EmailOutbox\".\"deliveredAt\" AS \"delivered_at\",\n \"EmailOutbox\".\"openedAt\" AS \"opened_at\",\n \"EmailOutbox\".\"clickedAt\" AS \"clicked_at\",\n \"EmailOutbox\".\"unsubscribedAt\" AS \"unsubscribed_at\",\n \"EmailOutbox\".\"markedAsSpamAt\" AS \"marked_as_spam_at\",\n \"EmailOutbox\".\"bouncedAt\" AS \"bounced_at\",\n \"EmailOutbox\".\"deliveryDelayedAt\" AS \"delivery_delayed_at\",\n \"EmailOutbox\".\"canHaveDeliveryInfo\" AS \"can_have_delivery_info\",\n \"EmailOutbox\".\"skippedReason\"::text AS \"skipped_reason\",\n \"EmailOutbox\".\"skippedDetails\" AS \"skipped_details\",\n \"EmailOutbox\".\"sendRetries\" AS \"send_retries\",\n \"EmailOutbox\".\"isPaused\" AS \"is_paused\",\n \"EmailOutbox\".\"sequenceId\" AS \"sequence_id\",\n \"EmailOutbox\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"EmailOutbox\"\n WHERE \"EmailOutbox\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n ''::text AS \"status\",\n ''::text AS \"simple_status\",\n ''::text AS \"created_with\",\n NULL::text AS \"email_draft_id\",\n NULL::text AS \"email_programmatic_call_template_id\",\n NULL::text AS \"theme_id\",\n false AS \"is_high_priority\",\n NULL::boolean AS \"rendered_is_transactional\",\n NULL::text AS \"rendered_subject\",\n NULL::text AS \"rendered_notification_category_id\",\n NULL::timestamp without time zone AS \"started_rendering_at\",\n NULL::timestamp without time zone AS \"finished_rendering_at\",\n NULL::text AS \"render_error\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"scheduled_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n NULL::timestamp without time zone AS \"started_sending_at\",\n NULL::timestamp without time zone AS \"finished_sending_at\",\n NULL::text AS \"server_error\",\n NULL::timestamp without time zone AS \"sent_at\",\n NULL::timestamp without time zone AS \"delivered_at\",\n NULL::timestamp without time zone AS \"opened_at\",\n NULL::timestamp without time zone AS \"clicked_at\",\n NULL::timestamp without time zone AS \"unsubscribed_at\",\n NULL::timestamp without time zone AS \"marked_as_spam_at\",\n NULL::timestamp without time zone AS \"bounced_at\",\n NULL::timestamp without time zone AS \"delivery_delayed_at\",\n NULL::boolean AS \"can_have_delivery_info\",\n NULL::text AS \"skipped_reason\",\n NULL::jsonb AS \"skipped_details\",\n 0 AS \"send_retries\",\n false AS \"is_paused\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'EmailOutbox'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::text AS \"status\",\n $3::text AS \"simple_status\",\n $4::text AS \"created_with\",\n $5::text AS \"email_draft_id\",\n $6::text AS \"email_programmatic_call_template_id\",\n $7::text AS \"theme_id\",\n $8::boolean AS \"is_high_priority\",\n $9::boolean AS \"rendered_is_transactional\",\n $10::text AS \"rendered_subject\",\n $11::text AS \"rendered_notification_category_id\",\n $12::timestamp without time zone AS \"started_rendering_at\",\n $13::timestamp without time zone AS \"finished_rendering_at\",\n $14::text AS \"render_error\",\n $15::timestamp without time zone AS \"scheduled_at\",\n $16::timestamp without time zone AS \"created_at\",\n $17::timestamp without time zone AS \"started_sending_at\",\n $18::timestamp without time zone AS \"finished_sending_at\",\n $19::text AS \"server_error\",\n $20::timestamp without time zone AS \"sent_at\",\n $21::timestamp without time zone AS \"delivered_at\",\n $22::timestamp without time zone AS \"opened_at\",\n $23::timestamp without time zone AS \"clicked_at\",\n $24::timestamp without time zone AS \"unsubscribed_at\",\n $25::timestamp without time zone AS \"marked_as_spam_at\",\n $26::timestamp without time zone AS \"bounced_at\",\n $27::timestamp without time zone AS \"delivery_delayed_at\",\n $28::boolean AS \"can_have_delivery_info\",\n $29::text AS \"skipped_reason\",\n $30::jsonb AS \"skipped_details\",\n $31::integer AS \"send_retries\",\n $32::boolean AS \"is_paused\",\n $33::bigint AS \"sequence_id\",\n $34::boolean AS \"is_deleted\",\n $35::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"email_outboxes\" eo\n USING params p\n WHERE p.\"is_deleted\" = true AND eo.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"email_outboxes\" (\n \"id\",\n \"status\",\n \"simple_status\",\n \"created_with\",\n \"email_draft_id\",\n \"email_programmatic_call_template_id\",\n \"theme_id\",\n \"is_high_priority\",\n \"rendered_is_transactional\",\n \"rendered_subject\",\n \"rendered_notification_category_id\",\n \"started_rendering_at\",\n \"finished_rendering_at\",\n \"render_error\",\n \"scheduled_at\",\n \"created_at\",\n \"started_sending_at\",\n \"finished_sending_at\",\n \"server_error\",\n \"sent_at\",\n \"delivered_at\",\n \"opened_at\",\n \"clicked_at\",\n \"unsubscribed_at\",\n \"marked_as_spam_at\",\n \"bounced_at\",\n \"delivery_delayed_at\",\n \"can_have_delivery_info\",\n \"skipped_reason\",\n \"skipped_details\",\n \"send_retries\",\n \"is_paused\"\n )\n SELECT\n p.\"id\",\n p.\"status\",\n p.\"simple_status\",\n p.\"created_with\",\n p.\"email_draft_id\",\n p.\"email_programmatic_call_template_id\",\n p.\"theme_id\",\n p.\"is_high_priority\",\n p.\"rendered_is_transactional\",\n p.\"rendered_subject\",\n p.\"rendered_notification_category_id\",\n p.\"started_rendering_at\",\n p.\"finished_rendering_at\",\n p.\"render_error\",\n p.\"scheduled_at\",\n p.\"created_at\",\n p.\"started_sending_at\",\n p.\"finished_sending_at\",\n p.\"server_error\",\n p.\"sent_at\",\n p.\"delivered_at\",\n p.\"opened_at\",\n p.\"clicked_at\",\n p.\"unsubscribed_at\",\n p.\"marked_as_spam_at\",\n p.\"bounced_at\",\n p.\"delivery_delayed_at\",\n p.\"can_have_delivery_info\",\n p.\"skipped_reason\",\n p.\"skipped_details\",\n p.\"send_retries\",\n p.\"is_paused\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"status\" = EXCLUDED.\"status\",\n \"simple_status\" = EXCLUDED.\"simple_status\",\n \"created_with\" = EXCLUDED.\"created_with\",\n \"email_draft_id\" = EXCLUDED.\"email_draft_id\",\n \"email_programmatic_call_template_id\" = EXCLUDED.\"email_programmatic_call_template_id\",\n \"theme_id\" = EXCLUDED.\"theme_id\",\n \"is_high_priority\" = EXCLUDED.\"is_high_priority\",\n \"rendered_is_transactional\" = EXCLUDED.\"rendered_is_transactional\",\n \"rendered_subject\" = EXCLUDED.\"rendered_subject\",\n \"rendered_notification_category_id\" = EXCLUDED.\"rendered_notification_category_id\",\n \"started_rendering_at\" = EXCLUDED.\"started_rendering_at\",\n \"finished_rendering_at\" = EXCLUDED.\"finished_rendering_at\",\n \"render_error\" = EXCLUDED.\"render_error\",\n \"scheduled_at\" = EXCLUDED.\"scheduled_at\",\n \"created_at\" = EXCLUDED.\"created_at\",\n \"started_sending_at\" = EXCLUDED.\"started_sending_at\",\n \"finished_sending_at\" = EXCLUDED.\"finished_sending_at\",\n \"server_error\" = EXCLUDED.\"server_error\",\n \"sent_at\" = EXCLUDED.\"sent_at\",\n \"delivered_at\" = EXCLUDED.\"delivered_at\",\n \"opened_at\" = EXCLUDED.\"opened_at\",\n \"clicked_at\" = EXCLUDED.\"clicked_at\",\n \"unsubscribed_at\" = EXCLUDED.\"unsubscribed_at\",\n \"marked_as_spam_at\" = EXCLUDED.\"marked_as_spam_at\",\n \"bounced_at\" = EXCLUDED.\"bounced_at\",\n \"delivery_delayed_at\" = EXCLUDED.\"delivery_delayed_at\",\n \"can_have_delivery_info\" = EXCLUDED.\"can_have_delivery_info\",\n \"skipped_reason\" = EXCLUDED.\"skipped_reason\",\n \"skipped_details\" = EXCLUDED.\"skipped_details\",\n \"send_retries\" = EXCLUDED.\"send_retries\",\n \"is_paused\" = EXCLUDED.\"is_paused\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"project_permissions\": {\n sourceTables: { \"ProjectUserDirectPermission\": \"ProjectUserDirectPermission\" },\n targetTable: \"project_permissions\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"project_permissions\" (\n \"user_id\" uuid NOT NULL,\n \"permission_id\" text NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL,\n PRIMARY KEY (\"user_id\", \"permission_id\")\n );\n REVOKE ALL ON \"project_permissions\" FROM PUBLIC;\n GRANT SELECT ON \"project_permissions\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.project_permissions (\n project_id String,\n branch_id String,\n user_id UUID,\n id String,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, user_id, id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ProjectUserDirectPermission\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserDirectPermission\".\"permissionId\" AS \"id\",\n \"ProjectUserDirectPermission\".\"createdAt\" AS \"created_at\",\n \"ProjectUserDirectPermission\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ProjectUserDirectPermission\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ProjectUserDirectPermission\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ProjectUserDirectPermission\".\"tenancyId\"\n WHERE \"ProjectUserDirectPermission\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"primaryKey\"->>'permissionId' AS \"id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserDirectPermission'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ProjectUserDirectPermission\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserDirectPermission\".\"permissionId\" AS \"permission_id\",\n \"ProjectUserDirectPermission\".\"createdAt\" AS \"created_at\",\n \"ProjectUserDirectPermission\".\"sequenceId\" AS \"sequence_id\",\n \"ProjectUserDirectPermission\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ProjectUserDirectPermission\"\n WHERE \"ProjectUserDirectPermission\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"primaryKey\"->>'permissionId' AS \"id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserDirectPermission'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"user_id\",\n $2::text AS \"permission_id\",\n $3::timestamp without time zone AS \"created_at\",\n $4::bigint AS \"sequence_id\",\n $5::boolean AS \"is_deleted\",\n $6::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"project_permissions\" pp\n USING params p\n WHERE p.\"is_deleted\" = true AND pp.\"user_id\" = p.\"user_id\" AND pp.\"permission_id\" = p.\"permission_id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"project_permissions\" (\n \"user_id\",\n \"permission_id\",\n \"created_at\"\n )\n SELECT\n p.\"user_id\",\n p.\"permission_id\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"user_id\", \"permission_id\") DO UPDATE SET\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"notification_preferences\": {\n sourceTables: { \"UserNotificationPreference\": \"UserNotificationPreference\" },\n targetTable: \"notification_preferences\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"notification_preferences\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"notification_category_id\" text NOT NULL,\n \"enabled\" boolean NOT NULL DEFAULT true\n );\n REVOKE ALL ON \"notification_preferences\" FROM PUBLIC;\n GRANT SELECT ON \"notification_preferences\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.notification_preferences (\n project_id String,\n branch_id String,\n user_id UUID,\n notification_category_id String,\n enabled UInt8,\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n ORDER BY (project_id, branch_id, user_id, notification_category_id);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"UserNotificationPreference\".\"projectUserId\" AS \"user_id\",\n \"UserNotificationPreference\".\"notificationCategoryId\" AS \"notification_category_id\",\n \"UserNotificationPreference\".\"enabled\" AS \"enabled\",\n \"UserNotificationPreference\".\"sequenceId\" AS \"sync_sequence_id\",\n \"UserNotificationPreference\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"UserNotificationPreference\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"UserNotificationPreference\".\"tenancyId\"\n WHERE \"UserNotificationPreference\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n (\"DeletedRow\".\"data\"->>'notificationCategoryId')::uuid AS \"notification_category_id\",\n (\"DeletedRow\".\"data\"->>'enabled')::boolean AS \"enabled\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'UserNotificationPreference'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"UserNotificationPreference\".\"id\" AS \"id\",\n \"UserNotificationPreference\".\"projectUserId\" AS \"user_id\",\n \"UserNotificationPreference\".\"notificationCategoryId\" AS \"notification_category_id\",\n \"UserNotificationPreference\".\"enabled\" AS \"enabled\",\n \"UserNotificationPreference\".\"sequenceId\" AS \"sequence_id\",\n \"UserNotificationPreference\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"UserNotificationPreference\"\n WHERE \"UserNotificationPreference\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n (\"DeletedRow\".\"data\"->>'notificationCategoryId')::uuid AS \"notification_category_id\",\n (\"DeletedRow\".\"data\"->>'enabled')::boolean AS \"enabled\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'UserNotificationPreference'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"notification_category_id\",\n $4::boolean AS \"enabled\",\n $5::bigint AS \"sequence_id\",\n $6::boolean AS \"is_deleted\",\n $7::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"notification_preferences\" np\n USING params p\n WHERE p.\"is_deleted\" = true AND np.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"notification_preferences\" (\n \"id\",\n \"user_id\",\n \"notification_category_id\",\n \"enabled\"\n )\n SELECT\n p.\"id\",\n p.\"user_id\",\n p.\"notification_category_id\",\n p.\"enabled\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"user_id\" = EXCLUDED.\"user_id\",\n \"notification_category_id\" = EXCLUDED.\"notification_category_id\",\n \"enabled\" = EXCLUDED.\"enabled\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"refresh_tokens\": {\n sourceTables: { \"ProjectUserRefreshToken\": \"ProjectUserRefreshToken\" },\n targetTable: \"refresh_tokens\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"refresh_tokens\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"created_at\" timestamp without time zone NOT NULL,\n \"last_used_at\" timestamp without time zone NOT NULL,\n \"is_impersonation\" boolean NOT NULL DEFAULT false,\n \"expires_at\" timestamp without time zone\n );\n REVOKE ALL ON \"refresh_tokens\" FROM PUBLIC;\n GRANT SELECT ON \"refresh_tokens\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.refresh_tokens (\n project_id String,\n branch_id String,\n id UUID,\n user_id UUID,\n created_at DateTime64(3, 'UTC'),\n last_used_at DateTime64(3, 'UTC'),\n is_impersonation UInt8,\n expires_at Nullable(DateTime64(3, 'UTC')),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, id);\n\n CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (\n tenancy_id UUID,\n mapping_name String,\n last_synced_sequence_id Int64,\n updated_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(updated_at)\n ORDER BY (tenancy_id, mapping_name);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ProjectUserRefreshToken\".\"id\" AS \"id\",\n \"ProjectUserRefreshToken\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserRefreshToken\".\"createdAt\" AS \"created_at\",\n \"ProjectUserRefreshToken\".\"lastActiveAt\" AS \"last_used_at\",\n \"ProjectUserRefreshToken\".\"isImpersonation\" AS \"is_impersonation\",\n \"ProjectUserRefreshToken\".\"expiresAt\" AS \"expires_at\",\n \"ProjectUserRefreshToken\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ProjectUserRefreshToken\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ProjectUserRefreshToken\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ProjectUserRefreshToken\".\"tenancyId\"\n WHERE \"ProjectUserRefreshToken\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"last_used_at\",\n false AS \"is_impersonation\",\n NULL::timestamp without time zone AS \"expires_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserRefreshToken'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ProjectUserRefreshToken\".\"id\" AS \"id\",\n \"ProjectUserRefreshToken\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserRefreshToken\".\"createdAt\" AS \"created_at\",\n \"ProjectUserRefreshToken\".\"lastActiveAt\" AS \"last_used_at\",\n \"ProjectUserRefreshToken\".\"isImpersonation\" AS \"is_impersonation\",\n \"ProjectUserRefreshToken\".\"expiresAt\" AS \"expires_at\",\n \"ProjectUserRefreshToken\".\"sequenceId\" AS \"sequence_id\",\n \"ProjectUserRefreshToken\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ProjectUserRefreshToken\"\n WHERE \"ProjectUserRefreshToken\".\"tenancyId\" = $1::uuid\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"last_used_at\",\n false AS \"is_impersonation\",\n NULL::timestamp without time zone AS \"expires_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserRefreshToken'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"user_id\",\n $3::timestamp without time zone AS \"created_at\",\n $4::timestamp without time zone AS \"last_used_at\",\n $5::boolean AS \"is_impersonation\",\n $6::timestamp without time zone AS \"expires_at\",\n $7::bigint AS \"sequence_id\",\n $8::boolean AS \"is_deleted\",\n $9::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"refresh_tokens\" rt\n USING params p\n WHERE p.\"is_deleted\" = true AND rt.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"refresh_tokens\" (\n \"id\",\n \"user_id\",\n \"created_at\",\n \"last_used_at\",\n \"is_impersonation\",\n \"expires_at\"\n )\n SELECT\n p.\"id\",\n p.\"user_id\",\n p.\"created_at\",\n p.\"last_used_at\",\n p.\"is_impersonation\",\n p.\"expires_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"user_id\" = EXCLUDED.\"user_id\",\n \"created_at\" = EXCLUDED.\"created_at\",\n \"last_used_at\" = EXCLUDED.\"last_used_at\",\n \"is_impersonation\" = EXCLUDED.\"is_impersonation\",\n \"expires_at\" = EXCLUDED.\"expires_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n \"connected_accounts\": {\n sourceTables: { \"ProjectUserOAuthAccount\": \"ProjectUserOAuthAccount\" },\n targetTable: \"connected_accounts\",\n targetTableSchemas: {\n postgres: `\n CREATE TABLE IF NOT EXISTS \"connected_accounts\" (\n \"id\" uuid PRIMARY KEY NOT NULL,\n \"user_id\" uuid NOT NULL,\n \"provider\" text NOT NULL,\n \"provider_account_id\" text NOT NULL,\n \"email\" text,\n \"created_at\" timestamp without time zone NOT NULL\n );\n REVOKE ALL ON \"connected_accounts\" FROM PUBLIC;\n GRANT SELECT ON \"connected_accounts\" TO PUBLIC;\n\n CREATE TABLE IF NOT EXISTS \"_stack_sync_metadata\" (\n \"mapping_name\" text PRIMARY KEY NOT NULL,\n \"last_synced_sequence_id\" bigint NOT NULL DEFAULT -1,\n \"updated_at\" timestamp without time zone NOT NULL DEFAULT now()\n );\n `.trim(),\n clickhouse: `\n CREATE TABLE IF NOT EXISTS analytics_internal.connected_accounts (\n project_id String,\n branch_id String,\n user_id UUID,\n provider String,\n provider_account_id String,\n created_at DateTime64(3, 'UTC'),\n sync_sequence_id Int64,\n sync_is_deleted UInt8,\n sync_created_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(sync_sequence_id)\n PARTITION BY toYYYYMM(created_at)\n ORDER BY (project_id, branch_id, user_id, provider, provider_account_id);\n\n CREATE TABLE IF NOT EXISTS analytics_internal._stack_sync_metadata (\n tenancy_id UUID,\n mapping_name String,\n last_synced_sequence_id Int64,\n updated_at DateTime64(3, 'UTC') DEFAULT now64(3)\n )\n ENGINE ReplacingMergeTree(updated_at)\n ORDER BY (tenancy_id, mapping_name);\n `.trim(),\n },\n internalDbFetchQueries: {\n clickhouse: `\n SELECT *\n FROM (\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n \"ProjectUserOAuthAccount\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserOAuthAccount\".\"configOAuthProviderId\" AS \"provider\",\n \"ProjectUserOAuthAccount\".\"providerAccountId\" AS \"provider_account_id\",\n \"ProjectUserOAuthAccount\".\"createdAt\" AS \"created_at\",\n \"ProjectUserOAuthAccount\".\"sequenceId\" AS \"sync_sequence_id\",\n \"ProjectUserOAuthAccount\".\"tenancyId\" AS \"tenancyId\",\n false AS \"sync_is_deleted\"\n FROM \"ProjectUserOAuthAccount\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"ProjectUserOAuthAccount\".\"tenancyId\"\n WHERE \"ProjectUserOAuthAccount\".\"tenancyId\" = $1::uuid\n AND \"ProjectUserOAuthAccount\".\"projectUserId\" IS NOT NULL\n\n UNION ALL\n\n SELECT\n \"Tenancy\".\"projectId\" AS \"project_id\",\n \"Tenancy\".\"branchId\" AS \"branch_id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n \"DeletedRow\".\"data\"->>'configOAuthProviderId' AS \"provider\",\n \"DeletedRow\".\"data\"->>'providerAccountId' AS \"provider_account_id\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sync_sequence_id\",\n \"DeletedRow\".\"tenancyId\" AS \"tenancyId\",\n true AS \"sync_is_deleted\"\n FROM \"DeletedRow\"\n JOIN \"Tenancy\" ON \"Tenancy\".\"id\" = \"DeletedRow\".\"tenancyId\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserOAuthAccount'\n ) AS \"_src\"\n WHERE \"sync_sequence_id\" IS NOT NULL\n AND \"sync_sequence_id\" > $2::bigint\n ORDER BY \"sync_sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n },\n internalDbFetchQuery: `\n SELECT *\n FROM (\n SELECT\n \"ProjectUserOAuthAccount\".\"id\" AS \"id\",\n \"ProjectUserOAuthAccount\".\"projectUserId\" AS \"user_id\",\n \"ProjectUserOAuthAccount\".\"configOAuthProviderId\" AS \"provider\",\n \"ProjectUserOAuthAccount\".\"providerAccountId\" AS \"provider_account_id\",\n \"ProjectUserOAuthAccount\".\"email\" AS \"email\",\n \"ProjectUserOAuthAccount\".\"createdAt\" AS \"created_at\",\n \"ProjectUserOAuthAccount\".\"sequenceId\" AS \"sequence_id\",\n \"ProjectUserOAuthAccount\".\"tenancyId\",\n false AS \"is_deleted\"\n FROM \"ProjectUserOAuthAccount\"\n WHERE \"ProjectUserOAuthAccount\".\"tenancyId\" = $1::uuid\n AND \"ProjectUserOAuthAccount\".\"projectUserId\" IS NOT NULL\n\n UNION ALL\n\n SELECT\n (\"DeletedRow\".\"primaryKey\"->>'id')::uuid AS \"id\",\n (\"DeletedRow\".\"data\"->>'projectUserId')::uuid AS \"user_id\",\n NULL::text AS \"provider\",\n NULL::text AS \"provider_account_id\",\n NULL::text AS \"email\",\n \"DeletedRow\".\"deletedAt\"::timestamp without time zone AS \"created_at\",\n \"DeletedRow\".\"sequenceId\" AS \"sequence_id\",\n \"DeletedRow\".\"tenancyId\",\n true AS \"is_deleted\"\n FROM \"DeletedRow\"\n WHERE\n \"DeletedRow\".\"tenancyId\" = $1::uuid\n AND \"DeletedRow\".\"tableName\" = 'ProjectUserOAuthAccount'\n ) AS \"_src\"\n WHERE \"sequence_id\" IS NOT NULL\n AND \"sequence_id\" > $2::bigint\n ORDER BY \"sequence_id\" ASC\n LIMIT 1000\n `.trim(),\n externalDbUpdateQueries: {\n postgres: `\n WITH params AS (\n SELECT\n $1::uuid AS \"id\",\n $2::uuid AS \"user_id\",\n $3::text AS \"provider\",\n $4::text AS \"provider_account_id\",\n $5::text AS \"email\",\n $6::timestamp without time zone AS \"created_at\",\n $7::bigint AS \"sequence_id\",\n $8::boolean AS \"is_deleted\",\n $9::text AS \"mapping_name\"\n ),\n deleted AS (\n DELETE FROM \"connected_accounts\" ca\n USING params p\n WHERE p.\"is_deleted\" = true AND ca.\"id\" = p.\"id\"\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO \"connected_accounts\" (\n \"id\",\n \"user_id\",\n \"provider\",\n \"provider_account_id\",\n \"email\",\n \"created_at\"\n )\n SELECT\n p.\"id\",\n p.\"user_id\",\n p.\"provider\",\n p.\"provider_account_id\",\n p.\"email\",\n p.\"created_at\"\n FROM params p\n WHERE p.\"is_deleted\" = false\n ON CONFLICT (\"id\") DO UPDATE SET\n \"user_id\" = EXCLUDED.\"user_id\",\n \"provider\" = EXCLUDED.\"provider\",\n \"provider_account_id\" = EXCLUDED.\"provider_account_id\",\n \"email\" = EXCLUDED.\"email\",\n \"created_at\" = EXCLUDED.\"created_at\"\n RETURNING 1\n )\n INSERT INTO \"_stack_sync_metadata\" (\"mapping_name\", \"last_synced_sequence_id\", \"updated_at\")\n SELECT p.\"mapping_name\", p.\"sequence_id\", now() FROM params p\n ON CONFLICT (\"mapping_name\") DO UPDATE SET\n \"last_synced_sequence_id\" = GREATEST(\"_stack_sync_metadata\".\"last_synced_sequence_id\", EXCLUDED.\"last_synced_sequence_id\"),\n \"updated_at\" = now();\n `.trim(),\n },\n },\n} as const;\n"],"mappings":";AAAA,MAAa,2BAA2B;CACtC,SAAS;EACP,cAAc,EAAE,eAAe,cAAc;EAC7C,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;;;;;QAqBR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiCV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4EV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgEpB,KAAK;EAEP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkER,KAAK,EACT;CACF;CACA,oBAAoB;EAClB,cAAc,EAAE,kBAAkB,iBAAiB;EACnD,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;;;QAmBR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;;;;;QAmBV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+CV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyCpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0DR,KAAK,EACT;CACF;CACA,SAAS;EACP,cAAc,EAAE,QAAQ,OAAO;EAC/B,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;;QAkBR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;;;;QAkBV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6CV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuCpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsDR,KAAK,EACT;CACF;CACA,wBAAwB;EACtB,cAAc,EAAE,cAAc,aAAa;EAC3C,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;QAiBR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;;QAgBV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyCV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmCpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6CR,KAAK,EACT;CACF;CACA,oBAAoB;EAClB,cAAc,EAAE,8BAA8B,6BAA6B;EAC3E,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;QAgBR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;QAeV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuCV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiCpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwCR,KAAK,EACT;CACF;CACA,oBAAoB;EAClB,cAAc,EAAE,oBAAoB,mBAAmB;EACvD,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;QAiBR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;;;QAiBV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+CV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0CpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkDR,KAAK,EACT;CACF;CACA,kBAAkB;EAChB,cAAc,EAAE,eAAe,cAAc;EAC7C,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2CR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0CV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6FV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyFpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0JR,KAAK,EACT;CACF;CACA,uBAAuB;EACrB,cAAc,EAAE,+BAA+B,8BAA8B;EAC7E,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;QAeR,KAAK;GACP,YAAY;;;;;;;;;;;;;;QAcV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqCV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+BpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqCR,KAAK,EACT;CACF;CACA,4BAA4B;EAC1B,cAAc,EAAE,8BAA8B,6BAA6B;EAC3E,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;QAeR,KAAK;GACP,YAAY;;;;;;;;;;;;;QAaV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqCV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiCpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0CR,KAAK,EACT;CACF;CACA,kBAAkB;EAChB,cAAc,EAAE,2BAA2B,0BAA0B;EACrE,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;QAiBR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;QA0BV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2CV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqCpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkDR,KAAK,EACT;CACF;CACA,sBAAsB;EACpB,cAAc,EAAE,2BAA2B,0BAA0B;EACrE,aAAa;EACb,oBAAoB;GAClB,UAAU;;;;;;;;;;;;;;;;;QAiBR,KAAK;GACP,YAAY;;;;;;;;;;;;;;;;;;;;;;;;QAwBV,KAAK;EACT;EACA,wBAAwB,EACtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwCV,KAAK,EACT;EACA,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCpB,KAAK;EACP,yBAAyB,EACvB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkDR,KAAK,EACT;CACF;AACF"}