better-supabase 0.14.0 → 0.15.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 (1640) hide show
  1. package/README.md +67 -377
  2. package/dist/access-sql-B-MkVARa.js +207 -0
  3. package/dist/actor-go7p9-CJ.js +150 -0
  4. package/dist/adapter-B0b6MXYS.js +2299 -0
  5. package/dist/agents-5n8DWRfP.d.ts +117 -0
  6. package/dist/ai-cache-Cu8j6aQQ.js +87 -0
  7. package/dist/ai-cache-DyHohbFP.d.ts +82 -0
  8. package/dist/ai-chat-D1GuRnke.d.ts +619 -0
  9. package/dist/ai-files-CgFCRsnU.js +339 -0
  10. package/dist/ai-schedules-CAquecT_.d.ts +166 -0
  11. package/dist/ai-sdk/agents/index.d.ts +6 -6
  12. package/dist/ai-sdk/agents/index.js +2 -2
  13. package/dist/ai-sdk/batches/index.d.ts +5 -5
  14. package/dist/ai-sdk/batches/index.js +4 -4
  15. package/dist/ai-sdk/cache/index.d.ts +3 -3
  16. package/dist/ai-sdk/cache/index.js +2 -2
  17. package/dist/ai-sdk/chat/index.d.ts +1 -1
  18. package/dist/ai-sdk/chat/index.js +5 -5
  19. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  20. package/dist/ai-sdk/files/index.d.ts +2 -2
  21. package/dist/ai-sdk/files/index.js +5 -5
  22. package/dist/ai-sdk/index.d.ts +10 -10
  23. package/dist/ai-sdk/index.js +3 -3
  24. package/dist/ai-sdk/mcp/index.d.ts +4 -4
  25. package/dist/ai-sdk/mcp/index.js +6 -6
  26. package/dist/ai-sdk/memory/index.d.ts +3 -3
  27. package/dist/ai-sdk/memory/index.js +1 -1
  28. package/dist/ai-sdk/workflow/index.d.ts +4 -4
  29. package/dist/ai-sdk/workflow/index.js +7 -7
  30. package/dist/api-DxAPqMrE.d.ts +495 -0
  31. package/dist/api-keys-D5k63K6y.d.ts +213 -0
  32. package/dist/app-tables-CF2DD-Mu.d.ts +28 -0
  33. package/dist/app-tables-D29Rahtg.js +16350 -0
  34. package/dist/approvals-Crutd4-o.d.ts +129 -0
  35. package/dist/assistant-CD_h8Vxx.d.ts +157 -0
  36. package/dist/astro/index.d.ts +12 -12
  37. package/dist/astro/index.js +8 -8
  38. package/dist/attachments-aJYgdYtB.js +369 -0
  39. package/dist/attributes-Bzf51_nc.js +47 -0
  40. package/dist/auth-reply-tlXB2FQ9.js +31 -0
  41. package/dist/authorization-HZdJCaVm.d.ts +3595 -0
  42. package/dist/authorization-hooks-Cs1vP_ej.d.ts +217 -0
  43. package/dist/authorizer-B6X09otb.d.ts +118 -0
  44. package/dist/authorizer-BGhXaDmo.js +172 -0
  45. package/dist/automation-D41DXyvT.js +75 -0
  46. package/dist/automations-BYsz43AG.js +314 -0
  47. package/dist/automations-Bc2ue55V.js +26 -0
  48. package/dist/automations-CD1XlL2W.js +33 -0
  49. package/dist/automations-CIwRq7zm.js +30 -0
  50. package/dist/availability-vguUvEK2.d.ts +226 -0
  51. package/dist/better-result/index.d.ts +20 -30
  52. package/dist/better-result/index.js +2 -2
  53. package/dist/bind-CrMBwrPN.d.ts +104 -0
  54. package/dist/block-authors-BDV3y1SP.js +14 -0
  55. package/dist/block-env-B_uEM2xz.d.ts +32 -0
  56. package/dist/block-fields-BE7pInWZ.d.ts +58 -0
  57. package/dist/block-fields-DE_FgpOU.js +139 -0
  58. package/dist/block-helpers-CRpAHrp_.d.ts +62 -0
  59. package/dist/block-helpers-CtBdjgO4.js +353 -0
  60. package/dist/block-hooks-BfxX3682.js +130 -0
  61. package/dist/block-hooks-DZN2w69m.d.ts +117 -0
  62. package/dist/block-method-C9hWdHom.js +21 -0
  63. package/dist/block-method-CiVa2G-J.d.ts +14 -0
  64. package/dist/block-subjects-BhDKK_j7.js +55 -0
  65. package/dist/block-subjects-CphkQPxp.d.ts +6 -0
  66. package/dist/block-tenant-DHp7subc.js +14 -0
  67. package/dist/block-transport-DWZSJrwN.d.ts +69 -0
  68. package/dist/blocks/access-requests/index.d.ts +8 -8
  69. package/dist/blocks/access-requests/index.js +6 -6
  70. package/dist/blocks/activities/index.d.ts +215 -0
  71. package/dist/blocks/activities/index.js +414 -0
  72. package/dist/blocks/agents/index.d.ts +4 -4
  73. package/dist/blocks/agents/index.js +5 -5
  74. package/dist/blocks/ai-cache/index.d.ts +3 -3
  75. package/dist/blocks/ai-cache/index.js +3 -3
  76. package/dist/blocks/ai-chat/index.d.ts +119 -6
  77. package/dist/blocks/ai-chat/index.js +1067 -5
  78. package/dist/blocks/ai-files/index.d.ts +5 -5
  79. package/dist/blocks/ai-files/index.js +3 -3
  80. package/dist/blocks/ai-keys/index.d.ts +22 -0
  81. package/dist/blocks/ai-keys/index.js +236 -0
  82. package/dist/blocks/ai-schedules/index.d.ts +10 -0
  83. package/dist/blocks/ai-schedules/index.js +258 -0
  84. package/dist/blocks/announcements/index.d.ts +134 -5
  85. package/dist/blocks/announcements/index.js +179 -4
  86. package/dist/blocks/api-keys/index.d.ts +69 -8
  87. package/dist/blocks/api-keys/index.js +417 -7
  88. package/dist/blocks/approvals/index.d.ts +4 -4
  89. package/dist/blocks/approvals/index.js +10 -10
  90. package/dist/blocks/assets/index.d.ts +11 -13
  91. package/dist/blocks/assets/index.js +10 -10
  92. package/dist/blocks/assignment/index.d.ts +8 -8
  93. package/dist/blocks/assignment/index.js +5 -5
  94. package/dist/blocks/attachments/index.d.ts +97 -12
  95. package/dist/blocks/attachments/index.js +279 -47
  96. package/dist/blocks/audit/index.d.ts +476 -7
  97. package/dist/blocks/audit/index.js +863 -6
  98. package/dist/blocks/automations/index.d.ts +524 -0
  99. package/dist/blocks/automations/index.js +553 -0
  100. package/dist/blocks/billable-time/index.d.ts +22 -24
  101. package/dist/blocks/billable-time/index.js +13 -13
  102. package/dist/blocks/billing/index.d.ts +82 -11
  103. package/dist/blocks/billing/index.js +93 -9
  104. package/dist/blocks/bookings/index.d.ts +49 -7
  105. package/dist/blocks/bookings/index.js +419 -4
  106. package/dist/blocks/bulk/index.d.ts +6 -6
  107. package/dist/blocks/bulk/index.js +4 -4
  108. package/dist/blocks/calendar/index.d.ts +180 -7
  109. package/dist/blocks/calendar/index.js +1073 -5
  110. package/dist/blocks/catalog/index.d.ts +128 -13
  111. package/dist/blocks/catalog/index.js +149 -13
  112. package/dist/blocks/channels/index.d.ts +15 -13
  113. package/dist/blocks/channels/index.js +12 -13
  114. package/dist/blocks/collections/index.d.ts +16 -16
  115. package/dist/blocks/collections/index.js +8 -8
  116. package/dist/blocks/comments/index.d.ts +231 -14
  117. package/dist/blocks/comments/index.js +260 -13
  118. package/dist/blocks/compliance/index.d.ts +325 -0
  119. package/dist/blocks/compliance/index.js +410 -0
  120. package/dist/blocks/connectors/index.d.ts +4 -4
  121. package/dist/blocks/connectors/index.js +8 -8
  122. package/dist/blocks/contacts/index.d.ts +182 -0
  123. package/dist/blocks/contacts/index.js +358 -0
  124. package/dist/blocks/content/index.d.ts +188 -0
  125. package/dist/blocks/content/index.js +219 -0
  126. package/dist/blocks/contracts/index.d.ts +16 -18
  127. package/dist/blocks/contracts/index.js +24 -24
  128. package/dist/blocks/courses/index.d.ts +17 -17
  129. package/dist/blocks/courses/index.js +13 -13
  130. package/dist/blocks/created-by/index.d.ts +27 -0
  131. package/dist/blocks/created-by/index.js +14 -0
  132. package/dist/blocks/custom-fields/index.d.ts +11 -11
  133. package/dist/blocks/custom-fields/index.js +7 -7
  134. package/dist/blocks/data-lifecycle/index.d.ts +9 -9
  135. package/dist/blocks/data-lifecycle/index.js +7 -7
  136. package/dist/blocks/deals/index.d.ts +10 -10
  137. package/dist/blocks/deals/index.js +11 -11
  138. package/dist/blocks/dispatch/index.d.ts +20 -22
  139. package/dist/blocks/dispatch/index.js +17 -17
  140. package/dist/blocks/documents/index.d.ts +4 -4
  141. package/dist/blocks/documents/index.js +4 -4
  142. package/dist/blocks/domains/index.d.ts +7 -7
  143. package/dist/blocks/domains/index.js +6 -6
  144. package/dist/blocks/donations/index.d.ts +27 -29
  145. package/dist/blocks/donations/index.js +36 -28
  146. package/dist/blocks/drive/index.d.ts +10 -10
  147. package/dist/blocks/drive/index.js +8 -8
  148. package/dist/blocks/employees/index.d.ts +204 -7
  149. package/dist/blocks/employees/index.js +36 -10
  150. package/dist/blocks/enrichment/index.d.ts +7 -7
  151. package/dist/blocks/enrichment/index.js +14 -6
  152. package/dist/blocks/enrollments/index.d.ts +14 -16
  153. package/dist/blocks/enrollments/index.js +10 -10
  154. package/dist/blocks/entitlements/index.d.ts +48 -8
  155. package/dist/blocks/entitlements/index.js +62 -4
  156. package/dist/blocks/expenses/index.d.ts +8 -8
  157. package/dist/blocks/expenses/index.js +11 -11
  158. package/dist/blocks/field-history/index.d.ts +5 -5
  159. package/dist/blocks/field-history/index.js +3 -5
  160. package/dist/blocks/flags/index.d.ts +17 -13
  161. package/dist/blocks/flags/index.js +7 -7
  162. package/dist/blocks/forecasts/index.d.ts +7 -7
  163. package/dist/blocks/forecasts/index.js +7 -7
  164. package/dist/blocks/forms/index.d.ts +144 -12
  165. package/dist/blocks/forms/index.js +385 -7
  166. package/dist/blocks/goals/index.d.ts +82 -0
  167. package/dist/blocks/goals/index.js +72 -0
  168. package/dist/blocks/guests/index.d.ts +19 -21
  169. package/dist/blocks/guests/index.js +12 -12
  170. package/dist/blocks/hiring/index.d.ts +20 -10
  171. package/dist/blocks/hiring/index.js +10 -9
  172. package/dist/blocks/identities/index.d.ts +7 -7
  173. package/dist/blocks/identities/index.js +4 -4
  174. package/dist/blocks/imports/index.d.ts +8 -8
  175. package/dist/blocks/imports/index.js +6 -6
  176. package/dist/blocks/inbox/index.d.ts +137 -8
  177. package/dist/blocks/inbox/index.js +290 -56
  178. package/dist/blocks/incidents/index.d.ts +8 -8
  179. package/dist/blocks/incidents/index.js +7 -7
  180. package/dist/blocks/index.d.ts +37 -18
  181. package/dist/blocks/index.js +40 -19
  182. package/dist/blocks/inventory/index.d.ts +10 -10
  183. package/dist/blocks/inventory/index.js +6 -6
  184. package/dist/blocks/invoices/index.d.ts +11 -11
  185. package/dist/blocks/invoices/index.js +8 -8
  186. package/dist/blocks/knowledge/index.d.ts +3 -3
  187. package/dist/blocks/knowledge/index.js +4 -4
  188. package/dist/blocks/lead-scoring/index.d.ts +11 -11
  189. package/dist/blocks/lead-scoring/index.js +7 -7
  190. package/dist/blocks/leases/index.d.ts +16 -73
  191. package/dist/blocks/leases/index.js +29 -104
  192. package/dist/blocks/leave/index.d.ts +8 -8
  193. package/dist/blocks/leave/index.js +5 -5
  194. package/dist/blocks/ledger/index.d.ts +11 -13
  195. package/dist/blocks/ledger/index.js +10 -10
  196. package/dist/blocks/mail-sync/index.d.ts +6 -6
  197. package/dist/blocks/mail-sync/index.js +18 -10
  198. package/dist/blocks/memberships/index.d.ts +67 -0
  199. package/dist/blocks/memberships/index.js +14 -0
  200. package/dist/blocks/memory/index.d.ts +4 -4
  201. package/dist/blocks/memory/index.js +8 -8
  202. package/dist/blocks/messaging/index.d.ts +113 -13
  203. package/dist/blocks/messaging/index.js +579 -8
  204. package/dist/blocks/metrics/index.d.ts +7 -7
  205. package/dist/blocks/metrics/index.js +6 -6
  206. package/dist/blocks/mfa/index.d.ts +145 -3
  207. package/dist/blocks/mfa/index.js +211 -2
  208. package/dist/blocks/moderation/index.d.ts +13 -15
  209. package/dist/blocks/moderation/index.js +10 -10
  210. package/dist/blocks/notifications/index.d.ts +67 -15
  211. package/dist/blocks/notifications/index.js +62 -13
  212. package/dist/blocks/numbering/index.d.ts +45 -0
  213. package/dist/blocks/numbering/index.js +49 -0
  214. package/dist/blocks/oauth-server/index.d.ts +6 -6
  215. package/dist/blocks/oauth-server/index.js +6 -6
  216. package/dist/blocks/onboarding/index.d.ts +112 -4
  217. package/dist/blocks/onboarding/index.js +107 -4
  218. package/dist/blocks/orders/index.d.ts +35 -14
  219. package/dist/blocks/orders/index.js +49 -12
  220. package/dist/blocks/organizations/index.d.ts +452 -6
  221. package/dist/blocks/organizations/index.js +689 -5
  222. package/dist/blocks/outbox/index.d.ts +4 -4
  223. package/dist/blocks/outbox/index.js +19 -6
  224. package/dist/blocks/passes/index.d.ts +19 -21
  225. package/dist/blocks/passes/index.js +17 -17
  226. package/dist/blocks/permissions/index.d.ts +92 -0
  227. package/dist/blocks/permissions/index.js +127 -0
  228. package/dist/blocks/pipelines/index.d.ts +15 -15
  229. package/dist/blocks/pipelines/index.js +12 -12
  230. package/dist/blocks/posts/index.d.ts +9 -9
  231. package/dist/blocks/posts/index.js +8 -8
  232. package/dist/blocks/profiles/index.d.ts +7 -7
  233. package/dist/blocks/profiles/index.js +5 -5
  234. package/dist/blocks/promotions/index.d.ts +9 -9
  235. package/dist/blocks/promotions/index.js +7 -7
  236. package/dist/blocks/push/index.d.ts +9 -9
  237. package/dist/blocks/push/index.js +4 -4
  238. package/dist/blocks/queue/index.d.ts +562 -0
  239. package/dist/blocks/queue/index.js +1407 -0
  240. package/dist/blocks/quotes/index.d.ts +29 -14
  241. package/dist/blocks/quotes/index.js +14 -13
  242. package/dist/blocks/rank/index.d.ts +7 -7
  243. package/dist/blocks/rank/index.js +4 -4
  244. package/dist/blocks/reactions/index.d.ts +154 -5
  245. package/dist/blocks/reactions/index.js +168 -4
  246. package/dist/blocks/relations/index.d.ts +36 -38
  247. package/dist/blocks/relations/index.js +18 -18
  248. package/dist/blocks/reminders/index.d.ts +16 -16
  249. package/dist/blocks/reminders/index.js +14 -14
  250. package/dist/blocks/reviews/index.d.ts +8 -8
  251. package/dist/blocks/reviews/index.js +6 -6
  252. package/dist/blocks/saved-views/index.d.ts +311 -4
  253. package/dist/blocks/saved-views/index.js +437 -2
  254. package/dist/blocks/scores/index.d.ts +8 -10
  255. package/dist/blocks/scores/index.js +10 -10
  256. package/dist/blocks/search/index.d.ts +168 -5
  257. package/dist/blocks/search/index.js +277 -5
  258. package/dist/blocks/security-events/index.d.ts +440 -0
  259. package/dist/blocks/security-events/index.js +885 -0
  260. package/dist/blocks/segments/index.d.ts +13 -13
  261. package/dist/blocks/segments/index.js +7 -7
  262. package/dist/blocks/sequences/index.d.ts +13 -13
  263. package/dist/blocks/sequences/index.js +16 -10
  264. package/dist/blocks/service-accounts/index.d.ts +132 -0
  265. package/dist/blocks/service-accounts/index.js +109 -0
  266. package/dist/blocks/sessions/index.d.ts +138 -3
  267. package/dist/blocks/sessions/index.js +173 -2
  268. package/dist/blocks/settings/index.d.ts +181 -5
  269. package/dist/blocks/settings/index.js +226 -4
  270. package/dist/blocks/share-links/index.d.ts +20 -22
  271. package/dist/blocks/share-links/index.js +16 -16
  272. package/dist/blocks/shipments/index.d.ts +23 -25
  273. package/dist/blocks/shipments/index.js +30 -22
  274. package/dist/blocks/signatures/index.d.ts +9 -9
  275. package/dist/blocks/signatures/index.js +5 -5
  276. package/dist/blocks/signing-keys/index.d.ts +4 -4
  277. package/dist/blocks/signing-keys/index.js +3 -3
  278. package/dist/blocks/sla/index.d.ts +20 -22
  279. package/dist/blocks/sla/index.js +22 -16
  280. package/dist/blocks/sso/index.d.ts +7 -7
  281. package/dist/blocks/sso/index.js +4 -4
  282. package/dist/blocks/state-machine/index.d.ts +14 -14
  283. package/dist/blocks/state-machine/index.js +4 -4
  284. package/dist/blocks/subjects/index.d.ts +41 -7
  285. package/dist/blocks/subjects/index.js +187 -5
  286. package/dist/blocks/tags/index.d.ts +146 -13
  287. package/dist/blocks/tags/index.js +229 -14
  288. package/dist/blocks/tasks/index.d.ts +346 -0
  289. package/dist/blocks/tasks/index.js +626 -0
  290. package/dist/blocks/teams/index.d.ts +7 -7
  291. package/dist/blocks/teams/index.js +4 -4
  292. package/dist/blocks/templates/index.d.ts +18 -18
  293. package/dist/blocks/templates/index.js +10 -10
  294. package/dist/blocks/time-tracking/index.d.ts +16 -16
  295. package/dist/blocks/time-tracking/index.js +13 -13
  296. package/dist/blocks/timeline/index.d.ts +116 -0
  297. package/dist/blocks/timeline/index.js +164 -0
  298. package/dist/blocks/trash/index.d.ts +47 -9
  299. package/dist/blocks/trash/index.js +9 -7
  300. package/dist/blocks/undo/index.d.ts +48 -5
  301. package/dist/blocks/undo/index.js +60 -4
  302. package/dist/blocks/updated-at/index.d.ts +20 -0
  303. package/dist/blocks/updated-at/index.js +14 -0
  304. package/dist/blocks/usage/index.d.ts +39 -5
  305. package/dist/blocks/usage/index.js +301 -4
  306. package/dist/blocks/vercel-marketplace/index.d.ts +7 -7
  307. package/dist/blocks/vercel-marketplace/index.js +8 -8
  308. package/dist/blocks/versions/index.d.ts +20 -22
  309. package/dist/blocks/versions/index.js +16 -16
  310. package/dist/blocks/waitlist/index.d.ts +9 -9
  311. package/dist/blocks/waitlist/index.js +5 -5
  312. package/dist/blocks/webhooks/index.d.ts +21 -21
  313. package/dist/blocks/webhooks/index.js +16 -16
  314. package/dist/blocks/workflow-editor/index.d.ts +99 -0
  315. package/dist/blocks/workflow-editor/index.js +733 -0
  316. package/dist/blocks/workflows/index.d.ts +72 -6
  317. package/dist/blocks/workflows/index.js +379 -4
  318. package/dist/bookings-D4dvGXiR.d.ts +290 -0
  319. package/dist/bucket-CiNi8sIw.d.ts +666 -0
  320. package/dist/build-BFC8nFiL.js +797 -0
  321. package/dist/build-QitPVzzO.js +2073 -0
  322. package/dist/carrier-KzeYXVrW.d.ts +169 -0
  323. package/dist/chat-sdk/index.d.ts +8 -8
  324. package/dist/chat-sdk/index.js +3 -3
  325. package/dist/claims-DTy6R6my.js +63 -0
  326. package/dist/cli/add-BgsUjCan.js +1252 -0
  327. package/dist/cli/add-DCI5JKjA.js +99 -0
  328. package/dist/cli/add-DWjlVwvP.js +1 -0
  329. package/dist/cli/args-UEwg0l-N.js +27 -0
  330. package/dist/cli/backfill-nxPbcsns.js +293 -0
  331. package/dist/cli/bin.js +1 -1
  332. package/dist/cli/blocks-BZHI8mRC.js +156 -0
  333. package/dist/cli/blocks-Cr4HGePW.js +1 -0
  334. package/dist/cli/cache-CXgR_Ahi.js +607 -0
  335. package/dist/cli/codemod-DSN7iAdg.js +2343 -0
  336. package/dist/cli/codemod-block-renames-BuSaTE_G.js +239 -0
  337. package/dist/cli/command-CQ61x6gN.js +941 -0
  338. package/dist/cli/completion-2Y3D_eNu.js +211 -0
  339. package/dist/cli/completion-BwI0_Ap5.js +30 -0
  340. package/dist/cli/completion-Dlu5AdUW.js +1 -0
  341. package/dist/cli/config-9t5ec_N7.js +1642 -0
  342. package/dist/cli/config-CBqkQjjN.js +1 -0
  343. package/dist/cli/config-CPux9Wa7.js +47 -0
  344. package/dist/cli/config-edit-CrWfk8s3.js +621 -0
  345. package/dist/cli/config-group-C8tjut39.js +391 -0
  346. package/dist/cli/content-mapper-DNs7lTu7.js +182 -0
  347. package/dist/cli/db-DrBI_HNv.js +223 -0
  348. package/dist/cli/detect-D9JaAX20.js +84 -0
  349. package/dist/cli/dist-D_VbPAMR.js +129 -0
  350. package/dist/cli/doctor-DDrEM6S1.js +4561 -0
  351. package/dist/cli/env-BBl5L8Bf.js +143 -0
  352. package/dist/cli/env-CAU1nknN.js +1 -0
  353. package/dist/cli/files-CX71yBm8.js +1010 -0
  354. package/dist/cli/gen-MtijJQ9r.js +387 -0
  355. package/dist/cli/in-stack-diff-DQTW53Vf.js +257 -0
  356. package/dist/cli/index.d.ts +43 -8
  357. package/dist/cli/index.js +8 -8
  358. package/dist/cli/init-D-aDv9r5.js +440 -0
  359. package/dist/cli/keys-DGEpMbeB.js +106 -0
  360. package/dist/cli/live-iEeH15ck.js +341 -0
  361. package/dist/cli/mcp-BAPyaQ62.js +249 -0
  362. package/dist/cli/metadata-DVx9Zgbj.js +150 -0
  363. package/dist/cli/migration-safety-D7PhzFxm.js +928 -0
  364. package/dist/cli/module-migration-aPCckev6.js +734 -0
  365. package/dist/cli/moved-CsfDQcyk.js +254 -0
  366. package/dist/cli/orphans-BAboqyVM.js +28 -0
  367. package/dist/cli/parse-B9Iv_-Pf.js +182 -0
  368. package/dist/cli/preset-BwmIfFnh.js +101 -0
  369. package/dist/cli/print-BeWO7OJY.js +67 -0
  370. package/dist/cli/remove-B46Dmd2M.js +238 -0
  371. package/dist/cli/render-ucJmUyuM.js +2170 -0
  372. package/dist/cli/run-BXx6D1aR.js +63 -0
  373. package/dist/cli/run-CvYVAztY.js +1427 -0
  374. package/dist/cli/run-DYhLBcFW.js +702 -0
  375. package/dist/cli/seed-Cz8PcXeT.js +188 -0
  376. package/dist/cli/seed-D6XijwbR.js +1 -0
  377. package/dist/cli/shared-LZroULBe.js +151 -0
  378. package/dist/cli/skills-toUan_OV.js +121 -0
  379. package/dist/cli/snapshot-C8MVPyO8.js +729 -0
  380. package/dist/cli/source-DANaJJVc.js +320 -0
  381. package/dist/cli/source-args-IpJRJO5t.js +59 -0
  382. package/dist/cli/spec-DGVNMSSB.js +7530 -0
  383. package/dist/cli/spec-g8_G5K7o.js +1 -0
  384. package/dist/cli/stack-CWEHdO0b.js +135 -0
  385. package/dist/cli/sync-btj01bcM.js +319 -0
  386. package/dist/cli/upgrade-B596d4t8.js +403 -0
  387. package/dist/cli/upgrade-Dw3TMQzn.js +41 -0
  388. package/dist/cli/version-Du4CgONY.js +4 -0
  389. package/dist/client/index.d.ts +8 -7
  390. package/dist/client/index.js +9 -7
  391. package/dist/client/native/index.d.ts +6 -6
  392. package/dist/client/native/index.js +3 -3
  393. package/dist/client-BAEbEA7t.js +287 -0
  394. package/dist/cloud-event-CzZTJkXv.d.ts +64 -0
  395. package/dist/codecs-CMWlhHZ0.d.ts +222 -0
  396. package/dist/codecs-TylXqU_I.js +358 -0
  397. package/dist/commerce/index.d.ts +3 -3
  398. package/dist/commerce/index.js +6 -6
  399. package/dist/compiler-D3UmE7ao.d.ts +14 -0
  400. package/dist/compose-DKW0Tr3e.js +53 -0
  401. package/dist/composite-BARuBEDE.js +130 -0
  402. package/dist/composite-Dsxj7T5K.d.ts +82 -0
  403. package/dist/config/index.d.ts +6 -7
  404. package/dist/config/index.js +6 -6
  405. package/dist/config-CcehOvbz.js +1698 -0
  406. package/dist/config-DWGgUQCh.js +1108 -0
  407. package/dist/connectors-Fud4amxp.d.ts +147 -0
  408. package/dist/context-CEuTKrkz.d.ts +4129 -0
  409. package/dist/context-DBicfUNz.js +41 -0
  410. package/dist/controller-BNZKd6bJ.js +73 -0
  411. package/dist/controller-BrP0gn47.d.ts +52 -0
  412. package/dist/conversion-BAbucuXq.d.ts +86 -0
  413. package/dist/conversion-Dq1S7xzE.js +77 -0
  414. package/dist/create/index.d.ts +19 -21
  415. package/dist/create/index.js +21 -22
  416. package/dist/create/lite/index.d.ts +2 -2
  417. package/dist/create/supabase/index.d.ts +2 -2
  418. package/dist/create/supabase/index.js +2 -2
  419. package/dist/create-blocks-Bu4H5TXw.js +352 -0
  420. package/dist/credentials/index.d.ts +5 -5
  421. package/dist/credentials/index.js +6 -6
  422. package/dist/cron-CgHTKwYG.js +148 -0
  423. package/dist/cron-route-UU9i5i9J.js +24 -0
  424. package/dist/data-engine-BWoz9lED.d.ts +273 -0
  425. package/dist/data-engine-D1BkmBoR.js +173 -0
  426. package/dist/data-hooks-tgF1Ct0F.js +280 -0
  427. package/dist/db-blocks-DJGbjIPz.js +62 -0
  428. package/dist/deal-forecast-Bv52QMyX.js +39 -0
  429. package/dist/define-DFBnQyYg.d.ts +1255 -0
  430. package/dist/define-DlUeKHce.js +2011 -0
  431. package/dist/define-block-BGqOO8B3.js +64 -0
  432. package/dist/define-block-BVcLQ3DF.d.ts +1657 -0
  433. package/dist/delegation--93jRsVO.js +146 -0
  434. package/dist/documents-Cup1rpjF.d.ts +152 -0
  435. package/dist/edge/index.d.ts +20 -20
  436. package/dist/edge/index.js +14 -14
  437. package/dist/elysia/index.d.ts +1 -1
  438. package/dist/elysia/index.js +1 -1
  439. package/dist/embeddings-kFbRvuic.d.ts +78 -0
  440. package/dist/ended-gUsMZVNg.d.ts +26 -0
  441. package/dist/entitlements-CJpYQXeE.d.ts +54 -0
  442. package/dist/entitlements-NZAE_vLj.js +45 -0
  443. package/dist/entity-naming-Dtyq5sKE.js +131 -0
  444. package/dist/entity-schema-BDv6w-OQ.js +39 -0
  445. package/dist/envelope-Bzu0JnY2.js +90 -0
  446. package/dist/errors-BVFgt8BZ.js +328 -0
  447. package/dist/errors-CyxMxzlu.js +44 -0
  448. package/dist/escape-like-PReMbEEU.d.ts +30 -0
  449. package/dist/eve/index.d.ts +5 -5
  450. package/dist/eve/index.js +3 -3
  451. package/dist/eve-BFSwTu1z.d.ts +157 -0
  452. package/dist/event-calendar-DCufbihU.d.ts +65 -0
  453. package/dist/events/index.d.ts +3 -4
  454. package/dist/events-vcqenSYU.d.ts +852 -0
  455. package/dist/executor-3qcMhg6R.js +207 -0
  456. package/dist/executor-BQ7dYw4E.js +843 -0
  457. package/dist/executor-CVIn6JHa.d.ts +174 -0
  458. package/dist/executor-D3gB-9si.js +486 -0
  459. package/dist/executor-_2ekNofh.d.ts +104 -0
  460. package/dist/executor-hGjrop3A.d.ts +37 -0
  461. package/dist/expo/index.d.ts +12 -11
  462. package/dist/expo/index.js +11 -10
  463. package/dist/extension-B-lajjex.js +58 -0
  464. package/dist/extension-B0EjCYhO.js +61 -0
  465. package/dist/extension-DeAd_MqI.js +121 -0
  466. package/dist/extension-DzCc0IOd.js +103 -0
  467. package/dist/extension-shared-Djm8mGHD.js +60 -0
  468. package/dist/field-errors-fsbFktYF.d.ts +216 -0
  469. package/dist/field-formats-CAFNkKSN.d.ts +38 -0
  470. package/dist/fields-B0zaJAO3.js +107 -0
  471. package/dist/fields-C3q2ypnO.d.ts +78 -0
  472. package/dist/filter-evaluate-CPxeae5X.d.ts +37 -0
  473. package/dist/filter-evaluate-w1XOIUOL.js +217 -0
  474. package/dist/filter-query-BXLs72G9.d.ts +133 -0
  475. package/dist/filter-query-DMoKo82_.js +566 -0
  476. package/dist/flags-BOdA_ETQ.js +279 -0
  477. package/dist/flags-C01PLMJ-.d.ts +246 -0
  478. package/dist/flags-sdk/index.d.ts +1 -1
  479. package/dist/flags-sdk/index.js +2 -2
  480. package/dist/format-u-65igKI.d.ts +79 -0
  481. package/dist/framework-BKyTeS-j.d.ts +47 -0
  482. package/dist/framework-DDdkR7FX.js +58 -0
  483. package/dist/function-contract-DxFNOmsm.d.ts +27 -0
  484. package/dist/gateway-TD1pRfTP.d.ts +115 -0
  485. package/dist/h3/index.d.ts +2 -4
  486. package/dist/h3/index.js +2 -4
  487. package/dist/h3/v1/index.d.ts +2 -3
  488. package/dist/h3/v1/index.js +2 -3
  489. package/dist/hono/index.d.ts +27 -21
  490. package/dist/hono/index.js +22 -20
  491. package/dist/http-7-UvHjQe.js +28 -0
  492. package/dist/impersonation-DM3oWNoD.js +62 -0
  493. package/dist/inbox-NDKwSk_H.d.ts +321 -0
  494. package/dist/index-B938YqY-.d.ts +188 -0
  495. package/dist/index-BUuVq1co.d.ts +158 -0
  496. package/dist/index-BnH4Gomw.d.ts +633 -0
  497. package/dist/index-BxYOB1Oc.d.ts +149 -0
  498. package/dist/index-C-qpk8EQ.d.ts +262 -0
  499. package/dist/index-CG9rA8H8.d.ts +407 -0
  500. package/dist/index-CguFm716.d.ts +518 -0
  501. package/dist/index-DLq69k3F.d.ts +588 -0
  502. package/dist/index-Do2ChN_y.d.ts +287 -0
  503. package/dist/index.d.ts +39 -17
  504. package/dist/index.js +94 -16
  505. package/dist/instances-BHjCZoF8.js +277 -0
  506. package/dist/invalidate-DMp4eqfF.d.ts +21 -0
  507. package/dist/json-schema-Ca6gYbEP.js +888 -0
  508. package/dist/jwks-cache-DEsKI0hJ.js +49 -0
  509. package/dist/kit-5l-o8RxL.js +133 -0
  510. package/dist/kit-DOwKpSkA.d.ts +94 -0
  511. package/dist/knowledge-BGbtxMP9.js +300 -0
  512. package/dist/knowledge-CtL-Vfgy.d.ts +217 -0
  513. package/dist/lint/index.d.ts +94 -11
  514. package/dist/lint/index.js +268 -26
  515. package/dist/list/index.d.ts +4 -4
  516. package/dist/list/index.js +3 -3
  517. package/dist/list-query-BDVutLFr.d.ts +222 -0
  518. package/dist/list-query-BKy2zBaT.js +559 -0
  519. package/dist/live-C21DgbsD.js +275 -0
  520. package/dist/mapper/bin.js +380 -0
  521. package/dist/mcp/index.d.ts +8 -8
  522. package/dist/mcp/index.js +11 -11
  523. package/dist/mcp/sdk/index.d.ts +10 -10
  524. package/dist/mcp/sdk/index.js +11 -11
  525. package/dist/messages-D4XWuRTj.js +492 -0
  526. package/dist/messaging-C_Pr9tGx.d.ts +297 -0
  527. package/dist/methods-B3o7BFOW.js +11 -0
  528. package/dist/mfa-oIOYTpvc.d.ts +36 -0
  529. package/dist/model-hwpvole9.d.ts +340 -0
  530. package/dist/model-messages-CKG0zwdF.js +206 -0
  531. package/dist/money-codec-BzddguAQ.js +41 -0
  532. package/dist/nestjs/index.d.ts +3 -3
  533. package/dist/nestjs/index.js +2 -2
  534. package/dist/next/index.d.ts +244 -205
  535. package/dist/next/index.js +288 -197
  536. package/dist/node/index.d.ts +2 -2
  537. package/dist/node/index.js +6 -8
  538. package/dist/operations-CSc_IsHO.d.ts +6 -0
  539. package/dist/options-0qvUckqt.js +9 -0
  540. package/dist/options-1GgseJq5.js +10 -0
  541. package/dist/options-21s0dpnX.js +9 -0
  542. package/dist/options-B-cxGmRA.js +5 -0
  543. package/dist/options-B0EJULm5.js +5 -0
  544. package/dist/options-B2swWnJW.js +9 -0
  545. package/dist/options-BMGClqoa.js +11 -0
  546. package/dist/options-BQIYfx9F.js +9 -0
  547. package/dist/options-BVg58avP.js +5 -0
  548. package/dist/options-BbnPv6p7.js +12 -0
  549. package/dist/options-BfLmA375.js +5 -0
  550. package/dist/options-BlncUmIc.js +9 -0
  551. package/dist/options-BlzSfWxC.d.ts +10 -0
  552. package/dist/options-BnZS7IK-.js +9 -0
  553. package/dist/options-Bt0bYMLl.js +24 -0
  554. package/dist/options-BvtnxHfK.js +24 -0
  555. package/dist/options-C-dQHH5-.js +8 -0
  556. package/dist/options-C3RgtOLo.js +5 -0
  557. package/dist/options-CE93HOYi.d.ts +7 -0
  558. package/dist/options-CM6-18FQ.d.ts +13 -0
  559. package/dist/options-CPK2nQER.js +5 -0
  560. package/dist/options-CRz8Ht_4.js +9 -0
  561. package/dist/options-CW9wTqOk.js +11 -0
  562. package/dist/options-Cl9Ag2Pt.js +8 -0
  563. package/dist/options-Cp0HyUEk.js +9 -0
  564. package/dist/options-Cqq2jUww.js +10 -0
  565. package/dist/options-CsGl5BLH.d.ts +52 -0
  566. package/dist/options-CtUUU71w.js +20 -0
  567. package/dist/options-CvD9vNvx.js +9 -0
  568. package/dist/options-CyAhRKKm.d.ts +14 -0
  569. package/dist/options-D0G06Zm9.js +8 -0
  570. package/dist/options-D6as77gU.d.ts +16 -0
  571. package/dist/options-DChZoVfs.d.ts +11 -0
  572. package/dist/options-DINdgVih.d.ts +9 -0
  573. package/dist/options-DPgdAXO5.js +11 -0
  574. package/dist/options-DWVYM8P0.d.ts +17 -0
  575. package/dist/options-DWbA9buW.js +9 -0
  576. package/dist/options-DXnBN2E7.js +8 -0
  577. package/dist/options-D_bBVCXg.js +5 -0
  578. package/dist/options-DcOx8_3X.d.ts +19 -0
  579. package/dist/options-DeNejBtq.js +8 -0
  580. package/dist/options-DgQo80Xh.js +5 -0
  581. package/dist/options-DplE18Ko.d.ts +12 -0
  582. package/dist/options-HLwOuF2H.js +10 -0
  583. package/dist/options-KV84gAxl.js +10 -0
  584. package/dist/options-Li1Dyu88.d.ts +10 -0
  585. package/dist/options-Q1Bzgqpr.js +5 -0
  586. package/dist/options-_F-enoBs.d.ts +26 -0
  587. package/dist/options-c5WCsky5.js +21 -0
  588. package/dist/options-nFzfgtA6.js +5 -0
  589. package/dist/options-pOVWwbAK.d.ts +10 -0
  590. package/dist/options-y_-AkVCs.d.ts +15 -0
  591. package/dist/orpc/index.d.ts +69 -71
  592. package/dist/orpc/index.js +161 -27
  593. package/dist/otel/index.d.ts +3 -3
  594. package/dist/otel/index.js +6 -6
  595. package/dist/outbox-HvGAJuBe.d.ts +199 -0
  596. package/dist/payments-BXvabJOw.js +16 -0
  597. package/dist/payments-BYcN34Fp.d.ts +114 -0
  598. package/dist/permissions-controller-BMsqIE5T.js +34 -0
  599. package/dist/plugin-AKwwe2gF.js +48 -0
  600. package/dist/pool-CrtT4dg-.d.ts +123 -0
  601. package/dist/pool-errors-JUBcGrre.js +27 -0
  602. package/dist/ports-DOhtuw3c.js +152 -0
  603. package/dist/ports-sx226JUL.d.ts +89 -0
  604. package/dist/postgres/index.d.ts +5 -5
  605. package/dist/postgres/index.js +3 -3
  606. package/dist/postgrest-executor-BFW4oWte.js +1064 -0
  607. package/dist/postgrest-z-T0l23T.d.ts +53 -0
  608. package/dist/powersync/index.d.ts +106 -7
  609. package/dist/powersync/index.js +123 -7
  610. package/dist/preset/index.d.ts +4 -4
  611. package/dist/preset/index.js +4 -4
  612. package/dist/preset-CsHnIBJF.js +875 -0
  613. package/dist/problem-Bf0cJ7tk.js +162 -0
  614. package/dist/problem-DNwN8iGz.d.ts +79 -0
  615. package/dist/provider-B6g7rBZX.js +57 -0
  616. package/dist/provider-CqwEOLCA.d.ts +112 -0
  617. package/dist/push-token-D3Vcf0Pf.d.ts +24 -0
  618. package/dist/queries-BWYYS9um.js +239 -0
  619. package/dist/query/index.d.ts +4 -4
  620. package/dist/query/index.js +114 -48
  621. package/dist/rank-result-BBJIK-k_.js +18 -0
  622. package/dist/rank-result-Bwe7igy-.d.ts +14 -0
  623. package/dist/rate-limit-BWKGlhTM.js +49 -0
  624. package/dist/rate-limit-Bztf32cl.d.ts +50 -0
  625. package/dist/rate-limit-o44SYkVY.js +327 -0
  626. package/dist/react/index.d.ts +10 -9
  627. package/dist/react/index.js +5 -5
  628. package/dist/react/native/index.d.ts +1 -1
  629. package/dist/react/native/index.js +2 -3
  630. package/dist/react/server.d.ts +47 -15
  631. package/dist/react/server.js +46 -11
  632. package/dist/react/session.d.ts +3 -3
  633. package/dist/react-BuDYI62C.js +979 -0
  634. package/dist/react-router/index.d.ts +13 -10
  635. package/dist/react-router/index.js +10 -10
  636. package/dist/read-set-BnKnofIj.js +199 -0
  637. package/dist/realtime/index.d.ts +7 -7
  638. package/dist/realtime/index.js +4 -4
  639. package/dist/record-bindings-DkBJpC5A.js +26 -0
  640. package/dist/record-form-BYs9xv_N.d.ts +82 -0
  641. package/dist/record-type-DRbnlj5q.js +221 -0
  642. package/dist/recordings-BBSJt_YV.d.ts +119 -0
  643. package/dist/records/index.d.ts +28 -28
  644. package/dist/records/index.js +22 -23
  645. package/dist/refresh-DT_ICaK-.d.ts +54 -0
  646. package/dist/refusal-ByBZcm0V.js +64 -0
  647. package/dist/refusal-CSntB_x8.d.ts +32 -0
  648. package/dist/replicas-Dyoh3CEg.js +94 -0
  649. package/dist/resolve-B0mW2m7f.js +932 -0
  650. package/dist/resolve-CXX6DHv3.d.ts +288 -0
  651. package/dist/resource-D8pzB5Qf.d.ts +123 -0
  652. package/dist/resource-DV2GC2dB.js +520 -0
  653. package/dist/resource-DvgXqZB_.js +105 -0
  654. package/dist/resource-execute-CzHuDsil.d.ts +15 -0
  655. package/dist/resource-types-DnKiH4G2.d.ts +157 -0
  656. package/dist/resources-B9cQxhjw.d.ts +7 -0
  657. package/dist/resources-C02l_YBJ.js +64 -0
  658. package/dist/respond-C3CcOZlA.js +100 -0
  659. package/dist/respond-Dn1_YhC1.d.ts +106 -0
  660. package/dist/result-DZeA5KS6.d.ts +351 -0
  661. package/dist/result-ntFBW2p2.js +146 -0
  662. package/dist/rows-BDLZStp4.js +80 -0
  663. package/dist/rows-Bm6sskji.js +39 -0
  664. package/dist/rrule-79K2c3Nr.js +290 -0
  665. package/dist/run-state-BMCD_1Lt.d.ts +13 -0
  666. package/dist/sales-lines-Bk4mbLH1.d.ts +37 -0
  667. package/dist/sales-lines-D-sf9PIB.js +43 -0
  668. package/dist/sales-shared-DXGFJP4g.js +22 -0
  669. package/dist/schemas-l2aF78zQ.js +216 -0
  670. package/dist/scores-B2BiNuVJ.d.ts +174 -0
  671. package/dist/scores-CRp3vvQU.js +177 -0
  672. package/dist/server/index.d.ts +103 -42
  673. package/dist/server/index.js +98 -30
  674. package/dist/server-types-CFtehAsr.d.ts +946 -0
  675. package/dist/session-CH0SKgIz.d.ts +99 -0
  676. package/dist/shared-C47zAh2A.js +17 -0
  677. package/dist/sign-in-BAjR49fq.d.ts +24 -0
  678. package/dist/sign-in-BsIaNx2C.js +392 -0
  679. package/dist/sign-in-DNCdrk05.js +608 -0
  680. package/dist/signatures-CNcoq392.js +145 -0
  681. package/dist/signatures-Dkx9OE8j.d.ts +43 -0
  682. package/dist/signers-BAEzvTJ0.d.ts +390 -0
  683. package/dist/signing-keys-BNDUxpQL.d.ts +119 -0
  684. package/dist/signing-keys-wGKh4vtt.js +164 -0
  685. package/dist/solid/index.d.ts +52 -18
  686. package/dist/solid/index.js +69 -11
  687. package/dist/solid-start/index.d.ts +11 -11
  688. package/dist/solid-start/index.js +8 -8
  689. package/dist/spec/index.d.ts +691 -10
  690. package/dist/spec/index.js +2487 -5
  691. package/dist/spec-DTWkHzYZ.js +124 -0
  692. package/dist/spec-pins-C1Vm8OBl.js +61 -0
  693. package/dist/spec-pins-DIx95afw.d.ts +125 -0
  694. package/dist/sql/index.d.ts +5 -5
  695. package/dist/sql/index.js +5 -5
  696. package/dist/sql-BPbbPzRJ.js +421 -0
  697. package/dist/sql-ClHIdgKS.js +126996 -0
  698. package/dist/sqlite/index.d.ts +126 -0
  699. package/dist/sqlite/index.js +197 -0
  700. package/dist/sso-B0Txid2-.d.ts +161 -0
  701. package/dist/sso-d2S4x_f9.js +217 -0
  702. package/dist/ssr/index.d.ts +5 -4
  703. package/dist/ssr/index.js +3 -3
  704. package/dist/standard-BA3mLh6w.js +25 -0
  705. package/dist/standard-DBV730sF.d.ts +7 -0
  706. package/dist/stats-BHl1-zj9.js +83 -0
  707. package/dist/storage/index.d.ts +3 -3
  708. package/dist/storage/index.js +10 -10
  709. package/dist/store-CpheI-lN.d.ts +83 -0
  710. package/dist/streams/index.d.ts +3 -3
  711. package/dist/streams/index.js +2 -2
  712. package/dist/streams/redis/index.d.ts +2 -2
  713. package/dist/streams/redis/index.js +3 -3
  714. package/dist/subject-readers-B-pQ9Mmo.js +49 -0
  715. package/dist/subject-readers-BNSzkqw_.d.ts +21 -0
  716. package/dist/subjects-BpIEN1MS.d.ts +90 -0
  717. package/dist/subjects-DvmQeF_F.d.ts +79 -0
  718. package/dist/support-view-BYOgwXsJ.d.ts +17 -0
  719. package/dist/svelte/index.d.ts +52 -15
  720. package/dist/svelte/index.js +87 -11
  721. package/dist/sveltekit/index.d.ts +13 -13
  722. package/dist/sveltekit/index.js +13 -13
  723. package/dist/table-schema-BlF6k62Q.d.ts +81 -0
  724. package/dist/table-schema-CD8cJz_M.js +293 -0
  725. package/dist/tags-BjHflcHF.d.ts +30 -0
  726. package/dist/tags-CIZTqtlY.js +39 -0
  727. package/dist/tanstack-db/index.d.ts +50 -6
  728. package/dist/tanstack-db/index.js +43 -2
  729. package/dist/tanstack-start/index.d.ts +9 -9
  730. package/dist/tanstack-start/index.js +9 -9
  731. package/dist/tax-BkCNWWMc.js +140 -0
  732. package/dist/tax-DPShHual.d.ts +170 -0
  733. package/dist/tee-V97_v1ZS.js +101 -0
  734. package/dist/template-Drgg3v2J.js +126 -0
  735. package/dist/temporal-required-Dy0GGD8E.js +20 -0
  736. package/dist/tenant-BgIiMQpo.js +27 -0
  737. package/dist/tenant-yYg0E2-n.d.ts +17 -0
  738. package/dist/testing/index.d.ts +77 -75
  739. package/dist/testing/index.js +89 -99
  740. package/dist/timeline--VU3A1e4.js +50 -0
  741. package/dist/timeline-CtG0sehj.d.ts +151 -0
  742. package/dist/timing-dypS0nxW.js +95 -0
  743. package/dist/topic-CJrQZQaa.d.ts +415 -0
  744. package/dist/topic-ikV_pLTX.js +643 -0
  745. package/dist/types-BBQLbui9.d.ts +659 -0
  746. package/dist/types-CAQBmpDx.d.ts +217 -0
  747. package/dist/types-DFdg_4yN.d.ts +912 -0
  748. package/dist/types-Dp3UCr1e.d.ts +194 -0
  749. package/dist/types-Dr9wZgNy.d.ts +251 -0
  750. package/dist/types-EO2crSX_.d.ts +177 -0
  751. package/dist/types-SFRomQF7.d.ts +624 -0
  752. package/dist/undo-B1jwnVyN.d.ts +46 -0
  753. package/dist/undo-BjCChCmH.js +44 -0
  754. package/dist/upload-claim-B1ZU8ydB.js +33 -0
  755. package/dist/usage-D7QkrwzV.d.ts +232 -0
  756. package/dist/user-change-DgWC6RRC.js +135 -0
  757. package/dist/variants-Cy--Ub-a.js +53 -0
  758. package/dist/vault-O-YlAyHb.d.ts +62 -0
  759. package/dist/vercel-connect/index.d.ts +1 -1
  760. package/dist/vercel-connect/index.js +3 -3
  761. package/dist/verify-CMou8dWZ.d.ts +146 -0
  762. package/dist/verify-ZLFUdlqE.js +130 -0
  763. package/dist/view-C8Ve14ja.js +247 -0
  764. package/dist/view-DyFdMCqg.d.ts +97 -0
  765. package/dist/vue/index.d.ts +52 -23
  766. package/dist/vue/index.js +77 -14
  767. package/dist/watch-topic-BcGfvZOE.d.ts +31 -0
  768. package/dist/wiring-CDNuQoJJ.js +13 -0
  769. package/dist/workflow-sdk/builder/index.d.ts +12 -12
  770. package/dist/workflow-sdk/builder/index.js +16 -17
  771. package/dist/workflow-sdk/index.d.ts +18 -15
  772. package/dist/workflow-sdk/index.js +2 -2
  773. package/dist/workflow-sdk/world/index.d.ts +6 -6
  774. package/dist/workflow-sdk/world/index.js +12 -12
  775. package/dist/workflow-sdk-BFHu4sci.d.ts +163 -0
  776. package/dist/workflow-sdk-BVlFEB5Q.js +242 -0
  777. package/dist/workflow-sdk-Bw6_u0ar.js +2446 -0
  778. package/dist/workflows-B0ZPAQu0.d.ts +255 -0
  779. package/dist/yjs/index.d.ts +3 -3
  780. package/dist/yjs/index.js +2 -2
  781. package/package.json +75 -623
  782. package/schemas/config-v1.json +2082 -1754
  783. package/schemas/design-v1.json +141 -5
  784. package/schemas/doctor-report-v1.json +14 -0
  785. package/skills/better-supabase/SKILL.md +70 -28
  786. package/skills/better-supabase/references/block-extensions.md +64 -0
  787. package/skills/better-supabase/references/frontend.md +29 -26
  788. package/skills/better-supabase/references/troubleshooting.md +3 -3
  789. package/skills/better-supabase/references/ui-recipes.md +267 -134
  790. package/skills/better-supabase-api/SKILL.md +49 -38
  791. package/skills/better-supabase-api/references/adapters.md +42 -39
  792. package/skills/better-supabase-api/references/ai.md +4 -4
  793. package/skills/better-supabase-api/references/expo.md +8 -8
  794. package/skills/better-supabase-api/references/powersync.md +20 -13
  795. package/skills/better-supabase-api/references/streams-credentials.md +3 -3
  796. package/skills/better-supabase-auth/SKILL.md +17 -17
  797. package/skills/better-supabase-auth/references/authorization-providers.md +8 -6
  798. package/skills/better-supabase-testing/SKILL.md +8 -8
  799. package/dist/access-sql-CPoq9F86.js +0 -207
  800. package/dist/access-z7NwWtqx.js +0 -34
  801. package/dist/actor-hNajGNEK.js +0 -150
  802. package/dist/adapter-BCFAg58A.js +0 -2190
  803. package/dist/agents-CmZlLPXC.d.ts +0 -117
  804. package/dist/ai-cache-BxlOkc_M.d.ts +0 -82
  805. package/dist/ai-cache-DQikwXhJ.js +0 -87
  806. package/dist/ai-chat-DBxEz3o1.d.ts +0 -619
  807. package/dist/ai-files-t-kHmS5H.js +0 -339
  808. package/dist/ai-tasks-BDywBUgN.d.ts +0 -166
  809. package/dist/announcements-BeOD0zbc.js +0 -128
  810. package/dist/api-CWhpq24a.d.ts +0 -174
  811. package/dist/api-DKp2Ggz_.js +0 -685
  812. package/dist/api-keys-CboAenU8.d.ts +0 -213
  813. package/dist/api-keys-DT6Fi50R.js +0 -318
  814. package/dist/app-tables-BHrzAUFJ.d.ts +0 -27
  815. package/dist/app-tables-C5aoI5rZ.js +0 -959
  816. package/dist/approvals-bMb7dsBY.d.ts +0 -129
  817. package/dist/arazzo/index.d.ts +0 -278
  818. package/dist/arazzo/index.js +0 -630
  819. package/dist/assistant-D1yev_fR.d.ts +0 -157
  820. package/dist/asyncapi/index.d.ts +0 -110
  821. package/dist/asyncapi/index.js +0 -572
  822. package/dist/attachments-Cjdgarpa.js +0 -351
  823. package/dist/attributes-BOFl922R.js +0 -44
  824. package/dist/audit-log-C3rQxeHd.js +0 -788
  825. package/dist/auth-reply-jVKoAV6R.js +0 -31
  826. package/dist/authorization-BuT26_sR.d.ts +0 -3455
  827. package/dist/authorization-hooks-dLmUO_PZ.d.ts +0 -217
  828. package/dist/authorizer-DFP3gHv8.d.ts +0 -82
  829. package/dist/authorizer-DPTeL-7h.js +0 -125
  830. package/dist/availability-q3dZoZYM.d.ts +0 -226
  831. package/dist/bind-Dz8y3T5T.d.ts +0 -95
  832. package/dist/block-authors-BRTlT0qv.js +0 -14
  833. package/dist/block-controller-DTGuBemi.js +0 -112
  834. package/dist/block-env-DJiUu1fq.js +0 -35
  835. package/dist/block-env-kFcaaJLM.d.ts +0 -10
  836. package/dist/block-env-options-2e6IQrSw.js +0 -26
  837. package/dist/block-events-records-BGVyoz57.d.ts +0 -343
  838. package/dist/block-fields-3w4MZr8U.d.ts +0 -58
  839. package/dist/block-fields-DBSJSeaO.js +0 -139
  840. package/dist/block-helpers-BaugZlJV.d.ts +0 -62
  841. package/dist/block-helpers-CiKtrb6g.js +0 -353
  842. package/dist/block-hooks-BymdcD0V.js +0 -130
  843. package/dist/block-hooks-CmjPKqQ_.d.ts +0 -117
  844. package/dist/block-method-Bvsao626.js +0 -21
  845. package/dist/block-method-hsPAGFi5.d.ts +0 -19
  846. package/dist/block-names-Dbv_2wmE.js +0 -66
  847. package/dist/block-subjects-Dzq5Xn_0.js +0 -55
  848. package/dist/block-subjects-FHwLlIHU.d.ts +0 -6
  849. package/dist/block-tenant-C1sNV8_4.js +0 -14
  850. package/dist/block-transport-d53POsem.d.ts +0 -69
  851. package/dist/blocks/access/index.d.ts +0 -9
  852. package/dist/blocks/access/index.js +0 -18
  853. package/dist/blocks/access/react/index.d.ts +0 -52
  854. package/dist/blocks/access/react/index.js +0 -73
  855. package/dist/blocks/access/react/server.d.ts +0 -11
  856. package/dist/blocks/access/react/server.js +0 -16
  857. package/dist/blocks/access/solid/index.d.ts +0 -13
  858. package/dist/blocks/access/solid/index.js +0 -14
  859. package/dist/blocks/access/svelte/index.d.ts +0 -13
  860. package/dist/blocks/access/svelte/index.js +0 -14
  861. package/dist/blocks/access/vue/index.d.ts +0 -13
  862. package/dist/blocks/access/vue/index.js +0 -14
  863. package/dist/blocks/activity/index.d.ts +0 -116
  864. package/dist/blocks/activity/index.js +0 -164
  865. package/dist/blocks/ai-chat/react/index.d.ts +0 -52
  866. package/dist/blocks/ai-chat/react/index.js +0 -95
  867. package/dist/blocks/ai-chat/react/server.d.ts +0 -25
  868. package/dist/blocks/ai-chat/react/server.js +0 -23
  869. package/dist/blocks/ai-chat/solid/index.d.ts +0 -34
  870. package/dist/blocks/ai-chat/solid/index.js +0 -41
  871. package/dist/blocks/ai-chat/svelte/index.d.ts +0 -34
  872. package/dist/blocks/ai-chat/svelte/index.js +0 -41
  873. package/dist/blocks/ai-chat/vue/index.d.ts +0 -34
  874. package/dist/blocks/ai-chat/vue/index.js +0 -41
  875. package/dist/blocks/ai-providers/index.d.ts +0 -22
  876. package/dist/blocks/ai-providers/index.js +0 -236
  877. package/dist/blocks/ai-tasks/index.d.ts +0 -10
  878. package/dist/blocks/ai-tasks/index.js +0 -252
  879. package/dist/blocks/announcements/react/index.d.ts +0 -28
  880. package/dist/blocks/announcements/react/index.js +0 -38
  881. package/dist/blocks/announcements/react/server.d.ts +0 -9
  882. package/dist/blocks/announcements/react/server.js +0 -10
  883. package/dist/blocks/announcements/solid/index.d.ts +0 -13
  884. package/dist/blocks/announcements/solid/index.js +0 -14
  885. package/dist/blocks/announcements/svelte/index.d.ts +0 -13
  886. package/dist/blocks/announcements/svelte/index.js +0 -14
  887. package/dist/blocks/announcements/vue/index.d.ts +0 -13
  888. package/dist/blocks/announcements/vue/index.js +0 -14
  889. package/dist/blocks/api-keys/react/index.d.ts +0 -32
  890. package/dist/blocks/api-keys/react/index.js +0 -43
  891. package/dist/blocks/api-keys/react/server.d.ts +0 -7
  892. package/dist/blocks/api-keys/react/server.js +0 -7
  893. package/dist/blocks/api-keys/solid/index.d.ts +0 -13
  894. package/dist/blocks/api-keys/solid/index.js +0 -14
  895. package/dist/blocks/api-keys/svelte/index.d.ts +0 -13
  896. package/dist/blocks/api-keys/svelte/index.js +0 -14
  897. package/dist/blocks/api-keys/vue/index.d.ts +0 -13
  898. package/dist/blocks/api-keys/vue/index.js +0 -14
  899. package/dist/blocks/attachments/react/index.d.ts +0 -53
  900. package/dist/blocks/attachments/react/index.js +0 -78
  901. package/dist/blocks/attachments/react/server.d.ts +0 -9
  902. package/dist/blocks/attachments/react/server.js +0 -10
  903. package/dist/blocks/attachments/solid/index.d.ts +0 -13
  904. package/dist/blocks/attachments/solid/index.js +0 -14
  905. package/dist/blocks/attachments/svelte/index.d.ts +0 -13
  906. package/dist/blocks/attachments/svelte/index.js +0 -14
  907. package/dist/blocks/attachments/vue/index.d.ts +0 -13
  908. package/dist/blocks/attachments/vue/index.js +0 -14
  909. package/dist/blocks/audit/react/index.d.ts +0 -31
  910. package/dist/blocks/audit/react/index.js +0 -46
  911. package/dist/blocks/audit/react/server.d.ts +0 -7
  912. package/dist/blocks/audit/react/server.js +0 -7
  913. package/dist/blocks/audit/solid/index.d.ts +0 -13
  914. package/dist/blocks/audit/solid/index.js +0 -14
  915. package/dist/blocks/audit/svelte/index.d.ts +0 -13
  916. package/dist/blocks/audit/svelte/index.js +0 -14
  917. package/dist/blocks/audit/vue/index.d.ts +0 -13
  918. package/dist/blocks/audit/vue/index.js +0 -14
  919. package/dist/blocks/billing/react/index.d.ts +0 -44
  920. package/dist/blocks/billing/react/index.js +0 -40
  921. package/dist/blocks/billing/react/server.d.ts +0 -10
  922. package/dist/blocks/billing/react/server.js +0 -10
  923. package/dist/blocks/billing/solid/index.d.ts +0 -15
  924. package/dist/blocks/billing/solid/index.js +0 -14
  925. package/dist/blocks/billing/svelte/index.d.ts +0 -15
  926. package/dist/blocks/billing/svelte/index.js +0 -14
  927. package/dist/blocks/billing/vue/index.d.ts +0 -15
  928. package/dist/blocks/billing/vue/index.js +0 -14
  929. package/dist/blocks/bookings/react/index.d.ts +0 -36
  930. package/dist/blocks/bookings/react/index.js +0 -63
  931. package/dist/blocks/bookings/react/server.d.ts +0 -9
  932. package/dist/blocks/bookings/react/server.js +0 -10
  933. package/dist/blocks/bookings/solid/index.d.ts +0 -13
  934. package/dist/blocks/bookings/solid/index.js +0 -14
  935. package/dist/blocks/bookings/svelte/index.d.ts +0 -13
  936. package/dist/blocks/bookings/svelte/index.js +0 -14
  937. package/dist/blocks/bookings/vue/index.d.ts +0 -13
  938. package/dist/blocks/bookings/vue/index.js +0 -14
  939. package/dist/blocks/calendar/react/index.d.ts +0 -26
  940. package/dist/blocks/calendar/react/index.js +0 -58
  941. package/dist/blocks/calendar/react/server.d.ts +0 -9
  942. package/dist/blocks/calendar/react/server.js +0 -10
  943. package/dist/blocks/calendar/solid/index.d.ts +0 -13
  944. package/dist/blocks/calendar/solid/index.js +0 -14
  945. package/dist/blocks/calendar/svelte/index.d.ts +0 -13
  946. package/dist/blocks/calendar/svelte/index.js +0 -14
  947. package/dist/blocks/calendar/vue/index.d.ts +0 -13
  948. package/dist/blocks/calendar/vue/index.js +0 -14
  949. package/dist/blocks/comments/react/index.d.ts +0 -32
  950. package/dist/blocks/comments/react/index.js +0 -56
  951. package/dist/blocks/comments/react/server.d.ts +0 -7
  952. package/dist/blocks/comments/react/server.js +0 -7
  953. package/dist/blocks/comments/solid/index.d.ts +0 -13
  954. package/dist/blocks/comments/solid/index.js +0 -14
  955. package/dist/blocks/comments/svelte/index.d.ts +0 -13
  956. package/dist/blocks/comments/svelte/index.js +0 -14
  957. package/dist/blocks/comments/vue/index.d.ts +0 -13
  958. package/dist/blocks/comments/vue/index.js +0 -14
  959. package/dist/blocks/controls/index.d.ts +0 -325
  960. package/dist/blocks/controls/index.js +0 -410
  961. package/dist/blocks/engagements/index.d.ts +0 -41
  962. package/dist/blocks/engagements/index.js +0 -414
  963. package/dist/blocks/entitlements/react/index.d.ts +0 -27
  964. package/dist/blocks/entitlements/react/index.js +0 -35
  965. package/dist/blocks/entitlements/react/server.d.ts +0 -9
  966. package/dist/blocks/entitlements/react/server.js +0 -10
  967. package/dist/blocks/entitlements/solid/index.d.ts +0 -13
  968. package/dist/blocks/entitlements/solid/index.js +0 -14
  969. package/dist/blocks/entitlements/svelte/index.d.ts +0 -13
  970. package/dist/blocks/entitlements/svelte/index.js +0 -14
  971. package/dist/blocks/entitlements/vue/index.d.ts +0 -13
  972. package/dist/blocks/entitlements/vue/index.js +0 -14
  973. package/dist/blocks/forms/react/index.d.ts +0 -19
  974. package/dist/blocks/forms/react/index.js +0 -28
  975. package/dist/blocks/forms/react/server.d.ts +0 -9
  976. package/dist/blocks/forms/react/server.js +0 -10
  977. package/dist/blocks/forms/solid/index.d.ts +0 -13
  978. package/dist/blocks/forms/solid/index.js +0 -14
  979. package/dist/blocks/forms/svelte/index.d.ts +0 -13
  980. package/dist/blocks/forms/svelte/index.js +0 -14
  981. package/dist/blocks/forms/vue/index.d.ts +0 -13
  982. package/dist/blocks/forms/vue/index.js +0 -14
  983. package/dist/blocks/inbox/react/index.d.ts +0 -3
  984. package/dist/blocks/inbox/react/index.js +0 -87
  985. package/dist/blocks/inbox/react/server.d.ts +0 -17
  986. package/dist/blocks/inbox/react/server.js +0 -18
  987. package/dist/blocks/inbox/solid/index.d.ts +0 -27
  988. package/dist/blocks/inbox/solid/index.js +0 -32
  989. package/dist/blocks/inbox/svelte/index.d.ts +0 -27
  990. package/dist/blocks/inbox/svelte/index.js +0 -32
  991. package/dist/blocks/inbox/vue/index.d.ts +0 -27
  992. package/dist/blocks/inbox/vue/index.js +0 -32
  993. package/dist/blocks/jobs/index.d.ts +0 -523
  994. package/dist/blocks/jobs/index.js +0 -1345
  995. package/dist/blocks/messaging/react/index.d.ts +0 -39
  996. package/dist/blocks/messaging/react/index.js +0 -80
  997. package/dist/blocks/messaging/react/server.d.ts +0 -12
  998. package/dist/blocks/messaging/react/server.js +0 -14
  999. package/dist/blocks/messaging/solid/index.d.ts +0 -20
  1000. package/dist/blocks/messaging/solid/index.js +0 -23
  1001. package/dist/blocks/messaging/svelte/index.d.ts +0 -20
  1002. package/dist/blocks/messaging/svelte/index.js +0 -23
  1003. package/dist/blocks/messaging/vue/index.d.ts +0 -20
  1004. package/dist/blocks/messaging/vue/index.js +0 -23
  1005. package/dist/blocks/mfa/react/index.d.ts +0 -30
  1006. package/dist/blocks/mfa/react/index.js +0 -45
  1007. package/dist/blocks/mfa/react/server.d.ts +0 -9
  1008. package/dist/blocks/mfa/react/server.js +0 -12
  1009. package/dist/blocks/mfa/solid/index.d.ts +0 -20
  1010. package/dist/blocks/mfa/solid/index.js +0 -23
  1011. package/dist/blocks/mfa/svelte/index.d.ts +0 -20
  1012. package/dist/blocks/mfa/svelte/index.js +0 -23
  1013. package/dist/blocks/mfa/vue/index.d.ts +0 -20
  1014. package/dist/blocks/mfa/vue/index.js +0 -23
  1015. package/dist/blocks/notifications/react/index.d.ts +0 -19
  1016. package/dist/blocks/notifications/react/index.js +0 -41
  1017. package/dist/blocks/notifications/react/server.d.ts +0 -10
  1018. package/dist/blocks/notifications/react/server.js +0 -10
  1019. package/dist/blocks/notifications/solid/index.d.ts +0 -13
  1020. package/dist/blocks/notifications/solid/index.js +0 -14
  1021. package/dist/blocks/notifications/svelte/index.d.ts +0 -13
  1022. package/dist/blocks/notifications/svelte/index.js +0 -14
  1023. package/dist/blocks/notifications/vue/index.d.ts +0 -13
  1024. package/dist/blocks/notifications/vue/index.js +0 -14
  1025. package/dist/blocks/number-sequences/index.d.ts +0 -48
  1026. package/dist/blocks/number-sequences/index.js +0 -52
  1027. package/dist/blocks/onboarding/react/index.d.ts +0 -24
  1028. package/dist/blocks/onboarding/react/index.js +0 -38
  1029. package/dist/blocks/onboarding/react/server.d.ts +0 -10
  1030. package/dist/blocks/onboarding/react/server.js +0 -10
  1031. package/dist/blocks/onboarding/solid/index.d.ts +0 -13
  1032. package/dist/blocks/onboarding/solid/index.js +0 -14
  1033. package/dist/blocks/onboarding/svelte/index.d.ts +0 -13
  1034. package/dist/blocks/onboarding/svelte/index.js +0 -14
  1035. package/dist/blocks/onboarding/vue/index.d.ts +0 -13
  1036. package/dist/blocks/onboarding/vue/index.js +0 -14
  1037. package/dist/blocks/organizations/react/index.d.ts +0 -127
  1038. package/dist/blocks/organizations/react/index.js +0 -113
  1039. package/dist/blocks/organizations/react/server.d.ts +0 -20
  1040. package/dist/blocks/organizations/react/server.js +0 -24
  1041. package/dist/blocks/organizations/solid/index.d.ts +0 -34
  1042. package/dist/blocks/organizations/solid/index.js +0 -32
  1043. package/dist/blocks/organizations/svelte/index.d.ts +0 -34
  1044. package/dist/blocks/organizations/svelte/index.js +0 -32
  1045. package/dist/blocks/organizations/vue/index.d.ts +0 -34
  1046. package/dist/blocks/organizations/vue/index.js +0 -32
  1047. package/dist/blocks/parties/index.d.ts +0 -182
  1048. package/dist/blocks/parties/index.js +0 -358
  1049. package/dist/blocks/reactions/react/index.d.ts +0 -32
  1050. package/dist/blocks/reactions/react/index.js +0 -57
  1051. package/dist/blocks/reactions/react/server.d.ts +0 -9
  1052. package/dist/blocks/reactions/react/server.js +0 -10
  1053. package/dist/blocks/reactions/solid/index.d.ts +0 -13
  1054. package/dist/blocks/reactions/solid/index.js +0 -14
  1055. package/dist/blocks/reactions/svelte/index.d.ts +0 -13
  1056. package/dist/blocks/reactions/svelte/index.js +0 -14
  1057. package/dist/blocks/reactions/vue/index.d.ts +0 -13
  1058. package/dist/blocks/reactions/vue/index.js +0 -14
  1059. package/dist/blocks/rules/index.d.ts +0 -175
  1060. package/dist/blocks/rules/index.js +0 -163
  1061. package/dist/blocks/rules/react/index.d.ts +0 -38
  1062. package/dist/blocks/rules/react/index.js +0 -59
  1063. package/dist/blocks/rules/react/server.d.ts +0 -6
  1064. package/dist/blocks/rules/react/server.js +0 -7
  1065. package/dist/blocks/rules/solid/index.d.ts +0 -13
  1066. package/dist/blocks/rules/solid/index.js +0 -14
  1067. package/dist/blocks/rules/svelte/index.d.ts +0 -13
  1068. package/dist/blocks/rules/svelte/index.js +0 -14
  1069. package/dist/blocks/rules/vue/index.d.ts +0 -13
  1070. package/dist/blocks/rules/vue/index.js +0 -14
  1071. package/dist/blocks/saved-views/react/index.d.ts +0 -40
  1072. package/dist/blocks/saved-views/react/index.js +0 -60
  1073. package/dist/blocks/saved-views/react/server.d.ts +0 -10
  1074. package/dist/blocks/saved-views/react/server.js +0 -10
  1075. package/dist/blocks/saved-views/solid/index.d.ts +0 -13
  1076. package/dist/blocks/saved-views/solid/index.js +0 -14
  1077. package/dist/blocks/saved-views/svelte/index.d.ts +0 -13
  1078. package/dist/blocks/saved-views/svelte/index.js +0 -14
  1079. package/dist/blocks/saved-views/vue/index.d.ts +0 -13
  1080. package/dist/blocks/saved-views/vue/index.js +0 -14
  1081. package/dist/blocks/search/react/index.d.ts +0 -39
  1082. package/dist/blocks/search/react/index.js +0 -49
  1083. package/dist/blocks/search/react/server.d.ts +0 -10
  1084. package/dist/blocks/search/react/server.js +0 -11
  1085. package/dist/blocks/search/solid/index.d.ts +0 -13
  1086. package/dist/blocks/search/solid/index.js +0 -14
  1087. package/dist/blocks/search/svelte/index.d.ts +0 -13
  1088. package/dist/blocks/search/svelte/index.js +0 -14
  1089. package/dist/blocks/search/vue/index.d.ts +0 -13
  1090. package/dist/blocks/search/vue/index.js +0 -14
  1091. package/dist/blocks/service-principals/index.d.ts +0 -132
  1092. package/dist/blocks/service-principals/index.js +0 -109
  1093. package/dist/blocks/sessions/react/index.d.ts +0 -36
  1094. package/dist/blocks/sessions/react/index.js +0 -53
  1095. package/dist/blocks/sessions/react/server.d.ts +0 -15
  1096. package/dist/blocks/sessions/react/server.js +0 -17
  1097. package/dist/blocks/sessions/solid/index.d.ts +0 -20
  1098. package/dist/blocks/sessions/solid/index.js +0 -23
  1099. package/dist/blocks/sessions/svelte/index.d.ts +0 -20
  1100. package/dist/blocks/sessions/svelte/index.js +0 -23
  1101. package/dist/blocks/sessions/vue/index.d.ts +0 -20
  1102. package/dist/blocks/sessions/vue/index.js +0 -23
  1103. package/dist/blocks/settings/react/index.d.ts +0 -31
  1104. package/dist/blocks/settings/react/index.js +0 -37
  1105. package/dist/blocks/settings/react/server.d.ts +0 -10
  1106. package/dist/blocks/settings/react/server.js +0 -10
  1107. package/dist/blocks/settings/solid/index.d.ts +0 -13
  1108. package/dist/blocks/settings/solid/index.js +0 -14
  1109. package/dist/blocks/settings/svelte/index.d.ts +0 -13
  1110. package/dist/blocks/settings/svelte/index.js +0 -14
  1111. package/dist/blocks/settings/vue/index.d.ts +0 -13
  1112. package/dist/blocks/settings/vue/index.js +0 -14
  1113. package/dist/blocks/shared-signals/index.d.ts +0 -440
  1114. package/dist/blocks/shared-signals/index.js +0 -885
  1115. package/dist/blocks/subjects/react/index.d.ts +0 -31
  1116. package/dist/blocks/subjects/react/index.js +0 -60
  1117. package/dist/blocks/subjects/react/server.d.ts +0 -9
  1118. package/dist/blocks/subjects/react/server.js +0 -12
  1119. package/dist/blocks/subjects/solid/index.d.ts +0 -13
  1120. package/dist/blocks/subjects/solid/index.js +0 -14
  1121. package/dist/blocks/subjects/svelte/index.d.ts +0 -13
  1122. package/dist/blocks/subjects/svelte/index.js +0 -14
  1123. package/dist/blocks/subjects/vue/index.d.ts +0 -13
  1124. package/dist/blocks/subjects/vue/index.js +0 -14
  1125. package/dist/blocks/tags/react/index.d.ts +0 -29
  1126. package/dist/blocks/tags/react/index.js +0 -53
  1127. package/dist/blocks/tags/react/server.d.ts +0 -7
  1128. package/dist/blocks/tags/react/server.js +0 -7
  1129. package/dist/blocks/tags/solid/index.d.ts +0 -13
  1130. package/dist/blocks/tags/solid/index.js +0 -14
  1131. package/dist/blocks/tags/svelte/index.d.ts +0 -13
  1132. package/dist/blocks/tags/svelte/index.js +0 -14
  1133. package/dist/blocks/tags/vue/index.d.ts +0 -13
  1134. package/dist/blocks/tags/vue/index.js +0 -14
  1135. package/dist/blocks/targets/index.d.ts +0 -82
  1136. package/dist/blocks/targets/index.js +0 -72
  1137. package/dist/blocks/undo/react/index.d.ts +0 -17
  1138. package/dist/blocks/undo/react/index.js +0 -24
  1139. package/dist/blocks/undo/react/server.d.ts +0 -10
  1140. package/dist/blocks/undo/react/server.js +0 -10
  1141. package/dist/blocks/undo/solid/index.d.ts +0 -13
  1142. package/dist/blocks/undo/solid/index.js +0 -14
  1143. package/dist/blocks/undo/svelte/index.d.ts +0 -13
  1144. package/dist/blocks/undo/svelte/index.js +0 -14
  1145. package/dist/blocks/undo/vue/index.d.ts +0 -13
  1146. package/dist/blocks/undo/vue/index.js +0 -14
  1147. package/dist/blocks/usage/react/index.d.ts +0 -29
  1148. package/dist/blocks/usage/react/index.js +0 -38
  1149. package/dist/blocks/usage/react/server.d.ts +0 -7
  1150. package/dist/blocks/usage/react/server.js +0 -7
  1151. package/dist/blocks/usage/solid/index.d.ts +0 -13
  1152. package/dist/blocks/usage/solid/index.js +0 -14
  1153. package/dist/blocks/usage/svelte/index.d.ts +0 -13
  1154. package/dist/blocks/usage/svelte/index.js +0 -14
  1155. package/dist/blocks/usage/vue/index.d.ts +0 -13
  1156. package/dist/blocks/usage/vue/index.js +0 -14
  1157. package/dist/blocks/work-items/index.d.ts +0 -87
  1158. package/dist/blocks/work-items/index.js +0 -431
  1159. package/dist/blocks/workflow-builder/index.d.ts +0 -43
  1160. package/dist/blocks/workflow-builder/index.js +0 -33
  1161. package/dist/blocks/workflow-builder/react/index.d.ts +0 -32
  1162. package/dist/blocks/workflow-builder/react/index.js +0 -75
  1163. package/dist/blocks/workflow-builder/react/server.d.ts +0 -14
  1164. package/dist/blocks/workflow-builder/react/server.js +0 -17
  1165. package/dist/blocks/workflow-builder/solid/index.d.ts +0 -20
  1166. package/dist/blocks/workflow-builder/solid/index.js +0 -23
  1167. package/dist/blocks/workflow-builder/svelte/index.d.ts +0 -20
  1168. package/dist/blocks/workflow-builder/svelte/index.js +0 -23
  1169. package/dist/blocks/workflow-builder/vue/index.d.ts +0 -20
  1170. package/dist/blocks/workflow-builder/vue/index.js +0 -23
  1171. package/dist/blocks/workflows/react/index.d.ts +0 -39
  1172. package/dist/blocks/workflows/react/index.js +0 -65
  1173. package/dist/blocks/workflows/react/server.d.ts +0 -14
  1174. package/dist/blocks/workflows/react/server.js +0 -17
  1175. package/dist/blocks/workflows/solid/index.d.ts +0 -20
  1176. package/dist/blocks/workflows/solid/index.js +0 -23
  1177. package/dist/blocks/workflows/svelte/index.d.ts +0 -20
  1178. package/dist/blocks/workflows/svelte/index.js +0 -23
  1179. package/dist/blocks/workflows/vue/index.d.ts +0 -20
  1180. package/dist/blocks/workflows/vue/index.js +0 -23
  1181. package/dist/bookings-BB5lFlNO.js +0 -310
  1182. package/dist/bookings-CC7IeiRa.d.ts +0 -290
  1183. package/dist/bucket-TkB7_xv8.d.ts +0 -667
  1184. package/dist/build-DCfpwg78.js +0 -1839
  1185. package/dist/build-g9wTbQdp.js +0 -703
  1186. package/dist/calendar-T3Vdpq7E.js +0 -952
  1187. package/dist/carrier-C7Q_21Kd.d.ts +0 -169
  1188. package/dist/chat-sdk/react/index.d.ts +0 -3
  1189. package/dist/chat-sdk/react/index.js +0 -2
  1190. package/dist/chat-sdk/react/server.d.ts +0 -4
  1191. package/dist/chat-sdk/react/server.js +0 -1
  1192. package/dist/claims-T8TWZ53E.js +0 -63
  1193. package/dist/cli/add-Bf3kE6PY.js +0 -75
  1194. package/dist/cli/add-CYh6Sxk1.js +0 -674
  1195. package/dist/cli/add-Dg40eFKE.js +0 -1
  1196. package/dist/cli/adopt-B0vrj-4B.js +0 -421
  1197. package/dist/cli/adopt-DJR1k3lS.js +0 -1
  1198. package/dist/cli/apply-DUQ-5LC6.js +0 -329
  1199. package/dist/cli/blocks-DzgYfjVv.js +0 -124
  1200. package/dist/cli/blocks-gGupqvBH.js +0 -1
  1201. package/dist/cli/cache-C3K_wOE2.js +0 -536
  1202. package/dist/cli/catalog-CNM0ViIh.js +0 -199
  1203. package/dist/cli/codemod-Dz4R-tVY.js +0 -1127
  1204. package/dist/cli/command-33pu13LT.js +0 -963
  1205. package/dist/cli/completion-6M6Hr8TL.js +0 -211
  1206. package/dist/cli/completion-Bqu8yq0q.js +0 -1
  1207. package/dist/cli/completion-Ddr3yqd3.js +0 -30
  1208. package/dist/cli/config-B31tIvAl.js +0 -42
  1209. package/dist/cli/config-CjgXMZW2.js +0 -1522
  1210. package/dist/cli/config-D9k5ckqV.js +0 -1
  1211. package/dist/cli/config-edit-D46H0UHp.js +0 -613
  1212. package/dist/cli/db-CeagtENM.js +0 -473
  1213. package/dist/cli/design-edit-B40ljpGZ.js +0 -205
  1214. package/dist/cli/detect-RApSAA8v.js +0 -84
  1215. package/dist/cli/dist-DSwzLVAG.js +0 -129
  1216. package/dist/cli/doctor-COGJJ1gy.js +0 -3898
  1217. package/dist/cli/emit-DbQeLlHt.js +0 -1123
  1218. package/dist/cli/env-Ba-pOD3a.js +0 -1
  1219. package/dist/cli/env-DlgfvI8U.js +0 -143
  1220. package/dist/cli/files-C5JfVnj5.js +0 -972
  1221. package/dist/cli/gen-DHW1qENn.js +0 -307
  1222. package/dist/cli/init-CZifzAUD.js +0 -397
  1223. package/dist/cli/introspect-Dfwu5vAg.js +0 -51
  1224. package/dist/cli/keys-iJs_1WT8.js +0 -106
  1225. package/dist/cli/live-1eL2MIkS.js +0 -344
  1226. package/dist/cli/mcp-CaFW6uKU.js +0 -240
  1227. package/dist/cli/metadata-DkOQHZoH.js +0 -146
  1228. package/dist/cli/migration-safety-BsCKKxPf.js +0 -305
  1229. package/dist/cli/module-migration-CbX-jRhV.js +0 -606
  1230. package/dist/cli/moved-CdNtCf4t.js +0 -161
  1231. package/dist/cli/names-D6LrQnOv.js +0 -6
  1232. package/dist/cli/parse-CRZLku1b.js +0 -182
  1233. package/dist/cli/preset-C4fagbhZ.js +0 -130
  1234. package/dist/cli/run-CE2s5TDh.js +0 -711
  1235. package/dist/cli/run-Du5XPOCv.js +0 -63
  1236. package/dist/cli/run-KXjrgNCH.js +0 -2378
  1237. package/dist/cli/scaffold-CPH8sEhw.js +0 -901
  1238. package/dist/cli/scaffold-DS6g3INp.js +0 -1
  1239. package/dist/cli/seed-D6V-T5Af.js +0 -188
  1240. package/dist/cli/seed-DPQaA8aP.js +0 -1
  1241. package/dist/cli/shared-CCpxS5if.js +0 -151
  1242. package/dist/cli/skills-Bz4INB8f.js +0 -121
  1243. package/dist/cli/snapshot-Dkwxc1uV.js +0 -351
  1244. package/dist/cli/source-args-DZV4RnZL.js +0 -59
  1245. package/dist/cli/spec-B3Tbc7Dm.js +0 -7534
  1246. package/dist/cli/spec-Cv1GYrcW.js +0 -1
  1247. package/dist/cli/sql-C58MS9DI.js +0 -348
  1248. package/dist/cli/sql-DVPw5tvO.js +0 -2
  1249. package/dist/cli/stack-_F_JhllX.js +0 -135
  1250. package/dist/cli/sync-CjkKpI6d.js +0 -91
  1251. package/dist/cli/typegen-F9GEjpvD.js +0 -502
  1252. package/dist/cli/typegen-version-BNBPI4Eu.js +0 -9
  1253. package/dist/cli/version-CTqnp3HO.js +0 -4
  1254. package/dist/cli/write-3qdrpS1v.js +0 -201
  1255. package/dist/client--tyFmxDT.js +0 -52
  1256. package/dist/client-7_4Y21ue.d.ts +0 -122
  1257. package/dist/client-B1cjaIfv.js +0 -116
  1258. package/dist/client-B2GCMvfd.d.ts +0 -451
  1259. package/dist/client-B8cHiZfF.js +0 -67
  1260. package/dist/client-BIMg9IiF.d.ts +0 -349
  1261. package/dist/client-BKGVUgo7.js +0 -380
  1262. package/dist/client-BNaOcfeH.js +0 -58
  1263. package/dist/client-BQseXods.d.ts +0 -309
  1264. package/dist/client-BSnf6fn6.d.ts +0 -59
  1265. package/dist/client-BW3-RUbq.js +0 -235
  1266. package/dist/client-BYAY7lLs.d.ts +0 -137
  1267. package/dist/client-BcXmbm4f.js +0 -173
  1268. package/dist/client-BgmVu505.js +0 -167
  1269. package/dist/client-Bj0xrUzr.js +0 -437
  1270. package/dist/client-Bn0qqRBg.d.ts +0 -37
  1271. package/dist/client-Bni68sve.d.ts +0 -136
  1272. package/dist/client-BrtwaIBh.d.ts +0 -74
  1273. package/dist/client-BtRx0-kn.js +0 -82
  1274. package/dist/client-BteuBPIy.js +0 -337
  1275. package/dist/client-C1TxDBgX.js +0 -111
  1276. package/dist/client-C1zOmnS8.js +0 -89
  1277. package/dist/client-C56l0MnY.d.ts +0 -177
  1278. package/dist/client-CA6KuLDu.d.ts +0 -223
  1279. package/dist/client-CBcq7LBg.d.ts +0 -178
  1280. package/dist/client-CGJrSTMZ.js +0 -234
  1281. package/dist/client-CLIBcMzL.d.ts +0 -116
  1282. package/dist/client-COuIfjbB.d.ts +0 -46
  1283. package/dist/client-CVToJ4uI.js +0 -84
  1284. package/dist/client-C_0XZieg.js +0 -287
  1285. package/dist/client-CebKlRU7.js +0 -157
  1286. package/dist/client-ChOJ4v0D.js +0 -137
  1287. package/dist/client-CnENAa0E.d.ts +0 -69
  1288. package/dist/client-Cp79i2ZE.d.ts +0 -152
  1289. package/dist/client-CwKsEl6q.js +0 -99
  1290. package/dist/client-D-LPdEDQ.d.ts +0 -43
  1291. package/dist/client-D6gD9qt9.d.ts +0 -45
  1292. package/dist/client-DBwWXQKF.d.ts +0 -132
  1293. package/dist/client-DD3EcytK.js +0 -65
  1294. package/dist/client-DScMvaty.js +0 -38
  1295. package/dist/client-DT6Tvudr.d.ts +0 -54
  1296. package/dist/client-DU1_Jq4e.d.ts +0 -116
  1297. package/dist/client-Dd-a0tup.d.ts +0 -475
  1298. package/dist/client-Dh8zXgpq.js +0 -1060
  1299. package/dist/client-DkI0oyR7.js +0 -76
  1300. package/dist/client-DmjG9PHH.js +0 -211
  1301. package/dist/client-DnUFHmje.js +0 -129
  1302. package/dist/client-Do5hykMK.d.ts +0 -38
  1303. package/dist/client-DzOL3lsV.d.ts +0 -110
  1304. package/dist/client-DzukpHS1.d.ts +0 -165
  1305. package/dist/client-LngH55pZ.d.ts +0 -83
  1306. package/dist/client-PPSwiJaK.js +0 -291
  1307. package/dist/client-RoAuPQNB.d.ts +0 -103
  1308. package/dist/client-WzuQExHk.js +0 -253
  1309. package/dist/client-Y_HnZGF4.js +0 -51
  1310. package/dist/client-bDXsvSXp.d.ts +0 -90
  1311. package/dist/client-bx3Bk7c5.d.ts +0 -64
  1312. package/dist/client-jgDU7Roj.d.ts +0 -144
  1313. package/dist/client-kRvHKAKS.js +0 -60
  1314. package/dist/client-pxXoQOdC.js +0 -40
  1315. package/dist/client-yIxEJwTK.js +0 -121
  1316. package/dist/cloud-event-SPyXMdcd.d.ts +0 -64
  1317. package/dist/codecs-CQrX3ZW4.js +0 -358
  1318. package/dist/codecs-DAu2sYWn.d.ts +0 -222
  1319. package/dist/comments-CB8pFSV1.js +0 -142
  1320. package/dist/compiler-BCyHFI6n.d.ts +0 -14
  1321. package/dist/compose--4D1FoPN.js +0 -53
  1322. package/dist/composite-Dv6o2BSw.js +0 -130
  1323. package/dist/composite-KllwFim2.d.ts +0 -82
  1324. package/dist/config-BuOz_O-y.d.ts +0 -2152
  1325. package/dist/config-Dh4D8lBa.js +0 -13931
  1326. package/dist/config-Dn0cC3bM.js +0 -1093
  1327. package/dist/connector-BdCE4Efp.d.ts +0 -164
  1328. package/dist/connectors-DDiSNvkF.d.ts +0 -147
  1329. package/dist/context-9Q23weHu.d.ts +0 -524
  1330. package/dist/context-CMxVnPMY.js +0 -9
  1331. package/dist/context-CYquqpA6.js +0 -41
  1332. package/dist/controller-CSsC9s3s.js +0 -73
  1333. package/dist/controller-DAD4hbl4.d.ts +0 -52
  1334. package/dist/create-blocks-kPUhCvje.js +0 -217
  1335. package/dist/cron-_i5pBGkY.js +0 -148
  1336. package/dist/cron-route-Y0eJ-FNi.js +0 -24
  1337. package/dist/deal-forecast-CBlp20PY.js +0 -39
  1338. package/dist/define-DQznpZYl.js +0 -2023
  1339. package/dist/define-Dw7pRO4h.d.ts +0 -1123
  1340. package/dist/define-block-COpcS6aT.d.ts +0 -1338
  1341. package/dist/define-block-Dze77QTw.js +0 -56
  1342. package/dist/delegation-CeXm9AJ3.js +0 -146
  1343. package/dist/documents-kgDOHUfn.d.ts +0 -152
  1344. package/dist/embeddings-CcRP-cMN.d.ts +0 -78
  1345. package/dist/employees-Dwyvxs4r.d.ts +0 -180
  1346. package/dist/ended--Bd_Q6uL.d.ts +0 -76
  1347. package/dist/engagements-CsJhf2OM.d.ts +0 -179
  1348. package/dist/entitlements-B_ttRvI6.js +0 -45
  1349. package/dist/entitlements-DDevu4ZE.d.ts +0 -54
  1350. package/dist/entity-form-B67vq97h.d.ts +0 -82
  1351. package/dist/entity-naming-DLDhHTbK.js +0 -131
  1352. package/dist/entity-schema-BXXC1NnT.js +0 -39
  1353. package/dist/envelope-DCfHtVtZ.js +0 -90
  1354. package/dist/errors-03ysrOt4.js +0 -325
  1355. package/dist/errors-DZx8w-MH.js +0 -44
  1356. package/dist/escape-like-BfXS-iVe.d.ts +0 -30
  1357. package/dist/eve-BlJI8ZXL.d.ts +0 -157
  1358. package/dist/event-calendar-D3SVa3AE.d.ts +0 -65
  1359. package/dist/events-DbLjvxDX.d.ts +0 -852
  1360. package/dist/executor-BDAGTc_O.js +0 -207
  1361. package/dist/executor-BElVQpaB.d.ts +0 -188
  1362. package/dist/executor-CPyrQdjh.d.ts +0 -700
  1363. package/dist/executor-CsTaO3AT.d.ts +0 -37
  1364. package/dist/executor-DQoczQZJ.d.ts +0 -104
  1365. package/dist/executor-QtVn0axs.js +0 -147
  1366. package/dist/executor-o9HkOJ0m.js +0 -869
  1367. package/dist/expo-sqlite/index.d.ts +0 -61
  1368. package/dist/expo-sqlite/index.js +0 -110
  1369. package/dist/feature-BBLdbGu7.js +0 -224
  1370. package/dist/field-errors-vshYTVKr.d.ts +0 -166
  1371. package/dist/field-formats-DbjaDXoZ.d.ts +0 -39
  1372. package/dist/fields-CanaxA0U.d.ts +0 -75
  1373. package/dist/fields-DK30XCgc.js +0 -107
  1374. package/dist/filter-evaluate-C3i2bGfk.d.ts +0 -37
  1375. package/dist/filter-evaluate-CRDXv0Dl.js +0 -217
  1376. package/dist/filter-query-D4ZSwbcJ.js +0 -524
  1377. package/dist/filter-query-o3b_GuyC.d.ts +0 -133
  1378. package/dist/flags-BTDPaN11.d.ts +0 -246
  1379. package/dist/flags-BhYByvP1.js +0 -279
  1380. package/dist/flows/index.d.ts +0 -247
  1381. package/dist/flows/index.js +0 -229
  1382. package/dist/format-AYHceC2m.d.ts +0 -79
  1383. package/dist/framework-CXoyWGgd.js +0 -57
  1384. package/dist/framework-FxfJpyoF.d.ts +0 -41
  1385. package/dist/function-contract-vPqwt1j4.d.ts +0 -27
  1386. package/dist/gateway-DI8dbOml.d.ts +0 -115
  1387. package/dist/graph-B4eubUQG.js +0 -365
  1388. package/dist/groups-CxonH3u5.js +0 -16
  1389. package/dist/http-51t9xppD.js +0 -28
  1390. package/dist/impersonation-CZD9AOAk.js +0 -62
  1391. package/dist/inbox-BPBb6etH.d.ts +0 -321
  1392. package/dist/index-BSUX4dlB.d.ts +0 -305
  1393. package/dist/index-BgSuw4CC.d.ts +0 -151
  1394. package/dist/index-C7CrdGgz.d.ts +0 -562
  1395. package/dist/index-CvxK2BZS.d.ts +0 -847
  1396. package/dist/index-CxZQgNVE.d.ts +0 -62
  1397. package/dist/index-D4420jLW.d.ts +0 -66
  1398. package/dist/index-DK-YTWLd.d.ts +0 -443
  1399. package/dist/index-DbXWcrOI.d.ts +0 -577
  1400. package/dist/index-U0o7kU0s.d.ts +0 -69
  1401. package/dist/index-WEafENqH.d.ts +0 -149
  1402. package/dist/index-Yep7auV-.d.ts +0 -287
  1403. package/dist/index-eTY4kJzo.d.ts +0 -163
  1404. package/dist/invalidate-BLiBFbLy.d.ts +0 -19
  1405. package/dist/json-schema-DWDTfD8J.js +0 -888
  1406. package/dist/jwks-cache-CRymV-Dr.js +0 -49
  1407. package/dist/kit-Ct4Z6GIO.js +0 -127
  1408. package/dist/kit-DKfbNTAA.d.ts +0 -94
  1409. package/dist/knowledge-BKGrXdS_.js +0 -272
  1410. package/dist/knowledge-CFkCRxO9.d.ts +0 -202
  1411. package/dist/list-query-BtluNnYk.d.ts +0 -222
  1412. package/dist/list-query-CuS1w2Af.js +0 -559
  1413. package/dist/live-CZtRMh62.js +0 -246
  1414. package/dist/mentions-ByYnRNIG.js +0 -114
  1415. package/dist/messages-DNzIVvgN.js +0 -492
  1416. package/dist/messaging-BC-P-yAv.js +0 -329
  1417. package/dist/messaging-CZ6aWb10.d.ts +0 -297
  1418. package/dist/methods-7u6vSgz_.js +0 -11
  1419. package/dist/mfa-wrx1rqJT.d.ts +0 -36
  1420. package/dist/model-Btl8X9cs.d.ts +0 -326
  1421. package/dist/model-messages-D-jVOIOK.js +0 -206
  1422. package/dist/money-codec-jMP0PQLZ.js +0 -41
  1423. package/dist/onboarding-CGMuX7sP.js +0 -68
  1424. package/dist/openapi/index.d.ts +0 -5
  1425. package/dist/openapi/index.js +0 -36
  1426. package/dist/operations-nWYRexee.d.ts +0 -6
  1427. package/dist/options-289GJc2l.d.ts +0 -52
  1428. package/dist/options-70OsM-wK.js +0 -10
  1429. package/dist/options-B7EJaOX-.js +0 -5
  1430. package/dist/options-BkpqTGrJ.js +0 -8
  1431. package/dist/options-Blg8lAkz.js +0 -9
  1432. package/dist/options-Bn4cu0gt.js +0 -5
  1433. package/dist/options-BnoJOwXK.js +0 -8
  1434. package/dist/options-C2HesT4A.js +0 -9
  1435. package/dist/options-C3EzJATk.js +0 -10
  1436. package/dist/options-C3hZ1fbC.js +0 -10
  1437. package/dist/options-CAzVf-1T.js +0 -8
  1438. package/dist/options-CGKSUFUq.js +0 -5
  1439. package/dist/options-CGjGE8xS.js +0 -12
  1440. package/dist/options-CUqQ9pm7.js +0 -9
  1441. package/dist/options-CalPr6kN.d.ts +0 -12
  1442. package/dist/options-CfxBliP6.d.ts +0 -17
  1443. package/dist/options-ChD15QxJ.js +0 -9
  1444. package/dist/options-CmoJsd4V.d.ts +0 -8
  1445. package/dist/options-CyD7OObW.js +0 -17
  1446. package/dist/options-D1blDihM.js +0 -9
  1447. package/dist/options-D2Gd6VfS.js +0 -8
  1448. package/dist/options-D4aD9qwB.js +0 -5
  1449. package/dist/options-D65jzn7S.js +0 -5
  1450. package/dist/options-D7f2VKzj.js +0 -25
  1451. package/dist/options-D7sgG1bQ.js +0 -16
  1452. package/dist/options-DJm31rsi.d.ts +0 -16
  1453. package/dist/options-DXqcJyOP.js +0 -10
  1454. package/dist/options-DXuA4JVa.d.ts +0 -15
  1455. package/dist/options-DZupPoI0.d.ts +0 -10
  1456. package/dist/options-Dm-2crCx.d.ts +0 -273
  1457. package/dist/options-Dmg1Da9P.js +0 -25
  1458. package/dist/options-DsUgamiy.js +0 -5
  1459. package/dist/options-DujalSfR.js +0 -10
  1460. package/dist/options-Dz3hJxUw.d.ts +0 -10
  1461. package/dist/options-HSv8R6h5.js +0 -13
  1462. package/dist/options-I8zVkB_y.js +0 -8
  1463. package/dist/options-MHhjOoWz.js +0 -5
  1464. package/dist/options-MLxMkd5B.js +0 -11
  1465. package/dist/options-MQfTGMgP.d.ts +0 -14
  1466. package/dist/options-OJ5zmgr8.js +0 -10
  1467. package/dist/options-OMAUVcKK.d.ts +0 -10
  1468. package/dist/options-_9arpsX9.js +0 -11
  1469. package/dist/options-a-28mlYT.js +0 -9
  1470. package/dist/options-kLKILdIu.js +0 -10
  1471. package/dist/options-n22NK3PL.js +0 -8
  1472. package/dist/options-qU8vgxhO.js +0 -18
  1473. package/dist/options-te6d5-yz.d.ts +0 -19
  1474. package/dist/options-wFnK3qWl.js +0 -9
  1475. package/dist/options-xVAy3UsV.js +0 -9
  1476. package/dist/organizations-DtehZg3J.js +0 -401
  1477. package/dist/outbox-CsF_iKjx.d.ts +0 -199
  1478. package/dist/overlay/index.d.ts +0 -249
  1479. package/dist/overlay/index.js +0 -561
  1480. package/dist/payments-BtScsgPS.js +0 -16
  1481. package/dist/payments-CBzQIjoX.d.ts +0 -114
  1482. package/dist/permissions-BetA_Fo_.js +0 -34
  1483. package/dist/plugin-Ar5546xh.d.ts +0 -202
  1484. package/dist/plugin-D9bYbYli.js +0 -45
  1485. package/dist/plugins/actor/index.d.ts +0 -19
  1486. package/dist/plugins/actor/index.js +0 -57
  1487. package/dist/plugins/rules/index.d.ts +0 -96
  1488. package/dist/plugins/rules/index.js +0 -235
  1489. package/dist/plugins/soft-delete/index.d.ts +0 -39
  1490. package/dist/plugins/soft-delete/index.js +0 -90
  1491. package/dist/plugins/tenant/index.d.ts +0 -60
  1492. package/dist/plugins/tenant/index.js +0 -119
  1493. package/dist/plugins/timestamps/index.d.ts +0 -11
  1494. package/dist/plugins/timestamps/index.js +0 -47
  1495. package/dist/plugins/validation/index.d.ts +0 -24
  1496. package/dist/plugins/validation/index.js +0 -83
  1497. package/dist/pool-CRkU15dA.d.ts +0 -123
  1498. package/dist/pool-errors-B17BQRW-.js +0 -27
  1499. package/dist/ports-DsJicwI2.d.ts +0 -89
  1500. package/dist/ports-yajgT0t0.js +0 -139
  1501. package/dist/postgrest-DHLlN2nS.d.ts +0 -53
  1502. package/dist/powersync/react/index.d.ts +0 -93
  1503. package/dist/powersync/react/index.js +0 -120
  1504. package/dist/preset-DzcQ5CQM.js +0 -841
  1505. package/dist/problem-BWElIgIb.js +0 -162
  1506. package/dist/problem-DpHB7tWl.d.ts +0 -79
  1507. package/dist/provider-DmiaI1qt.d.ts +0 -112
  1508. package/dist/provider-EJ0-5GwJ.js +0 -57
  1509. package/dist/push-token-BxKmYhwk.d.ts +0 -24
  1510. package/dist/queries-Dw8y9bvz.js +0 -245
  1511. package/dist/rank-result-C_sHjkiz.js +0 -18
  1512. package/dist/rank-result-DwR0FawB.d.ts +0 -14
  1513. package/dist/rate-limit-B_U12PdL.js +0 -49
  1514. package/dist/rate-limit-CrOuXfjj.d.ts +0 -50
  1515. package/dist/rate-limit-DExDw3Cy.js +0 -327
  1516. package/dist/react-28VgUbm9.js +0 -852
  1517. package/dist/react-controller-CKSdtJ10.js +0 -43
  1518. package/dist/react-env-CfA3EdBH.js +0 -20
  1519. package/dist/read-set-BAR84kPC.js +0 -199
  1520. package/dist/recordings-DgDu7AOt.d.ts +0 -119
  1521. package/dist/refusal-DXydjgsS.js +0 -64
  1522. package/dist/refusal-efy5bZMd.d.ts +0 -32
  1523. package/dist/replicas-BvIL4_jL.js +0 -94
  1524. package/dist/resolve-CzUKTIMq.d.ts +0 -289
  1525. package/dist/resolve-DAYdcs22.js +0 -892
  1526. package/dist/resolved-names-Dr7brlLL.js +0 -133
  1527. package/dist/resource-BRRU-A7j.js +0 -91
  1528. package/dist/resource-DYDEnww-.d.ts +0 -115
  1529. package/dist/resource-Dk_JYsOt.js +0 -469
  1530. package/dist/resource-execute-bT9ltHVT.d.ts +0 -15
  1531. package/dist/resource-types-Bzt_bpR5.d.ts +0 -153
  1532. package/dist/resources-BV6j5TTD.js +0 -64
  1533. package/dist/resources-Du5wcL3f.d.ts +0 -7
  1534. package/dist/respond-CZYibxUx.d.ts +0 -101
  1535. package/dist/respond-z_yfyitp.js +0 -100
  1536. package/dist/result-B3m7xtRY.js +0 -146
  1537. package/dist/result-C6jDfedy.d.ts +0 -350
  1538. package/dist/rows-Bb0EPupt.js +0 -80
  1539. package/dist/rows-CtLWqdGQ.js +0 -39
  1540. package/dist/rrule-xDm2znty.js +0 -290
  1541. package/dist/rules-DcW5mj1r.js +0 -287
  1542. package/dist/run-state-CPo-1X2B.d.ts +0 -12
  1543. package/dist/sales-lines-9HsX89aO.d.ts +0 -28
  1544. package/dist/sales-lines-BhrIx2oK.js +0 -41
  1545. package/dist/sales-shared-C_u68eq2.js +0 -22
  1546. package/dist/sales-shared-DAAGwQwN.d.ts +0 -8
  1547. package/dist/schemas-9Ci3K0Hk.js +0 -103
  1548. package/dist/schemas-ypoQZ_6N.js +0 -157
  1549. package/dist/scores-CsURQDUB.d.ts +0 -172
  1550. package/dist/scores-DdPZVVt8.js +0 -177
  1551. package/dist/search-ToCOlCZ8.js +0 -106
  1552. package/dist/sections-DjxYmpu-.js +0 -26
  1553. package/dist/server-types-BOs-eFpo.d.ts +0 -809
  1554. package/dist/session-BgsOPGZs.d.ts +0 -97
  1555. package/dist/settings-mL-i7QUM.js +0 -93
  1556. package/dist/shared-LmlfYPv4.js +0 -60
  1557. package/dist/shared-eVrl39dX.js +0 -17
  1558. package/dist/sign-in-lAyf6Ohy.js +0 -386
  1559. package/dist/signatures-GUBuhLOB.js +0 -145
  1560. package/dist/signatures-zbu6KTNQ.d.ts +0 -43
  1561. package/dist/signers-D6ecZl22.d.ts +0 -390
  1562. package/dist/signing-keys-B3RHGMMu.d.ts +0 -119
  1563. package/dist/signing-keys-fWapUzi0.js +0 -164
  1564. package/dist/solid-bind-C1jeq4Qm.d.ts +0 -11
  1565. package/dist/solid-bind-iHGfGtBK.js +0 -38
  1566. package/dist/solid-controller-DGuv7V8a.js +0 -13
  1567. package/dist/spec-CoWHDoud.js +0 -119
  1568. package/dist/spec-pins-CZ2CL8YZ.d.ts +0 -120
  1569. package/dist/spec-pins-D3Tm6HJi.js +0 -60
  1570. package/dist/sql-CVYjOUyG.js +0 -421
  1571. package/dist/sql-rQDL6PIL.js +0 -122247
  1572. package/dist/sso-B744gHeS.d.ts +0 -161
  1573. package/dist/sso-Bt9HocgW.js +0 -217
  1574. package/dist/standard-DbQsD2xZ.d.ts +0 -7
  1575. package/dist/standard-DtkpFGkS.js +0 -25
  1576. package/dist/stats-qCEV5M3B.js +0 -1147
  1577. package/dist/store-o0HwYXl8.d.ts +0 -83
  1578. package/dist/subject-readers-CsTpx44c.js +0 -49
  1579. package/dist/subject-readers-DEZ45DQF.d.ts +0 -21
  1580. package/dist/subjects-B6p4oAZJ.d.ts +0 -78
  1581. package/dist/subjects-DXFmanh5.d.ts +0 -90
  1582. package/dist/subjects-DevU_atb.js +0 -107
  1583. package/dist/support-Ds1-UCN4.js +0 -534
  1584. package/dist/support-view-vwJbRMpV.d.ts +0 -17
  1585. package/dist/svelte-bind-BHN5a8VV.js +0 -46
  1586. package/dist/svelte-bind-Ja6CtQGp.d.ts +0 -13
  1587. package/dist/svelte-controller-oFKC9AYu.js +0 -19
  1588. package/dist/table-schema-BcB-VCQb.js +0 -293
  1589. package/dist/table-schema-Cb-IV_pZ.d.ts +0 -78
  1590. package/dist/tags-CLXi2c6O.d.ts +0 -30
  1591. package/dist/tags-C_ym1yDM.js +0 -39
  1592. package/dist/tags-EnvIccSJ.js +0 -86
  1593. package/dist/tanstack-db/supabase/index.d.ts +0 -66
  1594. package/dist/tanstack-db/supabase/index.js +0 -271
  1595. package/dist/tax-CIIxd8Zf.d.ts +0 -170
  1596. package/dist/tax-DmOMjrYc.js +0 -140
  1597. package/dist/tee-DwkUvJD_.js +0 -101
  1598. package/dist/template-BWP7IXZg.js +0 -126
  1599. package/dist/temporal-required-B8qQHYbI.js +0 -20
  1600. package/dist/tenant-Bg4PDLkG.d.ts +0 -17
  1601. package/dist/tenant-DnMqeNIM.js +0 -27
  1602. package/dist/timeline-0_hTBH0-.js +0 -52
  1603. package/dist/timeline-DUUsPLv5.d.ts +0 -152
  1604. package/dist/timing-C5NzaEgy.js +0 -95
  1605. package/dist/topic-CPOmMgkf.js +0 -643
  1606. package/dist/topic-D9j8G2dw.d.ts +0 -415
  1607. package/dist/types-BEDfwXL4.d.ts +0 -251
  1608. package/dist/types-BRJHGhSq.d.ts +0 -177
  1609. package/dist/types-BTK75521.js +0 -8
  1610. package/dist/types-CGUDoF5I.d.ts +0 -624
  1611. package/dist/types-DkPE7yd2.d.ts +0 -194
  1612. package/dist/types-QHeku_6b.d.ts +0 -217
  1613. package/dist/types-uHD9yANu.d.ts +0 -700
  1614. package/dist/undo-B696duxr.d.ts +0 -46
  1615. package/dist/undo-vutx78k8.js +0 -44
  1616. package/dist/upload-claim-D_wgDbi7.js +0 -33
  1617. package/dist/usage-BI1E2940.js +0 -264
  1618. package/dist/usage-DBcVGqnr.d.ts +0 -232
  1619. package/dist/user-change-CSR_prhd.js +0 -133
  1620. package/dist/variants-DL7NpFJ7.js +0 -53
  1621. package/dist/vault-BQTdu4eH.d.ts +0 -62
  1622. package/dist/verify-27w0I5C9.js +0 -130
  1623. package/dist/verify-BmuCB4PW.d.ts +0 -146
  1624. package/dist/view-2_I-2ukO.d.ts +0 -90
  1625. package/dist/view-BtgqxQLM.js +0 -108
  1626. package/dist/vue-bind-CFxon-Vs.js +0 -45
  1627. package/dist/vue-bind-TPkbLl4z.d.ts +0 -11
  1628. package/dist/vue-controller-WtbuT-Ux.js +0 -13
  1629. package/dist/watch-CfMT6vX7.js +0 -139
  1630. package/dist/watch-DziJudwj.d.ts +0 -93
  1631. package/dist/watch-topic-CIT3UlAh.d.ts +0 -31
  1632. package/dist/wire-Bizdxvp-.js +0 -66
  1633. package/dist/work-items-Cnntm8ij.d.ts +0 -238
  1634. package/dist/workflow-builder-2q1iqHYG.js +0 -699
  1635. package/dist/workflow-sdk-BTYWQQg9.d.ts +0 -163
  1636. package/dist/workflow-sdk-_pqDUwNK.js +0 -242
  1637. package/dist/workflow-sdk-world-BIwGVy6S.js +0 -2401
  1638. package/dist/workflows-D8U7KyXJ.d.ts +0 -258
  1639. package/dist/workflows-VJBSV-QR.js +0 -285
  1640. package/skills/better-supabase/references/plugins.md +0 -71
