directus 9.23.1 → 9.23.3

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 (359) hide show
  1. package/dist/app.js +14 -10
  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 +39 -28
  6. package/dist/auth/drivers/local.d.ts +1 -1
  7. package/dist/auth/drivers/local.js +13 -10
  8. package/dist/auth/drivers/oauth2.d.ts +1 -1
  9. package/dist/auth/drivers/oauth2.js +20 -13
  10. package/dist/auth/drivers/openid.d.ts +1 -1
  11. package/dist/auth/drivers/openid.js +21 -14
  12. package/dist/auth/drivers/saml.d.ts +1 -1
  13. package/dist/auth/drivers/saml.js +10 -7
  14. package/dist/auth.d.ts +1 -1
  15. package/dist/auth.js +4 -4
  16. package/dist/cache.d.ts +9 -1
  17. package/dist/cache.js +57 -14
  18. package/dist/cli/commands/bootstrap/index.js +2 -2
  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 +2 -1
  24. package/dist/cli/utils/create-env/index.d.ts +2 -2
  25. package/dist/cli/utils/drivers.d.ts +1 -1
  26. package/dist/constants.d.ts +2 -2
  27. package/dist/constants.js +2 -3
  28. package/dist/controllers/activity.js +1 -2
  29. package/dist/controllers/assets.js +14 -9
  30. package/dist/controllers/auth.js +29 -15
  31. package/dist/controllers/dashboards.js +5 -2
  32. package/dist/controllers/fields.js +4 -4
  33. package/dist/controllers/files.js +10 -5
  34. package/dist/controllers/flows.js +5 -2
  35. package/dist/controllers/folders.js +5 -2
  36. package/dist/controllers/graphql.js +2 -4
  37. package/dist/controllers/items.js +5 -2
  38. package/dist/controllers/not-found.d.ts +1 -1
  39. package/dist/controllers/not-found.js +1 -2
  40. package/dist/controllers/notifications.js +5 -2
  41. package/dist/controllers/operations.js +5 -2
  42. package/dist/controllers/panels.js +5 -2
  43. package/dist/controllers/permissions.js +5 -2
  44. package/dist/controllers/presets.js +5 -2
  45. package/dist/controllers/roles.js +5 -2
  46. package/dist/controllers/shares.js +8 -5
  47. package/dist/controllers/users.js +16 -20
  48. package/dist/controllers/utils.js +6 -11
  49. package/dist/controllers/webhooks.js +5 -2
  50. package/dist/database/helpers/fn/dialects/mssql.d.ts +1 -1
  51. package/dist/database/helpers/fn/dialects/mssql.js +10 -11
  52. package/dist/database/helpers/fn/dialects/mysql.d.ts +1 -1
  53. package/dist/database/helpers/fn/dialects/mysql.js +2 -3
  54. package/dist/database/helpers/fn/dialects/oracle.d.ts +1 -1
  55. package/dist/database/helpers/fn/dialects/oracle.js +10 -11
  56. package/dist/database/helpers/fn/dialects/postgres.d.ts +1 -1
  57. package/dist/database/helpers/fn/dialects/postgres.js +10 -11
  58. package/dist/database/helpers/fn/dialects/sqlite.d.ts +1 -1
  59. package/dist/database/helpers/fn/dialects/sqlite.js +10 -11
  60. package/dist/database/helpers/fn/types.d.ts +5 -5
  61. package/dist/database/helpers/fn/types.js +5 -4
  62. package/dist/database/helpers/geometry/dialects/mssql.d.ts +3 -3
  63. package/dist/database/helpers/geometry/dialects/mysql.d.ts +1 -1
  64. package/dist/database/helpers/geometry/dialects/oracle.d.ts +3 -3
  65. package/dist/database/helpers/geometry/dialects/postgres.d.ts +3 -3
  66. package/dist/database/helpers/geometry/dialects/postgres.js +1 -2
  67. package/dist/database/helpers/geometry/dialects/redshift.d.ts +2 -2
  68. package/dist/database/helpers/geometry/dialects/sqlite.d.ts +1 -1
  69. package/dist/database/helpers/geometry/types.d.ts +2 -2
  70. package/dist/database/helpers/geometry/types.js +1 -2
  71. package/dist/database/helpers/index.d.ts +5 -5
  72. package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +1 -1
  73. package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
  74. package/dist/database/helpers/schema/dialects/mysql.d.ts +1 -1
  75. package/dist/database/helpers/schema/dialects/mysql.js +1 -2
  76. package/dist/database/helpers/schema/dialects/oracle.d.ts +2 -2
  77. package/dist/database/helpers/schema/dialects/oracle.js +4 -6
  78. package/dist/database/helpers/schema/types.d.ts +4 -4
  79. package/dist/database/helpers/types.d.ts +1 -1
  80. package/dist/database/helpers/types.js +1 -0
  81. package/dist/database/index.d.ts +1 -1
  82. package/dist/database/index.js +8 -8
  83. package/dist/database/migrations/20201028A-remove-collection-foreign-keys.d.ts +1 -1
  84. package/dist/database/migrations/20201029A-remove-system-relations.d.ts +1 -1
  85. package/dist/database/migrations/20201029B-remove-system-collections.d.ts +1 -1
  86. package/dist/database/migrations/20201029C-remove-system-fields.d.ts +1 -1
  87. package/dist/database/migrations/20201105A-add-cascade-system-relations.d.ts +1 -1
  88. package/dist/database/migrations/20201105B-change-webhook-url-type.d.ts +1 -1
  89. package/dist/database/migrations/20210225A-add-relations-sort-field.d.ts +1 -1
  90. package/dist/database/migrations/20210225A-add-relations-sort-field.js +1 -2
  91. package/dist/database/migrations/20210304A-remove-locked-fields.d.ts +1 -1
  92. package/dist/database/migrations/20210312A-webhooks-collections-text.d.ts +1 -1
  93. package/dist/database/migrations/20210331A-add-refresh-interval.d.ts +1 -1
  94. package/dist/database/migrations/20210415A-make-filesize-nullable.d.ts +1 -1
  95. package/dist/database/migrations/20210416A-add-collections-accountability.d.ts +1 -1
  96. package/dist/database/migrations/20210422A-remove-files-interface.d.ts +1 -1
  97. package/dist/database/migrations/20210506A-rename-interfaces.d.ts +1 -1
  98. package/dist/database/migrations/20210510A-restructure-relations.d.ts +1 -1
  99. package/dist/database/migrations/20210518A-add-foreign-key-constraints.d.ts +1 -1
  100. package/dist/database/migrations/20210518A-add-foreign-key-constraints.js +1 -1
  101. package/dist/database/migrations/20210519A-add-system-fk-triggers.d.ts +1 -1
  102. package/dist/database/migrations/20210519A-add-system-fk-triggers.js +2 -2
  103. package/dist/database/migrations/20210521A-add-collections-icon-color.d.ts +1 -1
  104. package/dist/database/migrations/20210525A-add-insights.d.ts +1 -1
  105. package/dist/database/migrations/20210608A-add-deep-clone-config.d.ts +1 -1
  106. package/dist/database/migrations/20210626A-change-filesize-bigint.d.ts +1 -1
  107. package/dist/database/migrations/20210716A-add-conditions-to-fields.d.ts +1 -1
  108. package/dist/database/migrations/20210721A-add-default-folder.d.ts +1 -1
  109. package/dist/database/migrations/20210802A-replace-groups.d.ts +1 -1
  110. package/dist/database/migrations/20210803A-add-required-to-fields.d.ts +1 -1
  111. package/dist/database/migrations/20210805A-update-groups.d.ts +1 -1
  112. package/dist/database/migrations/20210805B-change-image-metadata-structure.d.ts +1 -1
  113. package/dist/database/migrations/20210811A-add-geometry-config.d.ts +1 -1
  114. package/dist/database/migrations/20210831A-remove-limit-column.d.ts +1 -1
  115. package/dist/database/migrations/20210903A-add-auth-provider.d.ts +1 -1
  116. package/dist/database/migrations/20210907A-webhooks-collections-not-null.d.ts +1 -1
  117. package/dist/database/migrations/20210910A-move-module-setup.d.ts +1 -1
  118. package/dist/database/migrations/20210920A-webhooks-url-not-null.d.ts +1 -1
  119. package/dist/database/migrations/20210924A-add-collection-organization.d.ts +1 -1
  120. package/dist/database/migrations/20210927A-replace-fields-group.d.ts +1 -1
  121. package/dist/database/migrations/20210927B-replace-m2m-interface.d.ts +1 -1
  122. package/dist/database/migrations/20210929A-rename-login-action.d.ts +1 -1
  123. package/dist/database/migrations/20211007A-update-presets.d.ts +1 -1
  124. package/dist/database/migrations/20211007A-update-presets.js +7 -9
  125. package/dist/database/migrations/20211009A-add-auth-data.d.ts +1 -1
  126. package/dist/database/migrations/20211016A-add-webhook-headers.d.ts +1 -1
  127. package/dist/database/migrations/20211103A-set-unique-to-user-token.d.ts +1 -1
  128. package/dist/database/migrations/20211103B-update-special-geometry.d.ts +1 -1
  129. package/dist/database/migrations/20211104A-remove-collections-listing.d.ts +1 -1
  130. package/dist/database/migrations/20211118A-add-notifications.d.ts +1 -1
  131. package/dist/database/migrations/20211211A-add-shares.d.ts +1 -1
  132. package/dist/database/migrations/20211230A-add-project-descriptor.d.ts +1 -1
  133. package/dist/database/migrations/20220303A-remove-default-project-color.d.ts +1 -1
  134. package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +1 -1
  135. package/dist/database/migrations/20220314A-add-translation-strings.d.ts +1 -1
  136. package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +1 -1
  137. package/dist/database/migrations/20220323A-add-field-validation.d.ts +1 -1
  138. package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +1 -1
  139. package/dist/database/migrations/20220325B-add-default-language.d.ts +1 -1
  140. package/dist/database/migrations/20220402A-remove-default-value-panel-icon.d.ts +1 -1
  141. package/dist/database/migrations/20220429A-add-flows.d.ts +1 -1
  142. package/dist/database/migrations/20220429B-add-color-to-insights-icon.d.ts +1 -1
  143. package/dist/database/migrations/20220429C-drop-non-null-from-ip-of-activity.d.ts +1 -1
  144. package/dist/database/migrations/20220429D-drop-non-null-from-sender-of-notifications.d.ts +1 -1
  145. package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.d.ts +1 -1
  146. package/dist/database/migrations/20220801A-update-notifications-timestamp-column.d.ts +1 -1
  147. package/dist/database/migrations/20220802A-add-custom-aspect-ratios.d.ts +1 -1
  148. package/dist/database/migrations/20220826A-add-origin-to-accountability.d.ts +1 -1
  149. package/dist/database/migrations/run.d.ts +1 -1
  150. package/dist/database/run-ast.d.ts +3 -3
  151. package/dist/database/run-ast.js +17 -26
  152. package/dist/database/seeds/run.d.ts +1 -1
  153. package/dist/database/seeds/run.js +1 -2
  154. package/dist/database/system-data/app-access-permissions/index.d.ts +1 -1
  155. package/dist/database/system-data/collections/index.d.ts +1 -1
  156. package/dist/database/system-data/fields/collections.yaml +2 -0
  157. package/dist/database/system-data/fields/index.d.ts +1 -1
  158. package/dist/database/system-data/fields/index.js +1 -2
  159. package/dist/database/system-data/fields/settings.yaml +4 -0
  160. package/dist/database/system-data/relations/index.d.ts +1 -1
  161. package/dist/emitter.d.ts +1 -1
  162. package/dist/emitter.js +3 -0
  163. package/dist/env.js +10 -2
  164. package/dist/exceptions/database/dialects/mssql.d.ts +1 -1
  165. package/dist/exceptions/database/dialects/mssql.js +5 -6
  166. package/dist/exceptions/database/dialects/mysql.d.ts +1 -1
  167. package/dist/exceptions/database/dialects/mysql.js +19 -25
  168. package/dist/exceptions/database/dialects/oracle.d.ts +1 -1
  169. package/dist/exceptions/database/dialects/postgres.d.ts +1 -1
  170. package/dist/exceptions/database/dialects/sqlite.d.ts +1 -1
  171. package/dist/exceptions/database/translate.d.ts +1 -1
  172. package/dist/exceptions/database/value-out-of-range.js +1 -1
  173. package/dist/exceptions/range-not-satisfiable.js +2 -3
  174. package/dist/extensions.d.ts +1 -1
  175. package/dist/extensions.js +33 -23
  176. package/dist/flows.js +42 -25
  177. package/dist/logger.d.ts +1 -1
  178. package/dist/logger.js +19 -3
  179. package/dist/messenger.js +8 -6
  180. package/dist/middleware/authenticate.d.ts +1 -1
  181. package/dist/middleware/authenticate.js +12 -5
  182. package/dist/middleware/cache.d.ts +1 -1
  183. package/dist/middleware/cache.js +5 -5
  184. package/dist/middleware/check-ip.d.ts +1 -1
  185. package/dist/middleware/check-ip.js +1 -1
  186. package/dist/middleware/collection-exists.d.ts +1 -1
  187. package/dist/middleware/collection-exists.js +2 -2
  188. package/dist/middleware/cors.d.ts +1 -1
  189. package/dist/middleware/error-handler.d.ts +1 -1
  190. package/dist/middleware/error-handler.js +9 -10
  191. package/dist/middleware/extract-token.d.ts +1 -1
  192. package/dist/middleware/get-permissions.d.ts +1 -1
  193. package/dist/middleware/graphql.d.ts +1 -1
  194. package/dist/middleware/graphql.js +3 -3
  195. package/dist/middleware/rate-limiter-global.d.ts +5 -0
  196. package/dist/middleware/rate-limiter-global.js +48 -0
  197. package/dist/middleware/{rate-limiter.d.ts → rate-limiter-ip.d.ts} +2 -2
  198. package/dist/middleware/{rate-limiter.js → rate-limiter-ip.js} +3 -3
  199. package/dist/middleware/respond.d.ts +1 -1
  200. package/dist/middleware/respond.js +6 -7
  201. package/dist/middleware/sanitize-query.d.ts +1 -1
  202. package/dist/middleware/schema.d.ts +1 -1
  203. package/dist/middleware/use-collection.d.ts +1 -1
  204. package/dist/operations/condition/index.d.ts +1 -1
  205. package/dist/operations/exec/index.js +14 -3
  206. package/dist/operations/item-create/index.js +1 -2
  207. package/dist/operations/item-delete/index.d.ts +1 -1
  208. package/dist/operations/item-read/index.d.ts +1 -1
  209. package/dist/operations/item-update/index.d.ts +1 -1
  210. package/dist/operations/item-update/index.js +1 -2
  211. package/dist/operations/notification/index.js +1 -2
  212. package/dist/operations/request/index.js +19 -19
  213. package/dist/operations/trigger/index.js +2 -3
  214. package/dist/rate-limiter.d.ts +1 -1
  215. package/dist/rate-limiter.js +8 -8
  216. package/dist/server.js +8 -9
  217. package/dist/services/activity.d.ts +1 -1
  218. package/dist/services/activity.js +7 -6
  219. package/dist/services/assets.d.ts +3 -3
  220. package/dist/services/assets.js +33 -35
  221. package/dist/services/authentication.d.ts +2 -2
  222. package/dist/services/authentication.js +13 -10
  223. package/dist/services/authorization.d.ts +3 -3
  224. package/dist/services/authorization.js +27 -31
  225. package/dist/services/collections.d.ts +5 -5
  226. package/dist/services/collections.js +52 -48
  227. package/dist/services/dashboards.d.ts +1 -1
  228. package/dist/services/fields.d.ts +5 -5
  229. package/dist/services/fields.js +48 -48
  230. package/dist/services/files.d.ts +1 -2
  231. package/dist/services/files.js +27 -21
  232. package/dist/services/flows.d.ts +2 -2
  233. package/dist/services/folders.d.ts +1 -1
  234. package/dist/services/graphql/index.d.ts +4 -4
  235. package/dist/services/graphql/index.js +172 -167
  236. package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -2
  237. package/dist/services/graphql/utils/process-error.d.ts +2 -2
  238. package/dist/services/graphql/utils/process-error.js +11 -4
  239. package/dist/services/import-export.d.ts +3 -3
  240. package/dist/services/import-export.js +25 -22
  241. package/dist/services/items.d.ts +3 -3
  242. package/dist/services/items.js +42 -36
  243. package/dist/services/mail/index.d.ts +4 -4
  244. package/dist/services/mail/index.js +9 -5
  245. package/dist/services/meta.d.ts +3 -3
  246. package/dist/services/meta.js +10 -9
  247. package/dist/services/notifications.d.ts +3 -3
  248. package/dist/services/notifications.js +7 -6
  249. package/dist/services/operations.d.ts +2 -2
  250. package/dist/services/panels.d.ts +1 -1
  251. package/dist/services/payload.d.ts +3 -3
  252. package/dist/services/payload.js +124 -122
  253. package/dist/services/permissions.d.ts +3 -3
  254. package/dist/services/permissions.js +11 -11
  255. package/dist/services/presets.d.ts +1 -1
  256. package/dist/services/relations.d.ts +6 -6
  257. package/dist/services/relations.js +45 -43
  258. package/dist/services/revisions.d.ts +1 -1
  259. package/dist/services/roles.d.ts +2 -2
  260. package/dist/services/roles.js +2 -2
  261. package/dist/services/schema.d.ts +3 -3
  262. package/dist/services/schema.js +9 -11
  263. package/dist/services/server.d.ts +3 -3
  264. package/dist/services/server.js +69 -13
  265. package/dist/services/settings.d.ts +1 -1
  266. package/dist/services/shares.d.ts +1 -1
  267. package/dist/services/shares.js +5 -6
  268. package/dist/services/specifications.d.ts +4 -4
  269. package/dist/services/specifications.js +132 -116
  270. package/dist/services/tfa.d.ts +2 -2
  271. package/dist/services/tfa.js +7 -5
  272. package/dist/services/users.d.ts +3 -3
  273. package/dist/services/users.js +17 -17
  274. package/dist/services/utils.d.ts +3 -3
  275. package/dist/services/utils.js +10 -8
  276. package/dist/services/webhooks.d.ts +2 -2
  277. package/dist/services/webhooks.js +2 -1
  278. package/dist/types/assets.d.ts +1 -1
  279. package/dist/types/ast.d.ts +1 -1
  280. package/dist/types/auth.d.ts +2 -2
  281. package/dist/types/collection.d.ts +2 -2
  282. package/dist/types/events.d.ts +2 -2
  283. package/dist/types/graphql.d.ts +2 -2
  284. package/dist/types/items.d.ts +3 -3
  285. package/dist/types/services.d.ts +5 -5
  286. package/dist/types/snapshot.d.ts +4 -4
  287. package/dist/utils/apply-diff.d.ts +3 -3
  288. package/dist/utils/apply-diff.js +25 -28
  289. package/dist/utils/apply-query.d.ts +3 -3
  290. package/dist/utils/apply-query.js +8 -11
  291. package/dist/utils/apply-snapshot.d.ts +3 -3
  292. package/dist/utils/apply-snapshot.js +5 -6
  293. package/dist/utils/construct-flow-tree.d.ts +1 -1
  294. package/dist/utils/construct-flow-tree.js +2 -2
  295. package/dist/utils/filter-items.d.ts +1 -1
  296. package/dist/utils/get-accountability-for-role.d.ts +2 -2
  297. package/dist/utils/get-accountability-for-role.js +1 -1
  298. package/dist/utils/get-ast-from-query.d.ts +3 -3
  299. package/dist/utils/get-ast-from-query.js +22 -28
  300. package/dist/utils/get-cache-headers.d.ts +1 -1
  301. package/dist/utils/get-cache-headers.js +3 -4
  302. package/dist/utils/get-cache-key.d.ts +1 -1
  303. package/dist/utils/get-cache-key.js +2 -3
  304. package/dist/utils/get-collection-from-alias.d.ts +1 -1
  305. package/dist/utils/get-column-path.d.ts +2 -2
  306. package/dist/utils/get-column-path.js +3 -4
  307. package/dist/utils/get-column.d.ts +4 -4
  308. package/dist/utils/get-column.js +4 -5
  309. package/dist/utils/get-default-value.d.ts +2 -2
  310. package/dist/utils/get-default-value.js +1 -2
  311. package/dist/utils/get-graphql-query-and-variables.d.ts +1 -1
  312. package/dist/utils/get-graphql-query-and-variables.js +1 -2
  313. package/dist/utils/get-graphql-type.d.ts +2 -2
  314. package/dist/utils/get-graphql-type.js +1 -1
  315. package/dist/utils/get-ip-from-req.d.ts +1 -1
  316. package/dist/utils/get-local-type.d.ts +1 -1
  317. package/dist/utils/get-local-type.js +3 -3
  318. package/dist/utils/get-milliseconds.js +1 -2
  319. package/dist/utils/get-permissions.d.ts +1 -1
  320. package/dist/utils/get-permissions.js +1 -1
  321. package/dist/utils/get-relation-info.d.ts +1 -1
  322. package/dist/utils/get-relation-info.js +3 -5
  323. package/dist/utils/get-relation-type.d.ts +1 -1
  324. package/dist/utils/get-relation-type.js +3 -4
  325. package/dist/utils/get-schema.d.ts +2 -2
  326. package/dist/utils/get-schema.js +19 -21
  327. package/dist/utils/get-snapshot-diff.js +2 -3
  328. package/dist/utils/get-snapshot.d.ts +3 -3
  329. package/dist/utils/get-snapshot.js +6 -8
  330. package/dist/utils/is-directus-jwt.js +1 -1
  331. package/dist/utils/job-queue.js +2 -0
  332. package/dist/utils/jwt.d.ts +1 -1
  333. package/dist/utils/merge-permissions-for-share.d.ts +1 -1
  334. package/dist/utils/merge-permissions-for-share.js +3 -4
  335. package/dist/utils/merge-permissions.d.ts +3 -3
  336. package/dist/utils/redact-header-cookies.d.ts +1 -0
  337. package/dist/utils/redact-header-cookies.js +11 -0
  338. package/dist/utils/redact-header-cookies.test.d.ts +1 -0
  339. package/dist/utils/reduce-schema.d.ts +1 -1
  340. package/dist/utils/reduce-schema.js +12 -12
  341. package/dist/utils/sanitize-query.d.ts +1 -1
  342. package/dist/utils/sanitize-query.js +1 -1
  343. package/dist/utils/sanitize-schema.d.ts +2 -2
  344. package/dist/utils/should-skip-cache.d.ts +7 -0
  345. package/dist/utils/should-skip-cache.js +21 -0
  346. package/dist/utils/should-skip-cache.test.d.ts +1 -0
  347. package/dist/utils/transformations.d.ts +1 -1
  348. package/dist/utils/transformations.js +2 -4
  349. package/dist/utils/url.js +7 -2
  350. package/dist/utils/user-name.d.ts +1 -1
  351. package/dist/utils/validate-diff.js +7 -8
  352. package/dist/utils/validate-keys.d.ts +2 -2
  353. package/dist/utils/validate-keys.js +1 -1
  354. package/dist/utils/validate-query.d.ts +1 -1
  355. package/dist/utils/validate-query.js +2 -2
  356. package/dist/webhooks.js +1 -1
  357. package/package.json +36 -37
  358. package/dist/utils/with-timeout.d.ts +0 -1
  359. package/dist/utils/with-timeout.js +0 -16
