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
package/dist/app.js CHANGED
@@ -44,9 +44,9 @@ const folders_1 = __importDefault(require("./controllers/folders"));
44
44
  const graphql_1 = __importDefault(require("./controllers/graphql"));
45
45
  const items_1 = __importDefault(require("./controllers/items"));
46
46
  const not_found_1 = __importDefault(require("./controllers/not-found"));
47
- const panels_1 = __importDefault(require("./controllers/panels"));
48
47
  const notifications_1 = __importDefault(require("./controllers/notifications"));
49
48
  const operations_1 = __importDefault(require("./controllers/operations"));
49
+ const panels_1 = __importDefault(require("./controllers/panels"));
50
50
  const permissions_1 = __importDefault(require("./controllers/permissions"));
51
51
  const presets_1 = __importDefault(require("./controllers/presets"));
52
52
  const relations_1 = __importDefault(require("./controllers/relations"));
@@ -55,10 +55,10 @@ const roles_1 = __importDefault(require("./controllers/roles"));
55
55
  const schema_1 = __importDefault(require("./controllers/schema"));
56
56
  const server_1 = __importDefault(require("./controllers/server"));
57
57
  const settings_1 = __importDefault(require("./controllers/settings"));
58
+ const shares_1 = __importDefault(require("./controllers/shares"));
58
59
  const users_1 = __importDefault(require("./controllers/users"));
59
60
  const utils_1 = __importDefault(require("./controllers/utils"));
60
61
  const webhooks_1 = __importDefault(require("./controllers/webhooks"));
61
- const shares_1 = __importDefault(require("./controllers/shares"));
62
62
  const database_1 = require("./database");
63
63
  const emitter_1 = __importDefault(require("./emitter"));
64
64
  const env_1 = __importDefault(require("./env"));
@@ -67,28 +67,29 @@ const extensions_2 = require("./extensions");
67
67
  const flows_2 = require("./flows");
68
68
  const logger_1 = __importStar(require("./logger"));
69
69
  const authenticate_1 = __importDefault(require("./middleware/authenticate"));
70
- const get_permissions_1 = __importDefault(require("./middleware/get-permissions"));
71
70
  const cache_1 = __importDefault(require("./middleware/cache"));
72
71
  const check_ip_1 = require("./middleware/check-ip");
73
72
  const cors_1 = __importDefault(require("./middleware/cors"));
74
73
  const error_handler_1 = __importDefault(require("./middleware/error-handler"));
75
74
  const extract_token_1 = __importDefault(require("./middleware/extract-token"));
76
- const rate_limiter_1 = __importDefault(require("./middleware/rate-limiter"));
75
+ const get_permissions_1 = __importDefault(require("./middleware/get-permissions"));
76
+ const rate_limiter_global_1 = __importDefault(require("./middleware/rate-limiter-global"));
77
+ const rate_limiter_ip_1 = __importDefault(require("./middleware/rate-limiter-ip"));
77
78
  const sanitize_query_1 = __importDefault(require("./middleware/sanitize-query"));
78
79
  const schema_2 = __importDefault(require("./middleware/schema"));
80
+ const lodash_1 = require("lodash");
81
+ const auth_2 = require("./auth");
82
+ const cache_2 = require("./cache");
83
+ const get_config_from_env_1 = require("./utils/get-config-from-env");
79
84
  const track_1 = require("./utils/track");
85
+ const url_1 = require("./utils/url");
80
86
  const validate_env_1 = require("./utils/validate-env");
81
87
  const validate_storage_1 = require("./utils/validate-storage");
82
88
  const webhooks_2 = require("./webhooks");
