directus 9.23.1 → 9.23.4

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 (383) hide show
  1. package/dist/app.js +25 -21
  2. package/dist/auth/auth.d.ts +3 -3
  3. package/dist/auth/auth.js +2 -0
  4. package/dist/auth/drivers/ldap.d.ts +1 -1
  5. package/dist/auth/drivers/ldap.js +57 -46
  6. package/dist/auth/drivers/local.d.ts +1 -1
  7. package/dist/auth/drivers/local.js +20 -17
  8. package/dist/auth/drivers/oauth2.d.ts +1 -1
  9. package/dist/auth/drivers/oauth2.js +44 -35
  10. package/dist/auth/drivers/openid.d.ts +1 -1
  11. package/dist/auth/drivers/openid.js +50 -41
  12. package/dist/auth/drivers/saml.d.ts +1 -1
  13. package/dist/auth/drivers/saml.js +20 -17
  14. package/dist/auth.d.ts +1 -1
  15. package/dist/auth.js +8 -7
  16. package/dist/cache.d.ts +9 -1
  17. package/dist/cache.js +66 -18
  18. package/dist/cli/commands/bootstrap/index.js +7 -6
  19. package/dist/cli/commands/init/index.js +3 -3
  20. package/dist/cli/commands/schema/apply.js +14 -15
  21. package/dist/cli/commands/schema/snapshot.js +2 -2
  22. package/dist/cli/utils/create-db-connection.d.ts +1 -1
  23. package/dist/cli/utils/create-db-connection.js +3 -2
  24. package/dist/cli/utils/create-env/index.d.ts +2 -2
  25. package/dist/cli/utils/create-env/index.js +1 -1
  26. package/dist/cli/utils/drivers.d.ts +1 -1
  27. package/dist/constants.d.ts +3 -2
  28. package/dist/constants.js +7 -7
  29. package/dist/controllers/activity.js +10 -11
  30. package/dist/controllers/assets.js +31 -25
  31. package/dist/controllers/auth.js +40 -26
  32. package/dist/controllers/collections.js +10 -10
  33. package/dist/controllers/dashboards.js +14 -11
  34. package/dist/controllers/extensions.js +3 -3
  35. package/dist/controllers/fields.js +20 -20
  36. package/dist/controllers/files.js +26 -20
  37. package/dist/controllers/flows.js +16 -13
  38. package/dist/controllers/folders.js +14 -11
  39. package/dist/controllers/graphql.js +6 -8
  40. package/dist/controllers/items.js +22 -19
  41. package/dist/controllers/not-found.d.ts +1 -1
  42. package/dist/controllers/not-found.js +1 -2
  43. package/dist/controllers/notifications.js +14 -11
  44. package/dist/controllers/operations.js +14 -11
  45. package/dist/controllers/panels.js +14 -11
  46. package/dist/controllers/permissions.js +14 -11
  47. package/dist/controllers/presets.js +14 -11
  48. package/dist/controllers/relations.js +10 -10
  49. package/dist/controllers/revisions.js +3 -3
  50. package/dist/controllers/roles.js +14 -11
  51. package/dist/controllers/schema.js +5 -5
  52. package/dist/controllers/server.js +7 -7
  53. package/dist/controllers/settings.js +2 -2
  54. package/dist/controllers/shares.js +21 -18
  55. package/dist/controllers/users.js +32 -36
  56. package/dist/controllers/utils.js +10 -15
  57. package/dist/controllers/webhooks.js +14 -11
  58. package/dist/database/helpers/fn/dialects/mssql.d.ts +1 -1
  59. package/dist/database/helpers/fn/dialects/mssql.js +10 -11
  60. package/dist/database/helpers/fn/dialects/mysql.d.ts +1 -1
  61. package/dist/database/helpers/fn/dialects/mysql.js +2 -3
  62. package/dist/database/helpers/fn/dialects/oracle.d.ts +1 -1
  63. package/dist/database/helpers/fn/dialects/oracle.js +10 -11
  64. package/dist/database/helpers/fn/dialects/postgres.d.ts +1 -1
  65. package/dist/database/helpers/fn/dialects/postgres.js +10 -11
  66. package/dist/database/helpers/fn/dialects/sqlite.d.ts +1 -1
  67. package/dist/database/helpers/fn/dialects/sqlite.js +10 -11
  68. package/dist/database/helpers/fn/types.d.ts +5 -6
  69. package/dist/database/helpers/fn/types.js +4 -5
  70. package/dist/database/helpers/geometry/dialects/mssql.d.ts +3 -3
  71. package/dist/database/helpers/geometry/dialects/mysql.d.ts +1 -1
  72. package/dist/database/helpers/geometry/dialects/oracle.d.ts +3 -3
  73. package/dist/database/helpers/geometry/dialects/postgres.d.ts +3 -3
  74. package/dist/database/helpers/geometry/dialects/postgres.js +1 -2
  75. package/dist/database/helpers/geometry/dialects/redshift.d.ts +2 -2
  76. package/dist/database/helpers/geometry/dialects/sqlite.d.ts +1 -1
  77. package/dist/database/helpers/geometry/types.d.ts +2 -2
  78. package/dist/database/helpers/geometry/types.js +1 -2
  79. package/dist/database/helpers/index.d.ts +5 -5
  80. package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +1 -1
  81. package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
  82. package/dist/database/helpers/schema/dialects/mysql.d.ts +1 -1
  83. package/dist/database/helpers/schema/dialects/mysql.js +1 -2
  84. package/dist/database/helpers/schema/dialects/oracle.d.ts +2 -2
  85. package/dist/database/helpers/schema/dialects/oracle.js +4 -6
  86. package/dist/database/helpers/schema/types.d.ts +4 -4
  87. package/dist/database/helpers/types.d.ts +1 -1
  88. package/dist/database/helpers/types.js +1 -0
  89. package/dist/database/index.d.ts +1 -1
  90. package/dist/database/index.js +13 -13
  91. package/dist/database/migrations/20201028A-remove-collection-foreign-keys.d.ts +1 -1
  92. package/dist/database/migrations/20201029A-remove-system-relations.d.ts +1 -1
  93. package/dist/database/migrations/20201029B-remove-system-collections.d.ts +1 -1
  94. package/dist/database/migrations/20201029C-remove-system-fields.d.ts +1 -1
  95. package/dist/database/migrations/20201105A-add-cascade-system-relations.d.ts +1 -1
  96. package/dist/database/migrations/20201105B-change-webhook-url-type.d.ts +1 -1
  97. package/dist/database/migrations/20210225A-add-relations-sort-field.d.ts +1 -1
  98. package/dist/database/migrations/20210225A-add-relations-sort-field.js +1 -2
  99. package/dist/database/migrations/20210304A-remove-locked-fields.d.ts +1 -1
  100. package/dist/database/migrations/20210312A-webhooks-collections-text.d.ts +1 -1
  101. package/dist/database/migrations/20210331A-add-refresh-interval.d.ts +1 -1
  102. package/dist/database/migrations/20210415A-make-filesize-nullable.d.ts +1 -1
  103. package/dist/database/migrations/20210416A-add-collections-accountability.d.ts +1 -1
  104. package/dist/database/migrations/20210422A-remove-files-interface.d.ts +1 -1
  105. package/dist/database/migrations/20210506A-rename-interfaces.d.ts +1 -1
  106. package/dist/database/migrations/20210510A-restructure-relations.d.ts +1 -1
  107. package/dist/database/migrations/20210518A-add-foreign-key-constraints.d.ts +1 -1
  108. package/dist/database/migrations/20210518A-add-foreign-key-constraints.js +1 -1
  109. package/dist/database/migrations/20210519A-add-system-fk-triggers.d.ts +1 -1
  110. package/dist/database/migrations/20210519A-add-system-fk-triggers.js +2 -2
  111. package/dist/database/migrations/20210521A-add-collections-icon-color.d.ts +1 -1
  112. package/dist/database/migrations/20210525A-add-insights.d.ts +1 -1
  113. package/dist/database/migrations/20210608A-add-deep-clone-config.d.ts +1 -1
  114. package/dist/database/migrations/20210626A-change-filesize-bigint.d.ts +1 -1
  115. package/dist/database/migrations/20210716A-add-conditions-to-fields.d.ts +1 -1
  116. package/dist/database/migrations/20210721A-add-default-folder.d.ts +1 -1
  117. package/dist/database/migrations/20210802A-replace-groups.d.ts +1 -1
  118. package/dist/database/migrations/20210803A-add-required-to-fields.d.ts +1 -1
  119. package/dist/database/migrations/20210805A-update-groups.d.ts +1 -1
  120. package/dist/database/migrations/20210805B-change-image-metadata-structure.d.ts +1 -1
  121. package/dist/database/migrations/20210805B-change-image-metadata-structure.js +15 -15
  122. package/dist/database/migrations/20210811A-add-geometry-config.d.ts +1 -1
  123. package/dist/database/migrations/20210831A-remove-limit-column.d.ts +1 -1
  124. package/dist/database/migrations/20210903A-add-auth-provider.d.ts +1 -1
  125. package/dist/database/migrations/20210907A-webhooks-collections-not-null.d.ts +1 -1
  126. package/dist/database/migrations/20210910A-move-module-setup.d.ts +1 -1
  127. package/dist/database/migrations/20210920A-webhooks-url-not-null.d.ts +1 -1
  128. package/dist/database/migrations/20210924A-add-collection-organization.d.ts +1 -1
  129. package/dist/database/migrations/20210927A-replace-fields-group.d.ts +1 -1
  130. package/dist/database/migrations/20210927B-replace-m2m-interface.d.ts +1 -1
  131. package/dist/database/migrations/20210929A-rename-login-action.d.ts +1 -1
  132. package/dist/database/migrations/20211007A-update-presets.d.ts +1 -1
  133. package/dist/database/migrations/20211007A-update-presets.js +7 -9
  134. package/dist/database/migrations/20211009A-add-auth-data.d.ts +1 -1
  135. package/dist/database/migrations/20211016A-add-webhook-headers.d.ts +1 -1
  136. package/dist/database/migrations/20211103A-set-unique-to-user-token.d.ts +1 -1
  137. package/dist/database/migrations/20211103B-update-special-geometry.d.ts +1 -1
  138. package/dist/database/migrations/20211104A-remove-collections-listing.d.ts +1 -1
  139. package/dist/database/migrations/20211118A-add-notifications.d.ts +1 -1
  140. package/dist/database/migrations/20211211A-add-shares.d.ts +1 -1
  141. package/dist/database/migrations/20211230A-add-project-descriptor.d.ts +1 -1
  142. package/dist/database/migrations/20220303A-remove-default-project-color.d.ts +1 -1
  143. package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +1 -1
  144. package/dist/database/migrations/20220314A-add-translation-strings.d.ts +1 -1
  145. package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +1 -1
  146. package/dist/database/migrations/20220323A-add-field-validation.d.ts +1 -1
  147. package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +1 -1
  148. package/dist/database/migrations/20220325B-add-default-language.d.ts +1 -1
  149. package/dist/database/migrations/20220402A-remove-default-value-panel-icon.d.ts +1 -1
  150. package/dist/database/migrations/20220429A-add-flows.d.ts +1 -1
  151. package/dist/database/migrations/20220429B-add-color-to-insights-icon.d.ts +1 -1
  152. package/dist/database/migrations/20220429C-drop-non-null-from-ip-of-activity.d.ts +1 -1
  153. package/dist/database/migrations/20220429D-drop-non-null-from-sender-of-notifications.d.ts +1 -1
  154. package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.d.ts +1 -1
  155. package/dist/database/migrations/20220801A-update-notifications-timestamp-column.d.ts +1 -1
  156. package/dist/database/migrations/20220802A-add-custom-aspect-ratios.d.ts +1 -1
  157. package/dist/database/migrations/20220826A-add-origin-to-accountability.d.ts +1 -1
  158. package/dist/database/migrations/run.d.ts +1 -1
  159. package/dist/database/migrations/run.js +1 -1
  160. package/dist/database/run-ast.d.ts +3 -3
  161. package/dist/database/run-ast.js +21 -30
  162. package/dist/database/seeds/run.d.ts +1 -1
  163. package/dist/database/seeds/run.js +1 -2
  164. package/dist/database/system-data/app-access-permissions/index.d.ts +1 -1
  165. package/dist/database/system-data/collections/index.d.ts +1 -1
  166. package/dist/database/system-data/collections/index.js +2 -2
  167. package/dist/database/system-data/fields/collections.yaml +2 -0
  168. package/dist/database/system-data/fields/index.d.ts +1 -1
  169. package/dist/database/system-data/fields/index.js +3 -4
  170. package/dist/database/system-data/fields/settings.yaml +4 -0
  171. package/dist/database/system-data/relations/index.d.ts +1 -1
  172. package/dist/emitter.d.ts +1 -1
  173. package/dist/emitter.js +3 -0
  174. package/dist/env.js +11 -3
  175. package/dist/exceptions/database/dialects/mssql.d.ts +1 -1
  176. package/dist/exceptions/database/dialects/mssql.js +5 -6
  177. package/dist/exceptions/database/dialects/mysql.d.ts +1 -1
  178. package/dist/exceptions/database/dialects/mysql.js +19 -25
  179. package/dist/exceptions/database/dialects/oracle.d.ts +1 -1
  180. package/dist/exceptions/database/dialects/postgres.d.ts +1 -1
  181. package/dist/exceptions/database/dialects/sqlite.d.ts +1 -1
  182. package/dist/exceptions/database/translate.d.ts +1 -1
  183. package/dist/exceptions/database/value-out-of-range.js +1 -1
  184. package/dist/exceptions/range-not-satisfiable.js +2 -3
  185. package/dist/extensions.d.ts +1 -1
  186. package/dist/extensions.js +43 -33
  187. package/dist/flows.js +65 -46
  188. package/dist/logger.d.ts +2 -1
  189. package/dist/logger.js +35 -19
  190. package/dist/logger.test.d.ts +1 -0
  191. package/dist/mailer.js +16 -16
  192. package/dist/messenger.js +9 -7
  193. package/dist/middleware/authenticate.d.ts +1 -1
  194. package/dist/middleware/authenticate.js +13 -6
  195. package/dist/middleware/cache.d.ts +1 -1
  196. package/dist/middleware/cache.js +16 -16
  197. package/dist/middleware/check-ip.d.ts +1 -1
  198. package/dist/middleware/check-ip.js +1 -1
  199. package/dist/middleware/collection-exists.d.ts +1 -1
  200. package/dist/middleware/collection-exists.js +5 -5
  201. package/dist/middleware/cors.d.ts +1 -1
  202. package/dist/middleware/cors.js +7 -7
  203. package/dist/middleware/error-handler.d.ts +1 -1
  204. package/dist/middleware/error-handler.js +11 -12
  205. package/dist/middleware/extract-token.d.ts +1 -1
  206. package/dist/middleware/extract-token.js +2 -2
  207. package/dist/middleware/get-permissions.d.ts +1 -1
  208. package/dist/middleware/graphql.d.ts +1 -1
  209. package/dist/middleware/graphql.js +15 -9
  210. package/dist/middleware/rate-limiter-global.d.ts +5 -0
  211. package/dist/middleware/rate-limiter-global.js +48 -0
  212. package/dist/middleware/{rate-limiter.d.ts → rate-limiter-ip.d.ts} +2 -2
  213. package/dist/middleware/{rate-limiter.js → rate-limiter-ip.js} +5 -5
  214. package/dist/middleware/respond.d.ts +1 -1
  215. package/dist/middleware/respond.js +18 -19
  216. package/dist/middleware/sanitize-query.d.ts +1 -1
  217. package/dist/middleware/sanitize-query.js +1 -1
  218. package/dist/middleware/schema.d.ts +1 -1
  219. package/dist/middleware/use-collection.d.ts +1 -1
  220. package/dist/operations/condition/index.d.ts +1 -1
  221. package/dist/operations/exec/index.js +15 -4
  222. package/dist/operations/item-create/index.js +1 -2
  223. package/dist/operations/item-delete/index.d.ts +1 -1
  224. package/dist/operations/item-read/index.d.ts +1 -1
  225. package/dist/operations/item-update/index.d.ts +1 -1
  226. package/dist/operations/item-update/index.js +1 -2
  227. package/dist/operations/notification/index.js +1 -2
  228. package/dist/operations/request/index.js +19 -19
  229. package/dist/operations/trigger/index.js +2 -3
  230. package/dist/rate-limiter.d.ts +1 -1
  231. package/dist/rate-limiter.js +9 -9
  232. package/dist/request/validate-ip.js +2 -2
  233. package/dist/server.js +12 -13
  234. package/dist/services/activity.d.ts +1 -1
  235. package/dist/services/activity.js +17 -16
  236. package/dist/services/assets.d.ts +3 -3
  237. package/dist/services/assets.js +35 -37
  238. package/dist/services/authentication.d.ts +2 -2
  239. package/dist/services/authentication.js +22 -19
  240. package/dist/services/authorization.d.ts +3 -3
  241. package/dist/services/authorization.js +27 -31
  242. package/dist/services/collections.d.ts +5 -5
  243. package/dist/services/collections.js +54 -50
  244. package/dist/services/dashboards.d.ts +1 -1
  245. package/dist/services/fields.d.ts +5 -5
  246. package/dist/services/fields.js +50 -50
  247. package/dist/services/files.d.ts +1 -2
  248. package/dist/services/files.js +33 -27
  249. package/dist/services/flows.d.ts +2 -2
  250. package/dist/services/folders.d.ts +1 -1
  251. package/dist/services/graphql/index.d.ts +4 -4
  252. package/dist/services/graphql/index.js +259 -252
  253. package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -2
  254. package/dist/services/graphql/utils/process-error.d.ts +2 -2
  255. package/dist/services/graphql/utils/process-error.js +11 -4
  256. package/dist/services/import-export.d.ts +3 -3
  257. package/dist/services/import-export.js +30 -27
  258. package/dist/services/items.d.ts +3 -3
  259. package/dist/services/items.js +42 -36
  260. package/dist/services/mail/index.d.ts +4 -4
  261. package/dist/services/mail/index.js +14 -10
  262. package/dist/services/meta.d.ts +3 -3
  263. package/dist/services/meta.js +11 -9
  264. package/dist/services/notifications.d.ts +3 -3
  265. package/dist/services/notifications.js +10 -9
  266. package/dist/services/operations.d.ts +2 -2
  267. package/dist/services/panels.d.ts +1 -1
  268. package/dist/services/payload.d.ts +3 -3
  269. package/dist/services/payload.js +124 -122
  270. package/dist/services/permissions.d.ts +3 -3
  271. package/dist/services/permissions.js +11 -11
  272. package/dist/services/presets.d.ts +1 -1
  273. package/dist/services/relations.d.ts +6 -6
  274. package/dist/services/relations.js +45 -43
  275. package/dist/services/revisions.d.ts +1 -1
  276. package/dist/services/revisions.js +3 -3
  277. package/dist/services/roles.d.ts +2 -2
  278. package/dist/services/roles.js +7 -7
  279. package/dist/services/schema.d.ts +3 -3
  280. package/dist/services/schema.js +9 -11
  281. package/dist/services/server.d.ts +3 -3
  282. package/dist/services/server.js +88 -32
  283. package/dist/services/settings.d.ts +1 -1
  284. package/dist/services/shares.d.ts +1 -1
  285. package/dist/services/shares.js +14 -15
  286. package/dist/services/specifications.d.ts +4 -4
  287. package/dist/services/specifications.js +137 -119
  288. package/dist/services/tfa.d.ts +2 -2
  289. package/dist/services/tfa.js +7 -5
  290. package/dist/services/users.d.ts +2 -6
  291. package/dist/services/users.js +37 -40
  292. package/dist/services/utils.d.ts +3 -3
  293. package/dist/services/utils.js +10 -8
  294. package/dist/services/webhooks.d.ts +2 -2
  295. package/dist/services/webhooks.js +2 -1
  296. package/dist/storage/register-locations.js +1 -1
  297. package/dist/types/assets.d.ts +1 -1
  298. package/dist/types/ast.d.ts +1 -1
  299. package/dist/types/auth.d.ts +2 -2
  300. package/dist/types/collection.d.ts +2 -2
  301. package/dist/types/events.d.ts +2 -2
  302. package/dist/types/graphql.d.ts +2 -2
  303. package/dist/types/items.d.ts +3 -3
  304. package/dist/types/services.d.ts +5 -5
  305. package/dist/types/snapshot.d.ts +4 -4
  306. package/dist/utils/apply-diff.d.ts +3 -3
  307. package/dist/utils/apply-diff.js +25 -28
  308. package/dist/utils/apply-query.d.ts +3 -3
  309. package/dist/utils/apply-query.js +10 -12
  310. package/dist/utils/apply-snapshot.d.ts +3 -3
  311. package/dist/utils/apply-snapshot.js +5 -6
  312. package/dist/utils/construct-flow-tree.d.ts +1 -1
  313. package/dist/utils/construct-flow-tree.js +2 -2
  314. package/dist/utils/dynamic-import.js +1 -1
  315. package/dist/utils/filter-items.d.ts +1 -1
  316. package/dist/utils/generate-hash.js +1 -1
  317. package/dist/utils/get-accountability-for-role.d.ts +2 -2
  318. package/dist/utils/get-accountability-for-role.js +1 -1
  319. package/dist/utils/get-ast-from-query.d.ts +3 -3
  320. package/dist/utils/get-ast-from-query.js +22 -28
  321. package/dist/utils/get-auth-providers.js +1 -1
  322. package/dist/utils/get-cache-headers.d.ts +1 -1
  323. package/dist/utils/get-cache-headers.js +6 -7
  324. package/dist/utils/get-cache-key.d.ts +1 -1
  325. package/dist/utils/get-cache-key.js +2 -3
  326. package/dist/utils/get-collection-from-alias.d.ts +1 -1
  327. package/dist/utils/get-collection-from-alias.js +1 -0
  328. package/dist/utils/get-column-path.d.ts +2 -2
  329. package/dist/utils/get-column-path.js +3 -4
  330. package/dist/utils/get-column.d.ts +4 -4
  331. package/dist/utils/get-column.js +4 -5
  332. package/dist/utils/get-default-value.d.ts +2 -2
  333. package/dist/utils/get-default-value.js +2 -3
  334. package/dist/utils/get-graphql-query-and-variables.d.ts +1 -1
  335. package/dist/utils/get-graphql-query-and-variables.js +1 -2
  336. package/dist/utils/get-graphql-type.d.ts +2 -2
  337. package/dist/utils/get-graphql-type.js +1 -1
  338. package/dist/utils/get-ip-from-req.d.ts +1 -1
  339. package/dist/utils/get-ip-from-req.js +2 -2
  340. package/dist/utils/get-local-type.d.ts +1 -1
  341. package/dist/utils/get-local-type.js +3 -3
  342. package/dist/utils/get-milliseconds.js +1 -2
  343. package/dist/utils/get-permissions.d.ts +1 -1
  344. package/dist/utils/get-permissions.js +12 -12
  345. package/dist/utils/get-relation-info.d.ts +1 -1
  346. package/dist/utils/get-relation-info.js +3 -5
  347. package/dist/utils/get-relation-type.d.ts +1 -1
  348. package/dist/utils/get-relation-type.js +3 -4
  349. package/dist/utils/get-schema.d.ts +2 -2
  350. package/dist/utils/get-schema.js +20 -22
  351. package/dist/utils/get-snapshot-diff.js +2 -3
  352. package/dist/utils/get-snapshot.d.ts +3 -3
  353. package/dist/utils/get-snapshot.js +6 -8
  354. package/dist/utils/is-directus-jwt.js +1 -1
  355. package/dist/utils/is-url-allowed.js +5 -2
  356. package/dist/utils/job-queue.js +2 -0
  357. package/dist/utils/jwt.d.ts +1 -1
  358. package/dist/utils/merge-permissions-for-share.d.ts +1 -1
  359. package/dist/utils/merge-permissions-for-share.js +3 -4
  360. package/dist/utils/merge-permissions.d.ts +3 -3
  361. package/dist/utils/reduce-schema.d.ts +1 -1
  362. package/dist/utils/reduce-schema.js +12 -12
  363. package/dist/utils/sanitize-query.d.ts +1 -1
  364. package/dist/utils/sanitize-query.js +27 -27
  365. package/dist/utils/sanitize-schema.d.ts +2 -2
  366. package/dist/utils/should-skip-cache.d.ts +7 -0
  367. package/dist/utils/should-skip-cache.js +21 -0
  368. package/dist/utils/should-skip-cache.test.d.ts +1 -0
  369. package/dist/utils/track.js +16 -16
  370. package/dist/utils/transformations.d.ts +1 -1
  371. package/dist/utils/transformations.js +2 -4
  372. package/dist/utils/url.js +7 -2
  373. package/dist/utils/user-name.d.ts +1 -1
  374. package/dist/utils/validate-diff.js +7 -8
  375. package/dist/utils/validate-keys.d.ts +2 -2
  376. package/dist/utils/validate-keys.js +1 -1
  377. package/dist/utils/validate-query.d.ts +1 -1
  378. package/dist/utils/validate-query.js +3 -3
  379. package/dist/utils/validate-storage.js +8 -8
  380. package/dist/webhooks.js +3 -3
  381. package/package.json +36 -37
  382. package/dist/utils/with-timeout.d.ts +0 -1
  383. package/dist/utils/with-timeout.js +0 -16
