@acmekit/framework 2.13.1

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 (362) hide show
  1. package/README.md +0 -0
  2. package/dist/acmekit-app-loader.d.ts +70 -0
  3. package/dist/acmekit-app-loader.d.ts.map +1 -0
  4. package/dist/acmekit-app-loader.js +256 -0
  5. package/dist/acmekit-app-loader.js.map +1 -0
  6. package/dist/build-tools/compiler.d.ts +64 -0
  7. package/dist/build-tools/compiler.d.ts.map +1 -0
  8. package/dist/build-tools/compiler.js +423 -0
  9. package/dist/build-tools/compiler.js.map +1 -0
  10. package/dist/build-tools/index.d.ts +2 -0
  11. package/dist/build-tools/index.d.ts.map +1 -0
  12. package/dist/build-tools/index.js +18 -0
  13. package/dist/build-tools/index.js.map +1 -0
  14. package/dist/config/config.d.ts +39 -0
  15. package/dist/config/config.d.ts.map +1 -0
  16. package/dist/config/config.js +155 -0
  17. package/dist/config/config.js.map +1 -0
  18. package/dist/config/index.d.ts +5 -0
  19. package/dist/config/index.d.ts.map +1 -0
  20. package/dist/config/index.js +21 -0
  21. package/dist/config/index.js.map +1 -0
  22. package/dist/config/loader.d.ts +15 -0
  23. package/dist/config/loader.d.ts.map +1 -0
  24. package/dist/config/loader.js +39 -0
  25. package/dist/config/loader.js.map +1 -0
  26. package/dist/config/types.d.ts +2 -0
  27. package/dist/config/types.d.ts.map +1 -0
  28. package/dist/config/types.js +3 -0
  29. package/dist/config/types.js.map +1 -0
  30. package/dist/container.d.ts +3 -0
  31. package/dist/container.d.ts.map +1 -0
  32. package/dist/container.js +21 -0
  33. package/dist/container.js.map +1 -0
  34. package/dist/database/index.d.ts +3 -0
  35. package/dist/database/index.d.ts.map +1 -0
  36. package/dist/database/index.js +19 -0
  37. package/dist/database/index.js.map +1 -0
  38. package/dist/database/pg-connection-loader.d.ts +6 -0
  39. package/dist/database/pg-connection-loader.d.ts.map +1 -0
  40. package/dist/database/pg-connection-loader.js +68 -0
  41. package/dist/database/pg-connection-loader.js.map +1 -0
  42. package/dist/deps/awilix.d.ts +2 -0
  43. package/dist/deps/awilix.d.ts.map +1 -0
  44. package/dist/deps/awilix.js +18 -0
  45. package/dist/deps/awilix.js.map +1 -0
  46. package/dist/deps/mikro-orm-cli.d.ts +2 -0
  47. package/dist/deps/mikro-orm-cli.d.ts.map +1 -0
  48. package/dist/deps/mikro-orm-cli.js +18 -0
  49. package/dist/deps/mikro-orm-cli.js.map +1 -0
  50. package/dist/deps/mikro-orm-core.d.ts +2 -0
  51. package/dist/deps/mikro-orm-core.d.ts.map +1 -0
  52. package/dist/deps/mikro-orm-core.js +18 -0
  53. package/dist/deps/mikro-orm-core.js.map +1 -0
  54. package/dist/deps/mikro-orm-knex.d.ts +2 -0
  55. package/dist/deps/mikro-orm-knex.d.ts.map +1 -0
  56. package/dist/deps/mikro-orm-knex.js +18 -0
  57. package/dist/deps/mikro-orm-knex.js.map +1 -0
  58. package/dist/deps/mikro-orm-migrations.d.ts +2 -0
  59. package/dist/deps/mikro-orm-migrations.d.ts.map +1 -0
  60. package/dist/deps/mikro-orm-migrations.js +18 -0
  61. package/dist/deps/mikro-orm-migrations.js.map +1 -0
  62. package/dist/deps/mikro-orm-postgresql.d.ts +2 -0
  63. package/dist/deps/mikro-orm-postgresql.d.ts.map +1 -0
  64. package/dist/deps/mikro-orm-postgresql.js +18 -0
  65. package/dist/deps/mikro-orm-postgresql.js.map +1 -0
  66. package/dist/deps/opentelemetry-api.d.ts +2 -0
  67. package/dist/deps/opentelemetry-api.d.ts.map +1 -0
  68. package/dist/deps/opentelemetry-api.js +18 -0
  69. package/dist/deps/opentelemetry-api.js.map +1 -0
  70. package/dist/deps/opentelemetry-instrumentation-pg.d.ts +2 -0
  71. package/dist/deps/opentelemetry-instrumentation-pg.d.ts.map +1 -0
  72. package/dist/deps/opentelemetry-instrumentation-pg.js +18 -0
  73. package/dist/deps/opentelemetry-instrumentation-pg.js.map +1 -0
  74. package/dist/deps/opentelemetry-resources.d.ts +2 -0
  75. package/dist/deps/opentelemetry-resources.d.ts.map +1 -0
  76. package/dist/deps/opentelemetry-resources.js +18 -0
  77. package/dist/deps/opentelemetry-resources.js.map +1 -0
  78. package/dist/deps/opentelemetry-sdk-node.d.ts +2 -0
  79. package/dist/deps/opentelemetry-sdk-node.d.ts.map +1 -0
  80. package/dist/deps/opentelemetry-sdk-node.js +18 -0
  81. package/dist/deps/opentelemetry-sdk-node.js.map +1 -0
  82. package/dist/deps/opentelemetry-sdk-trace-node.d.ts +2 -0
  83. package/dist/deps/opentelemetry-sdk-trace-node.d.ts.map +1 -0
  84. package/dist/deps/opentelemetry-sdk-trace-node.js +18 -0
  85. package/dist/deps/opentelemetry-sdk-trace-node.js.map +1 -0
  86. package/dist/deps/pg.d.ts +2 -0
  87. package/dist/deps/pg.d.ts.map +1 -0
  88. package/dist/deps/pg.js +18 -0
  89. package/dist/deps/pg.js.map +1 -0
  90. package/dist/deps/zod.d.ts +2 -0
  91. package/dist/deps/zod.d.ts.map +1 -0
  92. package/dist/deps/zod.js +18 -0
  93. package/dist/deps/zod.js.map +1 -0
  94. package/dist/feature-flags/feature-flag-loader.d.ts +7 -0
  95. package/dist/feature-flags/feature-flag-loader.d.ts.map +1 -0
  96. package/dist/feature-flags/feature-flag-loader.js +34 -0
  97. package/dist/feature-flags/feature-flag-loader.js.map +1 -0
  98. package/dist/feature-flags/flag-router.d.ts +32 -0
  99. package/dist/feature-flags/flag-router.d.ts.map +1 -0
  100. package/dist/feature-flags/flag-router.js +67 -0
  101. package/dist/feature-flags/flag-router.js.map +1 -0
  102. package/dist/feature-flags/index.d.ts +5 -0
  103. package/dist/feature-flags/index.d.ts.map +1 -0
  104. package/dist/feature-flags/index.js +21 -0
  105. package/dist/feature-flags/index.js.map +1 -0
  106. package/dist/feature-flags/types.d.ts +31 -0
  107. package/dist/feature-flags/types.d.ts.map +1 -0
  108. package/dist/feature-flags/types.js +3 -0
  109. package/dist/feature-flags/types.js.map +1 -0
  110. package/dist/http/express-loader.d.ts +10 -0
  111. package/dist/http/express-loader.d.ts.map +1 -0
  112. package/dist/http/express-loader.js +130 -0
  113. package/dist/http/express-loader.js.map +1 -0
  114. package/dist/http/index.d.ts +15 -0
  115. package/dist/http/index.d.ts.map +1 -0
  116. package/dist/http/index.js +31 -0
  117. package/dist/http/index.js.map +1 -0
  118. package/dist/http/middleware-file-loader.d.ts +33 -0
  119. package/dist/http/middleware-file-loader.d.ts.map +1 -0
  120. package/dist/http/middleware-file-loader.js +186 -0
  121. package/dist/http/middleware-file-loader.js.map +1 -0
  122. package/dist/http/middlewares/apply-default-filters.d.ts +3 -0
  123. package/dist/http/middlewares/apply-default-filters.d.ts.map +1 -0
  124. package/dist/http/middlewares/apply-default-filters.js +32 -0
  125. package/dist/http/middlewares/apply-default-filters.js.map +1 -0
  126. package/dist/http/middlewares/apply-locale.d.ts +12 -0
  127. package/dist/http/middlewares/apply-locale.d.ts.map +1 -0
  128. package/dist/http/middlewares/apply-locale.js +31 -0
  129. package/dist/http/middlewares/apply-locale.js.map +1 -0
  130. package/dist/http/middlewares/apply-params-as-filters.d.ts +5 -0
  131. package/dist/http/middlewares/apply-params-as-filters.d.ts.map +1 -0
  132. package/dist/http/middlewares/apply-params-as-filters.js +14 -0
  133. package/dist/http/middlewares/apply-params-as-filters.js.map +1 -0
  134. package/dist/http/middlewares/authenticate-middleware.d.ts +14 -0
  135. package/dist/http/middlewares/authenticate-middleware.d.ts.map +1 -0
  136. package/dist/http/middlewares/authenticate-middleware.js +142 -0
  137. package/dist/http/middlewares/authenticate-middleware.js.map +1 -0
  138. package/dist/http/middlewares/bodyparser.d.ts +13 -0
  139. package/dist/http/middlewares/bodyparser.d.ts.map +1 -0
  140. package/dist/http/middlewares/bodyparser.js +62 -0
  141. package/dist/http/middlewares/bodyparser.js.map +1 -0
  142. package/dist/http/middlewares/check-permissions.d.ts +15 -0
  143. package/dist/http/middlewares/check-permissions.d.ts.map +1 -0
  144. package/dist/http/middlewares/check-permissions.js +54 -0
  145. package/dist/http/middlewares/check-permissions.js.map +1 -0
  146. package/dist/http/middlewares/clear-filters-by-key.d.ts +3 -0
  147. package/dist/http/middlewares/clear-filters-by-key.d.ts.map +1 -0
  148. package/dist/http/middlewares/clear-filters-by-key.js +12 -0
  149. package/dist/http/middlewares/clear-filters-by-key.js.map +1 -0
  150. package/dist/http/middlewares/ensure-publishable-api-key.d.ts +3 -0
  151. package/dist/http/middlewares/ensure-publishable-api-key.d.ts.map +1 -0
  152. package/dist/http/middlewares/ensure-publishable-api-key.js +58 -0
  153. package/dist/http/middlewares/ensure-publishable-api-key.js.map +1 -0
  154. package/dist/http/middlewares/error-handler.d.ts +21 -0
  155. package/dist/http/middlewares/error-handler.d.ts.map +1 -0
  156. package/dist/http/middlewares/error-handler.js +107 -0
  157. package/dist/http/middlewares/error-handler.js.map +1 -0
  158. package/dist/http/middlewares/exception-formatter.d.ts +9 -0
  159. package/dist/http/middlewares/exception-formatter.d.ts.map +1 -0
  160. package/dist/http/middlewares/exception-formatter.js +36 -0
  161. package/dist/http/middlewares/exception-formatter.js.map +1 -0
  162. package/dist/http/middlewares/index.d.ts +10 -0
  163. package/dist/http/middlewares/index.d.ts.map +1 -0
  164. package/dist/http/middlewares/index.js +26 -0
  165. package/dist/http/middlewares/index.js.map +1 -0
  166. package/dist/http/middlewares/set-context.d.ts +3 -0
  167. package/dist/http/middlewares/set-context.d.ts.map +1 -0
  168. package/dist/http/middlewares/set-context.js +18 -0
  169. package/dist/http/middlewares/set-context.js.map +1 -0
  170. package/dist/http/router.d.ts +36 -0
  171. package/dist/http/router.d.ts.map +1 -0
  172. package/dist/http/router.js +317 -0
  173. package/dist/http/router.js.map +1 -0
  174. package/dist/http/routes-finder.d.ts +22 -0
  175. package/dist/http/routes-finder.d.ts.map +1 -0
  176. package/dist/http/routes-finder.js +68 -0
  177. package/dist/http/routes-finder.js.map +1 -0
  178. package/dist/http/routes-loader.d.ts +39 -0
  179. package/dist/http/routes-loader.d.ts.map +1 -0
  180. package/dist/http/routes-loader.js +232 -0
  181. package/dist/http/routes-loader.js.map +1 -0
  182. package/dist/http/routes-sorter.d.ts +105 -0
  183. package/dist/http/routes-sorter.d.ts.map +1 -0
  184. package/dist/http/routes-sorter.js +146 -0
  185. package/dist/http/routes-sorter.js.map +1 -0
  186. package/dist/http/types.d.ts +191 -0
  187. package/dist/http/types.d.ts.map +1 -0
  188. package/dist/http/types.js +16 -0
  189. package/dist/http/types.js.map +1 -0
  190. package/dist/http/utils/define-middlewares.d.ts +22 -0
  191. package/dist/http/utils/define-middlewares.d.ts.map +1 -0
  192. package/dist/http/utils/define-middlewares.js +27 -0
  193. package/dist/http/utils/define-middlewares.js.map +1 -0
  194. package/dist/http/utils/field-filtering/field-parser.d.ts +32 -0
  195. package/dist/http/utils/field-filtering/field-parser.d.ts.map +1 -0
  196. package/dist/http/utils/field-filtering/field-parser.js +87 -0
  197. package/dist/http/utils/field-filtering/field-parser.js.map +1 -0
  198. package/dist/http/utils/field-filtering/field-validator.d.ts +24 -0
  199. package/dist/http/utils/field-filtering/field-validator.d.ts.map +1 -0
  200. package/dist/http/utils/field-filtering/field-validator.js +67 -0
  201. package/dist/http/utils/field-filtering/field-validator.js.map +1 -0
  202. package/dist/http/utils/field-filtering/index.d.ts +33 -0
  203. package/dist/http/utils/field-filtering/index.d.ts.map +1 -0
  204. package/dist/http/utils/field-filtering/index.js +9 -0
  205. package/dist/http/utils/field-filtering/index.js.map +1 -0
  206. package/dist/http/utils/get-query-config.d.ts +50 -0
  207. package/dist/http/utils/get-query-config.d.ts.map +1 -0
  208. package/dist/http/utils/get-query-config.js +109 -0
  209. package/dist/http/utils/get-query-config.js.map +1 -0
  210. package/dist/http/utils/http-compression.d.ts +5 -0
  211. package/dist/http/utils/http-compression.d.ts.map +1 -0
  212. package/dist/http/utils/http-compression.js +33 -0
  213. package/dist/http/utils/http-compression.js.map +1 -0
  214. package/dist/http/utils/maybe-apply-link-filter.d.ts +8 -0
  215. package/dist/http/utils/maybe-apply-link-filter.d.ts.map +1 -0
  216. package/dist/http/utils/maybe-apply-link-filter.js +68 -0
  217. package/dist/http/utils/maybe-apply-link-filter.js.map +1 -0
  218. package/dist/http/utils/policies/rbac-field-filter.d.ts +19 -0
  219. package/dist/http/utils/policies/rbac-field-filter.d.ts.map +1 -0
  220. package/dist/http/utils/policies/rbac-field-filter.js +348 -0
  221. package/dist/http/utils/policies/rbac-field-filter.js.map +1 -0
  222. package/dist/http/utils/refetch-entities.d.ts +21 -0
  223. package/dist/http/utils/refetch-entities.d.ts.map +1 -0
  224. package/dist/http/utils/refetch-entities.js +42 -0
  225. package/dist/http/utils/refetch-entities.js.map +1 -0
  226. package/dist/http/utils/restricted-fields.d.ts +6 -0
  227. package/dist/http/utils/restricted-fields.d.ts.map +1 -0
  228. package/dist/http/utils/restricted-fields.js +30 -0
  229. package/dist/http/utils/restricted-fields.js.map +1 -0
  230. package/dist/http/utils/unless-path.d.ts +9 -0
  231. package/dist/http/utils/unless-path.d.ts.map +1 -0
  232. package/dist/http/utils/unless-path.js +19 -0
  233. package/dist/http/utils/unless-path.js.map +1 -0
  234. package/dist/http/utils/validate-body.d.ts +5 -0
  235. package/dist/http/utils/validate-body.d.ts.map +1 -0
  236. package/dist/http/utils/validate-body.js +23 -0
  237. package/dist/http/utils/validate-body.js.map +1 -0
  238. package/dist/http/utils/validate-query.d.ts +6 -0
  239. package/dist/http/utils/validate-query.d.ts.map +1 -0
  240. package/dist/http/utils/validate-query.js +84 -0
  241. package/dist/http/utils/validate-query.js.map +1 -0
  242. package/dist/http/utils/wrap-handler.d.ts +3 -0
  243. package/dist/http/utils/wrap-handler.d.ts.map +1 -0
  244. package/dist/http/utils/wrap-handler.js +26 -0
  245. package/dist/http/utils/wrap-handler.js.map +1 -0
  246. package/dist/index.d.ts +18 -0
  247. package/dist/index.d.ts.map +1 -0
  248. package/dist/index.js +36 -0
  249. package/dist/index.js.map +1 -0
  250. package/dist/jobs/index.d.ts +2 -0
  251. package/dist/jobs/index.d.ts.map +1 -0
  252. package/dist/jobs/index.js +18 -0
  253. package/dist/jobs/index.js.map +1 -0
  254. package/dist/jobs/job-loader.d.ts +44 -0
  255. package/dist/jobs/job-loader.d.ts.map +1 -0
  256. package/dist/jobs/job-loader.js +91 -0
  257. package/dist/jobs/job-loader.js.map +1 -0
  258. package/dist/links/index.d.ts +2 -0
  259. package/dist/links/index.d.ts.map +1 -0
  260. package/dist/links/index.js +18 -0
  261. package/dist/links/index.js.map +1 -0
  262. package/dist/links/link-loader.d.ts +11 -0
  263. package/dist/links/link-loader.d.ts.map +1 -0
  264. package/dist/links/link-loader.js +76 -0
  265. package/dist/links/link-loader.js.map +1 -0
  266. package/dist/logger/index.d.ts +3 -0
  267. package/dist/logger/index.d.ts.map +1 -0
  268. package/dist/logger/index.js +9 -0
  269. package/dist/logger/index.js.map +1 -0
  270. package/dist/migrations/index.d.ts +3 -0
  271. package/dist/migrations/index.d.ts.map +1 -0
  272. package/dist/migrations/index.js +19 -0
  273. package/dist/migrations/index.js.map +1 -0
  274. package/dist/migrations/migrator.d.ts +38 -0
  275. package/dist/migrations/migrator.d.ts.map +1 -0
  276. package/dist/migrations/migrator.js +146 -0
  277. package/dist/migrations/migrator.js.map +1 -0
  278. package/dist/migrations/run-migration-scripts.d.ts +17 -0
  279. package/dist/migrations/run-migration-scripts.d.ts.map +1 -0
  280. package/dist/migrations/run-migration-scripts.js +97 -0
  281. package/dist/migrations/run-migration-scripts.js.map +1 -0
  282. package/dist/mikro-orm-cli/bin.d.ts +14 -0
  283. package/dist/mikro-orm-cli/bin.d.ts.map +1 -0
  284. package/dist/mikro-orm-cli/bin.js +54 -0
  285. package/dist/mikro-orm-cli/bin.js.map +1 -0
  286. package/dist/modules-sdk/index.d.ts +2 -0
  287. package/dist/modules-sdk/index.d.ts.map +1 -0
  288. package/dist/modules-sdk/index.js +18 -0
  289. package/dist/modules-sdk/index.js.map +1 -0
  290. package/dist/orchestration/index.d.ts +2 -0
  291. package/dist/orchestration/index.d.ts.map +1 -0
  292. package/dist/orchestration/index.js +18 -0
  293. package/dist/orchestration/index.js.map +1 -0
  294. package/dist/policies/has-permission.d.ts +33 -0
  295. package/dist/policies/has-permission.d.ts.map +1 -0
  296. package/dist/policies/has-permission.js +110 -0
  297. package/dist/policies/has-permission.js.map +1 -0
  298. package/dist/policies/index.d.ts +3 -0
  299. package/dist/policies/index.d.ts.map +1 -0
  300. package/dist/policies/index.js +19 -0
  301. package/dist/policies/index.js.map +1 -0
  302. package/dist/policies/policy-loader.d.ts +6 -0
  303. package/dist/policies/policy-loader.d.ts.map +1 -0
  304. package/dist/policies/policy-loader.js +17 -0
  305. package/dist/policies/policy-loader.js.map +1 -0
  306. package/dist/subscribers/index.d.ts +3 -0
  307. package/dist/subscribers/index.d.ts.map +1 -0
  308. package/dist/subscribers/index.js +19 -0
  309. package/dist/subscribers/index.js.map +1 -0
  310. package/dist/subscribers/subscriber-loader.d.ts +20 -0
  311. package/dist/subscribers/subscriber-loader.d.ts.map +1 -0
  312. package/dist/subscribers/subscriber-loader.js +156 -0
  313. package/dist/subscribers/subscriber-loader.js.map +1 -0
  314. package/dist/subscribers/types.d.ts +15 -0
  315. package/dist/subscribers/types.d.ts.map +1 -0
  316. package/dist/subscribers/types.js +3 -0
  317. package/dist/subscribers/types.js.map +1 -0
  318. package/dist/telemetry/index.d.ts +50 -0
  319. package/dist/telemetry/index.d.ts.map +1 -0
  320. package/dist/telemetry/index.js +81 -0
  321. package/dist/telemetry/index.js.map +1 -0
  322. package/dist/types/container.d.ts +68 -0
  323. package/dist/types/container.d.ts.map +1 -0
  324. package/dist/types/container.js +3 -0
  325. package/dist/types/container.js.map +1 -0
  326. package/dist/types/index.d.ts +6 -0
  327. package/dist/types/index.d.ts.map +1 -0
  328. package/dist/types/index.js +19 -0
  329. package/dist/types/index.js.map +1 -0
  330. package/dist/utils/index.d.ts +5 -0
  331. package/dist/utils/index.d.ts.map +1 -0
  332. package/dist/utils/index.js +21 -0
  333. package/dist/utils/index.js.map +1 -0
  334. package/dist/utils/resource-loader.d.ts +28 -0
  335. package/dist/utils/resource-loader.d.ts.map +1 -0
  336. package/dist/utils/resource-loader.js +78 -0
  337. package/dist/utils/resource-loader.js.map +1 -0
  338. package/dist/workflows/index.d.ts +3 -0
  339. package/dist/workflows/index.d.ts.map +1 -0
  340. package/dist/workflows/index.js +19 -0
  341. package/dist/workflows/index.js.map +1 -0
  342. package/dist/workflows/workflow-loader.d.ts +13 -0
  343. package/dist/workflows/workflow-loader.d.ts.map +1 -0
  344. package/dist/workflows/workflow-loader.js +36 -0
  345. package/dist/workflows/workflow-loader.js.map +1 -0
  346. package/dist/workflows-sdk/composer.d.ts +2 -0
  347. package/dist/workflows-sdk/composer.d.ts.map +1 -0
  348. package/dist/workflows-sdk/composer.js +18 -0
  349. package/dist/workflows-sdk/composer.js.map +1 -0
  350. package/dist/workflows-sdk/index.d.ts +3 -0
  351. package/dist/workflows-sdk/index.d.ts.map +1 -0
  352. package/dist/workflows-sdk/index.js +19 -0
  353. package/dist/workflows-sdk/index.js.map +1 -0
  354. package/dist/zod/index.d.ts +2 -0
  355. package/dist/zod/index.d.ts.map +1 -0
  356. package/dist/zod/index.js +18 -0
  357. package/dist/zod/index.js.map +1 -0
  358. package/dist/zod/zod-helpers.d.ts +3 -0
  359. package/dist/zod/zod-helpers.d.ts.map +1 -0
  360. package/dist/zod/zod-helpers.js +95 -0
  361. package/dist/zod/zod-helpers.js.map +1 -0
  362. package/package.json +121 -0
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pickByConfig = pickByConfig;
4
+ exports.prepareListQuery = prepareListQuery;
5
+ exports.prepareRetrieveQuery = prepareRetrieveQuery;
6
+ const utils_1 = require("@acmekit/utils");
7
+ const field_filtering_1 = require("./field-filtering");
8
+ const rbac_field_filter_1 = require("./policies/rbac-field-filter");
9
+ function pickByConfig(obj, config) {
10
+ const fields = [...(config.select ?? []), ...(config.relations ?? [])];
11
+ if (fields.length) {
12
+ if (Array.isArray(obj)) {
13
+ return obj.map((o) => (0, utils_1.pickDeep)(o, fields));
14
+ }
15
+ else {
16
+ return (0, utils_1.pickDeep)(obj, fields);
17
+ }
18
+ }
19
+ return obj;
20
+ }
21
+ async function prepareListQuery(validated, queryConfig = {}, req) {
22
+ let { allowed = [], restricted = [], defaults = [], defaultLimit = 50, isList, entity, } = queryConfig;
23
+ const { order, fields, limit = defaultLimit, offset = 0, with_deleted, } = validated;
24
+ const parsedFields = field_filtering_1.FieldParser.parse(fields, defaults);
25
+ const { fields: allFields, starFields } = parsedFields;
26
+ const rbacFilterFieldsFeatureFlag = utils_1.FeatureFlag.isFeatureEnabled("rbac_filter_fields");
27
+ const filters = [];
28
+ if (req?.policies && entity && rbacFilterFieldsFeatureFlag) {
29
+ filters.push(new rbac_field_filter_1.RBACFieldFilter({
30
+ policies: req.policies,
31
+ userRoles: req.auth_context?.app_metadata?.roles || [],
32
+ container: req.scope,
33
+ }));
34
+ }
35
+ if (allowed.length) {
36
+ filters.push(new field_filtering_1.AllowedFieldFilter({ allowed }));
37
+ }
38
+ else if (restricted.length) {
39
+ filters.push(new field_filtering_1.RestrictedFieldFilter({ restricted }));
40
+ }
41
+ const notAllowedArrays = await (0, utils_1.promiseAll)(filters.map((f) => f.getNotAllowedFields({ entity: entity, parsedFields })));
42
+ const notAllowedFields = [...new Set(notAllowedArrays.flat())];
43
+ if (notAllowedFields.length && rbacFilterFieldsFeatureFlag) {
44
+ notAllowedFields.forEach((field) => {
45
+ allFields.delete(field);
46
+ starFields.delete(field);
47
+ });
48
+ }
49
+ // TODO: maintain backward compatibility, remove in the future
50
+ const { select, relations } = (0, utils_1.stringToSelectRelationObject)(Array.from(allFields));
51
+ let allRelations = new Set([...relations, ...Array.from(starFields)]);
52
+ // End of expand compatibility
53
+ let orderBy = {};
54
+ if ((0, utils_1.isDefined)(order)) {
55
+ let orderField = order;
56
+ if (order.startsWith("-")) {
57
+ orderField = order.slice(1);
58
+ orderBy = { [orderField]: "DESC" };
59
+ }
60
+ else {
61
+ orderBy = { [order]: "ASC" };
62
+ }
63
+ if (allowed.length && !allowed.includes(orderField)) {
64
+ throw new utils_1.AcmeKitError(utils_1.AcmeKitError.Types.INVALID_DATA, `Order field ${orderField} is not valid`);
65
+ }
66
+ }
67
+ const finalOrder = (0, utils_1.isPresent)(orderBy) ? (0, utils_1.buildOrder)(orderBy) : undefined;
68
+ return {
69
+ listConfig: {
70
+ select: select.length ? select : undefined,
71
+ relations: Array.from(allRelations),
72
+ skip: offset,
73
+ take: limit,
74
+ order: finalOrder,
75
+ withDeleted: with_deleted,
76
+ },
77
+ remoteQueryConfig: {
78
+ entity,
79
+ // Add starFields that are relations only on which we want all properties with a dedicated format to the remote query
80
+ fields: [
81
+ ...Array.from(allFields),
82
+ ...Array.from(starFields).map((f) => `${f}.*`),
83
+ ],
84
+ pagination: isList
85
+ ? {
86
+ skip: offset,
87
+ take: limit,
88
+ order: finalOrder,
89
+ }
90
+ : {},
91
+ withDeleted: with_deleted,
92
+ },
93
+ };
94
+ }
95
+ async function prepareRetrieveQuery(validated, queryConfig, req) {
96
+ const { listConfig, remoteQueryConfig } = await prepareListQuery(validated, queryConfig, req);
97
+ return {
98
+ retrieveConfig: {
99
+ select: listConfig.select,
100
+ relations: listConfig.relations,
101
+ },
102
+ remoteQueryConfig: {
103
+ fields: remoteQueryConfig.fields,
104
+ pagination: {},
105
+ withDeleted: remoteQueryConfig.withDeleted,
106
+ },
107
+ };
108
+ }
109
+ //# sourceMappingURL=get-query-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-query-config.js","sourceRoot":"","sources":["../../../src/http/utils/get-query-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { HttpCompressionOptions, ProjectConfigOptions } from "../../config";
2
+ import type { AcmeKitRequest, AcmeKitResponse } from "../types";
3
+ export declare function shouldCompressResponse(req: AcmeKitRequest, res: AcmeKitResponse): boolean;
4
+ export declare function compressionOptions(config: ProjectConfigOptions): HttpCompressionOptions;
5
+ //# sourceMappingURL=http-compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-compression.d.ts","sourceRoot":"","sources":["../../../src/http/utils/http-compression.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/D,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,WAkBrB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAWxB"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.shouldCompressResponse = shouldCompressResponse;
7
+ exports.compressionOptions = compressionOptions;
8
+ const compression_1 = __importDefault(require("compression"));
9
+ const utils_1 = require("@acmekit/utils");
10
+ function shouldCompressResponse(req, res) {
11
+ const { projectConfig } = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
12
+ const { enabled } = compressionOptions(projectConfig);
13
+ if (!enabled) {
14
+ return false;
15
+ }
16
+ if (req.headers["x-no-compression"]) {
17
+ // don't compress responses with this request header
18
+ return false;
19
+ }
20
+ // fallback to standard filter function
21
+ return compression_1.default.filter(req, res);
22
+ }
23
+ function compressionOptions(config) {
24
+ const responseCompressionOptions = config.http.compression ?? {};
25
+ responseCompressionOptions.enabled =
26
+ responseCompressionOptions.enabled ?? false;
27
+ responseCompressionOptions.level = responseCompressionOptions.level ?? 6;
28
+ responseCompressionOptions.memLevel = responseCompressionOptions.memLevel ?? 8;
29
+ responseCompressionOptions.threshold =
30
+ responseCompressionOptions.threshold ?? 1024;
31
+ return responseCompressionOptions;
32
+ }
33
+ //# sourceMappingURL=http-compression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-compression.js","sourceRoot":"","sources":["../../../src/http/utils/http-compression.ts"],"names":[],"mappings":";;;;;AAOA,wDAoBC;AAED,gDAaC;AA1CD,8DAAqC;AAErC,0CAA0D;AAK1D,SAAgB,sBAAsB,CACpC,GAAmB,EACnB,GAAoB;IAEpB,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CACzC,iCAAyB,CAAC,aAAa,CACxC,CAAA;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAA;IAErD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpC,oDAAoD;QACpD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,uCAAuC;IACvC,OAAO,qBAAW,CAAC,MAAM,CAAC,GAAU,EAAE,GAAU,CAAC,CAAA;AACnD,CAAC;AAED,SAAgB,kBAAkB,CAChC,MAA4B;IAE5B,MAAM,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAA;IAEhE,0BAA0B,CAAC,OAAO;QAChC,0BAA0B,CAAC,OAAO,IAAI,KAAK,CAAA;IAC7C,0BAA0B,CAAC,KAAK,GAAG,0BAA0B,CAAC,KAAK,IAAI,CAAC,CAAA;IACxE,0BAA0B,CAAC,QAAQ,GAAG,0BAA0B,CAAC,QAAQ,IAAI,CAAC,CAAA;IAC9E,0BAA0B,CAAC,SAAS;QAClC,0BAA0B,CAAC,SAAS,IAAI,IAAI,CAAA;IAE9C,OAAO,0BAA0B,CAAA;AACnC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AcmeKitNextFunction, AcmeKitRequest, AcmeKitResponse } from "../types";
2
+ export declare function maybeApplyLinkFilter({ entryPoint, resourceId, filterableField, filterByField, }: {
3
+ entryPoint: any;
4
+ resourceId: any;
5
+ filterableField: any;
6
+ filterByField?: string | undefined;
7
+ }): (req: AcmeKitRequest, _: AcmeKitResponse, next: AcmeKitNextFunction) => Promise<void>;
8
+ //# sourceMappingURL=maybe-apply-link-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybe-apply-link-filter.d.ts","sourceRoot":"","sources":["../../../src/http/utils/maybe-apply-link-filter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EAChB,MAAM,UAAU,CAAA;AAEjB,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAoB,GACrB;;;;;CAAA,IAEG,KAAK,cAAc,EACnB,GAAG,eAAe,EAClB,MAAM,mBAAmB,mBA2C5B"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.maybeApplyLinkFilter = maybeApplyLinkFilter;
4
+ const utils_1 = require("@acmekit/utils");
5
+ function maybeApplyLinkFilter({ entryPoint, resourceId, filterableField, filterByField = "id", }) {
6
+ return async function linkFilter(req, _, next) {
7
+ const filterableFields = req.filterableFields;
8
+ if (!filterableFields?.[filterableField]) {
9
+ return next();
10
+ }
11
+ const filterFields = filterableFields[filterableField];
12
+ const idsToFilterBy = Array.isArray(filterFields)
13
+ ? filterFields
14
+ : [filterFields];
15
+ delete filterableFields[filterableField];
16
+ let existingFilters = filterableFields[filterByField];
17
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
18
+ const filters = {
19
+ [filterableField]: idsToFilterBy,
20
+ };
21
+ if (existingFilters) {
22
+ filters[resourceId] = existingFilters;
23
+ }
24
+ const { data: resources } = await query.graph({
25
+ entity: entryPoint,
26
+ fields: [resourceId],
27
+ filters,
28
+ });
29
+ filterableFields[filterByField] = resources.map((p) => p[resourceId]);
30
+ req.filterableFields = transformFilterableFields(filterableFields);
31
+ return next();
32
+ };
33
+ }
34
+ /*
35
+ Transforms an object key string into nested objects
36
+ before = {
37
+ "test.something.another": []
38
+ }
39
+
40
+ after = {
41
+ test: {
42
+ something: {
43
+ another: []
44
+ }
45
+ }
46
+ }
47
+ */
48
+ function transformFilterableFields(filterableFields) {
49
+ const result = {};
50
+ for (const key of Object.keys(filterableFields)) {
51
+ const value = filterableFields[key];
52
+ const keys = key.split(".");
53
+ let current = result;
54
+ // Iterate over the keys, creating nested objects as needed
55
+ for (let i = 0; i < keys.length; i++) {
56
+ const part = keys[i];
57
+ current[part] ??= {};
58
+ if (i === keys.length - 1) {
59
+ // If its the last key, assign the value
60
+ current[part] = value;
61
+ break;
62
+ }
63
+ current = current[part];
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ //# sourceMappingURL=maybe-apply-link-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybe-apply-link-filter.js","sourceRoot":"","sources":["../../../src/http/utils/maybe-apply-link-filter.ts"],"names":[],"mappings":";;AAOA,oDAoDC;AA3DD,0CAA0D;AAO1D,SAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,GAAG,IAAI,GACrB;IACC,OAAO,KAAK,UAAU,UAAU,CAC9B,GAAmB,EACnB,CAAkB,EAClB,IAAyB;QAEzB,MAAM,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAA;QAE7C,IAAI,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;QAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;QAEtD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;YAC/C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;QAElB,OAAO,gBAAgB,CAAC,eAAe,CAAC,CAAA;QAExC,IAAI,eAAe,GAAG,gBAAgB,CAAC,aAAa,CAGvC,CAAA;QAEb,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,iCAAyB,CAAC,KAAK,CAAC,CAAA;QAEhE,MAAM,OAAO,GAA4B;YACvC,CAAC,eAAe,CAAC,EAAE,aAAa;SACjC,CAAA;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,UAAU,CAAC,GAAG,eAAe,CAAA;QACvC,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;YAC5C,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,CAAC,UAAU,CAAC;YACpB,OAAO;SACR,CAAC,CAAA;QAEF,gBAAgB,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;QAErE,GAAG,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,gBAAgB,CAAC,CAAA;QAElE,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AACD;;;;;;;;;;;;;EAaE;AACF,SAAS,yBAAyB,CAAC,gBAAyC;IAC1E,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,OAAO,GAAG,MAAM,CAAA;QAEpB,2DAA2D;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACpB,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;YAEpB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,wCAAwC;gBACxC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;gBACrB,MAAK;YACP,CAAC;YAED,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { PolicyDefinition } from "@acmekit/framework/utils";
2
+ import type { AcmeKitContainer } from "@acmekit/types";
3
+ import { FieldFilterContext, IFieldFilter } from "../field-filtering/index";
4
+ /**
5
+ * RBAC Field Filter using the Strategy pattern
6
+ * Optimized for parallel permission checks
7
+ */
8
+ export declare class RBACFieldFilter implements IFieldFilter {
9
+ private policies;
10
+ private userRoles;
11
+ private container;
12
+ constructor({ policies, userRoles, container, }: {
13
+ policies: PolicyDefinition[];
14
+ userRoles: string[];
15
+ container: AcmeKitContainer;
16
+ });
17
+ getNotAllowedFields(context: FieldFilterContext): Promise<string[]>;
18
+ }
19
+ //# sourceMappingURL=rbac-field-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac-field-filter.d.ts","sourceRoot":"","sources":["../../../../src/http/utils/policies/rbac-field-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAIjB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAqY3E;;;GAGG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,SAAS,CAAkB;gBAEvB,EACV,QAAQ,EACR,SAAS,EACT,SAAS,GACV,EAAE;QACD,QAAQ,EAAE,gBAAgB,EAAE,CAAA;QAC5B,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,SAAS,EAAE,gBAAgB,CAAA;KAC5B;IAMK,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CA+D1E"}
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RBACFieldFilter = void 0;
4
+ const utils_1 = require("@acmekit/framework/utils");
5
+ const modules_sdk_1 = require("@acmekit/modules-sdk");
6
+ const has_permission_1 = require("../../../policies/has-permission");
7
+ /**
8
+ * Base GraphQL schema with common scalars
9
+ */
10
+ const baseGraphqlSchema = `
11
+ scalar DateTime
12
+ scalar Date
13
+ scalar Time
14
+ scalar JSON
15
+ `;
16
+ const primitiveTypes = new Set([
17
+ "String",
18
+ "Int",
19
+ "Float",
20
+ "Boolean",
21
+ "ID",
22
+ "DateTime",
23
+ "JSON",
24
+ ]);
25
+ // Cache for the schema and entity mappings to avoid re-parsing the GraphQL
26
+ let cachedSchema = null;
27
+ let cachedEntityMap = null;
28
+ let cachedEntityAliasMap = null;
29
+ function isString(value) {
30
+ return typeof value === "string";
31
+ }
32
+ /**
33
+ * Makes a GraphQL schema executable
34
+ */
35
+ function makeSchemaExecutable(inputSchema) {
36
+ const { schema: cleanedSchema } = utils_1.GraphQLUtils.cleanGraphQLSchema(inputSchema);
37
+ if (!cleanedSchema) {
38
+ return;
39
+ }
40
+ return utils_1.GraphQLUtils.makeExecutableSchema({
41
+ typeDefs: cleanedSchema,
42
+ });
43
+ }
44
+ function getExecutableSchema() {
45
+ if (cachedSchema) {
46
+ return cachedSchema;
47
+ }
48
+ cachedSchema = buildExecutableSchema();
49
+ return cachedSchema;
50
+ }
51
+ /**
52
+ * Builds entity alias map from joiner configs
53
+ * Maps all possible aliases (e.g., "variant", "variants") to canonical entity names (e.g., "ProductVariant")
54
+ */
55
+ function buildEntityAliasMap() {
56
+ const moduleJoinerConfigs = modules_sdk_1.AcmeKitModule.getAllJoinerConfigs();
57
+ const aliasMap = new Map();
58
+ for (const config of moduleJoinerConfigs) {
59
+ if (!config.alias) {
60
+ continue;
61
+ }
62
+ const aliases = Array.isArray(config.alias) ? config.alias : [config.alias];
63
+ for (const alias of aliases) {
64
+ const aliasNames = Array.isArray(alias.name) ? alias.name : [alias.name];
65
+ if (!alias.entity) {
66
+ continue;
67
+ }
68
+ const targetEntity = alias.entity;
69
+ for (const aliasName of aliasNames) {
70
+ aliasMap.set(aliasName, targetEntity);
71
+ }
72
+ }
73
+ }
74
+ return aliasMap;
75
+ }
76
+ /**
77
+ * Gets the entity alias map, building it if necessary
78
+ */
79
+ function getEntityAliasMap() {
80
+ if (!cachedEntityAliasMap) {
81
+ cachedEntityAliasMap = buildEntityAliasMap();
82
+ }
83
+ return cachedEntityAliasMap;
84
+ }
85
+ function getSchemaFromJoinerConfigs(moduleJoinerConfigs) {
86
+ const schemaParts = [];
87
+ for (const config of moduleJoinerConfigs) {
88
+ if (!config?.schema) {
89
+ continue;
90
+ }
91
+ schemaParts.push(config.schema);
92
+ }
93
+ return schemaParts.join("\n");
94
+ }
95
+ function buildCompleteEntityMap() {
96
+ const moduleJoinerConfigs = modules_sdk_1.AcmeKitModule.getAllJoinerConfigs();
97
+ const entityMap = new Map();
98
+ // base GraphQL schema
99
+ const schema = buildExecutableSchema();
100
+ if (!schema) {
101
+ return entityMap;
102
+ }
103
+ const entitiesMap = schema.getTypeMap();
104
+ // Process each service configuration to build alias field mappings
105
+ for (const config of moduleJoinerConfigs) {
106
+ processServiceConfig(config, entitiesMap, entityMap);
107
+ }
108
+ return entityMap;
109
+ }
110
+ /**
111
+ * Processes a service configuration to extract field mappings
112
+ */
113
+ function processServiceConfig(config, entitiesMap, entityMap) {
114
+ if (!config.extends) {
115
+ return;
116
+ }
117
+ for (const extend of config.extends) {
118
+ if (!entitiesMap[extend?.entity]) {
119
+ continue;
120
+ }
121
+ const extendedFieldAlias = extend.fieldAlias || {};
122
+ if (Object.keys(extendedFieldAlias).length > 0) {
123
+ processFieldAliases(extendedFieldAlias, extend.entity, entitiesMap, entityMap);
124
+ }
125
+ }
126
+ }
127
+ /**
128
+ * Processes field aliases to build entity mappings
129
+ */
130
+ function processFieldAliases(fieldAlias, baseEntity, entitiesMap, entityMap) {
131
+ for (const [aliasName, aliasConfig] of Object.entries(fieldAlias)) {
132
+ const aliasPath = isString(aliasConfig) ? aliasConfig : aliasConfig.path;
133
+ if (!aliasPath) {
134
+ continue;
135
+ }
136
+ // Build the complete path from base entity through alias path
137
+ const pathSegments = aliasPath.split(".");
138
+ let currentEntity = baseEntity;
139
+ let finalEntity = baseEntity;
140
+ let isValidPath = true;
141
+ // Traverse the path to find the final entity
142
+ for (const segment of pathSegments) {
143
+ const entityMapping = findFieldInEntity(currentEntity, segment, entitiesMap);
144
+ if (!entityMapping) {
145
+ isValidPath = false;
146
+ break;
147
+ }
148
+ currentEntity = entityMapping.targetEntity;
149
+ finalEntity = entityMapping.targetEntity;
150
+ }
151
+ if (isValidPath) {
152
+ const fullPath = `${baseEntity}.${aliasName}`;
153
+ entityMap.set(fullPath, {
154
+ entityName: aliasName,
155
+ targetEntity: finalEntity,
156
+ path: pathSegments,
157
+ });
158
+ }
159
+ }
160
+ }
161
+ /**
162
+ * Finds a field in an entity and returns its target entity
163
+ */
164
+ function findFieldInEntity(entityName, fieldName, entitiesMap) {
165
+ const entity = entitiesMap[entityName];
166
+ if (!entity?.astNode?.fields) {
167
+ return null;
168
+ }
169
+ for (const field of entity.astNode.fields) {
170
+ if (field.name?.value === fieldName) {
171
+ let type = field.type;
172
+ while (type.type) {
173
+ type = type.type;
174
+ }
175
+ const targetEntity = type.name?.value;
176
+ if (targetEntity && !primitiveTypes.has(targetEntity)) {
177
+ return { targetEntity };
178
+ }
179
+ }
180
+ }
181
+ return null;
182
+ }
183
+ /**
184
+ * Gets the complete entity map with all aliases resolved
185
+ */
186
+ function getEntityMap() {
187
+ if (!cachedEntityMap) {
188
+ cachedEntityMap = buildCompleteEntityMap();
189
+ }
190
+ return cachedEntityMap;
191
+ }
192
+ /**
193
+ * Builds executable schema from all joiner configs
194
+ */
195
+ function buildExecutableSchema() {
196
+ const moduleJoinerConfigs = modules_sdk_1.AcmeKitModule.getAllJoinerConfigs();
197
+ const schemaFromJoinerConfigs = getSchemaFromJoinerConfigs(moduleJoinerConfigs);
198
+ const augmentedSchema = baseGraphqlSchema + "\n" + schemaFromJoinerConfigs;
199
+ const executableSchema = makeSchemaExecutable(augmentedSchema);
200
+ return executableSchema || null;
201
+ }
202
+ /**
203
+ * Gets the actual GraphQL entity name from a field path using the complete entity map
204
+ * This now uses the pre-built entity map with all aliases resolved
205
+ * e.g., "product.variants.prices" -> "Price" (from resolved alias path)
206
+ */
207
+ function getActualEntityName(fieldPath) {
208
+ const schema = getExecutableSchema();
209
+ if (!schema) {
210
+ return null;
211
+ }
212
+ const entitiesMap = schema.getTypeMap();
213
+ const entityMap = getEntityMap();
214
+ const entityAliasMap = getEntityAliasMap();
215
+ const parts = fieldPath.split(".");
216
+ const entryPoint = parts[0];
217
+ const resolvedEntityName = entityAliasMap.get(entryPoint);
218
+ if (!resolvedEntityName) {
219
+ return null;
220
+ }
221
+ let currentEntity = entitiesMap[resolvedEntityName];
222
+ let currentEntityName = resolvedEntityName;
223
+ if (!currentEntity) {
224
+ return null;
225
+ }
226
+ for (let i = 1; i < parts.length; i++) {
227
+ const fieldName = parts[i];
228
+ const mappingKey = `${currentEntityName}.${fieldName}`;
229
+ const entityMapping = entityMap.get(mappingKey);
230
+ if (entityMapping) {
231
+ // field alias paths
232
+ const targetEntityName = entityMapping.targetEntity;
233
+ currentEntityName = targetEntityName;
234
+ currentEntity = entitiesMap[currentEntityName];
235
+ if (!currentEntity) {
236
+ return null;
237
+ }
238
+ }
239
+ else {
240
+ const fieldResult = findFieldInEntity(currentEntityName, fieldName, entitiesMap);
241
+ if (!fieldResult) {
242
+ return null;
243
+ }
244
+ currentEntityName = fieldResult.targetEntity;
245
+ currentEntity = entitiesMap[currentEntityName];
246
+ if (!currentEntity) {
247
+ return null;
248
+ }
249
+ }
250
+ }
251
+ return currentEntityName;
252
+ }
253
+ /**
254
+ * Gets the normalized snake_case entity name for policy comparison
255
+ * e.g., "product.variants" -> "product_variant", "Price" -> "price"
256
+ */
257
+ function getNormalizedEntityName(fieldPath) {
258
+ const actualEntityName = getActualEntityName(fieldPath);
259
+ if (!actualEntityName) {
260
+ return null;
261
+ }
262
+ return (0, utils_1.toSnakeCase)(actualEntityName);
263
+ }
264
+ /**
265
+ * Collects all unique entity paths that need permission checks
266
+ * This avoids duplicate permission checks for shared path prefixes
267
+ */
268
+ function collectUniqueEntityPaths(entity, fields) {
269
+ const uniquePaths = new Map();
270
+ for (const field of fields) {
271
+ const fullFieldPath = entity + "." + field;
272
+ const pathSegments = fullFieldPath.split(".");
273
+ // Build paths incrementally using string concatenation (more efficient than slice + join)
274
+ let currentPath = "";
275
+ for (let i = 0; i < pathSegments.length; i++) {
276
+ currentPath =
277
+ i === 0 ? pathSegments[i] : currentPath + "." + pathSegments[i];
278
+ if (!uniquePaths.has(currentPath)) {
279
+ const entityName = getNormalizedEntityName(currentPath);
280
+ uniquePaths.set(currentPath, { path: currentPath, entityName });
281
+ }
282
+ }
283
+ }
284
+ return uniquePaths;
285
+ }
286
+ /**
287
+ * RBAC Field Filter using the Strategy pattern
288
+ * Optimized for parallel permission checks
289
+ */
290
+ class RBACFieldFilter {
291
+ constructor({ policies, userRoles, container, }) {
292
+ this.policies = policies;
293
+ this.userRoles = userRoles;
294
+ this.container = container;
295
+ }
296
+ async getNotAllowedFields(context) {
297
+ const { entity, parsedFields } = context;
298
+ const { fields, starFields } = parsedFields;
299
+ const fieldsToCheck = [...fields, ...Array.from(starFields)];
300
+ if (!fieldsToCheck.length || !this.policies.length || !entity) {
301
+ return [];
302
+ }
303
+ const uniquePaths = collectUniqueEntityPaths(entity, fieldsToCheck);
304
+ const pathsNeedingCheck = [];
305
+ for (const [path, info] of uniquePaths) {
306
+ if (info.entityName && utils_1.PolicyResource[info.entityName]) {
307
+ pathsNeedingCheck.push({ path, entityName: info.entityName });
308
+ }
309
+ }
310
+ const permissionResults = await (0, utils_1.promiseAll)(pathsNeedingCheck.map(async ({ path, entityName }) => {
311
+ const hasAccess = await (0, has_permission_1.hasPermission)({
312
+ roles: this.userRoles,
313
+ actions: { resource: entityName, operation: "read" },
314
+ container: this.container,
315
+ });
316
+ return { path, hasAccess };
317
+ }));
318
+ const accessMap = new Map();
319
+ for (const result of permissionResults) {
320
+ accessMap.set(result.path, result.hasAccess);
321
+ }
322
+ const notAllowedFields = [];
323
+ for (const field of fieldsToCheck) {
324
+ const fullFieldPath = entity + "." + field;
325
+ const pathSegments = fullFieldPath.split(".");
326
+ let currentPath = "";
327
+ let fieldAllowed = true;
328
+ for (let i = 0; i < pathSegments.length; i++) {
329
+ currentPath =
330
+ i === 0 ? pathSegments[i] : currentPath + "." + pathSegments[i];
331
+ // Check if this path was in our permission check results
332
+ if (accessMap.has(currentPath)) {
333
+ const hasAccess = accessMap.get(currentPath);
334
+ if (!hasAccess) {
335
+ fieldAllowed = false;
336
+ break;
337
+ }
338
+ }
339
+ }
340
+ if (!fieldAllowed) {
341
+ notAllowedFields.push(field);
342
+ }
343
+ }
344
+ return notAllowedFields;
345
+ }
346
+ }
347
+ exports.RBACFieldFilter = RBACFieldFilter;
348
+ //# sourceMappingURL=rbac-field-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac-field-filter.js","sourceRoot":"","sources":["../../../../src/http/utils/policies/rbac-field-filter.ts"],"names":[],"mappings":"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"}