@@ -12,6 +12,7 @@ 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) => {
@@ -101,7 +102,8 @@ 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);
@@ -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);
@@ -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) => {
@@ -91,7 +92,8 @@ 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);
@@ -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);
@@ -10,27 +10,25 @@ 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
18
  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) {
19
+ if (res.locals.payload?.errors?.length > 0) {
21
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
30
  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) {
31
+ if (res.locals.payload?.errors?.length > 0) {
34
32
  res.locals.cache = false;
35
33
  }
36
34
  return next();
@@ -10,6 +10,7 @@ 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
16
  if (req.params.collection.startsWith('directus_'))
@@ -112,7 +113,8 @@ 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);
@@ -163,7 +165,8 @@ 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);
@@ -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) => {
@@ -91,7 +92,8 @@ 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);
@@ -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);
@@ -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) => {
@@ -82,7 +83,8 @@ 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);
@@ -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);
@@ -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) => {
@@ -82,7 +83,8 @@ 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);
@@ -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);
@@ -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_permissions'));
15
16
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -93,7 +94,8 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
93
94
  keys = await service.updateMany(req.body.keys, req.body.data);
94
95
  }
95
96
  else {
96
- keys = await service.updateByQuery(req.body.query, req.body.data);
97
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
98
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
97
99
  }