@@ -12,11 +12,12 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
12
12
  const validate_batch_1 = require("../middleware/validate-batch");
13
13
  const services_1 = require("../services");
14
14
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
15
+ const sanitize_query_1 = require("../utils/sanitize-query");
15
16
  const router = express_1.default.Router();
16
17
  router.use((0, use_collection_1.default)('directus_flows'));
17
18
  const webhookFlowHandler = (0, async_handler_1.default)(async (req, res, next) => {
18
19
  const flowManager = (0, flows_1.getFlowManager)();
19
- const result = await flowManager.runWebhookFlow(`${req.method}-${req.params.pk}`, {
20
+ const result = await flowManager.runWebhookFlow(`${req.method}-${req.params['pk']}`, {
20
21
  path: req.path,
21
22
  query: req.query,
22
23
  body: req.body,
@@ -26,7 +27,7 @@ const webhookFlowHandler = (0, async_handler_1.default)(async (req, res, next) =
26
27
  accountability: req.accountability,
27
28
  schema: req.schema,
28
29
  });
29
- res.locals.payload = result;
30
+ res.locals['payload'] = result;
30
31
  return next();
31
32
  });
32
33
  router.get(`/trigger/:pk(${constants_1.UUID_REGEX})`, webhookFlowHandler, respond_1.respond);
@@ -48,11 +49,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
48
49
  try {
49
50
  if (Array.isArray(req.body)) {
50
51
  const items = await service.readMany(savedKeys, req.sanitizedQuery);
51
- res.locals.payload = { data: items };
52
+ res.locals['payload'] = { data: items };
52
53
  }
53
54
  else {
54
55
  const item = await service.readOne(savedKeys[0], req.sanitizedQuery);
55
- res.locals.payload = { data: item };
56
+ res.locals['payload'] = { data: item };
56
57
  }
57
58
  }
58
59
  catch (error) {
@@ -74,7 +75,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
74
75
  });
75
76
  const records = await service.readByQuery(req.sanitizedQuery);
76
77
  const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
77
- res.locals.payload = { data: records || null, meta };
78
+ res.locals['payload'] = { data: records || null, meta };
78
79
  return next();
79
80
  });
