@baasix/baasix 0.1.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/LICENSE.MD +85 -0
- package/README.md +526 -0
- package/assets/banner.jpg +0 -0
- package/assets/banner_small.jpg +0 -0
- package/assets/logo_icon.svg +20 -0
- package/assets/logo_icon_rounded.svg +20 -0
- package/dist/LICENSE.MD +85 -0
- package/dist/README.md +526 -0
- package/dist/app/404/index.html +1 -0
- package/dist/app/404.html +1 -0
- package/dist/app/_next/static/chunks/041e1f03-56ae8a902a7f2fe6.js +24 -0
- package/dist/app/_next/static/chunks/1117-05479929a8da73e3.js +1 -0
- package/dist/app/_next/static/chunks/1299.77cc7b7b76b75cba.js +1 -0
- package/dist/app/_next/static/chunks/1303-35a96e9c9cdeab9d.js +1 -0
- package/dist/app/_next/static/chunks/1509-56ac00cdaaecdf53.js +1 -0
- package/dist/app/_next/static/chunks/1668-e3eabd0f6753c780.js +1 -0
- package/dist/app/_next/static/chunks/1783-d9fb550fd324300c.js +1 -0
- package/dist/app/_next/static/chunks/2117-29b5fa47421595ad.js +2 -0
- package/dist/app/_next/static/chunks/2344.35b46d2179a765b5.js +1 -0
- package/dist/app/_next/static/chunks/257.990da16794a31292.js +1 -0
- package/dist/app/_next/static/chunks/2676-73b0ee7c80073a84.js +1 -0
- package/dist/app/_next/static/chunks/3563-b8842744384391fe.js +1 -0
- package/dist/app/_next/static/chunks/363642f4-933b579ed3c85f60.js +1 -0
- package/dist/app/_next/static/chunks/3817-e20c8f0a0810fc95.js +1 -0
- package/dist/app/_next/static/chunks/3834.84944e390d902509.js +2 -0
- package/dist/app/_next/static/chunks/4043-3a30c8a75896f241.js +1 -0
- package/dist/app/_next/static/chunks/4225-14090c7c0cd9dec6.js +1 -0
- package/dist/app/_next/static/chunks/4438-c9a12ca15b6e9160.js +1 -0
- package/dist/app/_next/static/chunks/4458-679fd0c6884f456a.js +1 -0
- package/dist/app/_next/static/chunks/4475-8bdfbd536fba8c48.js +1 -0
- package/dist/app/_next/static/chunks/4883-8a924721bb21b3b0.js +1 -0
- package/dist/app/_next/static/chunks/489-683ab07188f9df2b.js +1 -0
- package/dist/app/_next/static/chunks/4952-1b97320cf61f3f21.js +1 -0
- package/dist/app/_next/static/chunks/5094-8d53e403235d4ca6.js +1 -0
- package/dist/app/_next/static/chunks/5101-3a146e0625747ad1.js +1 -0
- package/dist/app/_next/static/chunks/54a60aa6-d9747982e0a81f58.js +79 -0
- package/dist/app/_next/static/chunks/5650-f096291df402bfc2.js +1 -0
- package/dist/app/_next/static/chunks/600-539045311240f579.js +1 -0
- package/dist/app/_next/static/chunks/6170-803b82e19d3ade6d.js +89 -0
- package/dist/app/_next/static/chunks/6241-30d7169d1010e5a4.js +1 -0
- package/dist/app/_next/static/chunks/6530-a91e10cffa4200c4.js +1 -0
- package/dist/app/_next/static/chunks/6547-4bbbdb5c399aef1e.js +1 -0
- package/dist/app/_next/static/chunks/6712-781937c53a2c49da.js +1 -0
- package/dist/app/_next/static/chunks/6fcbdc68-90be1a5480b8d353.js +1 -0
- package/dist/app/_next/static/chunks/70e0d97a-aeaf0cdc26ba1a58.js +1 -0
- package/dist/app/_next/static/chunks/7214-5154a89d08d24dde.js +1 -0
- package/dist/app/_next/static/chunks/7324-b53229c59a640880.js +10 -0
- package/dist/app/_next/static/chunks/7636-66424f0b51d350e9.js +1 -0
- package/dist/app/_next/static/chunks/7874-39a3f2541165a675.js +1 -0
- package/dist/app/_next/static/chunks/7982-9da12b83f11e3f5f.js +1 -0
- package/dist/app/_next/static/chunks/8213a2eb-da25a3b3c5521b2b.js +1 -0
- package/dist/app/_next/static/chunks/8473-6598318371eca31b.js +1 -0
- package/dist/app/_next/static/chunks/8640fa6b-72e43370f68e5587.js +1 -0
- package/dist/app/_next/static/chunks/9090-3ef676f29c95f1c7.js +1 -0
- package/dist/app/_next/static/chunks/9124-a02f9e209e6e3cce.js +1 -0
- package/dist/app/_next/static/chunks/926-156f32067d111d6b.js +1 -0
- package/dist/app/_next/static/chunks/9487-b17481605e513b83.js +1 -0
- package/dist/app/_next/static/chunks/9599-a7e572bb88c3392b.js +1 -0
- package/dist/app/_next/static/chunks/9881-419697138376e755.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/all-activity/page-8917930b4d663405.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/email-log/page-b27a6ee32782d7df.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/notifications/page-b7eda523ede2702c.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/page-1cfa62d1caedaed0.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/sessions/page-3e21e20db90aeff7.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/workflow-executions/page-27bcc26b747fb29b.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/workflow-logs/page-9f9e9e952aef436e.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/change-password/page-8d61aa499eabb127.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/dashboard/page-1ceeac9e72997a8a.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/data-browser/page-8cda2b57759dd670.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/file-manager/page-8c6f1b1da66ad7e4.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/layout-f70d225b2759c998.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/migrations/page-aacec8f7cfb40ab2.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/permissions/page-828110cfcde429c6.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/project/page-420e794bb76bd204.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/roles/page-9001d02b28f70708.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/schema/page-899574f35091dd58.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/tasks/page-ad7ab3e27c83f44f.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/templates/edit/page-bd83414cb8c4cb04.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/templates/page-3181447f8772b1d3.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/tenants/page-ef9bfbacef5a1d73.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/invites/page-480306b7b2bbac7e.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/list/page-74da51254c2606b3.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/page-e99c6f0b915001b2.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/preferences/page-1a935630ce8f2b12.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/user-roles/page-901dfb8ea1f39ca8.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/workflows/detail/page-9a6b839aea688ca4.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/workflows/edit/page-11774efbc2fecae2.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/workflows/execution/page-8ec1aea90412c03d.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/workflows/page-88bc5b36ccb0a1f7.js +1 -0
- package/dist/app/_next/static/chunks/app/(public)/forgot-password/page-ed263fd46ef81c20.js +1 -0
- package/dist/app/_next/static/chunks/app/(public)/layout-f538977545844af8.js +1 -0
- package/dist/app/_next/static/chunks/app/(public)/login/page-c0a10b137f346096.js +1 -0
- package/dist/app/_next/static/chunks/app/(public)/register/page-4cb7644893efd9b3.js +1 -0
- package/dist/app/_next/static/chunks/app/_not-found/page-653f8815b78256cc.js +1 -0
- package/dist/app/_next/static/chunks/app/layout-591ca7a3e16528a1.js +1 -0
- package/dist/app/_next/static/chunks/app/page-dd19d124b5fa2577.js +1 -0
- package/dist/app/_next/static/chunks/c37d3baf.c2ff165f5b02c692.js +1 -0
- package/dist/app/_next/static/chunks/d0deef33.0379166a4ec23470.js +1 -0
- package/dist/app/_next/static/chunks/fd9d1056-54169f07cd680d6c.js +1 -0
- package/dist/app/_next/static/chunks/framework-8e0e0f4a6b83a956.js +1 -0
- package/dist/app/_next/static/chunks/main-324e91f5a430cddf.js +1 -0
- package/dist/app/_next/static/chunks/main-app-55bcae20c77aaf0e.js +1 -0
- package/dist/app/_next/static/chunks/pages/_app-3c9ca398d360b709.js +1 -0
- package/dist/app/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js +1 -0
- package/dist/app/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/dist/app/_next/static/chunks/webpack-2c306566f7ee1b63.js +1 -0
- package/dist/app/_next/static/css/6c4002bae4e236b2.css +3 -0
- package/dist/app/_next/static/css/a275cc2b185e04f8.css +1 -0
- package/dist/app/_next/static/eCWhKA8XHqmB1zgFcEtN2/_buildManifest.js +1 -0
- package/dist/app/_next/static/eCWhKA8XHqmB1zgFcEtN2/_ssgManifest.js +1 -0
- package/dist/app/activity-log/all-activity/index.html +1 -0
- package/dist/app/activity-log/all-activity/index.txt +14 -0
- package/dist/app/activity-log/email-log/index.html +1 -0
- package/dist/app/activity-log/email-log/index.txt +14 -0
- package/dist/app/activity-log/index.html +1 -0
- package/dist/app/activity-log/index.txt +14 -0
- package/dist/app/activity-log/notifications/index.html +1 -0
- package/dist/app/activity-log/notifications/index.txt +14 -0
- package/dist/app/activity-log/sessions/index.html +1 -0
- package/dist/app/activity-log/sessions/index.txt +14 -0
- package/dist/app/activity-log/workflow-executions/index.html +1 -0
- package/dist/app/activity-log/workflow-executions/index.txt +14 -0
- package/dist/app/activity-log/workflow-logs/index.html +1 -0
- package/dist/app/activity-log/workflow-logs/index.txt +14 -0
- package/dist/app/change-password/index.html +1 -0
- package/dist/app/change-password/index.txt +14 -0
- package/dist/app/dashboard/index.html +1 -0
- package/dist/app/dashboard/index.txt +14 -0
- package/dist/app/data-browser/index.html +1 -0
- package/dist/app/data-browser/index.txt +14 -0
- package/dist/app/file-manager/index.html +1 -0
- package/dist/app/file-manager/index.txt +14 -0
- package/dist/app/forgot-password/index.html +1 -0
- package/dist/app/forgot-password/index.txt +13 -0
- package/dist/app/index.html +1 -0
- package/dist/app/index.txt +9 -0
- package/dist/app/login/index.html +1 -0
- package/dist/app/login/index.txt +13 -0
- package/dist/app/logo-dark.png +0 -0
- package/dist/app/logo-icon.svg +81 -0
- package/dist/app/logo-light.png +0 -0
- package/dist/app/register/index.html +1 -0
- package/dist/app/register/index.txt +13 -0
- package/dist/app/settings/migrations/index.html +1 -0
- package/dist/app/settings/migrations/index.txt +14 -0
- package/dist/app/settings/permissions/index.html +1 -0
- package/dist/app/settings/permissions/index.txt +14 -0
- package/dist/app/settings/project/index.html +1 -0
- package/dist/app/settings/project/index.txt +14 -0
- package/dist/app/settings/roles/index.html +1 -0
- package/dist/app/settings/roles/index.txt +14 -0
- package/dist/app/settings/schema/index.html +1 -0
- package/dist/app/settings/schema/index.txt +14 -0
- package/dist/app/settings/tasks/index.html +1 -0
- package/dist/app/settings/tasks/index.txt +14 -0
- package/dist/app/settings/templates/edit/index.html +1 -0
- package/dist/app/settings/templates/edit/index.txt +14 -0
- package/dist/app/settings/templates/index.html +1 -0
- package/dist/app/settings/templates/index.txt +14 -0
- package/dist/app/settings/tenants/index.html +1 -0
- package/dist/app/settings/tenants/index.txt +14 -0
- package/dist/app/users/index.html +1 -0
- package/dist/app/users/index.txt +14 -0
- package/dist/app/users/invites/index.html +1 -0
- package/dist/app/users/invites/index.txt +14 -0
- package/dist/app/users/list/index.html +1 -0
- package/dist/app/users/list/index.txt +14 -0
- package/dist/app/users/preferences/index.html +1 -0
- package/dist/app/users/preferences/index.txt +14 -0
- package/dist/app/users/user-roles/index.html +1 -0
- package/dist/app/users/user-roles/index.txt +14 -0
- package/dist/app/workflows/detail/index.html +1 -0
- package/dist/app/workflows/detail/index.txt +14 -0
- package/dist/app/workflows/edit/index.html +1 -0
- package/dist/app/workflows/edit/index.txt +14 -0
- package/dist/app/workflows/execution/index.html +1 -0
- package/dist/app/workflows/execution/index.txt +14 -0
- package/dist/app/workflows/index.html +1 -0
- package/dist/app/workflows/index.txt +14 -0
- package/dist/app.d.ts +36 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +546 -0
- package/dist/app.js.map +1 -0
- package/dist/auth/adapters/baasix-adapter.d.ts +12 -0
- package/dist/auth/adapters/baasix-adapter.d.ts.map +1 -0
- package/dist/auth/adapters/baasix-adapter.js +318 -0
- package/dist/auth/adapters/baasix-adapter.js.map +1 -0
- package/dist/auth/adapters/index.d.ts +6 -0
- package/dist/auth/adapters/index.d.ts.map +1 -0
- package/dist/auth/adapters/index.js +5 -0
- package/dist/auth/adapters/index.js.map +1 -0
- package/dist/auth/core.d.ts +73 -0
- package/dist/auth/core.d.ts.map +1 -0
- package/dist/auth/core.js +528 -0
- package/dist/auth/core.js.map +1 -0
- package/dist/auth/index.d.ts +56 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +58 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth2/index.d.ts +5 -0
- package/dist/auth/oauth2/index.d.ts.map +1 -0
- package/dist/auth/oauth2/index.js +5 -0
- package/dist/auth/oauth2/index.js.map +1 -0
- package/dist/auth/oauth2/utils.d.ts +90 -0
- package/dist/auth/oauth2/utils.d.ts.map +1 -0
- package/dist/auth/oauth2/utils.js +167 -0
- package/dist/auth/oauth2/utils.js.map +1 -0
- package/dist/auth/providers/apple.d.ts +28 -0
- package/dist/auth/providers/apple.d.ts.map +1 -0
- package/dist/auth/providers/apple.js +192 -0
- package/dist/auth/providers/apple.js.map +1 -0
- package/dist/auth/providers/credential.d.ts +87 -0
- package/dist/auth/providers/credential.d.ts.map +1 -0
- package/dist/auth/providers/credential.js +162 -0
- package/dist/auth/providers/credential.js.map +1 -0
- package/dist/auth/providers/facebook.d.ts +26 -0
- package/dist/auth/providers/facebook.d.ts.map +1 -0
- package/dist/auth/providers/facebook.js +112 -0
- package/dist/auth/providers/facebook.js.map +1 -0
- package/dist/auth/providers/github.d.ts +29 -0
- package/dist/auth/providers/github.d.ts.map +1 -0
- package/dist/auth/providers/github.js +144 -0
- package/dist/auth/providers/github.js.map +1 -0
- package/dist/auth/providers/google.d.ts +32 -0
- package/dist/auth/providers/google.d.ts.map +1 -0
- package/dist/auth/providers/google.js +145 -0
- package/dist/auth/providers/google.js.map +1 -0
- package/dist/auth/providers/index.d.ts +22 -0
- package/dist/auth/providers/index.d.ts.map +1 -0
- package/dist/auth/providers/index.js +17 -0
- package/dist/auth/providers/index.js.map +1 -0
- package/dist/auth/routes.d.ts +63 -0
- package/dist/auth/routes.d.ts.map +1 -0
- package/dist/auth/routes.js +827 -0
- package/dist/auth/routes.js.map +1 -0
- package/dist/auth/services/index.d.ts +10 -0
- package/dist/auth/services/index.d.ts.map +1 -0
- package/dist/auth/services/index.js +7 -0
- package/dist/auth/services/index.js.map +1 -0
- package/dist/auth/services/session.d.ts +81 -0
- package/dist/auth/services/session.d.ts.map +1 -0
- package/dist/auth/services/session.js +186 -0
- package/dist/auth/services/session.js.map +1 -0
- package/dist/auth/services/token.d.ts +41 -0
- package/dist/auth/services/token.d.ts.map +1 -0
- package/dist/auth/services/token.js +44 -0
- package/dist/auth/services/token.js.map +1 -0
- package/dist/auth/services/verification.d.ts +77 -0
- package/dist/auth/services/verification.d.ts.map +1 -0
- package/dist/auth/services/verification.js +143 -0
- package/dist/auth/services/verification.js.map +1 -0
- package/dist/auth/types.d.ts +318 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +6 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/customTypes/arrays.d.ts +200 -0
- package/dist/customTypes/arrays.d.ts.map +1 -0
- package/dist/customTypes/arrays.js +309 -0
- package/dist/customTypes/arrays.js.map +1 -0
- package/dist/customTypes/index.d.ts +8 -0
- package/dist/customTypes/index.d.ts.map +1 -0
- package/dist/customTypes/index.js +11 -0
- package/dist/customTypes/index.js.map +1 -0
- package/dist/customTypes/postgis.d.ts +146 -0
- package/dist/customTypes/postgis.d.ts.map +1 -0
- package/dist/customTypes/postgis.js +315 -0
- package/dist/customTypes/postgis.js.map +1 -0
- package/dist/customTypes/ranges.d.ts +128 -0
- package/dist/customTypes/ranges.d.ts.map +1 -0
- package/dist/customTypes/ranges.js +257 -0
- package/dist/customTypes/ranges.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/0.1.0-alpha.0_initial_setup.d.ts +29 -0
- package/dist/migrations/0.1.0-alpha.0_initial_setup.d.ts.map +1 -0
- package/dist/migrations/0.1.0-alpha.0_initial_setup.js +72 -0
- package/dist/migrations/0.1.0-alpha.0_initial_setup.js.map +1 -0
- package/dist/migrations/_example_migration.d.ts +31 -0
- package/dist/migrations/_example_migration.d.ts.map +1 -0
- package/dist/migrations/_example_migration.js +75 -0
- package/dist/migrations/_example_migration.js.map +1 -0
- package/dist/plugins/definePlugin.d.ts +49 -0
- package/dist/plugins/definePlugin.d.ts.map +1 -0
- package/dist/plugins/definePlugin.js +131 -0
- package/dist/plugins/definePlugin.js.map +1 -0
- package/dist/plugins/softDelete.d.ts +179 -0
- package/dist/plugins/softDelete.d.ts.map +1 -0
- package/dist/plugins/softDelete.js +235 -0
- package/dist/plugins/softDelete.js.map +1 -0
- package/dist/routes/auth.route.d.ts +14 -0
- package/dist/routes/auth.route.d.ts.map +1 -0
- package/dist/routes/auth.route.js +421 -0
- package/dist/routes/auth.route.js.map +1 -0
- package/dist/routes/file.route.d.ts +7 -0
- package/dist/routes/file.route.d.ts.map +1 -0
- package/dist/routes/file.route.js +274 -0
- package/dist/routes/file.route.js.map +1 -0
- package/dist/routes/items.route.d.ts +7 -0
- package/dist/routes/items.route.d.ts.map +1 -0
- package/dist/routes/items.route.js +369 -0
- package/dist/routes/items.route.js.map +1 -0
- package/dist/routes/migration.route.d.ts +7 -0
- package/dist/routes/migration.route.d.ts.map +1 -0
- package/dist/routes/migration.route.js +225 -0
- package/dist/routes/migration.route.js.map +1 -0
- package/dist/routes/notification.route.d.ts +7 -0
- package/dist/routes/notification.route.d.ts.map +1 -0
- package/dist/routes/notification.route.js +124 -0
- package/dist/routes/notification.route.js.map +1 -0
- package/dist/routes/openapi.route.d.ts +7 -0
- package/dist/routes/openapi.route.d.ts.map +1 -0
- package/dist/routes/openapi.route.js +2169 -0
- package/dist/routes/openapi.route.js.map +1 -0
- package/dist/routes/permission.route.d.ts +7 -0
- package/dist/routes/permission.route.d.ts.map +1 -0
- package/dist/routes/permission.route.js +158 -0
- package/dist/routes/permission.route.js.map +1 -0
- package/dist/routes/realtime.route.d.ts +21 -0
- package/dist/routes/realtime.route.d.ts.map +1 -0
- package/dist/routes/realtime.route.js +243 -0
- package/dist/routes/realtime.route.js.map +1 -0
- package/dist/routes/reports.route.d.ts +7 -0
- package/dist/routes/reports.route.d.ts.map +1 -0
- package/dist/routes/reports.route.js +95 -0
- package/dist/routes/reports.route.js.map +1 -0
- package/dist/routes/schema.route.d.ts +7 -0
- package/dist/routes/schema.route.d.ts.map +1 -0
- package/dist/routes/schema.route.js +1780 -0
- package/dist/routes/schema.route.js.map +1 -0
- package/dist/routes/settings.route.d.ts +7 -0
- package/dist/routes/settings.route.d.ts.map +1 -0
- package/dist/routes/settings.route.js +154 -0
- package/dist/routes/settings.route.js.map +1 -0
- package/dist/routes/templates.route.d.ts +7 -0
- package/dist/routes/templates.route.d.ts.map +1 -0
- package/dist/routes/templates.route.js +91 -0
- package/dist/routes/templates.route.js.map +1 -0
- package/dist/routes/utils.route.d.ts +7 -0
- package/dist/routes/utils.route.d.ts.map +1 -0
- package/dist/routes/utils.route.js +33 -0
- package/dist/routes/utils.route.js.map +1 -0
- package/dist/routes/workflow.route.d.ts +7 -0
- package/dist/routes/workflow.route.d.ts.map +1 -0
- package/dist/routes/workflow.route.js +787 -0
- package/dist/routes/workflow.route.js.map +1 -0
- package/dist/services/AssetsService.d.ts +39 -0
- package/dist/services/AssetsService.d.ts.map +1 -0
- package/dist/services/AssetsService.js +255 -0
- package/dist/services/AssetsService.js.map +1 -0
- package/dist/services/CacheService.d.ts +169 -0
- package/dist/services/CacheService.d.ts.map +1 -0
- package/dist/services/CacheService.js +722 -0
- package/dist/services/CacheService.js.map +1 -0
- package/dist/services/FilesService.d.ts +30 -0
- package/dist/services/FilesService.d.ts.map +1 -0
- package/dist/services/FilesService.js +268 -0
- package/dist/services/FilesService.js.map +1 -0
- package/dist/services/HooksManager.d.ts +38 -0
- package/dist/services/HooksManager.d.ts.map +1 -0
- package/dist/services/HooksManager.js +165 -0
- package/dist/services/HooksManager.js.map +1 -0
- package/dist/services/ItemsService.d.ts +273 -0
- package/dist/services/ItemsService.d.ts.map +1 -0
- package/dist/services/ItemsService.js +2458 -0
- package/dist/services/ItemsService.js.map +1 -0
- package/dist/services/MailService.d.ts +76 -0
- package/dist/services/MailService.d.ts.map +1 -0
- package/dist/services/MailService.js +585 -0
- package/dist/services/MailService.js.map +1 -0
- package/dist/services/MigrationService.d.ts +243 -0
- package/dist/services/MigrationService.d.ts.map +1 -0
- package/dist/services/MigrationService.js +914 -0
- package/dist/services/MigrationService.js.map +1 -0
- package/dist/services/NotificationService.d.ts +35 -0
- package/dist/services/NotificationService.d.ts.map +1 -0
- package/dist/services/NotificationService.js +159 -0
- package/dist/services/NotificationService.js.map +1 -0
- package/dist/services/PermissionService.d.ts +128 -0
- package/dist/services/PermissionService.d.ts.map +1 -0
- package/dist/services/PermissionService.js +373 -0
- package/dist/services/PermissionService.js.map +1 -0
- package/dist/services/PluginManager.d.ts +138 -0
- package/dist/services/PluginManager.d.ts.map +1 -0
- package/dist/services/PluginManager.js +463 -0
- package/dist/services/PluginManager.js.map +1 -0
- package/dist/services/RealtimeService.d.ts +209 -0
- package/dist/services/RealtimeService.d.ts.map +1 -0
- package/dist/services/RealtimeService.js +978 -0
- package/dist/services/RealtimeService.js.map +1 -0
- package/dist/services/ReportService.d.ts +13 -0
- package/dist/services/ReportService.d.ts.map +1 -0
- package/dist/services/ReportService.js +91 -0
- package/dist/services/ReportService.js.map +1 -0
- package/dist/services/SettingsService.d.ts +60 -0
- package/dist/services/SettingsService.d.ts.map +1 -0
- package/dist/services/SettingsService.js +474 -0
- package/dist/services/SettingsService.js.map +1 -0
- package/dist/services/SocketService.d.ts +129 -0
- package/dist/services/SocketService.d.ts.map +1 -0
- package/dist/services/SocketService.js +600 -0
- package/dist/services/SocketService.js.map +1 -0
- package/dist/services/StatsService.d.ts +10 -0
- package/dist/services/StatsService.d.ts.map +1 -0
- package/dist/services/StatsService.js +40 -0
- package/dist/services/StatsService.js.map +1 -0
- package/dist/services/StorageService.d.ts +20 -0
- package/dist/services/StorageService.d.ts.map +1 -0
- package/dist/services/StorageService.js +164 -0
- package/dist/services/StorageService.js.map +1 -0
- package/dist/services/TasksService.d.ts +74 -0
- package/dist/services/TasksService.d.ts.map +1 -0
- package/dist/services/TasksService.js +404 -0
- package/dist/services/TasksService.js.map +1 -0
- package/dist/services/WorkflowService.d.ts +305 -0
- package/dist/services/WorkflowService.d.ts.map +1 -0
- package/dist/services/WorkflowService.js +1811 -0
- package/dist/services/WorkflowService.js.map +1 -0
- package/dist/templates/logo/logo.png +0 -0
- package/dist/templates/mails/default.liquid +23 -0
- package/dist/types/aggregation.d.ts +40 -0
- package/dist/types/aggregation.d.ts.map +1 -0
- package/dist/types/aggregation.js +6 -0
- package/dist/types/aggregation.js.map +1 -0
- package/dist/types/assets.d.ts +32 -0
- package/dist/types/assets.d.ts.map +1 -0
- package/dist/types/assets.js +6 -0
- package/dist/types/assets.js.map +1 -0
- package/dist/types/auth.d.ts +50 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +6 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/cache.d.ts +47 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +6 -0
- package/dist/types/cache.js.map +1 -0
- package/dist/types/database.d.ts +16 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/database.js +6 -0
- package/dist/types/database.js.map +1 -0
- package/dist/types/fields.d.ts +71 -0
- package/dist/types/fields.d.ts.map +1 -0
- package/dist/types/fields.js +6 -0
- package/dist/types/fields.js.map +1 -0
- package/dist/types/files.d.ts +33 -0
- package/dist/types/files.d.ts.map +1 -0
- package/dist/types/files.js +6 -0
- package/dist/types/files.js.map +1 -0
- package/dist/types/hooks.d.ts +29 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +6 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/types/import-export.d.ts +62 -0
- package/dist/types/import-export.d.ts.map +1 -0
- package/dist/types/import-export.js +6 -0
- package/dist/types/import-export.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +58 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mail.d.ts +34 -0
- package/dist/types/mail.d.ts.map +1 -0
- package/dist/types/mail.js +6 -0
- package/dist/types/mail.js.map +1 -0
- package/dist/types/notifications.d.ts +16 -0
- package/dist/types/notifications.d.ts.map +1 -0
- package/dist/types/notifications.js +6 -0
- package/dist/types/notifications.js.map +1 -0
- package/dist/types/plugin.d.ts +351 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +8 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/query.d.ts +71 -0
- package/dist/types/query.d.ts.map +1 -0
- package/dist/types/query.js +6 -0
- package/dist/types/query.js.map +1 -0
- package/dist/types/relations.d.ts +111 -0
- package/dist/types/relations.d.ts.map +1 -0
- package/dist/types/relations.js +6 -0
- package/dist/types/relations.js.map +1 -0
- package/dist/types/reports.d.ts +17 -0
- package/dist/types/reports.d.ts.map +1 -0
- package/dist/types/reports.js +6 -0
- package/dist/types/reports.js.map +1 -0
- package/dist/types/schema.d.ts +26 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +6 -0
- package/dist/types/schema.js.map +1 -0
- package/dist/types/seed.d.ts +27 -0
- package/dist/types/seed.d.ts.map +1 -0
- package/dist/types/seed.js +6 -0
- package/dist/types/seed.js.map +1 -0
- package/dist/types/services.d.ts +68 -0
- package/dist/types/services.d.ts.map +1 -0
- package/dist/types/services.js +6 -0
- package/dist/types/services.js.map +1 -0
- package/dist/types/settings.d.ts +36 -0
- package/dist/types/settings.d.ts.map +1 -0
- package/dist/types/settings.js +6 -0
- package/dist/types/settings.js.map +1 -0
- package/dist/types/sockets.d.ts +26 -0
- package/dist/types/sockets.d.ts.map +1 -0
- package/dist/types/sockets.js +6 -0
- package/dist/types/sockets.js.map +1 -0
- package/dist/types/sort.d.ts +25 -0
- package/dist/types/sort.d.ts.map +1 -0
- package/dist/types/sort.js +6 -0
- package/dist/types/sort.js.map +1 -0
- package/dist/types/spatial.d.ts +19 -0
- package/dist/types/spatial.d.ts.map +1 -0
- package/dist/types/spatial.js +6 -0
- package/dist/types/spatial.js.map +1 -0
- package/dist/types/stats.d.ts +21 -0
- package/dist/types/stats.d.ts.map +1 -0
- package/dist/types/stats.js +6 -0
- package/dist/types/stats.js.map +1 -0
- package/dist/types/storage.d.ts +19 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +6 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/types/tasks.d.ts +14 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +6 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/types/utils.d.ts +54 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +6 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/types/workflow.d.ts +17 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +6 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/aggregationUtils.d.ts +192 -0
- package/dist/utils/aggregationUtils.d.ts.map +1 -0
- package/dist/utils/aggregationUtils.js +450 -0
- package/dist/utils/aggregationUtils.js.map +1 -0
- package/dist/utils/auth.d.ts +93 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +557 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/cache.d.ts +64 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +464 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/common.d.ts +53 -0
- package/dist/utils/common.d.ts.map +1 -0
- package/dist/utils/common.js +162 -0
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/db.d.ts +101 -0
- package/dist/utils/db.d.ts.map +1 -0
- package/dist/utils/db.js +413 -0
- package/dist/utils/db.js.map +1 -0
- package/dist/utils/dirname.d.ts +30 -0
- package/dist/utils/dirname.d.ts.map +1 -0
- package/dist/utils/dirname.js +95 -0
- package/dist/utils/dirname.js.map +1 -0
- package/dist/utils/dynamicVariableResolver.d.ts +17 -0
- package/dist/utils/dynamicVariableResolver.d.ts.map +1 -0
- package/dist/utils/dynamicVariableResolver.js +262 -0
- package/dist/utils/dynamicVariableResolver.js.map +1 -0
- package/dist/utils/env.d.ts +38 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +80 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +14 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +79 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/fieldExpansion.d.ts +30 -0
- package/dist/utils/fieldExpansion.d.ts.map +1 -0
- package/dist/utils/fieldExpansion.js +145 -0
- package/dist/utils/fieldExpansion.js.map +1 -0
- package/dist/utils/fieldUtils.d.ts +179 -0
- package/dist/utils/fieldUtils.d.ts.map +1 -0
- package/dist/utils/fieldUtils.js +424 -0
- package/dist/utils/fieldUtils.js.map +1 -0
- package/dist/utils/filterOperators.d.ts +472 -0
- package/dist/utils/filterOperators.d.ts.map +1 -0
- package/dist/utils/filterOperators.js +1229 -0
- package/dist/utils/filterOperators.js.map +1 -0
- package/dist/utils/importUtils.d.ts +127 -0
- package/dist/utils/importUtils.d.ts.map +1 -0
- package/dist/utils/importUtils.js +437 -0
- package/dist/utils/importUtils.js.map +1 -0
- package/dist/utils/index.d.ts +75 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +101 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +217 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/orderUtils.d.ts +117 -0
- package/dist/utils/orderUtils.d.ts.map +1 -0
- package/dist/utils/orderUtils.js +249 -0
- package/dist/utils/orderUtils.js.map +1 -0
- package/dist/utils/queryBuilder.d.ts +118 -0
- package/dist/utils/queryBuilder.d.ts.map +1 -0
- package/dist/utils/queryBuilder.js +489 -0
- package/dist/utils/queryBuilder.js.map +1 -0
- package/dist/utils/relationLoader.d.ts +65 -0
- package/dist/utils/relationLoader.d.ts.map +1 -0
- package/dist/utils/relationLoader.js +1081 -0
- package/dist/utils/relationLoader.js.map +1 -0
- package/dist/utils/relationPathResolver.d.ts +30 -0
- package/dist/utils/relationPathResolver.d.ts.map +1 -0
- package/dist/utils/relationPathResolver.js +173 -0
- package/dist/utils/relationPathResolver.js.map +1 -0
- package/dist/utils/relationUtils.d.ts +139 -0
- package/dist/utils/relationUtils.d.ts.map +1 -0
- package/dist/utils/relationUtils.js +711 -0
- package/dist/utils/relationUtils.js.map +1 -0
- package/dist/utils/router.d.ts +6 -0
- package/dist/utils/router.d.ts.map +1 -0
- package/dist/utils/router.js +95 -0
- package/dist/utils/router.js.map +1 -0
- package/dist/utils/schema.d.ts +88 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +24 -0
- package/dist/utils/schema.js.map +1 -0
- package/dist/utils/schemaManager.d.ts +238 -0
- package/dist/utils/schemaManager.d.ts.map +1 -0
- package/dist/utils/schemaManager.js +1992 -0
- package/dist/utils/schemaManager.js.map +1 -0
- package/dist/utils/schemaValidator.d.ts +83 -0
- package/dist/utils/schemaValidator.d.ts.map +1 -0
- package/dist/utils/schemaValidator.js +491 -0
- package/dist/utils/schemaValidator.js.map +1 -0
- package/dist/utils/seed.d.ts +45 -0
- package/dist/utils/seed.d.ts.map +1 -0
- package/dist/utils/seed.js +248 -0
- package/dist/utils/seed.js.map +1 -0
- package/dist/utils/sessionCleanup.d.ts +10 -0
- package/dist/utils/sessionCleanup.d.ts.map +1 -0
- package/dist/utils/sessionCleanup.js +49 -0
- package/dist/utils/sessionCleanup.js.map +1 -0
- package/dist/utils/sortUtils.d.ts +117 -0
- package/dist/utils/sortUtils.d.ts.map +1 -0
- package/dist/utils/sortUtils.js +232 -0
- package/dist/utils/sortUtils.js.map +1 -0
- package/dist/utils/spatialUtils.d.ts +244 -0
- package/dist/utils/spatialUtils.d.ts.map +1 -0
- package/dist/utils/spatialUtils.js +359 -0
- package/dist/utils/spatialUtils.js.map +1 -0
- package/dist/utils/systemschema.d.ts +11040 -0
- package/dist/utils/systemschema.d.ts.map +1 -0
- package/dist/utils/systemschema.js +1777 -0
- package/dist/utils/systemschema.js.map +1 -0
- package/dist/utils/tenantUtils.d.ts +34 -0
- package/dist/utils/tenantUtils.d.ts.map +1 -0
- package/dist/utils/tenantUtils.js +124 -0
- package/dist/utils/tenantUtils.js.map +1 -0
- package/dist/utils/typeMapper.d.ts +25 -0
- package/dist/utils/typeMapper.d.ts.map +1 -0
- package/dist/utils/typeMapper.js +282 -0
- package/dist/utils/typeMapper.js.map +1 -0
- package/dist/utils/valueValidator.d.ts +60 -0
- package/dist/utils/valueValidator.d.ts.map +1 -0
- package/dist/utils/valueValidator.js +303 -0
- package/dist/utils/valueValidator.js.map +1 -0
- package/dist/utils/workflow.d.ts +87 -0
- package/dist/utils/workflow.d.ts.map +1 -0
- package/dist/utils/workflow.js +205 -0
- package/dist/utils/workflow.js.map +1 -0
- package/package.json +115 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value Validator
|
|
3
|
+
*
|
|
4
|
+
* Runtime validation for field values based on schema validation rules.
|
|
5
|
+
* Enforces min, max, isInt, and other validation rules during create/update operations.
|
|
6
|
+
*/
|
|
7
|
+
import { schemaManager } from './schemaManager.js';
|
|
8
|
+
import { APIError } from './errorHandler.js';
|
|
9
|
+
/**
|
|
10
|
+
* Check if a field type is numeric
|
|
11
|
+
*/
|
|
12
|
+
function isNumericType(type) {
|
|
13
|
+
const numericTypes = [
|
|
14
|
+
'integer', 'bigint', 'smallint', 'decimal', 'numeric',
|
|
15
|
+
'float', 'real', 'double', 'double precision',
|
|
16
|
+
'Integer', 'BigInt', 'SmallInt', 'Decimal', 'Numeric',
|
|
17
|
+
'Float', 'Real', 'Double',
|
|
18
|
+
];
|
|
19
|
+
return numericTypes.includes(type.toLowerCase()) || numericTypes.includes(type);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if a field type is an array of numbers
|
|
23
|
+
*/
|
|
24
|
+
function isNumericArrayType(type) {
|
|
25
|
+
const arrayNumericTypes = [
|
|
26
|
+
'Array_Integer', 'Array_BigInt', 'Array_Double', 'Array_Decimal', 'Array_Float',
|
|
27
|
+
'array_integer', 'array_bigint', 'array_double', 'array_decimal', 'array_float',
|
|
28
|
+
];
|
|
29
|
+
return arrayNumericTypes.some(t => type.toLowerCase() === t.toLowerCase());
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if a field type is a numeric range
|
|
33
|
+
*/
|
|
34
|
+
function isNumericRangeType(type) {
|
|
35
|
+
const rangeNumericTypes = [
|
|
36
|
+
'Range_Integer', 'Range_BigInt', 'Range_Double', 'Range_Decimal',
|
|
37
|
+
'range_integer', 'range_bigint', 'range_double', 'range_decimal',
|
|
38
|
+
];
|
|
39
|
+
return rangeNumericTypes.some(t => type.toLowerCase() === t.toLowerCase());
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Validate a single numeric value against min/max rules
|
|
43
|
+
*/
|
|
44
|
+
function validateNumericValue(value, rules, fieldName, context) {
|
|
45
|
+
const contextPrefix = context ? `${context} ` : '';
|
|
46
|
+
if (rules.min !== undefined && value < rules.min) {
|
|
47
|
+
return {
|
|
48
|
+
field: fieldName,
|
|
49
|
+
message: `${contextPrefix}Value ${value} is less than minimum ${rules.min}`,
|
|
50
|
+
value,
|
|
51
|
+
rule: 'min',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (rules.max !== undefined && value > rules.max) {
|
|
55
|
+
return {
|
|
56
|
+
field: fieldName,
|
|
57
|
+
message: `${contextPrefix}Value ${value} is greater than maximum ${rules.max}`,
|
|
58
|
+
value,
|
|
59
|
+
rule: 'max',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (rules.isInt && !Number.isInteger(value)) {
|
|
63
|
+
return {
|
|
64
|
+
field: fieldName,
|
|
65
|
+
message: `${contextPrefix}Value ${value} must be an integer`,
|
|
66
|
+
value,
|
|
67
|
+
rule: 'isInt',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Validate array of numeric values
|
|
74
|
+
*/
|
|
75
|
+
function validateNumericArray(values, rules, fieldName) {
|
|
76
|
+
const errors = [];
|
|
77
|
+
if (!Array.isArray(values)) {
|
|
78
|
+
return errors;
|
|
79
|
+
}
|
|
80
|
+
for (let i = 0; i < values.length; i++) {
|
|
81
|
+
const value = values[i];
|
|
82
|
+
if (typeof value === 'number' && !isNaN(value)) {
|
|
83
|
+
const error = validateNumericValue(value, rules, fieldName, `Array element [${i}]:`);
|
|
84
|
+
if (error) {
|
|
85
|
+
errors.push(error);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return errors;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validate range value (lower/upper bounds)
|
|
93
|
+
*/
|
|
94
|
+
function validateRangeValue(rangeValue, rules, fieldName) {
|
|
95
|
+
const errors = [];
|
|
96
|
+
if (!rangeValue || typeof rangeValue !== 'object') {
|
|
97
|
+
return errors;
|
|
98
|
+
}
|
|
99
|
+
// Validate lower bound
|
|
100
|
+
if (rangeValue.lower !== undefined && rangeValue.lower !== null && typeof rangeValue.lower === 'number') {
|
|
101
|
+
const lowerError = validateNumericValue(rangeValue.lower, rules, fieldName, 'Lower bound:');
|
|
102
|
+
if (lowerError) {
|
|
103
|
+
errors.push(lowerError);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Validate upper bound
|
|
107
|
+
if (rangeValue.upper !== undefined && rangeValue.upper !== null && typeof rangeValue.upper === 'number') {
|
|
108
|
+
const upperError = validateNumericValue(rangeValue.upper, rules, fieldName, 'Upper bound:');
|
|
109
|
+
if (upperError) {
|
|
110
|
+
errors.push(upperError);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Validate that lower <= upper (if both are present)
|
|
114
|
+
if (rangeValue.lower !== undefined && rangeValue.lower !== null &&
|
|
115
|
+
rangeValue.upper !== undefined && rangeValue.upper !== null &&
|
|
116
|
+
typeof rangeValue.lower === 'number' && typeof rangeValue.upper === 'number') {
|
|
117
|
+
if (rangeValue.lower > rangeValue.upper) {
|
|
118
|
+
errors.push({
|
|
119
|
+
field: fieldName,
|
|
120
|
+
message: `Lower bound (${rangeValue.lower}) cannot be greater than upper bound (${rangeValue.upper})`,
|
|
121
|
+
value: rangeValue,
|
|
122
|
+
rule: 'range',
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return errors;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Validate string value
|
|
130
|
+
*/
|
|
131
|
+
function validateStringValue(value, rules, fieldName) {
|
|
132
|
+
const errors = [];
|
|
133
|
+
if (typeof value !== 'string') {
|
|
134
|
+
return errors;
|
|
135
|
+
}
|
|
136
|
+
// Check notEmpty
|
|
137
|
+
if (rules.notEmpty && value.trim().length === 0) {
|
|
138
|
+
errors.push({
|
|
139
|
+
field: fieldName,
|
|
140
|
+
message: `Field cannot be empty`,
|
|
141
|
+
value,
|
|
142
|
+
rule: 'notEmpty',
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Check length
|
|
146
|
+
if (rules.len) {
|
|
147
|
+
const [minLen, maxLen] = rules.len;
|
|
148
|
+
if (value.length < minLen) {
|
|
149
|
+
errors.push({
|
|
150
|
+
field: fieldName,
|
|
151
|
+
message: `Value must be at least ${minLen} characters long`,
|
|
152
|
+
value,
|
|
153
|
+
rule: 'len',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
if (value.length > maxLen) {
|
|
157
|
+
errors.push({
|
|
158
|
+
field: fieldName,
|
|
159
|
+
message: `Value must be at most ${maxLen} characters long`,
|
|
160
|
+
value,
|
|
161
|
+
rule: 'len',
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Check email format
|
|
166
|
+
if (rules.isEmail) {
|
|
167
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
168
|
+
if (!emailRegex.test(value)) {
|
|
169
|
+
errors.push({
|
|
170
|
+
field: fieldName,
|
|
171
|
+
message: `Invalid email format`,
|
|
172
|
+
value,
|
|
173
|
+
rule: 'isEmail',
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Check URL format
|
|
178
|
+
if (rules.isUrl) {
|
|
179
|
+
try {
|
|
180
|
+
new URL(value);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
errors.push({
|
|
184
|
+
field: fieldName,
|
|
185
|
+
message: `Invalid URL format`,
|
|
186
|
+
value,
|
|
187
|
+
rule: 'isUrl',
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Check regex pattern
|
|
192
|
+
const pattern = rules.is || rules.matches;
|
|
193
|
+
if (pattern) {
|
|
194
|
+
try {
|
|
195
|
+
const regex = new RegExp(pattern);
|
|
196
|
+
if (!regex.test(value)) {
|
|
197
|
+
errors.push({
|
|
198
|
+
field: fieldName,
|
|
199
|
+
message: `Value does not match required pattern`,
|
|
200
|
+
value,
|
|
201
|
+
rule: 'pattern',
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
// Invalid regex, skip validation
|
|
207
|
+
console.warn(`Invalid regex pattern for field ${fieldName}: ${pattern}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return errors;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Value validator utility
|
|
214
|
+
*/
|
|
215
|
+
export const valueValidator = {
|
|
216
|
+
/**
|
|
217
|
+
* Validate data against schema validation rules
|
|
218
|
+
* @param collection - Collection name
|
|
219
|
+
* @param data - Data to validate
|
|
220
|
+
* @param isUpdate - Whether this is an update operation (only validates provided fields)
|
|
221
|
+
* @returns Array of validation errors (empty if valid)
|
|
222
|
+
*/
|
|
223
|
+
async validateData(collection, data, isUpdate = false) {
|
|
224
|
+
const errors = [];
|
|
225
|
+
// Get schema definition
|
|
226
|
+
const schemaDefinition = await schemaManager.getSchemaDefinition(collection);
|
|
227
|
+
if (!schemaDefinition?.fields) {
|
|
228
|
+
return errors;
|
|
229
|
+
}
|
|
230
|
+
const fields = schemaDefinition.fields;
|
|
231
|
+
// Validate each field in the data
|
|
232
|
+
for (const [fieldName, value] of Object.entries(data)) {
|
|
233
|
+
// Skip null/undefined values (handled by allowNull constraint)
|
|
234
|
+
if (value === null || value === undefined) {
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const fieldSchema = fields[fieldName];
|
|
238
|
+
if (!fieldSchema) {
|
|
239
|
+
continue; // Skip unknown fields (may be relation fields)
|
|
240
|
+
}
|
|
241
|
+
const fieldType = fieldSchema.type;
|
|
242
|
+
const validate = fieldSchema.validate;
|
|
243
|
+
if (!validate) {
|
|
244
|
+
continue; // No validation rules defined
|
|
245
|
+
}
|
|
246
|
+
// Validate based on field type
|
|
247
|
+
if (isNumericType(fieldType)) {
|
|
248
|
+
// Simple numeric field
|
|
249
|
+
if (typeof value === 'number' && !isNaN(value)) {
|
|
250
|
+
const error = validateNumericValue(value, validate, fieldName);
|
|
251
|
+
if (error) {
|
|
252
|
+
errors.push(error);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else if (isNumericArrayType(fieldType)) {
|
|
257
|
+
// Array of numbers
|
|
258
|
+
const arrayErrors = validateNumericArray(value, validate, fieldName);
|
|
259
|
+
errors.push(...arrayErrors);
|
|
260
|
+
}
|
|
261
|
+
else if (isNumericRangeType(fieldType)) {
|
|
262
|
+
// Range type
|
|
263
|
+
const rangeErrors = validateRangeValue(value, validate, fieldName);
|
|
264
|
+
errors.push(...rangeErrors);
|
|
265
|
+
}
|
|
266
|
+
else if (fieldType.toLowerCase() === 'string' || fieldType.toLowerCase() === 'text') {
|
|
267
|
+
// String type
|
|
268
|
+
const stringErrors = validateStringValue(value, validate, fieldName);
|
|
269
|
+
errors.push(...stringErrors);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return errors;
|
|
273
|
+
},
|
|
274
|
+
/**
|
|
275
|
+
* Validate data and throw APIError if invalid
|
|
276
|
+
* @param collection - Collection name
|
|
277
|
+
* @param data - Data to validate
|
|
278
|
+
* @param isUpdate - Whether this is an update operation
|
|
279
|
+
* @throws APIError if validation fails
|
|
280
|
+
*/
|
|
281
|
+
async validateOrThrow(collection, data, isUpdate = false) {
|
|
282
|
+
const errors = await this.validateData(collection, data, isUpdate);
|
|
283
|
+
if (errors.length > 0) {
|
|
284
|
+
const errorMessages = errors.map(e => `${e.field}: ${e.message}`).join('; ');
|
|
285
|
+
throw new APIError(`Validation failed: ${errorMessages}`, 400, {
|
|
286
|
+
code: 'VALIDATION_ERROR',
|
|
287
|
+
errors,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
/**
|
|
292
|
+
* Check if a value is valid for a specific field
|
|
293
|
+
* @param collection - Collection name
|
|
294
|
+
* @param fieldName - Field name
|
|
295
|
+
* @param value - Value to validate
|
|
296
|
+
* @returns Validation errors for this field
|
|
297
|
+
*/
|
|
298
|
+
async validateField(collection, fieldName, value) {
|
|
299
|
+
return this.validateData(collection, { [fieldName]: value });
|
|
300
|
+
},
|
|
301
|
+
};
|
|
302
|
+
export default valueValidator;
|
|
303
|
+
//# sourceMappingURL=valueValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"valueValidator.js","sourceRoot":"","sources":["../../baasix/utils/valueValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides helper functions for workflow execution, role-based access control,
|
|
5
|
+
* and workflow validation.
|
|
6
|
+
*
|
|
7
|
+
* Matches Sequelize workflow.js functionality with Drizzle ORM.
|
|
8
|
+
*/
|
|
9
|
+
import type { Accountability, Workflow } from '../types/index.js';
|
|
10
|
+
export type { Accountability, Workflow };
|
|
11
|
+
/**
|
|
12
|
+
* Helper function to check if user has required role for workflow execution
|
|
13
|
+
*
|
|
14
|
+
* @param workflow - Workflow object with trigger_type and allowed_roles
|
|
15
|
+
* @param accountability - User accountability object with role info
|
|
16
|
+
* @returns True if user has access, false otherwise
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const hasAccess = checkWorkflowRoleAccess(workflow, { role: { id: '1', name: 'administrator' } });
|
|
20
|
+
* if (!hasAccess) {
|
|
21
|
+
* throw new APIError('No permission', 403);
|
|
22
|
+
* }
|
|
23
|
+
*/
|
|
24
|
+
export declare const checkWorkflowRoleAccess: (workflow: Workflow, accountability?: Accountability | null) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Fetch workflow from database with required fields for role checking
|
|
27
|
+
*
|
|
28
|
+
* @param workflowId - Workflow ID
|
|
29
|
+
* @param includeFlowData - Whether to include flow_data field (default: false)
|
|
30
|
+
* @returns Workflow object
|
|
31
|
+
* @throws APIError if workflow not found
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* const workflow = await fetchWorkflowForExecution('workflow-id', true);
|
|
35
|
+
* console.log(workflow.name, workflow.flow_data);
|
|
36
|
+
*/
|
|
37
|
+
export declare const fetchWorkflowForExecution: (workflowId: string | number, includeFlowData?: boolean) => Promise<Workflow>;
|
|
38
|
+
/**
|
|
39
|
+
* Validate workflow is active and user has access
|
|
40
|
+
*
|
|
41
|
+
* @param workflow - Workflow object
|
|
42
|
+
* @param accountability - User accountability object
|
|
43
|
+
* @throws APIError if validation fails (400 if not active, 403 if no permission)
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* const workflow = await fetchWorkflowForExecution(id);
|
|
47
|
+
* validateWorkflowAccess(workflow, req.accountability);
|
|
48
|
+
* // If successful, workflow can be executed
|
|
49
|
+
*/
|
|
50
|
+
export declare const validateWorkflowAccess: (workflow: Workflow, accountability?: Accountability | null) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Combined helper: Fetch and validate workflow in one call
|
|
53
|
+
*
|
|
54
|
+
* @param workflowId - Workflow ID
|
|
55
|
+
* @param accountability - User accountability object
|
|
56
|
+
* @param includeFlowData - Whether to include flow_data field
|
|
57
|
+
* @returns Validated workflow object ready for execution
|
|
58
|
+
* @throws APIError if workflow not found, not active, or no permission
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* const workflow = await fetchAndValidateWorkflow(id, req.accountability, true);
|
|
62
|
+
* await workflowService.executeWorkflow(workflow);
|
|
63
|
+
*/
|
|
64
|
+
export declare const fetchAndValidateWorkflow: (workflowId: string | number, accountability?: Accountability | null, includeFlowData?: boolean) => Promise<Workflow>;
|
|
65
|
+
/**
|
|
66
|
+
* Check if user can create/edit workflow with specific allowed_roles
|
|
67
|
+
*
|
|
68
|
+
* @param allowedRoles - Array of role IDs that can execute the workflow
|
|
69
|
+
* @param accountability - User accountability object
|
|
70
|
+
* @returns True if user can set these allowed_roles
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* const canSetRoles = canSetWorkflowRoles(['admin-role-id'], req.accountability);
|
|
74
|
+
* if (!canSetRoles) {
|
|
75
|
+
* throw new APIError('Cannot create workflow with these roles', 403);
|
|
76
|
+
* }
|
|
77
|
+
*/
|
|
78
|
+
export declare const canSetWorkflowRoles: (allowedRoles: string[] | null | undefined, accountability?: Accountability | null) => boolean;
|
|
79
|
+
declare const _default: {
|
|
80
|
+
checkWorkflowRoleAccess: (workflow: Workflow, accountability?: Accountability | null) => boolean;
|
|
81
|
+
fetchWorkflowForExecution: (workflowId: string | number, includeFlowData?: boolean) => Promise<Workflow>;
|
|
82
|
+
validateWorkflowAccess: (workflow: Workflow, accountability?: Accountability | null) => void;
|
|
83
|
+
fetchAndValidateWorkflow: (workflowId: string | number, accountability?: Accountability | null, includeFlowData?: boolean) => Promise<Workflow>;
|
|
84
|
+
canSetWorkflowRoles: (allowedRoles: string[] | null | undefined, accountability?: Accountability | null) => boolean;
|
|
85
|
+
};
|
|
86
|
+
export default _default;
|
|
87
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../baasix/utils/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AAczC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,QAAQ,EAClB,iBAAiB,cAAc,GAAG,IAAI,KACrC,OAmDF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB,GACpC,YAAY,MAAM,GAAG,MAAM,EAC3B,kBAAiB,OAAe,KAC/B,OAAO,CAAC,QAAQ,CA+BlB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,QAAQ,EAClB,iBAAiB,cAAc,GAAG,IAAI,KACrC,IAUF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB,GACnC,YAAY,MAAM,GAAG,MAAM,EAC3B,iBAAiB,cAAc,GAAG,IAAI,EACtC,kBAAiB,OAAe,KAC/B,OAAO,CAAC,QAAQ,CAIlB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,GAC9B,cAAc,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EACzC,iBAAiB,cAAc,GAAG,IAAI,KACrC,OA4BF,CAAC;;wCArMU,QAAQ,mBACD,cAAc,GAAG,IAAI,KACrC,OAAO;4CAkEI,MAAM,GAAG,MAAM,oBACV,OAAO,KACvB,OAAO,CAAC,QAAQ,CAAC;uCA8CR,QAAQ,mBACD,cAAc,GAAG,IAAI,KACrC,IAAI;2CA0BO,MAAM,GAAG,MAAM,mBACV,cAAc,GAAG,IAAI,oBACrB,OAAO,KACvB,OAAO,CAAC,QAAQ,CAAC;wCAoBJ,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,mBACxB,cAAc,GAAG,IAAI,KACrC,OAAO;;AA+BV,wBAME"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides helper functions for workflow execution, role-based access control,
|
|
5
|
+
* and workflow validation.
|
|
6
|
+
*
|
|
7
|
+
* Matches Sequelize workflow.js functionality with Drizzle ORM.
|
|
8
|
+
*/
|
|
9
|
+
import { APIError } from './errorHandler.js';
|
|
10
|
+
/**
|
|
11
|
+
* Lazy getter for ItemsService to avoid circular dependency
|
|
12
|
+
*/
|
|
13
|
+
let _ItemsService = null;
|
|
14
|
+
async function getItemsService() {
|
|
15
|
+
if (!_ItemsService) {
|
|
16
|
+
const module = await import('../services/ItemsService.js');
|
|
17
|
+
_ItemsService = module.default || module.ItemsService;
|
|
18
|
+
}
|
|
19
|
+
return _ItemsService;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Helper function to check if user has required role for workflow execution
|
|
23
|
+
*
|
|
24
|
+
* @param workflow - Workflow object with trigger_type and allowed_roles
|
|
25
|
+
* @param accountability - User accountability object with role info
|
|
26
|
+
* @returns True if user has access, false otherwise
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* const hasAccess = checkWorkflowRoleAccess(workflow, { role: { id: '1', name: 'administrator' } });
|
|
30
|
+
* if (!hasAccess) {
|
|
31
|
+
* throw new APIError('No permission', 403);
|
|
32
|
+
* }
|
|
33
|
+
*/
|
|
34
|
+
export const checkWorkflowRoleAccess = (workflow, accountability) => {
|
|
35
|
+
// Only skip role check for schedule trigger type
|
|
36
|
+
// Apply to manual, hook, and webhook trigger types
|
|
37
|
+
if (workflow.trigger_type === 'schedule') {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
// Check if user is administrator - administrators can execute all workflows
|
|
41
|
+
if (accountability && accountability.role) {
|
|
42
|
+
const roleName = typeof accountability.role === 'object'
|
|
43
|
+
? accountability.role.name
|
|
44
|
+
: null;
|
|
45
|
+
if (roleName === 'administrator') {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Parse allowed_roles if it's a string (happens with raw queries)
|
|
50
|
+
let allowedRoles = workflow.allowed_roles;
|
|
51
|
+
if (typeof allowedRoles === 'string') {
|
|
52
|
+
try {
|
|
53
|
+
allowedRoles = JSON.parse(allowedRoles);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
console.error('Failed to parse allowed_roles:', e);
|
|
57
|
+
allowedRoles = [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// If allowed_roles is null, undefined, or empty array, allow all authenticated users
|
|
61
|
+
if (!allowedRoles || (Array.isArray(allowedRoles) && allowedRoles.length === 0)) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// Check if user's role is in the allowed_roles array
|
|
65
|
+
// accountability.role can be either a role ID (string) or a role object
|
|
66
|
+
if (!accountability || !accountability.role) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
// Extract role ID - handle both string and object formats
|
|
70
|
+
const userRoleId = typeof accountability.role === 'object'
|
|
71
|
+
? String(accountability.role.id)
|
|
72
|
+
: String(accountability.role);
|
|
73
|
+
// Ensure allowedRoles is an array and contains strings
|
|
74
|
+
const rolesArray = Array.isArray(allowedRoles)
|
|
75
|
+
? allowedRoles.map(r => String(r))
|
|
76
|
+
: [];
|
|
77
|
+
return rolesArray.includes(userRoleId);
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Fetch workflow from database with required fields for role checking
|
|
81
|
+
*
|
|
82
|
+
* @param workflowId - Workflow ID
|
|
83
|
+
* @param includeFlowData - Whether to include flow_data field (default: false)
|
|
84
|
+
* @returns Workflow object
|
|
85
|
+
* @throws APIError if workflow not found
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* const workflow = await fetchWorkflowForExecution('workflow-id', true);
|
|
89
|
+
* console.log(workflow.name, workflow.flow_data);
|
|
90
|
+
*/
|
|
91
|
+
export const fetchWorkflowForExecution = async (workflowId, includeFlowData = false) => {
|
|
92
|
+
try {
|
|
93
|
+
// Use ItemsService to fetch workflow (lazy getter to avoid circular dependency)
|
|
94
|
+
const ItemsService = await getItemsService();
|
|
95
|
+
const workflowService = new ItemsService('baasix_Workflow');
|
|
96
|
+
// Define fields to fetch
|
|
97
|
+
const fields = ['id', 'name', 'status', 'trigger_type', 'allowed_roles'];
|
|
98
|
+
if (includeFlowData) {
|
|
99
|
+
fields.push('flow_data', 'variables');
|
|
100
|
+
}
|
|
101
|
+
// Fetch workflow
|
|
102
|
+
const result = await workflowService.readByQuery({
|
|
103
|
+
filter: { id: workflowId },
|
|
104
|
+
fields,
|
|
105
|
+
limit: 1
|
|
106
|
+
});
|
|
107
|
+
if (!result.data || result.data.length === 0) {
|
|
108
|
+
throw new APIError('Workflow not found', 404);
|
|
109
|
+
}
|
|
110
|
+
return result.data[0];
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (error instanceof APIError) {
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
console.error('[Workflow] Error fetching workflow:', error);
|
|
117
|
+
throw new APIError('Failed to fetch workflow', 500);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Validate workflow is active and user has access
|
|
122
|
+
*
|
|
123
|
+
* @param workflow - Workflow object
|
|
124
|
+
* @param accountability - User accountability object
|
|
125
|
+
* @throws APIError if validation fails (400 if not active, 403 if no permission)
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* const workflow = await fetchWorkflowForExecution(id);
|
|
129
|
+
* validateWorkflowAccess(workflow, req.accountability);
|
|
130
|
+
* // If successful, workflow can be executed
|
|
131
|
+
*/
|
|
132
|
+
export const validateWorkflowAccess = (workflow, accountability) => {
|
|
133
|
+
// Check if workflow is active
|
|
134
|
+
if (workflow.status !== 'active') {
|
|
135
|
+
throw new APIError('Workflow is not active', 400);
|
|
136
|
+
}
|
|
137
|
+
// Check if user has role access
|
|
138
|
+
if (!checkWorkflowRoleAccess(workflow, accountability)) {
|
|
139
|
+
throw new APIError('You do not have permission to execute this workflow', 403);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Combined helper: Fetch and validate workflow in one call
|
|
144
|
+
*
|
|
145
|
+
* @param workflowId - Workflow ID
|
|
146
|
+
* @param accountability - User accountability object
|
|
147
|
+
* @param includeFlowData - Whether to include flow_data field
|
|
148
|
+
* @returns Validated workflow object ready for execution
|
|
149
|
+
* @throws APIError if workflow not found, not active, or no permission
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* const workflow = await fetchAndValidateWorkflow(id, req.accountability, true);
|
|
153
|
+
* await workflowService.executeWorkflow(workflow);
|
|
154
|
+
*/
|
|
155
|
+
export const fetchAndValidateWorkflow = async (workflowId, accountability, includeFlowData = false) => {
|
|
156
|
+
const workflow = await fetchWorkflowForExecution(workflowId, includeFlowData);
|
|
157
|
+
validateWorkflowAccess(workflow, accountability);
|
|
158
|
+
return workflow;
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Check if user can create/edit workflow with specific allowed_roles
|
|
162
|
+
*
|
|
163
|
+
* @param allowedRoles - Array of role IDs that can execute the workflow
|
|
164
|
+
* @param accountability - User accountability object
|
|
165
|
+
* @returns True if user can set these allowed_roles
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* const canSetRoles = canSetWorkflowRoles(['admin-role-id'], req.accountability);
|
|
169
|
+
* if (!canSetRoles) {
|
|
170
|
+
* throw new APIError('Cannot create workflow with these roles', 403);
|
|
171
|
+
* }
|
|
172
|
+
*/
|
|
173
|
+
export const canSetWorkflowRoles = (allowedRoles, accountability) => {
|
|
174
|
+
// Administrators can set any roles
|
|
175
|
+
if (accountability && accountability.role) {
|
|
176
|
+
const roleName = typeof accountability.role === 'object'
|
|
177
|
+
? accountability.role.name
|
|
178
|
+
: null;
|
|
179
|
+
if (roleName === 'administrator') {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// If no roles specified (allow all), anyone can create
|
|
184
|
+
if (!allowedRoles || allowedRoles.length === 0) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
// User can only create workflows for their own role
|
|
188
|
+
if (accountability && accountability.role) {
|
|
189
|
+
const userRoleId = typeof accountability.role === 'object'
|
|
190
|
+
? String(accountability.role.id)
|
|
191
|
+
: String(accountability.role);
|
|
192
|
+
// Check if user's role is included in allowed roles
|
|
193
|
+
return allowedRoles.map(r => String(r)).includes(userRoleId);
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
};
|
|
197
|
+
// Export all functions
|
|
198
|
+
export default {
|
|
199
|
+
checkWorkflowRoleAccess,
|
|
200
|
+
fetchWorkflowForExecution,
|
|
201
|
+
validateWorkflowAccess,
|
|
202
|
+
fetchAndValidateWorkflow,
|
|
203
|
+
canSetWorkflowRoles
|
|
204
|
+
};
|
|
205
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../baasix/utils/workflow.ts"],"names":[],"mappings":"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"}
|