83
- const cache_2 = require("./cache");
84
- const auth_2 = require("./auth");
85
- const url_1 = require("./utils/url");
86
- const get_config_from_env_1 = require("./utils/get-config-from-env");
87
- const lodash_1 = require("lodash");
88
89
  async function createApp() {
89
90
  const helmet = await import('helmet');
90
91
  (0, validate_env_1.validateEnv)(['KEY', 'SECRET']);
91
- if (!new url_1.Url(env_1.default.PUBLIC_URL).isAbsolute()) {
92
+ if (!new url_1.Url(env_1.default['PUBLIC_URL']).isAbsolute()) {
92
93
  logger_1.default.warn('PUBLIC_URL should be a full URL');
93
94
  }
94
95
  await (0, validate_storage_1.validateStorage)();
@@ -109,7 +110,7 @@ async function createApp() {
109
110
  await flowManager.initialize();
110
111
  const app = (0, express_1.default)();
111
112
  app.disable('x-powered-by');
112
- app.set('trust proxy', env_1.default.IP_TRUST_PROXY);
113
+ app.set('trust proxy', env_1.default['IP_TRUST_PROXY']);
113
114
  app.set('query parser', (str) => qs_1.default.parse(str, { depth: 10 }));
114
115
  app.use(helmet.contentSecurityPolicy((0, lodash_1.merge)({
115
116
  useDefaults: true,
@@ -129,7 +130,7 @@ async function createApp() {
129
130
  connectSrc: ["'self'", 'https://*'],
130
131
  },
131
132
  }, (0, get_config_from_env_1.getConfigFromEnv)('CONTENT_SECURITY_POLICY_'))));
132
- if (env_1.default.HSTS_ENABLED) {
133
+ if (env_1.default['HSTS_ENABLED']) {
133
134
  app.use(helmet.hsts((0, get_config_from_env_1.getConfigFromEnv)('HSTS_', ['HSTS_ENABLED'])));
134
135
  }
135
136
  await emitter_1.default.emitInit('app.before', { app });
@@ -139,12 +140,12 @@ async function createApp() {
139
140
  res.setHeader('X-Powered-By', 'Directus');
140
141
  next();
141
142
  });
142
- if (env_1.default.CORS_ENABLED === true) {
143
+ if (env_1.default['CORS_ENABLED'] === true) {
143
144
  app.use(cors_1.default);
144
145
  }
145
146
  app.use((req, res, next) => {
146
147
  express_1.default.json({
147
- limit: env_1.default.MAX_PAYLOAD_SIZE,
148
+ limit: env_1.default['MAX_PAYLOAD_SIZE'],
148
149
  })(req, res, (err) => {
149
150
  if (err) {
150
151
  return next(new exceptions_1.InvalidPayloadException(err.message));
@@ -155,8 +156,8 @@ async function createApp() {
155
156
  app.use((0, cookie_parser_1.default)());
156
157
  app.use(extract_token_1.default);
157
158
  app.get('/', (_req, res, next) => {
158
- if (env_1.default.ROOT_REDIRECT) {
159
- res.redirect(env_1.default.ROOT_REDIRECT);
159
+ if (env_1.default['ROOT_REDIRECT']) {
160
+ res.redirect(env_1.default['ROOT_REDIRECT']);
160
161
  }
161
162
  else {
162
163
  next();
@@ -165,11 +166,11 @@ async function createApp() {
165
166
  app.get('/robots.txt', (_, res) => {
166
167
  res.set('Content-Type', 'text/plain');
167
168
  res.status(200);
168
- res.send(env_1.default.ROBOTS_TXT);
169
+ res.send(env_1.default['ROBOTS_TXT']);
169
170
  });
170
- if (env_1.default.SERVE_APP) {
171
+ if (env_1.default['SERVE_APP']) {
171
172
  const adminPath = require.resolve('@directus/app');
172
- const adminUrl = new url_1.Url(env_1.default.PUBLIC_URL).addPath('admin');
173
+ const adminUrl = new url_1.Url(env_1.default['PUBLIC_URL']).addPath('admin');
173
174
  const embeds = extensionManager.getEmbeds();
174
175
  // Set the App's base path according to the APIs public URL
175
176
  const html = await fs_extra_1.default.readFile(adminPath, 'utf8');
@@ -191,8 +192,11 @@ async function createApp() {
191
192
  app.use('/admin/*', sendHtml);
192
193
  }
193
194
  // use the rate limiter - all routes for now
194
- if (env_1.default.RATE_LIMITER_ENABLED === true) {
195
- app.use(rate_limiter_1.default);
195
+ if (env_1.default['RATE_LIMITER_GLOBAL_ENABLED'] === true) {
196
+ app.use(rate_limiter_global_1.default);
197
+ }
198
+ if (env_1.default['RATE_LIMITER_ENABLED'] === true) {
199
+ app.use(rate_limiter_ip_1.default);
196
200
  }
197
201
  app.get('/server/ping', (req, res) => res.send('pong'));
198
202
  app.use(authenticate_1.default);
@@ -1,6 +1,6 @@
1
- import { SchemaOverview } from '@directus/shared/types';
2
- import { Knex } from 'knex';
3
- import { AuthDriverOptions, User } from '../types';
1
+ import type { SchemaOverview } from '@directus/shared/types';
2
+ import type { Knex } from 'knex';
3
+ import type { AuthDriverOptions, User } from '../types';
4
4
  export declare abstract class AuthDriver {
5
5
  knex: Knex;
6
6
  schema: SchemaOverview;
package/dist/auth/auth.js CHANGED
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AuthDriver = void 0;
4
4
  class AuthDriver {
5
+ knex;
6
+ schema;
5
7
  constructor(options, _config) {
6
8
  this.knex = options.knex;
7
9
  this.schema = options.schema;
@@ -1,7 +1,7 @@
1
1
  import { Router } from 'express';
2
2
  import { Client } from 'ldapjs';
3
3
  import { UsersService } from '../../services';
4
- import { AuthDriverOptions, User } from '../../types';
4
+ import type { AuthDriverOptions, User } from '../../types';
5
5
  import { AuthDriver } from '../auth';
6
6
  export declare class LDAPAuthDriver extends AuthDriver {
7
7
  bindClient: Client;
@@ -45,18 +45,20 @@ const auth_1 = require("../auth");
45
45
  // 0x800000: PASSWORD_EXPIRED
46
46
  const INVALID_ACCOUNT_FLAGS = 0x800012;
47
47
  class LDAPAuthDriver extends auth_1.AuthDriver {
48
+ bindClient;
49
+ usersService;
50
+ config;
48
51
  constructor(options, config) {
49
- var _a;
50
52
  super(options, config);
51
53
  const { bindDn, bindPassword, userDn, provider, clientUrl } = config;
52
54
  if (bindDn === undefined ||
53
55
  bindPassword === undefined ||
54
56
  !userDn ||
55
57
  !provider ||
56
- (!clientUrl && !((_a = config.client) === null || _a === void 0 ? void 0 : _a.socketPath))) {
58
+ (!clientUrl && !config['client']?.socketPath)) {
57
59
  throw new exceptions_1.InvalidConfigException('Invalid provider config', { provider });
58
60
  }
59
- const clientConfig = typeof config.client === 'object' ? config.client : {};
61
+ const clientConfig = typeof config['client'] === 'object' ? config['client'] : {};
60
62
  this.bindClient = ldapjs_1.default.createClient({ url: clientUrl, reconnect: true, ...clientConfig });
61
63
  this.bindClient.on('error', (err) => {
62
64
  logger_1.default.warn(err);
@@ -95,7 +97,7 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
95
97
  });
96
98
  res.on('end', (result) => {
97
99
  // Handle edge case where authenticated bind user cannot read their own DN
98
- if ((result === null || result === void 0 ? void 0 : result.status) === 0) {
100
+ if (result?.status === 0) {
99
101
  reject(new exceptions_1.UnexpectedResponseException('Failed to find bind user record'));
100
102
  }
101
103
  });
@@ -104,9 +106,9 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
104
106
  }
105
107
  async fetchUserInfo(baseDn, filter, scope) {
106
108
  let { firstNameAttribute, lastNameAttribute, mailAttribute } = this.config;
107
- firstNameAttribute !== null && firstNameAttribute !== void 0 ? firstNameAttribute : (firstNameAttribute = 'givenName');
108
- lastNameAttribute !== null && lastNameAttribute !== void 0 ? lastNameAttribute : (lastNameAttribute = 'sn');
109
- mailAttribute !== null && mailAttribute !== void 0 ? mailAttribute : (mailAttribute = 'mail');
109
+ firstNameAttribute ??= 'givenName';
110
+ lastNameAttribute ??= 'sn';
111
+ mailAttribute ??= 'mail';
110
112
  return new Promise((resolve, reject) => {
111
113
  // Search for the user in LDAP by filter
112
114
  this.bindClient.search(baseDn, {
@@ -119,15 +121,22 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
119
121
  return;
120
122
  }
121
123
  res.on('searchEntry', ({ object }) => {
122
- var _a;
123
124
  const user = {
124
- dn: object.dn,
125
- uid: getEntryValue(object.uid),
126
- firstName: getEntryValue(object[firstNameAttribute]),
127
- lastName: getEntryValue(object[lastNameAttribute]),
128
- email: getEntryValue(object[mailAttribute]),
129
- userAccountControl: Number((_a = getEntryValue(object.userAccountControl)) !== null && _a !== void 0 ? _a : 0),
125
+ dn: object['dn'],
126
+ userAccountControl: Number(getEntryValue(object['userAccountControl']) ?? 0),
130
127
  };
128
+ const firstName = getEntryValue(object[firstNameAttribute]);
129
+ if (firstName)
130
+ user.firstName = firstName;
131
+ const lastName = getEntryValue(object[lastNameAttribute]);
132
+ if (lastName)
133
+ user.lastName = lastName;
134
+ const email = getEntryValue(object[mailAttribute]);
135
+ if (email)
136
+ user.email = email;
137
+ const uid = getEntryValue(object['uid']);
138
+ if (uid)
139
+ user.uid = uid;
131
140
  resolve(user);
132
141
  });
133
142
  res.on('error', (err) => {
@@ -153,11 +162,11 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
153
162
  return;
154
163
  }
155
164
  res.on('searchEntry', ({ object }) => {
156
- if (typeof object.cn === 'object') {
157
- userGroups = [...userGroups, ...object.cn];
165
+ if (typeof object['cn'] === 'object') {
166
+ userGroups = [...userGroups, ...object['cn']];
158
167
  }
159
- else if (object.cn) {
160
- userGroups.push(object.cn);
168
+ else if (object['cn']) {
169
+ userGroups.push(object['cn']);
161
170
  }
162
171
  });
163
172
  res.on('error', (err) => {
@@ -175,28 +184,27 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
175
184
  .from('directus_users')
176
185
  .orWhereRaw('LOWER(??) = ?', ['external_identifier', userDn.toLowerCase()])
177
186
  .first();
178
- return user === null || user === void 0 ? void 0 : user.id;
187
+ return user?.id;
179
188
  }
180
189
  async getUserID(payload) {
181
- var _a, _b, _c;
182
- if (!payload.identifier) {
190
+ if (!payload['identifier']) {
183
191
  throw new exceptions_1.InvalidCredentialsException();
184
192
  }
185
193
  await this.validateBindClient();
186
194
  const { userDn, userScope, userAttribute, groupDn, groupScope, groupAttribute, defaultRoleId } = this.config;
187
195
  const userInfo = await this.fetchUserInfo(userDn, new ldapjs_1.EqualityFilter({
188
- attribute: userAttribute !== null && userAttribute !== void 0 ? userAttribute : 'cn',
189
- value: payload.identifier,
190
- }), userScope !== null && userScope !== void 0 ? userScope : 'one');
191
- if (!(userInfo === null || userInfo === void 0 ? void 0 : userInfo.dn)) {
196
+ attribute: userAttribute ?? 'cn',
197
+ value: payload['identifier'],
198
+ }), userScope ?? 'one');
199
+ if (!userInfo?.dn) {
192
200
  throw new exceptions_1.InvalidCredentialsException();
193
201
  }
194
202
  let userRole;
195
203
  if (groupDn) {
196
204
  const userGroups = await this.fetchUserGroups(groupDn, new ldapjs_1.EqualityFilter({
197
- attribute: groupAttribute !== null && groupAttribute !== void 0 ? groupAttribute : 'member',
198
- value: (groupAttribute === null || groupAttribute === void 0 ? void 0 : groupAttribute.toLowerCase()) === 'memberuid' && userInfo.uid ? userInfo.uid : userInfo.dn,
199
- }), groupScope !== null && groupScope !== void 0 ? groupScope : 'one');
205
+ attribute: groupAttribute ?? 'member',
206
+ value: groupAttribute?.toLowerCase() === 'memberuid' && userInfo.uid ? userInfo.uid : userInfo.dn,
207
+ }), groupScope ?? 'one');
200
208
  if (userGroups.length) {
201
209
  userRole = await this.knex
202
210
  .select('id')
@@ -212,7 +220,7 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
212
220
  if (userId) {
213
221
  // Only sync roles if the AD groups are configured
214
222
  if (groupDn) {
215
- await this.usersService.updateOne(userId, { role: (_b = (_a = userRole === null || userRole === void 0 ? void 0 : userRole.id) !== null && _a !== void 0 ? _a : defaultRoleId) !== null && _b !== void 0 ? _b : null });
223
+ await this.usersService.updateOne(userId, { role: userRole?.id ?? defaultRoleId ?? null });
216
224
  }
217
225
  return userId;
218
226
  }
@@ -221,12 +229,12 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
221
229
  }
222
230
  try {
223
231
  await this.usersService.createOne({
224
- provider: this.config.provider,
232
+ provider: this.config['provider'],
225
233
  first_name: userInfo.firstName,
226
234
  last_name: userInfo.lastName,
227
235
  email: userInfo.email,
228
236
  external_identifier: userInfo.dn,
229
- role: (_c = userRole === null || userRole === void 0 ? void 0 : userRole.id) !== null && _c !== void 0 ? _c : defaultRoleId,
237
+ role: userRole?.id ?? defaultRoleId,
230
238
  });
231
239
  }
232
240
  catch (e) {
@@ -243,9 +251,9 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
243
251
  throw new exceptions_1.InvalidCredentialsException();
244
252
  }
245
253
  return new Promise((resolve, reject) => {
246
- const clientConfig = typeof this.config.client === 'object' ? this.config.client : {};
254
+ const clientConfig = typeof this.config['client'] === 'object' ? this.config['client'] : {};
247
255
  const client = ldapjs_1.default.createClient({
248
- url: this.config.clientUrl,
256
+ url: this.config['clientUrl'],
249
257
  ...clientConfig,
250
258
  reconnect: false,
251
259
  });
@@ -264,12 +272,12 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
264
272
  });
265
273
  }
266
274
  async login(user, payload) {
267
- await this.verify(user, payload.password);
275
+ await this.verify(user, payload['password']);
268
276
  }
269
277
  async refresh(user) {
270
278
  await this.validateBindClient();
271
279
  const userInfo = await this.fetchUserInfo(user.external_identifier);
272
- if ((userInfo === null || userInfo === void 0 ? void 0 : userInfo.userAccountControl) && userInfo.userAccountControl & INVALID_ACCOUNT_FLAGS) {
280
+ if (userInfo?.userAccountControl && userInfo.userAccountControl & INVALID_ACCOUNT_FLAGS) {
273
281
  throw new exceptions_1.InvalidCredentialsException();
274
282
  }
275
283
  }
@@ -298,13 +306,16 @@ function createLDAPAuthRouter(provider) {
298
306
  otp: joi_1.default.string(),
299
307
  }).unknown();
300
308
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
301
- var _a, _b;
302
309
  const accountability = {
303
310
  ip: (0, get_ip_from_req_1.getIPFromReq)(req),
304
- userAgent: req.get('user-agent'),
305
- origin: req.get('origin'),
306
311
  role: null,
307
312
  };
313
+ const userAgent = req.get('user-agent');
314
+ if (userAgent)
315
+ accountability.userAgent = userAgent;
316
+ const origin = req.get('origin');
317
+ if (origin)
318
+ accountability.origin = origin;
308
319
  const authenticationService = new services_1.AuthenticationService({
309
320
  accountability: accountability,
310
321
  schema: req.schema,
@@ -314,23 +325,23 @@ function createLDAPAuthRouter(provider) {
314
325
  throw new exceptions_1.InvalidPayloadException(error.message);
315
326
  }
316
327
  const mode = req.body.mode || 'json';
317
- const { accessToken, refreshToken, expires } = await authenticationService.login(provider, req.body, (_a = req.body) === null || _a === void 0 ? void 0 : _a.otp);
328
+ const { accessToken, refreshToken, expires } = await authenticationService.login(provider, req.body, req.body?.otp);
318
329
  const payload = {
319
330
  data: { access_token: accessToken, expires },
320
331
  };
321
332
  if (mode === 'json') {
322
- payload.data.refresh_token = refreshToken;
333
+ payload['data']['refresh_token'] = refreshToken;
323
334
  }
324
335
  if (mode === 'cookie') {
325
- res.cookie(env_1.default.REFRESH_TOKEN_COOKIE_NAME, refreshToken, {
336
+ res.cookie(env_1.default['REFRESH_TOKEN_COOKIE_NAME'], refreshToken, {
326
337
  httpOnly: true,
327
- domain: env_1.default.REFRESH_TOKEN_COOKIE_DOMAIN,
328
- maxAge: (0, get_milliseconds_1.getMilliseconds)(env_1.default.REFRESH_TOKEN_TTL),
329
- secure: (_b = env_1.default.REFRESH_TOKEN_COOKIE_SECURE) !== null && _b !== void 0 ? _b : false,
330
- sameSite: env_1.default.REFRESH_TOKEN_COOKIE_SAME_SITE || 'strict',
338
+ domain: env_1.default['REFRESH_TOKEN_COOKIE_DOMAIN'],
339
+ maxAge: (0, get_milliseconds_1.getMilliseconds)(env_1.default['REFRESH_TOKEN_TTL']),
340
+ secure: env_1.default['REFRESH_TOKEN_COOKIE_SECURE'] ?? false,
341
+ sameSite: env_1.default['REFRESH_TOKEN_COOKIE_SAME_SITE'] || 'strict',
331
342
  });
332
343
  }
333
- res.locals.payload = payload;
344
+ res.locals['payload'] = payload;
334
345
  return next();
335
346
  }), respond_1.respond);
336
347
  return router;
@@ -1,6 +1,6 @@
1
1
  import { Router } from 'express';
2
+ import type { User } from '../../types';
2
3
  import { AuthDriver } from '../auth';
3
- import { User } from '../../types';
4
4
  export declare class LocalAuthDriver extends AuthDriver {
5
5
  getUserID(payload: Record<string, any>): Promise<string>;
6
6
  verify(user: User, password?: string): Promise<void>;
@@ -4,28 +4,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createLocalAuthRouter = exports.LocalAuthDriver = void 0;
7
- const express_1 = require("express");
8
7
  const argon2_1 = __importDefault(require("argon2"));
8
+ const express_1 = require("express");
9
9
  const joi_1 = __importDefault(require("joi"));
10
- const auth_1 = require("../auth");
10
+ const perf_hooks_1 = require("perf_hooks");
11
+ const constants_1 = require("../../constants");
12
+ const env_1 = __importDefault(require("../../env"));
11
13
  const exceptions_1 = require("../../exceptions");
14
+ const respond_1 = require("../../middleware/respond");
12
15
  const services_1 = require("../../services");
13
16
  const async_handler_1 = __importDefault(require("../../utils/async-handler"));
14
- const env_1 = __importDefault(require("../../env"));
15
- const respond_1 = require("../../middleware/respond");
16
- const constants_1 = require("../../constants");
17
17
  const get_ip_from_req_1 = require("../../utils/get-ip-from-req");
18
- const perf_hooks_1 = require("perf_hooks");
19
18
  const stall_1 = require("../../utils/stall");
19
+ const auth_1 = require("../auth");
20
20
  class LocalAuthDriver extends auth_1.AuthDriver {
21
21
  async getUserID(payload) {
22
- if (!payload.email) {
22
+ if (!payload['email']) {
23
23
  throw new exceptions_1.InvalidCredentialsException();
24
24
  }
25
25
  const user = await this.knex
26
26
  .select('id')
27
27
  .from('directus_users')
28
- .whereRaw('LOWER(??) = ?', ['email', payload.email.toLowerCase()])
28
+ .whereRaw('LOWER(??) = ?', ['email', payload['email'].toLowerCase()])
29
29
  .first();
30
30
  if (!user) {
31
31
  throw new exceptions_1.InvalidCredentialsException();
@@ -38,7 +38,7 @@ class LocalAuthDriver extends auth_1.AuthDriver {
38
38
  }
39
39
  }
40
40
  async login(user, payload) {
41
- await this.verify(user, payload.password);
41
+ await this.verify(user, payload['password']);
42
42
  }
43
43
  }
44
44
  exports.LocalAuthDriver = LocalAuthDriver;
@@ -51,15 +51,18 @@ function createLocalAuthRouter(provider) {
51
51
  otp: joi_1.default.string(),
52
52
  }).unknown();
53
53
  router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
54
- var _a;
55
- const STALL_TIME = env_1.default.LOGIN_STALL_TIME;
54
+ const STALL_TIME = env_1.default['LOGIN_STALL_TIME'];
56
55
  const timeStart = perf_hooks_1.performance.now();
57
56
  const accountability = {
58
57
  ip: (0, get_ip_from_req_1.getIPFromReq)(req),
59
- userAgent: req.get('user-agent'),
60
- origin: req.get('origin'),
61
58
  role: null,
62
59
  };
60
+ const userAgent = req.get('user-agent');
61
+ if (userAgent)
62
+ accountability.userAgent = userAgent;
63
+ const origin = req.get('origin');
64
+ if (origin)
65
+ accountability.origin = origin;
63
66
  const authenticationService = new services_1.AuthenticationService({
64
67
  accountability: accountability,
65
68
  schema: req.schema,
@@ -70,17 +73,17 @@ function createLocalAuthRouter(provider) {
70
73
  throw new exceptions_1.InvalidPayloadException(error.message);
71
74
  }
72
75
  const mode = req.body.mode || 'json';
73
- const { accessToken, refreshToken, expires } = await authenticationService.login(provider, req.body, (_a = req.body) === null || _a === void 0 ? void 0 : _a.otp);
76
+ const { accessToken, refreshToken, expires } = await authenticationService.login(provider, req.body, req.body?.otp);
74
77
  const payload = {
75
78
  data: { access_token: accessToken, expires },
76
79
  };
77
80
  if (mode === 'json') {
78
- payload.data.refresh_token = refreshToken;
81
+ payload['data']['refresh_token'] = refreshToken;
79
82
  }
80
83
  if (mode === 'cookie') {
81
- res.cookie(env_1.default.REFRESH_TOKEN_COOKIE_NAME, refreshToken, constants_1.COOKIE_OPTIONS);
84
+ res.cookie(env_1.default['REFRESH_TOKEN_COOKIE_NAME'], refreshToken, constants_1.COOKIE_OPTIONS);
82
85
  }
83
- res.locals.payload = payload;
86
+ res.locals['payload'] = payload;
84
87
  return next();
85
88
  }), respond_1.respond);
86
89
  return router;
@@ -1,7 +1,7 @@
1
1
  import { Router } from 'express';
2
2
  import { Client } from 'openid-client';
3
3
  import { UsersService } from '../../services';
4
- import { AuthDriverOptions, User } from '../../types';
4
+ import type { AuthDriverOptions, User } from '../../types';
5
5
  import { LocalAuthDriver } from './local';
6
6
  export declare class OAuth2AuthDriver extends LocalAuthDriver {
7
7
  client: Client;