@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.
Files changed (666) hide show
  1. package/LICENSE.MD +85 -0
  2. package/README.md +526 -0
  3. package/assets/banner.jpg +0 -0
  4. package/assets/banner_small.jpg +0 -0
  5. package/assets/logo_icon.svg +20 -0
  6. package/assets/logo_icon_rounded.svg +20 -0
  7. package/dist/LICENSE.MD +85 -0
  8. package/dist/README.md +526 -0
  9. package/dist/app/404/index.html +1 -0
  10. package/dist/app/404.html +1 -0
  11. package/dist/app/_next/static/chunks/041e1f03-56ae8a902a7f2fe6.js +24 -0
  12. package/dist/app/_next/static/chunks/1117-05479929a8da73e3.js +1 -0
  13. package/dist/app/_next/static/chunks/1299.77cc7b7b76b75cba.js +1 -0
  14. package/dist/app/_next/static/chunks/1303-35a96e9c9cdeab9d.js +1 -0
  15. package/dist/app/_next/static/chunks/1509-56ac00cdaaecdf53.js +1 -0
  16. package/dist/app/_next/static/chunks/1668-e3eabd0f6753c780.js +1 -0
  17. package/dist/app/_next/static/chunks/1783-d9fb550fd324300c.js +1 -0
  18. package/dist/app/_next/static/chunks/2117-29b5fa47421595ad.js +2 -0
  19. package/dist/app/_next/static/chunks/2344.35b46d2179a765b5.js +1 -0
  20. package/dist/app/_next/static/chunks/257.990da16794a31292.js +1 -0
  21. package/dist/app/_next/static/chunks/2676-73b0ee7c80073a84.js +1 -0
  22. package/dist/app/_next/static/chunks/3563-b8842744384391fe.js +1 -0
  23. package/dist/app/_next/static/chunks/363642f4-933b579ed3c85f60.js +1 -0
  24. package/dist/app/_next/static/chunks/3817-e20c8f0a0810fc95.js +1 -0
  25. package/dist/app/_next/static/chunks/3834.84944e390d902509.js +2 -0
  26. package/dist/app/_next/static/chunks/4043-3a30c8a75896f241.js +1 -0
  27. package/dist/app/_next/static/chunks/4225-14090c7c0cd9dec6.js +1 -0
  28. package/dist/app/_next/static/chunks/4438-c9a12ca15b6e9160.js +1 -0
  29. package/dist/app/_next/static/chunks/4458-679fd0c6884f456a.js +1 -0
  30. package/dist/app/_next/static/chunks/4475-8bdfbd536fba8c48.js +1 -0
  31. package/dist/app/_next/static/chunks/4883-8a924721bb21b3b0.js +1 -0
  32. package/dist/app/_next/static/chunks/489-683ab07188f9df2b.js +1 -0
  33. package/dist/app/_next/static/chunks/4952-1b97320cf61f3f21.js +1 -0
  34. package/dist/app/_next/static/chunks/5094-8d53e403235d4ca6.js +1 -0
  35. package/dist/app/_next/static/chunks/5101-3a146e0625747ad1.js +1 -0
  36. package/dist/app/_next/static/chunks/54a60aa6-d9747982e0a81f58.js +79 -0
  37. package/dist/app/_next/static/chunks/5650-f096291df402bfc2.js +1 -0
  38. package/dist/app/_next/static/chunks/600-539045311240f579.js +1 -0
  39. package/dist/app/_next/static/chunks/6170-803b82e19d3ade6d.js +89 -0
  40. package/dist/app/_next/static/chunks/6241-30d7169d1010e5a4.js +1 -0
  41. package/dist/app/_next/static/chunks/6530-a91e10cffa4200c4.js +1 -0
  42. package/dist/app/_next/static/chunks/6547-4bbbdb5c399aef1e.js +1 -0
  43. package/dist/app/_next/static/chunks/6712-781937c53a2c49da.js +1 -0
  44. package/dist/app/_next/static/chunks/6fcbdc68-90be1a5480b8d353.js +1 -0
  45. package/dist/app/_next/static/chunks/70e0d97a-aeaf0cdc26ba1a58.js +1 -0
  46. package/dist/app/_next/static/chunks/7214-5154a89d08d24dde.js +1 -0
  47. package/dist/app/_next/static/chunks/7324-b53229c59a640880.js +10 -0
  48. package/dist/app/_next/static/chunks/7636-66424f0b51d350e9.js +1 -0
  49. package/dist/app/_next/static/chunks/7874-39a3f2541165a675.js +1 -0
  50. package/dist/app/_next/static/chunks/7982-9da12b83f11e3f5f.js +1 -0
  51. package/dist/app/_next/static/chunks/8213a2eb-da25a3b3c5521b2b.js +1 -0
  52. package/dist/app/_next/static/chunks/8473-6598318371eca31b.js +1 -0
  53. package/dist/app/_next/static/chunks/8640fa6b-72e43370f68e5587.js +1 -0
  54. package/dist/app/_next/static/chunks/9090-3ef676f29c95f1c7.js +1 -0
  55. package/dist/app/_next/static/chunks/9124-a02f9e209e6e3cce.js +1 -0
  56. package/dist/app/_next/static/chunks/926-156f32067d111d6b.js +1 -0
  57. package/dist/app/_next/static/chunks/9487-b17481605e513b83.js +1 -0
  58. package/dist/app/_next/static/chunks/9599-a7e572bb88c3392b.js +1 -0
  59. package/dist/app/_next/static/chunks/9881-419697138376e755.js +1 -0
  60. package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/all-activity/page-8917930b4d663405.js +1 -0
  61. package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/email-log/page-b27a6ee32782d7df.js +1 -0
  62. package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/notifications/page-b7eda523ede2702c.js +1 -0
  63. package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/page-1cfa62d1caedaed0.js +1 -0
  64. package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/sessions/page-3e21e20db90aeff7.js +1 -0
  65. package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/workflow-executions/page-27bcc26b747fb29b.js +1 -0
  66. package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/workflow-logs/page-9f9e9e952aef436e.js +1 -0
  67. package/dist/app/_next/static/chunks/app/(authenticated)/change-password/page-8d61aa499eabb127.js +1 -0
  68. package/dist/app/_next/static/chunks/app/(authenticated)/dashboard/page-1ceeac9e72997a8a.js +1 -0
  69. package/dist/app/_next/static/chunks/app/(authenticated)/data-browser/page-8cda2b57759dd670.js +1 -0
  70. package/dist/app/_next/static/chunks/app/(authenticated)/file-manager/page-8c6f1b1da66ad7e4.js +1 -0
  71. package/dist/app/_next/static/chunks/app/(authenticated)/layout-f70d225b2759c998.js +1 -0
  72. package/dist/app/_next/static/chunks/app/(authenticated)/settings/migrations/page-aacec8f7cfb40ab2.js +1 -0
  73. package/dist/app/_next/static/chunks/app/(authenticated)/settings/permissions/page-828110cfcde429c6.js +1 -0
  74. package/dist/app/_next/static/chunks/app/(authenticated)/settings/project/page-420e794bb76bd204.js +1 -0
  75. package/dist/app/_next/static/chunks/app/(authenticated)/settings/roles/page-9001d02b28f70708.js +1 -0
  76. package/dist/app/_next/static/chunks/app/(authenticated)/settings/schema/page-899574f35091dd58.js +1 -0
  77. package/dist/app/_next/static/chunks/app/(authenticated)/settings/tasks/page-ad7ab3e27c83f44f.js +1 -0
  78. package/dist/app/_next/static/chunks/app/(authenticated)/settings/templates/edit/page-bd83414cb8c4cb04.js +1 -0
  79. package/dist/app/_next/static/chunks/app/(authenticated)/settings/templates/page-3181447f8772b1d3.js +1 -0
  80. package/dist/app/_next/static/chunks/app/(authenticated)/settings/tenants/page-ef9bfbacef5a1d73.js +1 -0
  81. package/dist/app/_next/static/chunks/app/(authenticated)/users/invites/page-480306b7b2bbac7e.js +1 -0
  82. package/dist/app/_next/static/chunks/app/(authenticated)/users/list/page-74da51254c2606b3.js +1 -0
  83. package/dist/app/_next/static/chunks/app/(authenticated)/users/page-e99c6f0b915001b2.js +1 -0
  84. package/dist/app/_next/static/chunks/app/(authenticated)/users/preferences/page-1a935630ce8f2b12.js +1 -0
  85. package/dist/app/_next/static/chunks/app/(authenticated)/users/user-roles/page-901dfb8ea1f39ca8.js +1 -0
  86. package/dist/app/_next/static/chunks/app/(authenticated)/workflows/detail/page-9a6b839aea688ca4.js +1 -0
  87. package/dist/app/_next/static/chunks/app/(authenticated)/workflows/edit/page-11774efbc2fecae2.js +1 -0
  88. package/dist/app/_next/static/chunks/app/(authenticated)/workflows/execution/page-8ec1aea90412c03d.js +1 -0
  89. package/dist/app/_next/static/chunks/app/(authenticated)/workflows/page-88bc5b36ccb0a1f7.js +1 -0
  90. package/dist/app/_next/static/chunks/app/(public)/forgot-password/page-ed263fd46ef81c20.js +1 -0
  91. package/dist/app/_next/static/chunks/app/(public)/layout-f538977545844af8.js +1 -0
  92. package/dist/app/_next/static/chunks/app/(public)/login/page-c0a10b137f346096.js +1 -0
  93. package/dist/app/_next/static/chunks/app/(public)/register/page-4cb7644893efd9b3.js +1 -0
  94. package/dist/app/_next/static/chunks/app/_not-found/page-653f8815b78256cc.js +1 -0
  95. package/dist/app/_next/static/chunks/app/layout-591ca7a3e16528a1.js +1 -0
  96. package/dist/app/_next/static/chunks/app/page-dd19d124b5fa2577.js +1 -0
  97. package/dist/app/_next/static/chunks/c37d3baf.c2ff165f5b02c692.js +1 -0
  98. package/dist/app/_next/static/chunks/d0deef33.0379166a4ec23470.js +1 -0
  99. package/dist/app/_next/static/chunks/fd9d1056-54169f07cd680d6c.js +1 -0
  100. package/dist/app/_next/static/chunks/framework-8e0e0f4a6b83a956.js +1 -0
  101. package/dist/app/_next/static/chunks/main-324e91f5a430cddf.js +1 -0
  102. package/dist/app/_next/static/chunks/main-app-55bcae20c77aaf0e.js +1 -0
  103. package/dist/app/_next/static/chunks/pages/_app-3c9ca398d360b709.js +1 -0
  104. package/dist/app/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js +1 -0
  105. package/dist/app/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  106. package/dist/app/_next/static/chunks/webpack-2c306566f7ee1b63.js +1 -0
  107. package/dist/app/_next/static/css/6c4002bae4e236b2.css +3 -0
  108. package/dist/app/_next/static/css/a275cc2b185e04f8.css +1 -0
  109. package/dist/app/_next/static/eCWhKA8XHqmB1zgFcEtN2/_buildManifest.js +1 -0
  110. package/dist/app/_next/static/eCWhKA8XHqmB1zgFcEtN2/_ssgManifest.js +1 -0
  111. package/dist/app/activity-log/all-activity/index.html +1 -0
  112. package/dist/app/activity-log/all-activity/index.txt +14 -0
  113. package/dist/app/activity-log/email-log/index.html +1 -0
  114. package/dist/app/activity-log/email-log/index.txt +14 -0
  115. package/dist/app/activity-log/index.html +1 -0
  116. package/dist/app/activity-log/index.txt +14 -0
  117. package/dist/app/activity-log/notifications/index.html +1 -0
  118. package/dist/app/activity-log/notifications/index.txt +14 -0
  119. package/dist/app/activity-log/sessions/index.html +1 -0
  120. package/dist/app/activity-log/sessions/index.txt +14 -0
  121. package/dist/app/activity-log/workflow-executions/index.html +1 -0
  122. package/dist/app/activity-log/workflow-executions/index.txt +14 -0
  123. package/dist/app/activity-log/workflow-logs/index.html +1 -0
  124. package/dist/app/activity-log/workflow-logs/index.txt +14 -0
  125. package/dist/app/change-password/index.html +1 -0
  126. package/dist/app/change-password/index.txt +14 -0
  127. package/dist/app/dashboard/index.html +1 -0
  128. package/dist/app/dashboard/index.txt +14 -0
  129. package/dist/app/data-browser/index.html +1 -0
  130. package/dist/app/data-browser/index.txt +14 -0
  131. package/dist/app/file-manager/index.html +1 -0
  132. package/dist/app/file-manager/index.txt +14 -0
  133. package/dist/app/forgot-password/index.html +1 -0
  134. package/dist/app/forgot-password/index.txt +13 -0
  135. package/dist/app/index.html +1 -0
  136. package/dist/app/index.txt +9 -0
  137. package/dist/app/login/index.html +1 -0
  138. package/dist/app/login/index.txt +13 -0
  139. package/dist/app/logo-dark.png +0 -0
  140. package/dist/app/logo-icon.svg +81 -0
  141. package/dist/app/logo-light.png +0 -0
  142. package/dist/app/register/index.html +1 -0
  143. package/dist/app/register/index.txt +13 -0
  144. package/dist/app/settings/migrations/index.html +1 -0
  145. package/dist/app/settings/migrations/index.txt +14 -0
  146. package/dist/app/settings/permissions/index.html +1 -0
  147. package/dist/app/settings/permissions/index.txt +14 -0
  148. package/dist/app/settings/project/index.html +1 -0
  149. package/dist/app/settings/project/index.txt +14 -0
  150. package/dist/app/settings/roles/index.html +1 -0
  151. package/dist/app/settings/roles/index.txt +14 -0
  152. package/dist/app/settings/schema/index.html +1 -0
  153. package/dist/app/settings/schema/index.txt +14 -0
  154. package/dist/app/settings/tasks/index.html +1 -0
  155. package/dist/app/settings/tasks/index.txt +14 -0
  156. package/dist/app/settings/templates/edit/index.html +1 -0
  157. package/dist/app/settings/templates/edit/index.txt +14 -0
  158. package/dist/app/settings/templates/index.html +1 -0
  159. package/dist/app/settings/templates/index.txt +14 -0
  160. package/dist/app/settings/tenants/index.html +1 -0
  161. package/dist/app/settings/tenants/index.txt +14 -0
  162. package/dist/app/users/index.html +1 -0
  163. package/dist/app/users/index.txt +14 -0
  164. package/dist/app/users/invites/index.html +1 -0
  165. package/dist/app/users/invites/index.txt +14 -0
  166. package/dist/app/users/list/index.html +1 -0
  167. package/dist/app/users/list/index.txt +14 -0
  168. package/dist/app/users/preferences/index.html +1 -0
  169. package/dist/app/users/preferences/index.txt +14 -0
  170. package/dist/app/users/user-roles/index.html +1 -0
  171. package/dist/app/users/user-roles/index.txt +14 -0
  172. package/dist/app/workflows/detail/index.html +1 -0
  173. package/dist/app/workflows/detail/index.txt +14 -0
  174. package/dist/app/workflows/edit/index.html +1 -0
  175. package/dist/app/workflows/edit/index.txt +14 -0
  176. package/dist/app/workflows/execution/index.html +1 -0
  177. package/dist/app/workflows/execution/index.txt +14 -0
  178. package/dist/app/workflows/index.html +1 -0
  179. package/dist/app/workflows/index.txt +14 -0
  180. package/dist/app.d.ts +36 -0
  181. package/dist/app.d.ts.map +1 -0
  182. package/dist/app.js +546 -0
  183. package/dist/app.js.map +1 -0
  184. package/dist/auth/adapters/baasix-adapter.d.ts +12 -0
  185. package/dist/auth/adapters/baasix-adapter.d.ts.map +1 -0
  186. package/dist/auth/adapters/baasix-adapter.js +318 -0
  187. package/dist/auth/adapters/baasix-adapter.js.map +1 -0
  188. package/dist/auth/adapters/index.d.ts +6 -0
  189. package/dist/auth/adapters/index.d.ts.map +1 -0
  190. package/dist/auth/adapters/index.js +5 -0
  191. package/dist/auth/adapters/index.js.map +1 -0
  192. package/dist/auth/core.d.ts +73 -0
  193. package/dist/auth/core.d.ts.map +1 -0
  194. package/dist/auth/core.js +528 -0
  195. package/dist/auth/core.js.map +1 -0
  196. package/dist/auth/index.d.ts +56 -0
  197. package/dist/auth/index.d.ts.map +1 -0
  198. package/dist/auth/index.js +58 -0
  199. package/dist/auth/index.js.map +1 -0
  200. package/dist/auth/oauth2/index.d.ts +5 -0
  201. package/dist/auth/oauth2/index.d.ts.map +1 -0
  202. package/dist/auth/oauth2/index.js +5 -0
  203. package/dist/auth/oauth2/index.js.map +1 -0
  204. package/dist/auth/oauth2/utils.d.ts +90 -0
  205. package/dist/auth/oauth2/utils.d.ts.map +1 -0
  206. package/dist/auth/oauth2/utils.js +167 -0
  207. package/dist/auth/oauth2/utils.js.map +1 -0
  208. package/dist/auth/providers/apple.d.ts +28 -0
  209. package/dist/auth/providers/apple.d.ts.map +1 -0
  210. package/dist/auth/providers/apple.js +192 -0
  211. package/dist/auth/providers/apple.js.map +1 -0
  212. package/dist/auth/providers/credential.d.ts +87 -0
  213. package/dist/auth/providers/credential.d.ts.map +1 -0
  214. package/dist/auth/providers/credential.js +162 -0
  215. package/dist/auth/providers/credential.js.map +1 -0
  216. package/dist/auth/providers/facebook.d.ts +26 -0
  217. package/dist/auth/providers/facebook.d.ts.map +1 -0
  218. package/dist/auth/providers/facebook.js +112 -0
  219. package/dist/auth/providers/facebook.js.map +1 -0
  220. package/dist/auth/providers/github.d.ts +29 -0
  221. package/dist/auth/providers/github.d.ts.map +1 -0
  222. package/dist/auth/providers/github.js +144 -0
  223. package/dist/auth/providers/github.js.map +1 -0
  224. package/dist/auth/providers/google.d.ts +32 -0
  225. package/dist/auth/providers/google.d.ts.map +1 -0
  226. package/dist/auth/providers/google.js +145 -0
  227. package/dist/auth/providers/google.js.map +1 -0
  228. package/dist/auth/providers/index.d.ts +22 -0
  229. package/dist/auth/providers/index.d.ts.map +1 -0
  230. package/dist/auth/providers/index.js +17 -0
  231. package/dist/auth/providers/index.js.map +1 -0
  232. package/dist/auth/routes.d.ts +63 -0
  233. package/dist/auth/routes.d.ts.map +1 -0
  234. package/dist/auth/routes.js +827 -0
  235. package/dist/auth/routes.js.map +1 -0
  236. package/dist/auth/services/index.d.ts +10 -0
  237. package/dist/auth/services/index.d.ts.map +1 -0
  238. package/dist/auth/services/index.js +7 -0
  239. package/dist/auth/services/index.js.map +1 -0
  240. package/dist/auth/services/session.d.ts +81 -0
  241. package/dist/auth/services/session.d.ts.map +1 -0
  242. package/dist/auth/services/session.js +186 -0
  243. package/dist/auth/services/session.js.map +1 -0
  244. package/dist/auth/services/token.d.ts +41 -0
  245. package/dist/auth/services/token.d.ts.map +1 -0
  246. package/dist/auth/services/token.js +44 -0
  247. package/dist/auth/services/token.js.map +1 -0
  248. package/dist/auth/services/verification.d.ts +77 -0
  249. package/dist/auth/services/verification.d.ts.map +1 -0
  250. package/dist/auth/services/verification.js +143 -0
  251. package/dist/auth/services/verification.js.map +1 -0
  252. package/dist/auth/types.d.ts +318 -0
  253. package/dist/auth/types.d.ts.map +1 -0
  254. package/dist/auth/types.js +6 -0
  255. package/dist/auth/types.js.map +1 -0
  256. package/dist/customTypes/arrays.d.ts +200 -0
  257. package/dist/customTypes/arrays.d.ts.map +1 -0
  258. package/dist/customTypes/arrays.js +309 -0
  259. package/dist/customTypes/arrays.js.map +1 -0
  260. package/dist/customTypes/index.d.ts +8 -0
  261. package/dist/customTypes/index.d.ts.map +1 -0
  262. package/dist/customTypes/index.js +11 -0
  263. package/dist/customTypes/index.js.map +1 -0
  264. package/dist/customTypes/postgis.d.ts +146 -0
  265. package/dist/customTypes/postgis.d.ts.map +1 -0
  266. package/dist/customTypes/postgis.js +315 -0
  267. package/dist/customTypes/postgis.js.map +1 -0
  268. package/dist/customTypes/ranges.d.ts +128 -0
  269. package/dist/customTypes/ranges.d.ts.map +1 -0
  270. package/dist/customTypes/ranges.js +257 -0
  271. package/dist/customTypes/ranges.js.map +1 -0
  272. package/dist/index.d.ts +37 -0
  273. package/dist/index.d.ts.map +1 -0
  274. package/dist/index.js +42 -0
  275. package/dist/index.js.map +1 -0
  276. package/dist/migrations/0.1.0-alpha.0_initial_setup.d.ts +29 -0
  277. package/dist/migrations/0.1.0-alpha.0_initial_setup.d.ts.map +1 -0
  278. package/dist/migrations/0.1.0-alpha.0_initial_setup.js +72 -0
  279. package/dist/migrations/0.1.0-alpha.0_initial_setup.js.map +1 -0
  280. package/dist/migrations/_example_migration.d.ts +31 -0
  281. package/dist/migrations/_example_migration.d.ts.map +1 -0
  282. package/dist/migrations/_example_migration.js +75 -0
  283. package/dist/migrations/_example_migration.js.map +1 -0
  284. package/dist/plugins/definePlugin.d.ts +49 -0
  285. package/dist/plugins/definePlugin.d.ts.map +1 -0
  286. package/dist/plugins/definePlugin.js +131 -0
  287. package/dist/plugins/definePlugin.js.map +1 -0
  288. package/dist/plugins/softDelete.d.ts +179 -0
  289. package/dist/plugins/softDelete.d.ts.map +1 -0
  290. package/dist/plugins/softDelete.js +235 -0
  291. package/dist/plugins/softDelete.js.map +1 -0
  292. package/dist/routes/auth.route.d.ts +14 -0
  293. package/dist/routes/auth.route.d.ts.map +1 -0
  294. package/dist/routes/auth.route.js +421 -0
  295. package/dist/routes/auth.route.js.map +1 -0
  296. package/dist/routes/file.route.d.ts +7 -0
  297. package/dist/routes/file.route.d.ts.map +1 -0
  298. package/dist/routes/file.route.js +274 -0
  299. package/dist/routes/file.route.js.map +1 -0
  300. package/dist/routes/items.route.d.ts +7 -0
  301. package/dist/routes/items.route.d.ts.map +1 -0
  302. package/dist/routes/items.route.js +369 -0
  303. package/dist/routes/items.route.js.map +1 -0
  304. package/dist/routes/migration.route.d.ts +7 -0
  305. package/dist/routes/migration.route.d.ts.map +1 -0
  306. package/dist/routes/migration.route.js +225 -0
  307. package/dist/routes/migration.route.js.map +1 -0
  308. package/dist/routes/notification.route.d.ts +7 -0
  309. package/dist/routes/notification.route.d.ts.map +1 -0
  310. package/dist/routes/notification.route.js +124 -0
  311. package/dist/routes/notification.route.js.map +1 -0
  312. package/dist/routes/openapi.route.d.ts +7 -0
  313. package/dist/routes/openapi.route.d.ts.map +1 -0
  314. package/dist/routes/openapi.route.js +2169 -0
  315. package/dist/routes/openapi.route.js.map +1 -0
  316. package/dist/routes/permission.route.d.ts +7 -0
  317. package/dist/routes/permission.route.d.ts.map +1 -0
  318. package/dist/routes/permission.route.js +158 -0
  319. package/dist/routes/permission.route.js.map +1 -0
  320. package/dist/routes/realtime.route.d.ts +21 -0
  321. package/dist/routes/realtime.route.d.ts.map +1 -0
  322. package/dist/routes/realtime.route.js +243 -0
  323. package/dist/routes/realtime.route.js.map +1 -0
  324. package/dist/routes/reports.route.d.ts +7 -0
  325. package/dist/routes/reports.route.d.ts.map +1 -0
  326. package/dist/routes/reports.route.js +95 -0
  327. package/dist/routes/reports.route.js.map +1 -0
  328. package/dist/routes/schema.route.d.ts +7 -0
  329. package/dist/routes/schema.route.d.ts.map +1 -0
  330. package/dist/routes/schema.route.js +1780 -0
  331. package/dist/routes/schema.route.js.map +1 -0
  332. package/dist/routes/settings.route.d.ts +7 -0
  333. package/dist/routes/settings.route.d.ts.map +1 -0
  334. package/dist/routes/settings.route.js +154 -0
  335. package/dist/routes/settings.route.js.map +1 -0
  336. package/dist/routes/templates.route.d.ts +7 -0
  337. package/dist/routes/templates.route.d.ts.map +1 -0
  338. package/dist/routes/templates.route.js +91 -0
  339. package/dist/routes/templates.route.js.map +1 -0
  340. package/dist/routes/utils.route.d.ts +7 -0
  341. package/dist/routes/utils.route.d.ts.map +1 -0
  342. package/dist/routes/utils.route.js +33 -0
  343. package/dist/routes/utils.route.js.map +1 -0
  344. package/dist/routes/workflow.route.d.ts +7 -0
  345. package/dist/routes/workflow.route.d.ts.map +1 -0
  346. package/dist/routes/workflow.route.js +787 -0
  347. package/dist/routes/workflow.route.js.map +1 -0
  348. package/dist/services/AssetsService.d.ts +39 -0
  349. package/dist/services/AssetsService.d.ts.map +1 -0
  350. package/dist/services/AssetsService.js +255 -0
  351. package/dist/services/AssetsService.js.map +1 -0
  352. package/dist/services/CacheService.d.ts +169 -0
  353. package/dist/services/CacheService.d.ts.map +1 -0
  354. package/dist/services/CacheService.js +722 -0
  355. package/dist/services/CacheService.js.map +1 -0
  356. package/dist/services/FilesService.d.ts +30 -0
  357. package/dist/services/FilesService.d.ts.map +1 -0
  358. package/dist/services/FilesService.js +268 -0
  359. package/dist/services/FilesService.js.map +1 -0
  360. package/dist/services/HooksManager.d.ts +38 -0
  361. package/dist/services/HooksManager.d.ts.map +1 -0
  362. package/dist/services/HooksManager.js +165 -0
  363. package/dist/services/HooksManager.js.map +1 -0
  364. package/dist/services/ItemsService.d.ts +273 -0
  365. package/dist/services/ItemsService.d.ts.map +1 -0
  366. package/dist/services/ItemsService.js +2458 -0
  367. package/dist/services/ItemsService.js.map +1 -0
  368. package/dist/services/MailService.d.ts +76 -0
  369. package/dist/services/MailService.d.ts.map +1 -0
  370. package/dist/services/MailService.js +585 -0
  371. package/dist/services/MailService.js.map +1 -0
  372. package/dist/services/MigrationService.d.ts +243 -0
  373. package/dist/services/MigrationService.d.ts.map +1 -0
  374. package/dist/services/MigrationService.js +914 -0
  375. package/dist/services/MigrationService.js.map +1 -0
  376. package/dist/services/NotificationService.d.ts +35 -0
  377. package/dist/services/NotificationService.d.ts.map +1 -0
  378. package/dist/services/NotificationService.js +159 -0
  379. package/dist/services/NotificationService.js.map +1 -0
  380. package/dist/services/PermissionService.d.ts +128 -0
  381. package/dist/services/PermissionService.d.ts.map +1 -0
  382. package/dist/services/PermissionService.js +373 -0
  383. package/dist/services/PermissionService.js.map +1 -0
  384. package/dist/services/PluginManager.d.ts +138 -0
  385. package/dist/services/PluginManager.d.ts.map +1 -0
  386. package/dist/services/PluginManager.js +463 -0
  387. package/dist/services/PluginManager.js.map +1 -0
  388. package/dist/services/RealtimeService.d.ts +209 -0
  389. package/dist/services/RealtimeService.d.ts.map +1 -0
  390. package/dist/services/RealtimeService.js +978 -0
  391. package/dist/services/RealtimeService.js.map +1 -0
  392. package/dist/services/ReportService.d.ts +13 -0
  393. package/dist/services/ReportService.d.ts.map +1 -0
  394. package/dist/services/ReportService.js +91 -0
  395. package/dist/services/ReportService.js.map +1 -0
  396. package/dist/services/SettingsService.d.ts +60 -0
  397. package/dist/services/SettingsService.d.ts.map +1 -0
  398. package/dist/services/SettingsService.js +474 -0
  399. package/dist/services/SettingsService.js.map +1 -0
  400. package/dist/services/SocketService.d.ts +129 -0
  401. package/dist/services/SocketService.d.ts.map +1 -0
  402. package/dist/services/SocketService.js +600 -0
  403. package/dist/services/SocketService.js.map +1 -0
  404. package/dist/services/StatsService.d.ts +10 -0
  405. package/dist/services/StatsService.d.ts.map +1 -0
  406. package/dist/services/StatsService.js +40 -0
  407. package/dist/services/StatsService.js.map +1 -0
  408. package/dist/services/StorageService.d.ts +20 -0
  409. package/dist/services/StorageService.d.ts.map +1 -0
  410. package/dist/services/StorageService.js +164 -0
  411. package/dist/services/StorageService.js.map +1 -0
  412. package/dist/services/TasksService.d.ts +74 -0
  413. package/dist/services/TasksService.d.ts.map +1 -0
  414. package/dist/services/TasksService.js +404 -0
  415. package/dist/services/TasksService.js.map +1 -0
  416. package/dist/services/WorkflowService.d.ts +305 -0
  417. package/dist/services/WorkflowService.d.ts.map +1 -0
  418. package/dist/services/WorkflowService.js +1811 -0
  419. package/dist/services/WorkflowService.js.map +1 -0
  420. package/dist/templates/logo/logo.png +0 -0
  421. package/dist/templates/mails/default.liquid +23 -0
  422. package/dist/types/aggregation.d.ts +40 -0
  423. package/dist/types/aggregation.d.ts.map +1 -0
  424. package/dist/types/aggregation.js +6 -0
  425. package/dist/types/aggregation.js.map +1 -0
  426. package/dist/types/assets.d.ts +32 -0
  427. package/dist/types/assets.d.ts.map +1 -0
  428. package/dist/types/assets.js +6 -0
  429. package/dist/types/assets.js.map +1 -0
  430. package/dist/types/auth.d.ts +50 -0
  431. package/dist/types/auth.d.ts.map +1 -0
  432. package/dist/types/auth.js +6 -0
  433. package/dist/types/auth.js.map +1 -0
  434. package/dist/types/cache.d.ts +47 -0
  435. package/dist/types/cache.d.ts.map +1 -0
  436. package/dist/types/cache.js +6 -0
  437. package/dist/types/cache.js.map +1 -0
  438. package/dist/types/database.d.ts +16 -0
  439. package/dist/types/database.d.ts.map +1 -0
  440. package/dist/types/database.js +6 -0
  441. package/dist/types/database.js.map +1 -0
  442. package/dist/types/fields.d.ts +71 -0
  443. package/dist/types/fields.d.ts.map +1 -0
  444. package/dist/types/fields.js +6 -0
  445. package/dist/types/fields.js.map +1 -0
  446. package/dist/types/files.d.ts +33 -0
  447. package/dist/types/files.d.ts.map +1 -0
  448. package/dist/types/files.js +6 -0
  449. package/dist/types/files.js.map +1 -0
  450. package/dist/types/hooks.d.ts +29 -0
  451. package/dist/types/hooks.d.ts.map +1 -0
  452. package/dist/types/hooks.js +6 -0
  453. package/dist/types/hooks.js.map +1 -0
  454. package/dist/types/import-export.d.ts +62 -0
  455. package/dist/types/import-export.d.ts.map +1 -0
  456. package/dist/types/import-export.js +6 -0
  457. package/dist/types/import-export.js.map +1 -0
  458. package/dist/types/index.d.ts +31 -0
  459. package/dist/types/index.d.ts.map +1 -0
  460. package/dist/types/index.js +58 -0
  461. package/dist/types/index.js.map +1 -0
  462. package/dist/types/mail.d.ts +34 -0
  463. package/dist/types/mail.d.ts.map +1 -0
  464. package/dist/types/mail.js +6 -0
  465. package/dist/types/mail.js.map +1 -0
  466. package/dist/types/notifications.d.ts +16 -0
  467. package/dist/types/notifications.d.ts.map +1 -0
  468. package/dist/types/notifications.js +6 -0
  469. package/dist/types/notifications.js.map +1 -0
  470. package/dist/types/plugin.d.ts +351 -0
  471. package/dist/types/plugin.d.ts.map +1 -0
  472. package/dist/types/plugin.js +8 -0
  473. package/dist/types/plugin.js.map +1 -0
  474. package/dist/types/query.d.ts +71 -0
  475. package/dist/types/query.d.ts.map +1 -0
  476. package/dist/types/query.js +6 -0
  477. package/dist/types/query.js.map +1 -0
  478. package/dist/types/relations.d.ts +111 -0
  479. package/dist/types/relations.d.ts.map +1 -0
  480. package/dist/types/relations.js +6 -0
  481. package/dist/types/relations.js.map +1 -0
  482. package/dist/types/reports.d.ts +17 -0
  483. package/dist/types/reports.d.ts.map +1 -0
  484. package/dist/types/reports.js +6 -0
  485. package/dist/types/reports.js.map +1 -0
  486. package/dist/types/schema.d.ts +26 -0
  487. package/dist/types/schema.d.ts.map +1 -0
  488. package/dist/types/schema.js +6 -0
  489. package/dist/types/schema.js.map +1 -0
  490. package/dist/types/seed.d.ts +27 -0
  491. package/dist/types/seed.d.ts.map +1 -0
  492. package/dist/types/seed.js +6 -0
  493. package/dist/types/seed.js.map +1 -0
  494. package/dist/types/services.d.ts +68 -0
  495. package/dist/types/services.d.ts.map +1 -0
  496. package/dist/types/services.js +6 -0
  497. package/dist/types/services.js.map +1 -0
  498. package/dist/types/settings.d.ts +36 -0
  499. package/dist/types/settings.d.ts.map +1 -0
  500. package/dist/types/settings.js +6 -0
  501. package/dist/types/settings.js.map +1 -0
  502. package/dist/types/sockets.d.ts +26 -0
  503. package/dist/types/sockets.d.ts.map +1 -0
  504. package/dist/types/sockets.js +6 -0
  505. package/dist/types/sockets.js.map +1 -0
  506. package/dist/types/sort.d.ts +25 -0
  507. package/dist/types/sort.d.ts.map +1 -0
  508. package/dist/types/sort.js +6 -0
  509. package/dist/types/sort.js.map +1 -0
  510. package/dist/types/spatial.d.ts +19 -0
  511. package/dist/types/spatial.d.ts.map +1 -0
  512. package/dist/types/spatial.js +6 -0
  513. package/dist/types/spatial.js.map +1 -0
  514. package/dist/types/stats.d.ts +21 -0
  515. package/dist/types/stats.d.ts.map +1 -0
  516. package/dist/types/stats.js +6 -0
  517. package/dist/types/stats.js.map +1 -0
  518. package/dist/types/storage.d.ts +19 -0
  519. package/dist/types/storage.d.ts.map +1 -0
  520. package/dist/types/storage.js +6 -0
  521. package/dist/types/storage.js.map +1 -0
  522. package/dist/types/tasks.d.ts +14 -0
  523. package/dist/types/tasks.d.ts.map +1 -0
  524. package/dist/types/tasks.js +6 -0
  525. package/dist/types/tasks.js.map +1 -0
  526. package/dist/types/utils.d.ts +54 -0
  527. package/dist/types/utils.d.ts.map +1 -0
  528. package/dist/types/utils.js +6 -0
  529. package/dist/types/utils.js.map +1 -0
  530. package/dist/types/workflow.d.ts +17 -0
  531. package/dist/types/workflow.d.ts.map +1 -0
  532. package/dist/types/workflow.js +6 -0
  533. package/dist/types/workflow.js.map +1 -0
  534. package/dist/utils/aggregationUtils.d.ts +192 -0
  535. package/dist/utils/aggregationUtils.d.ts.map +1 -0
  536. package/dist/utils/aggregationUtils.js +450 -0
  537. package/dist/utils/aggregationUtils.js.map +1 -0
  538. package/dist/utils/auth.d.ts +93 -0
  539. package/dist/utils/auth.d.ts.map +1 -0
  540. package/dist/utils/auth.js +557 -0
  541. package/dist/utils/auth.js.map +1 -0
  542. package/dist/utils/cache.d.ts +64 -0
  543. package/dist/utils/cache.d.ts.map +1 -0
  544. package/dist/utils/cache.js +464 -0
  545. package/dist/utils/cache.js.map +1 -0
  546. package/dist/utils/common.d.ts +53 -0
  547. package/dist/utils/common.d.ts.map +1 -0
  548. package/dist/utils/common.js +162 -0
  549. package/dist/utils/common.js.map +1 -0
  550. package/dist/utils/db.d.ts +101 -0
  551. package/dist/utils/db.d.ts.map +1 -0
  552. package/dist/utils/db.js +413 -0
  553. package/dist/utils/db.js.map +1 -0
  554. package/dist/utils/dirname.d.ts +30 -0
  555. package/dist/utils/dirname.d.ts.map +1 -0
  556. package/dist/utils/dirname.js +95 -0
  557. package/dist/utils/dirname.js.map +1 -0
  558. package/dist/utils/dynamicVariableResolver.d.ts +17 -0
  559. package/dist/utils/dynamicVariableResolver.d.ts.map +1 -0
  560. package/dist/utils/dynamicVariableResolver.js +262 -0
  561. package/dist/utils/dynamicVariableResolver.js.map +1 -0
  562. package/dist/utils/env.d.ts +38 -0
  563. package/dist/utils/env.d.ts.map +1 -0
  564. package/dist/utils/env.js +80 -0
  565. package/dist/utils/env.js.map +1 -0
  566. package/dist/utils/errorHandler.d.ts +14 -0
  567. package/dist/utils/errorHandler.d.ts.map +1 -0
  568. package/dist/utils/errorHandler.js +79 -0
  569. package/dist/utils/errorHandler.js.map +1 -0
  570. package/dist/utils/fieldExpansion.d.ts +30 -0
  571. package/dist/utils/fieldExpansion.d.ts.map +1 -0
  572. package/dist/utils/fieldExpansion.js +145 -0
  573. package/dist/utils/fieldExpansion.js.map +1 -0
  574. package/dist/utils/fieldUtils.d.ts +179 -0
  575. package/dist/utils/fieldUtils.d.ts.map +1 -0
  576. package/dist/utils/fieldUtils.js +424 -0
  577. package/dist/utils/fieldUtils.js.map +1 -0
  578. package/dist/utils/filterOperators.d.ts +472 -0
  579. package/dist/utils/filterOperators.d.ts.map +1 -0
  580. package/dist/utils/filterOperators.js +1229 -0
  581. package/dist/utils/filterOperators.js.map +1 -0
  582. package/dist/utils/importUtils.d.ts +127 -0
  583. package/dist/utils/importUtils.d.ts.map +1 -0
  584. package/dist/utils/importUtils.js +437 -0
  585. package/dist/utils/importUtils.js.map +1 -0
  586. package/dist/utils/index.d.ts +75 -0
  587. package/dist/utils/index.d.ts.map +1 -0
  588. package/dist/utils/index.js +101 -0
  589. package/dist/utils/index.js.map +1 -0
  590. package/dist/utils/logger.d.ts +41 -0
  591. package/dist/utils/logger.d.ts.map +1 -0
  592. package/dist/utils/logger.js +217 -0
  593. package/dist/utils/logger.js.map +1 -0
  594. package/dist/utils/orderUtils.d.ts +117 -0
  595. package/dist/utils/orderUtils.d.ts.map +1 -0
  596. package/dist/utils/orderUtils.js +249 -0
  597. package/dist/utils/orderUtils.js.map +1 -0
  598. package/dist/utils/queryBuilder.d.ts +118 -0
  599. package/dist/utils/queryBuilder.d.ts.map +1 -0
  600. package/dist/utils/queryBuilder.js +489 -0
  601. package/dist/utils/queryBuilder.js.map +1 -0
  602. package/dist/utils/relationLoader.d.ts +65 -0
  603. package/dist/utils/relationLoader.d.ts.map +1 -0
  604. package/dist/utils/relationLoader.js +1081 -0
  605. package/dist/utils/relationLoader.js.map +1 -0
  606. package/dist/utils/relationPathResolver.d.ts +30 -0
  607. package/dist/utils/relationPathResolver.d.ts.map +1 -0
  608. package/dist/utils/relationPathResolver.js +173 -0
  609. package/dist/utils/relationPathResolver.js.map +1 -0
  610. package/dist/utils/relationUtils.d.ts +139 -0
  611. package/dist/utils/relationUtils.d.ts.map +1 -0
  612. package/dist/utils/relationUtils.js +711 -0
  613. package/dist/utils/relationUtils.js.map +1 -0
  614. package/dist/utils/router.d.ts +6 -0
  615. package/dist/utils/router.d.ts.map +1 -0
  616. package/dist/utils/router.js +95 -0
  617. package/dist/utils/router.js.map +1 -0
  618. package/dist/utils/schema.d.ts +88 -0
  619. package/dist/utils/schema.d.ts.map +1 -0
  620. package/dist/utils/schema.js +24 -0
  621. package/dist/utils/schema.js.map +1 -0
  622. package/dist/utils/schemaManager.d.ts +238 -0
  623. package/dist/utils/schemaManager.d.ts.map +1 -0
  624. package/dist/utils/schemaManager.js +1992 -0
  625. package/dist/utils/schemaManager.js.map +1 -0
  626. package/dist/utils/schemaValidator.d.ts +83 -0
  627. package/dist/utils/schemaValidator.d.ts.map +1 -0
  628. package/dist/utils/schemaValidator.js +491 -0
  629. package/dist/utils/schemaValidator.js.map +1 -0
  630. package/dist/utils/seed.d.ts +45 -0
  631. package/dist/utils/seed.d.ts.map +1 -0
  632. package/dist/utils/seed.js +248 -0
  633. package/dist/utils/seed.js.map +1 -0
  634. package/dist/utils/sessionCleanup.d.ts +10 -0
  635. package/dist/utils/sessionCleanup.d.ts.map +1 -0
  636. package/dist/utils/sessionCleanup.js +49 -0
  637. package/dist/utils/sessionCleanup.js.map +1 -0
  638. package/dist/utils/sortUtils.d.ts +117 -0
  639. package/dist/utils/sortUtils.d.ts.map +1 -0
  640. package/dist/utils/sortUtils.js +232 -0
  641. package/dist/utils/sortUtils.js.map +1 -0
  642. package/dist/utils/spatialUtils.d.ts +244 -0
  643. package/dist/utils/spatialUtils.d.ts.map +1 -0
  644. package/dist/utils/spatialUtils.js +359 -0
  645. package/dist/utils/spatialUtils.js.map +1 -0
  646. package/dist/utils/systemschema.d.ts +11040 -0
  647. package/dist/utils/systemschema.d.ts.map +1 -0
  648. package/dist/utils/systemschema.js +1777 -0
  649. package/dist/utils/systemschema.js.map +1 -0
  650. package/dist/utils/tenantUtils.d.ts +34 -0
  651. package/dist/utils/tenantUtils.d.ts.map +1 -0
  652. package/dist/utils/tenantUtils.js +124 -0
  653. package/dist/utils/tenantUtils.js.map +1 -0
  654. package/dist/utils/typeMapper.d.ts +25 -0
  655. package/dist/utils/typeMapper.d.ts.map +1 -0
  656. package/dist/utils/typeMapper.js +282 -0
  657. package/dist/utils/typeMapper.js.map +1 -0
  658. package/dist/utils/valueValidator.d.ts +60 -0
  659. package/dist/utils/valueValidator.d.ts.map +1 -0
  660. package/dist/utils/valueValidator.js +303 -0
  661. package/dist/utils/valueValidator.js.map +1 -0
  662. package/dist/utils/workflow.d.ts +87 -0
  663. package/dist/utils/workflow.d.ts.map +1 -0
  664. package/dist/utils/workflow.js +205 -0
  665. package/dist/utils/workflow.js.map +1 -0
  666. 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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"}