better-supabase 0.5.0 → 0.6.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.
- package/README.md +299 -41
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/actor-CQTlc1Hh.d.ts +43 -0
- package/dist/adapter-Bc1o3zyy.js +1106 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +210 -0
- package/dist/blocks/attachments/index.js +222 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +251 -0
- package/dist/blocks/data-lifecycle/index.js +353 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-BGLb_zou.js +3100 -0
- package/dist/cli/gen-DAH8FM2W.js +2 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-Bt1YK3Ke.d.ts +146 -0
- package/dist/composite-DhE66P5u.js +130 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CONDyPYx.js +51 -0
- package/dist/framework-DuVb4Xa8.d.ts +25 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/impersonation-DcqaTBHx.js +148 -0
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
- package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
- package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -21
- package/dist/server/index.js +46 -14
- package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +330 -194
- package/dist/sql/index.js +34901 -6489
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
- package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +343 -37
- package/dist/testing/index.js +1186 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +470 -29
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +21 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +62 -18
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-BJc9vdyu.js +0 -2
- package/dist/cli/gen-C2osRcr5.js +0 -2204
- package/dist/cli/read-sets-BfMQcKy8.js +0 -289
- package/dist/cli/sql-DzPbfngx.js +0 -348
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/impersonation-VfaGc4Q_.js +0 -41
- package/dist/index-BGdgBPdf.d.ts +0 -161
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dxn2a5cw.d.ts +0 -50
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-Csx2sRjg.js +0 -655
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-DT-OhSxD.d.ts +0 -88
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- package/skills/better-supabase-auth/references/permdock.md +0 -100
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { n as isPlainObject } from "./clone-BfgmLU90.js";
|
|
2
|
+
import { r as err, s as toDbError } from "./result-DzUbqgdW.js";
|
|
3
|
+
//#region src/core/share.ts
|
|
4
|
+
function sameValue(prev, next) {
|
|
5
|
+
if (Object.is(prev, next)) return true;
|
|
6
|
+
if (typeof prev !== "object" || typeof next !== "object") return false;
|
|
7
|
+
if (prev === null || next === null) return false;
|
|
8
|
+
return Object.getPrototypeOf(prev) === Object.getPrototypeOf(next) && !Array.isArray(prev) && !isPlainObject(prev) && "toJSON" in prev && typeof prev.toJSON === "function" && JSON.stringify(prev) === JSON.stringify(next);
|
|
9
|
+
}
|
|
10
|
+
function idOf(value) {
|
|
11
|
+
return isPlainObject(value) ? value["id"] : void 0;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* `next` with every part that equals `prev` replaced by `prev`'s object, so
|
|
15
|
+
* unchanged rows keep their identity and `memo` skips them. Array items
|
|
16
|
+
* match by their `id` when they have one (a reordered list keeps its rows),
|
|
17
|
+
* else by position. Returns `prev` itself when nothing changed.
|
|
18
|
+
*/
|
|
19
|
+
function shareStructure(prev, next) {
|
|
20
|
+
if (sameValue(prev, next)) return prev;
|
|
21
|
+
if (Array.isArray(prev) && Array.isArray(next)) {
|
|
22
|
+
const before = prev;
|
|
23
|
+
const after = next;
|
|
24
|
+
const byId = /* @__PURE__ */ new Map();
|
|
25
|
+
for (const item of before) {
|
|
26
|
+
const id = idOf(item);
|
|
27
|
+
if (id !== void 0) byId.set(id, item);
|
|
28
|
+
}
|
|
29
|
+
let same = before.length === after.length;
|
|
30
|
+
const shared = after.map((item, index) => {
|
|
31
|
+
const id = idOf(item);
|
|
32
|
+
const value = shareStructure(id === void 0 ? before[index] : byId.get(id), item);
|
|
33
|
+
if (value !== before[index]) same = false;
|
|
34
|
+
return value;
|
|
35
|
+
});
|
|
36
|
+
return same ? prev : shared;
|
|
37
|
+
}
|
|
38
|
+
if (isPlainObject(prev) && isPlainObject(next)) {
|
|
39
|
+
const keys = Object.keys(next);
|
|
40
|
+
let same = keys.length === Object.keys(prev).length;
|
|
41
|
+
const shared = {};
|
|
42
|
+
for (const key of keys) {
|
|
43
|
+
const value = shareStructure(prev[key], next[key]);
|
|
44
|
+
if (!Object.hasOwn(prev, key) || value !== prev[key]) same = false;
|
|
45
|
+
shared[key] = value;
|
|
46
|
+
}
|
|
47
|
+
return same ? prev : shared;
|
|
48
|
+
}
|
|
49
|
+
return next;
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/powersync/watch.ts
|
|
53
|
+
/**
|
|
54
|
+
* Reruns a repository call whenever PowerSync reports a change to one of
|
|
55
|
+
* `tables`: local writes and synced rows alike. The same call works with
|
|
56
|
+
* lists, aggregates and single rows. Unchanged rows keep their identity
|
|
57
|
+
* between runs, and a run that changes nothing calls no `onResult`. Returns
|
|
58
|
+
* a function that stops it.
|
|
59
|
+
*
|
|
60
|
+
* ```ts
|
|
61
|
+
* const stop = watch(powersync, () => customerList.run(db, query), {
|
|
62
|
+
* tables: ['customers'],
|
|
63
|
+
* onResult: (page) => render(page),
|
|
64
|
+
* });
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
function watch(db, query, options) {
|
|
68
|
+
if (!db.onChange) throw new TypeError("better-supabase: watch() needs a PowerSync database with onChange()");
|
|
69
|
+
const signal = options.signal;
|
|
70
|
+
if (signal?.aborted) return () => void 0;
|
|
71
|
+
const controller = new AbortController();
|
|
72
|
+
const stop = () => {
|
|
73
|
+
controller.abort();
|
|
74
|
+
};
|
|
75
|
+
signal?.addEventListener("abort", stop, { once: true });
|
|
76
|
+
let latest = 0;
|
|
77
|
+
let previous;
|
|
78
|
+
const sharing = options.structuralSharing ?? true;
|
|
79
|
+
const rerun = async () => {
|
|
80
|
+
latest += 1;
|
|
81
|
+
const run = latest;
|
|
82
|
+
let result;
|
|
83
|
+
try {
|
|
84
|
+
result = await query();
|
|
85
|
+
} catch (cause) {
|
|
86
|
+
result = err(toDbError(cause));
|
|
87
|
+
}
|
|
88
|
+
if (run !== latest || controller.signal.aborted) return;
|
|
89
|
+
if (sharing) {
|
|
90
|
+
const shared = shareStructure(previous, result);
|
|
91
|
+
if (shared === previous) return;
|
|
92
|
+
result = shared;
|
|
93
|
+
}
|
|
94
|
+
previous = result;
|
|
95
|
+
options.onResult(result);
|
|
96
|
+
};
|
|
97
|
+
rerun();
|
|
98
|
+
const unsubscribe = db.onChange({ onChange: rerun }, {
|
|
99
|
+
tables: [...options.tables],
|
|
100
|
+
signal: controller.signal,
|
|
101
|
+
...options.throttleMs === void 0 ? {} : { throttleMs: options.throttleMs }
|
|
102
|
+
});
|
|
103
|
+
return () => {
|
|
104
|
+
signal?.removeEventListener("abort", stop);
|
|
105
|
+
stop();
|
|
106
|
+
unsubscribe();
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The SQLite table names of app table keys (`customerTags` to
|
|
111
|
+
* `customer_tags`). Pass the executor's `tableName` when it renames tables,
|
|
112
|
+
* so `watch` listens to the names the queries read.
|
|
113
|
+
*/
|
|
114
|
+
function sqliteTables(betterSupabase, keys, options = {}) {
|
|
115
|
+
return keys.map((key) => {
|
|
116
|
+
const table = betterSupabase.meta.tables[key];
|
|
117
|
+
if (!table) throw new TypeError(`better-supabase: unknown table "${key}"`);
|
|
118
|
+
return options.tableName ? options.tableName(table) : table.name;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
//#endregion
|
|
122
|
+
export { watch as n, sqliteTables as t };
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { t as DbException } from "./db-exception-CnWcYPxL.js";
|
|
2
|
+
import { n as dbError } from "./errors-B11Duf73.js";
|
|
3
|
+
import { d as temporalText } from "./temporal-BJGitm-h.js";
|
|
4
|
+
import { t as temporal } from "./temporal-required-BVvW7SYJ.js";
|
|
4
5
|
//#region src/ir/wire.ts
|
|
5
|
-
/**
|
|
6
|
+
/** ISO text of a `Date`; an invalid date has none. */
|
|
7
|
+
function dateText(value) {
|
|
8
|
+
if (Number.isNaN(value.getTime())) throw new DbException(dbError("invalid_value", "The Date is invalid"));
|
|
9
|
+
return value.toISOString();
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Wire form of an app value: Temporal values and `Date` to ISO text, `bigint`
|
|
13
|
+
* to decimal text.
|
|
14
|
+
*/
|
|
6
15
|
function encodeValue(value) {
|
|
7
16
|
if (typeof value !== "object" || value === null) return typeof value === "bigint" ? value.toString() : value;
|
|
17
|
+
if (value instanceof Date) return dateText(value);
|
|
8
18
|
const text = temporalText(value);
|
|
9
19
|
if (text !== void 0) return text;
|
|
10
20
|
if (Array.isArray(value)) return value.map(encodeValue);
|
|
@@ -32,4 +42,4 @@ function decodeValue(codec, value) {
|
|
|
32
42
|
return Array.isArray(value) ? value.map((item) => decodeScalar(codec, item)) : decodeScalar(codec, value);
|
|
33
43
|
}
|
|
34
44
|
//#endregion
|
|
35
|
-
export {
|
|
45
|
+
export { encodeValue as i, decodeScalar as n, decodeValue as r, dateText as t };
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
import { n as dbError } from "./errors-B11Duf73.js";
|
|
2
|
+
import { a as ok, r as err, t as AsyncResult } from "./result-DzUbqgdW.js";
|
|
3
|
+
import { n as credentialRefInTenant, r as foreignCredentialRef } from "./provider-Di3sRutW.js";
|
|
4
|
+
import { D as stringsOf, O as textOf, S as requiredInstant, _ as randomToken, b as recordOrEmpty, d as isRecord, h as optionalText, i as blockCall, l as injectableOf, m as optionalInstant, n as applyTemporal, s as enumOrThrow, w as seconds, x as recordsOf, y as recordOf } from "./block-helpers-DWHxHsEQ.js";
|
|
5
|
+
import { t as createWorkflows } from "./workflows-wu1WWBn7.js";
|
|
6
|
+
import { o as graphOf, r as diffGraphs } from "./graph-BGyLLFLX.js";
|
|
7
|
+
//#region src/blocks/workflow-builder/rows.ts
|
|
8
|
+
const VERSION_STATUSES = [
|
|
9
|
+
"draft",
|
|
10
|
+
"published",
|
|
11
|
+
"archived"
|
|
12
|
+
];
|
|
13
|
+
const TRIGGER_KINDS = [
|
|
14
|
+
"manual",
|
|
15
|
+
"webhook",
|
|
16
|
+
"schedule",
|
|
17
|
+
"event",
|
|
18
|
+
"form",
|
|
19
|
+
"chat"
|
|
20
|
+
];
|
|
21
|
+
const NODE_RUN_STATUSES = [
|
|
22
|
+
"running",
|
|
23
|
+
"waiting",
|
|
24
|
+
"completed",
|
|
25
|
+
"failed",
|
|
26
|
+
"skipped"
|
|
27
|
+
];
|
|
28
|
+
function definitionOf(row) {
|
|
29
|
+
const published = row["published"];
|
|
30
|
+
return {
|
|
31
|
+
id: textOf(row["id"]),
|
|
32
|
+
tenant: optionalText(row["tenant"]),
|
|
33
|
+
slug: textOf(row["slug"]),
|
|
34
|
+
name: textOf(row["name"]),
|
|
35
|
+
description: optionalText(row["description"]),
|
|
36
|
+
createdBy: optionalText(row["createdBy"]),
|
|
37
|
+
createdAt: requiredInstant(row["createdAt"], "createdAt"),
|
|
38
|
+
updatedAt: requiredInstant(row["updatedAt"], "updatedAt"),
|
|
39
|
+
..."published" in row ? { published: typeof published === "number" ? published : void 0 } : {},
|
|
40
|
+
..."draft" in row ? { draft: row["draft"] === true } : {}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function versionOf(row) {
|
|
44
|
+
return {
|
|
45
|
+
id: textOf(row["id"]),
|
|
46
|
+
definition: textOf(row["definition"]),
|
|
47
|
+
version: Number(row["version"]),
|
|
48
|
+
status: enumOrThrow(row["status"], VERSION_STATUSES, "version status"),
|
|
49
|
+
createdBy: optionalText(row["createdBy"]),
|
|
50
|
+
createdAt: requiredInstant(row["createdAt"], "createdAt"),
|
|
51
|
+
publishedAt: optionalInstant(row["publishedAt"]),
|
|
52
|
+
..."graph" in row ? { graph: graphOf(row["graph"]) } : {},
|
|
53
|
+
..."compiled" in row && row["compiled"] !== null ? { compiled: row["compiled"] } : {}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function triggerOf(row) {
|
|
57
|
+
return {
|
|
58
|
+
id: textOf(row["id"]),
|
|
59
|
+
definition: textOf(row["definition"]),
|
|
60
|
+
kind: enumOrThrow(row["kind"], TRIGGER_KINDS, "trigger kind"),
|
|
61
|
+
config: recordOrEmpty(row["config"]),
|
|
62
|
+
enabled: row["enabled"] !== false,
|
|
63
|
+
createdAt: requiredInstant(row["createdAt"], "createdAt"),
|
|
64
|
+
updatedAt: requiredInstant(row["updatedAt"], "updatedAt")
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function refOf(value) {
|
|
68
|
+
if (!isRecord(value) || typeof value["provider"] !== "string") throw new TypeError("workflow-builder: a credential_ref has no provider");
|
|
69
|
+
return {
|
|
70
|
+
...value,
|
|
71
|
+
provider: value["provider"]
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function credentialOf(row) {
|
|
75
|
+
return {
|
|
76
|
+
id: textOf(row["id"]),
|
|
77
|
+
tenant: optionalText(row["tenant"]),
|
|
78
|
+
kind: textOf(row["kind"]),
|
|
79
|
+
name: textOf(row["name"]),
|
|
80
|
+
ref: refOf(row["ref"]),
|
|
81
|
+
scopes: Array.isArray(row["scopes"]) ? stringsOf(row["scopes"]) : [],
|
|
82
|
+
createdBy: optionalText(row["createdBy"]),
|
|
83
|
+
createdAt: requiredInstant(row["createdAt"], "createdAt")
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function stepOf(row) {
|
|
87
|
+
return {
|
|
88
|
+
name: textOf(row["name"]),
|
|
89
|
+
title: textOf(row["title"]),
|
|
90
|
+
description: optionalText(row["description"]),
|
|
91
|
+
inputSchema: recordOrEmpty(row["inputSchema"]),
|
|
92
|
+
outputSchema: recordOrEmpty(row["outputSchema"]),
|
|
93
|
+
credentialKind: optionalText(row["credentialKind"])
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function nodeRunOf(row) {
|
|
97
|
+
return {
|
|
98
|
+
run: textOf(row["run"]),
|
|
99
|
+
node: textOf(row["node"]),
|
|
100
|
+
status: enumOrThrow(row["status"], NODE_RUN_STATUSES, "node status"),
|
|
101
|
+
attempts: Number(row["attempts"] ?? 0),
|
|
102
|
+
output: row["output"] ?? void 0,
|
|
103
|
+
error: optionalText(row["error"]),
|
|
104
|
+
startedAt: optionalInstant(row["startedAt"]),
|
|
105
|
+
endedAt: optionalInstant(row["endedAt"])
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function alertOf(row) {
|
|
109
|
+
const threshold = row["threshold"];
|
|
110
|
+
return {
|
|
111
|
+
id: textOf(row["id"]),
|
|
112
|
+
definition: textOf(row["definition"]),
|
|
113
|
+
onEvent: row["onEvent"] === "slow" ? "slow" : "failed",
|
|
114
|
+
threshold: threshold === null || threshold === void 0 ? void 0 : Number(threshold),
|
|
115
|
+
channel: recordOrEmpty(row["channel"]),
|
|
116
|
+
createdBy: optionalText(row["createdBy"]),
|
|
117
|
+
createdAt: requiredInstant(row["createdAt"], "createdAt")
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/** `map` over an object result, or `undefined` for anything else. */
|
|
121
|
+
function optionalOf(map) {
|
|
122
|
+
return (value) => isRecord(value) ? map(value) : void 0;
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region src/blocks/workflow-builder/workflow-builder.ts
|
|
126
|
+
const BUILDER_PREFIX = "builder:";
|
|
127
|
+
/**
|
|
128
|
+
* The `workflow-builder` module's definitions, versions, triggers,
|
|
129
|
+
* credentials, step library, node runs and alerts. The engine plugs in
|
|
130
|
+
* through `compile` and `start`; credential rows resolve through the
|
|
131
|
+
* `credentials` providers.
|
|
132
|
+
*
|
|
133
|
+
* ```ts
|
|
134
|
+
* const builder = createBuilder({
|
|
135
|
+
* transport: rpcTransport(supabase),
|
|
136
|
+
* compile: compileGraph,
|
|
137
|
+
* start: graphStarter({ executor: builderWorkflow, steps: { runNode } }),
|
|
138
|
+
* });
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
function createBuilder(options) {
|
|
142
|
+
applyTemporal(options);
|
|
143
|
+
injectableOf("workflow-builder compiler", options.compile);
|
|
144
|
+
injectableOf("workflow-builder starter", options.start);
|
|
145
|
+
const call = blockCall(options.transport, options.schema, options.mappers);
|
|
146
|
+
const serviceCall = blockCall(options.service ?? options.transport, options.schema, options.mappers);
|
|
147
|
+
const providers = options.credentials === void 0 ? [] : Array.isArray(options.credentials) ? options.credentials : [options.credentials];
|
|
148
|
+
const providerFor = (ref) => providers.find((provider) => provider.name === ref.provider);
|
|
149
|
+
const noProvider = (ref) => dbError("invalid_request", `No credential provider named "${ref.provider}" was passed to createBuilder`);
|
|
150
|
+
const getVersion = (version) => call("workflow_version_get", { version }, optionalOf(versionOf));
|
|
151
|
+
const startTarget = (caller, definition, start) => caller("workflow_start_target", { definition }, (value) => recordOf(value, "workflow_start_target")).andThen(async (row) => {
|
|
152
|
+
const target = {
|
|
153
|
+
definition: definitionOf(recordOf(row["definition"], "definition")),
|
|
154
|
+
version: versionOf(recordOf(row["version"], "version"))
|
|
155
|
+
};
|
|
156
|
+
return ok(await start(target));
|
|
157
|
+
});
|
|
158
|
+
const starterOf = () => options.start;
|
|
159
|
+
const missingStarter = () => dbError("invalid_request", "Pass `start` to createBuilder to run workflows");
|
|
160
|
+
const runWith = (caller, input) => {
|
|
161
|
+
const start = starterOf();
|
|
162
|
+
if (start === void 0) return AsyncResult.err(missingStarter());
|
|
163
|
+
return startTarget(caller, input.definition, (target) => start({
|
|
164
|
+
definition: target.definition,
|
|
165
|
+
version: target.version,
|
|
166
|
+
input: input.input ?? {},
|
|
167
|
+
tenant: target.definition.tenant,
|
|
168
|
+
actor: input.actor,
|
|
169
|
+
idempotencyKey: input.idempotencyKey ?? `run:${randomToken(16)}`,
|
|
170
|
+
...input.trigger === void 0 ? {} : { trigger: input.trigger }
|
|
171
|
+
}));
|
|
172
|
+
};
|
|
173
|
+
const credentialRow = (id) => serviceCall("workflow_credential_get", { credential: id }, (value) => isRecord(value) ? credentialOf(value) : void 0);
|
|
174
|
+
return {
|
|
175
|
+
definitions: {
|
|
176
|
+
save: (input) => call("save_workflow_definition", {
|
|
177
|
+
tenant: input.tenant,
|
|
178
|
+
slug: input.slug,
|
|
179
|
+
name: input.name,
|
|
180
|
+
description: input.description
|
|
181
|
+
}, (value) => definitionOf(recordOf(value, "save_workflow_definition"))),
|
|
182
|
+
list: (tenant) => call("workflow_definitions_list", { tenant }, (value) => recordsOf(value, "workflow_definitions_list").map(definitionOf)),
|
|
183
|
+
get: (id) => call("workflow_definition_get", { definition: id }, optionalOf(definitionOf)),
|
|
184
|
+
remove: (id) => call("remove_workflow_definition", { definition: id }, (value) => value === true)
|
|
185
|
+
},
|
|
186
|
+
versions: {
|
|
187
|
+
save: (definition, graph) => call("save_workflow_draft", {
|
|
188
|
+
definition,
|
|
189
|
+
graph
|
|
190
|
+
}, (value) => versionOf(recordOf(value, "save_workflow_draft"))),
|
|
191
|
+
publish: (version) => getVersion(version).andThen(async (found) => {
|
|
192
|
+
if (found === void 0) return err(dbError("not_found", "No such workflow version"));
|
|
193
|
+
let compiled = null;
|
|
194
|
+
if (options.compile !== void 0 && found.status !== "published") try {
|
|
195
|
+
compiled = await options.compile(found.graph ?? graphOf(void 0)) ?? null;
|
|
196
|
+
} catch (cause) {
|
|
197
|
+
return err(dbError("invalid_input", cause instanceof Error ? cause.message : String(cause)));
|
|
198
|
+
}
|
|
199
|
+
const publish = (caller, stored) => caller("publish_workflow_version", {
|
|
200
|
+
version,
|
|
201
|
+
compiled: stored
|
|
202
|
+
}, (value) => versionOf(recordOf(value, "publish_workflow_version")));
|
|
203
|
+
const result = await publish(call, null);
|
|
204
|
+
if (!result.ok || compiled === null || options.service === void 0) return result;
|
|
205
|
+
return publish(serviceCall, compiled);
|
|
206
|
+
}),
|
|
207
|
+
list: (definition) => call("workflow_versions_list", { definition }, (value) => recordsOf(value, "workflow_versions_list").map(versionOf)),
|
|
208
|
+
get: getVersion,
|
|
209
|
+
diff: (from, to) => getVersion(from).andThen(async (before) => {
|
|
210
|
+
const after = await getVersion(to);
|
|
211
|
+
if (!after.ok) return after;
|
|
212
|
+
if (before === void 0 || after.data === void 0) return err(dbError("not_found", "No such workflow version"));
|
|
213
|
+
return ok(diffGraphs(before.graph ?? graphOf(void 0), after.data.graph ?? graphOf(void 0)));
|
|
214
|
+
})
|
|
215
|
+
},
|
|
216
|
+
run: (input) => runWith(call, input),
|
|
217
|
+
triggers: {
|
|
218
|
+
save: (input) => call("save_workflow_trigger", {
|
|
219
|
+
definition: input.definition,
|
|
220
|
+
kind: input.kind,
|
|
221
|
+
config: input.config ?? {},
|
|
222
|
+
enabled: input.enabled ?? true,
|
|
223
|
+
trigger: input.id
|
|
224
|
+
}, (value) => triggerOf(recordOf(value, "save_workflow_trigger"))),
|
|
225
|
+
list: (definition) => call("workflow_triggers_list", { definition }, (value) => recordsOf(value, "workflow_triggers_list").map(triggerOf)),
|
|
226
|
+
remove: (id) => call("remove_workflow_trigger", { trigger: id }, (value) => value === true),
|
|
227
|
+
rotateToken: (id) => call("rotate_workflow_webhook_token", { trigger: id }, textOf),
|
|
228
|
+
webhook: async (request) => {
|
|
229
|
+
if (request.method !== "POST") return Response.json({ error: "Method not allowed" }, {
|
|
230
|
+
status: 405,
|
|
231
|
+
headers: { allow: "POST" }
|
|
232
|
+
});
|
|
233
|
+
const token = webhookToken(request);
|
|
234
|
+
if (token === void 0) return Response.json({ error: "Not found" }, { status: 404 });
|
|
235
|
+
const target = await serviceCall("workflow_webhook_target", { token }, (value) => isRecord(value) ? value : void 0);
|
|
236
|
+
if (!target.ok) return Response.json({ error: target.error.message }, { status: 500 });
|
|
237
|
+
if (target.data === void 0) return Response.json({ error: "Not found" }, { status: 404 });
|
|
238
|
+
const trigger = triggerOf(recordOf(target.data["trigger"], "trigger"));
|
|
239
|
+
const key = request.headers.get("idempotency-key");
|
|
240
|
+
const started = await runWith(serviceCall, {
|
|
241
|
+
definition: trigger.definition,
|
|
242
|
+
input: await bodyOf(request),
|
|
243
|
+
idempotencyKey: key === null || key.length === 0 ? `webhook:${trigger.id}:${randomToken(16)}` : `webhook:${trigger.id}:${key}`,
|
|
244
|
+
trigger
|
|
245
|
+
});
|
|
246
|
+
return started.ok ? Response.json({ runId: started.data }, { status: 202 }) : Response.json({ error: started.error.message }, { status: started.error.status });
|
|
247
|
+
},
|
|
248
|
+
onEvent: (event) => serviceCall("workflow_event_targets", {
|
|
249
|
+
type: event.type,
|
|
250
|
+
tenant: event.tenant
|
|
251
|
+
}, (value) => recordsOf(value, "workflow_event_targets")).andThen(async (rows) => {
|
|
252
|
+
const runs = [];
|
|
253
|
+
for (const row of rows) {
|
|
254
|
+
const trigger = triggerOf(recordOf(row["trigger"], "trigger"));
|
|
255
|
+
const started = await runWith(serviceCall, {
|
|
256
|
+
definition: trigger.definition,
|
|
257
|
+
input: event.payload ?? {},
|
|
258
|
+
idempotencyKey: `event:${trigger.id}:${event.id}`,
|
|
259
|
+
trigger
|
|
260
|
+
});
|
|
261
|
+
if (!started.ok) return started;
|
|
262
|
+
runs.push(started.data);
|
|
263
|
+
}
|
|
264
|
+
return ok(runs);
|
|
265
|
+
}),
|
|
266
|
+
syncSchedule: (trigger, tenant) => {
|
|
267
|
+
const cron = trigger.config["cron"];
|
|
268
|
+
if (trigger.kind !== "schedule" || typeof cron !== "string") return AsyncResult.err(dbError("invalid_input", "Only a schedule trigger with config.cron has a schedule"));
|
|
269
|
+
const timezone = trigger.config["timezone"];
|
|
270
|
+
return createWorkflows({
|
|
271
|
+
transport: options.service ?? options.transport,
|
|
272
|
+
...options.mappers === void 0 ? {} : { mappers: options.mappers }
|
|
273
|
+
}).schedules.create({
|
|
274
|
+
name: `builder-trigger:${trigger.id}`,
|
|
275
|
+
workflow: `${BUILDER_PREFIX}${trigger.definition}`,
|
|
276
|
+
cron,
|
|
277
|
+
...typeof timezone === "string" ? { timezone } : {},
|
|
278
|
+
input: trigger.config["input"] ?? {},
|
|
279
|
+
...tenant === void 0 ? {} : { tenant }
|
|
280
|
+
});
|
|
281
|
+
},
|
|
282
|
+
starter: (fallback) => async (scheduled) => {
|
|
283
|
+
if (!scheduled.workflow.startsWith(BUILDER_PREFIX)) {
|
|
284
|
+
if (fallback === void 0) throw new Error(`better-supabase: no starter for workflow "${scheduled.workflow}"`);
|
|
285
|
+
return fallback(scheduled);
|
|
286
|
+
}
|
|
287
|
+
return runWith(serviceCall, {
|
|
288
|
+
definition: scheduled.workflow.slice(8),
|
|
289
|
+
input: scheduled.input,
|
|
290
|
+
idempotencyKey: scheduled.idempotencyKey,
|
|
291
|
+
...scheduled.actor === void 0 ? {} : { actor: scheduled.actor }
|
|
292
|
+
}).orThrow();
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
credentials: {
|
|
296
|
+
list: (tenant) => call("workflow_credentials_list", { tenant }, (value) => recordsOf(value, "workflow_credentials_list").map(credentialOf)),
|
|
297
|
+
create: (input) => {
|
|
298
|
+
const save = () => call("save_workflow_credential", {
|
|
299
|
+
tenant: input.tenant,
|
|
300
|
+
kind: input.kind,
|
|
301
|
+
name: input.name,
|
|
302
|
+
ref: input.ref,
|
|
303
|
+
scopes: input.scopes ?? []
|
|
304
|
+
}, (value) => credentialOf(recordOf(value, "save_workflow_credential")));
|
|
305
|
+
if (input.secret === void 0) return save();
|
|
306
|
+
if (!credentialRefInTenant(input.ref, input.tenant)) return AsyncResult.err(foreignCredentialRef(input.tenant));
|
|
307
|
+
const provider = providerFor(input.ref);
|
|
308
|
+
if (provider === void 0) return AsyncResult.err(noProvider(input.ref));
|
|
309
|
+
if (provider.set === void 0) return AsyncResult.err(dbError("unsupported", `The credential provider "${provider.name}" can't store secrets`));
|
|
310
|
+
return provider.set(input.ref, input.secret, { subject: { type: "app" } }).andThen(() => save());
|
|
311
|
+
},
|
|
312
|
+
authorize: (id, authorize) => credentialRow(id).andThen(async (row) => {
|
|
313
|
+
if (row === void 0) return err(dbError("not_found", "No such credential"));
|
|
314
|
+
const provider = providerFor(row.ref);
|
|
315
|
+
if (provider === void 0) return err(noProvider(row.ref));
|
|
316
|
+
if (provider.startAuthorization === void 0 || !provider.capabilities(row.ref).authorization) return err(dbError("unsupported", `The credential provider "${provider.name}" doesn't authorize accounts`));
|
|
317
|
+
return provider.startAuthorization(row.ref, {
|
|
318
|
+
subject: { type: "app" },
|
|
319
|
+
redirectUri: authorize.redirectUri,
|
|
320
|
+
scopes: row.scopes,
|
|
321
|
+
...authorize.state === void 0 ? {} : { state: authorize.state }
|
|
322
|
+
}).map((started) => started.url);
|
|
323
|
+
}),
|
|
324
|
+
revoke: (id) => call("remove_workflow_credential", { credential: id }, (value) => isRecord(value) ? credentialOf(value) : void 0).andThen(async (row) => {
|
|
325
|
+
if (row === void 0) return ok(false);
|
|
326
|
+
if (!credentialRefInTenant(row.ref, row.tenant)) return ok(true);
|
|
327
|
+
const provider = providerFor(row.ref);
|
|
328
|
+
if (provider === void 0) return err(noProvider(row.ref));
|
|
329
|
+
if (!provider.capabilities(row.ref).revoke) return ok(true);
|
|
330
|
+
const revoked = await provider.revoke(row.ref, { subject: { type: "app" } });
|
|
331
|
+
return revoked.ok ? ok(true) : revoked;
|
|
332
|
+
}),
|
|
333
|
+
resolve: (id) => credentialRow(id).andThen(async (row) => {
|
|
334
|
+
if (row === void 0) return err(dbError("not_found", "No such credential"));
|
|
335
|
+
if (!credentialRefInTenant(row.ref, row.tenant)) return err(foreignCredentialRef(row.tenant));
|
|
336
|
+
const provider = providerFor(row.ref);
|
|
337
|
+
if (provider === void 0) return err(noProvider(row.ref));
|
|
338
|
+
return provider.getToken(row.ref, {
|
|
339
|
+
subject: { type: "app" },
|
|
340
|
+
scopes: row.scopes
|
|
341
|
+
});
|
|
342
|
+
})
|
|
343
|
+
},
|
|
344
|
+
steps: {
|
|
345
|
+
sync: (steps = options.steps ?? []) => serviceCall("sync_workflow_steps", { steps: Object.fromEntries(steps.map((step) => [step.name, {
|
|
346
|
+
title: step.title,
|
|
347
|
+
description: step.description,
|
|
348
|
+
inputSchema: step.inputSchema ?? {},
|
|
349
|
+
outputSchema: step.outputSchema ?? {},
|
|
350
|
+
credentialKind: step.credentialKind
|
|
351
|
+
}])) }, Number),
|
|
352
|
+
list: () => call("workflow_steps_list", {}, (value) => recordsOf(value, "workflow_steps_list").map(stepOf))
|
|
353
|
+
},
|
|
354
|
+
nodeRuns: {
|
|
355
|
+
record: (input) => serviceCall("record_workflow_node_run", {
|
|
356
|
+
run: input.run,
|
|
357
|
+
node: input.node,
|
|
358
|
+
status: input.status,
|
|
359
|
+
attempt: input.attempt,
|
|
360
|
+
output: input.output,
|
|
361
|
+
error: input.error
|
|
362
|
+
}, (value) => value === true),
|
|
363
|
+
list: (run) => call("workflow_node_runs_list", { run }, (value) => recordsOf(value, "workflow_node_runs_list").map(nodeRunOf))
|
|
364
|
+
},
|
|
365
|
+
alerts: {
|
|
366
|
+
save: (input) => call("save_workflow_alert", {
|
|
367
|
+
definition: input.definition,
|
|
368
|
+
on_event: input.onEvent,
|
|
369
|
+
channel: input.channel ?? {},
|
|
370
|
+
threshold: input.threshold === void 0 ? void 0 : seconds(input.threshold),
|
|
371
|
+
alert: input.id
|
|
372
|
+
}, (value) => alertOf(recordOf(value, "save_workflow_alert"))),
|
|
373
|
+
list: (definition) => call("workflow_alerts_list", { definition }, (value) => recordsOf(value, "workflow_alerts_list").map(alertOf)),
|
|
374
|
+
remove: (id) => call("remove_workflow_alert", { alert: id }, (value) => value === true),
|
|
375
|
+
check: (check = {}) => serviceCall("check_workflow_alerts", { batch: check.batch }, Number)
|
|
376
|
+
}
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
function webhookToken(request) {
|
|
380
|
+
const header = request.headers.get("authorization");
|
|
381
|
+
if (header !== null && /^bearer\s+/i.test(header)) {
|
|
382
|
+
const token = header.replace(/^bearer\s+/i, "").trim();
|
|
383
|
+
return token.length > 0 ? token : void 0;
|
|
384
|
+
}
|
|
385
|
+
const segment = new URL(request.url).pathname.split("/").findLast(Boolean);
|
|
386
|
+
return segment?.startsWith("wfh_") === true ? decodeURIComponent(segment) : void 0;
|
|
387
|
+
}
|
|
388
|
+
async function bodyOf(request) {
|
|
389
|
+
const text = await request.text();
|
|
390
|
+
if (text.length === 0) return {};
|
|
391
|
+
try {
|
|
392
|
+
return JSON.parse(text);
|
|
393
|
+
} catch {
|
|
394
|
+
return { body: text };
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
//#endregion
|
|
398
|
+
export { createBuilder as t };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { T as WorkflowGraph, c as NodeRunRecord, i as BuilderStarter } from "../../types-BI-0Sl2v.js";
|
|
2
|
+
import { i as executeGraph, n as GraphStepCall, r as approvalToken, t as GraphRuntime } from "../../executor-D14tGopJ.js";
|
|
3
|
+
import { o as WorkflowFn } from "../../workflow-sdk-B3yLD6Br.js";
|
|
4
|
+
import { World } from "@workflow/world";
|
|
5
|
+
//#region src/workflow-sdk/builder/builder.d.ts
|
|
6
|
+
/** The env flag the Workflow SDK reads before it starts or runs dynamic source. */
|
|
7
|
+
export declare const DYNAMIC_WORKFLOWS_ENV = "WORKFLOW_EXPERIMENTAL_DYNAMIC_WORKFLOWS";
|
|
8
|
+
/** The Workflow SDK's limit on dynamic source. */
|
|
9
|
+
export declare const DYNAMIC_SOURCE_MAX_BYTES: number;
|
|
10
|
+
/** A graph compiled to Workflow SDK dynamic source. */
|
|
11
|
+
interface CompiledGraph {
|
|
12
|
+
readonly engine: "workflow-sdk";
|
|
13
|
+
readonly format: 1;
|
|
14
|
+
/** The workflow function's name in `source`. */
|
|
15
|
+
readonly exportName: string;
|
|
16
|
+
/** `async function workflow(input, meta)`, bound to `steps`, `sleep` and `createHook`. */
|
|
17
|
+
readonly source: string;
|
|
18
|
+
/** The step each `steps.<alias>` call runs, by alias (one alias per step node). */
|
|
19
|
+
readonly aliases: Readonly<Record<string, string>>;
|
|
20
|
+
}
|
|
21
|
+
/** The second argument of a compiled or static run. */
|
|
22
|
+
interface GraphRunMeta {
|
|
23
|
+
/** Approval hooks use `<runKey>:<node>` as their token. */
|
|
24
|
+
readonly runKey: string;
|
|
25
|
+
readonly definition: string;
|
|
26
|
+
readonly version: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Compiles a graph to Workflow SDK dynamic source: plain JavaScript that
|
|
30
|
+
* calls each step node through its own alias, sleeps with `sleep` and waits
|
|
31
|
+
* on approvals with `createHook({ token: "<runKey>:<node>" })`. It runs the
|
|
32
|
+
* same way `executeGraph` does. Throws when the graph is invalid or the
|
|
33
|
+
* source is over 128 KiB. Pass it as `compile` to `createBuilder`.
|
|
34
|
+
*/
|
|
35
|
+
export declare function compileGraph(graph: WorkflowGraph): CompiledGraph;
|
|
36
|
+
/** `value` as a compiled graph, or `undefined` when it isn't one. */
|
|
37
|
+
export declare function compiledGraphOf(value: unknown): CompiledGraph | undefined;
|
|
38
|
+
/** A step a graph can call: a `"use step"` function, or `{ stepId }`. */
|
|
39
|
+
type GraphStep = ((call: GraphStepCall) => Promise<unknown>) | {
|
|
40
|
+
readonly stepId: string;
|
|
41
|
+
};
|
|
42
|
+
interface GraphStarterOptions {
|
|
43
|
+
/** The library's step functions by step name; each takes a `GraphStepCall`. */
|
|
44
|
+
readonly steps: Readonly<Record<string, GraphStep>>;
|
|
45
|
+
/**
|
|
46
|
+
* The static executor: a `"use workflow"` function that calls
|
|
47
|
+
* `executeGraph(graph, input, runtime)`. Runs start with it when dynamic
|
|
48
|
+
* workflows are off.
|
|
49
|
+
*/
|
|
50
|
+
readonly executor?: WorkflowFn<[WorkflowGraph, unknown, GraphRunMeta]>;
|
|
51
|
+
/** Whether to start dynamic source; defaults to `WORKFLOW_EXPERIMENTAL_DYNAMIC_WORKFLOWS`. */
|
|
52
|
+
readonly dynamic?: boolean;
|
|
53
|
+
/** The World to look idempotency keys up in. Defaults to the configured one. */
|
|
54
|
+
readonly world?: World;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The `start` for `createBuilder`: starts the published version as dynamic
|
|
58
|
+
* source when dynamic workflows are on, and through `executor` otherwise.
|
|
59
|
+
* The source is always compiled from the version's graph; a stored
|
|
60
|
+
* compiled form is never run. Runs carry
|
|
61
|
+
* `bs.tenant`, `bs.actor`, `bs.definition`, `bs.version` and `bs.key`, and
|
|
62
|
+
* a repeated key returns the first run.
|
|
63
|
+
*/
|
|
64
|
+
export declare function graphStarter(options: GraphStarterOptions): BuilderStarter;
|
|
65
|
+
/** Where `nodeRunReporter` writes: `builder.nodeRuns` from `createBuilder`. */
|
|
66
|
+
interface NodeRunSink {
|
|
67
|
+
record(input: NodeRunRecord): PromiseLike<unknown>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Wraps a step so it records its node in `workflow_node_runs`: `running`
|
|
71
|
+
* with the attempt when it starts, then `completed` with its output or
|
|
72
|
+
* `failed` with the error. Call the result inside a `"use step"` function;
|
|
73
|
+
* a failed record never fails the step.
|
|
74
|
+
*
|
|
75
|
+
* ```ts
|
|
76
|
+
* const report = nodeRunReporter(serviceBuilder.nodeRuns);
|
|
77
|
+
* export async function sendEmail(call: GraphStepCall) {
|
|
78
|
+
* "use step";
|
|
79
|
+
* return report(call, () => email.send(call.config));
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare function nodeRunReporter(sink: NodeRunSink): <T>(call: GraphStepCall, run: () => Promise<T>) => Promise<T>;
|
|
84
|
+
//#endregion
|
|
85
|
+
export { type CompiledGraph, type GraphRunMeta, type GraphRuntime, type GraphStarterOptions, type GraphStep, type GraphStepCall, type NodeRunSink, approvalToken, executeGraph };
|