80
81
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -84,8 +85,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
84
85
  accountability: req.accountability,
85
86
  schema: req.schema,
86
87
  });
87
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
88
- res.locals.payload = { data: record || null };
88
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
89
+ res.locals['payload'] = { data: record || null };
89
90
  return next();
90
91
  }), respond_1.respond);
91
92
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -101,11 +102,12 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
101
102
  keys = await service.updateMany(req.body.keys, req.body.data);
102
103
  }
103
104
  else {
104
- keys = await service.updateByQuery(req.body.query, req.body.data);
105
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
106
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
105
107
  }
106
108
  try {
107
109
  const result = await service.readMany(keys, req.sanitizedQuery);
108
- res.locals.payload = { data: result };
110
+ res.locals['payload'] = { data: result };
109
111
  }
110
112
  catch (error) {
111
113
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -120,10 +122,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
120
122
  accountability: req.accountability,
121
123
  schema: req.schema,
122
124
  });
123
- const primaryKey = await service.updateOne(req.params.pk, req.body);
125
+ const primaryKey = await service.updateOne(req.params['pk'], req.body);
124
126
  try {
125
127
  const item = await service.readOne(primaryKey, req.sanitizedQuery);
126
- res.locals.payload = { data: item || null };
128
+ res.locals['payload'] = { data: item || null };
127
129
  }
