@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,450 @@
1
+ /**
2
+ * Aggregation Utilities Module for Drizzle ORM
3
+ *
4
+ * This module provides aggregation functions (count, sum, avg, min, max)
5
+ * for Drizzle ORM, matching Sequelize aggregation capabilities.
6
+ *
7
+ * Features:
8
+ * - Standard aggregations (COUNT, SUM, AVG, MIN, MAX)
9
+ * - DISTINCT count
10
+ * - ARRAY_AGG for array aggregation
11
+ * - Date part extraction (YEAR, MONTH, DAY, etc.)
12
+ * - GROUP BY support
13
+ * - Aggregate with relations
14
+ */
15
+ import { sql, count, min, max } from 'drizzle-orm';
16
+ /**
17
+ * Simple API Error class
18
+ */
19
+ class APIError extends Error {
20
+ statusCode;
21
+ constructor(message, statusCode = 500) {
22
+ super(message);
23
+ this.statusCode = statusCode;
24
+ this.name = 'APIError';
25
+ }
26
+ }
27
+ /**
28
+ * Create aggregate function SQL
29
+ * Uses built-in aggregate functions and sql<type> template tags
30
+ */
31
+ export function createAggregateFunction(func, column, ctx) {
32
+ switch (func.toLowerCase()) {
33
+ case 'max':
34
+ return max(column);
35
+ case 'min':
36
+ return min(column);
37
+ case 'avg':
38
+ // avg() returns string by default in PostgreSQL, use mapWith for number
39
+ return sql `avg(${column})`.mapWith(Number);
40
+ case 'sum':
41
+ // sum() returns string by default in PostgreSQL, use mapWith for number
42
+ return sql `sum(${column})`.mapWith(Number);
43
+ case 'count':
44
+ return count(column);
45
+ case 'distinct':
46
+ return sql `count(distinct ${column})`.mapWith(Number);
47
+ case 'array_agg':
48
+ // Type depends on the column being aggregated
49
+ return sql `array_agg(${column})`;
50
+ default:
51
+ throw new APIError(`Unsupported aggregate function: ${func}`, 400);
52
+ }
53
+ }
54
+ /**
55
+ * Process date extraction for GROUP BY
56
+ * Format: "date:year:column" -> EXTRACT(YEAR FROM column)
57
+ */
58
+ export function processDateExtraction(field, column) {
59
+ const parts = field.split(':');
60
+ if (parts[0] === 'date' && parts.length >= 2) {
61
+ const dateFunction = parts[1];
62
+ const datePart = dateFunction.toUpperCase();
63
+ // If column is provided, use it directly
64
+ let extractExpression;
65
+ if (column) {
66
+ extractExpression = sql `extract(${sql.raw(datePart)} from ${column})`.mapWith(Number);
67
+ }
68
+ else {
69
+ // Quote the column name to preserve case sensitivity
70
+ const columnName = parts[2];
71
+ const quotedColumn = sql.raw(`"${columnName}"`);
72
+ extractExpression = sql `extract(${sql.raw(datePart)} from ${quotedColumn})`.mapWith(Number);
73
+ }
74
+ return {
75
+ expression: extractExpression,
76
+ alias: `${dateFunction}_${parts[2] || 'date'}`
77
+ };
78
+ }
79
+ return null;
80
+ }
81
+ /**
82
+ * Build aggregate attributes for SELECT clause
83
+ *
84
+ * @param aggregate - Aggregate mapping (alias -> config)
85
+ * @param groupBy - Array of fields to group by
86
+ * @param ctx - Aggregate context
87
+ * @returns Array of [SQL expression, alias] tuples
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const aggregate = {
92
+ * totalUsers: { function: 'count', field: 'id' },
93
+ * avgAge: { function: 'avg', field: 'age' }
94
+ * };
95
+ *
96
+ * const groupBy = ['status', 'date:year:createdAt'];
97
+ *
98
+ * const attributes = buildAggregateAttributes(aggregate, groupBy, {
99
+ * tableName: 'users'
100
+ * });
101
+ *
102
+ * // Use in query:
103
+ * const results = await db
104
+ * .select({
105
+ * ...Object.fromEntries(attributes.map(([expr, alias]) => [alias, expr]))
106
+ * })
107
+ * .from(usersTable)
108
+ * .groupBy(...groupByExprs);
109
+ * ```
110
+ */
111
+ export function buildAggregateAttributes(aggregate, groupBy = [], ctx) {
112
+ const attributes = [];
113
+ // Add aggregate functions
114
+ for (const [alias, aggregateInfo] of Object.entries(aggregate)) {
115
+ const { function: func, field } = aggregateInfo;
116
+ // Convert field string to SQL reference
117
+ let fieldRef;
118
+ const parts = field.split('.');
119
+ if (parts.length > 1) {
120
+ // Handle relation fields (e.g., "user.type" or "author.posts.price")
121
+ // Check if this is a relation that has been joined
122
+ // First check for exact field match (e.g., "user.id" in map)
123
+ if (ctx.pathToAliasMap && ctx.pathToAliasMap.has(field)) {
124
+ const joinAlias = ctx.pathToAliasMap.get(field);
125
+ // The alias is the table alias, append the column name
126
+ const columnName = parts[parts.length - 1];
127
+ fieldRef = sql.raw(`"${joinAlias}"."${columnName}"`);
128
+ }
129
+ else {
130
+ // Check if just the relation name is in the map (e.g., "user" in map)
131
+ const relationPath = parts[0];
132
+ if (ctx.pathToAliasMap && ctx.pathToAliasMap.has(relationPath)) {
133
+ const joinAlias = ctx.pathToAliasMap.get(relationPath);
134
+ // Replace relation name with JOIN alias
135
+ const remainingPath = parts.slice(1);
136
+ const quotedPath = `"${joinAlias}"` + (remainingPath.length > 0 ? '.' + remainingPath.map(p => `"${p}"`).join('.') : '');
137
+ fieldRef = sql.raw(quotedPath);
138
+ }
139
+ else {
140
+ // No JOIN alias, use field path as-is
141
+ const quotedPath = parts.map(p => `"${p}"`).join('.');
142
+ fieldRef = sql.raw(quotedPath);
143
+ }
144
+ }
145
+ }
146
+ else {
147
+ // Simple field - add table qualification and quoting
148
+ if (field === '*') {
149
+ // For COUNT(*), don't qualify with table name
150
+ fieldRef = sql.raw('*');
151
+ }
152
+ else if (ctx.tableName) {
153
+ fieldRef = sql.raw(`"${ctx.tableName}"."${field}"`);
154
+ }
155
+ else {
156
+ fieldRef = sql.raw(`"${field}"`);
157
+ }
158
+ }
159
+ const expr = createAggregateFunction(func, fieldRef, ctx);
160
+ attributes.push([expr, alias]);
161
+ }
162
+ // Add GROUP BY fields
163
+ if (groupBy && groupBy.length > 0) {
164
+ for (const field of groupBy) {
165
+ // Check for date extractions like "date:year:fieldname"
166
+ const dateExtraction = processDateExtraction(field);
167
+ if (dateExtraction) {
168
+ attributes.push([dateExtraction.expression, dateExtraction.alias]);
169
+ }
170
+ else {
171
+ const parts = field.split('.');
172
+ if (parts.length > 1) {
173
+ // Handle relation fields - use pathToAliasMap for proper JOIN alias
174
+ let fieldRef;
175
+ // Check if this is a relation that has been joined
176
+ // First check for exact field match (e.g., "user.id" in map)
177
+ if (ctx.pathToAliasMap && ctx.pathToAliasMap.has(field)) {
178
+ const joinAlias = ctx.pathToAliasMap.get(field);
179
+ // The alias is the table alias, append the column name
180
+ const columnName = parts[parts.length - 1];
181
+ fieldRef = sql.raw(`"${joinAlias}"."${columnName}"`);
182
+ }
183
+ else {
184
+ // Check if just the relation name is in the map (e.g., "user" in map)
185
+ const relationPath = parts[0];
186
+ if (ctx.pathToAliasMap && ctx.pathToAliasMap.has(relationPath)) {
187
+ const joinAlias = ctx.pathToAliasMap.get(relationPath);
188
+ // Replace relation name with JOIN alias
189
+ const remainingPath = parts.slice(1);
190
+ const quotedPath = `"${joinAlias}"` + (remainingPath.length > 0 ? '.' + remainingPath.map(p => `"${p}"`).join('.') : '');
191
+ fieldRef = sql.raw(quotedPath);
192
+ }
193
+ else {
194
+ // No JOIN alias, use field path as-is
195
+ fieldRef = sql.raw(`"${parts.join('"."')}"`);
196
+ }
197
+ }
198
+ const alias = field.replace(/\./g, '_');
199
+ attributes.push([fieldRef, alias]);
200
+ }
201
+ else {
202
+ // Simple field
203
+ const fieldRef = sql.raw(`"${field}"`);
204
+ attributes.push([fieldRef, field]);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ return attributes;
210
+ }
211
+ /**
212
+ * Build GROUP BY expressions using
213
+ *
214
+ * @param groupBy - Array of fields to group by
215
+ * @param columns - Optional map of column objects to use instead of strings
216
+ * @param pathToAliasMap - Optional map of relation paths to JOIN aliases
217
+ * @returns Array of SQL expressions for GROUP BY clause
218
+ */
219
+ export function buildGroupByExpressions(groupBy, columns, pathToAliasMap) {
220
+ return groupBy.map(field => {
221
+ // Check for date extractions
222
+ const dateExtraction = processDateExtraction(field, columns?.[field]);
223
+ if (dateExtraction) {
224
+ return dateExtraction.expression;
225
+ }
226
+ // If we have a column object, use it directly
227
+ if (columns?.[field]) {
228
+ return columns[field];
229
+ }
230
+ // Handle relation fields - use sql template for identifiers
231
+ const parts = field.split('.');
232
+ if (parts.length > 1) {
233
+ // Check if this is a relation that has been joined
234
+ // First check for exact field match (e.g., "user.id" in map)
235
+ if (pathToAliasMap && pathToAliasMap.has(field)) {
236
+ const joinAlias = pathToAliasMap.get(field);
237
+ // The alias is the table alias, append the column name
238
+ const columnName = parts[parts.length - 1];
239
+ return sql.raw(`"${joinAlias}"."${columnName}"`);
240
+ }
241
+ // Check if just the relation name is in the map (e.g., "user" in map)
242
+ const relationPath = parts[0];
243
+ if (pathToAliasMap && pathToAliasMap.has(relationPath)) {
244
+ const joinAlias = pathToAliasMap.get(relationPath);
245
+ // Replace relation name with JOIN alias
246
+ const remainingPath = parts.slice(1);
247
+ const quotedPath = `"${joinAlias}"` + (remainingPath.length > 0 ? '.' + remainingPath.map(p => `"${p}"`).join('.') : '');
248
+ return sql.raw(quotedPath);
249
+ }
250
+ // No JOIN alias, use field path as-is
251
+ const quotedPath = parts.map(p => `"${p}"`).join('.');
252
+ return sql.raw(quotedPath);
253
+ }
254
+ // Simple field - use sql template
255
+ return sql.raw(`"${field}"`);
256
+ });
257
+ }
258
+ /**
259
+ * Count records with optional distinct
260
+ *
261
+ * @param column - Column to count (or '*' for all)
262
+ * @param distinct - Whether to count distinct values only
263
+ */
264
+ export function countRecords(column, distinct = false) {
265
+ if (!column) {
266
+ return sql `COUNT(*)`;
267
+ }
268
+ if (distinct) {
269
+ return sql `COUNT(DISTINCT ${column})`;
270
+ }
271
+ return sql `COUNT(${column})`;
272
+ }
273
+ /**
274
+ * Sum column values
275
+ */
276
+ export function sumColumn(column) {
277
+ return sql `SUM(${column})`;
278
+ }
279
+ /**
280
+ * Average column values
281
+ */
282
+ export function avgColumn(column) {
283
+ return sql `AVG(${column})`;
284
+ }
285
+ /**
286
+ * Minimum column value
287
+ */
288
+ export function minColumn(column) {
289
+ return sql `MIN(${column})`;
290
+ }
291
+ /**
292
+ * Maximum column value
293
+ */
294
+ export function maxColumn(column) {
295
+ return sql `MAX(${column})`;
296
+ }
297
+ /**
298
+ * Array aggregation (collect values into array)
299
+ */
300
+ export function arrayAgg(column, distinct = false) {
301
+ if (distinct) {
302
+ return sql `ARRAY_AGG(DISTINCT ${column})`;
303
+ }
304
+ return sql `ARRAY_AGG(${column})`;
305
+ }
306
+ /**
307
+ * String aggregation (concatenate values)
308
+ */
309
+ export function stringAgg(column, delimiter = ', ') {
310
+ return sql `STRING_AGG(${column}, ${delimiter})`;
311
+ }
312
+ /**
313
+ * JSON aggregation (collect rows as JSON array)
314
+ */
315
+ export function jsonAgg(rowExpression) {
316
+ return sql `JSON_AGG(${rowExpression})`;
317
+ }
318
+ /**
319
+ * Date part extraction using
320
+ *
321
+ * @param part - Date part to extract (year, month, day, hour, minute, week, dow, isodow)
322
+ * @param column - Date/timestamp column
323
+ * @example
324
+ * const yearCol = extractDatePart('year', users.createdAt);
325
+ * // Equivalent to: EXTRACT(YEAR FROM users.createdAt)
326
+ */
327
+ export function extractDatePart(part, column) {
328
+ const partUpper = part.toUpperCase();
329
+ // Use sql<number> for type safety and .mapWith(Number) for runtime conversion
330
+ return sql `extract(${sql.raw(partUpper)} from ${column})`.mapWith(Number);
331
+ }
332
+ /**
333
+ * Date truncation
334
+ *
335
+ * @param precision - Time precision (day, week, month, year, hour, minute)
336
+ * @param column - Date/timestamp column
337
+ * @example
338
+ * const dailyGroups = truncateDate('day', orders.createdAt);
339
+ * // Equivalent to: DATE_TRUNC('day', orders.createdAt)
340
+ */
341
+ export function truncateDate(precision, column) {
342
+ // Use sql<Date> for type safety - returns timestamp
343
+ return sql `date_trunc(${precision}, ${column})`;
344
+ }
345
+ /**
346
+ * Conditional count (COUNT with CASE WHEN)
347
+ *
348
+ * @example
349
+ * ```typescript
350
+ * // Count active users
351
+ * const activeCount = conditionalCount(
352
+ * eq(usersTable.status, 'active')
353
+ * );
354
+ * ```
355
+ */
356
+ export function conditionalCount(condition) {
357
+ return sql `COUNT(CASE WHEN ${condition} THEN 1 END)`;
358
+ }
359
+ /**
360
+ * Conditional sum (SUM with CASE WHEN)
361
+ */
362
+ export function conditionalSum(column, condition) {
363
+ return sql `SUM(CASE WHEN ${condition} THEN ${column} ELSE 0 END)`;
364
+ }
365
+ /**
366
+ * Percentile calculation
367
+ *
368
+ * @param column - Numeric column
369
+ * @param percentile - Percentile value (0.0 to 1.0)
370
+ * @param discrete - Use discrete (percentile_disc) vs continuous (percentile_cont)
371
+ * @example
372
+ * const median = calculatePercentile(sales.amount, 0.5);
373
+ * // Equivalent to: PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sales.amount)
374
+ */
375
+ export function calculatePercentile(column, percentile, discrete = false) {
376
+ const func = discrete ? 'percentile_disc' : 'percentile_cont';
377
+ return sql `${sql.raw(func)}(${percentile}) within group (order by ${column})`.mapWith(Number);
378
+ }
379
+ /**
380
+ * Standard deviation
381
+ */
382
+ export function stddev(column, population = false) {
383
+ const func = population ? 'stddev_pop' : 'stddev_samp';
384
+ return sql `${sql.raw(func)}(${column})`.mapWith(Number);
385
+ }
386
+ /**
387
+ * Variance
388
+ */
389
+ export function variance(column, population = false) {
390
+ const func = population ? 'var_pop' : 'var_samp';
391
+ return sql `${sql.raw(func)}(${column})`.mapWith(Number);
392
+ }
393
+ /**
394
+ * Coalesce (return first non-null value)
395
+ */
396
+ export function coalesce(...values) {
397
+ const valueParts = values.map(v => v && typeof v === 'object' && 'queryChunks' in v ? v : sql.raw(String(v)));
398
+ return sql `COALESCE(${sql.join(valueParts, sql `, `)})`;
399
+ }
400
+ /**
401
+ * Full-text search matching
402
+ * @param columns - Array of column objects to search
403
+ * @param searchQuery - Search query string
404
+ * @returns SQL condition for full-text matching
405
+ */
406
+ export function applyFullTextSearch(columns, searchQuery) {
407
+ // Prepare the full-text search query
408
+ const tsQuery = searchQuery.trim().replace(/\s+/g, ":* & ") + ":*";
409
+ const escapedTsQuery = tsQuery.replace(/'/g, "''");
410
+ // Build concatenated fields using sql template
411
+ const concatParts = columns.map(col => sql `coalesce(${col}::text, '')`);
412
+ const concatFields = sql.join(concatParts, sql ` || ' ' || `);
413
+ // Use sql<boolean> for the comparison result
414
+ return sql `to_tsvector('english', ${concatFields}) @@ to_tsquery('english', ${escapedTsQuery})`;
415
+ }
416
+ /**
417
+ * Geographic distance calculation
418
+ *
419
+ * @param column - Geography/geometry column
420
+ * @param targetPoint - GeoJSON point
421
+ * @returns SQL for distance in meters
422
+ */
423
+ export function calculateDistance(column, targetPoint) {
424
+ const geoJSON = JSON.stringify(targetPoint);
425
+ // Use ST_DistanceSpheroid for accurate earth-surface distance in meters
426
+ // This is more reliable than ::geography casting across different PostGIS versions
427
+ return sql `ST_DistanceSpheroid(
428
+ ${column},
429
+ ST_SetSRID(ST_GeomFromGeoJSON(${geoJSON}), 4326),
430
+ 'SPHEROID["WGS 84",6378137,298.257223563]'
431
+ )`.mapWith(Number);
432
+ }
433
+ /**
434
+ * Build HAVING clause from filter
435
+ * Similar to WHERE but for aggregate results
436
+ *
437
+ * Note: HAVING clause is not currently used in the application.
438
+ * This is a placeholder for future implementation if aggregate filtering is needed.
439
+ */
440
+ export function buildHavingClause(filter) {
441
+ // HAVING clause would use similar logic to drizzleWhere but for aggregate columns
442
+ // Currently not implemented as no use cases require it
443
+ if (!filter || Object.keys(filter).length === 0) {
444
+ return undefined;
445
+ }
446
+ // Not implemented - would require building conditions for aggregate expressions
447
+ // Example: HAVING COUNT(*) > 5, HAVING SUM(amount) >= 100
448
+ return undefined;
449
+ }
450
+ //# sourceMappingURL=aggregationUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregationUtils.js","sourceRoot":"","sources":["../../baasix/utils/aggregationUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Authentication utilities for Baasix
3
+ * New implementation using the adapter-based auth module
4
+ * Provides backward compatibility with existing exports
5
+ */
6
+ import type { JWTPayload, UserWithRolesAndPermissions } from '../types/index.js';
7
+ export type { JWTPayload, UserWithRolesAndPermissions };
8
+ /**
9
+ * Helper function to get and cache roles and permissions
10
+ * Uses PermissionService for role data (cached in memory) and Redis cache for permissions
11
+ */
12
+ export declare function getRolesAndPermissions(roleId: string | number): Promise<{
13
+ id: string | number;
14
+ name: string;
15
+ description?: string;
16
+ isTenantSpecific?: boolean;
17
+ permissions: Record<string, {
18
+ action: string;
19
+ collection: string;
20
+ fields?: any;
21
+ conditions?: any;
22
+ }>;
23
+ }>;
24
+ /**
25
+ * Verify JWT token and return decoded payload
26
+ */
27
+ export declare function verifyJWT(token: string): any;
28
+ /**
29
+ * Get user with roles, permissions, and tenant information
30
+ */
31
+ export declare function getUserRolesPermissionsAndTenant(userId: string | number, tenantId?: string | number | null): Promise<{
32
+ role: {
33
+ id: string | number;
34
+ name: string;
35
+ description?: string;
36
+ isTenantSpecific?: boolean;
37
+ };
38
+ permissions: any;
39
+ tenant?: any;
40
+ }>;
41
+ /**
42
+ * Generate JWT token for user
43
+ */
44
+ export declare function generateJWT(payload: Record<string, any>, expiresIn?: string | number): string;
45
+ /**
46
+ * Extract token from Authorization header
47
+ */
48
+ export declare function extractTokenFromHeader(authHeader: string | undefined): string | null;
49
+ /**
50
+ * Get the public role (from PermissionService hybrid cache)
51
+ * Returns the public role with its ID, or a fallback if not found
52
+ */
53
+ export declare function getPublicRole(): Promise<{
54
+ id: string | number | null;
55
+ name: string;
56
+ }>;
57
+ /**
58
+ * Authentication middleware for Express
59
+ * Verifies JWT token and sets req.accountability
60
+ */
61
+ export declare const authMiddleware: (req: any, res: any, next: any) => Promise<any>;
62
+ /**
63
+ * Helper function to check if user is an administrator
64
+ */
65
+ export declare const isAdmin: (req: any) => boolean;
66
+ /**
67
+ * Middleware to check for admin access
68
+ */
69
+ export declare const adminOnly: (req: any, res: any, next: any) => any;
70
+ /**
71
+ * Create a session in the database
72
+ */
73
+ export declare function createSession(user: any, expiresInSeconds: number, sessionType?: string, tenantId?: string | null): Promise<string>;
74
+ /**
75
+ * Validate a session token
76
+ */
77
+ export declare function validateSession(token: string, expectedTenantId?: string | null): Promise<any>;
78
+ /**
79
+ * Validate session limits for a user
80
+ */
81
+ export declare function validateSessionLimits(userId: string, sessionType: string, tenantId?: string | null, role?: {
82
+ id: string | number;
83
+ name: string;
84
+ } | null): Promise<{
85
+ isValid: boolean;
86
+ error?: string;
87
+ }>;
88
+ /**
89
+ * Generate token with session creation
90
+ */
91
+ export declare function generateToken(user: any, role: any, tenant?: any, ip?: string | null, sessionType?: string): Promise<string>;
92
+ export default authMiddleware;
93
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../baasix/utils/auth.ts"],"names":[],"mappings":"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"}