better-supabase 0.7.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1377) hide show
  1. package/README.md +146 -81
  2. package/bin/better-supabase.js +14 -2
  3. package/dist/access-sql-DUSSMaC3.js +201 -0
  4. package/dist/actor-BAhb-d1S.d.ts +104 -0
  5. package/dist/actor-KHDOKGb1.js +151 -0
  6. package/dist/adapter-CEjmtazZ.js +1984 -0
  7. package/dist/agents-BCNhIxVZ.d.ts +111 -0
  8. package/dist/ai-cache-Dps7aRu1.d.ts +70 -0
  9. package/dist/ai-cache-zeUL94pB.js +84 -0
  10. package/dist/ai-chat-3GBSlFR4.d.ts +608 -0
  11. package/dist/ai-files-D2_9YLjF.js +331 -0
  12. package/dist/ai-message-DfaP8sis.js +14 -0
  13. package/dist/ai-sdk/agents/index.d.ts +154 -10
  14. package/dist/ai-sdk/agents/index.js +172 -17
  15. package/dist/ai-sdk/batches/index.d.ts +4 -4
  16. package/dist/ai-sdk/batches/index.js +5 -5
  17. package/dist/ai-sdk/cache/index.d.ts +2 -2
  18. package/dist/ai-sdk/cache/index.js +2 -2
  19. package/dist/ai-sdk/chat/index.d.ts +1 -1
  20. package/dist/ai-sdk/chat/index.js +10 -21
  21. package/dist/ai-sdk/embeddings/index.d.ts +3 -3
  22. package/dist/ai-sdk/embeddings/index.js +1 -2
  23. package/dist/ai-sdk/files/index.d.ts +3 -3
  24. package/dist/ai-sdk/files/index.js +4 -4
  25. package/dist/ai-sdk/index.d.ts +38 -9
  26. package/dist/ai-sdk/index.js +5 -3
  27. package/dist/ai-sdk/mcp/index.d.ts +43 -6
  28. package/dist/ai-sdk/mcp/index.js +37 -8
  29. package/dist/ai-sdk/memory/index.d.ts +5 -2
  30. package/dist/ai-sdk/memory/index.js +2 -2
  31. package/dist/ai-sdk/react/index.js +1 -2
  32. package/dist/ai-sdk/workflow/index.d.ts +7 -6
  33. package/dist/ai-sdk/workflow/index.js +15 -26
  34. package/dist/ai-tasks-Ih5oHfyj.d.ts +157 -0
  35. package/dist/announcements-BHCzraR6.js +128 -0
  36. package/dist/api-CFjuYKFY.js +680 -0
  37. package/dist/api-TG3jE5aO.d.ts +411 -0
  38. package/dist/api-keys-BEQatEUW.js +318 -0
  39. package/dist/api-keys-BYoGCM9p.d.ts +205 -0
  40. package/dist/app-tables-BGl5_U2x.js +584 -0
  41. package/dist/approvals-a2KmioBh.d.ts +124 -0
  42. package/dist/arazzo/index.d.ts +255 -0
  43. package/dist/arazzo/index.js +622 -0
  44. package/dist/assistant-Bf2cA6RO.d.ts +148 -0
  45. package/dist/astro/index.d.ts +9 -8
  46. package/dist/astro/index.js +12 -9
  47. package/dist/asyncapi/index.d.ts +103 -0
  48. package/dist/asyncapi/index.js +569 -0
  49. package/dist/attachments-DAj2Yp95.js +264 -0
  50. package/dist/attributes-D4mA7WhI.js +38 -0
  51. package/dist/audit-log-BMMuGPdP.js +786 -0
  52. package/dist/auth-CdBKt0CS.js +20 -0
  53. package/dist/auth-reply-DUCwb8YO.js +31 -0
  54. package/dist/auth-reply-Dj124sbX.d.ts +11 -0
  55. package/dist/authorization-DpRfs6Wx.d.ts +1412 -0
  56. package/dist/authorization-hooks-DkmrnDX7.d.ts +214 -0
  57. package/dist/authorizer-DH7DjkL3.js +126 -0
  58. package/dist/authorizer-eiOjo-3l.d.ts +73 -0
  59. package/dist/base64-BmeCBgGo.js +42 -0
  60. package/dist/batch-limit-DKVQDz4o.js +5 -0
  61. package/dist/before-route-B98js9m_.js +30 -0
  62. package/dist/better-result/index.d.ts +118 -0
  63. package/dist/better-result/index.js +64 -0
  64. package/dist/bind-a7sUgvf4.d.ts +70 -0
  65. package/dist/block-env-CBd_SoL5.js +29 -0
  66. package/dist/block-env-Dxl7rsI0.d.ts +10 -0
  67. package/dist/block-events-DD9Q_NUz.js +96 -0
  68. package/dist/block-fields-5UA84ZUg.d.ts +55 -0
  69. package/dist/block-fields-ffD6Gxe4.js +139 -0
  70. package/dist/block-helpers-C86hPEjI.d.ts +37 -0
  71. package/dist/block-helpers-CfG_MvDR.js +264 -0
  72. package/dist/block-hooks-BLPWD3Jt.d.ts +107 -0
  73. package/dist/block-hooks-BsXncUlZ.js +114 -0
  74. package/dist/block-transport-DaGGXjIw.d.ts +70 -0
  75. package/dist/block-transport-G4t1umrR.js +85 -0
  76. package/dist/blocks/access-requests/index.d.ts +98 -0
  77. package/dist/blocks/access-requests/index.js +99 -0
  78. package/dist/blocks/agents/index.d.ts +21 -3
  79. package/dist/blocks/agents/index.js +65 -18
  80. package/dist/blocks/ai-cache/index.d.ts +8 -3
  81. package/dist/blocks/ai-cache/index.js +15 -3
  82. package/dist/blocks/ai-chat/index.d.ts +28 -4
  83. package/dist/blocks/ai-chat/index.js +31 -5
  84. package/dist/blocks/ai-chat/react/index.d.ts +12 -46
  85. package/dist/blocks/ai-chat/react/index.js +43 -335
  86. package/dist/blocks/ai-chat/solid/index.d.ts +34 -0
  87. package/dist/blocks/ai-chat/solid/index.js +41 -0
  88. package/dist/blocks/ai-chat/svelte/index.d.ts +34 -0
  89. package/dist/blocks/ai-chat/svelte/index.js +41 -0
  90. package/dist/blocks/ai-chat/vue/index.d.ts +34 -0
  91. package/dist/blocks/ai-chat/vue/index.js +41 -0
  92. package/dist/blocks/ai-files/index.d.ts +11 -4
  93. package/dist/blocks/ai-files/index.js +16 -3
  94. package/dist/blocks/ai-providers/index.d.ts +18 -3
  95. package/dist/blocks/ai-providers/index.js +41 -15
  96. package/dist/blocks/ai-tasks/index.d.ts +10 -3
  97. package/dist/blocks/ai-tasks/index.js +71 -21
  98. package/dist/blocks/announcements/index.d.ts +18 -3
  99. package/dist/blocks/announcements/index.js +27 -3
  100. package/dist/blocks/announcements/react/index.d.ts +4 -14
  101. package/dist/blocks/announcements/react/index.js +22 -70
  102. package/dist/blocks/announcements/solid/index.d.ts +13 -0
  103. package/dist/blocks/announcements/solid/index.js +14 -0
  104. package/dist/blocks/announcements/svelte/index.d.ts +13 -0
  105. package/dist/blocks/announcements/svelte/index.js +14 -0
  106. package/dist/blocks/announcements/vue/index.d.ts +13 -0
  107. package/dist/blocks/announcements/vue/index.js +14 -0
  108. package/dist/blocks/api-keys/index.d.ts +24 -7
  109. package/dist/blocks/api-keys/index.js +30 -295
  110. package/dist/blocks/api-keys/react/index.d.ts +29 -0
  111. package/dist/blocks/api-keys/react/index.js +43 -0
  112. package/dist/blocks/api-keys/react/server.d.ts +7 -0
  113. package/dist/blocks/api-keys/react/server.js +7 -0
  114. package/dist/blocks/api-keys/solid/index.d.ts +13 -0
  115. package/dist/blocks/api-keys/solid/index.js +14 -0
  116. package/dist/blocks/api-keys/svelte/index.d.ts +13 -0
  117. package/dist/blocks/api-keys/svelte/index.js +14 -0
  118. package/dist/blocks/api-keys/vue/index.d.ts +13 -0
  119. package/dist/blocks/api-keys/vue/index.js +14 -0
  120. package/dist/blocks/approvals/index.d.ts +22 -0
  121. package/dist/blocks/approvals/index.js +189 -0
  122. package/dist/blocks/attachments/index.d.ts +18 -223
  123. package/dist/blocks/attachments/index.js +26 -233
  124. package/dist/blocks/audit/index.d.ts +72 -354
  125. package/dist/blocks/audit/index.js +91 -695
  126. package/dist/blocks/audit/react/index.d.ts +26 -0
  127. package/dist/blocks/audit/react/index.js +44 -0
  128. package/dist/blocks/audit/react/server.d.ts +7 -0
  129. package/dist/blocks/audit/react/server.js +7 -0
  130. package/dist/blocks/audit/solid/index.d.ts +13 -0
  131. package/dist/blocks/audit/solid/index.js +14 -0
  132. package/dist/blocks/audit/svelte/index.d.ts +13 -0
  133. package/dist/blocks/audit/svelte/index.js +14 -0
  134. package/dist/blocks/audit/vue/index.d.ts +13 -0
  135. package/dist/blocks/audit/vue/index.js +14 -0
  136. package/dist/blocks/billing/index.d.ts +40 -13
  137. package/dist/blocks/billing/index.js +49 -18
  138. package/dist/blocks/billing/react/index.d.ts +34 -0
  139. package/dist/blocks/billing/react/index.js +36 -0
  140. package/dist/blocks/billing/react/server.d.ts +7 -0
  141. package/dist/blocks/billing/react/server.js +7 -0
  142. package/dist/blocks/billing/solid/index.d.ts +15 -0
  143. package/dist/blocks/billing/solid/index.js +14 -0
  144. package/dist/blocks/billing/svelte/index.d.ts +15 -0
  145. package/dist/blocks/billing/svelte/index.js +14 -0
  146. package/dist/blocks/billing/vue/index.d.ts +15 -0
  147. package/dist/blocks/billing/vue/index.js +14 -0
  148. package/dist/blocks/bookings/index.d.ts +36 -0
  149. package/dist/blocks/bookings/index.js +28 -0
  150. package/dist/blocks/bookings/react/index.d.ts +31 -0
  151. package/dist/blocks/bookings/react/index.js +59 -0
  152. package/dist/blocks/bookings/react/server.d.ts +6 -0
  153. package/dist/blocks/bookings/react/server.js +7 -0
  154. package/dist/blocks/bookings/solid/index.d.ts +13 -0
  155. package/dist/blocks/bookings/solid/index.js +14 -0
  156. package/dist/blocks/bookings/svelte/index.d.ts +13 -0
  157. package/dist/blocks/bookings/svelte/index.js +14 -0
  158. package/dist/blocks/bookings/vue/index.d.ts +13 -0
  159. package/dist/blocks/bookings/vue/index.js +14 -0
  160. package/dist/blocks/bulk/index.d.ts +142 -0
  161. package/dist/blocks/bulk/index.js +154 -0
  162. package/dist/blocks/calendar/index.d.ts +20 -0
  163. package/dist/blocks/calendar/index.js +33 -0
  164. package/dist/blocks/calendar/react/index.d.ts +26 -0
  165. package/dist/blocks/calendar/react/index.js +58 -0
  166. package/dist/blocks/calendar/react/server.d.ts +6 -0
  167. package/dist/blocks/calendar/react/server.js +7 -0
  168. package/dist/blocks/calendar/solid/index.d.ts +13 -0
  169. package/dist/blocks/calendar/solid/index.js +14 -0
  170. package/dist/blocks/calendar/svelte/index.d.ts +13 -0
  171. package/dist/blocks/calendar/svelte/index.js +14 -0
  172. package/dist/blocks/calendar/vue/index.d.ts +13 -0
  173. package/dist/blocks/calendar/vue/index.js +14 -0
  174. package/dist/blocks/catalog/index.d.ts +224 -0
  175. package/dist/blocks/catalog/index.js +292 -0
  176. package/dist/blocks/collections/index.d.ts +184 -0
  177. package/dist/blocks/collections/index.js +208 -0
  178. package/dist/blocks/comments/index.d.ts +19 -166
  179. package/dist/blocks/comments/index.js +26 -206
  180. package/dist/blocks/comments/react/index.d.ts +27 -0
  181. package/dist/blocks/comments/react/index.js +45 -0
  182. package/dist/blocks/comments/react/server.d.ts +7 -0
  183. package/dist/blocks/comments/react/server.js +7 -0
  184. package/dist/blocks/comments/solid/index.d.ts +13 -0
  185. package/dist/blocks/comments/solid/index.js +14 -0
  186. package/dist/blocks/comments/svelte/index.d.ts +13 -0
  187. package/dist/blocks/comments/svelte/index.js +14 -0
  188. package/dist/blocks/comments/vue/index.d.ts +13 -0
  189. package/dist/blocks/comments/vue/index.js +14 -0
  190. package/dist/blocks/connectors/index.d.ts +21 -3
  191. package/dist/blocks/connectors/index.js +54 -18
  192. package/dist/blocks/custom-fields/index.d.ts +62 -0
  193. package/dist/blocks/custom-fields/index.js +85 -0
  194. package/dist/blocks/data-lifecycle/index.d.ts +119 -10
  195. package/dist/blocks/data-lifecycle/index.js +103 -12
  196. package/dist/blocks/deals/index.d.ts +262 -0
  197. package/dist/blocks/deals/index.js +380 -0
  198. package/dist/blocks/documents/index.d.ts +17 -0
  199. package/dist/blocks/documents/index.js +118 -0
  200. package/dist/blocks/domains/index.d.ts +117 -0
  201. package/dist/blocks/domains/index.js +118 -0
  202. package/dist/blocks/drive/index.d.ts +296 -0
  203. package/dist/blocks/drive/index.js +483 -0
  204. package/dist/blocks/employees/index.d.ts +205 -0
  205. package/dist/blocks/employees/index.js +289 -0
  206. package/dist/blocks/engagements/index.d.ts +125 -0
  207. package/dist/blocks/engagements/index.js +143 -0
  208. package/dist/blocks/entitlements/index.d.ts +40 -4
  209. package/dist/blocks/entitlements/index.js +14 -24
  210. package/dist/blocks/entitlements/react/index.d.ts +24 -0
  211. package/dist/blocks/entitlements/react/index.js +35 -0
  212. package/dist/blocks/entitlements/react/server.d.ts +6 -0
  213. package/dist/blocks/entitlements/react/server.js +7 -0
  214. package/dist/blocks/entitlements/solid/index.d.ts +13 -0
  215. package/dist/blocks/entitlements/solid/index.js +14 -0
  216. package/dist/blocks/entitlements/svelte/index.d.ts +13 -0
  217. package/dist/blocks/entitlements/svelte/index.js +14 -0
  218. package/dist/blocks/entitlements/vue/index.d.ts +13 -0
  219. package/dist/blocks/entitlements/vue/index.js +14 -0
  220. package/dist/blocks/flags/index.d.ts +61 -187
  221. package/dist/blocks/flags/index.js +65 -252
  222. package/dist/blocks/forms/index.d.ts +302 -0
  223. package/dist/blocks/forms/index.js +341 -0
  224. package/dist/blocks/forms/react/index.d.ts +16 -0
  225. package/dist/blocks/forms/react/index.js +25 -0
  226. package/dist/blocks/forms/react/server.d.ts +6 -0
  227. package/dist/blocks/forms/react/server.js +7 -0
  228. package/dist/blocks/forms/solid/index.d.ts +13 -0
  229. package/dist/blocks/forms/solid/index.js +14 -0
  230. package/dist/blocks/forms/svelte/index.d.ts +13 -0
  231. package/dist/blocks/forms/svelte/index.js +14 -0
  232. package/dist/blocks/forms/vue/index.d.ts +13 -0
  233. package/dist/blocks/forms/vue/index.js +14 -0
  234. package/dist/blocks/hiring/index.d.ts +154 -0
  235. package/dist/blocks/hiring/index.js +180 -0
  236. package/dist/blocks/identities/index.d.ts +83 -0
  237. package/dist/blocks/identities/index.js +103 -0
  238. package/dist/blocks/imports/index.d.ts +91 -0
  239. package/dist/blocks/imports/index.js +123 -0
  240. package/dist/blocks/inbox/index.d.ts +22 -3
  241. package/dist/blocks/inbox/index.js +78 -6
  242. package/dist/blocks/inbox/react/index.d.ts +3 -2
  243. package/dist/blocks/inbox/react/index.js +55 -199
  244. package/dist/blocks/inbox/react/server.d.ts +2 -1
  245. package/dist/blocks/inbox/solid/index.d.ts +27 -0
  246. package/dist/blocks/inbox/solid/index.js +32 -0
  247. package/dist/blocks/inbox/svelte/index.d.ts +27 -0
  248. package/dist/blocks/inbox/svelte/index.js +32 -0
  249. package/dist/blocks/inbox/vue/index.d.ts +27 -0
  250. package/dist/blocks/inbox/vue/index.js +32 -0
  251. package/dist/blocks/index.d.ts +9 -64
  252. package/dist/blocks/index.js +193 -57
  253. package/dist/blocks/inventory/index.d.ts +181 -0
  254. package/dist/blocks/inventory/index.js +219 -0
  255. package/dist/blocks/invoices/index.d.ts +154 -0
  256. package/dist/blocks/invoices/index.js +216 -0
  257. package/dist/blocks/jobs/index.d.ts +188 -49
  258. package/dist/blocks/jobs/index.js +698 -527
  259. package/dist/blocks/knowledge/index.d.ts +10 -3
  260. package/dist/blocks/knowledge/index.js +17 -3
  261. package/dist/blocks/leave/index.d.ts +241 -0
  262. package/dist/blocks/leave/index.js +209 -0
  263. package/dist/blocks/memory/index.d.ts +9 -4
  264. package/dist/blocks/memory/index.js +49 -12
  265. package/dist/blocks/metrics/index.d.ts +174 -0
  266. package/dist/blocks/metrics/index.js +217 -0
  267. package/dist/blocks/mfa/index.d.ts +7 -0
  268. package/dist/blocks/mfa/index.js +12 -0
  269. package/dist/blocks/mfa/react/index.d.ts +30 -0
  270. package/dist/blocks/mfa/react/index.js +45 -0
  271. package/dist/blocks/mfa/react/server.d.ts +9 -0
  272. package/dist/blocks/mfa/react/server.js +12 -0
  273. package/dist/blocks/mfa/solid/index.d.ts +20 -0
  274. package/dist/blocks/mfa/solid/index.js +23 -0
  275. package/dist/blocks/mfa/svelte/index.d.ts +20 -0
  276. package/dist/blocks/mfa/svelte/index.js +23 -0
  277. package/dist/blocks/mfa/vue/index.d.ts +20 -0
  278. package/dist/blocks/mfa/vue/index.js +23 -0
  279. package/dist/blocks/notifications/index.d.ts +345 -26
  280. package/dist/blocks/notifications/index.js +744 -120
  281. package/dist/blocks/notifications/react/index.d.ts +7 -32
  282. package/dist/blocks/notifications/react/index.js +23 -49
  283. package/dist/blocks/notifications/react/server.d.ts +2 -1
  284. package/dist/blocks/notifications/solid/index.d.ts +13 -0
  285. package/dist/blocks/notifications/solid/index.js +14 -0
  286. package/dist/blocks/notifications/svelte/index.d.ts +13 -0
  287. package/dist/blocks/notifications/svelte/index.js +14 -0
  288. package/dist/blocks/notifications/vue/index.d.ts +13 -0
  289. package/dist/blocks/notifications/vue/index.js +14 -0
  290. package/dist/blocks/number-sequences/index.d.ts +39 -0
  291. package/dist/blocks/number-sequences/index.js +38 -0
  292. package/dist/blocks/oauth-server/index.d.ts +228 -0
  293. package/dist/blocks/oauth-server/index.js +309 -0
  294. package/dist/blocks/onboarding/index.d.ts +8 -3
  295. package/dist/blocks/onboarding/index.js +17 -63
  296. package/dist/blocks/onboarding/react/index.d.ts +3 -12
  297. package/dist/blocks/onboarding/react/index.js +18 -60
  298. package/dist/blocks/onboarding/react/server.d.ts +2 -2
  299. package/dist/blocks/onboarding/react/server.js +2 -2
  300. package/dist/blocks/onboarding/solid/index.d.ts +13 -0
  301. package/dist/blocks/onboarding/solid/index.js +14 -0
  302. package/dist/blocks/onboarding/svelte/index.d.ts +13 -0
  303. package/dist/blocks/onboarding/svelte/index.js +14 -0
  304. package/dist/blocks/onboarding/vue/index.d.ts +13 -0
  305. package/dist/blocks/onboarding/vue/index.js +14 -0
  306. package/dist/blocks/orders/index.d.ts +264 -0
  307. package/dist/blocks/orders/index.js +589 -0
  308. package/dist/blocks/organizations/index.d.ts +31 -238
  309. package/dist/blocks/organizations/index.js +49 -399
  310. package/dist/blocks/organizations/react/index.d.ts +108 -0
  311. package/dist/blocks/organizations/react/index.js +113 -0
  312. package/dist/blocks/organizations/react/server.d.ts +11 -0
  313. package/dist/blocks/organizations/react/server.js +15 -0
  314. package/dist/blocks/organizations/solid/index.d.ts +34 -0
  315. package/dist/blocks/organizations/solid/index.js +32 -0
  316. package/dist/blocks/organizations/svelte/index.d.ts +34 -0
  317. package/dist/blocks/organizations/svelte/index.js +32 -0
  318. package/dist/blocks/organizations/vue/index.d.ts +34 -0
  319. package/dist/blocks/organizations/vue/index.js +32 -0
  320. package/dist/blocks/outbox/index.d.ts +12 -3
  321. package/dist/blocks/outbox/index.js +97 -67
  322. package/dist/blocks/parties/index.d.ts +181 -0
  323. package/dist/blocks/parties/index.js +258 -0
  324. package/dist/blocks/pipelines/index.d.ts +189 -0
  325. package/dist/blocks/pipelines/index.js +204 -0
  326. package/dist/blocks/profiles/index.d.ts +14 -9
  327. package/dist/blocks/profiles/index.js +20 -6
  328. package/dist/blocks/promotions/index.d.ts +125 -0
  329. package/dist/blocks/promotions/index.js +123 -0
  330. package/dist/blocks/push/index.d.ts +48 -28
  331. package/dist/blocks/push/index.js +45 -16
  332. package/dist/blocks/quotes/index.d.ts +152 -0
  333. package/dist/blocks/quotes/index.js +209 -0
  334. package/dist/blocks/rank/index.d.ts +71 -0
  335. package/dist/blocks/rank/index.js +53 -0
  336. package/dist/blocks/reactions/index.d.ts +18 -0
  337. package/dist/blocks/reactions/index.js +26 -0
  338. package/dist/blocks/reactions/react/index.d.ts +23 -0
  339. package/dist/blocks/reactions/react/index.js +46 -0
  340. package/dist/blocks/reactions/react/server.d.ts +6 -0
  341. package/dist/blocks/reactions/react/server.js +7 -0
  342. package/dist/blocks/reactions/solid/index.d.ts +13 -0
  343. package/dist/blocks/reactions/solid/index.js +14 -0
  344. package/dist/blocks/reactions/svelte/index.d.ts +13 -0
  345. package/dist/blocks/reactions/svelte/index.js +14 -0
  346. package/dist/blocks/reactions/vue/index.d.ts +13 -0
  347. package/dist/blocks/reactions/vue/index.js +14 -0
  348. package/dist/blocks/relations/index.d.ts +180 -0
  349. package/dist/blocks/relations/index.js +254 -0
  350. package/dist/blocks/reminders/index.d.ts +177 -0
  351. package/dist/blocks/reminders/index.js +171 -0
  352. package/dist/blocks/reviews/index.d.ts +148 -0
  353. package/dist/blocks/reviews/index.js +139 -0
  354. package/dist/blocks/rules/index.d.ts +103 -0
  355. package/dist/blocks/rules/index.js +54 -0
  356. package/dist/blocks/rules/react/index.d.ts +34 -0
  357. package/dist/blocks/rules/react/index.js +55 -0
  358. package/dist/blocks/rules/react/server.d.ts +6 -0
  359. package/dist/blocks/rules/react/server.js +7 -0
  360. package/dist/blocks/rules/solid/index.d.ts +13 -0
  361. package/dist/blocks/rules/solid/index.js +14 -0
  362. package/dist/blocks/rules/svelte/index.d.ts +13 -0
  363. package/dist/blocks/rules/svelte/index.js +14 -0
  364. package/dist/blocks/rules/vue/index.d.ts +13 -0
  365. package/dist/blocks/rules/vue/index.js +14 -0
  366. package/dist/blocks/saved-views/index.d.ts +17 -0
  367. package/dist/blocks/saved-views/index.js +29 -0
  368. package/dist/blocks/saved-views/react/index.d.ts +34 -0
  369. package/dist/blocks/saved-views/react/index.js +57 -0
  370. package/dist/blocks/saved-views/react/server.d.ts +7 -0
  371. package/dist/blocks/saved-views/react/server.js +7 -0
  372. package/dist/blocks/saved-views/solid/index.d.ts +13 -0
  373. package/dist/blocks/saved-views/solid/index.js +14 -0
  374. package/dist/blocks/saved-views/svelte/index.d.ts +13 -0
  375. package/dist/blocks/saved-views/svelte/index.js +14 -0
  376. package/dist/blocks/saved-views/vue/index.d.ts +13 -0
  377. package/dist/blocks/saved-views/vue/index.js +14 -0
  378. package/dist/blocks/search/index.d.ts +31 -0
  379. package/dist/blocks/search/index.js +61 -0
  380. package/dist/blocks/search/react/index.d.ts +36 -0
  381. package/dist/blocks/search/react/index.js +49 -0
  382. package/dist/blocks/search/react/server.d.ts +7 -0
  383. package/dist/blocks/search/react/server.js +8 -0
  384. package/dist/blocks/search/solid/index.d.ts +13 -0
  385. package/dist/blocks/search/solid/index.js +14 -0
  386. package/dist/blocks/search/svelte/index.d.ts +13 -0
  387. package/dist/blocks/search/svelte/index.js +14 -0
  388. package/dist/blocks/search/vue/index.d.ts +13 -0
  389. package/dist/blocks/search/vue/index.js +14 -0
  390. package/dist/blocks/service-principals/index.d.ts +126 -0
  391. package/dist/blocks/service-principals/index.js +107 -0
  392. package/dist/blocks/sessions/index.d.ts +7 -0
  393. package/dist/blocks/sessions/index.js +14 -0
  394. package/dist/blocks/sessions/react/index.d.ts +31 -0
  395. package/dist/blocks/sessions/react/index.js +51 -0
  396. package/dist/blocks/sessions/react/server.d.ts +9 -0
  397. package/dist/blocks/sessions/react/server.js +11 -0
  398. package/dist/blocks/sessions/solid/index.d.ts +20 -0
  399. package/dist/blocks/sessions/solid/index.js +23 -0
  400. package/dist/blocks/sessions/svelte/index.d.ts +20 -0
  401. package/dist/blocks/sessions/svelte/index.js +23 -0
  402. package/dist/blocks/sessions/vue/index.d.ts +20 -0
  403. package/dist/blocks/sessions/vue/index.js +23 -0
  404. package/dist/blocks/settings/index.d.ts +20 -86
  405. package/dist/blocks/settings/index.js +28 -101
  406. package/dist/blocks/settings/react/index.d.ts +25 -0
  407. package/dist/blocks/settings/react/index.js +37 -0
  408. package/dist/blocks/settings/react/server.d.ts +7 -0
  409. package/dist/blocks/settings/react/server.js +7 -0
  410. package/dist/blocks/settings/solid/index.d.ts +13 -0
  411. package/dist/blocks/settings/solid/index.js +14 -0
  412. package/dist/blocks/settings/svelte/index.d.ts +13 -0
  413. package/dist/blocks/settings/svelte/index.js +14 -0
  414. package/dist/blocks/settings/vue/index.d.ts +13 -0
  415. package/dist/blocks/settings/vue/index.js +14 -0
  416. package/dist/blocks/share-links/index.d.ts +99 -0
  417. package/dist/blocks/share-links/index.js +99 -0
  418. package/dist/blocks/shared-signals/index.d.ts +395 -0
  419. package/dist/blocks/shared-signals/index.js +880 -0
  420. package/dist/blocks/signing-keys/index.d.ts +29 -0
  421. package/dist/blocks/signing-keys/index.js +161 -0
  422. package/dist/blocks/sla/index.d.ts +114 -0
  423. package/dist/blocks/sla/index.js +122 -0
  424. package/dist/blocks/sso/index.d.ts +169 -147
  425. package/dist/blocks/sso/index.js +259 -321
  426. package/dist/blocks/state-machine/index.d.ts +105 -0
  427. package/dist/blocks/state-machine/index.js +116 -0
  428. package/dist/blocks/tags/index.d.ts +20 -0
  429. package/dist/blocks/tags/index.js +28 -0
  430. package/dist/blocks/tags/react/index.d.ts +28 -0
  431. package/dist/blocks/tags/react/index.js +47 -0
  432. package/dist/blocks/tags/react/server.d.ts +7 -0
  433. package/dist/blocks/tags/react/server.js +7 -0
  434. package/dist/blocks/tags/solid/index.d.ts +13 -0
  435. package/dist/blocks/tags/solid/index.js +14 -0
  436. package/dist/blocks/tags/svelte/index.d.ts +13 -0
  437. package/dist/blocks/tags/svelte/index.js +14 -0
  438. package/dist/blocks/tags/vue/index.d.ts +13 -0
  439. package/dist/blocks/tags/vue/index.js +14 -0
  440. package/dist/blocks/targets/index.d.ts +82 -0
  441. package/dist/blocks/targets/index.js +73 -0
  442. package/dist/blocks/teams/index.d.ts +61 -0
  443. package/dist/blocks/teams/index.js +83 -0
  444. package/dist/blocks/templates/index.d.ts +362 -0
  445. package/dist/blocks/templates/index.js +483 -0
  446. package/dist/blocks/time-tracking/index.d.ts +250 -0
  447. package/dist/blocks/time-tracking/index.js +317 -0
  448. package/dist/blocks/trash/index.d.ts +78 -0
  449. package/dist/blocks/trash/index.js +79 -0
  450. package/dist/blocks/undo/index.d.ts +9 -0
  451. package/dist/blocks/undo/index.js +14 -0
  452. package/dist/blocks/undo/react/index.d.ts +17 -0
  453. package/dist/blocks/undo/react/index.js +24 -0
  454. package/dist/blocks/undo/react/server.d.ts +7 -0
  455. package/dist/blocks/undo/react/server.js +7 -0
  456. package/dist/blocks/undo/solid/index.d.ts +13 -0
  457. package/dist/blocks/undo/solid/index.js +14 -0
  458. package/dist/blocks/undo/svelte/index.d.ts +13 -0
  459. package/dist/blocks/undo/svelte/index.js +14 -0
  460. package/dist/blocks/undo/vue/index.d.ts +13 -0
  461. package/dist/blocks/undo/vue/index.js +14 -0
  462. package/dist/blocks/usage/index.d.ts +10 -4
  463. package/dist/blocks/usage/index.js +16 -232
  464. package/dist/blocks/usage/react/index.d.ts +23 -0
  465. package/dist/blocks/usage/react/index.js +38 -0
  466. package/dist/blocks/usage/react/server.d.ts +7 -0
  467. package/dist/blocks/usage/react/server.js +7 -0
  468. package/dist/blocks/usage/solid/index.d.ts +13 -0
  469. package/dist/blocks/usage/solid/index.js +14 -0
  470. package/dist/blocks/usage/svelte/index.d.ts +13 -0
  471. package/dist/blocks/usage/svelte/index.js +14 -0
  472. package/dist/blocks/usage/vue/index.d.ts +13 -0
  473. package/dist/blocks/usage/vue/index.js +14 -0
  474. package/dist/blocks/versions/index.d.ts +165 -0
  475. package/dist/blocks/versions/index.js +283 -0
  476. package/dist/blocks/waitlist/index.d.ts +57 -19
  477. package/dist/blocks/waitlist/index.js +47 -12
  478. package/dist/blocks/webhooks/index.d.ts +275 -134
  479. package/dist/blocks/webhooks/index.js +775 -231
  480. package/dist/blocks/work-items/index.d.ts +208 -0
  481. package/dist/blocks/work-items/index.js +305 -0
  482. package/dist/blocks/workflow-builder/index.d.ts +26 -6
  483. package/dist/blocks/workflow-builder/index.js +30 -5
  484. package/dist/blocks/workflow-builder/react/index.d.ts +4 -19
  485. package/dist/blocks/workflow-builder/react/index.js +45 -89
  486. package/dist/blocks/workflow-builder/solid/index.d.ts +20 -0
  487. package/dist/blocks/workflow-builder/solid/index.js +23 -0
  488. package/dist/blocks/workflow-builder/svelte/index.d.ts +20 -0
  489. package/dist/blocks/workflow-builder/svelte/index.js +23 -0
  490. package/dist/blocks/workflow-builder/vue/index.d.ts +20 -0
  491. package/dist/blocks/workflow-builder/vue/index.js +23 -0
  492. package/dist/blocks/workflows/index.d.ts +20 -3
  493. package/dist/blocks/workflows/index.js +27 -3
  494. package/dist/blocks/workflows/react/index.d.ts +5 -20
  495. package/dist/blocks/workflows/react/index.js +41 -113
  496. package/dist/blocks/workflows/solid/index.d.ts +20 -0
  497. package/dist/blocks/workflows/solid/index.js +23 -0
  498. package/dist/blocks/workflows/svelte/index.d.ts +20 -0
  499. package/dist/blocks/workflows/svelte/index.js +23 -0
  500. package/dist/blocks/workflows/vue/index.d.ts +20 -0
  501. package/dist/blocks/workflows/vue/index.js +23 -0
  502. package/dist/blocks-D2WQ63PI.js +84 -0
  503. package/dist/bookings-0XnhHNLM.js +181 -0
  504. package/dist/build-Cm0T5MVG.js +1815 -0
  505. package/dist/build-Cx08LOT7.js +689 -0
  506. package/dist/calendar-DcFrpSOy.js +801 -0
  507. package/dist/casing-DdFWEtqr.js +16 -0
  508. package/dist/channel-D-LHCY11.d.ts +78 -0
  509. package/dist/channels-C-GCoNLd.js +114 -0
  510. package/dist/chat-sdk/index.d.ts +131 -7
  511. package/dist/chat-sdk/index.js +155 -6
  512. package/dist/chat-sdk/react/index.d.ts +2 -1
  513. package/dist/chat-sdk/react/index.js +1 -2
  514. package/dist/chat-sdk/react/server.d.ts +2 -1
  515. package/dist/chat-sdk/react/server.js +1 -2
  516. package/dist/claims-0KZVT804.js +61 -0
  517. package/dist/cli/add-B0zoJUYX.js +651 -0
  518. package/dist/cli/add-Bd5M6uEZ.js +75 -0
  519. package/dist/cli/add-CT6p5psO.js +1 -0
  520. package/dist/cli/adopt-C9jl8z0h.js +1 -0
  521. package/dist/cli/adopt-CebmlHL-.js +393 -0
  522. package/dist/cli/agent-CCt_aXpJ.js +176 -0
  523. package/dist/cli/apply-Dxk8AUNU.js +302 -0
  524. package/dist/cli/arazzo-1.0-BalU61-_.js +532 -0
  525. package/dist/cli/arazzo-1.1-Bnfasbun.js +705 -0
  526. package/dist/cli/asyncapi-3.0.0-C78dBjR6.js +5593 -0
  527. package/dist/cli/asyncapi-3.1.0-g-7aIfV1.js +5833 -0
  528. package/dist/cli/bin.js +41 -21
  529. package/dist/cli/blocks-Bzz326nn.js +1 -0
  530. package/dist/cli/blocks-Dq25D80b.js +124 -0
  531. package/dist/cli/cache-Cx6qlRDR.js +502 -0
  532. package/dist/cli/catalog-Di15TkM2.js +187 -0
  533. package/dist/cli/codemod-woL4cVe0.js +985 -0
  534. package/dist/cli/command-CK9Cn8HV.js +836 -0
  535. package/dist/cli/completion-BO5UK6bG.js +1 -0
  536. package/dist/cli/completion-CWoDmFZr.js +205 -0
  537. package/dist/cli/completion-J3dqnNoW.js +30 -0
  538. package/dist/cli/config-C1d-mbUA.js +1 -0
  539. package/dist/cli/config-CLHpTk9Y.js +1421 -0
  540. package/dist/cli/config-MuKY9kUj.js +39 -0
  541. package/dist/cli/config-edit-Ct1lXe8a.js +603 -0
  542. package/dist/cli/db-DT1bGB02.js +78 -0
  543. package/dist/cli/design-edit-B-WsnhUF.js +175 -0
  544. package/dist/cli/detect-DYDUBLU4.js +84 -0
  545. package/dist/cli/dist-D_VbPAMR.js +129 -0
  546. package/dist/cli/dist-DuiMMRbJ.js +1112 -0
  547. package/dist/cli/doctor-SGw36h1D.js +3806 -0
  548. package/dist/cli/emit-ZAYeh4Yn.js +1042 -0
  549. package/dist/cli/env-CVXvJoLP.js +142 -0
  550. package/dist/cli/env-D3gZ-OHj.js +1 -0
  551. package/dist/cli/env-DJ4ZaJpe.js +1 -0
  552. package/dist/cli/env-DMw_MBe5.js +996 -0
  553. package/dist/cli/errors-Caiz_0so.js +98 -0
  554. package/dist/cli/fastest-levenshtein-dhRRvrM2.js +120 -0
  555. package/dist/cli/files-DDvAwTko.js +963 -0
  556. package/dist/cli/gen-B344S1Oy.js +304 -0
  557. package/dist/cli/guards-CUlDNYZs.js +8 -0
  558. package/dist/cli/index.d.ts +297 -140
  559. package/dist/cli/index.js +13 -8
  560. package/dist/cli/init-B1dL-RZL.js +393 -0
  561. package/dist/cli/introspect-BPcFi8ow.js +51 -0
  562. package/dist/cli/io-BiPX-_J1.js +37 -0
  563. package/dist/cli/jsonc-C8M0EhHB.js +1 -0
  564. package/dist/cli/keys-jsxCNJdz.js +106 -0
  565. package/dist/cli/metadata-CxBZo4KM.js +138 -0
  566. package/dist/cli/module-migration-YFFdWC5X.js +592 -0
  567. package/dist/cli/moved-D9OT_Uyy.js +152 -0
  568. package/dist/cli/names-D6LrQnOv.js +6 -0
  569. package/dist/cli/openapi-3.0-t7xwkuRH.js +928 -0
  570. package/dist/cli/openapi-3.1-CVze7tBS.js +870 -0
  571. package/dist/cli/openapi-3.2-CFoMYM01.js +1031 -0
  572. package/dist/cli/parse-DE59XyWt.js +170 -0
  573. package/dist/cli/preset-DmcC4nWE.js +129 -0
  574. package/dist/cli/prompts-Bvg_DBpe.js +1137 -0
  575. package/dist/cli/redact-PjNswZOs.js +35 -0
  576. package/dist/cli/rolldown-runtime-kJ_i4yPo.js +26 -0
  577. package/dist/cli/run-CM_2g6KQ.js +684 -0
  578. package/dist/cli/run-DaHfUUO9.js +1539 -0
  579. package/dist/cli/scaffold-CFdDq36-.js +898 -0
  580. package/dist/cli/scaffold-Dsjr7sOT.js +1 -0
  581. package/dist/cli/seed-DldDdXWO.js +113 -0
  582. package/dist/cli/seed-DtRFysBe.js +1 -0
  583. package/dist/cli/shell-Btv_4Yhe.js +10 -0
  584. package/dist/cli/skills-v34NDb2D.js +121 -0
  585. package/dist/cli/snapshot-DAxLi4hO.js +347 -0
  586. package/dist/cli/source-args-0I9zylYy.js +47 -0
  587. package/dist/cli/spec-CaaSOYZS.js +7501 -0
  588. package/dist/cli/spec-De0cfceR.js +1 -0
  589. package/dist/cli/sql-0I1EQ3JG.js +2 -0
  590. package/dist/cli/sql-DDLWwzh9.js +326 -0
  591. package/dist/cli/stack-status-CRanl-CN.js +456 -0
  592. package/dist/cli/style-2JfIPVMQ.js +29 -0
  593. package/dist/cli/supabase-toml-DjLgBYEo.js +1153 -0
  594. package/dist/cli/sync-DFx-6t5n.js +88 -0
  595. package/dist/cli/topics-GJuIDwlY.js +30 -0
  596. package/dist/cli/trace-VbdO6bcN.js +7 -0
  597. package/dist/cli/typegen--TfvOPLh.js +494 -0
  598. package/dist/cli/typegen-version-BNBPI4Eu.js +9 -0
  599. package/dist/cli/validate-BfWNKvxy.js +7522 -0
  600. package/dist/cli/version-DNRW4DAP.js +4 -0
  601. package/dist/cli/write-BS6F3Yvz.js +180 -0
  602. package/dist/client/index.d.ts +7 -3
  603. package/dist/client/index.js +207 -4
  604. package/dist/client/native/index.d.ts +71 -4
  605. package/dist/client/native/index.js +65 -6
  606. package/dist/client-01MAuqzW.js +137 -0
  607. package/dist/client-B7QVIrJS.d.ts +263 -0
  608. package/dist/client-B9CqzgPO.js +75 -0
  609. package/dist/client-BAcILZOf.d.ts +122 -0
  610. package/dist/client-BOT2KVIp.js +128 -0
  611. package/dist/client-BUGIS__1.js +1051 -0
  612. package/dist/client-BVZtq_rQ.d.ts +34 -0
  613. package/dist/client-BYaOGCOG.js +84 -0
  614. package/dist/client-BfgwocyT.js +155 -0
  615. package/dist/client-BpS8a6Fm.js +51 -0
  616. package/dist/client-BxnLb9bz.d.ts +58 -0
  617. package/dist/client-BzCv4kKE.js +65 -0
  618. package/dist/client-C-2ajnhM.js +89 -0
  619. package/dist/client-C5mUEb2n.js +55 -0
  620. package/dist/client-C9QrWrnt.js +209 -0
  621. package/dist/client-CFdMJ1h9.d.ts +277 -0
  622. package/dist/client-CHmjaI0j.d.ts +103 -0
  623. package/dist/client-CWs3X4g1.js +120 -0
  624. package/dist/client-Cdedx_lw.js +438 -0
  625. package/dist/client-CiGjS6us.js +169 -0
  626. package/dist/client-CilSKXNu.js +288 -0
  627. package/dist/client-ClZ0D-if.d.ts +162 -0
  628. package/dist/client-Cmensu7l.d.ts +419 -0
  629. package/dist/client-Co6BPmvr.d.ts +108 -0
  630. package/dist/client-CoVGPi0c.js +133 -0
  631. package/dist/client-CvITjt-9.js +310 -0
  632. package/dist/client-CzI4QpG3.d.ts +131 -0
  633. package/dist/client-D5CZ2a34.d.ts +455 -0
  634. package/dist/client-DAHsEOVV.d.ts +155 -0
  635. package/dist/client-DG7FwgZD.js +104 -0
  636. package/dist/client-DIrCmOXz.d.ts +157 -0
  637. package/dist/client-DNq8xYb-.js +52 -0
  638. package/dist/client-DdfSIZ3M.d.ts +107 -0
  639. package/dist/client-DjTRlN3a.d.ts +68 -0
  640. package/dist/client-Ezlbskjq.js +60 -0
  641. package/dist/client-LLmgiCwJ.d.ts +135 -0
  642. package/dist/client-Lx3mlvKO.d.ts +100 -0
  643. package/dist/client-PGRk3DGz.js +98 -0
  644. package/dist/client-Tc47rlSe.d.ts +350 -0
  645. package/dist/client-VvY0K3wr.d.ts +59 -0
  646. package/dist/client-WAdEBBrH.d.ts +65 -0
  647. package/dist/client-WHeWTNVL.d.ts +130 -0
  648. package/dist/client-WgrPIHH-.js +213 -0
  649. package/dist/client-ZTtSV3l8.js +40 -0
  650. package/dist/client-b2_GjzzD.js +438 -0
  651. package/dist/client-ckXfdy1k.js +38 -0
  652. package/dist/client-e-hFkLUf.d.ts +34 -0
  653. package/dist/client-hyP_nS5R.d.ts +218 -0
  654. package/dist/client-i8glKhxh.js +67 -0
  655. package/dist/client-iDLLvGR4.d.ts +52 -0
  656. package/dist/client-pxjbgOz6.js +376 -0
  657. package/dist/client-xkSCp9hN.d.ts +101 -0
  658. package/dist/client-ysNShuJZ.d.ts +39 -0
  659. package/dist/clone-dN9XOL1K.js +29 -0
  660. package/dist/cloud-event-5rCEzIgK.d.ts +64 -0
  661. package/dist/cloud-event-CTh9Sr5w.js +60 -0
  662. package/dist/codecs-Bm46sVxr.d.ts +215 -0
  663. package/dist/codecs-YAekuQ08.js +358 -0
  664. package/dist/codegen-DeoSt1mi.d.ts +1571 -0
  665. package/dist/comments-D7sbd0xG.js +230 -0
  666. package/dist/commerce/index.d.ts +211 -0
  667. package/dist/commerce/index.js +517 -0
  668. package/dist/compiler-BVxepAY0.d.ts +14 -0
  669. package/dist/compose-Djntdacs.js +53 -0
  670. package/dist/composite-M6zPs1Xm.js +130 -0
  671. package/dist/composite-djtGy6bz.d.ts +67 -0
  672. package/dist/config/index.d.ts +7 -6
  673. package/dist/config/index.js +7 -4
  674. package/dist/config-BA1K4OPk.js +557 -0
  675. package/dist/config-C4MozTD7.js +3892 -0
  676. package/dist/connector-Cp8CqssJ.d.ts +107 -0
  677. package/dist/connectors-CjD-R2ks.d.ts +141 -0
  678. package/dist/context-1sSWcd7_.d.ts +365 -0
  679. package/dist/context-B8_p3MXo.js +11 -0
  680. package/dist/context-BDDgjoxz.js +41 -0
  681. package/dist/context-C-bHOtoD.js +5 -0
  682. package/dist/context-D6ZMKc2L.js +19 -0
  683. package/dist/context-wDKxSl9x.js +9 -0
  684. package/dist/controller-D6NyNrlZ.js +79 -0
  685. package/dist/controller-D845qKh2.d.ts +46 -0
  686. package/dist/credentials/index.d.ts +15 -5
  687. package/dist/credentials/index.js +17 -17
  688. package/dist/cron-CUaKTjWC.js +145 -0
  689. package/dist/cron-route-CoL-By8Z.js +24 -0
  690. package/dist/csv-CVfXqaAu.js +89 -0
  691. package/dist/csv-D3eKxV1T.d.ts +28 -0
  692. package/dist/define-B2ln373W.js +1896 -0
  693. package/dist/define-DxHHbNEb.d.ts +1005 -0
  694. package/dist/define-block-B6Gjs57G.js +52 -0
  695. package/dist/define-block-CLZMEFeK.d.ts +256 -0
  696. package/dist/delegation-Dt8hMJWu.js +140 -0
  697. package/dist/delivery-B1mKaOen.js +30 -0
  698. package/dist/delivery-BeHgwS3k.d.ts +69 -0
  699. package/dist/documents-CWn2mtYf.d.ts +96 -0
  700. package/dist/edge/index.d.ts +68 -13
  701. package/dist/edge/index.js +75 -43
  702. package/dist/elysia/index.d.ts +1 -1
  703. package/dist/elysia/index.js +2 -2
  704. package/dist/email-BcmbIWOX.d.ts +42 -0
  705. package/dist/embeddings-C2S14foD.d.ts +78 -0
  706. package/dist/embeddings-CVeOoufZ.js +128 -0
  707. package/dist/ended-nIdGCHxk.d.ts +70 -0
  708. package/dist/entitlements-BvU5dLpW.js +45 -0
  709. package/dist/entitlements-CbzCKalR.d.ts +53 -0
  710. package/dist/env/index.d.ts +1 -1
  711. package/dist/env/index.js +12 -5
  712. package/dist/envelope-CHYk5MXU.js +90 -0
  713. package/dist/errors-8i6tSICm.js +301 -0
  714. package/dist/errors-PIpcoe4z.js +44 -0
  715. package/dist/escape-like-AUEPn-C5.d.ts +15 -0
  716. package/dist/eve/index.d.ts +5 -5
  717. package/dist/eve/index.js +11 -17
  718. package/dist/eve-DUF70Vgi.d.ts +151 -0
  719. package/dist/event-calendar-DJXXMJ3x.d.ts +217 -0
  720. package/dist/event-map-Dy2vKHai.js +19 -0
  721. package/dist/events/index.d.ts +4 -4
  722. package/dist/events/index.js +16 -8
  723. package/dist/events-CTreRrgP.d.ts +800 -0
  724. package/dist/events-xbpHkcK9.js +82 -0
  725. package/dist/executor-BBHgjUJu.d.ts +39 -0
  726. package/dist/executor-BINiCFNp.d.ts +95 -0
  727. package/dist/executor-BXSHYyW2.js +735 -0
  728. package/dist/executor-D1kYY5BA.js +206 -0
  729. package/dist/executor-D3K3tycZ.js +147 -0
  730. package/dist/executor-DKrZr3AC.d.ts +174 -0
  731. package/dist/executor-DoE-5iM8.d.ts +272 -0
  732. package/dist/expo/index.d.ts +4 -4
  733. package/dist/expo/index.js +7 -7
  734. package/dist/expo-sqlite/index.d.ts +3 -3
  735. package/dist/expo-sqlite/index.js +2 -2
  736. package/dist/extra-CGQ2_q3S.js +10 -0
  737. package/dist/field-errors-CWXN_h_E.d.ts +113 -0
  738. package/dist/field-errors-DZVRWRkf.js +13 -0
  739. package/dist/field-formats-Cif5gr7c.js +102 -0
  740. package/dist/field-formats-DCvOQlOy.d.ts +39 -0
  741. package/dist/filter-evaluate-C0ULNfS7.js +214 -0
  742. package/dist/filter-evaluate-CjcFq0RT.d.ts +34 -0
  743. package/dist/filter-query-B3lhckKX.js +518 -0
  744. package/dist/filter-query-BKmRYrTE.d.ts +121 -0
  745. package/dist/flags-D_D1jAHB.d.ts +230 -0
  746. package/dist/flags-XAOsdNAc.js +279 -0
  747. package/dist/flags-sdk/index.d.ts +143 -0
  748. package/dist/flags-sdk/index.js +175 -0
  749. package/dist/form-definition-sagoefQr.d.ts +95 -0
  750. package/dist/format-CNwSjXUU.d.ts +70 -0
  751. package/dist/framework-DG5Bv39u.d.ts +26 -0
  752. package/dist/framework-INbjMZX1.js +51 -0
  753. package/dist/function-contract-B4c0XuTU.d.ts +21 -0
  754. package/dist/function-contract-DmkBg19r.js +5 -0
  755. package/dist/gateway-Cup00l0w.d.ts +109 -0
  756. package/dist/gateway-options-ClvvfuuU.d.ts +29 -0
  757. package/dist/gateway-options-DcLcWL5_.js +27 -0
  758. package/dist/graph-Cs28bOlK.js +360 -0
  759. package/dist/groups-CxonH3u5.js +16 -0
  760. package/dist/guards-6F2bCtQR.js +12 -0
  761. package/dist/h3/index.d.ts +7 -3
  762. package/dist/h3/index.js +3 -3
  763. package/dist/h3/v1/index.d.ts +1 -1
  764. package/dist/h3/v1/index.js +2 -2
  765. package/dist/history-GH1HJWQV.js +271 -0
  766. package/dist/hmac-DCud0myt.js +22 -0
  767. package/dist/hono/index.d.ts +33 -14
  768. package/dist/hono/index.js +58 -25
  769. package/dist/http-BF-V0CUF.js +25 -0
  770. package/dist/impersonation-CDeCzZP6.js +62 -0
  771. package/dist/impersonation-D5chOkrO.d.ts +25 -0
  772. package/dist/inbox-3ql4phyr.d.ts +400 -0
  773. package/dist/index-BIi8i6BO.d.ts +97 -0
  774. package/dist/index-BkzNUPId.d.ts +131 -0
  775. package/dist/index-BlqrGvb3.d.ts +227 -0
  776. package/dist/index-Brhm22eL.d.ts +138 -0
  777. package/dist/index-Bvw9r94Q.d.ts +245 -0
  778. package/dist/index-CETRk4YO.d.ts +82 -0
  779. package/dist/index-CrZitvSC.d.ts +258 -0
  780. package/dist/index-DfVXx4Ia.d.ts +202 -0
  781. package/dist/index-DygICr8c.d.ts +206 -0
  782. package/dist/index-Ej8XQ9w9.d.ts +58 -0
  783. package/dist/index-jhqhynmh.d.ts +58 -0
  784. package/dist/index.d.ts +90 -15
  785. package/dist/index.js +16 -14
  786. package/dist/iso4217-A8ev-CNW.js +176 -0
  787. package/dist/json-schema-CpYINXG8.js +548 -0
  788. package/dist/jws-35a8VhFV.d.ts +60 -0
  789. package/dist/jws-milwSg7E.js +191 -0
  790. package/dist/kit-D5S7KNFe.d.ts +66 -0
  791. package/dist/kit-MUK34-ZG.js +104 -0
  792. package/dist/knowledge-BXQ2-V0a.d.ts +187 -0
  793. package/dist/knowledge-CJ_Mm3ic.js +272 -0
  794. package/dist/lint/index.js +9 -9
  795. package/dist/list/index.d.ts +4 -3
  796. package/dist/list/index.js +4 -2
  797. package/dist/list-query-CBXNfJt4.js +549 -0
  798. package/dist/list-query-PvP3pPGQ.d.ts +194 -0
  799. package/dist/live-DwDreq1n.js +239 -0
  800. package/dist/mcp/index.d.ts +67 -20
  801. package/dist/mcp/index.js +220 -135
  802. package/dist/mcp/sdk/index.d.ts +38 -6
  803. package/dist/mcp/sdk/index.js +89 -7
  804. package/dist/message-B0fNJgq8.d.ts +93 -0
  805. package/dist/messages-Cx4ttLJJ.js +493 -0
  806. package/dist/metric-definition-95HFoW1V.d.ts +70 -0
  807. package/dist/metric-definition-BjxVn4R5.js +117 -0
  808. package/dist/mfa-DtflCXEt.d.ts +30 -0
  809. package/dist/model-lUafmeBQ.d.ts +311 -0
  810. package/dist/model-messages-CTu-6kBu.js +206 -0
  811. package/dist/model-messages-D4GZllOD.d.ts +34 -0
  812. package/dist/money-95Rff2vT.js +185 -0
  813. package/dist/money-DFpWzQvk.d.ts +76 -0
  814. package/dist/money-codec-C_-K5ZUU.js +41 -0
  815. package/dist/nestjs/index.d.ts +2 -2
  816. package/dist/nestjs/index.js +2 -2
  817. package/dist/next/index.d.ts +115 -55
  818. package/dist/next/index.js +208 -173
  819. package/dist/node/index.d.ts +2 -2
  820. package/dist/node/index.js +3 -3
  821. package/dist/nuxt/index.d.ts +2 -2
  822. package/dist/nuxt/index.js +3 -2
  823. package/dist/onboarding-BZvLLPaY.js +68 -0
  824. package/dist/openapi/index.d.ts +4 -2
  825. package/dist/openapi/index.js +21 -343
  826. package/dist/operations-C9-UcReN.d.ts +6 -0
  827. package/dist/operations-CsIfMED7.js +29 -0
  828. package/dist/optional-peer-Dx8TaYXw.js +29 -0
  829. package/dist/options-B0FcEKtH.js +5 -0
  830. package/dist/options-B5BU2Yg7.js +11 -0
  831. package/dist/options-B5woz53h.js +5 -0
  832. package/dist/options-B7EJaOX-.js +5 -0
  833. package/dist/options-B9q8CROT.js +9 -0
  834. package/dist/options-BA6jV6py.js +10 -0
  835. package/dist/options-BAW2ZlZ8.js +8 -0
  836. package/dist/options-BMjcVuaI.js +82 -0
  837. package/dist/options-BOOEzor9.js +5 -0
  838. package/dist/options-BQ07tTYr.js +11 -0
  839. package/dist/options-BZsoPJGX.js +5 -0
  840. package/dist/options-BesyRBnM.js +16 -0
  841. package/dist/options-Bf96aVk5.js +10 -0
  842. package/dist/options-BlOPivzq.js +8 -0
  843. package/dist/options-Blg8lAkz.js +9 -0
  844. package/dist/options-Bn4cu0gt.js +5 -0
  845. package/dist/options-BnoJOwXK.js +8 -0
  846. package/dist/options-Bp7sgKvl.js +30 -0
  847. package/dist/options-BqO9GYig.js +311 -0
  848. package/dist/options-BxcFLL1G.js +8 -0
  849. package/dist/options-C1HR4UZd.js +13 -0
  850. package/dist/options-C239TLRF.js +14 -0
  851. package/dist/options-C2HesT4A.js +9 -0
  852. package/dist/options-C3EzJATk.js +10 -0
  853. package/dist/options-C3hZ1fbC.js +10 -0
  854. package/dist/options-C6rEL6U5.js +8 -0
  855. package/dist/options-CAzVf-1T.js +8 -0
  856. package/dist/options-CGKSUFUq.js +5 -0
  857. package/dist/options-CGjGE8xS.js +12 -0
  858. package/dist/options-CK5WiFwG.js +11 -0
  859. package/dist/options-CN7PHkhU.js +8 -0
  860. package/dist/options-CTZNpb2n.js +5 -0
  861. package/dist/options-CUqQ9pm7.js +9 -0
  862. package/dist/options-CVSWgZpY.js +8 -0
  863. package/dist/options-CXFz0xxS.js +8 -0
  864. package/dist/options-CZk_fbbg.js +9 -0
  865. package/dist/options-C_pb1Nd3.js +5 -0
  866. package/dist/options-CbSOj53r.d.ts +52 -0
  867. package/dist/options-ChD15QxJ.js +9 -0
  868. package/dist/options-CkScQRJR.js +12 -0
  869. package/dist/options-CljDnQt2.js +25 -0
  870. package/dist/options-CmraJhd9.js +5 -0
  871. package/dist/options-CoX6VKGb.js +8 -0
  872. package/dist/options-CrC78Tee.js +5 -0
  873. package/dist/options-Ctac2R0Q.js +11 -0
  874. package/dist/options-CyD7OObW.js +17 -0
  875. package/dist/options-D1blDihM.js +9 -0
  876. package/dist/options-D2Gd6VfS.js +8 -0
  877. package/dist/options-D2d1fFuw.js +11 -0
  878. package/dist/options-D40CQzji.js +8 -0
  879. package/dist/options-D7f2VKzj.js +25 -0
  880. package/dist/options-DARkpk2P.js +8 -0
  881. package/dist/options-DCduTMST.js +17 -0
  882. package/dist/options-DDzggjN7.js +8 -0
  883. package/dist/options-DMR68VAC.js +5 -0
  884. package/dist/options-DNKyN5uq.js +20 -0
  885. package/dist/options-DTDxFT6J.js +13 -0
  886. package/dist/options-DWpz3V3F.js +8 -0
  887. package/dist/options-DXqcJyOP.js +10 -0
  888. package/dist/options-DYBQ973I.js +8 -0
  889. package/dist/options-Dh4wu9Ks.js +15 -0
  890. package/dist/options-Dmg1Da9P.js +25 -0
  891. package/dist/options-DsUgamiy.js +5 -0
  892. package/dist/options-EsUh744F.js +13 -0
  893. package/dist/options-Fz6xqu-b.js +5 -0
  894. package/dist/options-HSv8R6h5.js +13 -0
  895. package/dist/options-I8zVkB_y.js +8 -0
  896. package/dist/options-MHhjOoWz.js +5 -0
  897. package/dist/options-MLxMkd5B.js +11 -0
  898. package/dist/options-OJ5zmgr8.js +10 -0
  899. package/dist/options-QKP9FFcK.js +8 -0
  900. package/dist/options-SViK_2x2.js +12 -0
  901. package/dist/options-XgfTctbI.js +5 -0
  902. package/dist/options-_9arpsX9.js +11 -0
  903. package/dist/options-eBPsk4WI.js +11 -0
  904. package/dist/options-kLKILdIu.js +10 -0
  905. package/dist/options-n22NK3PL.js +8 -0
  906. package/dist/options-oeAq4Ho5.js +12 -0
  907. package/dist/options-qU8vgxhO.js +18 -0
  908. package/dist/options-vXMBEWSH.js +5 -0
  909. package/dist/options-wFnK3qWl.js +9 -0
  910. package/dist/options-xVAy3UsV.js +9 -0
  911. package/dist/organizations-Cw7om8uk.js +398 -0
  912. package/dist/orpc/index.d.ts +26 -10
  913. package/dist/orpc/index.js +66 -44
  914. package/dist/otel/index.d.ts +3 -3
  915. package/dist/otel/index.js +42 -7
  916. package/dist/outbox-BTeqjbum.d.ts +181 -0
  917. package/dist/overlay/index.d.ts +233 -0
  918. package/dist/overlay/index.js +554 -0
  919. package/dist/payments-h45bswA-.js +16 -0
  920. package/dist/pg-error-BV_X8Isq.js +26 -0
  921. package/dist/plugin-CDLJRFFg.d.ts +190 -0
  922. package/dist/plugins/actor/index.d.ts +1 -1
  923. package/dist/plugins/actor/index.js +1 -1
  924. package/dist/plugins/rules/index.d.ts +2 -2
  925. package/dist/plugins/rules/index.js +2 -2
  926. package/dist/plugins/soft-delete/index.d.ts +3 -3
  927. package/dist/plugins/soft-delete/index.js +11 -4
  928. package/dist/plugins/tenant/index.d.ts +9 -3
  929. package/dist/plugins/tenant/index.js +17 -3
  930. package/dist/plugins/timestamps/index.d.ts +1 -1
  931. package/dist/plugins/timestamps/index.js +8 -1
  932. package/dist/plugins/validation/index.d.ts +2 -2
  933. package/dist/plugins/validation/index.js +4 -4
  934. package/dist/pool-CwOCsX9e.d.ts +114 -0
  935. package/dist/pool-errors-GMjlCN0d.js +27 -0
  936. package/dist/ports-Ca63W4cW.d.ts +285 -0
  937. package/dist/ports-DAdQyjZz.d.ts +86 -0
  938. package/dist/ports-DGK3KTDH.js +133 -0
  939. package/dist/postgres/index.d.ts +28 -6
  940. package/dist/postgres/index.js +54 -22
  941. package/dist/postgrest-Cw9Bs5gm.d.ts +53 -0
  942. package/dist/powersync/index.d.ts +5 -5
  943. package/dist/powersync/index.js +4 -4
  944. package/dist/powersync/react/index.d.ts +8 -3
  945. package/dist/powersync/react/index.js +11 -3
  946. package/dist/preset/index.d.ts +352 -0
  947. package/dist/preset/index.js +564 -0
  948. package/dist/problem-CEjyhV5T.d.ts +76 -0
  949. package/dist/problem-pIiL3WbE.js +159 -0
  950. package/dist/provider-9gBq9W6k.d.ts +113 -0
  951. package/dist/provider-DKh2xFZb.js +57 -0
  952. package/dist/push-token-D6REHMMw.js +16 -0
  953. package/dist/push-token-asrmi7-6.d.ts +24 -0
  954. package/dist/query/index.d.ts +2 -2
  955. package/dist/query/index.js +1 -1
  956. package/dist/query-Ctz-qKRx.js +303 -0
  957. package/dist/range-DwpWe8e7.js +7 -0
  958. package/dist/range-p5V4rBhZ.d.ts +8 -0
  959. package/dist/rank-keys-DcPMt_Jk.js +60 -0
  960. package/dist/rank-result-DS8IoLup.js +18 -0
  961. package/dist/rank-result-Dngpt2n5.d.ts +14 -0
  962. package/dist/rate-limit--QSiFA6D.js +325 -0
  963. package/dist/rate-limit-BtbddDnE.js +49 -0
  964. package/dist/rate-limit-C88MEAOm.d.ts +41 -0
  965. package/dist/ratelimit-headers-Bsxx0Tj2.js +62 -0
  966. package/dist/react/index.d.ts +9 -9
  967. package/dist/react/index.js +4 -5
  968. package/dist/react/native/index.d.ts +1 -1
  969. package/dist/react/native/index.js +2 -2
  970. package/dist/react/server.d.ts +10 -10
  971. package/dist/react/server.js +4 -4
  972. package/dist/react/session.d.ts +2 -2
  973. package/dist/react-CKXUkwPx.js +410 -0
  974. package/dist/react-controller-Xn-IU44p.js +40 -0
  975. package/dist/react-env-Cc7Vf6eb.js +13 -0
  976. package/dist/react-router/index.d.ts +6 -6
  977. package/dist/react-router/index.js +10 -12
  978. package/dist/read-set-GEb-i0On.js +314 -0
  979. package/dist/realtime/index.d.ts +8 -4
  980. package/dist/realtime/index.js +5 -333
  981. package/dist/realtime-status-D2dw1hOE.js +12 -0
  982. package/dist/realtime-status-DcsO00Gw.d.ts +8 -0
  983. package/dist/refusal-br4Ma9Cf.js +61 -0
  984. package/dist/refusal-oD3ISM9h.d.ts +18 -0
  985. package/dist/replicas-BvIL4_jL.js +94 -0
  986. package/dist/resolve-CAR9oaKW.js +869 -0
  987. package/dist/resolve-w9EpHzuM.d.ts +266 -0
  988. package/dist/resource-B4ka8dDH.d.ts +106 -0
  989. package/dist/resource-C8r5xGqY.js +463 -0
  990. package/dist/resource-DO4gbVi5.js +91 -0
  991. package/dist/resource-execute-D0yQ-8WR.d.ts +12 -0
  992. package/dist/resource-schemas-BJ518zFH.js +79 -0
  993. package/dist/resource-types-D2vEQVXI.d.ts +141 -0
  994. package/dist/resources-BklF-rjz.d.ts +7 -0
  995. package/dist/resources-BlZdLsWQ.js +64 -0
  996. package/dist/respond-C7I8kLK_.d.ts +93 -0
  997. package/dist/respond-DdhZ9Wbn.js +95 -0
  998. package/dist/result-BlgnMB0H.js +128 -0
  999. package/dist/result-Cj3yWhjH.d.ts +298 -0
  1000. package/dist/rrule-zBh3CA1r.js +290 -0
  1001. package/dist/rules-B0-3Iosu.js +261 -0
  1002. package/dist/run-watch-CQRdpy-f.js +53 -0
  1003. package/dist/sales-lines-BAk8In-Z.js +41 -0
  1004. package/dist/sales-lines-C6gafAwg.d.ts +28 -0
  1005. package/dist/sales-shared-DAAGwQwN.d.ts +8 -0
  1006. package/dist/sales-shared-SblIgCgI.js +22 -0
  1007. package/dist/scope-DgWjuXUw.js +90 -0
  1008. package/dist/search-B6h03cAx.js +106 -0
  1009. package/dist/search-BtoWY6n_.js +9 -0
  1010. package/dist/server/index.d.ts +211 -43
  1011. package/dist/server/index.js +296 -19
  1012. package/dist/server-types-OohhIQb2.d.ts +737 -0
  1013. package/dist/session-DiWHtYrO.d.ts +95 -0
  1014. package/dist/settings-BXFn9zpS.js +90 -0
  1015. package/dist/shared-BmMcMoW9.js +89 -0
  1016. package/dist/shared-DbO3Dfms.js +14 -0
  1017. package/dist/shared-as0EG51f.js +60 -0
  1018. package/dist/sign-in-D0xN6E_l.js +360 -0
  1019. package/dist/signatures-B41ApWXA.js +145 -0
  1020. package/dist/signatures-BMdJ7neI.d.ts +43 -0
  1021. package/dist/signers-CXt_wA9S.d.ts +385 -0
  1022. package/dist/signing-keys-Bq9mMCTh.d.ts +90 -0
  1023. package/dist/solid/index.d.ts +9 -18
  1024. package/dist/solid/index.js +4 -9
  1025. package/dist/solid-controller-DLsmrczT.js +33 -0
  1026. package/dist/solid-controller-DqlvYFZa.d.ts +11 -0
  1027. package/dist/solid-start/index.d.ts +8 -12
  1028. package/dist/solid-start/index.js +10 -9
  1029. package/dist/spec/index.d.ts +154 -0
  1030. package/dist/spec/index.js +386 -0
  1031. package/dist/spec-pins-Dqpml2dZ.d.ts +84 -0
  1032. package/dist/spec-pins-S4PymRxp.js +60 -0
  1033. package/dist/sql/index.d.ts +327 -140
  1034. package/dist/sql/index.js +71245 -23282
  1035. package/dist/sql-DJrXG-3Z.js +422 -0
  1036. package/dist/sso-BDva_-4y.js +217 -0
  1037. package/dist/sso-BN0LnMqE.d.ts +131 -0
  1038. package/dist/ssr/index.d.ts +5 -6
  1039. package/dist/ssr/index.js +4 -3
  1040. package/dist/standard-B5fe2gnW.js +25 -0
  1041. package/dist/standard-C3_AAF3g.d.ts +7 -0
  1042. package/dist/stats-D6vkb89f.js +1128 -0
  1043. package/dist/storage/index.d.ts +4 -6
  1044. package/dist/storage/index.js +23 -20
  1045. package/dist/storage-api-Cx-1iWBd.d.ts +582 -0
  1046. package/dist/store-B5qYKsTh.d.ts +68 -0
  1047. package/dist/streams/index.d.ts +5 -5
  1048. package/dist/streams/index.js +6 -5
  1049. package/dist/streams/redis/index.d.ts +1 -1
  1050. package/dist/streams/redis/index.js +6 -12
  1051. package/dist/stripe/index.d.ts +16 -0
  1052. package/dist/stripe/index.js +14 -0
  1053. package/dist/stripe-NVcNOhHy.d.ts +140 -0
  1054. package/dist/stripe-XZrSmDTf.js +32 -0
  1055. package/dist/subject-readers-DiePmaYP.js +46 -0
  1056. package/dist/subject-readers-fxP5wu0s.d.ts +21 -0
  1057. package/dist/subjects-z8VWA_lF.d.ts +69 -0
  1058. package/dist/subscribers-Cq--DL1E.js +34 -0
  1059. package/dist/supabase-mcp-C6tMoEjn.d.ts +43 -0
  1060. package/dist/supabase-mcp-DomZ-amK.js +28 -0
  1061. package/dist/support-BsKkvA92.js +522 -0
  1062. package/dist/support-view-BbcZR7Io.d.ts +17 -0
  1063. package/dist/svelte/index.d.ts +8 -17
  1064. package/dist/svelte/index.js +3 -3
  1065. package/dist/svelte-controller-CDAujo-_.js +50 -0
  1066. package/dist/svelte-controller-DxxHEHxD.d.ts +10 -0
  1067. package/dist/sveltekit/index.d.ts +11 -13
  1068. package/dist/sveltekit/index.js +12 -14
  1069. package/dist/table-schema-pQlER3jj.js +283 -0
  1070. package/dist/tags-Dw8vKkcI.d.ts +30 -0
  1071. package/dist/tags-PaG0Ns_9.js +84 -0
  1072. package/dist/tanstack-db/index.d.ts +2 -2
  1073. package/dist/tanstack-db/index.js +1 -1
  1074. package/dist/tanstack-db/supabase/index.d.ts +51 -0
  1075. package/dist/tanstack-db/supabase/index.js +268 -0
  1076. package/dist/tanstack-start/index.d.ts +7 -7
  1077. package/dist/tanstack-start/index.js +9 -13
  1078. package/dist/tax-DDZUB_oc.d.ts +273 -0
  1079. package/dist/tax-D_kSCdWU.js +140 -0
  1080. package/dist/tee-Bsisfd7t.js +101 -0
  1081. package/dist/template-DdgYjIZ5.js +123 -0
  1082. package/dist/temporal-CB5Fpo5d.js +79 -0
  1083. package/dist/temporal-required-DqRzr7i0.js +20 -0
  1084. package/dist/tenant-B-fiItlJ.js +27 -0
  1085. package/dist/tenant-DdmVhsff.d.ts +17 -0
  1086. package/dist/tenant-naming-Bsj3Uvap.js +27 -0
  1087. package/dist/testing/index.d.ts +459 -125
  1088. package/dist/testing/index.js +2368 -720
  1089. package/dist/timing-BMCWgpdZ.js +92 -0
  1090. package/dist/topic-ByDz9edV.js +542 -0
  1091. package/dist/topic-cMS7UtM1.d.ts +359 -0
  1092. package/dist/ttl-cache-XzZ-Q2eX.js +29 -0
  1093. package/dist/types-6oiy6rIa.d.ts +205 -0
  1094. package/dist/types-BRTSpOIh.js +5 -0
  1095. package/dist/types-CdP0z5tS.d.ts +564 -0
  1096. package/dist/types-D0W4fnsc.d.ts +162 -0
  1097. package/dist/types-R6syp1el.js +29 -0
  1098. package/dist/types-YfwpIE-d.d.ts +357 -0
  1099. package/dist/types-pNY_UpDs.d.ts +240 -0
  1100. package/dist/types-vaoP9S9_.d.ts +635 -0
  1101. package/dist/undo-CEGIRkPA.js +44 -0
  1102. package/dist/undo-DGo0skyO.d.ts +43 -0
  1103. package/dist/usage-CdlfuS3i.js +250 -0
  1104. package/dist/usage-DM2rzczj.d.ts +202 -0
  1105. package/dist/vault-tOkPLnMB.d.ts +50 -0
  1106. package/dist/vercel-connect/index.d.ts +1 -1
  1107. package/dist/vercel-connect/index.js +6 -12
  1108. package/dist/verify-D63A2ALE.d.ts +142 -0
  1109. package/dist/verify-EQcC3Khp.js +126 -0
  1110. package/dist/version-D87ZteKy.js +4 -0
  1111. package/dist/view-DZ63nqwt.js +105 -0
  1112. package/dist/view-Dv0A949a.d.ts +90 -0
  1113. package/dist/vue/index.d.ts +9 -18
  1114. package/dist/vue/index.js +4 -17
  1115. package/dist/vue-controller-C9tFzqAc.js +32 -0
  1116. package/dist/vue-controller-HPfMTDa2.d.ts +11 -0
  1117. package/dist/watch-DDuWYv0Y.d.ts +84 -0
  1118. package/dist/watch-DT_B3CnJ.js +139 -0
  1119. package/dist/watch-topic-EFpOIIDE.d.ts +28 -0
  1120. package/dist/watch-topic-miuymrli.js +57 -0
  1121. package/dist/wire-DEY0ajW9.js +45 -0
  1122. package/dist/workflow-builder-OrglbXUh.js +681 -0
  1123. package/dist/workflow-sdk/builder/index.d.ts +46 -15
  1124. package/dist/workflow-sdk/builder/index.js +69 -21
  1125. package/dist/workflow-sdk/index.d.ts +75 -2
  1126. package/dist/workflow-sdk/index.js +83 -3
  1127. package/dist/workflow-sdk/world/index.d.ts +51 -20
  1128. package/dist/workflow-sdk/world/index.js +189 -128
  1129. package/dist/workflow-sdk-BZ6qsRlY.js +243 -0
  1130. package/dist/workflow-sdk-q8cLwW1K.d.ts +161 -0
  1131. package/dist/workflow-sdk-world-DPMdBfzn.js +2103 -0
  1132. package/dist/workflows-C-OvZpeg.js +282 -0
  1133. package/dist/workflows-DFQeXDAI.d.ts +243 -0
  1134. package/dist/yjs/index.d.ts +67 -0
  1135. package/dist/yjs/index.js +212 -0
  1136. package/package.json +837 -44
  1137. package/schemas/cli-commands-v1.json +220 -0
  1138. package/schemas/cli-result-v1.json +138 -0
  1139. package/schemas/config-v1.json +4317 -653
  1140. package/schemas/doctor-report-v1.json +27 -1
  1141. package/schemas/snapshot-v2.json +271 -0
  1142. package/schemas/spec-manifest-v1.json +95 -0
  1143. package/skills/better-supabase/SKILL.md +19 -8
  1144. package/skills/better-supabase/references/plugins.md +2 -2
  1145. package/skills/better-supabase/references/troubleshooting.md +20 -20
  1146. package/skills/better-supabase/references/ui-recipes.md +18652 -0
  1147. package/skills/better-supabase-api/SKILL.md +14 -14
  1148. package/skills/better-supabase-api/references/adapters.md +12 -2
  1149. package/skills/better-supabase-api/references/ai.md +4 -4
  1150. package/skills/better-supabase-api/references/expo.md +7 -4
  1151. package/skills/better-supabase-api/references/powersync.md +2 -1
  1152. package/skills/better-supabase-api/references/streams-credentials.md +8 -5
  1153. package/skills/better-supabase-auth/SKILL.md +18 -11
  1154. package/skills/better-supabase-auth/references/authorization-providers.md +5 -5
  1155. package/skills/better-supabase-testing/SKILL.md +2 -2
  1156. package/testing/act-cases.json +370 -0
  1157. package/dist/access-sql-B0dF-SoF.js +0 -181
  1158. package/dist/actor-CQTlc1Hh.d.ts +0 -43
  1159. package/dist/adapter-iKgjHVPx.js +0 -1190
  1160. package/dist/agents-CVHGd7It.d.ts +0 -94
  1161. package/dist/ai-cache-CBWs1W0k.js +0 -80
  1162. package/dist/ai-cache-DaDu_G5L.d.ts +0 -64
  1163. package/dist/ai-chat-7amvXjmQ.d.ts +0 -590
  1164. package/dist/ai-chat-B24UI962.js +0 -743
  1165. package/dist/ai-files-CSPNswUY.js +0 -319
  1166. package/dist/ai-tasks-Cd1HMFvB.d.ts +0 -131
  1167. package/dist/announcements-CiyOs-xP.js +0 -107
  1168. package/dist/announcements-ZRGnScWI.d.ts +0 -72
  1169. package/dist/api-keys-CIjghYjV.d.ts +0 -156
  1170. package/dist/assistant-DwdpDH1q.d.ts +0 -147
  1171. package/dist/attributes-5dYul0u0.js +0 -13
  1172. package/dist/authorization-BFCqamMs.d.ts +0 -172
  1173. package/dist/base64-D2gsioCY.js +0 -42
  1174. package/dist/before-route-CnR0C0Jr.js +0 -30
  1175. package/dist/bind-Bu_ZNa3W.d.ts +0 -62
  1176. package/dist/bind-l4kAvYSv.js +0 -97
  1177. package/dist/block-events-CrT8r7Fe.js +0 -76
  1178. package/dist/block-fields-GFkxl4dP.js +0 -49
  1179. package/dist/block-fields-SJ6fEf3o.d.ts +0 -31
  1180. package/dist/block-helpers-CKtbFcRv.d.ts +0 -37
  1181. package/dist/block-helpers-DWHxHsEQ.js +0 -190
  1182. package/dist/block-hooks-BmjMyXTa.js +0 -114
  1183. package/dist/block-hooks-plbZ0AbJ.d.ts +0 -107
  1184. package/dist/block-transport-BLr-ZgLc.js +0 -59
  1185. package/dist/block-transport-DvaoPuZ9.d.ts +0 -48
  1186. package/dist/bucket-Cl46E3jS.d.ts +0 -347
  1187. package/dist/build-BXIzE6Xv.js +0 -689
  1188. package/dist/channel-_2Mx1Oyu.d.ts +0 -70
  1189. package/dist/channels-CkgQ_X60.js +0 -114
  1190. package/dist/claims-DDBQT6BK.js +0 -61
  1191. package/dist/cli/bin.d.ts +0 -1
  1192. package/dist/cli/codemod-Bl_tQpHn.js +0 -491
  1193. package/dist/cli/command-CK14fP91.js +0 -502
  1194. package/dist/cli/config-B9HkL8nF.js +0 -2
  1195. package/dist/cli/config-DU7EJImt.js +0 -49
  1196. package/dist/cli/config-NiPxAmUF.js +0 -1077
  1197. package/dist/cli/db-DOBPt660.js +0 -52
  1198. package/dist/cli/diff-SjkO5rNr.js +0 -752
  1199. package/dist/cli/dist-DBPdlPYK.js +0 -1112
  1200. package/dist/cli/dist-DRAVaE6w.js +0 -842
  1201. package/dist/cli/dist-DreZ24Sz.js +0 -129
  1202. package/dist/cli/doctor-DJk0aeBi.js +0 -3591
  1203. package/dist/cli/env-CJLbUVPB.js +0 -108
  1204. package/dist/cli/env-qXgyMV6r.js +0 -511
  1205. package/dist/cli/errors-4v4DTtda.js +0 -56
  1206. package/dist/cli/fastest-levenshtein-CFN-lNDv.js +0 -120
  1207. package/dist/cli/gen-CCMc39Dx.js +0 -3100
  1208. package/dist/cli/gen-DRmzPI75.js +0 -2
  1209. package/dist/cli/init-BHuEQrQK.js +0 -765
  1210. package/dist/cli/introspect-DzR2nyQb.js +0 -81
  1211. package/dist/cli/io-DI1mTdSA.js +0 -33
  1212. package/dist/cli/jsonc-BUniUpOk.js +0 -2
  1213. package/dist/cli/keys-BGCnnb-s.js +0 -85
  1214. package/dist/cli/openapi-BlRJ18s3.js +0 -66
  1215. package/dist/cli/project-DZRaBaY7.js +0 -75
  1216. package/dist/cli/prompts-BNcNfAve.js +0 -1142
  1217. package/dist/cli/prompts-BTYQGunc.js +0 -2
  1218. package/dist/cli/read-sets-CETOSFx4.js +0 -223
  1219. package/dist/cli/rolldown-runtime-BPOCksWG.js +0 -24
  1220. package/dist/cli/run-BqDPh9UH.js +0 -361
  1221. package/dist/cli/seed-DQzqT7LP.js +0 -100
  1222. package/dist/cli/skills-QQs4q68J.js +0 -138
  1223. package/dist/cli/sql-B8csQPyn.js +0 -495
  1224. package/dist/cli/sql-layout-D6cphHT3.js +0 -69
  1225. package/dist/cli/style-C0NFdJRL.js +0 -29
  1226. package/dist/cli/supabase-toml-B-bIukQF.js +0 -1095
  1227. package/dist/cli/typegen-version-DeFbtzYI.js +0 -8
  1228. package/dist/cli/version-59gcepIG.js +0 -4
  1229. package/dist/client-CI0Z2zWX.js +0 -277
  1230. package/dist/clone-BfgmLU90.js +0 -21
  1231. package/dist/cloud-event-BnmD5fb9.js +0 -46
  1232. package/dist/cloud-event-C1JCc1bH.d.ts +0 -50
  1233. package/dist/compiler-DY_wkj4R.d.ts +0 -14
  1234. package/dist/compose-BIBNgAnq.js +0 -53
  1235. package/dist/composite--yqry7uW.d.ts +0 -146
  1236. package/dist/composite-DXVUibdi.js +0 -130
  1237. package/dist/config-D44Y7PAv.d.ts +0 -984
  1238. package/dist/config-Dn7F5k9A.js +0 -202
  1239. package/dist/connector-Dv8kK0MO.d.ts +0 -107
  1240. package/dist/connectors-CrpknU0P.d.ts +0 -120
  1241. package/dist/context-BCrWe7ow.d.ts +0 -237
  1242. package/dist/cron-DVPUg5k3.js +0 -145
  1243. package/dist/csv-DCK-PT1n.js +0 -25
  1244. package/dist/define-B-TVjC25.js +0 -1915
  1245. package/dist/define-CJJkkr1-.d.ts +0 -980
  1246. package/dist/embeddings-4ZvFzjsU.js +0 -127
  1247. package/dist/embeddings-C9KGQnXt.d.ts +0 -68
  1248. package/dist/ended-XjeGQ5XW.d.ts +0 -63
  1249. package/dist/entitlements-BKSVGtrG.d.ts +0 -51
  1250. package/dist/entitlements-DRl6ZJUm.js +0 -24
  1251. package/dist/envelope-DqnYGRw7.js +0 -47
  1252. package/dist/errors-B11Duf73.js +0 -266
  1253. package/dist/errors-DLjJHPLK.js +0 -44
  1254. package/dist/escape-like-ImTK0ps_.d.ts +0 -15
  1255. package/dist/eve-gT2Fpjut.d.ts +0 -151
  1256. package/dist/events-DWDhx77e.d.ts +0 -549
  1257. package/dist/executor-BVBFM86G.d.ts +0 -36
  1258. package/dist/executor-Bq28caBo.js +0 -718
  1259. package/dist/executor-C-R4pucm.js +0 -83
  1260. package/dist/executor-CaWigTyR.d.ts +0 -148
  1261. package/dist/executor-DbvExCFC.d.ts +0 -30
  1262. package/dist/executor-De1Of3m3.js +0 -523
  1263. package/dist/executor-DvsBbNBS.d.ts +0 -261
  1264. package/dist/field-errors-BFOa7WhB.d.ts +0 -99
  1265. package/dist/field-errors-VF1yb8yI.js +0 -13
  1266. package/dist/framework-BmzgK32X.d.ts +0 -25
  1267. package/dist/framework-a7aRCIqv.js +0 -51
  1268. package/dist/gateway-C1ssRHnf.d.ts +0 -130
  1269. package/dist/graph-BGyLLFLX.js +0 -265
  1270. package/dist/guards-BnzDvFrz.js +0 -10
  1271. package/dist/history-BZih6SFP.js +0 -64
  1272. package/dist/hooks-1BTCJsiw.js +0 -309
  1273. package/dist/impersonation-DcqaTBHx.js +0 -148
  1274. package/dist/inbox-i7E1ppo6.d.ts +0 -384
  1275. package/dist/index-ACiNPN4Z.d.ts +0 -74
  1276. package/dist/index-Bepi-Hgg.d.ts +0 -206
  1277. package/dist/index-BkWT_uBO.d.ts +0 -51
  1278. package/dist/index-Bxih3l0u.d.ts +0 -81
  1279. package/dist/index-CLg87OBW.d.ts +0 -76
  1280. package/dist/index-CaxrMD1A.d.ts +0 -1
  1281. package/dist/index-CdZKQF98.d.ts +0 -138
  1282. package/dist/index-CewnYSpv.d.ts +0 -267
  1283. package/dist/index-ClmjK_o-.d.ts +0 -55
  1284. package/dist/index-D48jVS-N.d.ts +0 -246
  1285. package/dist/index-DQh4VCc9.d.ts +0 -98
  1286. package/dist/index-DunNRdnT.d.ts +0 -300
  1287. package/dist/json-schema-CvER4kgT.js +0 -502
  1288. package/dist/keys-4MnkWTTh.js +0 -35
  1289. package/dist/kit-CkNzZUqv.d.ts +0 -60
  1290. package/dist/kit-Fm-Fv7q5.js +0 -78
  1291. package/dist/knowledge-BXBbT0Tr.d.ts +0 -176
  1292. package/dist/knowledge-CDmiMLew.js +0 -255
  1293. package/dist/list-query-BRt-zDF7.d.ts +0 -164
  1294. package/dist/list-query-gl808ac1.js +0 -459
  1295. package/dist/live-CTAZQkwl.js +0 -257
  1296. package/dist/message-CaKlqdsX.js +0 -219
  1297. package/dist/message-CfDoR0Y6.d.ts +0 -94
  1298. package/dist/messages-B9-5887d.js +0 -715
  1299. package/dist/messages-DYP0sUTe.d.ts +0 -59
  1300. package/dist/mfa-Daak8ukG.d.ts +0 -54
  1301. package/dist/modules-DpPwzC7E.d.ts +0 -192
  1302. package/dist/modules-dxrVK3ID.js +0 -228
  1303. package/dist/onboarding-BZGHYJks.d.ts +0 -62
  1304. package/dist/outbox-Cq7pPYvl.d.ts +0 -161
  1305. package/dist/path-Cv__-OTj.d.ts +0 -17
  1306. package/dist/plugin-FGY8UhYm.d.ts +0 -151
  1307. package/dist/pool-CAu2nLrL.d.ts +0 -89
  1308. package/dist/postgrest-BLVdEnfe.d.ts +0 -53
  1309. package/dist/problem-BreOl8b8.js +0 -115
  1310. package/dist/problem-DD8LZFjc.d.ts +0 -67
  1311. package/dist/provider-D-UEMvSD.d.ts +0 -113
  1312. package/dist/provider-Di3sRutW.js +0 -57
  1313. package/dist/query-BQ-NaZon.js +0 -303
  1314. package/dist/queue-CLJurhdy.d.ts +0 -427
  1315. package/dist/react-F80mF4-t.js +0 -409
  1316. package/dist/react-topic-seAWjL3_.js +0 -38
  1317. package/dist/read-set-DuKWC9Mj.js +0 -314
  1318. package/dist/refusal-CeJWxmkH.js +0 -61
  1319. package/dist/refusal-DhSU2Vvr.d.ts +0 -15
  1320. package/dist/replicas-CwrYp5Zj.js +0 -94
  1321. package/dist/resolve-ChTYeTEl.d.ts +0 -169
  1322. package/dist/resolve-tJZY3FEa.js +0 -697
  1323. package/dist/resource-BsvzCMlX.js +0 -212
  1324. package/dist/resource-IPS5xi9q.d.ts +0 -74
  1325. package/dist/respond-BUgsXNgk.js +0 -91
  1326. package/dist/respond-DprrgyXX.d.ts +0 -93
  1327. package/dist/result-D7y2fT87.d.ts +0 -282
  1328. package/dist/result-DzUbqgdW.js +0 -128
  1329. package/dist/scope-CDHcS7dE.js +0 -90
  1330. package/dist/search-CUWCRYKL.js +0 -9
  1331. package/dist/server-Bh0EVSwU.d.ts +0 -558
  1332. package/dist/session-ChiXDZdZ.d.ts +0 -72
  1333. package/dist/shared-CBxosKK3.js +0 -75
  1334. package/dist/shared-CxWmcyqB.js +0 -73
  1335. package/dist/sign-in-Cb1mwv6X.js +0 -86
  1336. package/dist/signers-4y62_VIi.d.ts +0 -166
  1337. package/dist/spec-pins--j6mTok4.js +0 -27
  1338. package/dist/spec-pins-C89s6DyW.d.ts +0 -27
  1339. package/dist/standard-BK0cqJ7y.js +0 -25
  1340. package/dist/standard-CYsm7xpT.d.ts +0 -7
  1341. package/dist/stats-D_AD9GGu.js +0 -1123
  1342. package/dist/store-CGjgWu5n.d.ts +0 -68
  1343. package/dist/stripe-BMj5LtsT.js +0 -38
  1344. package/dist/stripe-D04h-QBT.d.ts +0 -136
  1345. package/dist/support-ig_K4PvS.js +0 -314
  1346. package/dist/support-view-CVOJJLpc.d.ts +0 -17
  1347. package/dist/tags-Cx-LnIQP.d.ts +0 -30
  1348. package/dist/tee-CoEppCER.js +0 -101
  1349. package/dist/template--jDkl3UP.js +0 -114
  1350. package/dist/template-CwO38Do8.d.ts +0 -6
  1351. package/dist/temporal-BJGitm-h.js +0 -79
  1352. package/dist/temporal-required-BVvW7SYJ.js +0 -20
  1353. package/dist/tenant-BxNFk9bx.d.ts +0 -17
  1354. package/dist/tenant-I1TEZ_BX.js +0 -27
  1355. package/dist/timing-CyTQPubY.js +0 -92
  1356. package/dist/types-6BdhkmZe.d.ts +0 -340
  1357. package/dist/types-6cYK9pbJ.js +0 -29
  1358. package/dist/types-6rocye-y.d.ts +0 -156
  1359. package/dist/types-AYOvcyep.d.ts +0 -359
  1360. package/dist/types-C05bxW-W.d.ts +0 -220
  1361. package/dist/types-DGs5L0VN.d.ts +0 -192
  1362. package/dist/usage-CrvrL2vw.d.ts +0 -177
  1363. package/dist/vault-wlbBhqm7.d.ts +0 -50
  1364. package/dist/verify-DL41hbvY.js +0 -232
  1365. package/dist/verify-DPuWngD4.d.ts +0 -172
  1366. package/dist/version-C6OfRAIn.js +0 -4
  1367. package/dist/view-BeFcRV6G.js +0 -99
  1368. package/dist/view-CF7ihnkg.d.ts +0 -87
  1369. package/dist/watch-DI34G86j.d.ts +0 -60
  1370. package/dist/watch-Xuxrvxq-.js +0 -122
  1371. package/dist/wire-DtZQ4sdE.js +0 -45
  1372. package/dist/workflow-builder-DJ1oHn8g.js +0 -398
  1373. package/dist/workflow-sdk-B3yLD6Br.d.ts +0 -98
  1374. package/dist/workflow-sdk-C2WJ_G2O.js +0 -173
  1375. package/dist/workflow-sdk-world-D-prir6O.js +0 -1397
  1376. package/dist/workflows-B0j9WKPu.d.ts +0 -185
  1377. package/dist/workflows-wu1WWBn7.js +0 -216