128
130
  catch (error) {
129
131
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -145,7 +147,8 @@ router.delete('/', (0, async_handler_1.default)(async (req, res, next) => {
145
147
  await service.deleteMany(req.body.keys);
146
148
  }
147
149
  else {
148
- await service.deleteByQuery(req.body.query);
150
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
151
+ await service.deleteByQuery(sanitizedQuery);
149
152
  }
150
153
  return next();
151
154
  }), respond_1.respond);
@@ -154,7 +157,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
154
157
  accountability: req.accountability,
155
158
  schema: req.schema,
156
159
  });
157
- await service.deleteOne(req.params.pk);
160
+ await service.deleteOne(req.params['pk']);
158
161
  return next();
159
162
  }), respond_1.respond);
160
163
  exports.default = router;
@@ -10,6 +10,7 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
10
10
  const validate_batch_1 = require("../middleware/validate-batch");
11
11
  const services_1 = require("../services");
12
12
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
13
+ const sanitize_query_1 = require("../utils/sanitize-query");
13
14
  const router = express_1.default.Router();
14
15
  router.use((0, use_collection_1.default)('directus_folders'));
15
16
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -29,11 +30,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
29
30
  try {
30
31
  if (Array.isArray(req.body)) {
31
32
  const records = await service.readMany(savedKeys, req.sanitizedQuery);
32
- res.locals.payload = { data: records };
33
+ res.locals['payload'] = { data: records };
33
34
  }
34
35
  else {
35
36
  const record = await service.readOne(savedKeys[0], req.sanitizedQuery);
36
- res.locals.payload = { data: record };
37
+ res.locals['payload'] = { data: record };
37
38
  }
38
39
  }