@@ -0,0 +1,2446 @@
1
+ import { a as sqlString, i as sqlIdent } from "./template-Drgg3v2J.js";
2
+ import "./batch-limit-DKVQDz4o.js";
3
+ //#region src/sql/shared.ts
4
+ /**
5
+ * What `record` and the other statement helpers return when there is nothing to
6
+ * do.
7
+ */
8
+ const NOTHING = "null;";
9
+ /**
10
+ * `alter table ... add column if not exists` for each extra column of a managed
11
+ * table.
12
+ */
13
+ const addExtraColumns = (table, columns) => columns.map((column) => `\nalter table ${table} add column if not exists ${column.ident} ${column.type};`).join("");
14
+ /**
15
+ * A `jsonb` object of `columns` of row `alias`, keyed by column name, so reads
16
+ * return extra columns without exposing the rest of the row.
17
+ */
18
+ const columnsObject = (alias, columns) => `jsonb_build_object(${columns.map((name) => `${sqlString(name)}, ${alias}.${sqlIdent(name)}`).join(", ")})`;
19
+ /**
20
+ * `, 'fields', jsonb_build_object(...)` of the extra columns of row `alias`,
21
+ * for a read built with `jsonb_build_object`; empty without any.
22
+ */
23
+ const extraFieldsJson = (alias, extras) => extras.length === 0 ? "" : `, 'fields', ${columnsObject(alias, extras.map((extra) => extra.name))}`;
24
+ /**
25
+ * PL/pgSQL that copies the extra columns from `source`, a `jsonb` object keyed
26
+ * by column name, onto the rows of `table` (alias `x`) that `where` matches. A
27
+ * key `source` leaves out keeps the column's value, so it runs after an insert
28
+ * (the defaults stay) and on a partial update. Empty without extra columns.
29
+ */
30
+ const writeExtraColumns = (table, extras, source, where, into) => extras.length === 0 ? "" : `
31
+ 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(", ")}
32
+ 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
33
+ where ${where}${into === void 0 ? "" : `\n returning x.* into ${into}`};`;
34
+ /**
35
+ * `json` (a `jsonb` expression of row `alias`) with the extra columns under
36
+ * `fields`, or `json` itself without any.
37
+ */
38
+ const withExtraFields = (json, alias, extras) => extras.length === 0 ? json : `(${json} || jsonb_build_object('fields', ${columnsObject(alias, extras.map((extra) => extra.name))}))`;
39
+ /** The `fields jsonb` parameter for `columns`; see `ExtraFieldsArg`. */
40
+ function extraFieldsArg(columns) {
41
+ const on = columns.length > 0;
42
+ return {
43
+ param: on ? ", fields jsonb default null" : "",
44
+ type: on ? ", jsonb" : "",
45
+ contract: on ? ["jsonb"] : [],
46
+ drop: (fn, types) => `drop function if exists ${fn}(${on ? types : [types, "jsonb"].filter((type) => type !== "").join(", ")});`
47
+ };
48
+ }
49
+ const SCHEMA = `create schema if not exists better_supabase;
50
+ grant usage on schema better_supabase to anon, authenticated, service_role;`;
51
+ /**
52
+ * A SQL condition true for the service role and for a direct admin connection
53
+ * (no JWT, a privileged session user), which may act for others.
54
+ */
55
+ const SERVICE_CALLER = "coalesce(nullif((select auth.jwt()) ->> 'role', ''), session_user::text) in ('service_role', 'postgres', 'supabase_admin')";
56
+ /**
57
+ * The `organization.member_added` record for a module that adds a member, so
58
+ * every module writes the same payload. Each value is a SQL expression.
59
+ */
60
+ function memberAddedRecord(ctx, member) {
61
+ return ctx.record({
62
+ type: "organization.member_added",
63
+ payload: `jsonb_build_object('organizationId', ${member.tenant}::text, 'userId', ${member.user}, 'role', ${member.role})`,
64
+ subject: `'organizations/' || ${member.tenant}::text`,
65
+ tenant: member.tenant,
66
+ audit: {
67
+ category: "membership",
68
+ targetType: "user",
69
+ recordId: `${member.user}::text`
70
+ }
71
+ });
72
+ }
73
+ /**
74
+ * Creates the module's schema when it isn't `better_supabase`, then the module
75
+ * schema.
76
+ */
77
+ function schemaPreamble(ctx) {
78
+ if (ctx.schemaName === "better_supabase") return SCHEMA;
79
+ return `${SCHEMA}
80
+ create schema if not exists ${ctx.schema};
81
+ grant usage on schema ${ctx.schema} to anon, authenticated, service_role;`;
82
+ }
83
+ /** A claim from the top level of the token, then `app_metadata`. */
84
+ function jwtClaim(name) {
85
+ return `coalesce(auth.jwt() ->> ${sqlString(name)}, auth.jwt() -> 'app_metadata' ->> ${sqlString(name)})`;
86
+ }
87
+ /** `table` or `schema.table` as `[schema, table]`, in `public` without a schema. */
88
+ function splitTable(name) {
89
+ const parts = name.split(".");
90
+ if (parts.length > 2 || parts.some((part) => part.length === 0)) throw new TypeError(`"${name}" must be "table" or "schema.table"`);
91
+ return parts.length === 2 ? [parts[0], parts[1]] : ["public", parts[0]];
92
+ }
93
+ /** `table` or `schema.table`, quoted. */
94
+ function quotedTable(name) {
95
+ const [schema, table] = splitTable(name);
96
+ return `${sqlIdent(schema)}.${sqlIdent(table)}`;
97
+ }
98
+ /** `schema.table.column` split into its quoted table and column. */
99
+ function columnRef(where, value) {
100
+ const parts = value.split(".");
101
+ if (parts.length !== 3 || parts.some((part) => part.length === 0)) throw new TypeError(`${where} must be "schema.table.column", got "${value}"`);
102
+ const [schema, table, column] = parts;
103
+ return {
104
+ table: `${sqlIdent(schema)}.${sqlIdent(table)}`,
105
+ column: sqlIdent(column)
106
+ };
107
+ }
108
+ const QUOTED_IDENT = /^"(.*)"$/s;
109
+ /**
110
+ * Replaces the check constraints on one column of a table a module created
111
+ * earlier: `create table if not exists` never changes an inline check, and its
112
+ * generated name follows the table's configured name. For upgrade steps.
113
+ * `column` is a quoted identifier; the catalog stores the bare name.
114
+ */
115
+ function replaceColumnCheck(check) {
116
+ const column = QUOTED_IDENT.exec(check.column)?.[1]?.replaceAll("\"\"", "\"") ?? check.column;
117
+ return `do $$
118
+ declare
119
+ v_name name;
120
+ begin
121
+ for v_name in
122
+ select c.conname from pg_catalog.pg_constraint c
123
+ join pg_catalog.pg_attribute a on a.attrelid = c.conrelid and a.attnum = c.conkey[1]
124
+ where c.conrelid = ${sqlString(check.table)}::regclass and c.contype = 'c'
125
+ and cardinality(c.conkey) = 1 and a.attname = ${sqlString(column)}
126
+ loop
127
+ execute format('alter table %s drop constraint %I', ${sqlString(check.table)}, v_name);
128
+ end loop;
129
+ end;
130
+ $$;
131
+ alter table ${check.table} add constraint ${sqlIdent(check.name)} check (${check.expression});`;
132
+ }
133
+ /**
134
+ * Adds a foreign key to a table a module created earlier, once: `create table
135
+ * if not exists` can't add it to a table that already exists, and the
136
+ * referenced table can come from a module that renders later. Existing rows
137
+ * without a match leave the key unvalidated, with a warning.
138
+ */
139
+ function addForeignKey(fk) {
140
+ return `do $$
141
+ begin
142
+ if not exists (
143
+ select 1 from pg_constraint
144
+ where conrelid = ${sqlString(fk.table)}::regclass and conname = ${sqlString(fk.name)}
145
+ ) then
146
+ alter table ${fk.table} add constraint ${sqlIdent(fk.name)}
147
+ foreign key (${fk.column}) references ${fk.references} on delete ${fk.onDelete} not valid;
148
+ begin
149
+ alter table ${fk.table} validate constraint ${sqlIdent(fk.name)};
150
+ exception when foreign_key_violation then
151
+ raise warning '% has rows without a match, so only new rows are checked. Delete them, then run: alter table % validate constraint %',
152
+ ${sqlString(fk.table)}, ${sqlString(fk.table)}, ${sqlString(fk.name)};
153
+ end;
154
+ end if;
155
+ end;
156
+ $$;`;
157
+ }
158
+ /**
159
+ * Adds a check constraint to a table a module created earlier, once, for the
160
+ * same reason as `addForeignKey`. Existing rows that fail it leave the check
161
+ * unvalidated, with a warning, so an upgrade never stops on old data.
162
+ */
163
+ function addCheck(check) {
164
+ return `do $$
165
+ begin
166
+ if not exists (
167
+ select 1 from pg_constraint
168
+ where conrelid = ${sqlString(check.table)}::regclass and conname = ${sqlString(check.name)}
169
+ ) then
170
+ alter table ${check.table} add constraint ${sqlIdent(check.name)}
171
+ check (${check.expression}) not valid;
172
+ begin
173
+ alter table ${check.table} validate constraint ${sqlIdent(check.name)};
174
+ exception when check_violation then
175
+ raise warning '% has rows that fail %, so only new rows are checked. Fix them, then run: alter table % validate constraint %',
176
+ ${sqlString(check.table)}, ${sqlString(check.name)}, ${sqlString(check.table)}, ${sqlString(check.name)};
177
+ end;
178
+ end if;
179
+ end;
180
+ $$;`;
181
+ }
182
+ const lastName = (name) => (name.match(/"(?:[^"]|"")*"|[^."]+/gu)?.at(-1) ?? name).replace(/^"(.*)"$/su, "$1").replaceAll("\"\"", "\"");
183
+ /**
184
+ * The name `addNotNullCheck` gives the check on `column` of `table`, both
185
+ * quoted or bare, the table with or without its schema:
186
+ * `<table>_<column>_not_null`, shortened with a hash past 63 bytes.
187
+ */
188
+ function notNullCheckName(table, column) {
189
+ const name = `${lastName(table)}_${lastName(column)}_not_null`;
190
+ return name.length <= 63 ? name : `${name.slice(0, 54)}_${shortHash(name)}`;
191
+ }
192
+ /**
193
+ * The expand step for a column added nullable to a table that already has rows:
194
+ * adds `check (<column> is not null) not valid` once, without scanning the
195
+ * table. Postgres checks it on every insert and update from then on, so add it
196
+ * after `better-supabase db backfill` filled the column, or updates to rows
197
+ * that are still null fail. `doctor --fix` validates it once no row is null
198
+ * (BS236), and then `set not null` needs no scan. `table` and `column` are
199
+ * quoted identifiers, the table schema-qualified.
200
+ */
201
+ function addNotNullCheck(check) {
202
+ const name = check.name ?? notNullCheckName(check.table, check.column);
203
+ return `do $$
204
+ begin
205
+ if not exists (
206
+ select 1 from pg_constraint
207
+ where conrelid = ${sqlString(check.table)}::regclass and conname = ${sqlString(name)}
208
+ ) then
209
+ alter table ${check.table} add constraint ${sqlIdent(name)}
210
+ check (${check.column} is not null) not valid;
211
+ end if;
212
+ end;
213
+ $$;`;
214
+ }
215
+ /**
216
+ * An `updated_at` column on a managed table, kept current by the `updated-at`
217
+ * module's `set_updated_at()` (the module must require it).
218
+ */
219
+ function updatedAt(table, column) {
220
+ return `alter table ${table} add column if not exists ${column} timestamptz not null default now();
221
+ drop trigger if exists bsb_updated_at on ${table};
222
+ create trigger bsb_updated_at before update on ${table}
223
+ for each row execute function better_supabase.set_updated_at(${sqlString(column.replaceAll("\"", ""))});`;
224
+ }
225
+ function renameSql(renames) {
226
+ const schema = sqlString(renames.schema);
227
+ const q = (name) => `${sqlIdent(renames.schema)}.${sqlIdent(name)}`;
228
+ const lines = [];
229
+ let table = renames.table;
230
+ for (const [from, to] of renames.tables ?? []) {
231
+ lines.push(` if to_regclass(${sqlString(`${renames.schema}.${from}`)}) is not null
232
+ and (select c.relkind from pg_class c where c.oid = to_regclass(${sqlString(`${renames.schema}.${from}`)})) in ('r', 'p')
233
+ and to_regclass(${sqlString(`${renames.schema}.${to}`)}) is null then
234
+ alter table ${q(from)} rename to ${sqlIdent(to)};
235
+ end if;`);
236
+ if (from === table) table = to;
237
+ }
238
+ for (const [from, to] of renames.columns ?? []) lines.push(` if exists (select 1 from information_schema.columns c
239
+ where c.table_schema = ${schema} and c.table_name = ${sqlString(table)} and c.column_name = ${sqlString(from)})
240
+ and not exists (select 1 from information_schema.columns c
241
+ where c.table_schema = ${schema} and c.table_name = ${sqlString(table)} and c.column_name = ${sqlString(to)}) then
242
+ alter table ${q(table)} rename column ${sqlIdent(from)} to ${sqlIdent(to)};
243
+ end if;`);
244
+ for (const [from, to] of renames.indexes ?? []) lines.push(` if to_regclass(${sqlString(`${renames.schema}.${from}`)}) is not null
245
+ and to_regclass(${sqlString(`${renames.schema}.${to}`)}) is null then
246
+ alter index ${q(from)} rename to ${sqlIdent(to)};
247
+ end if;`);
248
+ for (const [from, to, args] of renames.functions ?? []) lines.push(` if to_regprocedure(${sqlString(`${renames.schema}.${from}(${args})`)}) is not null
249
+ and to_regprocedure(${sqlString(`${renames.schema}.${to}(${args})`)}) is null then
250
+ alter function ${q(from)}(${args}) rename to ${sqlIdent(to)};
251
+ end if;`);
252
+ if (lines.length === 0) return "";
253
+ return `do $$
254
+ begin
255
+ ${lines.join("\n")}
256
+ end;
257
+ $$;`;
258
+ }
259
+ /**
260
+ * A SQL condition true when `organization` names no row of the installed
261
+ * organizations table. False without the organizations module.
262
+ */
263
+ function organizationMissing(ctx, organization) {
264
+ if (!ctx.installed("organizations")) return "false";
265
+ const organizations = ctx.of("organizations");
266
+ return `not exists (select 1 from ${organizations.table("organizations")} o where o.${organizations.col("organizations", "id")} = ${organization})`;
267
+ }
268
+ function membershipDisabledAt(ctx) {
269
+ if (ctx.module !== "memberships" && !ctx.installed("memberships")) return;
270
+ const tenant = ctx.module === "memberships" ? ctx : ctx.of("memberships");
271
+ if (!tenant.has("memberships", "disabledAt")) return;
272
+ if (!tenant.owns("memberships") && typeof tenant.config.columns["memberships"]?.["disabledAt"] !== "string") return;
273
+ return tenant.col("memberships", "disabledAt");
274
+ }
275
+ function activeMembership(ctx, alias) {
276
+ const column = membershipDisabledAt(ctx);
277
+ return column === void 0 ? "" : ` and ${alias}.${column} is null`;
278
+ }
279
+ function membershipSuspended(ctx, tenant, user) {
280
+ const column = membershipDisabledAt(ctx);
281
+ if (column === void 0) return;
282
+ const t = ctx.module === "memberships" ? ctx : ctx.of("memberships");
283
+ 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)`;
284
+ }
285
+ /**
286
+ * `tenant_disabled(id)` and `user_disabled(uuid)` from
287
+ * `blocks.permissions.disabled`. Without a column they return false, so callers
288
+ * don't need to know whether it is configured.
289
+ */
290
+ function disabledHelpers(ctx) {
291
+ const disabled = ctx.modules.permissions?.disabled ?? {};
292
+ const id = ctx.idType;
293
+ const organizations = managedOrganizations(ctx);
294
+ let tenantCheck = "false";
295
+ if (disabled.tenant !== void 0) tenantCheck = disabledCheck("blocks.permissions.disabled.tenant", disabled.tenant, {
296
+ key: "\"id\"",
297
+ alias: "t",
298
+ value: "tenant_disabled.tenant"
299
+ });
300
+ 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 ")}))`;
301
+ const userCheck = disabled.user === void 0 ? "false" : disabledCheck("blocks.permissions.disabled.user", disabled.user, {
302
+ key: sqlIdent(disabled.userKey ?? "id"),
303
+ alias: "u",
304
+ value: "user_disabled.user_id"
305
+ });
306
+ return `
307
+ -- Disabled tenants and users get no permissions and no membership claims
308
+ -- (blocks.permissions.disabled; with the managed organizations module, its
309
+ -- disabled_at and deleted_at columns).
310
+ create or replace function better_supabase.tenant_disabled(tenant ${id})
311
+ returns boolean
312
+ language sql
313
+ stable
314
+ security definer
315
+ set search_path = ''
316
+ as $$
317
+ select ${tenantCheck}
318
+ $$;
319
+
320
+ create or replace function better_supabase.user_disabled(user_id uuid)
321
+ returns boolean
322
+ language sql
323
+ stable
324
+ security definer
325
+ set search_path = ''
326
+ as $$
327
+ select ${userCheck}
328
+ $$;
329
+
330
+ revoke execute on function better_supabase.tenant_disabled(${id}) from public, anon, authenticated;
331
+ revoke execute on function better_supabase.user_disabled(uuid) from public, anon, authenticated;
332
+ grant execute on function better_supabase.tenant_disabled(${id}) to service_role, supabase_auth_admin;
333
+ grant execute on function better_supabase.user_disabled(uuid) to service_role, supabase_auth_admin;`;
334
+ }
335
+ /**
336
+ * Whether `disabledHelpers` reads the managed organizations table, which a
337
+ * later file creates: the caller turns `check_function_bodies` off around it.
338
+ */
339
+ /**
340
+ * The condition that `value` is disabled: a set column (`schema.table.column`,
341
+ * matched on `key`), or no active row (an authorization provider's suspension
342
+ * row, where a missing row counts as disabled).
343
+ */
344
+ function disabledCheck(where, config, match) {
345
+ const { alias: d, value } = match;
346
+ if (typeof config === "string") {
347
+ const ref = columnRef(where, config);
348
+ return `exists (select 1 from ${ref.table} ${d} where ${d}.${match.key} = ${value} and ${d}.${ref.column} is not null)`;
349
+ }
350
+ const parts = config.table.split(".");
351
+ if (parts.length !== 2 || parts.some((part) => part.length === 0)) throw new TypeError(`${where}.table must be "schema.table", got "${config.table}"`);
352
+ const active = [`${d}.${sqlIdent(config.id)} = ${value}`];
353
+ if (config.disabledAt !== void 0) active.push(`${d}.${sqlIdent(config.disabledAt)} is null`);
354
+ if (config.status !== void 0) {
355
+ if (!config.active || config.active.length === 0) throw new TypeError(`${where}.status needs the active values in active`);
356
+ active.push(`${d}.${sqlIdent(config.status)}::text in (${config.active.map(sqlString).join(", ")})`);
357
+ }
358
+ if (config.disabledAt === void 0 && config.status === void 0) throw new TypeError(`${where} needs disabledAt, status or both`);
359
+ return `not exists (select 1 from ${parts.map((part) => sqlIdent(part)).join(".")} ${d} where ${active.join(" and ")})`;
360
+ }
361
+ /**
362
+ * Whether the `access` module's file defines `tenant_disabled` and
363
+ * `user_disabled`: it does whenever it is installed (or configured) outside
364
+ * custom mode, and the `tenant` module's file then leaves them out, so each
365
+ * function is defined in one file.
366
+ */
367
+ function accessDefinesDisabledHelpers(ctx) {
368
+ const access = ctx.modules.permissions;
369
+ if (!ctx.installed("permissions") && access === void 0) return false;
370
+ return (access?.mode ?? "managed") !== "custom";
371
+ }
372
+ function disabledHelpersNeedLaterTables(ctx) {
373
+ return !ctx.modules.permissions?.disabled?.tenant && managedOrganizations(ctx) !== void 0;
374
+ }
375
+ /**
376
+ * The managed organizations table and its disabling columns, when installed and
377
+ * managed.
378
+ */
379
+ function managedOrganizations(ctx) {
380
+ if (!ctx.installed("organizations")) return;
381
+ const organizations = ctx.of("organizations");
382
+ if (!organizations.owns("organizations")) return;
383
+ const flags = ["disabledAt", "deletedAt"].filter((logical) => organizations.has("organizations", logical)).map((logical) => organizations.col("organizations", logical));
384
+ if (flags.length === 0) return;
385
+ return {
386
+ table: organizations.table("organizations"),
387
+ id: organizations.col("organizations", "id"),
388
+ flags
389
+ };
390
+ }
391
+ /**
392
+ * Another row trigger on `target` whose function name matches `pattern` does
393
+ * the module trigger's job twice. `track_*` warns about it, or drops it with
394
+ * `replace_trigger => true`.
395
+ */
396
+ const EQUIVALENT_TRIGGERS = `
397
+ create or replace function better_supabase.replace_equivalent_triggers(
398
+ target regclass,
399
+ module_trigger text,
400
+ pattern text,
401
+ replace_trigger boolean
402
+ )
403
+ returns void
404
+ language plpgsql
405
+ set search_path = ''
406
+ as $$
407
+ declare
408
+ found record;
409
+ begin
410
+ for found in
411
+ select t.tgname as name, p.proname as fn
412
+ from pg_catalog.pg_trigger t
413
+ join pg_catalog.pg_proc p on p.oid = t.tgfoid
414
+ where t.tgrelid = replace_equivalent_triggers.target
415
+ and not t.tgisinternal
416
+ and t.tgname <> replace_equivalent_triggers.module_trigger
417
+ and p.proname ~* replace_equivalent_triggers.pattern
418
+ loop
419
+ if replace_trigger then
420
+ execute format('drop trigger %I on %s', found.name, target);
421
+ else
422
+ raise warning '% already has trigger % (%), which does what % does. Pass replace_trigger => true to drop it.',
423
+ target, found.name, found.fn, module_trigger;
424
+ end if;
425
+ end loop;
426
+ end;
427
+ $$;
428
+ revoke execute on function better_supabase.replace_equivalent_triggers(regclass, text, text, boolean) from public, anon, authenticated;`;
429
+ /** FNV-1a, as 8 hex digits: a stable suffix that keeps two names apart. */
430
+ function shortHash(text) {
431
+ let hash = 2166136261;
432
+ for (let index = 0; index < text.length; index += 1) {
433
+ hash ^= text.codePointAt(index) ?? 0;
434
+ hash = Math.imul(hash, 16777619) >>> 0;
435
+ }
436
+ return hash.toString(16).padStart(8, "0");
437
+ }
438
+ /**
439
+ * Adds CHECK `name` on `table` (quoted) unless a re-run finds it already
440
+ * checking `expression`: the constraint comment records a hash of the
441
+ * expression, so an unchanged check skips the table scan under ACCESS
442
+ * EXCLUSIVE. `notValid` leaves existing rows unchecked.
443
+ */
444
+ function ensureCheck(table, name, expression, options = {}) {
445
+ const marker = sqlString(`better-supabase check ${shortHash(`${expression}|${options.notValid === true}`)}`);
446
+ const constraint = sqlIdent(name);
447
+ return `do $$
448
+ begin
449
+ if coalesce(obj_description((
450
+ select c.oid from pg_catalog.pg_constraint c
451
+ where c.conrelid = ${sqlString(table)}::regclass and c.conname = ${sqlString(name)}
452
+ ), 'pg_constraint'), '') <> ${marker} then
453
+ alter table ${table} drop constraint if exists ${constraint};
454
+ alter table ${table} add constraint ${constraint} check (${expression})${options.notValid === true ? " not valid" : ""};
455
+ comment on constraint ${constraint} on ${table} is ${marker};
456
+ end if;
457
+ end;
458
+ $$;`;
459
+ }
460
+ /**
461
+ * The constraint and trigger name of a check. A key that sanitizing or the
462
+ * 63-byte limit would change (`notify.email`, `notify-email`, a long key) gets
463
+ * a hash of the key, so two keys never share a name and drop each other's
464
+ * check.
465
+ */
466
+ function jsonCheckName(check) {
467
+ const base = `bsb_json_${check.column}`;
468
+ if (!check.where) return base.slice(0, 63);
469
+ const key = check.where.value;
470
+ const clean = key.replaceAll(/[^a-z0-9_]/gi, "_");
471
+ const plain = `${base}_${clean}`;
472
+ if (clean === key && plain.length <= 63) return plain;
473
+ return `${plain.slice(0, 54)}_${shortHash(key)}`;
474
+ }
475
+ function jsonSchemaChecks(checks) {
476
+ if (checks.length === 0) return "";
477
+ return `\n-- config.json schemas
478
+ -- Each check is added not valid and validated separately. On a large table,
479
+ -- move the validate statements to a later migration: adding a not valid check
480
+ -- blocks writes only briefly, and validating takes a lock that lets writes
481
+ -- continue. The trigger of the same name reports which part of the schema failed.
482
+ ${checks.map((check) => {
483
+ const target = quotedTable(check.table);
484
+ const name = sqlIdent(jsonCheckName(check));
485
+ const schemaText = sqlString(JSON.stringify(check.schema));
486
+ const matches = `extensions.jsonb_matches_schema(${schemaText}::json, ${sqlIdent(check.column)})`;
487
+ const columns = check.where ? `${sqlIdent(check.column)}, ${sqlIdent(check.where.column)}` : sqlIdent(check.column);
488
+ const args = [
489
+ sqlString(check.column),
490
+ schemaText,
491
+ ...check.where ? [sqlString(check.where.column), sqlString(check.where.value)] : []
492
+ ].join(", ");
493
+ return [
494
+ `alter table ${target} drop constraint if exists ${name};`,
495
+ `alter table ${target} add constraint ${name}`,
496
+ ` check (${check.where ? `${sqlIdent(check.where.column)} <> ${sqlString(check.where.value)} or ` : ""}${matches}) not valid;`,
497
+ `alter table ${target} validate constraint ${name};`,
498
+ `drop trigger if exists ${name} on ${target};`,
499
+ `create trigger ${name} before insert or update of ${columns} on ${target}`,
500
+ ` for each row execute function better_supabase.check_json_schema(${args});`
501
+ ].join("\n");
502
+ }).join("\n\n")}\n`;
503
+ }
504
+ /** SQL that takes every privilege on a table from `anon` and `authenticated`. */
505
+ const revokeTable = (table) => `revoke all on ${table} from anon, authenticated;`;
506
+ /**
507
+ * One policy per command for rows `authenticated` owns. A permissive `for all`
508
+ * policy would also grant writes on its own, so the read-only actor check
509
+ * (which wraps only insert, update and delete policies) could never refuse
510
+ * them. `legacy` is the name of the `for all` policy this replaces.
511
+ */
512
+ function ownRowPolicies(options) {
513
+ const { table, legacy, name, using, check } = options;
514
+ const create = (command, body) => `drop policy if exists ${sqlIdent(name(command))} on ${table};
515
+ create policy ${sqlIdent(name(command))} on ${table} ${body};`;
516
+ return [
517
+ `drop policy if exists ${sqlIdent(legacy)} on ${table};`,
518
+ create("read", `for select to authenticated using (${using})`),
519
+ create("insert", `for insert to authenticated with check (${check})`),
520
+ create("update", `for update to authenticated using (${using}) with check (${check})`),
521
+ create("delete", `for delete to authenticated using (${using})`)
522
+ ].join("\n");
523
+ }
524
+ /**
525
+ * SQL that turns on RLS for a table the module manages, takes it from `anon`
526
+ * and `authenticated` and gives it to the service role. `read` grants `select`
527
+ * back to `authenticated`, for tables its policies expose.
528
+ */
529
+ const lockTable = (table, options = {}) => `alter table ${table} enable row level security;
530
+ ${revokeTable(table)}
531
+ ${options.read ? `grant select on ${table} to authenticated;\n` : ""}grant all on ${table} to service_role;`;
532
+ /**
533
+ * Monthly range partitions for any table created `partition by range` on a
534
+ * timestamptz column: a registry, `ensure_partitions(parent, months_ahead)`,
535
+ * which creates `<parent>_pYYYYMM` for this month and the next ones (UTC
536
+ * bounds) with RLS on and the client roles revoked, `maintain_partitions()` for
537
+ * every registered table, and `expired_partitions(parent, cutoff)`, the
538
+ * partitions wholly before `cutoff`. A table that isn't partitioned (one
539
+ * created before the option) is left alone.
540
+ */
541
+ const MONTHLY_PARTITIONS = `create table if not exists better_supabase.partitioned_tables (
542
+ parent regclass primary key,
543
+ months_ahead integer not null default 3 check (months_ahead between 1 and 24)
544
+ );
545
+ ${lockTable("better_supabase.partitioned_tables")}
546
+
547
+ create or replace function better_supabase.ensure_partitions(parent regclass, months_ahead integer default 3)
548
+ returns integer
549
+ language plpgsql
550
+ security definer
551
+ set search_path = ''
552
+ as $$
553
+ declare
554
+ v_schema text;
555
+ v_name text;
556
+ v_month timestamp := date_trunc('month', now() at time zone 'UTC');
557
+ v_part text;
558
+ v_made integer := 0;
559
+ begin
560
+ select n.nspname, c.relname into v_schema, v_name
561
+ from pg_catalog.pg_class c join pg_catalog.pg_namespace n on n.oid = c.relnamespace
562
+ where c.oid = parent and c.relkind = 'p';
563
+ if v_name is null then
564
+ return 0;
565
+ end if;
566
+ for i in 0..months_ahead loop
567
+ v_part := v_name || '_p' || to_char(v_month + make_interval(months => i), 'YYYYMM');
568
+ continue when pg_catalog.to_regclass(format('%I.%I', v_schema, v_part)) is not null;
569
+ begin
570
+ execute format(
571
+ 'create table %I.%I partition of %s for values from (%L) to (%L)',
572
+ v_schema, v_part, parent,
573
+ (v_month + make_interval(months => i)) at time zone 'UTC',
574
+ (v_month + make_interval(months => i + 1)) at time zone 'UTC'
575
+ );
576
+ exception when check_violation then
577
+ -- The default partition already holds rows of that month.
578
+ raise notice '% not created: the default partition has rows in its range', v_part;
579
+ continue;
580
+ end;
581
+ execute format('alter table %I.%I enable row level security', v_schema, v_part);
582
+ execute format('revoke all on %I.%I from anon, authenticated', v_schema, v_part);
583
+ v_made := v_made + 1;
584
+ end loop;
585
+ return v_made;
586
+ end;
587
+ $$;
588
+
589
+ create or replace function better_supabase.maintain_partitions()
590
+ returns integer
591
+ language plpgsql
592
+ security definer
593
+ set search_path = ''
594
+ as $$
595
+ declare
596
+ v_made integer := 0;
597
+ v_table record;
598
+ begin
599
+ for v_table in select t.parent, t.months_ahead from better_supabase.partitioned_tables t loop
600
+ v_made := v_made + better_supabase.ensure_partitions(v_table.parent, v_table.months_ahead);
601
+ end loop;
602
+ return v_made;
603
+ end;
604
+ $$;
605
+
606
+ create or replace function better_supabase.expired_partitions(parent regclass, cutoff timestamptz)
607
+ returns setof regclass
608
+ language sql
609
+ stable
610
+ security definer
611
+ set search_path = ''
612
+ as $$
613
+ select c.oid::regclass
614
+ from pg_catalog.pg_inherits i
615
+ join pg_catalog.pg_class c on c.oid = i.inhrelid
616
+ where i.inhparent = parent
617
+ and c.relname ~ '_p[0-9]{6}$'
618
+ and cutoff is not null
619
+ and (to_date(right(c.relname, 6), 'YYYYMM')::timestamp + interval '1 month') at time zone 'UTC' <= cutoff
620
+ order by c.relname
621
+ $$;
622
+ revoke execute on function better_supabase.ensure_partitions(regclass, integer) from public, anon, authenticated;
623
+ revoke execute on function better_supabase.maintain_partitions() from public, anon, authenticated;
624
+ revoke execute on function better_supabase.expired_partitions(regclass, timestamptz) from public, anon, authenticated;
625
+ grant execute on function better_supabase.maintain_partitions() to service_role;`;
626
+ /**
627
+ * SQL that registers a partitioned table for `maintain_partitions()` and
628
+ * creates its first partitions.
629
+ */
630
+ const registerPartitions = (table, monthsAhead = 3) => `insert into better_supabase.partitioned_tables (parent, months_ahead)
631
+ select ${sqlString(table)}::regclass, ${monthsAhead}
632
+ where exists (select 1 from pg_catalog.pg_class c where c.oid = ${sqlString(table)}::regclass and c.relkind = 'p')
633
+ on conflict (parent) do nothing;
634
+ select better_supabase.ensure_partitions(${sqlString(table)}::regclass, ${monthsAhead});`;
635
+ /**
636
+ * The quoted name of a table's default partition: `<name>_default` in its
637
+ * schema.
638
+ */
639
+ const defaultPartitionName = (table) => `${sqlIdent(table.schema)}.${sqlIdent(`${table.name}_default`)}`;
640
+ /**
641
+ * SQL that gives a partitioned `table` its `fallback` default partition, for
642
+ * rows outside the monthly ones. A table created unpartitioned is skipped.
643
+ */
644
+ const defaultPartition = (table, fallback) => `do $$
645
+ begin
646
+ if (select c.relkind from pg_catalog.pg_class c where c.oid = ${sqlString(table)}::regclass) = 'p' then
647
+ create table if not exists ${fallback} partition of ${table} default;
648
+ alter table ${fallback} enable row level security;
649
+ revoke all on ${fallback} from anon, authenticated;
650
+ end if;
651
+ end;
652
+ $$;`;
653
+ /**
654
+ * A security definer function that runs `call` once per element of a jsonb
655
+ * array, so a sink sends a whole batch in one round trip. Every element keeps
656
+ * the single-row function's checks and gets its own savepoint: it returns
657
+ * `{"<result>": value}` or `{"error": {code, message, hint}}`, in order, and
658
+ * one bad event never rolls back the others. More than `max` elements fail with
659
+ * 22023 before any is written. The caller adds the grants.
660
+ */
661
+ function batchFunction(options) {
662
+ const max = options.max ?? 1e3;
663
+ const value = ([name, type, fallback]) => {
664
+ const raw = type === "jsonb" ? `nullif(batch_event -> ${sqlString(name)}, 'null'::jsonb)` : type === "text" ? `batch_event ->> ${sqlString(name)}` : `(batch_event ->> ${sqlString(name)})::${type}`;
665
+ return fallback === void 0 ? raw : `coalesce(${raw}, ${fallback})`;
666
+ };
667
+ return `create or replace function ${options.name}(events jsonb)
668
+ returns jsonb
669
+ language plpgsql
670
+ security definer
671
+ set search_path = ''
672
+ as $$
673
+ declare
674
+ batch_event jsonb;
675
+ results jsonb := '[]';
676
+ batch_result ${options.returns};
677
+ failed_state text;
678
+ failed_message text;
679
+ failed_hint text;
680
+ begin
681
+ if pg_catalog.jsonb_typeof(events) is distinct from 'array' then
682
+ raise exception '${options.name.replace(/^.*\./, "")} takes a jsonb array of events'
683
+ using errcode = '22023', hint = ${sqlString(`${options.hint}_NOT_ARRAY`)};
684
+ end if;
685
+ if pg_catalog.jsonb_array_length(events) > ${max} then
686
+ raise exception '${options.name.replace(/^.*\./, "")} got % events, more than ${max}', pg_catalog.jsonb_array_length(events)
687
+ using errcode = '22023', hint = ${sqlString(`${options.hint}_TOO_LARGE`)};
688
+ end if;
689
+ for batch_event in select e from pg_catalog.jsonb_array_elements(events) e loop
690
+ begin
691
+ batch_result := ${options.call}(
692
+ ${typeof options.args === "string" ? ` ${options.args} => batch_event` : options.args.map((arg) => ` ${arg[0]} => ${value(arg)}`).join(",\n")}
693
+ );
694
+ results := results || pg_catalog.jsonb_build_array(pg_catalog.jsonb_build_object(${sqlString(options.result)}, batch_result));
695
+ exception when others then
696
+ get stacked diagnostics
697
+ failed_state = returned_sqlstate,
698
+ failed_message = message_text,
699
+ failed_hint = pg_exception_hint;
700
+ results := results || pg_catalog.jsonb_build_array(pg_catalog.jsonb_build_object(
701
+ 'error', pg_catalog.jsonb_build_object('code', failed_state, 'message', failed_message, 'hint', nullif(failed_hint, ''))
702
+ ));
703
+ end;
704
+ end loop;
705
+ return results;
706
+ end;
707
+ $$;`;
708
+ }
709
+ /** The PL/pgSQL variables `dropExpiredPartitions` uses, for a `declare` block. */
710
+ const PARTITION_VARIABLES = `
711
+ v_part regclass;
712
+ v_part_rows integer;
713
+ v_part_busy boolean;`;
714
+ /**
715
+ * PL/pgSQL that drops each monthly partition of `table` wholly before `cutoff`
716
+ * (null drops none, as `ctx.cutoff` returns under a legal hold) and adds its
717
+ * rows to `purged`. A partition with a row that matches `busy` (a condition
718
+ * over `p`, with `$1`.. bound to `using`) stays for the row deletes, so a purge
719
+ * never drops a row it would keep. Declare `PARTITION_VARIABLES` first.
720
+ */
721
+ function dropExpiredPartitions(options) {
722
+ const indent = options.indent ?? " ";
723
+ const literal = (sql) => sql.replaceAll("'", "''");
724
+ const busy = options.busy === void 0 ? "" : `
725
+ ${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(", ")}` : ""};
726
+ ${indent} continue when v_part_busy;`;
727
+ return `for v_part in
728
+ ${indent} select p from better_supabase.expired_partitions(${sqlString(options.table)}::regclass, ${options.cutoff}) p
729
+ ${indent}loop${busy}
730
+ ${indent} execute format('select count(*)::integer from %s', v_part) into v_part_rows;
731
+ ${indent} execute format('drop table %s', v_part);
732
+ ${indent} ${options.purged} := ${options.purged} + v_part_rows;
733
+ ${indent}end loop;`;
734
+ }
735
+ /** SQL that grants a function to signed-in users and the service role. */
736
+ const userGrant = (signature) => `revoke execute on function ${signature} from public, anon;
737
+ grant execute on function ${signature} to authenticated, service_role;`;
738
+ /** SQL that grants a function to the service role only. */
739
+ const serviceGrant = (signature) => `revoke execute on function ${signature} from public, anon, authenticated;
740
+ grant execute on function ${signature} to service_role;`;
741
+ /**
742
+ * SQL that revokes a trigger function from every API role. Postgres checks
743
+ * `execute` only when the trigger is created, never when it fires, so the
744
+ * trigger keeps working while the function can't be called through RPC.
745
+ */
746
+ const triggerGrant = (signature) => `revoke execute on function ${signature} from public, anon, authenticated;`;
747
+ /**
748
+ * `serviceGrant` for each function in `schema` (as SQL, e.g. `ctx.schema`), one
749
+ * statement per function, so `blocks.<module>.api` sees the grants and writes
750
+ * an entry point for each.
751
+ */
752
+ function serviceOnly(signatures, schema = "better_supabase") {
753
+ return signatures.map((signature) => serviceGrant(`${schema}.${signature}`)).join("\n");
754
+ }
755
+ /**
756
+ * `raise exception` with an errcode and, when given, a hint the TypeScript side
757
+ * maps. Sites that put `using` on its own line, raise without an errcode or
758
+ * compute the hint stay inline: this one-line form would change SQL apps have
759
+ * generated.
760
+ */
761
+ const raise = (message, errcode, hint, ...args) => `raise exception ${sqlString(message)}${args.map((arg) => `, ${arg}`).join("")} using errcode = '${errcode}'${hint === void 0 ? "" : `, hint = '${hint}'`};`;
762
+ /**
763
+ * `raise` for a module function: the hint first, the errcode defaulting to
764
+ * insufficient privilege.
765
+ */
766
+ const fail = (code, message, errcode = "42501") => raise(message, errcode, code);
767
+ /** The hex SHA-256 of a `text` expression, as tokens and codes are stored. */
768
+ const sha256Hex = (value) => `encode(extensions.digest(${value}, 'sha256'), 'hex')`;
769
+ /** A page size: `value`, or `fallback` when null, clamped to `min`..`max`. */
770
+ const pageSize = (value, fallback, max, min = 1) => `least(greatest(coalesce(${value}, ${String(fallback)}), ${String(min)}), ${String(max)})`;
771
+ /**
772
+ * A row trigger that records writes to a table that callers change through
773
+ * `security invoker` functions or policies, which can't call `emit_event` or
774
+ * `audit_event` themselves. `written` and `removed` are `ctx.record` statements
775
+ * over `v_row`, the new row (or the old one on delete). When both are `null;`
776
+ * the trigger and its function are dropped.
777
+ */
778
+ function recordTrigger(ctx, options) {
779
+ const fn = ctx.fn(options.name);
780
+ const trigger = ctx.trigger(options.name);
781
+ if (options.written === "null;" && options.removed === "null;") return `drop trigger if exists ${trigger} on ${options.table};
782
+ drop function if exists ${fn}();`;
783
+ return `create or replace function ${fn}()
784
+ returns trigger
785
+ language plpgsql
786
+ security definer
787
+ set search_path = ''
788
+ as $$
789
+ declare
790
+ v_row ${options.table};
791
+ begin
792
+ if tg_op = 'DELETE' then
793
+ v_row := old;
794
+ ${options.removed}
795
+ else
796
+ v_row := new;
797
+ ${options.written}
798
+ end if;
799
+ return null;
800
+ end;
801
+ $$;
802
+ revoke execute on function ${fn}() from public, anon, authenticated;
803
+ drop trigger if exists ${trigger} on ${options.table};
804
+ create trigger ${trigger} after insert or update or delete on ${options.table}
805
+ for each row execute function ${fn}();`;
806
+ }
807
+ //#endregion
808
+ //#region src/sql/modules/permissions-model.ts
809
+ /**
810
+ * The `roles` model's defaults. Module actions name these keys (see
811
+ * `OPERATIONS`); `*` grants everything and `prefix.*` a prefix.
812
+ */
813
+ const DEFAULT_ROLES = {
814
+ owner: ["*"],
815
+ admin: [
816
+ "organization.read",
817
+ "organization.update",
818
+ "members.*",
819
+ "audit.read",
820
+ "audit.revert",
821
+ "webhooks.*",
822
+ "notifications.*",
823
+ "billing.*",
824
+ "api_keys.*",
825
+ "settings.*",
826
+ "usage.*",
827
+ "activity.read",
828
+ "attachments.*",
829
+ "organization.export",
830
+ "onboarding.*",
831
+ "inbox.*",
832
+ "ai_chat.*",
833
+ "ai.*",
834
+ "tags.*",
835
+ "teams.*",
836
+ "custom_fields.*",
837
+ "share_links.*",
838
+ "reminders.*",
839
+ "imports.*",
840
+ "views.*",
841
+ "relations.*",
842
+ "bulk.*",
843
+ "search.*",
844
+ "metrics.*",
845
+ "calendar.*",
846
+ "bookings.*",
847
+ "versions.*",
848
+ "trash.*",
849
+ "reactions.*",
850
+ "approvals.*",
851
+ "access_requests.*",
852
+ "documents.*",
853
+ "drive.*",
854
+ "forms.*",
855
+ "signatures.*",
856
+ "templates.*",
857
+ "time_tracking.*",
858
+ "service_principals.*",
859
+ "pipelines.*",
860
+ "parties.*",
861
+ "engagements.*",
862
+ "deals.*",
863
+ "work_items.*",
864
+ "quotes.*",
865
+ "invoices.*",
866
+ "sla.*",
867
+ "targets.*",
868
+ "hiring.*",
869
+ "employees.*",
870
+ "collections.*",
871
+ "messages.*",
872
+ "channels.*",
873
+ "mail.*",
874
+ "segments.*",
875
+ "assignment.*",
876
+ "enrichment.*",
877
+ "forecasts.*",
878
+ "history.*",
879
+ "domains.*",
880
+ "rules.*",
881
+ "reviews.*",
882
+ "leave.*",
883
+ "ledger.*",
884
+ "assets.*",
885
+ "scores.*",
886
+ "moderation.*",
887
+ "enrollments.*",
888
+ "guests.*",
889
+ "passes.*",
890
+ "billable_time.*",
891
+ "leases.*",
892
+ "expenses.*",
893
+ "donations.*",
894
+ "dispatch.*",
895
+ "shipments.*",
896
+ "contracts.*",
897
+ "controls.*",
898
+ "incidents.*",
899
+ "courses.*",
900
+ "sequences.*",
901
+ "posts.*",
902
+ "content.*"
903
+ ],
904
+ member: [
905
+ "organization.read",
906
+ "members.read",
907
+ "notifications.read",
908
+ "api_keys.own",
909
+ "settings.read",
910
+ "activity.read",
911
+ "attachments.read",
912
+ "attachments.upload",
913
+ "onboarding.read",
914
+ "inbox.read",
915
+ "inbox.reply",
916
+ "ai_chat.read",
917
+ "ai_chat.create",
918
+ "ai_chat.share",
919
+ "ai.read",
920
+ "ai.create",
921
+ "ai.share",
922
+ "custom_fields.read",
923
+ "teams.read",
924
+ "tags.read",
925
+ "tags.apply",
926
+ "share_links.read",
927
+ "reminders.read",
928
+ "views.read",
929
+ "relations.read",
930
+ "bulk.run",
931
+ "search.read",
932
+ "metrics.read",
933
+ "calendar.read",
934
+ "calendar.write",
935
+ "bookings.read",
936
+ "bookings.create",
937
+ "versions.read",
938
+ "versions.create",
939
+ "versions.restore",
940
+ "trash.read",
941
+ "trash.create",
942
+ "trash.restore",
943
+ "reactions.read",
944
+ "reactions.create",
945
+ "approvals.read",
946
+ "approvals.request",
947
+ "access_requests.create",
948
+ "documents.read",
949
+ "documents.write",
950
+ "documents.suggest",
951
+ "drive.read",
952
+ "drive.create",
953
+ "forms.read",
954
+ "forms.submit",
955
+ "signatures.read",
956
+ "signatures.request",
957
+ "templates.read",
958
+ "templates.apply",
959
+ "time_tracking.track",
960
+ "leave.request",
961
+ "pipelines.read",
962
+ "parties.read",
963
+ "parties.write",
964
+ "engagements.read",
965
+ "engagements.write",
966
+ "deals.read",
967
+ "deals.write",
968
+ "work_items.read",
969
+ "work_items.write",
970
+ "quotes.read",
971
+ "quotes.write",
972
+ "invoices.read",
973
+ "sla.read",
974
+ "targets.read",
975
+ "employees.read",
976
+ "collections.read",
977
+ "collections.write",
978
+ "domains.read",
979
+ "rules.read",
980
+ "assets.read",
981
+ "scores.read",
982
+ "moderation.report",
983
+ "enrollments.read",
984
+ "leases.maintain",
985
+ "expenses.submit",
986
+ "dispatch.read",
987
+ "dispatch.work",
988
+ "shipments.read",
989
+ "contracts.read",
990
+ "contracts.write",
991
+ "controls.read",
992
+ "controls.collect",
993
+ "controls.acknowledge",
994
+ "incidents.read",
995
+ "incidents.write",
996
+ "courses.read",
997
+ "sequences.read",
998
+ "sequences.enroll",
999
+ "posts.read",
1000
+ "posts.write",
1001
+ "content.read",
1002
+ "content.write",
1003
+ "messages.read",
1004
+ "messages.send",
1005
+ "channels.create",
1006
+ "mail.read",
1007
+ "mail.connect",
1008
+ "mail.send",
1009
+ "segments.read",
1010
+ "assignment.read",
1011
+ "enrichment.read",
1012
+ "forecasts.read",
1013
+ "history.read"
1014
+ ],
1015
+ viewer: ["organization.read"]
1016
+ };
1017
+ /**
1018
+ * The permission key each operation checks by default, keyed
1019
+ * `<module>.<action>`. `blocks.<name>.permissions` renames a key per module,
1020
+ * `authorization.operations` overrides it for a provider, and the access
1021
+ * module's `operation_permission(op)` answers the result in SQL. Keys are
1022
+ * `<area>.<verb>`, with `read` for viewing; platform-wide actions use the
1023
+ * `platform` area or a key that `is_platform()` checks. The AI blocks other
1024
+ * than ai-chat check `ai.*` keys.
1025
+ */
1026
+ const OPERATIONS = {
1027
+ "organizations.update": "organization.update",
1028
+ "organizations.delete": "organization.delete",
1029
+ "organizations.removeMember": "members.remove",
1030
+ "organizations.suspendMember": "members.remove",
1031
+ "organizations.updateRole": "members.update_role",
1032
+ "organizations.transferOwnership": "organization.transfer_ownership",
1033
+ "invitations.invite": "members.invite",
1034
+ "invitations.revoke": "members.invite",
1035
+ "invitations.view": "members.invite",
1036
+ "invitations.invitePlatform": "platform.invite",
1037
+ "audit.view": "audit.read",
1038
+ "audit.viewAll": "audit.read",
1039
+ "audit.revert": "audit.revert",
1040
+ "impersonation.start": "support.start",
1041
+ "impersonation.view": "support.read",
1042
+ "impersonation.revoke": "support.revoke",
1043
+ "notifications.send": "notifications.send",
1044
+ "notifications.read": "notifications.read",
1045
+ "webhooks-out.manage": "webhooks.manage",
1046
+ "webhooks-out.view": "webhooks.read",
1047
+ "webhooks-in.create": "webhooks.manage",
1048
+ "webhooks-in.update": "webhooks.manage",
1049
+ "webhooks-in.delete": "webhooks.manage",
1050
+ "webhooks-in.view": "webhooks.read",
1051
+ "api-keys.manage": "api_keys.manage",
1052
+ "api-keys.own": "api_keys.own",
1053
+ "settings.read": "settings.read",
1054
+ "settings.update": "settings.update",
1055
+ "settings.platform": "settings.manage",
1056
+ "usage.read": "usage.read",
1057
+ "usage.record": "usage.record",
1058
+ "billing.read": "billing.read",
1059
+ "billing.manage": "billing.manage",
1060
+ "billing.viewAll": "billing.read",
1061
+ "comments.read": "messages.read",
1062
+ "comments.create": "messages.send",
1063
+ "comments.moderate": "messages.moderate",
1064
+ "timeline.read": "activity.read",
1065
+ "data-lifecycle.export": "organization.export",
1066
+ "data-lifecycle.delete": "organization.delete",
1067
+ "data-lifecycle.cancelDelete": "organization.delete",
1068
+ "attachments.read": "attachments.read",
1069
+ "attachments.upload": "attachments.upload",
1070
+ "attachments.manage": "attachments.manage",
1071
+ "sso.manage": "sso.manage",
1072
+ "onboarding.read": "onboarding.read",
1073
+ "onboarding.complete": "onboarding.complete",
1074
+ "announcements.manage": "announcements.manage",
1075
+ "waitlist.manage": "waitlist.manage",
1076
+ "waitlist.invite": "members.invite",
1077
+ "flags.manage": "flags.manage",
1078
+ "workflows.read": "workflow.read",
1079
+ "workflows.run": "workflow.run",
1080
+ "workflows.admin": "workflow.admin",
1081
+ "workflow-editor.read": "workflow.read",
1082
+ "workflow-editor.run": "workflow.run",
1083
+ "workflow-editor.edit": "workflow.edit",
1084
+ "workflow-editor.publish": "workflow.publish",
1085
+ "workflow-editor.admin": "workflow.admin",
1086
+ "inbox.read": "inbox.read",
1087
+ "inbox.reply": "inbox.reply",
1088
+ "inbox.assign": "inbox.assign",
1089
+ "inbox.manage": "inbox.manage",
1090
+ "ai-chat.read": "ai_chat.read",
1091
+ "ai-chat.create": "ai_chat.create",
1092
+ "ai-chat.share": "ai_chat.share",
1093
+ "ai-chat.moderate": "ai_chat.moderate",
1094
+ "ai-chat.admin": "ai_chat.admin",
1095
+ "ai-files.upload": "ai.create",
1096
+ "ai-files.manage": "ai.admin",
1097
+ "knowledge.read": "ai.read",
1098
+ "knowledge.write": "ai.create",
1099
+ "knowledge.manage": "ai.admin",
1100
+ "memory.read": "ai.read",
1101
+ "memory.manage": "ai.admin",
1102
+ "agents.read": "ai.read",
1103
+ "agents.create": "ai.create",
1104
+ "agents.publish": "ai.share",
1105
+ "agents.moderate": "ai.moderate",
1106
+ "connectors.read": "ai.read",
1107
+ "connectors.use": "ai.create",
1108
+ "connectors.manage": "ai.admin",
1109
+ "ai-schedules.create": "ai.create",
1110
+ "ai-schedules.manage": "ai.admin",
1111
+ "ai-keys.use": "ai.create",
1112
+ "ai-keys.manage": "ai.admin",
1113
+ "numbering.assign": "number_sequences.assign",
1114
+ "teams.manage": "teams.manage",
1115
+ "teams.read": "teams.read",
1116
+ "tags.manage": "tags.manage",
1117
+ "tags.read": "tags.read",
1118
+ "tags.apply": "tags.apply",
1119
+ "catalog.manage": "catalog.manage",
1120
+ "catalog.read": "catalog.read",
1121
+ "inventory.manage": "inventory.manage",
1122
+ "inventory.read": "inventory.read",
1123
+ "inventory.reserve": "inventory.reserve",
1124
+ "inventory.purchase": "inventory.purchase",
1125
+ "orders.manage": "orders.manage",
1126
+ "orders.read": "orders.read",
1127
+ "orders.prepare": "orders.prepare",
1128
+ "promotions.manage": "promotions.manage",
1129
+ "promotions.read": "promotions.read",
1130
+ "custom-fields.manage": "custom_fields.manage",
1131
+ "custom-fields.read": "custom_fields.read",
1132
+ "custom-fields.sensitive": "custom_fields.sensitive.read",
1133
+ "share-links.create": "share_links.create",
1134
+ "share-links.read": "share_links.read",
1135
+ "reminders.manage": "reminders.manage",
1136
+ "reminders.read": "reminders.read",
1137
+ "imports.manage": "imports.manage",
1138
+ "saved-views.read": "views.read",
1139
+ "saved-views.share": "views.share",
1140
+ "relations.read": "relations.read",
1141
+ "relations.manage": "relations.manage",
1142
+ "bulk.run": "bulk.run",
1143
+ "search.read": "search.read",
1144
+ "metrics.read": "metrics.read",
1145
+ "metrics.manage": "metrics.manage",
1146
+ "calendar.manage": "calendar.manage",
1147
+ "calendar.write": "calendar.write",
1148
+ "calendar.read": "calendar.read",
1149
+ "bookings.manage": "bookings.manage",
1150
+ "bookings.create": "bookings.create",
1151
+ "bookings.read": "bookings.read",
1152
+ "versions.read": "versions.read",
1153
+ "versions.create": "versions.create",
1154
+ "versions.restore": "versions.restore",
1155
+ "versions.manage": "versions.manage",
1156
+ "trash.read": "trash.read",
1157
+ "trash.create": "trash.create",
1158
+ "trash.restore": "trash.restore",
1159
+ "trash.manage": "trash.manage",
1160
+ "reactions.read": "reactions.read",
1161
+ "reactions.create": "reactions.create",
1162
+ "reactions.manage": "reactions.manage",
1163
+ "approvals.read": "approvals.read",
1164
+ "approvals.request": "approvals.request",
1165
+ "approvals.manage": "approvals.manage",
1166
+ "access-requests.read": "access_requests.read",
1167
+ "access-requests.create": "access_requests.create",
1168
+ "access-requests.manage": "access_requests.manage",
1169
+ "documents.read": "documents.read",
1170
+ "documents.write": "documents.write",
1171
+ "documents.suggest": "documents.suggest",
1172
+ "documents.manage": "documents.manage",
1173
+ "drive.read": "drive.read",
1174
+ "drive.create": "drive.create",
1175
+ "drive.manage": "drive.manage",
1176
+ "forms.read": "forms.read",
1177
+ "forms.manage": "forms.manage",
1178
+ "forms.submit": "forms.submit",
1179
+ "forms.review": "forms.review",
1180
+ "signatures.read": "signatures.read",
1181
+ "signatures.request": "signatures.request",
1182
+ "signatures.manage": "signatures.manage",
1183
+ "templates.read": "templates.read",
1184
+ "templates.apply": "templates.apply",
1185
+ "templates.manage": "templates.manage",
1186
+ "time-tracking.read": "time_tracking.read",
1187
+ "time-tracking.track": "time_tracking.track",
1188
+ "time-tracking.approve": "time_tracking.approve",
1189
+ "time-tracking.manage": "time_tracking.manage",
1190
+ "service-accounts.read": "service_principals.read",
1191
+ "service-accounts.manage": "service_principals.manage",
1192
+ "pipelines.read": "pipelines.read",
1193
+ "pipelines.manage": "pipelines.manage",
1194
+ "contacts.read": "parties.read",
1195
+ "contacts.write": "parties.write",
1196
+ "contacts.manage": "parties.manage",
1197
+ "activities.read": "engagements.read",
1198
+ "activities.write": "engagements.write",
1199
+ "activities.manage": "engagements.manage",
1200
+ "deals.read": "deals.read",
1201
+ "deals.write": "deals.write",
1202
+ "deals.manage": "deals.manage",
1203
+ "tasks.read": "work_items.read",
1204
+ "tasks.write": "work_items.write",
1205
+ "tasks.manage": "work_items.manage",
1206
+ "quotes.read": "quotes.read",
1207
+ "quotes.write": "quotes.write",
1208
+ "quotes.manage": "quotes.manage",
1209
+ "invoices.read": "invoices.read",
1210
+ "invoices.write": "invoices.write",
1211
+ "invoices.manage": "invoices.manage",
1212
+ "sla.read": "sla.read",
1213
+ "sla.manage": "sla.manage",
1214
+ "goals.read": "targets.read",
1215
+ "goals.manage": "targets.manage",
1216
+ "hiring.read": "hiring.read",
1217
+ "hiring.write": "hiring.write",
1218
+ "hiring.manage": "hiring.manage",
1219
+ "employees.read": "employees.read",
1220
+ "employees.write": "employees.write",
1221
+ "employees.viewSensitive": "employees.view_sensitive",
1222
+ "collections.read": "collections.read",
1223
+ "collections.write": "collections.write",
1224
+ "collections.share": "collections.share",
1225
+ "domains.read": "domains.read",
1226
+ "domains.manage": "domains.manage",
1227
+ "automations.read": "rules.read",
1228
+ "automations.edit": "rules.edit",
1229
+ "automations.publish": "rules.publish",
1230
+ "automations.admin": "rules.admin",
1231
+ "reviews.manage": "reviews.manage",
1232
+ "leave.request": "leave.request",
1233
+ "leave.read": "leave.read",
1234
+ "leave.approve": "leave.approve",
1235
+ "leave.manage": "leave.manage",
1236
+ "ledger.read": "ledger.read",
1237
+ "ledger.manage": "ledger.manage",
1238
+ "ledger.post": "ledger.post",
1239
+ "assets.read": "assets.read",
1240
+ "assets.manage": "assets.manage",
1241
+ "assets.assign": "assets.assign",
1242
+ "scores.read": "scores.read",
1243
+ "scores.manage": "scores.manage",
1244
+ "scores.compute": "scores.compute",
1245
+ "moderation.read": "moderation.read",
1246
+ "moderation.report": "moderation.report",
1247
+ "moderation.manage": "moderation.manage",
1248
+ "moderation.ban": "moderation.ban",
1249
+ "enrollments.read": "enrollments.read",
1250
+ "enrollments.enroll": "enrollments.enroll",
1251
+ "enrollments.manage": "enrollments.manage",
1252
+ "guests.read": "guests.read",
1253
+ "guests.manage": "guests.manage",
1254
+ "passes.read": "passes.read",
1255
+ "passes.manage": "passes.manage",
1256
+ "passes.checkIn": "passes.check_in",
1257
+ "billable-time.read": "billable_time.read",
1258
+ "billable-time.manage": "billable_time.manage",
1259
+ "billable-time.invoice": "billable_time.invoice",
1260
+ "leases.read": "leases.read",
1261
+ "leases.manage": "leases.manage",
1262
+ "leases.maintain": "leases.maintain",
1263
+ "expenses.read": "expenses.read",
1264
+ "expenses.submit": "expenses.submit",
1265
+ "expenses.approve": "expenses.approve",
1266
+ "expenses.manage": "expenses.manage",
1267
+ "donations.read": "donations.read",
1268
+ "donations.manage": "donations.manage",
1269
+ "dispatch.read": "dispatch.read",
1270
+ "dispatch.manage": "dispatch.manage",
1271
+ "dispatch.work": "dispatch.work",
1272
+ "shipments.read": "shipments.read",
1273
+ "shipments.manage": "shipments.manage",
1274
+ "contracts.read": "contracts.read",
1275
+ "contracts.write": "contracts.write",
1276
+ "contracts.manage": "contracts.manage",
1277
+ "compliance.read": "controls.read",
1278
+ "compliance.manage": "controls.manage",
1279
+ "compliance.collect": "controls.collect",
1280
+ "compliance.acknowledge": "controls.acknowledge",
1281
+ "incidents.read": "incidents.read",
1282
+ "incidents.write": "incidents.write",
1283
+ "incidents.manage": "incidents.manage",
1284
+ "courses.read": "courses.read",
1285
+ "courses.enroll": "courses.enroll",
1286
+ "courses.manage": "courses.manage",
1287
+ "sequences.read": "sequences.read",
1288
+ "sequences.enroll": "sequences.enroll",
1289
+ "sequences.manage": "sequences.manage",
1290
+ "posts.read": "posts.read",
1291
+ "posts.write": "posts.write",
1292
+ "posts.moderate": "posts.moderate",
1293
+ "posts.manage": "posts.manage",
1294
+ "content.read": "content.read",
1295
+ "content.write": "content.write",
1296
+ "content.publish": "content.publish",
1297
+ "messaging.read": "messages.read",
1298
+ "messaging.send": "messages.send",
1299
+ "messaging.moderate": "messages.moderate",
1300
+ "channels.read": "messages.read",
1301
+ "channels.create": "channels.create",
1302
+ "channels.manage": "channels.manage",
1303
+ "mail-sync.read": "mail.read",
1304
+ "mail-sync.connect": "mail.connect",
1305
+ "mail-sync.send": "mail.send",
1306
+ "mail-sync.manage": "mail.manage",
1307
+ "segments.read": "segments.read",
1308
+ "segments.edit": "segments.edit",
1309
+ "assignment.read": "assignment.read",
1310
+ "assignment.manage": "assignment.manage",
1311
+ "assignment.assign": "assignment.assign",
1312
+ "enrichment.read": "enrichment.read",
1313
+ "enrichment.run": "enrichment.run",
1314
+ "forecasts.read": "forecasts.read",
1315
+ "forecasts.snapshot": "forecasts.snapshot",
1316
+ "field-history.read": "history.read"
1317
+ };
1318
+ const operationsByModule = /* @__PURE__ */ new Map();
1319
+ for (const [name, key] of Object.entries(OPERATIONS)) {
1320
+ const dot = name.indexOf(".");
1321
+ const module = name.slice(0, dot);
1322
+ const actions = operationsByModule.get(module) ?? {};
1323
+ actions[name.slice(dot + 1)] = key;
1324
+ operationsByModule.set(module, actions);
1325
+ }
1326
+ /** `module`'s default keys by action, from `OPERATIONS`. */
1327
+ function moduleOperations(module) {
1328
+ return operationsByModule.get(module) ?? {};
1329
+ }
1330
+ /** Whether `name` is a module with actions in `OPERATIONS`. */
1331
+ const isOperationModule = (name) => operationsByModule.has(name);
1332
+ /**
1333
+ * Where each module action checks its key: `tenant` through `member_can`, `can`
1334
+ * or `tenant_ids_with` (a provider's `idsWith`), and `platform` through
1335
+ * `is_platform` or `platform_can` (a provider's `isPlatform`).
1336
+ */
1337
+ const MODULE_PERMISSION_SCOPES = {
1338
+ organizations: {
1339
+ update: "tenant",
1340
+ delete: "tenant",
1341
+ removeMember: "tenant",
1342
+ suspendMember: "tenant",
1343
+ updateRole: "tenant",
1344
+ transferOwnership: "tenant"
1345
+ },
1346
+ invitations: {
1347
+ invite: "tenant",
1348
+ revoke: "tenant",
1349
+ view: "tenant",
1350
+ invitePlatform: "platform"
1351
+ },
1352
+ audit: {
1353
+ view: "tenant",
1354
+ viewAll: "platform",
1355
+ revert: "tenant"
1356
+ },
1357
+ impersonation: {
1358
+ start: "platform",
1359
+ view: "platform",
1360
+ revoke: "platform"
1361
+ },
1362
+ notifications: {
1363
+ send: "tenant",
1364
+ read: "tenant"
1365
+ },
1366
+ "webhooks-out": {
1367
+ manage: "tenant",
1368
+ view: "tenant"
1369
+ },
1370
+ "webhooks-in": {
1371
+ create: "tenant",
1372
+ update: "tenant",
1373
+ delete: "tenant",
1374
+ view: "tenant"
1375
+ },
1376
+ "api-keys": {
1377
+ manage: "tenant",
1378
+ own: "tenant"
1379
+ },
1380
+ settings: {
1381
+ read: "tenant",
1382
+ update: "tenant",
1383
+ platform: "platform"
1384
+ },
1385
+ usage: {
1386
+ read: "tenant",
1387
+ record: "tenant"
1388
+ },
1389
+ billing: {
1390
+ read: "tenant",
1391
+ manage: "tenant",
1392
+ viewAll: "platform"
1393
+ },
1394
+ comments: {
1395
+ read: "tenant",
1396
+ create: "tenant",
1397
+ moderate: "tenant"
1398
+ },
1399
+ timeline: { read: "tenant" },
1400
+ attachments: {
1401
+ read: "tenant",
1402
+ upload: "tenant",
1403
+ manage: "tenant"
1404
+ },
1405
+ "data-lifecycle": {
1406
+ export: "tenant",
1407
+ delete: "tenant",
1408
+ cancelDelete: "tenant"
1409
+ },
1410
+ sso: { manage: "tenant" },
1411
+ onboarding: {
1412
+ read: "tenant",
1413
+ complete: "tenant"
1414
+ },
1415
+ announcements: { manage: "platform" },
1416
+ waitlist: {
1417
+ manage: "platform",
1418
+ invite: "tenant"
1419
+ },
1420
+ flags: { manage: "platform" },
1421
+ workflows: {
1422
+ read: "tenant",
1423
+ run: "tenant",
1424
+ admin: "tenant"
1425
+ },
1426
+ "workflow-editor": {
1427
+ read: "tenant",
1428
+ run: "tenant",
1429
+ edit: "tenant",
1430
+ publish: "tenant",
1431
+ admin: "tenant"
1432
+ },
1433
+ inbox: {
1434
+ read: "tenant",
1435
+ reply: "tenant",
1436
+ assign: "tenant",
1437
+ manage: "tenant"
1438
+ },
1439
+ "ai-chat": {
1440
+ read: "tenant",
1441
+ create: "tenant",
1442
+ share: "tenant",
1443
+ moderate: "tenant",
1444
+ admin: "tenant"
1445
+ },
1446
+ "ai-files": {
1447
+ upload: "tenant",
1448
+ manage: "tenant"
1449
+ },
1450
+ knowledge: {
1451
+ read: "tenant",
1452
+ write: "tenant",
1453
+ manage: "tenant"
1454
+ },
1455
+ memory: {
1456
+ read: "tenant",
1457
+ manage: "tenant"
1458
+ },
1459
+ agents: {
1460
+ read: "tenant",
1461
+ create: "tenant",
1462
+ publish: "tenant",
1463
+ moderate: "tenant"
1464
+ },
1465
+ connectors: {
1466
+ read: "tenant",
1467
+ use: "tenant",
1468
+ manage: "tenant"
1469
+ },
1470
+ "ai-schedules": {
1471
+ create: "tenant",
1472
+ manage: "tenant"
1473
+ },
1474
+ "ai-keys": {
1475
+ use: "tenant",
1476
+ manage: "tenant"
1477
+ },
1478
+ numbering: { assign: "tenant" },
1479
+ teams: {
1480
+ manage: "tenant",
1481
+ read: "tenant"
1482
+ },
1483
+ tags: {
1484
+ manage: "tenant",
1485
+ read: "tenant",
1486
+ apply: "tenant"
1487
+ },
1488
+ catalog: {
1489
+ manage: "tenant",
1490
+ read: "tenant"
1491
+ },
1492
+ inventory: {
1493
+ manage: "tenant",
1494
+ read: "tenant",
1495
+ reserve: "tenant",
1496
+ purchase: "tenant"
1497
+ },
1498
+ orders: {
1499
+ manage: "tenant",
1500
+ read: "tenant",
1501
+ prepare: "tenant"
1502
+ },
1503
+ promotions: {
1504
+ manage: "tenant",
1505
+ read: "tenant"
1506
+ },
1507
+ "custom-fields": {
1508
+ manage: "tenant",
1509
+ read: "tenant",
1510
+ sensitive: "tenant"
1511
+ },
1512
+ "share-links": {
1513
+ create: "tenant",
1514
+ read: "tenant"
1515
+ },
1516
+ reminders: {
1517
+ manage: "tenant",
1518
+ read: "tenant"
1519
+ },
1520
+ imports: { manage: "tenant" },
1521
+ "saved-views": {
1522
+ read: "tenant",
1523
+ share: "tenant"
1524
+ },
1525
+ relations: {
1526
+ read: "tenant",
1527
+ manage: "tenant"
1528
+ },
1529
+ bulk: { run: "tenant" },
1530
+ search: { read: "tenant" },
1531
+ metrics: {
1532
+ read: "tenant",
1533
+ manage: "tenant"
1534
+ },
1535
+ calendar: {
1536
+ manage: "tenant",
1537
+ write: "tenant",
1538
+ read: "tenant"
1539
+ },
1540
+ bookings: {
1541
+ manage: "tenant",
1542
+ create: "tenant",
1543
+ read: "tenant"
1544
+ },
1545
+ versions: {
1546
+ read: "tenant",
1547
+ create: "tenant",
1548
+ restore: "tenant",
1549
+ manage: "tenant"
1550
+ },
1551
+ trash: {
1552
+ read: "tenant",
1553
+ create: "tenant",
1554
+ restore: "tenant",
1555
+ manage: "tenant"
1556
+ },
1557
+ reactions: {
1558
+ read: "tenant",
1559
+ create: "tenant",
1560
+ manage: "tenant"
1561
+ },
1562
+ approvals: {
1563
+ read: "tenant",
1564
+ request: "tenant",
1565
+ manage: "tenant"
1566
+ },
1567
+ "access-requests": {
1568
+ read: "tenant",
1569
+ create: "tenant",
1570
+ manage: "tenant"
1571
+ },
1572
+ documents: {
1573
+ read: "tenant",
1574
+ write: "tenant",
1575
+ suggest: "tenant",
1576
+ manage: "tenant"
1577
+ },
1578
+ drive: {
1579
+ read: "tenant",
1580
+ create: "tenant",
1581
+ manage: "tenant"
1582
+ },
1583
+ forms: {
1584
+ read: "tenant",
1585
+ manage: "tenant",
1586
+ submit: "tenant",
1587
+ review: "tenant"
1588
+ },
1589
+ signatures: {
1590
+ read: "tenant",
1591
+ request: "tenant",
1592
+ manage: "tenant"
1593
+ },
1594
+ templates: {
1595
+ read: "tenant",
1596
+ apply: "tenant",
1597
+ manage: "tenant"
1598
+ },
1599
+ "time-tracking": {
1600
+ read: "tenant",
1601
+ track: "tenant",
1602
+ approve: "tenant",
1603
+ manage: "tenant"
1604
+ },
1605
+ "service-accounts": {
1606
+ read: "tenant",
1607
+ manage: "tenant"
1608
+ },
1609
+ pipelines: {
1610
+ read: "tenant",
1611
+ manage: "tenant"
1612
+ },
1613
+ contacts: {
1614
+ read: "tenant",
1615
+ write: "tenant",
1616
+ manage: "tenant"
1617
+ },
1618
+ activities: {
1619
+ read: "tenant",
1620
+ write: "tenant",
1621
+ manage: "tenant"
1622
+ },
1623
+ deals: {
1624
+ read: "tenant",
1625
+ write: "tenant",
1626
+ manage: "tenant"
1627
+ },
1628
+ tasks: {
1629
+ read: "tenant",
1630
+ write: "tenant",
1631
+ manage: "tenant"
1632
+ },
1633
+ quotes: {
1634
+ read: "tenant",
1635
+ write: "tenant",
1636
+ manage: "tenant"
1637
+ },
1638
+ invoices: {
1639
+ read: "tenant",
1640
+ write: "tenant",
1641
+ manage: "tenant"
1642
+ },
1643
+ sla: {
1644
+ read: "tenant",
1645
+ manage: "tenant"
1646
+ },
1647
+ goals: {
1648
+ read: "tenant",
1649
+ manage: "tenant"
1650
+ },
1651
+ hiring: {
1652
+ read: "tenant",
1653
+ write: "tenant",
1654
+ manage: "tenant"
1655
+ },
1656
+ employees: {
1657
+ read: "tenant",
1658
+ write: "tenant",
1659
+ viewSensitive: "tenant"
1660
+ },
1661
+ collections: {
1662
+ read: "tenant",
1663
+ write: "tenant",
1664
+ share: "tenant"
1665
+ },
1666
+ domains: {
1667
+ read: "tenant",
1668
+ manage: "tenant"
1669
+ },
1670
+ automations: {
1671
+ read: "tenant",
1672
+ edit: "tenant",
1673
+ publish: "tenant",
1674
+ admin: "tenant"
1675
+ },
1676
+ reviews: { manage: "tenant" },
1677
+ leave: {
1678
+ request: "tenant",
1679
+ read: "tenant",
1680
+ approve: "tenant",
1681
+ manage: "tenant"
1682
+ },
1683
+ ledger: {
1684
+ read: "tenant",
1685
+ manage: "tenant",
1686
+ post: "tenant"
1687
+ },
1688
+ assets: {
1689
+ read: "tenant",
1690
+ manage: "tenant",
1691
+ assign: "tenant"
1692
+ },
1693
+ scores: {
1694
+ read: "tenant",
1695
+ manage: "tenant",
1696
+ compute: "tenant"
1697
+ },
1698
+ moderation: {
1699
+ read: "tenant",
1700
+ report: "tenant",
1701
+ manage: "tenant",
1702
+ ban: "tenant"
1703
+ },
1704
+ enrollments: {
1705
+ read: "tenant",
1706
+ enroll: "tenant",
1707
+ manage: "tenant"
1708
+ },
1709
+ guests: {
1710
+ read: "tenant",
1711
+ manage: "tenant"
1712
+ },
1713
+ passes: {
1714
+ read: "tenant",
1715
+ manage: "tenant",
1716
+ checkIn: "tenant"
1717
+ },
1718
+ "billable-time": {
1719
+ read: "tenant",
1720
+ manage: "tenant",
1721
+ invoice: "tenant"
1722
+ },
1723
+ leases: {
1724
+ read: "tenant",
1725
+ manage: "tenant",
1726
+ maintain: "tenant"
1727
+ },
1728
+ expenses: {
1729
+ read: "tenant",
1730
+ submit: "tenant",
1731
+ approve: "tenant",
1732
+ manage: "tenant"
1733
+ },
1734
+ donations: {
1735
+ read: "tenant",
1736
+ manage: "tenant"
1737
+ },
1738
+ dispatch: {
1739
+ read: "tenant",
1740
+ manage: "tenant",
1741
+ work: "tenant"
1742
+ },
1743
+ shipments: {
1744
+ read: "tenant",
1745
+ manage: "tenant"
1746
+ },
1747
+ contracts: {
1748
+ read: "tenant",
1749
+ write: "tenant",
1750
+ manage: "tenant"
1751
+ },
1752
+ compliance: {
1753
+ read: "tenant",
1754
+ manage: "tenant",
1755
+ collect: "tenant",
1756
+ acknowledge: "tenant"
1757
+ },
1758
+ incidents: {
1759
+ read: "tenant",
1760
+ write: "tenant",
1761
+ manage: "tenant"
1762
+ },
1763
+ courses: {
1764
+ read: "tenant",
1765
+ enroll: "tenant",
1766
+ manage: "tenant"
1767
+ },
1768
+ sequences: {
1769
+ read: "tenant",
1770
+ enroll: "tenant",
1771
+ manage: "tenant"
1772
+ },
1773
+ posts: {
1774
+ read: "tenant",
1775
+ write: "tenant",
1776
+ moderate: "tenant",
1777
+ manage: "tenant"
1778
+ },
1779
+ messaging: {
1780
+ read: "tenant",
1781
+ send: "tenant",
1782
+ moderate: "tenant"
1783
+ },
1784
+ channels: {
1785
+ read: "tenant",
1786
+ create: "tenant",
1787
+ manage: "tenant"
1788
+ },
1789
+ "mail-sync": {
1790
+ read: "tenant",
1791
+ connect: "tenant",
1792
+ send: "tenant",
1793
+ manage: "tenant"
1794
+ },
1795
+ segments: {
1796
+ read: "tenant",
1797
+ edit: "tenant"
1798
+ },
1799
+ assignment: {
1800
+ read: "tenant",
1801
+ manage: "tenant",
1802
+ assign: "tenant"
1803
+ },
1804
+ enrichment: {
1805
+ read: "tenant",
1806
+ run: "tenant"
1807
+ },
1808
+ forecasts: {
1809
+ read: "tenant",
1810
+ snapshot: "tenant"
1811
+ },
1812
+ "field-history": { read: "tenant" },
1813
+ content: {
1814
+ read: "tenant",
1815
+ write: "tenant",
1816
+ publish: "tenant"
1817
+ }
1818
+ };
1819
+ function accessModel(ctx) {
1820
+ return ctx.modules.permissions?.model ?? "roles";
1821
+ }
1822
+ /**
1823
+ * `blocks.permissions.roles`, or the default roles with their keys renamed
1824
+ * after the blocks' entities (`work_items.*` becomes `tasks.*`).
1825
+ */
1826
+ function rolesOf(ctx) {
1827
+ const configured = ctx.modules.permissions?.roles;
1828
+ if (configured !== void 0) return configured;
1829
+ const naming = ctx.blockNaming();
1830
+ const instances = ctx.instanceNamings().filter((each) => each.renamed);
1831
+ return naming.renamed || instances.length > 0 ? Object.fromEntries(Object.entries(DEFAULT_ROLES).map(([role, keys]) => [role, [...new Set(keys.flatMap((key) => [naming.rename(key), ...instances.map((each) => each.rename(key))]))]])) : DEFAULT_ROLES;
1832
+ }
1833
+ const roleNames = (ctx) => Object.keys(rolesOf(ctx));
1834
+ /**
1835
+ * The scope name tenants use in `can(scope, id, permission)`
1836
+ * (`blocks.permissions.options.scope`, default `organization`). `tenant` is
1837
+ * accepted too.
1838
+ */
1839
+ const tenantScope = (ctx) => ctx.of("permissions").text("scope", "organization");
1840
+ const isPlain = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1841
+ const quotedRef = (where, table, column) => {
1842
+ const parts = `${table}.${column}`.split(".");
1843
+ 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`);
1844
+ return {
1845
+ table: `${sqlIdent(parts[0])}.${sqlIdent(parts[1])}`,
1846
+ column: sqlIdent(parts[2])
1847
+ };
1848
+ };
1849
+ /** The `provider` model's platform role table, or `undefined` without one. */
1850
+ function providerPlatformRoles(ctx) {
1851
+ if (accessModel(ctx) !== "provider" || !ctx.installed("invitations")) return;
1852
+ const value = ctx.of("invitations").option("platformRoles");
1853
+ if (value === void 0) return;
1854
+ const where = "blocks.invitations.options.platformRoles";
1855
+ 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}>" }`);
1856
+ const user = quotedRef(where, value["table"], value["user"]);
1857
+ const role = quotedRef(where, value["table"], value["role"]);
1858
+ const through = value["through"];
1859
+ let lookup;
1860
+ if (through !== void 0) {
1861
+ 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}>" }`);
1862
+ const id = quotedRef(`${where}.through`, through["table"], through["id"]);
1863
+ lookup = {
1864
+ table: id.table,
1865
+ id: id.column,
1866
+ column: quotedRef(`${where}.through`, through["table"], through["column"]).column,
1867
+ ...typeof through["where"] === "string" ? { where: through["where"] } : {}
1868
+ };
1869
+ }
1870
+ return {
1871
+ table: user.table,
1872
+ user: user.column,
1873
+ role: role.column,
1874
+ ...lookup ? { through: lookup } : {},
1875
+ ...typeof value["canAssign"] === "string" ? { canAssign: value["canAssign"] } : {},
1876
+ ...typeof value["canAssignFor"] === "string" ? { canAssignFor: value["canAssignFor"] } : {}
1877
+ };
1878
+ }
1879
+ /** Whether the catalog has platform roles, and so platform invitations. */
1880
+ function hasPlatformRoles(ctx) {
1881
+ if (providerPlatformRoles(ctx)) return true;
1882
+ return accessModel(ctx) === "catalog" && ctx.of("permissions").hasTable("platformAssignments");
1883
+ }
1884
+ /**
1885
+ * Whether catalog role row `alias` is a tenant or a platform role, or
1886
+ * `undefined` when roles carry no scope. Managed catalogs have a `scope`
1887
+ * column; an adopted one maps `roles.scope` and names its values in
1888
+ * `blocks.permissions.options.tenantRoleScope` and `platformRoleScope`.
1889
+ */
1890
+ function roleScopeIs(ctx, alias, scope) {
1891
+ if (accessModel(ctx) !== "catalog") return;
1892
+ const access = ctx.of("permissions");
1893
+ if (!access.owns("roles") && typeof access.config.columns["roles"]?.["scope"] !== "string") return;
1894
+ const value = scope === "tenant" ? access.text("tenantRoleScope", "tenant") : access.text("platformRoleScope", "platform");
1895
+ return `${alias}.${access.col("roles", "scope")}::text = ${sqlString(value)}`;
1896
+ }
1897
+ const MODULE_PERMISSION_SHORTHANDS = {
1898
+ organizations: { suspendMember: "removeMember" },
1899
+ invitations: {
1900
+ revoke: "invite",
1901
+ view: "invite"
1902
+ },
1903
+ audit: { viewAll: "view" },
1904
+ billing: { viewAll: "read" },
1905
+ waitlist: { invite: {
1906
+ module: "invitations",
1907
+ action: "invite"
1908
+ } },
1909
+ "webhooks-in": {
1910
+ create: "manage",
1911
+ update: "manage",
1912
+ delete: "manage"
1913
+ }
1914
+ };
1915
+ function modulePermissionKey(ctx, action, fallback) {
1916
+ const shorthand = MODULE_PERMISSION_SHORTHANDS[ctx.module]?.[action];
1917
+ if (shorthand === void 0) return ctx.permissionKey(action, fallback);
1918
+ const target = typeof shorthand === "string" ? modulePermissionKey(ctx, shorthand, fallback) : modulePermissionKey(ctx.of(shorthand.module), shorthand.action, fallback);
1919
+ return ctx.permissionKey(action, target);
1920
+ }
1921
+ const modulePermission = (ctx, action, fallback) => sqlString(modulePermissionKey(ctx, action, fallback));
1922
+ //#endregion
1923
+ //#region src/sql/modules/workflow-sdk-world-ddl.generated.ts
1924
+ /** The `@workflow/world-postgres` version the DDL below was generated from. */
1925
+ const WORLD_POSTGRES_VERSION = "5.0.4";
1926
+ /** The `workflow` schema after every migration above, as idempotent DDL. */
1927
+ const WORLD_POSTGRES_DDL = `create schema if not exists workflow;
1928
+
1929
+ do $$ begin
1930
+ create type workflow.status as enum ('pending', 'running', 'completed', 'failed', 'cancelled');
1931
+ exception when duplicate_object then null;
1932
+ end $$;
1933
+
1934
+ do $$ begin
1935
+ create type workflow.step_status as enum ('pending', 'running', 'completed', 'failed', 'cancelled');
1936
+ exception when duplicate_object then null;
1937
+ end $$;
1938
+
1939
+ do $$ begin
1940
+ create type workflow.wait_status as enum ('waiting', 'completed');
1941
+ exception when duplicate_object then null;
1942
+ end $$;
1943
+
1944
+ create table if not exists workflow.workflow_event_slots (
1945
+ "run_id" character varying not null,
1946
+ "seq_in_band" integer not null default 1,
1947
+ constraint "workflow_event_slots_pkey" PRIMARY KEY (run_id)
1948
+ );
1949
+
1950
+ alter table workflow.workflow_event_slots
1951
+ add column if not exists "run_id" character varying not null,
1952
+ add column if not exists "seq_in_band" integer not null default 1;
1953
+
1954
+ create table if not exists workflow.workflow_events (
1955
+ "id" character varying not null,
1956
+ "type" character varying not null,
1957
+ "correlation_id" character varying,
1958
+ "created_at" timestamp without time zone not null default now(),
1959
+ "run_id" character varying not null,
1960
+ "payload" jsonb,
1961
+ "payload_cbor" bytea,
1962
+ "spec_version" integer,
1963
+ "resume_id" character varying,
1964
+ "resume_payload_digest" character varying,
1965
+ constraint "workflow_events_run_id_id_pk" PRIMARY KEY (run_id, id)
1966
+ );
1967
+
1968
+ alter table workflow.workflow_events
1969
+ add column if not exists "id" character varying not null,
1970
+ add column if not exists "type" character varying not null,
1971
+ add column if not exists "correlation_id" character varying,
1972
+ add column if not exists "created_at" timestamp without time zone not null default now(),
1973
+ add column if not exists "run_id" character varying not null,
1974
+ add column if not exists "payload" jsonb,
1975
+ add column if not exists "payload_cbor" bytea,
1976
+ add column if not exists "spec_version" integer,
1977
+ add column if not exists "resume_id" character varying,
1978
+ add column if not exists "resume_payload_digest" character varying;
1979
+
1980
+ create index if not exists workflow_events_correlation_id_index ON workflow.workflow_events USING btree (correlation_id);
1981
+
1982
+ 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[]));
1983
+
1984
+ 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));
1985
+
1986
+ create table if not exists workflow.workflow_hooks (
1987
+ "run_id" character varying not null,
1988
+ "hook_id" character varying not null,
1989
+ "token" character varying not null,
1990
+ "owner_id" character varying not null,
1991
+ "project_id" character varying not null,
1992
+ "environment" character varying not null,
1993
+ "created_at" timestamp without time zone not null default now(),
1994
+ "metadata" jsonb,
1995
+ "metadata_cbor" bytea,
1996
+ "spec_version" integer,
1997
+ "is_webhook" boolean default true,
1998
+ "is_system" boolean default false,
1999
+ "resume_context" bytea,
2000
+ "token_retention_until" timestamp with time zone,
2001
+ "claimed_from" bytea,
2002
+ constraint "workflow_hooks_pkey" PRIMARY KEY (hook_id)
2003
+ );
2004
+
2005
+ alter table workflow.workflow_hooks
2006
+ add column if not exists "run_id" character varying not null,
2007
+ add column if not exists "hook_id" character varying not null,
2008
+ add column if not exists "token" character varying not null,
2009
+ add column if not exists "owner_id" character varying not null,
2010
+ add column if not exists "project_id" character varying not null,
2011
+ add column if not exists "environment" character varying not null,
2012
+ add column if not exists "created_at" timestamp without time zone not null default now(),
2013
+ add column if not exists "metadata" jsonb,
2014
+ add column if not exists "metadata_cbor" bytea,
2015
+ add column if not exists "spec_version" integer,
2016
+ add column if not exists "is_webhook" boolean default true,
2017
+ add column if not exists "is_system" boolean default false,
2018
+ add column if not exists "resume_context" bytea,
2019
+ add column if not exists "token_retention_until" timestamp with time zone,
2020
+ add column if not exists "claimed_from" bytea;
2021
+
2022
+ create index if not exists workflow_hooks_run_id_index ON workflow.workflow_hooks USING btree (run_id);
2023
+
2024
+ create index if not exists workflow_hooks_token_index ON workflow.workflow_hooks USING btree (token);
2025
+
2026
+ create table if not exists workflow.workflow_invocations (
2027
+ "sequence" bigserial,
2028
+ "run_id" character varying not null,
2029
+ "request_id" character varying not null,
2030
+ "payload" bytea,
2031
+ "fingerprint" character varying,
2032
+ "result" bytea,
2033
+ "created_at" timestamp without time zone not null default now(),
2034
+ "responded_at" timestamp without time zone,
2035
+ "expired_at" timestamp without time zone,
2036
+ "result_version" integer not null default 0,
2037
+ constraint "workflow_invocations_pkey" PRIMARY KEY (run_id, request_id)
2038
+ );
2039
+
2040
+ alter table workflow.workflow_invocations
2041
+ add column if not exists "sequence" bigserial,
2042
+ add column if not exists "run_id" character varying not null,
2043
+ add column if not exists "request_id" character varying not null,
2044
+ add column if not exists "payload" bytea,
2045
+ add column if not exists "fingerprint" character varying,
2046
+ add column if not exists "result" bytea,
2047
+ add column if not exists "created_at" timestamp without time zone not null default now(),
2048
+ add column if not exists "responded_at" timestamp without time zone,
2049
+ add column if not exists "expired_at" timestamp without time zone,
2050
+ add column if not exists "result_version" integer not null default 0;
2051
+
2052
+ create index if not exists workflow_invocations_pending ON workflow.workflow_invocations USING btree (run_id, sequence) WHERE (responded_at IS NULL);
2053
+
2054
+ create table if not exists workflow.workflow_runs (
2055
+ "id" character varying not null,
2056
+ "output" jsonb,
2057
+ "deployment_id" character varying not null,
2058
+ "status" workflow.status not null,
2059
+ "name" character varying not null,
2060
+ "execution_context" jsonb,
2061
+ "input" jsonb,
2062
+ "error" text,
2063
+ "created_at" timestamp without time zone not null default now(),
2064
+ "updated_at" timestamp without time zone not null default now(),
2065
+ "completed_at" timestamp without time zone,
2066
+ "started_at" timestamp without time zone,
2067
+ "output_cbor" bytea,
2068
+ "execution_context_cbor" bytea,
2069
+ "input_cbor" bytea,
2070
+ "expired_at" timestamp without time zone,
2071
+ "spec_version" character varying,
2072
+ "error_cbor" bytea,
2073
+ "error_code" character varying,
2074
+ "attributes" jsonb not null default '{}'::jsonb,
2075
+ "encryption_public_key" character varying,
2076
+ "dynamic_workflow_code_cbor" bytea,
2077
+ constraint "workflow_runs_pkey" PRIMARY KEY (id)
2078
+ );
2079
+
2080
+ alter table workflow.workflow_runs
2081
+ add column if not exists "id" character varying not null,
2082
+ add column if not exists "output" jsonb,
2083
+ add column if not exists "deployment_id" character varying not null,
2084
+ add column if not exists "status" workflow.status not null,
2085
+ add column if not exists "name" character varying not null,
2086
+ add column if not exists "execution_context" jsonb,
2087
+ add column if not exists "input" jsonb,
2088
+ add column if not exists "error" text,
2089
+ add column if not exists "created_at" timestamp without time zone not null default now(),
2090
+ add column if not exists "updated_at" timestamp without time zone not null default now(),
2091
+ add column if not exists "completed_at" timestamp without time zone,
2092
+ add column if not exists "started_at" timestamp without time zone,
2093
+ add column if not exists "output_cbor" bytea,
2094
+ add column if not exists "execution_context_cbor" bytea,
2095
+ add column if not exists "input_cbor" bytea,
2096
+ add column if not exists "expired_at" timestamp without time zone,
2097
+ add column if not exists "spec_version" character varying,
2098
+ add column if not exists "error_cbor" bytea,
2099
+ add column if not exists "error_code" character varying,
2100
+ add column if not exists "attributes" jsonb not null default '{}'::jsonb,
2101
+ add column if not exists "encryption_public_key" character varying,
2102
+ add column if not exists "dynamic_workflow_code_cbor" bytea;
2103
+
2104
+ create index if not exists workflow_runs_name_index ON workflow.workflow_runs USING btree (name);
2105
+
2106
+ create index if not exists workflow_runs_status_index ON workflow.workflow_runs USING btree (status);
2107
+
2108
+ create table if not exists workflow.workflow_snapshots (
2109
+ "run_id" character varying not null,
2110
+ "data" bytea not null,
2111
+ "events_cursor" character varying,
2112
+ "created_at" timestamp without time zone not null default now(),
2113
+ constraint "workflow_snapshots_pkey" PRIMARY KEY (run_id)
2114
+ );
2115
+
2116
+ alter table workflow.workflow_snapshots
2117
+ add column if not exists "run_id" character varying not null,
2118
+ add column if not exists "data" bytea not null,
2119
+ add column if not exists "events_cursor" character varying,
2120
+ add column if not exists "created_at" timestamp without time zone not null default now();
2121
+
2122
+ create table if not exists workflow.workflow_steps (
2123
+ "run_id" character varying not null,
2124
+ "step_id" character varying not null,
2125
+ "step_name" character varying not null,
2126
+ "status" workflow.step_status not null,
2127
+ "input" jsonb,
2128
+ "output" jsonb,
2129
+ "error" text,
2130
+ "attempt" integer not null,
2131
+ "started_at" timestamp without time zone,
2132
+ "completed_at" timestamp without time zone,
2133
+ "created_at" timestamp without time zone not null default now(),
2134
+ "updated_at" timestamp without time zone not null default now(),
2135
+ "retry_after" timestamp without time zone,
2136
+ "input_cbor" bytea,
2137
+ "output_cbor" bytea,
2138
+ "error_cbor" bytea,
2139
+ "spec_version" integer,
2140
+ constraint "workflow_steps_pkey" PRIMARY KEY (step_id)
2141
+ );
2142
+
2143
+ alter table workflow.workflow_steps
2144
+ add column if not exists "run_id" character varying not null,
2145
+ add column if not exists "step_id" character varying not null,
2146
+ add column if not exists "step_name" character varying not null,
2147
+ add column if not exists "status" workflow.step_status not null,
2148
+ add column if not exists "input" jsonb,
2149
+ add column if not exists "output" jsonb,
2150
+ add column if not exists "error" text,
2151
+ add column if not exists "attempt" integer not null,
2152
+ add column if not exists "started_at" timestamp without time zone,
2153
+ add column if not exists "completed_at" timestamp without time zone,
2154
+ add column if not exists "created_at" timestamp without time zone not null default now(),
2155
+ add column if not exists "updated_at" timestamp without time zone not null default now(),
2156
+ add column if not exists "retry_after" timestamp without time zone,
2157
+ add column if not exists "input_cbor" bytea,
2158
+ add column if not exists "output_cbor" bytea,
2159
+ add column if not exists "error_cbor" bytea,
2160
+ add column if not exists "spec_version" integer;
2161
+
2162
+ create index if not exists workflow_steps_run_id_index ON workflow.workflow_steps USING btree (run_id);
2163
+
2164
+ create index if not exists workflow_steps_status_index ON workflow.workflow_steps USING btree (status);
2165
+
2166
+ create table if not exists workflow.workflow_stream_chunks (
2167
+ "id" character varying not null,
2168
+ "stream_id" character varying not null,
2169
+ "data" bytea not null,
2170
+ "created_at" timestamp without time zone not null default now(),
2171
+ "eof" boolean not null,
2172
+ "run_id" character varying,
2173
+ constraint "workflow_stream_chunks_stream_id_id_pk" PRIMARY KEY (stream_id, id)
2174
+ );
2175
+
2176
+ alter table workflow.workflow_stream_chunks
2177
+ add column if not exists "id" character varying not null,
2178
+ add column if not exists "stream_id" character varying not null,
2179
+ add column if not exists "data" bytea not null,
2180
+ add column if not exists "created_at" timestamp without time zone not null default now(),
2181
+ add column if not exists "eof" boolean not null,
2182
+ add column if not exists "run_id" character varying;
2183
+
2184
+ create index if not exists workflow_stream_chunks_run_id_index ON workflow.workflow_stream_chunks USING btree (run_id);
2185
+
2186
+ create table if not exists workflow.workflow_waits (
2187
+ "wait_id" character varying not null,
2188
+ "run_id" character varying not null,
2189
+ "status" workflow.wait_status not null,
2190
+ "resume_at" timestamp without time zone,
2191
+ "completed_at" timestamp without time zone,
2192
+ "created_at" timestamp without time zone not null default now(),
2193
+ "updated_at" timestamp without time zone not null default now(),
2194
+ "spec_version" integer,
2195
+ constraint "workflow_waits_pkey" PRIMARY KEY (wait_id)
2196
+ );
2197
+
2198
+ alter table workflow.workflow_waits
2199
+ add column if not exists "wait_id" character varying not null,
2200
+ add column if not exists "run_id" character varying not null,
2201
+ add column if not exists "status" workflow.wait_status not null,
2202
+ add column if not exists "resume_at" timestamp without time zone,
2203
+ add column if not exists "completed_at" timestamp without time zone,
2204
+ add column if not exists "created_at" timestamp without time zone not null default now(),
2205
+ add column if not exists "updated_at" timestamp without time zone not null default now(),
2206
+ add column if not exists "spec_version" integer;
2207
+
2208
+ create index if not exists workflow_waits_run_id_index ON workflow.workflow_waits USING btree (run_id);
2209
+ `;
2210
+ //#endregion
2211
+ //#region src/sql/modules/workflow-sdk.ts
2212
+ /** The Vault secret names the pg_net dispatcher reads. */
2213
+ const WORKFLOW_VAULT_SECRETS = {
2214
+ flowUrl: "workflow_flow_url",
2215
+ deliverySecret: "workflow_delivery_secret",
2216
+ encryptionKey: "workflow_encryption_key"
2217
+ };
2218
+ const WORKFLOW_DELIVERY_QUEUE = "workflow_deliveries";
2219
+ function deliveryModeOf(ctx) {
2220
+ const mode = ctx.text("delivery", "poll");
2221
+ if (mode !== "poll" && mode !== "pg_net") throw new TypeError(`blocks["workflow-sdk"].options.delivery must be "poll" or "pg_net", got "${mode}"`);
2222
+ return mode;
2223
+ }
2224
+ const IDENT = /^[a-z_][a-z0-9_]{0,40}$/;
2225
+ function deliveryQueueOf(ctx) {
2226
+ const queue = ctx.text("queue", WORKFLOW_DELIVERY_QUEUE);
2227
+ if (!IDENT.test(queue)) throw new TypeError(`blocks["workflow-sdk"].options.queue: "${queue}" is not a queue name`);
2228
+ return queue;
2229
+ }
2230
+ const PRINCIPAL_KINDS = "'user', 'service_principal', 'system', 'external'";
2231
+ function build(ctx) {
2232
+ if (ctx.mode === "custom") return "";
2233
+ const fn = (name) => ctx.fn(name);
2234
+ const workflows = ctx.of("workflows");
2235
+ const record = workflows.fn("record_workflow_run");
2236
+ const runKey = workflows.permission("run", OPERATIONS["workflows.run"]);
2237
+ const claimJobs = ctx.of("queue").fn("claim_jobs");
2238
+ const id = ctx.idType;
2239
+ const queue = sqlString(deliveryQueueOf(ctx));
2240
+ const batch = Math.max(1, Math.trunc(ctx.number("batch", 20)));
2241
+ const timeout = Math.max(1e3, Math.trunc(ctx.number("timeout", 3e4)));
2242
+ const lease = Math.ceil(timeout / 1e3) + 30;
2243
+ const mirror = ctx.trigger("workflow_sdk_runs_mirror");
2244
+ return `${schemaPreamble(ctx)}
2245
+ -- The Workflow SDK World's tables (@workflow/world-postgres ${WORLD_POSTGRES_VERSION}).
2246
+ -- Only the service role reads them: the app reads runs from workflow_runs in
2247
+ -- the workflows module.
2248
+ ${WORLD_POSTGRES_DDL}
2249
+ revoke all on schema workflow from public, anon, authenticated;
2250
+ grant usage on schema workflow to service_role;
2251
+ do $$
2252
+ declare
2253
+ t record;
2254
+ begin
2255
+ for t in select c.relname from pg_catalog.pg_class c
2256
+ join pg_catalog.pg_namespace n on n.oid = c.relnamespace
2257
+ where n.nspname = 'workflow' and c.relkind = 'r'
2258
+ loop
2259
+ execute format('alter table workflow.%I enable row level security', t.relname);
2260
+ execute format('revoke all on workflow.%I from public, anon, authenticated', t.relname);
2261
+ execute format('grant all on workflow.%I to service_role', t.relname);
2262
+ end loop;
2263
+ end;
2264
+ $$;
2265
+ grant usage, select on all sequences in schema workflow to service_role;
2266
+ create index if not exists workflow_runs_attributes_idx on workflow.workflow_runs using gin (attributes jsonb_path_ops);
2267
+
2268
+ -- Copies each World run into workflow_runs: its tenant and actor come from
2269
+ -- the bsb.tenant and bsb.actor attributes that startFor sets. A run with an
2270
+ -- actor keeps its tenant only when the actor holds workflow.run there; a
2271
+ -- run without one, or one with bsb.principal_kind (a runAs start, whose
2272
+ -- actor is the user who triggered it), was started by the server, which is
2273
+ -- trusted. bsb.subject
2274
+ -- (type/id), bsb.principal_kind, bsb.principal, bsb.mode and bsb.trigger_node
2275
+ -- fill the run's subject, principal, mode and trigger node.
2276
+ create or replace function ${fn("workflow_sdk_mirror_run")}()
2277
+ returns trigger
2278
+ language plpgsql
2279
+ security definer
2280
+ set search_path = ''
2281
+ as $$
2282
+ declare
2283
+ v_tenant ${id};
2284
+ v_actor uuid;
2285
+ v_subject text;
2286
+ v_subject_type text;
2287
+ v_subject_id text;
2288
+ v_principal_kind text;
2289
+ v_mode text;
2290
+ begin
2291
+ begin
2292
+ v_tenant := (new.attributes ->> 'bsb.tenant')::${id};
2293
+ exception when others then
2294
+ v_tenant := null;
2295
+ end;
2296
+ begin
2297
+ v_actor := (new.attributes ->> 'bsb.actor')::uuid;
2298
+ exception when others then
2299
+ v_actor := null;
2300
+ end;
2301
+ v_principal_kind := new.attributes ->> 'bsb.principal_kind';
2302
+ if v_principal_kind is not null and v_principal_kind not in (${PRINCIPAL_KINDS}) then
2303
+ v_principal_kind := null;
2304
+ end if;
2305
+ if v_tenant is not null and v_actor is not null and v_principal_kind is null
2306
+ and not ${ctx.scope.canUser("v_actor", "v_tenant", runKey)} then
2307
+ v_tenant := null;
2308
+ end if;
2309
+ v_subject := new.attributes ->> 'bsb.subject';
2310
+ if v_subject is not null and position('/' in v_subject) between 2 and 101
2311
+ and length(v_subject) - position('/' in v_subject) between 1 and 200 then
2312
+ v_subject_type := left(v_subject, position('/' in v_subject) - 1);
2313
+ v_subject_id := substr(v_subject, position('/' in v_subject) + 1);
2314
+ end if;
2315
+ v_mode := case when new.attributes ->> 'bsb.mode' = 'test' then 'test' else 'live' end;
2316
+ perform ${record}(
2317
+ 'workflow-sdk',
2318
+ new.id,
2319
+ new.name,
2320
+ case new.status::text when 'pending' then 'queued' else new.status::text end,
2321
+ v_tenant,
2322
+ v_actor,
2323
+ coalesce(new.attributes, '{}'::jsonb) - 'bsb.tenant' - 'bsb.actor' - 'bsb.subject' - 'bsb.principal_kind' - 'bsb.principal' - 'bsb.mode' - 'bsb.trigger_node',
2324
+ case when new.status::text = 'failed' then coalesce(new.error_code, left(new.error, 4000)) end,
2325
+ new.started_at at time zone 'UTC',
2326
+ new.completed_at at time zone 'UTC',
2327
+ v_subject_type,
2328
+ v_subject_id,
2329
+ v_principal_kind,
2330
+ case when v_principal_kind is null then null else nullif(left(new.attributes ->> 'bsb.principal', 200), '') end,
2331
+ v_mode,
2332
+ nullif(left(new.attributes ->> 'bsb.trigger_node', 100), '')
2333
+ );
2334
+ return null;
2335
+ end;
2336
+ $$;
2337
+ revoke execute on function ${fn("workflow_sdk_mirror_run")}() from public, anon, authenticated;
2338
+ drop trigger if exists ${mirror} on workflow.workflow_runs;
2339
+ create trigger ${mirror} after insert or update of status, attributes, error on workflow.workflow_runs
2340
+ for each row execute function ${fn("workflow_sdk_mirror_run")}();
2341
+
2342
+ -- pg_net delivery: posts up to batch due messages to the flow route in the
2343
+ -- Vault secret ${WORKFLOW_VAULT_SECRETS.flowUrl}, signed with ${WORKFLOW_VAULT_SECRETS.deliverySecret}
2344
+ -- (x-bsb-signature: t=<unix>,v1=hex(hmac_sha256(t.job.body))). The body is
2345
+ -- the stored message; the route completes or fails the job, so a delivery
2346
+ -- whose response is lost runs again after the lease.
2347
+ create or replace function ${fn("dispatch_workflow_deliveries")}(batch integer default ${String(batch)})
2348
+ returns integer
2349
+ language plpgsql
2350
+ security definer
2351
+ set search_path = ''
2352
+ as $$
2353
+ declare
2354
+ v_url text;
2355
+ v_secret text;
2356
+ v_job record;
2357
+ v_body jsonb;
2358
+ v_t text;
2359
+ v_job_header text;
2360
+ v_count integer := 0;
2361
+ -- pg_net is optional: http_post is looked up, not named, so plpgsql_check
2362
+ -- (supabase db lint) passes without the extension.
2363
+ v_post regprocedure := pg_catalog.to_regprocedure('net.http_post(text, jsonb, jsonb, jsonb, integer)');
2364
+ begin
2365
+ if v_post is null then
2366
+ raise exception 'dispatch_workflow_deliveries needs pg_net: create extension pg_net, or deliver with the poll mode';
2367
+ end if;
2368
+ select ds.decrypted_secret into v_url from vault.decrypted_secrets ds where ds.name = ${sqlString(WORKFLOW_VAULT_SECRETS.flowUrl)};
2369
+ select ds.decrypted_secret into v_secret from vault.decrypted_secrets ds where ds.name = ${sqlString(WORKFLOW_VAULT_SECRETS.deliverySecret)};
2370
+ if v_url is null or v_secret is null then
2371
+ raise exception 'Set the Vault secrets ${WORKFLOW_VAULT_SECRETS.flowUrl} and ${WORKFLOW_VAULT_SECRETS.deliverySecret} before dispatching' using hint = 'WORKFLOW_DELIVERY_UNCONFIGURED';
2372
+ end if;
2373
+ for v_job in select * from ${claimJobs}(${queue}, ${String(lease)}, greatest(coalesce(batch, ${String(batch)}), 1)) loop
2374
+ v_body := coalesce(v_job.message -> 'payload', '{}'::jsonb);
2375
+ v_t := floor(extract(epoch from now()))::bigint::text;
2376
+ v_job_header := ${queue} || ':' || v_job.id::text || ':' || v_job.attempts::text;
2377
+ execute format('select %s(url := $1, body := $2, headers := $3, timeout_milliseconds := $4)', v_post::oid::regproc)
2378
+ using v_url, v_body, jsonb_build_object(
2379
+ 'content-type', 'application/json',
2380
+ 'x-bsb-job', v_job_header,
2381
+ 'x-bsb-signature', 't=' || v_t || ',v1=' || encode(extensions.hmac(v_t || '.' || v_job_header || '.' || v_body::text, v_secret, 'sha256'), 'hex')
2382
+ ), ${String(timeout)};
2383
+ v_count := v_count + 1;
2384
+ end loop;
2385
+ return v_count;
2386
+ end;
2387
+ $$;
2388
+ revoke execute on function ${fn("dispatch_workflow_deliveries")}(integer) from public, anon, authenticated;
2389
+ grant execute on function ${fn("dispatch_workflow_deliveries")}(integer) to service_role;`;
2390
+ }
2391
+ function data(ctx) {
2392
+ if (ctx.mode === "custom" || deliveryModeOf(ctx) !== "pg_net") return "";
2393
+ const schedule = ctx.text("schedule", "1 seconds");
2394
+ return `-- Delivers workflow messages through pg_net every ${schedule} when pg_cron is installed.
2395
+ do $$
2396
+ begin
2397
+ if pg_catalog.to_regnamespace('cron') is not null then
2398
+ perform cron.schedule('better-supabase-workflow-deliveries', ${sqlString(schedule)}, ${sqlString(`select ${ctx.fn("dispatch_workflow_deliveries")}()`)});
2399
+ else
2400
+ raise notice 'pg_cron is not installed: call ${ctx.fn("dispatch_workflow_deliveries").replaceAll("'", "")}() on a schedule to deliver workflow messages';
2401
+ end if;
2402
+ end;
2403
+ $$;`;
2404
+ }
2405
+ function contract() {
2406
+ return [{
2407
+ name: "dispatch_workflow_deliveries",
2408
+ args: ["integer"],
2409
+ returns: "integer"
2410
+ }];
2411
+ }
2412
+ const WORKFLOW_SDK_WORLD = {
2413
+ name: "workflow-sdk",
2414
+ scopes: ["tenant"],
2415
+ title: "Workflow SDK World",
2416
+ 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.`,
2417
+ requires: [
2418
+ "workflows",
2419
+ "queue",
2420
+ "permissions"
2421
+ ],
2422
+ providerFunctions: ["idsWithFor"],
2423
+ target: "schema",
2424
+ modes: ["managed", "custom"],
2425
+ version: 2,
2426
+ upgrades: [{
2427
+ from: 1,
2428
+ description: "The run trigger fills subject, principal, mode and trigger node from the bsb.subject, bsb.principal_kind, bsb.principal, bsb.mode and bsb.trigger_node attributes, and a runAs start keeps bsb.actor as the user who triggered it.",
2429
+ sql: () => ""
2430
+ }],
2431
+ names: {
2432
+ tables: {},
2433
+ options: [
2434
+ "delivery",
2435
+ "queue",
2436
+ "batch",
2437
+ "timeout",
2438
+ "schedule"
2439
+ ]
2440
+ },
2441
+ contract,
2442
+ build,
2443
+ data
2444
+ };
2445
+ //#endregion
2446
+ export { quotedTable as $, addNotNullCheck as A, extraFieldsArg as B, SCHEMA as C, addCheck as D, activeMembership as E, defaultPartitionName as F, lockTable as G, fail as H, disabledHelpers as I, membershipSuspended as J, memberAddedRecord as K, disabledHelpersNeedLaterTables as L, columnRef as M, columnsObject as N, addExtraColumns as O, defaultPartition as P, pageSize as Q, dropExpiredPartitions as R, PARTITION_VARIABLES as S, accessDefinesDisabledHelpers as T, jsonSchemaChecks as U, extraFieldsJson as V, jwtClaim as W, organizationMissing as X, notNullCheckName as Y, ownRowPolicies as Z, rolesOf as _, DEFAULT_ROLES as a, revokeTable as at, MONTHLY_PARTITIONS as b, accessModel as c, serviceOnly as ct, moduleOperations as d, splitTable as dt, raise as et, modulePermission as f, triggerGrant as ft, roleScopeIs as g, writeExtraColumns as gt, roleNames as h, withExtraFields as ht, WORLD_POSTGRES_VERSION as i, replaceColumnCheck as it, batchFunction as j, addForeignKey as k, hasPlatformRoles as l, sha256Hex as lt, providerPlatformRoles as m, userGrant as mt, WORKFLOW_SDK_WORLD as n, registerPartitions as nt, MODULE_PERMISSION_SCOPES as o, schemaPreamble as ot, modulePermissionKey as p, updatedAt as pt, membershipDisabledAt as q, WORKFLOW_VAULT_SECRETS as r, renameSql as rt, OPERATIONS as s, serviceGrant as st, WORKFLOW_DELIVERY_QUEUE as t, recordTrigger as tt, isOperationModule as u, shortHash as ut, tenantScope as v, SERVICE_CALLER as w, NOTHING as x, EQUIVALENT_TRIGGERS as y, ensureCheck as z };