@@ -0,0 +1,2103 @@
1
+ import { a as sqlString, i as sqlIdent } from "./template-DdgYjIZ5.js";
2
+ import "./batch-limit-DKVQDz4o.js";
3
+ //#region src/sql/shared.ts
4
+ /** What `record` and the other statement helpers return when there is nothing to do. */
5
+ const NOTHING = "null;";
6
+ /** `alter table ... add column if not exists` for each extra column of a managed table. */
7
+ const addExtraColumns = (table, columns) => columns.map((column) => `\nalter table ${table} add column if not exists ${column.ident} ${column.type};`).join("");
8
+ /**
9
+ * A `jsonb` object of `columns` of row `alias`, keyed by column name, so
10
+ * reads return extra columns without exposing the rest of the row.
11
+ */
12
+ const columnsObject = (alias, columns) => `jsonb_build_object(${columns.map((name) => `${sqlString(name)}, ${alias}.${sqlIdent(name)}`).join(", ")})`;
13
+ /**
14
+ * `, 'fields', jsonb_build_object(...)` of the extra columns of row
15
+ * `alias`, for a read built with `jsonb_build_object`; empty without any.
16
+ */
17
+ const extraFieldsJson = (alias, extras) => extras.length === 0 ? "" : `, 'fields', ${columnsObject(alias, extras.map((extra) => extra.name))}`;
18
+ /**
19
+ * PL/pgSQL that copies the extra columns from `source`, a `jsonb` object
20
+ * keyed by column name, onto the rows of `table` (alias `x`) that `where`
21
+ * matches. A key `source` leaves out keeps the column's value, so it runs
22
+ * after an insert (the defaults stay) and on a partial update. Empty
23
+ * without extra columns.
24
+ */
25
+ const writeExtraColumns = (table, extras, source, where, into) => extras.length === 0 ? "" : `
26
+ update ${table} x set ${extras.map((extra) => `${extra.ident} = case when ${source} ? ${sqlString(extra.name)} then r.${extra.ident} else x.${extra.ident} end`).join(", ")}
27
+ from jsonb_populate_record(null::${table}, (select coalesce(jsonb_object_agg(e.key, e.value), '{}') from jsonb_each(${source}) e where e.key in (${extras.map((extra) => sqlString(extra.name)).join(", ")}))) r
28
+ where ${where}${into === void 0 ? "" : `\n returning x.* into ${into}`};`;
29
+ /**
30
+ * `json` (a `jsonb` expression of row `alias`) with the extra columns
31
+ * under `fields`, or `json` itself without any.
32
+ */
33
+ const withExtraFields = (json, alias, extras) => extras.length === 0 ? json : `(${json} || jsonb_build_object('fields', ${columnsObject(alias, extras.map((extra) => extra.name))}))`;
34
+ /** The `fields jsonb` parameter for `columns`; see `ExtraFieldsArg`. */
35
+ function extraFieldsArg(columns) {
36
+ const on = columns.length > 0;
37
+ return {
38
+ param: on ? ", fields jsonb default null" : "",
39
+ type: on ? ", jsonb" : "",
40
+ contract: on ? ["jsonb"] : [],
41
+ drop: (fn, types) => `drop function if exists ${fn}(${on ? types : [types, "jsonb"].filter((type) => type !== "").join(", ")});`
42
+ };
43
+ }
44
+ const SCHEMA = `create schema if not exists better_supabase;
45
+ grant usage on schema better_supabase to anon, authenticated, service_role;`;
46
+ /**
47
+ * A SQL condition true for the service role and for a direct admin
48
+ * connection (no JWT, a privileged session user), which may act for others.
49
+ */
50
+ const SERVICE_CALLER = "coalesce(nullif((select auth.jwt()) ->> 'role', ''), session_user::text) in ('service_role', 'postgres', 'supabase_admin')";
51
+ /**
52
+ * The `organization.member_added` record for a module that adds a member, so
53
+ * every module writes the same payload. Each value is a SQL expression.
54
+ */
55
+ function memberAddedRecord(ctx, member) {
56
+ return ctx.record({
57
+ type: "organization.member_added",
58
+ payload: `jsonb_build_object('organizationId', ${member.tenant}::text, 'userId', ${member.user}, 'role', ${member.role})`,
59
+ subject: `'organizations/' || ${member.tenant}::text`,
60
+ tenant: member.tenant,
61
+ audit: {
62
+ category: "membership",
63
+ targetType: "user",
64
+ recordId: `${member.user}::text`
65
+ }
66
+ });
67
+ }
68
+ /** Creates the module's schema when it isn't `better_supabase`, then the module schema. */
69
+ function schemaPreamble(ctx) {
70
+ if (ctx.schemaName === "better_supabase") return SCHEMA;
71
+ return `${SCHEMA}
72
+ create schema if not exists ${ctx.schema};
73
+ grant usage on schema ${ctx.schema} to anon, authenticated, service_role;`;
74
+ }
75
+ /** A claim from the top level of the token, then `app_metadata`. */
76
+ function jwtClaim(name) {
77
+ return `coalesce(auth.jwt() ->> ${sqlString(name)}, auth.jwt() -> 'app_metadata' ->> ${sqlString(name)})`;
78
+ }
79
+ /** `table` or `schema.table` as `[schema, table]`, in `public` without a schema. */
80
+ function splitTable(name) {
81
+ const parts = name.split(".");
82
+ if (parts.length > 2 || parts.some((part) => part.length === 0)) throw new TypeError(`"${name}" must be "table" or "schema.table"`);
83
+ return parts.length === 2 ? [parts[0], parts[1]] : ["public", parts[0]];
84
+ }
85
+ /** `table` or `schema.table`, quoted. */
86
+ function quotedTable(name) {
87
+ const [schema, table] = splitTable(name);
88
+ return `${sqlIdent(schema)}.${sqlIdent(table)}`;
89
+ }
90
+ /** `schema.table.column` split into its quoted table and column. */
91
+ function columnRef(where, value) {
92
+ const parts = value.split(".");
93
+ if (parts.length !== 3 || parts.some((part) => part.length === 0)) throw new TypeError(`${where} must be "schema.table.column", got "${value}"`);
94
+ const [schema, table, column] = parts;
95
+ return {
96
+ table: `${sqlIdent(schema)}.${sqlIdent(table)}`,
97
+ column: sqlIdent(column)
98
+ };
99
+ }
100
+ const QUOTED_IDENT = /^"(.*)"$/s;
101
+ /**
102
+ * Replaces the check constraints on one column of a table a module created
103
+ * earlier: `create table if not exists` never changes an inline check, and
104
+ * its generated name follows the table's configured name. For upgrade steps.
105
+ * `column` is a quoted identifier; the catalog stores the bare name.
106
+ */
107
+ function replaceColumnCheck(check) {
108
+ const column = QUOTED_IDENT.exec(check.column)?.[1]?.replaceAll("\"\"", "\"") ?? check.column;
109
+ return `do $$
110
+ declare
111
+ v_name name;
112
+ begin
113
+ for v_name in
114
+ select c.conname from pg_catalog.pg_constraint c
115
+ join pg_catalog.pg_attribute a on a.attrelid = c.conrelid and a.attnum = c.conkey[1]
116
+ where c.conrelid = ${sqlString(check.table)}::regclass and c.contype = 'c'
117
+ and cardinality(c.conkey) = 1 and a.attname = ${sqlString(column)}
118
+ loop
119
+ execute format('alter table %s drop constraint %I', ${sqlString(check.table)}, v_name);
120
+ end loop;
121
+ end;
122
+ $$;
123
+ alter table ${check.table} add constraint ${sqlIdent(check.name)} check (${check.expression});`;
124
+ }
125
+ /**
126
+ * Adds a foreign key to a table a module created earlier, once: `create
127
+ * table if not exists` can't add it to a table that already exists, and the
128
+ * referenced table can come from a module that renders later. Existing rows
129
+ * without a match leave the key unvalidated, with a warning.
130
+ */
131
+ function addForeignKey(fk) {
132
+ return `do $$
133
+ begin
134
+ if not exists (
135
+ select 1 from pg_constraint
136
+ where conrelid = ${sqlString(fk.table)}::regclass and conname = ${sqlString(fk.name)}
137
+ ) then
138
+ alter table ${fk.table} add constraint ${sqlIdent(fk.name)}
139
+ foreign key (${fk.column}) references ${fk.references} on delete ${fk.onDelete} not valid;
140
+ begin
141
+ alter table ${fk.table} validate constraint ${sqlIdent(fk.name)};
142
+ exception when foreign_key_violation then
143
+ raise warning '% has rows without a match, so only new rows are checked. Delete them, then run: alter table % validate constraint %',
144
+ ${sqlString(fk.table)}, ${sqlString(fk.table)}, ${sqlString(fk.name)};
145
+ end;
146
+ end if;
147
+ end;
148
+ $$;`;
149
+ }
150
+ /**
151
+ * Adds a check constraint to a table a module created earlier, once, for
152
+ * the same reason as `addForeignKey`. Existing rows that fail it leave the
153
+ * check unvalidated, with a warning, so an upgrade never stops on old data.
154
+ */
155
+ function addCheck(check) {
156
+ return `do $$
157
+ begin
158
+ if not exists (
159
+ select 1 from pg_constraint
160
+ where conrelid = ${sqlString(check.table)}::regclass and conname = ${sqlString(check.name)}
161
+ ) then
162
+ alter table ${check.table} add constraint ${sqlIdent(check.name)}
163
+ check (${check.expression}) not valid;
164
+ begin
165
+ alter table ${check.table} validate constraint ${sqlIdent(check.name)};
166
+ exception when check_violation then
167
+ raise warning '% has rows that fail %, so only new rows are checked. Fix them, then run: alter table % validate constraint %',
168
+ ${sqlString(check.table)}, ${sqlString(check.name)}, ${sqlString(check.table)}, ${sqlString(check.name)};
169
+ end;
170
+ end if;
171
+ end;
172
+ $$;`;
173
+ }
174
+ /**
175
+ * An `updated_at` column on a managed table, kept current by the
176
+ * `updated-at` module's `set_updated_at()` (the module must require it).
177
+ */
178
+ function updatedAt(table, column) {
179
+ return `alter table ${table} add column if not exists ${column} timestamptz not null default now();
180
+ drop trigger if exists bs_updated_at on ${table};
181
+ create trigger bs_updated_at before update on ${table}
182
+ for each row execute function better_supabase.set_updated_at(${sqlString(column.replaceAll("\"", ""))});`;
183
+ }
184
+ function renameSql(renames) {
185
+ const schema = sqlString(renames.schema);
186
+ const q = (name) => `${sqlIdent(renames.schema)}.${sqlIdent(name)}`;
187
+ const lines = [];
188
+ let table = renames.table;
189
+ for (const [from, to] of renames.tables ?? []) {
190
+ lines.push(` if to_regclass(${sqlString(`${renames.schema}.${from}`)}) is not null
191
+ and (select c.relkind from pg_class c where c.oid = to_regclass(${sqlString(`${renames.schema}.${from}`)})) in ('r', 'p')
192
+ and to_regclass(${sqlString(`${renames.schema}.${to}`)}) is null then
193
+ alter table ${q(from)} rename to ${sqlIdent(to)};
194
+ end if;`);
195
+ if (from === table) table = to;
196
+ }
197
+ for (const [from, to] of renames.columns ?? []) lines.push(` if exists (select 1 from information_schema.columns c
198
+ where c.table_schema = ${schema} and c.table_name = ${sqlString(table)} and c.column_name = ${sqlString(from)})
199
+ and not exists (select 1 from information_schema.columns c
200
+ where c.table_schema = ${schema} and c.table_name = ${sqlString(table)} and c.column_name = ${sqlString(to)}) then
201
+ alter table ${q(table)} rename column ${sqlIdent(from)} to ${sqlIdent(to)};
202
+ end if;`);
203
+ for (const [from, to] of renames.indexes ?? []) lines.push(` if to_regclass(${sqlString(`${renames.schema}.${from}`)}) is not null
204
+ and to_regclass(${sqlString(`${renames.schema}.${to}`)}) is null then
205
+ alter index ${q(from)} rename to ${sqlIdent(to)};
206
+ end if;`);
207
+ for (const [from, to, args] of renames.functions ?? []) lines.push(` if to_regprocedure(${sqlString(`${renames.schema}.${from}(${args})`)}) is not null
208
+ and to_regprocedure(${sqlString(`${renames.schema}.${to}(${args})`)}) is null then
209
+ alter function ${q(from)}(${args}) rename to ${sqlIdent(to)};
210
+ end if;`);
211
+ if (lines.length === 0) return "";
212
+ return `do $$
213
+ begin
214
+ ${lines.join("\n")}
215
+ end;
216
+ $$;`;
217
+ }
218
+ /**
219
+ * A SQL condition true when `organization` names no row of the installed
220
+ * organizations table. False without the organizations module.
221
+ */
222
+ function organizationMissing(ctx, organization) {
223
+ if (!ctx.installed("organizations")) return "false";
224
+ const organizations = ctx.of("organizations");
225
+ return `not exists (select 1 from ${organizations.table("organizations")} o where o.${organizations.col("organizations", "id")} = ${organization})`;
226
+ }
227
+ function membershipDisabledAt(ctx) {
228
+ if (ctx.module !== "tenant" && !ctx.installed("tenant")) return;
229
+ const tenant = ctx.module === "tenant" ? ctx : ctx.of("tenant");
230
+ if (!tenant.has("memberships", "disabledAt")) return;
231
+ if (!tenant.manages && typeof tenant.config.columns["memberships"]?.["disabledAt"] !== "string") return;
232
+ return tenant.col("memberships", "disabledAt");
233
+ }
234
+ function activeMembership(ctx, alias) {
235
+ const column = membershipDisabledAt(ctx);
236
+ return column === void 0 ? "" : ` and ${alias}.${column} is null`;
237
+ }
238
+ function membershipSuspended(ctx, tenant, user) {
239
+ const column = membershipDisabledAt(ctx);
240
+ if (column === void 0) return;
241
+ const t = ctx.module === "tenant" ? ctx : ctx.of("tenant");
242
+ return `exists (select 1 from ${t.table("memberships")} sm where sm.${t.col("memberships", "tenant")} = ${tenant} and sm.${t.col("memberships", "user")} = ${user} and sm.${column} is not null)`;
243
+ }
244
+ /**
245
+ * `tenant_disabled(id)` and `user_disabled(uuid)` from
246
+ * `blocks.access.disabled`. Without a column they return false, so callers
247
+ * don't need to know whether it is configured.
248
+ */
249
+ function disabledHelpers(ctx) {
250
+ const disabled = ctx.modules.access?.disabled ?? {};
251
+ const id = ctx.idType;
252
+ const organizations = managedOrganizations(ctx);
253
+ let tenantCheck = "false";
254
+ if (disabled.tenant !== void 0) tenantCheck = disabledCheck("blocks.access.disabled.tenant", disabled.tenant, {
255
+ key: "\"id\"",
256
+ alias: "t",
257
+ value: "tenant_disabled.tenant"
258
+ });
259
+ else if (organizations) tenantCheck = `exists (select 1 from ${organizations.table} t where t.${organizations.id} = tenant_disabled.tenant and (${organizations.flags.map((column) => `t.${column} is not null`).join(" or ")}))`;
260
+ const userCheck = disabled.user === void 0 ? "false" : disabledCheck("blocks.access.disabled.user", disabled.user, {
261
+ key: sqlIdent(disabled.userKey ?? "id"),
262
+ alias: "u",
263
+ value: "user_disabled.user_id"
264
+ });
265
+ return `
266
+ -- Disabled tenants and users get no permissions and no membership claims
267
+ -- (blocks.access.disabled; with the managed organizations module, its
268
+ -- disabled_at and deleted_at columns).
269
+ create or replace function better_supabase.tenant_disabled(tenant ${id})
270
+ returns boolean
271
+ language sql
272
+ stable
273
+ security definer
274
+ set search_path = ''
275
+ as $$
276
+ select ${tenantCheck}
277
+ $$;
278
+
279
+ create or replace function better_supabase.user_disabled(user_id uuid)
280
+ returns boolean
281
+ language sql
282
+ stable
283
+ security definer
284
+ set search_path = ''
285
+ as $$
286
+ select ${userCheck}
287
+ $$;
288
+
289
+ revoke execute on function better_supabase.tenant_disabled(${id}) from public, anon, authenticated;
290
+ revoke execute on function better_supabase.user_disabled(uuid) from public, anon, authenticated;
291
+ grant execute on function better_supabase.tenant_disabled(${id}) to service_role, supabase_auth_admin;
292
+ grant execute on function better_supabase.user_disabled(uuid) to service_role, supabase_auth_admin;`;
293
+ }
294
+ /**
295
+ * Whether `disabledHelpers` reads the managed organizations table, which a
296
+ * later file creates: the caller turns `check_function_bodies` off around it.
297
+ */
298
+ /**
299
+ * The condition that `value` is disabled: a set column (`schema.table.column`,
300
+ * matched on `key`), or no active row (an authorization provider's
301
+ * suspension row, where a missing row counts as disabled).
302
+ */
303
+ function disabledCheck(where, config, match) {
304
+ const { alias: d, value } = match;
305
+ if (typeof config === "string") {
306
+ const ref = columnRef(where, config);
307
+ return `exists (select 1 from ${ref.table} ${d} where ${d}.${match.key} = ${value} and ${d}.${ref.column} is not null)`;
308
+ }
309
+ const parts = config.table.split(".");
310
+ if (parts.length !== 2 || parts.some((part) => part.length === 0)) throw new TypeError(`${where}.table must be "schema.table", got "${config.table}"`);
311
+ const active = [`${d}.${sqlIdent(config.id)} = ${value}`];
312
+ if (config.disabledAt !== void 0) active.push(`${d}.${sqlIdent(config.disabledAt)} is null`);
313
+ if (config.status !== void 0) {
314
+ if (!config.active || config.active.length === 0) throw new TypeError(`${where}.status needs the active values in active`);
315
+ active.push(`${d}.${sqlIdent(config.status)}::text in (${config.active.map(sqlString).join(", ")})`);
316
+ }
317
+ if (config.disabledAt === void 0 && config.status === void 0) throw new TypeError(`${where} needs disabledAt, status or both`);
318
+ return `not exists (select 1 from ${parts.map((part) => sqlIdent(part)).join(".")} ${d} where ${active.join(" and ")})`;
319
+ }
320
+ /**
321
+ * Whether the `access` module's file defines `tenant_disabled` and
322
+ * `user_disabled`: it does whenever it is installed (or configured) outside
323
+ * custom mode, and the `tenant` module's file then leaves them out, so each
324
+ * function is defined in one file.
325
+ */
326
+ function accessDefinesDisabledHelpers(ctx) {
327
+ const access = ctx.modules.access;
328
+ if (!ctx.installed("access") && access === void 0) return false;
329
+ return (access?.mode ?? "managed") !== "custom";
330
+ }
331
+ function disabledHelpersNeedLaterTables(ctx) {
332
+ return !ctx.modules.access?.disabled?.tenant && managedOrganizations(ctx) !== void 0;
333
+ }
334
+ /** The managed organizations table and its disabling columns, when installed and managed. */
335
+ function managedOrganizations(ctx) {
336
+ if (!ctx.installed("organizations")) return;
337
+ const organizations = ctx.of("organizations");
338
+ if (!organizations.manages) return;
339
+ const flags = ["disabledAt", "deletedAt"].filter((logical) => organizations.has("organizations", logical)).map((logical) => organizations.col("organizations", logical));
340
+ if (flags.length === 0) return;
341
+ return {
342
+ table: organizations.table("organizations"),
343
+ id: organizations.col("organizations", "id"),
344
+ flags
345
+ };
346
+ }
347
+ /**
348
+ * Another row trigger on `target` whose function name matches `pattern` does
349
+ * the module trigger's job twice. `track_*` warns about it, or drops it with
350
+ * `replace_trigger => true`.
351
+ */
352
+ const EQUIVALENT_TRIGGERS = `
353
+ create or replace function better_supabase.replace_equivalent_triggers(
354
+ target regclass,
355
+ module_trigger text,
356
+ pattern text,
357
+ replace_trigger boolean
358
+ )
359
+ returns void
360
+ language plpgsql
361
+ set search_path = ''
362
+ as $$
363
+ declare
364
+ found record;
365
+ begin
366
+ for found in
367
+ select t.tgname as name, p.proname as fn
368
+ from pg_catalog.pg_trigger t
369
+ join pg_catalog.pg_proc p on p.oid = t.tgfoid
370
+ where t.tgrelid = replace_equivalent_triggers.target
371
+ and not t.tgisinternal
372
+ and t.tgname <> replace_equivalent_triggers.module_trigger
373
+ and p.proname ~* replace_equivalent_triggers.pattern
374
+ loop
375
+ if replace_trigger then
376
+ execute format('drop trigger %I on %s', found.name, target);
377
+ else
378
+ raise warning '% already has trigger % (%), which does what % does. Pass replace_trigger => true to drop it.',
379
+ target, found.name, found.fn, module_trigger;
380
+ end if;
381
+ end loop;
382
+ end;
383
+ $$;
384
+ revoke execute on function better_supabase.replace_equivalent_triggers(regclass, text, text, boolean) from public, anon, authenticated;`;
385
+ /** FNV-1a, as 8 hex digits: a stable suffix that keeps two names apart. */
386
+ function shortHash(text) {
387
+ let hash = 2166136261;
388
+ for (let index = 0; index < text.length; index += 1) {
389
+ hash ^= text.codePointAt(index) ?? 0;
390
+ hash = Math.imul(hash, 16777619) >>> 0;
391
+ }
392
+ return hash.toString(16).padStart(8, "0");
393
+ }
394
+ /**
395
+ * Adds CHECK `name` on `table` (quoted) unless a re-run finds it already
396
+ * checking `expression`: the constraint comment records a hash of the
397
+ * expression, so an unchanged check skips the table scan under ACCESS
398
+ * EXCLUSIVE. `notValid` leaves existing rows unchecked.
399
+ */
400
+ function ensureCheck(table, name, expression, options = {}) {
401
+ const marker = sqlString(`better-supabase check ${shortHash(`${expression}|${options.notValid === true}`)}`);
402
+ const constraint = sqlIdent(name);
403
+ return `do $$
404
+ begin
405
+ if coalesce(obj_description((
406
+ select c.oid from pg_catalog.pg_constraint c
407
+ where c.conrelid = ${sqlString(table)}::regclass and c.conname = ${sqlString(name)}
408
+ ), 'pg_constraint'), '') <> ${marker} then
409
+ alter table ${table} drop constraint if exists ${constraint};
410
+ alter table ${table} add constraint ${constraint} check (${expression})${options.notValid === true ? " not valid" : ""};
411
+ comment on constraint ${constraint} on ${table} is ${marker};
412
+ end if;
413
+ end;
414
+ $$;`;
415
+ }
416
+ /**
417
+ * The constraint and trigger name of a check. A key that sanitizing or the
418
+ * 63-byte limit would change (`notify.email`, `notify-email`, a long key)
419
+ * gets a hash of the key, so two keys never share a name and drop each
420
+ * other's check.
421
+ */
422
+ function jsonCheckName(check) {
423
+ const base = `bs_json_${check.column}`;
424
+ if (!check.where) return base.slice(0, 63);
425
+ const key = check.where.value;
426
+ const clean = key.replaceAll(/[^a-z0-9_]/gi, "_");
427
+ const plain = `${base}_${clean}`;
428
+ if (clean === key && plain.length <= 63) return plain;
429
+ return `${plain.slice(0, 54)}_${shortHash(key)}`;
430
+ }
431
+ function jsonSchemaChecks(checks) {
432
+ if (checks.length === 0) return "";
433
+ return `\n-- config.json schemas
434
+ -- Each check is added not valid and validated separately. On a large table,
435
+ -- move the validate statements to a later migration: adding a not valid check
436
+ -- blocks writes only briefly, and validating takes a lock that lets writes
437
+ -- continue. The trigger of the same name reports which part of the schema failed.
438
+ ${checks.map((check) => {
439
+ const target = quotedTable(check.table);
440
+ const name = sqlIdent(jsonCheckName(check));
441
+ const schemaText = sqlString(JSON.stringify(check.schema));
442
+ const matches = `extensions.jsonb_matches_schema(${schemaText}::json, ${sqlIdent(check.column)})`;
443
+ const columns = check.where ? `${sqlIdent(check.column)}, ${sqlIdent(check.where.column)}` : sqlIdent(check.column);
444
+ const args = [
445
+ sqlString(check.column),
446
+ schemaText,
447
+ ...check.where ? [sqlString(check.where.column), sqlString(check.where.value)] : []
448
+ ].join(", ");
449
+ return [
450
+ `alter table ${target} drop constraint if exists ${name};`,
451
+ `alter table ${target} add constraint ${name}`,
452
+ ` check (${check.where ? `${sqlIdent(check.where.column)} <> ${sqlString(check.where.value)} or ` : ""}${matches}) not valid;`,
453
+ `alter table ${target} validate constraint ${name};`,
454
+ `drop trigger if exists ${name} on ${target};`,
455
+ `create trigger ${name} before insert or update of ${columns} on ${target}`,
456
+ ` for each row execute function better_supabase.check_json_schema(${args});`
457
+ ].join("\n");
458
+ }).join("\n\n")}\n`;
459
+ }
460
+ /** SQL that takes every privilege on a table from `anon` and `authenticated`. */
461
+ const revokeTable = (table) => `revoke all on ${table} from anon, authenticated;`;
462
+ /**
463
+ * One policy per command for rows `authenticated` owns. A permissive `for all`
464
+ * policy would also grant writes on its own, so the read-only actor check
465
+ * (which wraps only insert, update and delete policies) could never refuse
466
+ * them. `legacy` is the name of the `for all` policy this replaces.
467
+ */
468
+ function ownRowPolicies(options) {
469
+ const { table, legacy, name, using, check } = options;
470
+ const create = (command, body) => `drop policy if exists ${sqlIdent(name(command))} on ${table};
471
+ create policy ${sqlIdent(name(command))} on ${table} ${body};`;
472
+ return [
473
+ `drop policy if exists ${sqlIdent(legacy)} on ${table};`,
474
+ create("read", `for select to authenticated using (${using})`),
475
+ create("insert", `for insert to authenticated with check (${check})`),
476
+ create("update", `for update to authenticated using (${using}) with check (${check})`),
477
+ create("delete", `for delete to authenticated using (${using})`)
478
+ ].join("\n");
479
+ }
480
+ /**
481
+ * SQL that turns on RLS for a table the module manages, takes it from `anon`
482
+ * and `authenticated` and gives it to the service role. `read` grants
483
+ * `select` back to `authenticated`, for tables its policies expose.
484
+ */
485
+ const lockTable = (table, options = {}) => `alter table ${table} enable row level security;
486
+ ${revokeTable(table)}
487
+ ${options.read ? `grant select on ${table} to authenticated;\n` : ""}grant all on ${table} to service_role;`;
488
+ /**
489
+ * Monthly range partitions for any table created `partition by range` on a
490
+ * timestamptz column: a registry, `ensure_partitions(parent, months_ahead)`,
491
+ * which creates `<parent>_pYYYYMM` for this month and the next ones (UTC
492
+ * bounds) with RLS on and the client roles revoked, `maintain_partitions()`
493
+ * for every registered table, and `expired_partitions(parent, cutoff)`, the
494
+ * partitions wholly before `cutoff`. A table that isn't partitioned (one
495
+ * created before the option) is left alone.
496
+ */
497
+ const MONTHLY_PARTITIONS = `create table if not exists better_supabase.partitioned_tables (
498
+ parent regclass primary key,
499
+ months_ahead integer not null default 3 check (months_ahead between 1 and 24)
500
+ );
501
+ ${lockTable("better_supabase.partitioned_tables")}
502
+
503
+ create or replace function better_supabase.ensure_partitions(parent regclass, months_ahead integer default 3)
504
+ returns integer
505
+ language plpgsql
506
+ security definer
507
+ set search_path = ''
508
+ as $$
509
+ declare
510
+ v_schema text;
511
+ v_name text;
512
+ v_month timestamp := date_trunc('month', now() at time zone 'UTC');
513
+ v_part text;
514
+ v_made integer := 0;
515
+ begin
516
+ select n.nspname, c.relname into v_schema, v_name
517
+ from pg_catalog.pg_class c join pg_catalog.pg_namespace n on n.oid = c.relnamespace
518
+ where c.oid = parent and c.relkind = 'p';
519
+ if v_name is null then
520
+ return 0;
521
+ end if;
522
+ for i in 0..months_ahead loop
523
+ v_part := v_name || '_p' || to_char(v_month + make_interval(months => i), 'YYYYMM');
524
+ continue when pg_catalog.to_regclass(format('%I.%I', v_schema, v_part)) is not null;
525
+ begin
526
+ execute format(
527
+ 'create table %I.%I partition of %s for values from (%L) to (%L)',
528
+ v_schema, v_part, parent,
529
+ (v_month + make_interval(months => i)) at time zone 'UTC',
530
+ (v_month + make_interval(months => i + 1)) at time zone 'UTC'
531
+ );
532
+ exception when check_violation then
533
+ -- The default partition already holds rows of that month.
534
+ raise notice '% not created: the default partition has rows in its range', v_part;
535
+ continue;
536
+ end;
537
+ execute format('alter table %I.%I enable row level security', v_schema, v_part);
538
+ execute format('revoke all on %I.%I from anon, authenticated', v_schema, v_part);
539
+ v_made := v_made + 1;
540
+ end loop;
541
+ return v_made;
542
+ end;
543
+ $$;
544
+
545
+ create or replace function better_supabase.maintain_partitions()
546
+ returns integer
547
+ language plpgsql
548
+ security definer
549
+ set search_path = ''
550
+ as $$
551
+ declare
552
+ v_made integer := 0;
553
+ v_table record;
554
+ begin
555
+ for v_table in select t.parent, t.months_ahead from better_supabase.partitioned_tables t loop
556
+ v_made := v_made + better_supabase.ensure_partitions(v_table.parent, v_table.months_ahead);
557
+ end loop;
558
+ return v_made;
559
+ end;
560
+ $$;
561
+
562
+ create or replace function better_supabase.expired_partitions(parent regclass, cutoff timestamptz)
563
+ returns setof regclass
564
+ language sql
565
+ stable
566
+ security definer
567
+ set search_path = ''
568
+ as $$
569
+ select c.oid::regclass
570
+ from pg_catalog.pg_inherits i
571
+ join pg_catalog.pg_class c on c.oid = i.inhrelid
572
+ where i.inhparent = parent
573
+ and c.relname ~ '_p[0-9]{6}$'
574
+ and cutoff is not null
575
+ and (to_date(right(c.relname, 6), 'YYYYMM')::timestamp + interval '1 month') at time zone 'UTC' <= cutoff
576
+ order by c.relname
577
+ $$;
578
+ revoke execute on function better_supabase.ensure_partitions(regclass, integer) from public, anon, authenticated;
579
+ revoke execute on function better_supabase.maintain_partitions() from public, anon, authenticated;
580
+ revoke execute on function better_supabase.expired_partitions(regclass, timestamptz) from public, anon, authenticated;
581
+ grant execute on function better_supabase.maintain_partitions() to service_role;`;
582
+ /** SQL that registers a partitioned table for `maintain_partitions()` and creates its first partitions. */
583
+ const registerPartitions = (table, monthsAhead = 3) => `insert into better_supabase.partitioned_tables (parent, months_ahead)
584
+ select ${sqlString(table)}::regclass, ${monthsAhead}
585
+ where exists (select 1 from pg_catalog.pg_class c where c.oid = ${sqlString(table)}::regclass and c.relkind = 'p')
586
+ on conflict (parent) do nothing;
587
+ select better_supabase.ensure_partitions(${sqlString(table)}::regclass, ${monthsAhead});`;
588
+ /** The quoted name of a table's default partition: `<name>_default` in its schema. */
589
+ const defaultPartitionName = (table) => `${sqlIdent(table.schema)}.${sqlIdent(`${table.name}_default`)}`;
590
+ /**
591
+ * SQL that gives a partitioned `table` its `fallback` default partition, for
592
+ * rows outside the monthly ones. A table created unpartitioned is skipped.
593
+ */
594
+ const defaultPartition = (table, fallback) => `do $$
595
+ begin
596
+ if (select c.relkind from pg_catalog.pg_class c where c.oid = ${sqlString(table)}::regclass) = 'p' then
597
+ create table if not exists ${fallback} partition of ${table} default;
598
+ alter table ${fallback} enable row level security;
599
+ revoke all on ${fallback} from anon, authenticated;
600
+ end if;
601
+ end;
602
+ $$;`;
603
+ /**
604
+ * A security definer function that runs `call` once per element of a jsonb
605
+ * array, so a sink sends a whole batch in one round trip. Every element keeps
606
+ * the single-row function's checks and gets its own savepoint: it returns
607
+ * `{"<result>": value}` or `{"error": {code, message, hint}}`, in order, and
608
+ * one bad event never rolls back the others. More than `max` elements fail
609
+ * with 22023 before any is written. The caller adds the grants.
610
+ */
611
+ function batchFunction(options) {
612
+ const max = options.max ?? 1e3;
613
+ const value = ([name, type, fallback]) => {
614
+ const raw = type === "jsonb" ? `nullif(batch_event -> ${sqlString(name)}, 'null'::jsonb)` : type === "text" ? `batch_event ->> ${sqlString(name)}` : `(batch_event ->> ${sqlString(name)})::${type}`;
615
+ return fallback === void 0 ? raw : `coalesce(${raw}, ${fallback})`;
616
+ };
617
+ return `create or replace function ${options.name}(events jsonb)
618
+ returns jsonb
619
+ language plpgsql
620
+ security definer
621
+ set search_path = ''
622
+ as $$
623
+ declare
624
+ batch_event jsonb;
625
+ results jsonb := '[]';
626
+ batch_result ${options.returns};
627
+ failed_state text;
628
+ failed_message text;
629
+ failed_hint text;
630
+ begin
631
+ if pg_catalog.jsonb_typeof(events) is distinct from 'array' then
632
+ raise exception '${options.name.replace(/^.*\./, "")} takes a jsonb array of events'
633
+ using errcode = '22023', hint = ${sqlString(`${options.hint}_NOT_ARRAY`)};
634
+ end if;
635
+ if pg_catalog.jsonb_array_length(events) > ${max} then
636
+ raise exception '${options.name.replace(/^.*\./, "")} got % events, more than ${max}', pg_catalog.jsonb_array_length(events)
637
+ using errcode = '22023', hint = ${sqlString(`${options.hint}_TOO_LARGE`)};
638
+ end if;
639
+ for batch_event in select e from pg_catalog.jsonb_array_elements(events) e loop
640
+ begin
641
+ batch_result := ${options.call}(
642
+ ${typeof options.args === "string" ? ` ${options.args} => batch_event` : options.args.map((arg) => ` ${arg[0]} => ${value(arg)}`).join(",\n")}
643
+ );
644
+ results := results || pg_catalog.jsonb_build_array(pg_catalog.jsonb_build_object(${sqlString(options.result)}, batch_result));
645
+ exception when others then
646
+ get stacked diagnostics
647
+ failed_state = returned_sqlstate,
648
+ failed_message = message_text,
649
+ failed_hint = pg_exception_hint;
650
+ results := results || pg_catalog.jsonb_build_array(pg_catalog.jsonb_build_object(
651
+ 'error', pg_catalog.jsonb_build_object('code', failed_state, 'message', failed_message, 'hint', nullif(failed_hint, ''))
652
+ ));
653
+ end;
654
+ end loop;
655
+ return results;
656
+ end;
657
+ $$;`;
658
+ }
659
+ /** The PL/pgSQL variables `dropExpiredPartitions` uses, for a `declare` block. */
660
+ const PARTITION_VARIABLES = `
661
+ v_part regclass;
662
+ v_part_rows integer;
663
+ v_part_busy boolean;`;
664
+ /**
665
+ * PL/pgSQL that drops each monthly partition of `table` wholly before
666
+ * `cutoff` (null drops none, as `ctx.cutoff` returns under a legal hold) and
667
+ * adds its rows to `purged`. A partition with a row that matches `busy`
668
+ * (a condition over `p`, with `$1`.. bound to `using`) stays for the row
669
+ * deletes, so a purge never drops a row it would keep. Declare
670
+ * `PARTITION_VARIABLES` first.
671
+ */
672
+ function dropExpiredPartitions(options) {
673
+ const indent = options.indent ?? " ";
674
+ const literal = (sql) => sql.replaceAll("'", "''");
675
+ const busy = options.busy === void 0 ? "" : `
676
+ ${indent} execute format('select exists (select 1 from %s p where ${literal(options.busy).replaceAll("%", "%%")})', v_part) into v_part_busy${options.using && options.using.length > 0 ? ` using ${options.using.join(", ")}` : ""};
677
+ ${indent} continue when v_part_busy;`;
678
+ return `for v_part in
679
+ ${indent} select p from better_supabase.expired_partitions(${sqlString(options.table)}::regclass, ${options.cutoff}) p
680
+ ${indent}loop${busy}
681
+ ${indent} execute format('select count(*)::integer from %s', v_part) into v_part_rows;
682
+ ${indent} execute format('drop table %s', v_part);
683
+ ${indent} ${options.purged} := ${options.purged} + v_part_rows;
684
+ ${indent}end loop;`;
685
+ }
686
+ /** SQL that grants a function to signed-in users and the service role. */
687
+ const userGrant = (signature) => `revoke execute on function ${signature} from public, anon;
688
+ grant execute on function ${signature} to authenticated, service_role;`;
689
+ /** SQL that grants a function to the service role only. */
690
+ const serviceGrant = (signature) => `revoke execute on function ${signature} from public, anon, authenticated;
691
+ grant execute on function ${signature} to service_role;`;
692
+ /**
693
+ * SQL that revokes a trigger function from every API role. Postgres checks
694
+ * `execute` only when the trigger is created, never when it fires, so the
695
+ * trigger keeps working while the function can't be called through RPC.
696
+ */
697
+ const triggerGrant = (signature) => `revoke execute on function ${signature} from public, anon, authenticated;`;
698
+ /**
699
+ * `serviceGrant` for each function in `schema` (as SQL, e.g. `ctx.schema`),
700
+ * one statement per function, so `blocks.<module>.api` sees the grants
701
+ * and writes an entry point for each.
702
+ */
703
+ function serviceOnly(signatures, schema = "better_supabase") {
704
+ return signatures.map((signature) => serviceGrant(`${schema}.${signature}`)).join("\n");
705
+ }
706
+ /**
707
+ * `raise exception` with an errcode and, when given, a hint the TypeScript side maps.
708
+ * Sites that put `using` on its own line, raise without an errcode or compute
709
+ * the hint stay inline: this one-line form would change SQL apps have generated.
710
+ */
711
+ const raise = (message, errcode, hint, ...args) => `raise exception ${sqlString(message)}${args.map((arg) => `, ${arg}`).join("")} using errcode = '${errcode}'${hint === void 0 ? "" : `, hint = '${hint}'`};`;
712
+ /** `raise` for a module function: the hint first, the errcode defaulting to insufficient privilege. */
713
+ const fail = (code, message, errcode = "42501") => raise(message, errcode, code);
714
+ /** The hex SHA-256 of a `text` expression, as tokens and codes are stored. */
715
+ const sha256Hex = (value) => `encode(extensions.digest(${value}, 'sha256'), 'hex')`;
716
+ /** A page size: `value`, or `fallback` when null, clamped to `min`..`max`. */
717
+ const pageSize = (value, fallback, max, min = 1) => `least(greatest(coalesce(${value}, ${String(fallback)}), ${String(min)}), ${String(max)})`;
718
+ /**
719
+ * A row trigger that records writes to a table that callers change through
720
+ * `security invoker` functions or policies, which can't call `emit_event` or
721
+ * `audit_event` themselves. `written` and `removed` are `ctx.record`
722
+ * statements over `v_row`, the new row (or the old one on delete). When
723
+ * both are `null;` the trigger and its function are dropped.
724
+ */
725
+ function recordTrigger(ctx, options) {
726
+ const fn = ctx.fn(options.name);
727
+ const trigger = ctx.trigger(options.name);
728
+ if (options.written === "null;" && options.removed === "null;") return `drop trigger if exists ${trigger} on ${options.table};
729
+ drop function if exists ${fn}();`;
730
+ return `create or replace function ${fn}()
731
+ returns trigger
732
+ language plpgsql
733
+ security definer
734
+ set search_path = ''
735
+ as $$
736
+ declare
737
+ v_row ${options.table};
738
+ begin
739
+ if tg_op = 'DELETE' then
740
+ v_row := old;
741
+ ${options.removed}
742
+ else
743
+ v_row := new;
744
+ ${options.written}
745
+ end if;
746
+ return null;
747
+ end;
748
+ $$;
749
+ revoke execute on function ${fn}() from public, anon, authenticated;
750
+ drop trigger if exists ${trigger} on ${options.table};
751
+ create trigger ${trigger} after insert or update or delete on ${options.table}
752
+ for each row execute function ${fn}();`;
753
+ }
754
+ //#endregion
755
+ //#region src/sql/modules/access-model.ts
756
+ /**
757
+ * The `roles` model's defaults. Module actions name these keys (see
758
+ * `OPERATIONS`); `*` grants everything and `prefix.*` a prefix.
759
+ */
760
+ const DEFAULT_ROLES = {
761
+ owner: ["*"],
762
+ admin: [
763
+ "organization.read",
764
+ "organization.update",
765
+ "members.*",
766
+ "audit.read",
767
+ "audit.revert",
768
+ "webhooks.*",
769
+ "notifications.*",
770
+ "billing.*",
771
+ "api_keys.*",
772
+ "settings.*",
773
+ "usage.*",
774
+ "comments.*",
775
+ "activity.read",
776
+ "attachments.*",
777
+ "organization.export",
778
+ "onboarding.*",
779
+ "inbox.*",
780
+ "ai_chat.*",
781
+ "ai.*",
782
+ "tags.*",
783
+ "teams.*",
784
+ "custom_fields.*",
785
+ "share_links.*",
786
+ "reminders.*",
787
+ "imports.*",
788
+ "views.*",
789
+ "relations.*",
790
+ "bulk.*",
791
+ "search.*",
792
+ "metrics.*",
793
+ "calendar.*",
794
+ "bookings.*",
795
+ "versions.*",
796
+ "trash.*",
797
+ "reactions.*",
798
+ "approvals.*",
799
+ "access_requests.*",
800
+ "documents.*",
801
+ "drive.*",
802
+ "forms.*",
803
+ "signatures.*",
804
+ "templates.*",
805
+ "time_tracking.*",
806
+ "service_principals.*",
807
+ "pipelines.*",
808
+ "parties.*",
809
+ "engagements.*",
810
+ "deals.*",
811
+ "work_items.*",
812
+ "quotes.*",
813
+ "invoices.*",
814
+ "sla.*",
815
+ "targets.*",
816
+ "hiring.*",
817
+ "employees.*",
818
+ "collections.*",
819
+ "domains.*",
820
+ "rules.*",
821
+ "reviews.*",
822
+ "leave.*"
823
+ ],
824
+ member: [
825
+ "organization.read",
826
+ "members.read",
827
+ "notifications.read",
828
+ "api_keys.own",
829
+ "settings.read",
830
+ "comments.read",
831
+ "comments.create",
832
+ "activity.read",
833
+ "attachments.read",
834
+ "attachments.upload",
835
+ "onboarding.read",
836
+ "inbox.read",
837
+ "inbox.reply",
838
+ "ai_chat.read",
839
+ "ai_chat.create",
840
+ "ai_chat.share",
841
+ "ai.read",
842
+ "ai.create",
843
+ "ai.share",
844
+ "custom_fields.read",
845
+ "teams.read",
846
+ "tags.read",
847
+ "tags.apply",
848
+ "share_links.read",
849
+ "reminders.read",
850
+ "views.read",
851
+ "relations.read",
852
+ "bulk.run",
853
+ "search.read",
854
+ "metrics.read",
855
+ "calendar.read",
856
+ "calendar.write",
857
+ "bookings.read",
858
+ "bookings.create",
859
+ "versions.read",
860
+ "versions.create",
861
+ "versions.restore",
862
+ "trash.read",
863
+ "trash.create",
864
+ "trash.restore",
865
+ "reactions.read",
866
+ "reactions.create",
867
+ "approvals.read",
868
+ "approvals.request",
869
+ "access_requests.create",
870
+ "documents.read",
871
+ "documents.write",
872
+ "drive.read",
873
+ "drive.create",
874
+ "forms.read",
875
+ "forms.submit",
876
+ "signatures.read",
877
+ "signatures.request",
878
+ "templates.read",
879
+ "templates.apply",
880
+ "time_tracking.track",
881
+ "leave.request",
882
+ "pipelines.read",
883
+ "parties.read",
884
+ "parties.write",
885
+ "engagements.read",
886
+ "engagements.write",
887
+ "deals.read",
888
+ "deals.write",
889
+ "work_items.read",
890
+ "work_items.write",
891
+ "quotes.read",
892
+ "quotes.write",
893
+ "invoices.read",
894
+ "sla.read",
895
+ "targets.read",
896
+ "employees.read",
897
+ "collections.read",
898
+ "collections.write",
899
+ "domains.read",
900
+ "rules.read"
901
+ ],
902
+ viewer: ["organization.read"]
903
+ };
904
+ /**
905
+ * The permission key each operation checks by default, keyed
906
+ * `<module>.<action>`. `blocks.<name>.permissions` renames a key per
907
+ * module, `authorization.operations` overrides it for a provider, and the
908
+ * access module's `operation_permission(op)` answers the result in SQL.
909
+ * Keys are `<area>.<verb>`, with `read` for viewing; platform-wide actions
910
+ * use the `platform` area or a key that `is_platform()` checks. The AI
911
+ * blocks other than ai-chat check `ai.*` keys.
912
+ */
913
+ const OPERATIONS = {
914
+ "organizations.update": "organization.update",
915
+ "organizations.delete": "organization.delete",
916
+ "organizations.removeMember": "members.remove",
917
+ "organizations.suspendMember": "members.remove",
918
+ "organizations.updateRole": "members.update_role",
919
+ "organizations.transferOwnership": "organization.transfer_ownership",
920
+ "invitations.invite": "members.invite",
921
+ "invitations.revoke": "members.invite",
922
+ "invitations.view": "members.invite",
923
+ "invitations.invitePlatform": "platform.invite",
924
+ "audit.view": "audit.read",
925
+ "audit.viewAll": "audit.read",
926
+ "audit.revert": "audit.revert",
927
+ "support-sessions.start": "support.start",
928
+ "support-sessions.view": "support.read",
929
+ "support-sessions.revoke": "support.revoke",
930
+ "notifications.send": "notifications.send",
931
+ "notifications.read": "notifications.read",
932
+ "webhooks-out.manage": "webhooks.manage",
933
+ "webhooks-out.view": "webhooks.read",
934
+ "webhooks-in.create": "webhooks.manage",
935
+ "webhooks-in.update": "webhooks.manage",
936
+ "webhooks-in.delete": "webhooks.manage",
937
+ "webhooks-in.view": "webhooks.read",
938
+ "api-keys.manage": "api_keys.manage",
939
+ "api-keys.own": "api_keys.own",
940
+ "settings.read": "settings.read",
941
+ "settings.update": "settings.update",
942
+ "settings.platform": "settings.manage",
943
+ "usage.read": "usage.read",
944
+ "usage.record": "usage.record",
945
+ "billing.read": "billing.read",
946
+ "billing.manage": "billing.manage",
947
+ "billing.viewAll": "billing.read",
948
+ "comments.read": "comments.read",
949
+ "comments.create": "comments.create",
950
+ "comments.moderate": "comments.moderate",
951
+ "comments.activity": "activity.read",
952
+ "data-lifecycle.export": "organization.export",
953
+ "data-lifecycle.delete": "organization.delete",
954
+ "data-lifecycle.cancelDelete": "organization.delete",
955
+ "attachments.read": "attachments.read",
956
+ "attachments.upload": "attachments.upload",
957
+ "attachments.manage": "attachments.manage",
958
+ "sso.manage": "sso.manage",
959
+ "onboarding.read": "onboarding.read",
960
+ "onboarding.complete": "onboarding.complete",
961
+ "announcements.manage": "announcements.manage",
962
+ "waitlist.manage": "waitlist.manage",
963
+ "waitlist.invite": "members.invite",
964
+ "flags.manage": "flags.manage",
965
+ "workflows.read": "workflow.read",
966
+ "workflows.run": "workflow.run",
967
+ "workflows.admin": "workflow.admin",
968
+ "workflow-builder.read": "workflow.read",
969
+ "workflow-builder.run": "workflow.run",
970
+ "workflow-builder.edit": "workflow.edit",
971
+ "workflow-builder.publish": "workflow.publish",
972
+ "workflow-builder.admin": "workflow.admin",
973
+ "inbox.read": "inbox.read",
974
+ "inbox.reply": "inbox.reply",
975
+ "inbox.assign": "inbox.assign",
976
+ "inbox.manage": "inbox.manage",
977
+ "ai-chat.read": "ai_chat.read",
978
+ "ai-chat.create": "ai_chat.create",
979
+ "ai-chat.share": "ai_chat.share",
980
+ "ai-chat.moderate": "ai_chat.moderate",
981
+ "ai-chat.admin": "ai_chat.admin",
982
+ "ai-files.upload": "ai.create",
983
+ "ai-files.manage": "ai.admin",
984
+ "knowledge.read": "ai.read",
985
+ "knowledge.write": "ai.create",
986
+ "knowledge.manage": "ai.admin",
987
+ "memory.read": "ai.read",
988
+ "memory.manage": "ai.admin",
989
+ "agents.read": "ai.read",
990
+ "agents.create": "ai.create",
991
+ "agents.publish": "ai.share",
992
+ "agents.moderate": "ai.moderate",
993
+ "connectors.read": "ai.read",
994
+ "connectors.use": "ai.create",
995
+ "connectors.manage": "ai.admin",
996
+ "ai-tasks.create": "ai.create",
997
+ "ai-tasks.manage": "ai.admin",
998
+ "ai-providers.use": "ai.create",
999
+ "ai-providers.manage": "ai.admin",
1000
+ "number-sequences.assign": "number_sequences.assign",
1001
+ "teams.manage": "teams.manage",
1002
+ "teams.read": "teams.read",
1003
+ "tags.manage": "tags.manage",
1004
+ "tags.read": "tags.read",
1005
+ "tags.apply": "tags.apply",
1006
+ "catalog.manage": "catalog.manage",
1007
+ "catalog.read": "catalog.read",
1008
+ "inventory.manage": "inventory.manage",
1009
+ "inventory.read": "inventory.read",
1010
+ "inventory.reserve": "inventory.reserve",
1011
+ "inventory.purchase": "inventory.purchase",
1012
+ "orders.manage": "orders.manage",
1013
+ "orders.read": "orders.read",
1014
+ "promotions.manage": "promotions.manage",
1015
+ "promotions.read": "promotions.read",
1016
+ "custom-fields.manage": "custom_fields.manage",
1017
+ "custom-fields.read": "custom_fields.read",
1018
+ "custom-fields.sensitive": "custom_fields.sensitive.read",
1019
+ "share-links.create": "share_links.create",
1020
+ "share-links.read": "share_links.read",
1021
+ "reminders.manage": "reminders.manage",
1022
+ "reminders.read": "reminders.read",
1023
+ "imports.manage": "imports.manage",
1024
+ "saved-views.read": "views.read",
1025
+ "saved-views.share": "views.share",
1026
+ "relations.read": "relations.read",
1027
+ "relations.manage": "relations.manage",
1028
+ "bulk.run": "bulk.run",
1029
+ "search.read": "search.read",
1030
+ "metrics.read": "metrics.read",
1031
+ "metrics.manage": "metrics.manage",
1032
+ "calendar.manage": "calendar.manage",
1033
+ "calendar.write": "calendar.write",
1034
+ "calendar.read": "calendar.read",
1035
+ "bookings.manage": "bookings.manage",
1036
+ "bookings.create": "bookings.create",
1037
+ "bookings.read": "bookings.read",
1038
+ "versions.read": "versions.read",
1039
+ "versions.create": "versions.create",
1040
+ "versions.restore": "versions.restore",
1041
+ "versions.manage": "versions.manage",
1042
+ "trash.read": "trash.read",
1043
+ "trash.create": "trash.create",
1044
+ "trash.restore": "trash.restore",
1045
+ "trash.manage": "trash.manage",
1046
+ "reactions.read": "reactions.read",
1047
+ "reactions.create": "reactions.create",
1048
+ "reactions.manage": "reactions.manage",
1049
+ "approvals.read": "approvals.read",
1050
+ "approvals.request": "approvals.request",
1051
+ "approvals.manage": "approvals.manage",
1052
+ "access-requests.read": "access_requests.read",
1053
+ "access-requests.create": "access_requests.create",
1054
+ "access-requests.manage": "access_requests.manage",
1055
+ "documents.read": "documents.read",
1056
+ "documents.write": "documents.write",
1057
+ "documents.manage": "documents.manage",
1058
+ "drive.read": "drive.read",
1059
+ "drive.create": "drive.create",
1060
+ "drive.manage": "drive.manage",
1061
+ "forms.read": "forms.read",
1062
+ "forms.manage": "forms.manage",
1063
+ "forms.submit": "forms.submit",
1064
+ "forms.review": "forms.review",
1065
+ "signatures.read": "signatures.read",
1066
+ "signatures.request": "signatures.request",
1067
+ "signatures.manage": "signatures.manage",
1068
+ "templates.read": "templates.read",
1069
+ "templates.apply": "templates.apply",
1070
+ "templates.manage": "templates.manage",
1071
+ "time-tracking.read": "time_tracking.read",
1072
+ "time-tracking.track": "time_tracking.track",
1073
+ "time-tracking.approve": "time_tracking.approve",
1074
+ "time-tracking.manage": "time_tracking.manage",
1075
+ "service-principals.read": "service_principals.read",
1076
+ "service-principals.manage": "service_principals.manage",
1077
+ "pipelines.read": "pipelines.read",
1078
+ "pipelines.manage": "pipelines.manage",
1079
+ "parties.read": "parties.read",
1080
+ "parties.write": "parties.write",
1081
+ "parties.manage": "parties.manage",
1082
+ "engagements.read": "engagements.read",
1083
+ "engagements.write": "engagements.write",
1084
+ "engagements.manage": "engagements.manage",
1085
+ "deals.read": "deals.read",
1086
+ "deals.write": "deals.write",
1087
+ "deals.manage": "deals.manage",
1088
+ "work-items.read": "work_items.read",
1089
+ "work-items.write": "work_items.write",
1090
+ "work-items.manage": "work_items.manage",
1091
+ "quotes.read": "quotes.read",
1092
+ "quotes.write": "quotes.write",
1093
+ "quotes.manage": "quotes.manage",
1094
+ "invoices.read": "invoices.read",
1095
+ "invoices.write": "invoices.write",
1096
+ "invoices.manage": "invoices.manage",
1097
+ "sla.read": "sla.read",
1098
+ "sla.manage": "sla.manage",
1099
+ "targets.read": "targets.read",
1100
+ "targets.manage": "targets.manage",
1101
+ "hiring.read": "hiring.read",
1102
+ "hiring.write": "hiring.write",
1103
+ "hiring.manage": "hiring.manage",
1104
+ "employees.read": "employees.read",
1105
+ "employees.write": "employees.write",
1106
+ "employees.viewSensitive": "employees.view_sensitive",
1107
+ "collections.read": "collections.read",
1108
+ "collections.write": "collections.write",
1109
+ "collections.share": "collections.share",
1110
+ "domains.read": "domains.read",
1111
+ "domains.manage": "domains.manage",
1112
+ "rules.read": "rules.read",
1113
+ "rules.edit": "rules.edit",
1114
+ "rules.publish": "rules.publish",
1115
+ "rules.admin": "rules.admin",
1116
+ "reviews.manage": "reviews.manage",
1117
+ "leave.request": "leave.request",
1118
+ "leave.read": "leave.read",
1119
+ "leave.approve": "leave.approve",
1120
+ "leave.manage": "leave.manage"
1121
+ };
1122
+ const operationsByModule = /* @__PURE__ */ new Map();
1123
+ for (const [name, key] of Object.entries(OPERATIONS)) {
1124
+ const dot = name.indexOf(".");
1125
+ const module = name.slice(0, dot);
1126
+ const actions = operationsByModule.get(module) ?? {};
1127
+ actions[name.slice(dot + 1)] = key;
1128
+ operationsByModule.set(module, actions);
1129
+ }
1130
+ /** `module`'s default keys by action, from `OPERATIONS`. */
1131
+ function moduleOperations(module) {
1132
+ return operationsByModule.get(module) ?? {};
1133
+ }
1134
+ /**
1135
+ * Where each module action checks its key: `tenant` through `member_can`,
1136
+ * `can` or `tenant_ids_with` (a provider's `idsWith`), and `platform`
1137
+ * through `is_platform` or `platform_can` (a provider's `isPlatform`).
1138
+ */
1139
+ const MODULE_PERMISSION_SCOPES = {
1140
+ organizations: {
1141
+ update: "tenant",
1142
+ delete: "tenant",
1143
+ removeMember: "tenant",
1144
+ suspendMember: "tenant",
1145
+ updateRole: "tenant",
1146
+ transferOwnership: "tenant"
1147
+ },
1148
+ invitations: {
1149
+ invite: "tenant",
1150
+ revoke: "tenant",
1151
+ view: "tenant",
1152
+ invitePlatform: "platform"
1153
+ },
1154
+ audit: {
1155
+ view: "tenant",
1156
+ viewAll: "platform",
1157
+ revert: "tenant"
1158
+ },
1159
+ "support-sessions": {
1160
+ start: "platform",
1161
+ view: "platform",
1162
+ revoke: "platform"
1163
+ },
1164
+ notifications: {
1165
+ send: "tenant",
1166
+ read: "tenant"
1167
+ },
1168
+ "webhooks-out": {
1169
+ manage: "tenant",
1170
+ view: "tenant"
1171
+ },
1172
+ "webhooks-in": {
1173
+ create: "tenant",
1174
+ update: "tenant",
1175
+ delete: "tenant",
1176
+ view: "tenant"
1177
+ },
1178
+ "api-keys": {
1179
+ manage: "tenant",
1180
+ own: "tenant"
1181
+ },
1182
+ settings: {
1183
+ read: "tenant",
1184
+ update: "tenant",
1185
+ platform: "platform"
1186
+ },
1187
+ usage: {
1188
+ read: "tenant",
1189
+ record: "tenant"
1190
+ },
1191
+ billing: {
1192
+ read: "tenant",
1193
+ manage: "tenant",
1194
+ viewAll: "platform"
1195
+ },
1196
+ comments: {
1197
+ read: "tenant",
1198
+ create: "tenant",
1199
+ moderate: "tenant",
1200
+ activity: "tenant"
1201
+ },
1202
+ attachments: {
1203
+ read: "tenant",
1204
+ upload: "tenant",
1205
+ manage: "tenant"
1206
+ },
1207
+ "data-lifecycle": {
1208
+ export: "tenant",
1209
+ delete: "tenant",
1210
+ cancelDelete: "tenant"
1211
+ },
1212
+ sso: { manage: "tenant" },
1213
+ onboarding: {
1214
+ read: "tenant",
1215
+ complete: "tenant"
1216
+ },
1217
+ announcements: { manage: "platform" },
1218
+ waitlist: {
1219
+ manage: "platform",
1220
+ invite: "tenant"
1221
+ },
1222
+ flags: { manage: "platform" },
1223
+ workflows: {
1224
+ read: "tenant",
1225
+ run: "tenant",
1226
+ admin: "tenant"
1227
+ },
1228
+ "workflow-builder": {
1229
+ read: "tenant",
1230
+ run: "tenant",
1231
+ edit: "tenant",
1232
+ publish: "tenant",
1233
+ admin: "tenant"
1234
+ },
1235
+ inbox: {
1236
+ read: "tenant",
1237
+ reply: "tenant",
1238
+ assign: "tenant",
1239
+ manage: "tenant"
1240
+ },
1241
+ "ai-chat": {
1242
+ read: "tenant",
1243
+ create: "tenant",
1244
+ share: "tenant",
1245
+ moderate: "tenant",
1246
+ admin: "tenant"
1247
+ },
1248
+ "ai-files": {
1249
+ upload: "tenant",
1250
+ manage: "tenant"
1251
+ },
1252
+ knowledge: {
1253
+ read: "tenant",
1254
+ write: "tenant",
1255
+ manage: "tenant"
1256
+ },
1257
+ memory: {
1258
+ read: "tenant",
1259
+ manage: "tenant"
1260
+ },
1261
+ agents: {
1262
+ read: "tenant",
1263
+ create: "tenant",
1264
+ publish: "tenant",
1265
+ moderate: "tenant"
1266
+ },
1267
+ connectors: {
1268
+ read: "tenant",
1269
+ use: "tenant",
1270
+ manage: "tenant"
1271
+ },
1272
+ "ai-tasks": {
1273
+ create: "tenant",
1274
+ manage: "tenant"
1275
+ },
1276
+ "ai-providers": {
1277
+ use: "tenant",
1278
+ manage: "tenant"
1279
+ },
1280
+ "number-sequences": { assign: "tenant" },
1281
+ teams: {
1282
+ manage: "tenant",
1283
+ read: "tenant"
1284
+ },
1285
+ tags: {
1286
+ manage: "tenant",
1287
+ read: "tenant",
1288
+ apply: "tenant"
1289
+ },
1290
+ catalog: {
1291
+ manage: "tenant",
1292
+ read: "tenant"
1293
+ },
1294
+ inventory: {
1295
+ manage: "tenant",
1296
+ read: "tenant",
1297
+ reserve: "tenant",
1298
+ purchase: "tenant"
1299
+ },
1300
+ orders: {
1301
+ manage: "tenant",
1302
+ read: "tenant"
1303
+ },
1304
+ promotions: {
1305
+ manage: "tenant",
1306
+ read: "tenant"
1307
+ },
1308
+ "custom-fields": {
1309
+ manage: "tenant",
1310
+ read: "tenant",
1311
+ sensitive: "tenant"
1312
+ },
1313
+ "share-links": {
1314
+ create: "tenant",
1315
+ read: "tenant"
1316
+ },
1317
+ reminders: {
1318
+ manage: "tenant",
1319
+ read: "tenant"
1320
+ },
1321
+ imports: { manage: "tenant" },
1322
+ "saved-views": {
1323
+ read: "tenant",
1324
+ share: "tenant"
1325
+ },
1326
+ relations: {
1327
+ read: "tenant",
1328
+ manage: "tenant"
1329
+ },
1330
+ bulk: { run: "tenant" },
1331
+ search: { read: "tenant" },
1332
+ metrics: {
1333
+ read: "tenant",
1334
+ manage: "tenant"
1335
+ },
1336
+ calendar: {
1337
+ manage: "tenant",
1338
+ write: "tenant",
1339
+ read: "tenant"
1340
+ },
1341
+ bookings: {
1342
+ manage: "tenant",
1343
+ create: "tenant",
1344
+ read: "tenant"
1345
+ },
1346
+ versions: {
1347
+ read: "tenant",
1348
+ create: "tenant",
1349
+ restore: "tenant",
1350
+ manage: "tenant"
1351
+ },
1352
+ trash: {
1353
+ read: "tenant",
1354
+ create: "tenant",
1355
+ restore: "tenant",
1356
+ manage: "tenant"
1357
+ },
1358
+ reactions: {
1359
+ read: "tenant",
1360
+ create: "tenant",
1361
+ manage: "tenant"
1362
+ },
1363
+ approvals: {
1364
+ read: "tenant",
1365
+ request: "tenant",
1366
+ manage: "tenant"
1367
+ },
1368
+ "access-requests": {
1369
+ read: "tenant",
1370
+ create: "tenant",
1371
+ manage: "tenant"
1372
+ },
1373
+ documents: {
1374
+ read: "tenant",
1375
+ write: "tenant",
1376
+ manage: "tenant"
1377
+ },
1378
+ drive: {
1379
+ read: "tenant",
1380
+ create: "tenant",
1381
+ manage: "tenant"
1382
+ },
1383
+ forms: {
1384
+ read: "tenant",
1385
+ manage: "tenant",
1386
+ submit: "tenant",
1387
+ review: "tenant"
1388
+ },
1389
+ signatures: {
1390
+ read: "tenant",
1391
+ request: "tenant",
1392
+ manage: "tenant"
1393
+ },
1394
+ templates: {
1395
+ read: "tenant",
1396
+ apply: "tenant",
1397
+ manage: "tenant"
1398
+ },
1399
+ "time-tracking": {
1400
+ read: "tenant",
1401
+ track: "tenant",
1402
+ approve: "tenant",
1403
+ manage: "tenant"
1404
+ },
1405
+ "service-principals": {
1406
+ read: "tenant",
1407
+ manage: "tenant"
1408
+ },
1409
+ pipelines: {
1410
+ read: "tenant",
1411
+ manage: "tenant"
1412
+ },
1413
+ parties: {
1414
+ read: "tenant",
1415
+ write: "tenant",
1416
+ manage: "tenant"
1417
+ },
1418
+ engagements: {
1419
+ read: "tenant",
1420
+ write: "tenant",
1421
+ manage: "tenant"
1422
+ },
1423
+ deals: {
1424
+ read: "tenant",
1425
+ write: "tenant",
1426
+ manage: "tenant"
1427
+ },
1428
+ "work-items": {
1429
+ read: "tenant",
1430
+ write: "tenant",
1431
+ manage: "tenant"
1432
+ },
1433
+ quotes: {
1434
+ read: "tenant",
1435
+ write: "tenant",
1436
+ manage: "tenant"
1437
+ },
1438
+ invoices: {
1439
+ read: "tenant",
1440
+ write: "tenant",
1441
+ manage: "tenant"
1442
+ },
1443
+ sla: {
1444
+ read: "tenant",
1445
+ manage: "tenant"
1446
+ },
1447
+ targets: {
1448
+ read: "tenant",
1449
+ manage: "tenant"
1450
+ },
1451
+ hiring: {
1452
+ read: "tenant",
1453
+ write: "tenant",
1454
+ manage: "tenant"
1455
+ },
1456
+ employees: {
1457
+ read: "tenant",
1458
+ write: "tenant",
1459
+ viewSensitive: "tenant"
1460
+ },
1461
+ collections: {
1462
+ read: "tenant",
1463
+ write: "tenant",
1464
+ share: "tenant"
1465
+ },
1466
+ domains: {
1467
+ read: "tenant",
1468
+ manage: "tenant"
1469
+ },
1470
+ rules: {
1471
+ read: "tenant",
1472
+ edit: "tenant",
1473
+ publish: "tenant",
1474
+ admin: "tenant"
1475
+ },
1476
+ reviews: { manage: "tenant" },
1477
+ leave: {
1478
+ request: "tenant",
1479
+ read: "tenant",
1480
+ approve: "tenant",
1481
+ manage: "tenant"
1482
+ }
1483
+ };
1484
+ function accessModel(ctx) {
1485
+ return ctx.modules.access?.model ?? "roles";
1486
+ }
1487
+ function rolesOf(ctx) {
1488
+ return ctx.modules.access?.roles ?? DEFAULT_ROLES;
1489
+ }
1490
+ const roleNames = (ctx) => Object.keys(rolesOf(ctx));
1491
+ /**
1492
+ * The scope name tenants use in `can(scope, id, permission)`
1493
+ * (`blocks.access.options.scope`, default `organization`). `tenant` is
1494
+ * accepted too.
1495
+ */
1496
+ const tenantScope = (ctx) => ctx.of("access").text("scope", "organization");
1497
+ const isPlain = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1498
+ const quotedRef = (where, table, column) => {
1499
+ const parts = `${table}.${column}`.split(".");
1500
+ if (parts.length !== 3 || parts.some((part) => !/^[A-Za-z_][A-Za-z0-9_$]*$/.test(part))) throw new TypeError(`${where}: "${table}" must be "schema.table" and "${column}" a column`);
1501
+ return {
1502
+ table: `${sqlIdent(parts[0])}.${sqlIdent(parts[1])}`,
1503
+ column: sqlIdent(parts[2])
1504
+ };
1505
+ };
1506
+ /** The `provider` model's platform role table, or `undefined` without one. */
1507
+ function providerPlatformRoles(ctx) {
1508
+ if (accessModel(ctx) !== "provider" || !ctx.installed("invitations")) return;
1509
+ const value = ctx.of("invitations").option("platformRoles");
1510
+ if (value === void 0) return;
1511
+ const where = "blocks.invitations.options.platformRoles";
1512
+ if (!isPlain(value) || typeof value["table"] !== "string" || typeof value["user"] !== "string" || typeof value["role"] !== "string" || value["canAssign"] !== void 0 && typeof value["canAssign"] !== "string" || value["canAssignFor"] !== void 0 && (typeof value["canAssignFor"] !== "string" || !value["canAssignFor"].includes("{user}"))) throw new TypeError(`${where} must be { table: "schema.table", user: "<user column>", role: "<role column>", through?: { table, id, column }, canAssign?: "<SQL template>", canAssignFor?: "<SQL template with {user}>" }`);
1513
+ const user = quotedRef(where, value["table"], value["user"]);
1514
+ const role = quotedRef(where, value["table"], value["role"]);
1515
+ const through = value["through"];
1516
+ let lookup;
1517
+ if (through !== void 0) {
1518
+ if (!isPlain(through) || typeof through["table"] !== "string" || typeof through["id"] !== "string" || typeof through["column"] !== "string" || through["where"] !== void 0 && (typeof through["where"] !== "string" || !through["where"].includes("{row}"))) throw new TypeError(`${where}.through must be { table: "schema.table", id: "<key column>", column: "<role name column>", where?: "<condition on {row}>" }`);
1519
+ const id = quotedRef(`${where}.through`, through["table"], through["id"]);
1520
+ lookup = {
1521
+ table: id.table,
1522
+ id: id.column,
1523
+ column: quotedRef(`${where}.through`, through["table"], through["column"]).column,
1524
+ ...typeof through["where"] === "string" ? { where: through["where"] } : {}
1525
+ };
1526
+ }
1527
+ return {
1528
+ table: user.table,
1529
+ user: user.column,
1530
+ role: role.column,
1531
+ ...lookup ? { through: lookup } : {},
1532
+ ...typeof value["canAssign"] === "string" ? { canAssign: value["canAssign"] } : {},
1533
+ ...typeof value["canAssignFor"] === "string" ? { canAssignFor: value["canAssignFor"] } : {}
1534
+ };
1535
+ }
1536
+ /** Whether the catalog has platform roles, and so platform invitations. */
1537
+ function hasPlatformRoles(ctx) {
1538
+ if (providerPlatformRoles(ctx)) return true;
1539
+ return accessModel(ctx) === "catalog" && ctx.of("access").hasTable("platformAssignments");
1540
+ }
1541
+ /**
1542
+ * Whether catalog role row `alias` is a tenant or a platform role, or
1543
+ * `undefined` when roles carry no scope. Managed catalogs have a `scope`
1544
+ * column; an adopted one maps `roles.scope` and names its values in
1545
+ * `blocks.access.options.tenantRoleScope` and `platformRoleScope`.
1546
+ */
1547
+ function roleScopeIs(ctx, alias, scope) {
1548
+ if (accessModel(ctx) !== "catalog") return;
1549
+ const access = ctx.of("access");
1550
+ if (!access.manages && access.config.columns["roles"]?.["scope"] == null) return;
1551
+ const value = scope === "tenant" ? access.text("tenantRoleScope", "tenant") : access.text("platformRoleScope", "platform");
1552
+ return `${alias}.${access.col("roles", "scope")}::text = ${sqlString(value)}`;
1553
+ }
1554
+ const MODULE_PERMISSION_SHORTHANDS = {
1555
+ organizations: { suspendMember: "removeMember" },
1556
+ invitations: {
1557
+ revoke: "invite",
1558
+ view: "invite"
1559
+ },
1560
+ audit: { viewAll: "view" },
1561
+ billing: { viewAll: "read" },
1562
+ waitlist: { invite: {
1563
+ module: "invitations",
1564
+ action: "invite"
1565
+ } },
1566
+ "webhooks-in": {
1567
+ create: "manage",
1568
+ update: "manage",
1569
+ delete: "manage"
1570
+ }
1571
+ };
1572
+ function modulePermissionKey(ctx, action, fallback) {
1573
+ const shorthand = MODULE_PERMISSION_SHORTHANDS[ctx.module]?.[action];
1574
+ if (shorthand === void 0) return ctx.permissionKey(action, fallback);
1575
+ const target = typeof shorthand === "string" ? modulePermissionKey(ctx, shorthand, fallback) : modulePermissionKey(ctx.of(shorthand.module), shorthand.action, fallback);
1576
+ return ctx.permissionKey(action, target);
1577
+ }
1578
+ const modulePermission = (ctx, action, fallback) => sqlString(modulePermissionKey(ctx, action, fallback));
1579
+ //#endregion
1580
+ //#region src/sql/modules/workflow-sdk-world-ddl.generated.ts
1581
+ /** The `@workflow/world-postgres` version the DDL below was generated from. */
1582
+ const WORLD_POSTGRES_VERSION = "5.0.4";
1583
+ /** The `workflow` schema after every migration above, as idempotent DDL. */
1584
+ const WORLD_POSTGRES_DDL = `create schema if not exists workflow;
1585
+
1586
+ do $$ begin
1587
+ create type workflow.status as enum ('pending', 'running', 'completed', 'failed', 'cancelled');
1588
+ exception when duplicate_object then null;
1589
+ end $$;
1590
+
1591
+ do $$ begin
1592
+ create type workflow.step_status as enum ('pending', 'running', 'completed', 'failed', 'cancelled');
1593
+ exception when duplicate_object then null;
1594
+ end $$;
1595
+
1596
+ do $$ begin
1597
+ create type workflow.wait_status as enum ('waiting', 'completed');
1598
+ exception when duplicate_object then null;
1599
+ end $$;
1600
+
1601
+ create table if not exists workflow.workflow_event_slots (
1602
+ "run_id" character varying not null,
1603
+ "seq_in_band" integer not null default 1,
1604
+ constraint "workflow_event_slots_pkey" PRIMARY KEY (run_id)
1605
+ );
1606
+
1607
+ alter table workflow.workflow_event_slots
1608
+ add column if not exists "run_id" character varying not null,
1609
+ add column if not exists "seq_in_band" integer not null default 1;
1610
+
1611
+ create table if not exists workflow.workflow_events (
1612
+ "id" character varying not null,
1613
+ "type" character varying not null,
1614
+ "correlation_id" character varying,
1615
+ "created_at" timestamp without time zone not null default now(),
1616
+ "run_id" character varying not null,
1617
+ "payload" jsonb,
1618
+ "payload_cbor" bytea,
1619
+ "spec_version" integer,
1620
+ "resume_id" character varying,
1621
+ "resume_payload_digest" character varying,
1622
+ constraint "workflow_events_run_id_id_pk" PRIMARY KEY (run_id, id)
1623
+ );
1624
+
1625
+ alter table workflow.workflow_events
1626
+ add column if not exists "id" character varying not null,
1627
+ add column if not exists "type" character varying not null,
1628
+ add column if not exists "correlation_id" character varying,
1629
+ add column if not exists "created_at" timestamp without time zone not null default now(),
1630
+ add column if not exists "run_id" character varying not null,
1631
+ add column if not exists "payload" jsonb,
1632
+ add column if not exists "payload_cbor" bytea,
1633
+ add column if not exists "spec_version" integer,
1634
+ add column if not exists "resume_id" character varying,
1635
+ add column if not exists "resume_payload_digest" character varying;
1636
+
1637
+ create index if not exists workflow_events_correlation_id_index ON workflow.workflow_events USING btree (correlation_id);
1638
+
1639
+ create unique index if not exists workflow_events_entity_creation_unique ON workflow.workflow_events USING btree (run_id, correlation_id, type) WHERE ((type)::text = ANY ((ARRAY['step_created'::character varying, 'hook_created'::character varying, 'wait_created'::character varying, 'attr_set'::character varying])::text[]));
1640
+
1641
+ create unique index if not exists workflow_events_hook_resume_unique ON workflow.workflow_events USING btree (run_id, resume_id) WHERE (((type)::text = 'hook_received'::text) AND (resume_id IS NOT NULL));
1642
+
1643
+ create table if not exists workflow.workflow_hooks (
1644
+ "run_id" character varying not null,
1645
+ "hook_id" character varying not null,
1646
+ "token" character varying not null,
1647
+ "owner_id" character varying not null,
1648
+ "project_id" character varying not null,
1649
+ "environment" character varying not null,
1650
+ "created_at" timestamp without time zone not null default now(),
1651
+ "metadata" jsonb,
1652
+ "metadata_cbor" bytea,
1653
+ "spec_version" integer,
1654
+ "is_webhook" boolean default true,
1655
+ "is_system" boolean default false,
1656
+ "resume_context" bytea,
1657
+ "token_retention_until" timestamp with time zone,
1658
+ "claimed_from" bytea,
1659
+ constraint "workflow_hooks_pkey" PRIMARY KEY (hook_id)
1660
+ );
1661
+
1662
+ alter table workflow.workflow_hooks
1663
+ add column if not exists "run_id" character varying not null,
1664
+ add column if not exists "hook_id" character varying not null,
1665
+ add column if not exists "token" character varying not null,
1666
+ add column if not exists "owner_id" character varying not null,
1667
+ add column if not exists "project_id" character varying not null,
1668
+ add column if not exists "environment" character varying not null,
1669
+ add column if not exists "created_at" timestamp without time zone not null default now(),
1670
+ add column if not exists "metadata" jsonb,
1671
+ add column if not exists "metadata_cbor" bytea,
1672
+ add column if not exists "spec_version" integer,
1673
+ add column if not exists "is_webhook" boolean default true,
1674
+ add column if not exists "is_system" boolean default false,
1675
+ add column if not exists "resume_context" bytea,
1676
+ add column if not exists "token_retention_until" timestamp with time zone,
1677
+ add column if not exists "claimed_from" bytea;
1678
+
1679
+ create index if not exists workflow_hooks_run_id_index ON workflow.workflow_hooks USING btree (run_id);
1680
+
1681
+ create index if not exists workflow_hooks_token_index ON workflow.workflow_hooks USING btree (token);
1682
+
1683
+ create table if not exists workflow.workflow_invocations (
1684
+ "sequence" bigserial,
1685
+ "run_id" character varying not null,
1686
+ "request_id" character varying not null,
1687
+ "payload" bytea,
1688
+ "fingerprint" character varying,
1689
+ "result" bytea,
1690
+ "created_at" timestamp without time zone not null default now(),
1691
+ "responded_at" timestamp without time zone,
1692
+ "expired_at" timestamp without time zone,
1693
+ "result_version" integer not null default 0,
1694
+ constraint "workflow_invocations_pkey" PRIMARY KEY (run_id, request_id)
1695
+ );
1696
+
1697
+ alter table workflow.workflow_invocations
1698
+ add column if not exists "sequence" bigserial,
1699
+ add column if not exists "run_id" character varying not null,
1700
+ add column if not exists "request_id" character varying not null,
1701
+ add column if not exists "payload" bytea,
1702
+ add column if not exists "fingerprint" character varying,
1703
+ add column if not exists "result" bytea,
1704
+ add column if not exists "created_at" timestamp without time zone not null default now(),
1705
+ add column if not exists "responded_at" timestamp without time zone,
1706
+ add column if not exists "expired_at" timestamp without time zone,
1707
+ add column if not exists "result_version" integer not null default 0;
1708
+
1709
+ create index if not exists workflow_invocations_pending ON workflow.workflow_invocations USING btree (run_id, sequence) WHERE (responded_at IS NULL);
1710
+
1711
+ create table if not exists workflow.workflow_runs (
1712
+ "id" character varying not null,
1713
+ "output" jsonb,
1714
+ "deployment_id" character varying not null,
1715
+ "status" workflow.status not null,
1716
+ "name" character varying not null,
1717
+ "execution_context" jsonb,
1718
+ "input" jsonb,
1719
+ "error" text,
1720
+ "created_at" timestamp without time zone not null default now(),
1721
+ "updated_at" timestamp without time zone not null default now(),
1722
+ "completed_at" timestamp without time zone,
1723
+ "started_at" timestamp without time zone,
1724
+ "output_cbor" bytea,
1725
+ "execution_context_cbor" bytea,
1726
+ "input_cbor" bytea,
1727
+ "expired_at" timestamp without time zone,
1728
+ "spec_version" character varying,
1729
+ "error_cbor" bytea,
1730
+ "error_code" character varying,
1731
+ "attributes" jsonb not null default '{}'::jsonb,
1732
+ "encryption_public_key" character varying,
1733
+ "dynamic_workflow_code_cbor" bytea,
1734
+ constraint "workflow_runs_pkey" PRIMARY KEY (id)
1735
+ );
1736
+
1737
+ alter table workflow.workflow_runs
1738
+ add column if not exists "id" character varying not null,
1739
+ add column if not exists "output" jsonb,
1740
+ add column if not exists "deployment_id" character varying not null,
1741
+ add column if not exists "status" workflow.status not null,
1742
+ add column if not exists "name" character varying not null,
1743
+ add column if not exists "execution_context" jsonb,
1744
+ add column if not exists "input" jsonb,
1745
+ add column if not exists "error" text,
1746
+ add column if not exists "created_at" timestamp without time zone not null default now(),
1747
+ add column if not exists "updated_at" timestamp without time zone not null default now(),
1748
+ add column if not exists "completed_at" timestamp without time zone,
1749
+ add column if not exists "started_at" timestamp without time zone,
1750
+ add column if not exists "output_cbor" bytea,
1751
+ add column if not exists "execution_context_cbor" bytea,
1752
+ add column if not exists "input_cbor" bytea,
1753
+ add column if not exists "expired_at" timestamp without time zone,
1754
+ add column if not exists "spec_version" character varying,
1755
+ add column if not exists "error_cbor" bytea,
1756
+ add column if not exists "error_code" character varying,
1757
+ add column if not exists "attributes" jsonb not null default '{}'::jsonb,
1758
+ add column if not exists "encryption_public_key" character varying,
1759
+ add column if not exists "dynamic_workflow_code_cbor" bytea;
1760
+
1761
+ create index if not exists workflow_runs_name_index ON workflow.workflow_runs USING btree (name);
1762
+
1763
+ create index if not exists workflow_runs_status_index ON workflow.workflow_runs USING btree (status);
1764
+
1765
+ create table if not exists workflow.workflow_snapshots (
1766
+ "run_id" character varying not null,
1767
+ "data" bytea not null,
1768
+ "events_cursor" character varying,
1769
+ "created_at" timestamp without time zone not null default now(),
1770
+ constraint "workflow_snapshots_pkey" PRIMARY KEY (run_id)
1771
+ );
1772
+
1773
+ alter table workflow.workflow_snapshots
1774
+ add column if not exists "run_id" character varying not null,
1775
+ add column if not exists "data" bytea not null,
1776
+ add column if not exists "events_cursor" character varying,
1777
+ add column if not exists "created_at" timestamp without time zone not null default now();
1778
+
1779
+ create table if not exists workflow.workflow_steps (
1780
+ "run_id" character varying not null,
1781
+ "step_id" character varying not null,
1782
+ "step_name" character varying not null,
1783
+ "status" workflow.step_status not null,
1784
+ "input" jsonb,
1785
+ "output" jsonb,
1786
+ "error" text,
1787
+ "attempt" integer not null,
1788
+ "started_at" timestamp without time zone,
1789
+ "completed_at" timestamp without time zone,
1790
+ "created_at" timestamp without time zone not null default now(),
1791
+ "updated_at" timestamp without time zone not null default now(),
1792
+ "retry_after" timestamp without time zone,
1793
+ "input_cbor" bytea,
1794
+ "output_cbor" bytea,
1795
+ "error_cbor" bytea,
1796
+ "spec_version" integer,
1797
+ constraint "workflow_steps_pkey" PRIMARY KEY (step_id)
1798
+ );
1799
+
1800
+ alter table workflow.workflow_steps
1801
+ add column if not exists "run_id" character varying not null,
1802
+ add column if not exists "step_id" character varying not null,
1803
+ add column if not exists "step_name" character varying not null,
1804
+ add column if not exists "status" workflow.step_status not null,
1805
+ add column if not exists "input" jsonb,
1806
+ add column if not exists "output" jsonb,
1807
+ add column if not exists "error" text,
1808
+ add column if not exists "attempt" integer not null,
1809
+ add column if not exists "started_at" timestamp without time zone,
1810
+ add column if not exists "completed_at" timestamp without time zone,
1811
+ add column if not exists "created_at" timestamp without time zone not null default now(),
1812
+ add column if not exists "updated_at" timestamp without time zone not null default now(),
1813
+ add column if not exists "retry_after" timestamp without time zone,
1814
+ add column if not exists "input_cbor" bytea,
1815
+ add column if not exists "output_cbor" bytea,
1816
+ add column if not exists "error_cbor" bytea,
1817
+ add column if not exists "spec_version" integer;
1818
+
1819
+ create index if not exists workflow_steps_run_id_index ON workflow.workflow_steps USING btree (run_id);
1820
+
1821
+ create index if not exists workflow_steps_status_index ON workflow.workflow_steps USING btree (status);
1822
+
1823
+ create table if not exists workflow.workflow_stream_chunks (
1824
+ "id" character varying not null,
1825
+ "stream_id" character varying not null,
1826
+ "data" bytea not null,
1827
+ "created_at" timestamp without time zone not null default now(),
1828
+ "eof" boolean not null,
1829
+ "run_id" character varying,
1830
+ constraint "workflow_stream_chunks_stream_id_id_pk" PRIMARY KEY (stream_id, id)
1831
+ );
1832
+
1833
+ alter table workflow.workflow_stream_chunks
1834
+ add column if not exists "id" character varying not null,
1835
+ add column if not exists "stream_id" character varying not null,
1836
+ add column if not exists "data" bytea not null,
1837
+ add column if not exists "created_at" timestamp without time zone not null default now(),
1838
+ add column if not exists "eof" boolean not null,
1839
+ add column if not exists "run_id" character varying;
1840
+
1841
+ create index if not exists workflow_stream_chunks_run_id_index ON workflow.workflow_stream_chunks USING btree (run_id);
1842
+
1843
+ create table if not exists workflow.workflow_waits (
1844
+ "wait_id" character varying not null,
1845
+ "run_id" character varying not null,
1846
+ "status" workflow.wait_status not null,
1847
+ "resume_at" timestamp without time zone,
1848
+ "completed_at" timestamp without time zone,
1849
+ "created_at" timestamp without time zone not null default now(),
1850
+ "updated_at" timestamp without time zone not null default now(),
1851
+ "spec_version" integer,
1852
+ constraint "workflow_waits_pkey" PRIMARY KEY (wait_id)
1853
+ );
1854
+
1855
+ alter table workflow.workflow_waits
1856
+ add column if not exists "wait_id" character varying not null,
1857
+ add column if not exists "run_id" character varying not null,
1858
+ add column if not exists "status" workflow.wait_status not null,
1859
+ add column if not exists "resume_at" timestamp without time zone,
1860
+ add column if not exists "completed_at" timestamp without time zone,
1861
+ add column if not exists "created_at" timestamp without time zone not null default now(),
1862
+ add column if not exists "updated_at" timestamp without time zone not null default now(),
1863
+ add column if not exists "spec_version" integer;
1864
+
1865
+ create index if not exists workflow_waits_run_id_index ON workflow.workflow_waits USING btree (run_id);
1866
+ `;
1867
+ //#endregion
1868
+ //#region src/sql/modules/workflow-sdk-world.ts
1869
+ /** The Vault secret names the pg_net dispatcher reads. */
1870
+ const WORKFLOW_VAULT_SECRETS = {
1871
+ flowUrl: "workflow_flow_url",
1872
+ deliverySecret: "workflow_delivery_secret",
1873
+ encryptionKey: "workflow_encryption_key"
1874
+ };
1875
+ const WORKFLOW_DELIVERY_QUEUE = "workflow_deliveries";
1876
+ function deliveryModeOf(ctx) {
1877
+ const mode = ctx.text("delivery", "poll");
1878
+ if (mode !== "poll" && mode !== "pg_net") throw new TypeError(`blocks.workflow-sdk-world.options.delivery must be "poll" or "pg_net", got "${mode}"`);
1879
+ return mode;
1880
+ }
1881
+ const IDENT = /^[a-z_][a-z0-9_]{0,40}$/;
1882
+ function deliveryQueueOf(ctx) {
1883
+ const queue = ctx.text("queue", WORKFLOW_DELIVERY_QUEUE);
1884
+ if (!IDENT.test(queue)) throw new TypeError(`blocks.workflow-sdk-world.options.queue: "${queue}" is not a queue name`);
1885
+ return queue;
1886
+ }
1887
+ const PRINCIPAL_KINDS = "'user', 'service_principal', 'system', 'external'";
1888
+ function build(ctx) {
1889
+ if (ctx.mode === "custom") return "";
1890
+ const fn = (name) => ctx.fn(name);
1891
+ const workflows = ctx.of("workflows");
1892
+ const record = workflows.fn("record_workflow_run");
1893
+ const runKey = workflows.permission("run", OPERATIONS["workflows.run"]);
1894
+ const claimJobs = ctx.of("jobs").fn("claim_jobs");
1895
+ const id = ctx.idType;
1896
+ const queue = sqlString(deliveryQueueOf(ctx));
1897
+ const batch = Math.max(1, Math.trunc(ctx.number("batch", 20)));
1898
+ const timeout = Math.max(1e3, Math.trunc(ctx.number("timeout", 3e4)));
1899
+ const lease = Math.ceil(timeout / 1e3) + 30;
1900
+ const mirror = ctx.trigger("workflow_sdk_runs_mirror");
1901
+ return `${schemaPreamble(ctx)}
1902
+ -- The Workflow SDK World's tables (@workflow/world-postgres ${WORLD_POSTGRES_VERSION}).
1903
+ -- Only the service role reads them: the app reads runs from workflow_runs in
1904
+ -- the workflows module.
1905
+ ${WORLD_POSTGRES_DDL}
1906
+ revoke all on schema workflow from public, anon, authenticated;
1907
+ grant usage on schema workflow to service_role;
1908
+ do $$
1909
+ declare
1910
+ t record;
1911
+ begin
1912
+ for t in select c.relname from pg_catalog.pg_class c
1913
+ join pg_catalog.pg_namespace n on n.oid = c.relnamespace
1914
+ where n.nspname = 'workflow' and c.relkind = 'r'
1915
+ loop
1916
+ execute format('alter table workflow.%I enable row level security', t.relname);
1917
+ execute format('revoke all on workflow.%I from public, anon, authenticated', t.relname);
1918
+ execute format('grant all on workflow.%I to service_role', t.relname);
1919
+ end loop;
1920
+ end;
1921
+ $$;
1922
+ grant usage, select on all sequences in schema workflow to service_role;
1923
+ create index if not exists workflow_runs_attributes_idx on workflow.workflow_runs using gin (attributes jsonb_path_ops);
1924
+
1925
+ -- Copies each World run into workflow_runs: its tenant and actor come from
1926
+ -- the bs.tenant and bs.actor attributes that startFor sets. A run with an
1927
+ -- actor keeps its tenant only when the actor holds workflow.run there; a
1928
+ -- run without one, or one with bs.principal_kind (a runAs start, whose
1929
+ -- actor is the user who triggered it), was started by the server, which is
1930
+ -- trusted. bs.subject
1931
+ -- (type/id), bs.principal_kind, bs.principal, bs.mode and bs.trigger_node
1932
+ -- fill the run's subject, principal, mode and trigger node.
1933
+ create or replace function ${fn("workflow_sdk_mirror_run")}()
1934
+ returns trigger
1935
+ language plpgsql
1936
+ security definer
1937
+ set search_path = ''
1938
+ as $$
1939
+ declare
1940
+ v_tenant ${id};
1941
+ v_actor uuid;
1942
+ v_subject text;
1943
+ v_subject_type text;
1944
+ v_subject_id text;
1945
+ v_principal_kind text;
1946
+ v_mode text;
1947
+ begin
1948
+ begin
1949
+ v_tenant := (new.attributes ->> 'bs.tenant')::${id};
1950
+ exception when others then
1951
+ v_tenant := null;
1952
+ end;
1953
+ begin
1954
+ v_actor := (new.attributes ->> 'bs.actor')::uuid;
1955
+ exception when others then
1956
+ v_actor := null;
1957
+ end;
1958
+ v_principal_kind := new.attributes ->> 'bs.principal_kind';
1959
+ if v_principal_kind is not null and v_principal_kind not in (${PRINCIPAL_KINDS}) then
1960
+ v_principal_kind := null;
1961
+ end if;
1962
+ if v_tenant is not null and v_actor is not null and v_principal_kind is null
1963
+ and not ${ctx.scope.canUser("v_actor", "v_tenant", runKey)} then
1964
+ v_tenant := null;
1965
+ end if;
1966
+ v_subject := new.attributes ->> 'bs.subject';
1967
+ if v_subject is not null and position('/' in v_subject) between 2 and 101
1968
+ and length(v_subject) - position('/' in v_subject) between 1 and 200 then
1969
+ v_subject_type := left(v_subject, position('/' in v_subject) - 1);
1970
+ v_subject_id := substr(v_subject, position('/' in v_subject) + 1);
1971
+ end if;
1972
+ v_mode := case when new.attributes ->> 'bs.mode' = 'test' then 'test' else 'live' end;
1973
+ perform ${record}(
1974
+ 'workflow-sdk',
1975
+ new.id,
1976
+ new.name,
1977
+ case new.status::text when 'pending' then 'queued' else new.status::text end,
1978
+ v_tenant,
1979
+ v_actor,
1980
+ coalesce(new.attributes, '{}'::jsonb) - 'bs.tenant' - 'bs.actor' - 'bs.subject' - 'bs.principal_kind' - 'bs.principal' - 'bs.mode' - 'bs.trigger_node',
1981
+ case when new.status::text = 'failed' then coalesce(new.error_code, left(new.error, 4000)) end,
1982
+ new.started_at at time zone 'UTC',
1983
+ new.completed_at at time zone 'UTC',
1984
+ v_subject_type,
1985
+ v_subject_id,
1986
+ v_principal_kind,
1987
+ case when v_principal_kind is null then null else nullif(left(new.attributes ->> 'bs.principal', 200), '') end,
1988
+ v_mode,
1989
+ nullif(left(new.attributes ->> 'bs.trigger_node', 100), '')
1990
+ );
1991
+ return null;
1992
+ end;
1993
+ $$;
1994
+ revoke execute on function ${fn("workflow_sdk_mirror_run")}() from public, anon, authenticated;
1995
+ drop trigger if exists ${mirror} on workflow.workflow_runs;
1996
+ create trigger ${mirror} after insert or update of status, attributes, error on workflow.workflow_runs
1997
+ for each row execute function ${fn("workflow_sdk_mirror_run")}();
1998
+
1999
+ -- pg_net delivery: posts up to batch due messages to the flow route in the
2000
+ -- Vault secret ${WORKFLOW_VAULT_SECRETS.flowUrl}, signed with ${WORKFLOW_VAULT_SECRETS.deliverySecret}
2001
+ -- (x-bs-signature: t=<unix>,v1=hex(hmac_sha256(t.job.body))). The body is
2002
+ -- the stored message; the route completes or fails the job, so a delivery
2003
+ -- whose response is lost runs again after the lease.
2004
+ create or replace function ${fn("dispatch_workflow_deliveries")}(batch integer default ${String(batch)})
2005
+ returns integer
2006
+ language plpgsql
2007
+ security definer
2008
+ set search_path = ''
2009
+ as $$
2010
+ declare
2011
+ v_url text;
2012
+ v_secret text;
2013
+ v_job record;
2014
+ v_body jsonb;
2015
+ v_t text;
2016
+ v_job_header text;
2017
+ v_count integer := 0;
2018
+ -- pg_net is optional: http_post is looked up, not named, so plpgsql_check
2019
+ -- (supabase db lint) passes without the extension.
2020
+ v_post regprocedure := pg_catalog.to_regprocedure('net.http_post(text, jsonb, jsonb, jsonb, integer)');
2021
+ begin
2022
+ if v_post is null then
2023
+ raise exception 'dispatch_workflow_deliveries needs pg_net: create extension pg_net, or deliver with the poll mode';
2024
+ end if;
2025
+ select ds.decrypted_secret into v_url from vault.decrypted_secrets ds where ds.name = ${sqlString(WORKFLOW_VAULT_SECRETS.flowUrl)};
2026
+ select ds.decrypted_secret into v_secret from vault.decrypted_secrets ds where ds.name = ${sqlString(WORKFLOW_VAULT_SECRETS.deliverySecret)};
2027
+ if v_url is null or v_secret is null then
2028
+ raise exception 'Set the Vault secrets ${WORKFLOW_VAULT_SECRETS.flowUrl} and ${WORKFLOW_VAULT_SECRETS.deliverySecret} before dispatching' using hint = 'WORKFLOW_DELIVERY_UNCONFIGURED';
2029
+ end if;
2030
+ for v_job in select * from ${claimJobs}(${queue}, ${String(lease)}, greatest(coalesce(batch, ${String(batch)}), 1)) loop
2031
+ v_body := coalesce(v_job.message -> 'payload', '{}'::jsonb);
2032
+ v_t := floor(extract(epoch from now()))::bigint::text;
2033
+ v_job_header := ${queue} || ':' || v_job.id::text || ':' || v_job.attempts::text;
2034
+ execute format('select %s(url := $1, body := $2, headers := $3, timeout_milliseconds := $4)', v_post::oid::regproc)
2035
+ using v_url, v_body, jsonb_build_object(
2036
+ 'content-type', 'application/json',
2037
+ 'x-bs-job', v_job_header,
2038
+ 'x-bs-signature', 't=' || v_t || ',v1=' || encode(extensions.hmac(v_t || '.' || v_job_header || '.' || v_body::text, v_secret, 'sha256'), 'hex')
2039
+ ), ${String(timeout)};
2040
+ v_count := v_count + 1;
2041
+ end loop;
2042
+ return v_count;
2043
+ end;
2044
+ $$;
2045
+ revoke execute on function ${fn("dispatch_workflow_deliveries")}(integer) from public, anon, authenticated;
2046
+ grant execute on function ${fn("dispatch_workflow_deliveries")}(integer) to service_role;`;
2047
+ }
2048
+ function data(ctx) {
2049
+ if (ctx.mode === "custom" || deliveryModeOf(ctx) !== "pg_net") return "";
2050
+ const schedule = ctx.text("schedule", "1 seconds");
2051
+ return `-- Delivers workflow messages through pg_net every ${schedule} when pg_cron is installed.
2052
+ do $$
2053
+ begin
2054
+ if pg_catalog.to_regnamespace('cron') is not null then
2055
+ perform cron.schedule('better-supabase-workflow-deliveries', ${sqlString(schedule)}, ${sqlString(`select ${ctx.fn("dispatch_workflow_deliveries")}()`)});
2056
+ else
2057
+ raise notice 'pg_cron is not installed: call ${ctx.fn("dispatch_workflow_deliveries").replaceAll("'", "")}() on a schedule to deliver workflow messages';
2058
+ end if;
2059
+ end;
2060
+ $$;`;
2061
+ }
2062
+ function contract() {
2063
+ return [{
2064
+ name: "dispatch_workflow_deliveries",
2065
+ args: ["integer"],
2066
+ returns: "integer"
2067
+ }];
2068
+ }
2069
+ const WORKFLOW_SDK_WORLD = {
2070
+ name: "workflow-sdk-world",
2071
+ scopes: ["tenant"],
2072
+ title: "Workflow SDK World",
2073
+ description: `The tables of the Workflow SDK World (@workflow/world-postgres ${WORLD_POSTGRES_VERSION}) in the workflow schema, closed to the API roles; a trigger that copies each run into workflow_runs, and a pg_net dispatcher for the delivery queue on a pg_cron schedule.`,
2074
+ requires: [
2075
+ "workflows",
2076
+ "jobs",
2077
+ "access"
2078
+ ],
2079
+ providerFunctions: ["idsWithFor"],
2080
+ target: "schema",
2081
+ modes: ["managed", "custom"],
2082
+ version: 2,
2083
+ upgrades: [{
2084
+ from: 1,
2085
+ description: "The run trigger fills subject, principal, mode and trigger node from the bs.subject, bs.principal_kind, bs.principal, bs.mode and bs.trigger_node attributes, and a runAs start keeps bs.actor as the user who triggered it.",
2086
+ sql: () => ""
2087
+ }],
2088
+ names: {
2089
+ tables: {},
2090
+ options: [
2091
+ "delivery",
2092
+ "queue",
2093
+ "batch",
2094
+ "timeout",
2095
+ "schedule"
2096
+ ]
2097
+ },
2098
+ contract,
2099
+ build,
2100
+ data
2101
+ };
2102
+ //#endregion
2103
+ export { renameSql as $, columnsObject as A, jsonSchemaChecks as B, accessDefinesDisabledHelpers as C, addForeignKey as D, addExtraColumns as E, dropExpiredPartitions as F, membershipSuspended as G, lockTable as H, ensureCheck as I, pageSize as J, organizationMissing as K, extraFieldsArg as L, defaultPartitionName as M, disabledHelpers as N, batchFunction as O, disabledHelpersNeedLaterTables as P, registerPartitions as Q, extraFieldsJson as R, SERVICE_CALLER as S, addCheck as T, memberAddedRecord as U, jwtClaim as V, membershipDisabledAt as W, raise as X, quotedTable as Y, recordTrigger as Z, EQUIVALENT_TRIGGERS as _, MODULE_PERMISSION_SCOPES as a, sha256Hex as at, PARTITION_VARIABLES as b, hasPlatformRoles as c, updatedAt as ct, modulePermissionKey as d, writeExtraColumns as dt, replaceColumnCheck as et, providerPlatformRoles as f, tenantScope as g, rolesOf as h, WORLD_POSTGRES_VERSION as i, serviceOnly as it, defaultPartition as j, columnRef as k, moduleOperations as l, userGrant as lt, roleScopeIs as m, WORKFLOW_SDK_WORLD as n, schemaPreamble as nt, OPERATIONS as o, splitTable as ot, roleNames as p, ownRowPolicies as q, WORKFLOW_VAULT_SECRETS as r, serviceGrant as rt, accessModel as s, triggerGrant as st, WORKFLOW_DELIVERY_QUEUE as t, revokeTable as tt, modulePermission as u, withExtraFields as ut, MONTHLY_PARTITIONS as v, activeMembership as w, SCHEMA as x, NOTHING as y, fail as z };