39
40
  catch (error) {
@@ -64,7 +65,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
64
65
  result = await service.readByQuery(req.sanitizedQuery);
65
66
  }
66
67
  const meta = await metaService.getMetaForQuery('directus_folders', req.sanitizedQuery);
67
- res.locals.payload = { data: result, meta };
68
+ res.locals['payload'] = { data: result, meta };
68
69
  return next();
69
70
  });
70
71
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -74,8 +75,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
74
75
  accountability: req.accountability,
75
76
  schema: req.schema,
76
77
  });
77
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
78
- res.locals.payload = { data: record || null };
78
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
79
+ res.locals['payload'] = { data: record || null };
79
80
  return next();
80
81
  }), respond_1.respond);
81
82
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -91,11 +92,12 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
91
92
  keys = await service.updateMany(req.body.keys, req.body.data);
92
93
  }
93
94
  else {
94
- keys = await service.updateByQuery(req.body.query, req.body.data);
95
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
96
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
95
97
  }
96
98
  try {
97
99
  const result = await service.readMany(keys, req.sanitizedQuery);
98
- res.locals.payload = { data: result || null };
100
+ res.locals['payload'] = { data: result || null };
99
101
  }
100
102
  catch (error) {
101
103
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -110,10 +112,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
110
112
  accountability: req.accountability,
111
113
  schema: req.schema,
112
114
  });
113
- const primaryKey = await service.updateOne(req.params.pk, req.body);
115
+ const primaryKey = await service.updateOne(req.params['pk'], req.body);
114
116
  try {
115
117
  const record = await service.readOne(primaryKey, req.sanitizedQuery);
116
- res.locals.payload = { data: record || null };
118
+ res.locals['payload'] = { data: record || null };
117
119
  }
118
120
  catch (error) {
119
121
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -135,7 +137,8 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
135
137
  await service.deleteMany(req.body.keys);
136
138
  }
137
139
  else {
138
- await service.deleteByQuery(req.body.query);
140
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
141
+ await service.deleteByQuery(sanitizedQuery);
139
142
  }
140
143
  return next();
141
144
  }), respond_1.respond);
@@ -144,7 +147,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
144
147
  accountability: req.accountability,
145
148
  schema: req.schema,
146
149
  });