98
100
  try {
99
101
  const result = await service.readMany(keys, req.sanitizedQuery);
@@ -137,7 +139,8 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
137
139
  await service.deleteMany(req.body.keys);
138
140
  }
139
141
  else {
140
- await service.deleteByQuery(req.body.query);
142
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
143
+ await service.deleteByQuery(sanitizedQuery);
141
144
  }
142
145
  return next();
143
146
  }), respond_1.respond);
@@ -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_presets'));
15
16
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -91,7 +92,8 @@ 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);
@@ -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);
@@ -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_roles'));
15
16
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -82,7 +83,8 @@ 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);
@@ -126,7 +128,8 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
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);
@@ -4,15 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const express_1 = __importDefault(require("express"));
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const constants_1 = require("../constants");
9
+ const env_1 = __importDefault(require("../env"));
7
10
  const exceptions_1 = require("../exceptions");
8
11
  const respond_1 = require("../middleware/respond");
9
12
  const use_collection_1 = __importDefault(require("../middleware/use-collection"));
10
13
  const validate_batch_1 = require("../middleware/validate-batch");
11
14
  const services_1 = require("../services");
12
15
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
13
- const constants_1 = require("../constants");
14
- const joi_1 = __importDefault(require("joi"));
15
- const env_1 = __importDefault(require("../env"));
16
+ const sanitize_query_1 = require("../utils/sanitize-query");
16
17
  const router = express_1.default.Router();