147
- await service.deleteOne(req.params.pk);
150
+ await service.deleteOne(req.params['pk']);
148
151
  return next();
149
152
  }), respond_1.respond);
150
153
  exports.default = router;
@@ -10,28 +10,26 @@ const services_1 = require("../services");
10
10
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
11
11
  const router = (0, express_1.Router)();
12
12
  router.use('/system', graphql_1.parseGraphQL, (0, async_handler_1.default)(async (req, res, next) => {
13
- var _a, _b;
14
13
  const service = new services_1.GraphQLService({
15
14
  accountability: req.accountability,
16
15
  schema: req.schema,
17
16
  scope: 'system',
18
17
  });
19
- res.locals.payload = await service.execute(res.locals.graphqlParams);
20
- if (((_b = (_a = res.locals.payload) === null || _a === void 0 ? void 0 : _a.errors) === null || _b === void 0 ? void 0 : _b.length) > 0) {
21
- res.locals.cache = false;
18
+ res.locals['payload'] = await service.execute(res.locals['graphqlParams']);
19
+ if (res.locals['payload']?.errors?.length > 0) {
20
+ res.locals['cache'] = false;
22
21
  }
23
22
  return next();
24
23
  }), respond_1.respond);
25
24
  router.use('/', graphql_1.parseGraphQL, (0, async_handler_1.default)(async (req, res, next) => {
26
- var _a, _b;
27
25
  const service = new services_1.GraphQLService({
28
26
  accountability: req.accountability,
29
27
  schema: req.schema,
30
28
  scope: 'items',
31
29
  });
32
- res.locals.payload = await service.execute(res.locals.graphqlParams);
33
- if (((_b = (_a = res.locals.payload) === null || _a === void 0 ? void 0 : _a.errors) === null || _b === void 0 ? void 0 : _b.length) > 0) {
34
- res.locals.cache = false;
30
+ res.locals['payload'] = await service.execute(res.locals['graphqlParams']);
31
+ if (res.locals['payload']?.errors?.length > 0) {
32
+ res.locals['cache'] = false;
35
33
  }
36
34
  return next();
37
35
  }), respond_1.respond);
@@ -10,9 +10,10 @@ const respond_1 = require("../middleware/respond");
10
10
  const validate_batch_1 = require("../middleware/validate-batch");
11
11
  const services_1 = require("../services");
12
12
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
13
+ const sanitize_query_1 = require("../utils/sanitize-query");
13
14
  const router = express_1.default.Router();
14
15
  router.post('/:collection', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
15
- if (req.params.collection.startsWith('directus_'))
16
+ if (req.params['collection'].startsWith('directus_'))
16
17
  throw new exceptions_1.ForbiddenException();
17
18
  if (req.singleton) {
18
19
  throw new exceptions_1.RouteNotFoundException(req.path);
@@ -33,11 +34,11 @@ router.post('/:collection', collection_exists_1.default, (0, async_handler_1.def
33
34
  try {
34
35
  if (Array.isArray(req.body)) {
35
36
  const result = await service.readMany(savedKeys, req.sanitizedQuery);
36
- res.locals.payload = { data: result || null };
37
+ res.locals['payload'] = { data: result || null };
37
38
  }
38
39
  else {
39
40
  const result = await service.readOne(savedKeys[0], req.sanitizedQuery);
40
- res.locals.payload = { data: result || null };
41
+ res.locals['payload'] = { data: result || null };
41
42
  }
42
43
  }
43
44
  catch (error) {
@@ -49,7 +50,7 @@ router.post('/:collection', collection_exists_1.default, (0, async_handler_1.def
49
50
  return next();
50
51
  }), respond_1.respond);
51
52
  const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
52
- if (req.params.collection.startsWith('directus_'))
53
+ if (req.params['collection'].startsWith('directus_'))
53
54
  throw new exceptions_1.ForbiddenException();
54
55
  const service = new services_1.ItemsService(req.collection, {
55
56
  accountability: req.accountability,
@@ -70,7 +71,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
70
71
  result = await service.readByQuery(req.sanitizedQuery);
71
72
  }
72
73
  const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
73
- res.locals.payload = {
74
+ res.locals['payload'] = {
74
75
  meta: meta,
75
76
  data: result,
76
77
  };
@@ -79,20 +80,20 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
79
80
  router.search('/:collection', collection_exists_1.default, (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
80
81
  router.get('/:collection', collection_exists_1.default, readHandler, respond_1.respond);
81
82
  router.get('/:collection/:pk', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
82
- if (req.params.collection.startsWith('directus_'))
83
+ if (req.params['collection'].startsWith('directus_'))
83
84
  throw new exceptions_1.ForbiddenException();
84
85
  const service = new services_1.ItemsService(req.collection, {
85
86
  accountability: req.accountability,
86
87
  schema: req.schema,
87
88
  });
88
- const result = await service.readOne(req.params.pk, req.sanitizedQuery);
89
- res.locals.payload = {
89
+ const result = await service.readOne(req.params['pk'], req.sanitizedQuery);
90
+ res.locals['payload'] = {
90
91
  data: result || null,
91
92
  };
92
93
  return next();
93
94
  }), respond_1.respond);
94
95
  router.patch('/:collection', collection_exists_1.default, (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
95
- if (req.params.collection.startsWith('directus_'))
96
+ if (req.params['collection'].startsWith('directus_'))
96
97
  throw new exceptions_1.ForbiddenException();
97
98
  const service = new services_1.ItemsService(req.collection, {
98
99
  accountability: req.accountability,
@@ -101,7 +102,7 @@ router.patch('/:collection', collection_exists_1.default, (0, validate_batch_1.v
101
102
  if (req.singleton === true) {
102
103
  await service.upsertSingleton(req.body);
103
104
  const item = await service.readSingleton(req.sanitizedQuery);
104
- res.locals.payload = { data: item || null };
105
+ res.locals['payload'] = { data: item || null };
105
106
  return next();
106
107
  }
107
108
  let keys = [];
@@ -112,11 +113,12 @@ router.patch('/:collection', collection_exists_1.default, (0, validate_batch_1.v
112
113
  keys = await service.updateMany(req.body.keys, req.body.data);
113
114
  }
114
115
  else {
115
- keys = await service.updateByQuery(req.body.query, req.body.data);
116
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
117
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
116
118
  }
117
119
  try {
118
120
  const result = await service.readMany(keys, req.sanitizedQuery);
119
- res.locals.payload = { data: result };
121
+ res.locals['payload'] = { data: result };
120
122
  }
121
123
  catch (error) {
122
124
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -127,7 +129,7 @@ router.patch('/:collection', collection_exists_1.default, (0, validate_batch_1.v
127
129
  return next();
128
130
  }), respond_1.respond);
129
131
  router.patch('/:collection/:pk', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
130
- if (req.params.collection.startsWith('directus_'))
132
+ if (req.params['collection'].startsWith('directus_'))
131
133
  throw new exceptions_1.ForbiddenException();
132
134
  if (req.singleton) {
133
135
  throw new exceptions_1.RouteNotFoundException(req.path);
@@ -136,10 +138,10 @@ router.patch('/:collection/:pk', collection_exists_1.default, (0, async_handler_
136
138
  accountability: req.accountability,
137
139
  schema: req.schema,
138
140
  });
139
- const updatedPrimaryKey = await service.updateOne(req.params.pk, req.body);
141
+ const updatedPrimaryKey = await service.updateOne(req.params['pk'], req.body);
140
142
  try {
141
143
  const result = await service.readOne(updatedPrimaryKey, req.sanitizedQuery);
142
- res.locals.payload = { data: result || null };
144
+ res.locals['payload'] = { data: result || null };
143
145
  }
144
146
  catch (error) {
145
147
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -150,7 +152,7 @@ router.patch('/:collection/:pk', collection_exists_1.default, (0, async_handler_
150
152
  return next();
151
153
  }), respond_1.respond);
152
154
  router.delete('/:collection', collection_exists_1.default, (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, res, next) => {
153
- if (req.params.collection.startsWith('directus_'))
155
+ if (req.params['collection'].startsWith('directus_'))
154
156
  throw new exceptions_1.ForbiddenException();
155
157
  const service = new services_1.ItemsService(req.collection, {
156
158
  accountability: req.accountability,
@@ -163,18 +165,19 @@ router.delete('/:collection', collection_exists_1.default, (0, validate_batch_1.
163
165
  await service.deleteMany(req.body.keys);
164
166
  }
165
167
  else {
166
- await service.deleteByQuery(req.body.query);
168
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
169
+ await service.deleteByQuery(sanitizedQuery);
167
170
  }
168
171
  return next();
169
172
  }), respond_1.respond);
170
173
  router.delete('/:collection/:pk', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
171
- if (req.params.collection.startsWith('directus_'))
174
+ if (req.params['collection'].startsWith('directus_'))
172
175
  throw new exceptions_1.ForbiddenException();
173
176
  const service = new services_1.ItemsService(req.collection, {
174
177
  accountability: req.accountability,
175
178
  schema: req.schema,
176
179
  });
177
- await service.deleteOne(req.params.pk);
180
+ await service.deleteOne(req.params['pk']);
178
181
  return next();
179
182
  }), respond_1.respond);
180
183
  exports.default = router;
@@ -1,4 +1,4 @@
1
- import { RequestHandler } from 'express';
1
+ import type { RequestHandler } from 'express';
2
2
  /**
3
3
  * Handles not found routes.
4
4
  *
@@ -18,12 +18,11 @@ const exceptions_1 = require("../exceptions");
18
18
  * @param next
19
19
  */
20
20
  const notFound = async (req, res, next) => {
21
- var _a;
22
21
  try {
23
22
  const hooksResult = await emitter_1.default.emitFilter('request.not_found', false, { request: req, response: res }, {
24
23
  database: (0, database_1.default)(),
25
24
  schema: req.schema,
26
- accountability: (_a = req.accountability) !== null && _a !== void 0 ? _a : null,
25
+ accountability: req.accountability ?? null,
27
26
  });
28
27
  if (hooksResult) {
29
28
  return next();
@@ -10,6 +10,7 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
10
10
  const validate_batch_1 = require("../middleware/validate-batch");
11
11
  const services_1 = require("../services");
12
12
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
13
+ const sanitize_query_1 = require("../utils/sanitize-query");
13
14
  const router = express_1.default.Router();
14
15
  router.use((0, use_collection_1.default)('directus_notifications'));
15
16
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -29,11 +30,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
29
30
  try {
30
31
  if (Array.isArray(req.body)) {
31
32
  const records = await service.readMany(savedKeys, req.sanitizedQuery);
32
- res.locals.payload = { data: records };
33
+ res.locals['payload'] = { data: records };
33
34
  }
34
35
  else {
35
36
  const record = await service.readOne(savedKeys[0], req.sanitizedQuery);
36
- res.locals.payload = { data: record };
37
+ res.locals['payload'] = { data: record };
37
38
  }
38
39
  }
39
40
  catch (error) {
@@ -64,7 +65,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
64
65
  result = await service.readByQuery(req.sanitizedQuery);
65
66
  }
66
67
  const meta = await metaService.getMetaForQuery('directus_notifications', req.sanitizedQuery);
67
- res.locals.payload = { data: result, meta };
68
+ res.locals['payload'] = { data: result, meta };
68
69
  return next();
69
70
  });
70
71
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -74,8 +75,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
74
75
  accountability: req.accountability,
75
76
  schema: req.schema,
76
77
  });
77
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
78
- res.locals.payload = { data: record || null };
78
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
79
+ res.locals['payload'] = { data: record || null };
79
80
  return next();
80
81
  }), respond_1.respond);
81
82
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -91,11 +92,12 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
91
92
  keys = await service.updateMany(req.body.keys, req.body.data);
92
93
  }
93
94
  else {
94
- keys = await service.updateByQuery(req.body.query, req.body.data);
95
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
96
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
95
97
  }
96
98
  try {
97
99
  const result = await service.readMany(keys, req.sanitizedQuery);
98
- res.locals.payload = { data: result };
100
+ res.locals['payload'] = { data: result };
99
101
  }
100
102
  catch (error) {
101
103
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -110,10 +112,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
110
112
  accountability: req.accountability,
111
113
  schema: req.schema,
112
114
  });
113
- const primaryKey = await service.updateOne(req.params.pk, req.body);
115
+ const primaryKey = await service.updateOne(req.params['pk'], req.body);
114
116
  try {
115
117
  const record = await service.readOne(primaryKey, req.sanitizedQuery);
116
- res.locals.payload = { data: record };
118
+ res.locals['payload'] = { data: record };
117
119
  }
118
120
  catch (error) {
119
121
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -135,7 +137,8 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
135
137
  await service.deleteMany(req.body.keys);
136
138
  }
137
139
  else {
138
- await service.deleteByQuery(req.body.query);
140
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
141
+ await service.deleteByQuery(sanitizedQuery);
139
142
  }
140
143
  return next();
141
144
  }), respond_1.respond);
@@ -144,7 +147,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
144
147
  accountability: req.accountability,
145
148
  schema: req.schema,
146
149
  });
147
- await service.deleteOne(req.params.pk);
150
+ await service.deleteOne(req.params['pk']);
148
151
  return next();
149
152
  }), respond_1.respond);
150
153
  exports.default = router;
@@ -10,6 +10,7 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
10
10
  const validate_batch_1 = require("../middleware/validate-batch");
11
11
  const services_1 = require("../services");
12
12
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
13
+ const sanitize_query_1 = require("../utils/sanitize-query");
13
14
  const router = express_1.default.Router();
14
15
  router.use((0, use_collection_1.default)('directus_operations'));
15
16
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -29,11 +30,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
29
30
  try {
30
31
  if (Array.isArray(req.body)) {
31
32
  const items = await service.readMany(savedKeys, req.sanitizedQuery);
32
- res.locals.payload = { data: items };
33
+ res.locals['payload'] = { data: items };
33
34
  }
34
35
  else {
35
36
  const item = await service.readOne(savedKeys[0], req.sanitizedQuery);
36
- res.locals.payload = { data: item };
37
+ res.locals['payload'] = { data: item };
37
38
  }
38
39
  }
39
40
  catch (error) {
@@ -55,7 +56,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
55
56
  });
56
57
  const records = await service.readByQuery(req.sanitizedQuery);
57
58
  const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
58
- res.locals.payload = { data: records || null, meta };
59
+ res.locals['payload'] = { data: records || null, meta };
59
60
  return next();
60
61
  });
61
62
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -65,8 +66,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
65
66
  accountability: req.accountability,
66
67
  schema: req.schema,
67
68
  });
68
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
69
- res.locals.payload = { data: record || null };
69
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
70
+ res.locals['payload'] = { data: record || null };
70
71
  return next();
71
72
  }), respond_1.respond);
72
73
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -82,11 +83,12 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
82
83
  keys = await service.updateMany(req.body.keys, req.body.data);
83
84
  }
84
85
  else {
85
- keys = await service.updateByQuery(req.body.query, req.body.data);
86
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
87
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
86
88
  }
87
89
  try {
88
90
  const result = await service.readMany(keys, req.sanitizedQuery);
89
- res.locals.payload = { data: result };
91
+ res.locals['payload'] = { data: result };
90
92
  }
91
93
  catch (error) {
92
94
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -101,10 +103,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
101
103
  accountability: req.accountability,
102
104
  schema: req.schema,
103
105
  });
104
- const primaryKey = await service.updateOne(req.params.pk, req.body);
106
+ const primaryKey = await service.updateOne(req.params['pk'], req.body);
105
107
  try {
106
108
  const item = await service.readOne(primaryKey, req.sanitizedQuery);
107
- res.locals.payload = { data: item || null };
109
+ res.locals['payload'] = { data: item || null };
108
110
  }
109
111
  catch (error) {
110
112
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -126,7 +128,8 @@ router.delete('/', (0, async_handler_1.default)(async (req, res, next) => {
126
128
  await service.deleteMany(req.body.keys);
127
129
  }
128
130
  else {
129
- await service.deleteByQuery(req.body.query);
131
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
132
+ await service.deleteByQuery(sanitizedQuery);
130
133
  }
131
134
  return next();
132
135
  }), respond_1.respond);