17
18
  router.use((0, use_collection_1.default)('directus_shares'));
18
19
  const sharedLoginSchema = joi_1.default.object({
@@ -156,7 +157,8 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
156
157
  keys = await service.updateMany(req.body.keys, req.body.data);
157
158
  }
158
159
  else {
159
- keys = await service.updateByQuery(req.body.query, req.body.data);
160
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
161
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
160
162
  }
161
163
  try {
162
164
  const result = await service.readMany(keys, req.sanitizedQuery);
@@ -200,7 +202,8 @@ router.delete('/', (0, async_handler_1.default)(async (req, _res, next) => {
200
202
  await service.deleteMany(req.body.keys);
201
203
  }
202
204
  else {
203
- await service.deleteByQuery(req.body.query);
205
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
206
+ await service.deleteByQuery(sanitizedQuery);
204
207
  }
205
208
  return next();
206
209
  }), respond_1.respond);
@@ -11,6 +11,7 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
11
11
  const validate_batch_1 = require("../middleware/validate-batch");
12
12
  const services_1 = require("../services");
13
13
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
14
+ const sanitize_query_1 = require("../utils/sanitize-query");
14
15
  const router = express_1.default.Router();
15
16
  router.use((0, use_collection_1.default)('directus_users'));
16
17
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -62,10 +63,9 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
62
63
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
63
64
  router.search('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
64
65
  router.get('/me', (0, async_handler_1.default)(async (req, res, next) => {
65
- var _a, _b, _c;
66
- if ((_a = req.accountability) === null || _a === void 0 ? void 0 : _a.share_scope) {
66
+ if (req.accountability?.share_scope) {
67
67
  const user = {
68
- share: (_b = req.accountability) === null || _b === void 0 ? void 0 : _b.share,
68
+ share: req.accountability?.share,
69
69
  role: {
70
70
  id: req.accountability.role,
71
71
  admin_access: false,
@@ -75,7 +75,7 @@ router.get('/me', (0, async_handler_1.default)(async (req, res, next) => {
75
75
  res.locals.payload = { data: user };
76
76
  return next();
77
77
  }
78
- if (!((_c = req.accountability) === null || _c === void 0 ? void 0 : _c.user)) {
78
+ if (!req.accountability?.user) {
79
79
  throw new exceptions_1.InvalidCredentialsException();
80
80
  }
81
81
  const service = new services_1.UsersService({
@@ -107,8 +107,7 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
107
107
  return next();
108
108
  }), respond_1.respond);
109
109
  router.patch('/me', (0, async_handler_1.default)(async (req, res, next) => {
110
- var _a;
111
- if (!((_a = req.accountability) === null || _a === void 0 ? void 0 : _a.user)) {
110
+ if (!req.accountability?.user) {
112
111
  throw new exceptions_1.InvalidCredentialsException();
113
112
  }
114
113
  const service = new services_1.UsersService({
@@ -121,8 +120,7 @@ router.patch('/me', (0, async_handler_1.default)(async (req, res, next) => {
121
120
  return next();
122
121
  }), respond_1.respond);
123
122
  router.patch('/me/track/page', (0, async_handler_1.default)(async (req, _res, next) => {
124
- var _a;
125
- if (!((_a = req.accountability) === null || _a === void 0 ? void 0 : _a.user)) {
123
+ if (!req.accountability?.user) {
126
124
  throw new exceptions_1.InvalidCredentialsException();
127
125
  }
128
126
  if (!req.body.last_page) {
@@ -145,7 +143,8 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
145
143
  keys = await service.updateMany(req.body.keys, req.body.data);
146
144
  }
147
145
  else {
148
- keys = await service.updateByQuery(req.body.query, req.body.data);
146
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
147
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
149
148
  }
150
149
  try {
151
150
  const result = await service.readMany(keys, req.sanitizedQuery);
@@ -189,7 +188,8 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
189
188
  await service.deleteMany(req.body.keys);
190
189
  }
191
190
  else {
192
- await service.deleteByQuery(req.body.query);
191
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
192
+ await service.deleteByQuery(sanitizedQuery);
193
193
  }
194
194
  return next();
195
195
  }), respond_1.respond);
@@ -233,8 +233,7 @@ router.post('/invite/accept', (0, async_handler_1.default)(async (req, _res, nex
233
233
  return next();
234
234
  }), respond_1.respond);
235
235
  router.post('/me/tfa/generate/', (0, async_handler_1.default)(async (req, res, next) => {
236
- var _a;
237
- if (!((_a = req.accountability) === null || _a === void 0 ? void 0 : _a.user)) {
236
+ if (!req.accountability?.user) {
238
237
  throw new exceptions_1.InvalidCredentialsException();
239
238
  }
240
239
  if (!req.body.password) {
@@ -254,8 +253,7 @@ router.post('/me/tfa/generate/', (0, async_handler_1.default)(async (req, res, n
254
253
  return next();
255
254
  }), respond_1.respond);
256
255
  router.post('/me/tfa/enable/', (0, async_handler_1.default)(async (req, _res, next) => {
257
- var _a, _b;
258
- if (!((_a = req.accountability) === null || _a === void 0 ? void 0 : _a.user)) {
256
+ if (!req.accountability?.user) {
259
257
  throw new exceptions_1.InvalidCredentialsException();
260
258
  }
261
259
  if (!req.body.secret) {
@@ -271,7 +269,7 @@ router.post('/me/tfa/enable/', (0, async_handler_1.default)(async (req, _res, ne
271
269
  });
272
270
  const role = (await rolesService.readOne(req.accountability.role));
273
271
  if (role && role.enforce_tfa) {
274
- const existingPermission = await ((_b = req.accountability.permissions) === null || _b === void 0 ? void 0 : _b.find((p) => p.collection === 'directus_users' && p.action === 'update'));
272
+ const existingPermission = await req.accountability.permissions?.find((p) => p.collection === 'directus_users' && p.action === 'update');
275
273
  if (existingPermission) {
276
274
  existingPermission.fields = ['tfa_secret'];
277
275
  existingPermission.permissions = { id: { _eq: req.accountability.user } };
@@ -299,8 +297,7 @@ router.post('/me/tfa/enable/', (0, async_handler_1.default)(async (req, _res, ne
299
297
  return next();
300
298
  }), respond_1.respond);
301
299
  router.post('/me/tfa/disable', (0, async_handler_1.default)(async (req, _res, next) => {
302
- var _a, _b;
303
- if (!((_a = req.accountability) === null || _a === void 0 ? void 0 : _a.user)) {
300
+ if (!req.accountability?.user) {
304
301
  throw new exceptions_1.InvalidCredentialsException();
305
302
  }
306
303
  if (!req.body.otp) {
@@ -313,7 +310,7 @@ router.post('/me/tfa/disable', (0, async_handler_1.default)(async (req, _res, ne
313
310
  });
314
311
  const role = (await rolesService.readOne(req.accountability.role));
315
312
  if (role && role.enforce_tfa) {
316
- const existingPermission = await ((_b = req.accountability.permissions) === null || _b === void 0 ? void 0 : _b.find((p) => p.collection === 'directus_users' && p.action === 'update'));
313
+ const existingPermission = await req.accountability.permissions?.find((p) => p.collection === 'directus_users' && p.action === 'update');
317
314
  if (existingPermission) {
318
315
  existingPermission.fields = ['tfa_secret'];
319
316
  existingPermission.permissions = { id: { _eq: req.accountability.user } };
@@ -345,8 +342,7 @@ router.post('/me/tfa/disable', (0, async_handler_1.default)(async (req, _res, ne
345
342
  return next();
346
343
  }), respond_1.respond);
347
344
  router.post('/:pk/tfa/disable', (0, async_handler_1.default)(async (req, _res, next) => {
348
- var _a;
349
- if (!((_a = req.accountability) === null || _a === void 0 ? void 0 : _a.user)) {
345
+ if (!req.accountability?.user) {
350
346
  throw new exceptions_1.InvalidCredentialsException();
351
347
  }
352
348
  if (!req.accountability.admin || !req.params.pk) {
@@ -17,27 +17,24 @@ const generate_hash_1 = require("../utils/generate-hash");
17
17
  const sanitize_query_1 = require("../utils/sanitize-query");
18
18
  const router = (0, express_1.Router)();
19
19
  router.get('/random/string', (0, async_handler_1.default)(async (req, res) => {
20
- var _a;
21
20
  const { nanoid } = await import('nanoid');
22
21
  if (req.query && req.query.length && Number(req.query.length) > 500)
23
22
  throw new exceptions_1.InvalidQueryException(`"length" can't be more than 500 characters`);
24
- const string = nanoid(((_a = req.query) === null || _a === void 0 ? void 0 : _a.length) ? Number(req.query.length) : 32);
23
+ const string = nanoid(req.query?.length ? Number(req.query.length) : 32);
25
24
  return res.json({ data: string });
26
25
  }));
27
26
  router.post('/hash/generate', (0, async_handler_1.default)(async (req, res) => {
28
- var _a;
29
- if (!((_a = req.body) === null || _a === void 0 ? void 0 : _a.string)) {
27
+ if (!req.body?.string) {
30
28
  throw new exceptions_1.InvalidPayloadException(`"string" is required`);
31
29
  }
32
30
  const hash = await (0, generate_hash_1.generateHash)(req.body.string);
33
31
  return res.json({ data: hash });
34
32
  }));
35
33
  router.post('/hash/verify', (0, async_handler_1.default)(async (req, res) => {
36
- var _a, _b;
37
- if (!((_a = req.body) === null || _a === void 0 ? void 0 : _a.string)) {
34
+ if (!req.body?.string) {
38
35
  throw new exceptions_1.InvalidPayloadException(`"string" is required`);
39
36
  }
40
- if (!((_b = req.body) === null || _b === void 0 ? void 0 : _b.hash)) {
37
+ if (!req.body?.hash) {
41
38
  throw new exceptions_1.InvalidPayloadException(`"hash" is required`);
42
39
  }
43
40
  const result = await argon2_1.default.verify(req.body.hash, req.body.string);
@@ -97,7 +94,6 @@ router.post('/import/:collection', collection_exists_1.default, (0, async_handle
97
94
  req.pipe(busboy);
98
95
  }));
99
96
  router.post('/export/:collection', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
100
- var _a;
101
97
  if (!req.body.query) {
102
98
  throw new exceptions_1.InvalidPayloadException(`"query" is required.`);
103
99
  }
@@ -108,7 +104,7 @@ router.post('/export/:collection', collection_exists_1.default, (0, async_handle
108
104
  accountability: req.accountability,
109
105
  schema: req.schema,
110
106
  });
111
- const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, (_a = req.accountability) !== null && _a !== void 0 ? _a : null);
107
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability ?? null);
112
108
  // We're not awaiting this, as it's supposed to run async in the background
113
109
  service.exportToFile(req.params.collection, sanitizedQuery, req.body.format, {
114
110
  file: req.body.file,
@@ -116,8 +112,7 @@ router.post('/export/:collection', collection_exists_1.default, (0, async_handle
116
112
  return next();
117
113
  }), respond_1.respond);
118
114
  router.post('/cache/clear', (0, async_handler_1.default)(async (req, res) => {
119
- var _a;
120
- if (((_a = req.accountability) === null || _a === void 0 ? void 0 : _a.admin) !== true) {
115
+ if (req.accountability?.admin !== true) {
121
116
  throw new exceptions_1.ForbiddenException();
122
117
  }
123
118
  await (0, cache_1.flushCaches)(true);
@@ -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_webhooks'));
15
16
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
@@ -79,7 +80,8 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
79
80
  keys = await service.updateMany(req.body.keys, req.body.data);
80
81
  }
81
82
  else {
82
- keys = await service.updateByQuery(req.body.query, req.body.data);
83
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
84
+ keys = await service.updateByQuery(sanitizedQuery, req.body.data);
83
85
  }
84
86
  try {
85
87
  const result = await service.readMany(keys, req.sanitizedQuery);
@@ -123,7 +125,8 @@ router.delete('/', (0, async_handler_1.default)(async (req, res, next) => {
123
125
  await service.deleteMany(req.body.keys);
124
126
  }
125
127
  else {
126
- await service.deleteByQuery(req.body.query);
128
+ const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
129
+ await service.deleteByQuery(sanitizedQuery);
127
130
  }
128
131
  return next();
129
132
  }), respond_1.respond);
@@ -1,5 +1,5 @@
1
+ import type { Knex } from 'knex';
1
2
  import { FnHelper, FnHelperOptions } from '../types';
2
- import { Knex } from 'knex';
3
3
  export declare class FnHelperMSSQL extends FnHelper {
4
4
  year(table: string, column: string, options: FnHelperOptions): Knex.Raw;
5
5
  month(table: string, column: string, options: FnHelperOptions): Knex.Raw;
@@ -10,33 +10,32 @@ const parseLocaltime = (columnType) => {
10
10
  };
11
11
  class FnHelperMSSQL extends types_1.FnHelper {
12
12
  year(table, column, options) {
13
- return this.knex.raw(`DATEPART(year, ??.??${parseLocaltime(options === null || options === void 0 ? void 0 : options.type)})`, [table, column]);
13
+ return this.knex.raw(`DATEPART(year, ??.??${parseLocaltime(options?.type)})`, [table, column]);
14
14
  }
15
15
  month(table, column, options) {
16
- return this.knex.raw(`DATEPART(month, ??.??${parseLocaltime(options === null || options === void 0 ? void 0 : options.type)})`, [table, column]);
16
+ return this.knex.raw(`DATEPART(month, ??.??${parseLocaltime(options?.type)})`, [table, column]);
17
17
  }
18
18
  week(table, column, options) {
19
- return this.knex.raw(`DATEPART(week, ??.??${parseLocaltime(options === null || options === void 0 ? void 0 : options.type)})`, [table, column]);
19
+ return this.knex.raw(`DATEPART(week, ??.??${parseLocaltime(options?.type)})`, [table, column]);
20
20
  }
21
21
  day(table, column, options) {
22
- return this.knex.raw(`DATEPART(day, ??.??${parseLocaltime(options === null || options === void 0 ? void 0 : options.type)})`, [table, column]);
22
+ return this.knex.raw(`DATEPART(day, ??.??${parseLocaltime(options?.type)})`, [table, column]);
23
23
  }
24
24
  weekday(table, column, options) {
25
- return this.knex.raw(`DATEPART(weekday, ??.??${parseLocaltime(options === null || options === void 0 ? void 0 : options.type)})`, [table, column]);
25
+ return this.knex.raw(`DATEPART(weekday, ??.??${parseLocaltime(options?.type)})`, [table, column]);
26
26
  }
27
27
  hour(table, column, options) {
28
- return this.knex.raw(`DATEPART(hour, ??.??${parseLocaltime(options === null || options === void 0 ? void 0 : options.type)})`, [table, column]);
28
+ return this.knex.raw(`DATEPART(hour, ??.??${parseLocaltime(options?.type)})`, [table, column]);
29
29
  }
30
30
  minute(table, column, options) {
31
- return this.knex.raw(`DATEPART(minute, ??.??${parseLocaltime(options === null || options === void 0 ? void 0 : options.type)})`, [table, column]);
31
+ return this.knex.raw(`DATEPART(minute, ??.??${parseLocaltime(options?.type)})`, [table, column]);
32
32
  }
33
33
  second(table, column, options) {
34
- return this.knex.raw(`DATEPART(second, ??.??${parseLocaltime(options === null || options === void 0 ? void 0 : options.type)})`, [table, column]);
34
+ return this.knex.raw(`DATEPART(second, ??.??${parseLocaltime(options?.type)})`, [table, column]);
35
35
  }
36
36
  count(table, column, options) {
37
- var _a, _b, _c, _d, _e;
38
- const collectionName = (options === null || options === void 0 ? void 0 : options.originalCollectionName) || table;
39
- const type = (_e = (_d = (_c = (_b = (_a = this.schema.collections) === null || _a === void 0 ? void 0 : _a[collectionName]) === null || _b === void 0 ? void 0 : _b.fields) === null || _c === void 0 ? void 0 : _c[column]) === null || _d === void 0 ? void 0 : _d.type) !== null && _e !== void 0 ? _e : 'unknown';
37
+ const collectionName = options?.originalCollectionName || table;
38
+ const type = this.schema.collections?.[collectionName]?.fields?.[column]?.type ?? 'unknown';
40
39
  if (type === 'json') {
41
40
  return this.knex.raw(`(SELECT COUNT(*) FROM OPENJSON(??.??, '$'))`, [table, column]);
42
41
  }
@@ -1,5 +1,5 @@
1
+ import type { Knex } from 'knex';
1
2
  import { FnHelper, FnHelperOptions } from '../types';
2
- import { Knex } from 'knex';
3
3
  export declare class FnHelperMySQL extends FnHelper {
4
4
  year(table: string, column: string): Knex.Raw;
5
5
  month(table: string, column: string): Knex.Raw;
@@ -28,9 +28,8 @@ class FnHelperMySQL extends types_1.FnHelper {
28
28
  return this.knex.raw('SECOND(??.??)', [table, column]);
29
29
  }
30
30
  count(table, column, options) {
31
- var _a, _b, _c, _d, _e;
32
- const collectionName = (options === null || options === void 0 ? void 0 : options.originalCollectionName) || table;
33
- const type = (_e = (_d = (_c = (_b = (_a = this.schema.collections) === null || _a === void 0 ? void 0 : _a[collectionName]) === null || _b === void 0 ? void 0 : _b.fields) === null || _c === void 0 ? void 0 : _c[column]) === null || _d === void 0 ? void 0 : _d.type) !== null && _e !== void 0 ? _e : 'unknown';
31
+ const collectionName = options?.originalCollectionName || table;
32
+ const type = this.schema.collections?.[collectionName]?.fields?.[column]?.type ?? 'unknown';
34
33
  if (type === 'json') {
35
34
  return this.knex.raw('JSON_LENGTH(??.??)', [table, column]);
36
35
  }