@@ -135,7 +138,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
135
138
  accountability: req.accountability,
136
139
  schema: req.schema,
137
140
  });
138
- await service.deleteOne(req.params.pk);
141
+ await service.deleteOne(req.params['pk']);
139
142
  return next();
140
143
  }), respond_1.respond);
141
144
  exports.default = router;
@@ -10,6 +10,7 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
10
10
  const validate_batch_1 = require("../middleware/validate-batch");
11
11
  const services_1 = require("../services");
12
12
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
13
+ const sanitize_query_1 = require("../utils/sanitize-query");
13
14
  const router = express_1.default.Router();
14
15
  router.use((0, use_collection_1.default)('directus_panels'));
15
16
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -29,11 +30,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
29
30
  try {
30
31
  if (Array.isArray(req.body)) {
31
32
  const items = await service.readMany(savedKeys, req.sanitizedQuery);
32
- res.locals.payload = { data: items };
33
+ res.locals['payload'] = { data: items };
33
34
  }
34
35
  else {
35
36
  const item = await service.readOne(savedKeys[0], req.sanitizedQuery);
36
- res.locals.payload = { data: item };
37
+ res.locals['payload'] = { data: item };
37
38
  }
38
39
  }
39
40
  catch (error) {
@@ -55,7 +56,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
55
56
  });
56
57
  const records = await service.readByQuery(req.sanitizedQuery);
57
58
  const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
58
- res.locals.payload = { data: records || null, meta };
59
+ res.locals['payload'] = { data: records || null, meta };
59
60
  return next();
60
61
  });
61
62
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -65,8 +66,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
65
66
  accountability: req.accountability,
66
67
  schema: req.schema,
67
68
  });
68
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
69
- res.locals.payload = { data: record || null };
69
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
70
+ res.locals['payload'] = { data: record || null };
70
71
  return next();
71
72
  }), respond_1.respond);
72
73
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -82,11 +83,12 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
82
83
  keys = await service.updateMany(req.body.keys, req.body.data);
83
84
  }
84
85
  else {
85
- keys = await service.updateByQuery(req.body.query, req.body.data);
86
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
87
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
86
88
  }
87
89
  try {
88
90
  const result = await service.readMany(keys, req.sanitizedQuery);
89
- res.locals.payload = { data: result };
91
+ res.locals['payload'] = { data: result };
90
92
  }
91
93
  catch (error) {
92
94
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -101,10 +103,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
101
103
  accountability: req.accountability,
102
104
  schema: req.schema,
103
105
  });
104
- const primaryKey = await service.updateOne(req.params.pk, req.body);
106
+ const primaryKey = await service.updateOne(req.params['pk'], req.body);
105
107
  try {
106
108
  const item = await service.readOne(primaryKey, req.sanitizedQuery);
107
- res.locals.payload = { data: item || null };
109
+ res.locals['payload'] = { data: item || null };
108
110
  }
109
111
  catch (error) {
110
112
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -126,7 +128,8 @@ router.delete('/', (0, async_handler_1.default)(async (req, res, next) => {
126
128
  await service.deleteMany(req.body.keys);
127
129
  }
128
130
  else {
129
- await service.deleteByQuery(req.body.query);
131
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
132
+ await service.deleteByQuery(sanitizedQuery);
130
133
  }
131
134
  return next();
132
135
  }), respond_1.respond);
@@ -135,7 +138,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
135
138
  accountability: req.accountability,
136
139
  schema: req.schema,
137
140
  });
138
- await service.deleteOne(req.params.pk);
141
+ await service.deleteOne(req.params['pk']);
139
142
  return next();
140
143
  }), respond_1.respond);
141
144
  exports.default = router;