directus 9.22.4 → 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 (404) hide show
  1. package/dist/app.js +19 -14
  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 +2 -2
  5. package/dist/auth/drivers/ldap.js +47 -36
  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 +22 -15
  10. package/dist/auth/drivers/openid.d.ts +1 -1
  11. package/dist/auth/drivers/openid.js +23 -16
  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 +59 -16
  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 +21 -20
  21. package/dist/cli/commands/schema/snapshot.js +2 -2
  22. package/dist/cli/utils/create-db-connection.d.ts +2 -1
  23. package/dist/cli/utils/create-db-connection.js +2 -1
  24. package/dist/cli/utils/create-env/env-stub.liquid +1 -1
  25. package/dist/cli/utils/create-env/index.d.ts +2 -2
  26. package/dist/cli/utils/drivers.d.ts +3 -9
  27. package/dist/constants.d.ts +3 -9
  28. package/dist/constants.js +5 -10
  29. package/dist/controllers/activity.js +1 -2
  30. package/dist/controllers/assets.js +17 -12
  31. package/dist/controllers/auth.js +29 -15
  32. package/dist/controllers/dashboards.js +5 -2
  33. package/dist/controllers/extensions.js +7 -7
  34. package/dist/controllers/fields.js +4 -4
  35. package/dist/controllers/files.js +11 -6
  36. package/dist/controllers/flows.js +5 -2
  37. package/dist/controllers/folders.js +5 -2
  38. package/dist/controllers/graphql.js +6 -0
  39. package/dist/controllers/items.js +5 -2
  40. package/dist/controllers/not-found.d.ts +1 -1
  41. package/dist/controllers/not-found.js +1 -2
  42. package/dist/controllers/notifications.js +5 -2
  43. package/dist/controllers/operations.js +5 -2
  44. package/dist/controllers/panels.js +5 -2
  45. package/dist/controllers/permissions.js +5 -2
  46. package/dist/controllers/presets.js +5 -2
  47. package/dist/controllers/roles.js +5 -2
  48. package/dist/controllers/schema.d.ts +2 -0
  49. package/dist/controllers/schema.js +98 -0
  50. package/dist/controllers/shares.js +8 -5
  51. package/dist/controllers/users.js +16 -20
  52. package/dist/controllers/utils.js +6 -11
  53. package/dist/controllers/webhooks.js +5 -2
  54. package/dist/database/helpers/fn/dialects/mssql.d.ts +1 -1
  55. package/dist/database/helpers/fn/dialects/mssql.js +10 -11
  56. package/dist/database/helpers/fn/dialects/mysql.d.ts +1 -1
  57. package/dist/database/helpers/fn/dialects/mysql.js +2 -3
  58. package/dist/database/helpers/fn/dialects/oracle.d.ts +1 -1
  59. package/dist/database/helpers/fn/dialects/oracle.js +10 -11
  60. package/dist/database/helpers/fn/dialects/postgres.d.ts +1 -1
  61. package/dist/database/helpers/fn/dialects/postgres.js +10 -11
  62. package/dist/database/helpers/fn/dialects/sqlite.d.ts +1 -1
  63. package/dist/database/helpers/fn/dialects/sqlite.js +10 -11
  64. package/dist/database/helpers/fn/types.d.ts +5 -5
  65. package/dist/database/helpers/fn/types.js +5 -4
  66. package/dist/database/helpers/geometry/dialects/mssql.d.ts +3 -3
  67. package/dist/database/helpers/geometry/dialects/mysql.d.ts +1 -1
  68. package/dist/database/helpers/geometry/dialects/oracle.d.ts +3 -3
  69. package/dist/database/helpers/geometry/dialects/postgres.d.ts +3 -3
  70. package/dist/database/helpers/geometry/dialects/postgres.js +1 -2
  71. package/dist/database/helpers/geometry/dialects/redshift.d.ts +2 -2
  72. package/dist/database/helpers/geometry/dialects/sqlite.d.ts +1 -1
  73. package/dist/database/helpers/geometry/types.d.ts +2 -2
  74. package/dist/database/helpers/geometry/types.js +1 -2
  75. package/dist/database/helpers/index.d.ts +5 -5
  76. package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +2 -2
  77. package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
  78. package/dist/database/helpers/schema/dialects/mysql.d.ts +1 -1
  79. package/dist/database/helpers/schema/dialects/mysql.js +1 -2
  80. package/dist/database/helpers/schema/dialects/oracle.d.ts +5 -2
  81. package/dist/database/helpers/schema/dialects/oracle.js +23 -0
  82. package/dist/database/helpers/schema/types.d.ts +9 -7
  83. package/dist/database/helpers/schema/types.js +7 -1
  84. package/dist/database/helpers/types.d.ts +1 -1
  85. package/dist/database/helpers/types.js +1 -0
  86. package/dist/database/index.d.ts +2 -1
  87. package/dist/database/index.js +8 -8
  88. package/dist/database/migrations/20201028A-remove-collection-foreign-keys.d.ts +1 -1
  89. package/dist/database/migrations/20201029A-remove-system-relations.d.ts +1 -1
  90. package/dist/database/migrations/20201029B-remove-system-collections.d.ts +1 -1
  91. package/dist/database/migrations/20201029C-remove-system-fields.d.ts +1 -1
  92. package/dist/database/migrations/20201105A-add-cascade-system-relations.d.ts +1 -1
  93. package/dist/database/migrations/20201105B-change-webhook-url-type.d.ts +1 -1
  94. package/dist/database/migrations/20210225A-add-relations-sort-field.d.ts +1 -1
  95. package/dist/database/migrations/20210225A-add-relations-sort-field.js +1 -2
  96. package/dist/database/migrations/20210304A-remove-locked-fields.d.ts +1 -1
  97. package/dist/database/migrations/20210312A-webhooks-collections-text.d.ts +1 -1
  98. package/dist/database/migrations/20210331A-add-refresh-interval.d.ts +1 -1
  99. package/dist/database/migrations/20210415A-make-filesize-nullable.d.ts +1 -1
  100. package/dist/database/migrations/20210416A-add-collections-accountability.d.ts +1 -1
  101. package/dist/database/migrations/20210422A-remove-files-interface.d.ts +1 -1
  102. package/dist/database/migrations/20210506A-rename-interfaces.d.ts +1 -1
  103. package/dist/database/migrations/20210510A-restructure-relations.d.ts +1 -1
  104. package/dist/database/migrations/20210518A-add-foreign-key-constraints.d.ts +1 -1
  105. package/dist/database/migrations/20210518A-add-foreign-key-constraints.js +1 -1
  106. package/dist/database/migrations/20210519A-add-system-fk-triggers.d.ts +1 -1
  107. package/dist/database/migrations/20210519A-add-system-fk-triggers.js +2 -2
  108. package/dist/database/migrations/20210521A-add-collections-icon-color.d.ts +1 -1
  109. package/dist/database/migrations/20210525A-add-insights.d.ts +1 -1
  110. package/dist/database/migrations/20210608A-add-deep-clone-config.d.ts +1 -1
  111. package/dist/database/migrations/20210626A-change-filesize-bigint.d.ts +1 -1
  112. package/dist/database/migrations/20210716A-add-conditions-to-fields.d.ts +1 -1
  113. package/dist/database/migrations/20210721A-add-default-folder.d.ts +1 -1
  114. package/dist/database/migrations/20210802A-replace-groups.d.ts +1 -1
  115. package/dist/database/migrations/20210803A-add-required-to-fields.d.ts +1 -1
  116. package/dist/database/migrations/20210805A-update-groups.d.ts +1 -1
  117. package/dist/database/migrations/20210805B-change-image-metadata-structure.d.ts +1 -1
  118. package/dist/database/migrations/20210811A-add-geometry-config.d.ts +1 -1
  119. package/dist/database/migrations/20210831A-remove-limit-column.d.ts +1 -1
  120. package/dist/database/migrations/20210903A-add-auth-provider.d.ts +1 -1
  121. package/dist/database/migrations/20210907A-webhooks-collections-not-null.d.ts +1 -1
  122. package/dist/database/migrations/20210910A-move-module-setup.d.ts +1 -1
  123. package/dist/database/migrations/20210920A-webhooks-url-not-null.d.ts +1 -1
  124. package/dist/database/migrations/20210924A-add-collection-organization.d.ts +1 -1
  125. package/dist/database/migrations/20210927A-replace-fields-group.d.ts +1 -1
  126. package/dist/database/migrations/20210927B-replace-m2m-interface.d.ts +1 -1
  127. package/dist/database/migrations/20210929A-rename-login-action.d.ts +1 -1
  128. package/dist/database/migrations/20211007A-update-presets.d.ts +1 -1
  129. package/dist/database/migrations/20211007A-update-presets.js +7 -9
  130. package/dist/database/migrations/20211009A-add-auth-data.d.ts +1 -1
  131. package/dist/database/migrations/20211016A-add-webhook-headers.d.ts +1 -1
  132. package/dist/database/migrations/20211103A-set-unique-to-user-token.d.ts +1 -1
  133. package/dist/database/migrations/20211103B-update-special-geometry.d.ts +1 -1
  134. package/dist/database/migrations/20211104A-remove-collections-listing.d.ts +1 -1
  135. package/dist/database/migrations/20211118A-add-notifications.d.ts +1 -1
  136. package/dist/database/migrations/20211211A-add-shares.d.ts +1 -1
  137. package/dist/database/migrations/20211230A-add-project-descriptor.d.ts +1 -1
  138. package/dist/database/migrations/20220303A-remove-default-project-color.d.ts +1 -1
  139. package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +1 -1
  140. package/dist/database/migrations/20220314A-add-translation-strings.d.ts +1 -1
  141. package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +1 -1
  142. package/dist/database/migrations/20220323A-add-field-validation.d.ts +1 -1
  143. package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +1 -1
  144. package/dist/database/migrations/20220325B-add-default-language.d.ts +1 -1
  145. package/dist/database/migrations/20220402A-remove-default-value-panel-icon.d.ts +1 -1
  146. package/dist/database/migrations/20220429A-add-flows.d.ts +1 -1
  147. package/dist/database/migrations/20220429B-add-color-to-insights-icon.d.ts +1 -1
  148. package/dist/database/migrations/20220429C-drop-non-null-from-ip-of-activity.d.ts +1 -1
  149. package/dist/database/migrations/20220429D-drop-non-null-from-sender-of-notifications.d.ts +1 -1
  150. package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.d.ts +1 -1
  151. package/dist/database/migrations/20220801A-update-notifications-timestamp-column.d.ts +1 -1
  152. package/dist/database/migrations/20220802A-add-custom-aspect-ratios.d.ts +1 -1
  153. package/dist/database/migrations/20220826A-add-origin-to-accountability.d.ts +1 -1
  154. package/dist/database/migrations/run.d.ts +1 -1
  155. package/dist/database/run-ast.d.ts +3 -3
  156. package/dist/database/run-ast.js +19 -28
  157. package/dist/database/seeds/run.d.ts +1 -1
  158. package/dist/database/seeds/run.js +1 -2
  159. package/dist/database/system-data/app-access-permissions/index.d.ts +1 -1
  160. package/dist/database/system-data/collections/index.d.ts +1 -1
  161. package/dist/database/system-data/fields/collections.yaml +2 -0
  162. package/dist/database/system-data/fields/index.d.ts +1 -1
  163. package/dist/database/system-data/fields/index.js +1 -2
  164. package/dist/database/system-data/fields/settings.yaml +4 -0
  165. package/dist/database/system-data/relations/index.d.ts +1 -1
  166. package/dist/emitter.d.ts +1 -1
  167. package/dist/emitter.js +3 -0
  168. package/dist/env.js +19 -4
  169. package/dist/exceptions/database/dialects/mssql.d.ts +1 -1
  170. package/dist/exceptions/database/dialects/mssql.js +5 -6
  171. package/dist/exceptions/database/dialects/mysql.d.ts +1 -1
  172. package/dist/exceptions/database/dialects/mysql.js +19 -25
  173. package/dist/exceptions/database/dialects/oracle.d.ts +1 -1
  174. package/dist/exceptions/database/dialects/postgres.d.ts +1 -1
  175. package/dist/exceptions/database/dialects/sqlite.d.ts +1 -1
  176. package/dist/exceptions/database/translate.d.ts +1 -1
  177. package/dist/exceptions/database/value-out-of-range.js +1 -1
  178. package/dist/exceptions/range-not-satisfiable.js +2 -3
  179. package/dist/extensions.d.ts +1 -1
  180. package/dist/extensions.js +34 -24
  181. package/dist/flows.js +56 -30
  182. package/dist/logger.d.ts +1 -1
  183. package/dist/logger.js +19 -3
  184. package/dist/messenger.js +8 -6
  185. package/dist/middleware/authenticate.d.ts +1 -1
  186. package/dist/middleware/authenticate.js +12 -5
  187. package/dist/middleware/cache.d.ts +1 -1
  188. package/dist/middleware/cache.js +7 -7
  189. package/dist/middleware/check-ip.d.ts +1 -1
  190. package/dist/middleware/check-ip.js +1 -1
  191. package/dist/middleware/collection-exists.d.ts +1 -1
  192. package/dist/middleware/collection-exists.js +2 -2
  193. package/dist/middleware/cors.d.ts +1 -1
  194. package/dist/middleware/error-handler.d.ts +1 -1
  195. package/dist/middleware/error-handler.js +9 -10
  196. package/dist/middleware/extract-token.d.ts +1 -1
  197. package/dist/middleware/get-permissions.d.ts +1 -1
  198. package/dist/middleware/graphql.d.ts +1 -1
  199. package/dist/middleware/graphql.js +3 -3
  200. package/dist/middleware/rate-limiter-global.d.ts +5 -0
  201. package/dist/middleware/rate-limiter-global.js +48 -0
  202. package/dist/middleware/{rate-limiter.d.ts → rate-limiter-ip.d.ts} +2 -2
  203. package/dist/middleware/{rate-limiter.js → rate-limiter-ip.js} +3 -3
  204. package/dist/middleware/respond.d.ts +1 -1
  205. package/dist/middleware/respond.js +18 -14
  206. package/dist/middleware/sanitize-query.d.ts +1 -1
  207. package/dist/middleware/schema.d.ts +1 -1
  208. package/dist/middleware/use-collection.d.ts +1 -1
  209. package/dist/operations/condition/index.d.ts +1 -1
  210. package/dist/operations/exec/index.js +14 -3
  211. package/dist/operations/item-create/index.js +1 -2
  212. package/dist/operations/item-delete/index.d.ts +1 -1
  213. package/dist/operations/item-read/index.d.ts +1 -1
  214. package/dist/operations/item-update/index.d.ts +1 -1
  215. package/dist/operations/item-update/index.js +1 -2
  216. package/dist/operations/notification/index.js +1 -2
  217. package/dist/operations/request/index.js +21 -20
  218. package/dist/operations/trigger/index.d.ts +2 -0
  219. package/dist/operations/trigger/index.js +27 -11
  220. package/dist/rate-limiter.d.ts +1 -1
  221. package/dist/rate-limiter.js +8 -8
  222. package/dist/request/index.d.ts +5 -0
  223. package/dist/request/index.js +18 -0
  224. package/dist/request/index.test.d.ts +1 -0
  225. package/dist/request/request-interceptor.d.ts +2 -0
  226. package/dist/request/request-interceptor.js +33 -0
  227. package/dist/request/request-interceptor.test.d.ts +1 -0
  228. package/dist/request/response-interceptor.d.ts +2 -0
  229. package/dist/request/response-interceptor.js +9 -0
  230. package/dist/request/response-interceptor.test.d.ts +1 -0
  231. package/dist/request/validate-ip.d.ts +1 -0
  232. package/dist/request/validate-ip.js +27 -0
  233. package/dist/request/validate-ip.test.d.ts +1 -0
  234. package/dist/server.js +8 -9
  235. package/dist/services/activity.d.ts +1 -1
  236. package/dist/services/activity.js +7 -6
  237. package/dist/services/assets.d.ts +3 -3
  238. package/dist/services/assets.js +33 -26
  239. package/dist/services/authentication.d.ts +2 -2
  240. package/dist/services/authentication.js +18 -15
  241. package/dist/services/authorization.d.ts +3 -3
  242. package/dist/services/authorization.js +27 -31
  243. package/dist/services/collections.d.ts +5 -5
  244. package/dist/services/collections.js +52 -48
  245. package/dist/services/dashboards.d.ts +1 -1
  246. package/dist/services/fields.d.ts +5 -5
  247. package/dist/services/fields.js +49 -48
  248. package/dist/services/files.d.ts +1 -2
  249. package/dist/services/files.js +70 -108
  250. package/dist/services/flows.d.ts +2 -2
  251. package/dist/services/folders.d.ts +1 -1
  252. package/dist/services/graphql/index.d.ts +4 -4
  253. package/dist/services/graphql/index.js +181 -170
  254. package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -2
  255. package/dist/services/graphql/utils/process-error.d.ts +2 -2
  256. package/dist/services/graphql/utils/process-error.js +29 -9
  257. package/dist/services/import-export.d.ts +7 -5
  258. package/dist/services/import-export.js +41 -24
  259. package/dist/services/import-export.test.d.ts +1 -0
  260. package/dist/services/index.d.ts +1 -0
  261. package/dist/services/index.js +1 -0
  262. package/dist/services/items.d.ts +3 -3
  263. package/dist/services/items.js +67 -42
  264. package/dist/services/mail/index.d.ts +4 -4
  265. package/dist/services/mail/index.js +9 -5
  266. package/dist/services/meta.d.ts +3 -3
  267. package/dist/services/meta.js +10 -9
  268. package/dist/services/notifications.d.ts +3 -3
  269. package/dist/services/notifications.js +7 -6
  270. package/dist/services/operations.d.ts +2 -2
  271. package/dist/services/panels.d.ts +1 -1
  272. package/dist/services/payload.d.ts +3 -3
  273. package/dist/services/payload.js +124 -122
  274. package/dist/services/permissions.d.ts +3 -3
  275. package/dist/services/permissions.js +11 -11
  276. package/dist/services/presets.d.ts +1 -1
  277. package/dist/services/relations.d.ts +6 -6
  278. package/dist/services/relations.js +47 -43
  279. package/dist/services/revisions.d.ts +1 -1
  280. package/dist/services/roles.d.ts +2 -2
  281. package/dist/services/roles.js +34 -13
  282. package/dist/services/schema.d.ts +15 -0
  283. package/dist/services/schema.js +56 -0
  284. package/dist/services/schema.test.d.ts +1 -0
  285. package/dist/services/server.d.ts +3 -3
  286. package/dist/services/server.js +69 -13
  287. package/dist/services/settings.d.ts +1 -1
  288. package/dist/services/shares.d.ts +2 -2
  289. package/dist/services/shares.js +14 -15
  290. package/dist/services/specifications.d.ts +4 -4
  291. package/dist/services/specifications.js +132 -116
  292. package/dist/services/tfa.d.ts +2 -2
  293. package/dist/services/tfa.js +7 -5
  294. package/dist/services/users.d.ts +3 -3
  295. package/dist/services/users.js +89 -62
  296. package/dist/services/utils.d.ts +3 -3
  297. package/dist/services/utils.js +10 -8
  298. package/dist/services/webhooks.d.ts +2 -2
  299. package/dist/services/webhooks.js +2 -1
  300. package/dist/types/assets.d.ts +2 -2
  301. package/dist/types/ast.d.ts +1 -1
  302. package/dist/types/auth.d.ts +2 -2
  303. package/dist/types/collection.d.ts +2 -2
  304. package/dist/types/database.d.ts +3 -0
  305. package/dist/types/database.js +4 -0
  306. package/dist/types/events.d.ts +2 -2
  307. package/dist/types/graphql.d.ts +2 -2
  308. package/dist/types/index.d.ts +1 -0
  309. package/dist/types/index.js +1 -0
  310. package/dist/types/items.d.ts +7 -2
  311. package/dist/types/services.d.ts +5 -5
  312. package/dist/types/snapshot.d.ts +25 -3
  313. package/dist/types/snapshot.js +14 -0
  314. package/dist/utils/apply-diff.d.ts +9 -0
  315. package/dist/utils/apply-diff.js +256 -0
  316. package/dist/utils/apply-diff.test.d.ts +1 -0
  317. package/dist/utils/apply-query.d.ts +3 -3
  318. package/dist/utils/apply-query.js +15 -16
  319. package/dist/utils/apply-snapshot.d.ts +3 -5
  320. package/dist/utils/apply-snapshot.js +9 -240
  321. package/dist/utils/construct-flow-tree.d.ts +1 -1
  322. package/dist/utils/construct-flow-tree.js +2 -2
  323. package/dist/utils/filter-items.d.ts +1 -1
  324. package/dist/utils/get-accountability-for-role.d.ts +2 -2
  325. package/dist/utils/get-accountability-for-role.js +1 -1
  326. package/dist/utils/get-ast-from-query.d.ts +3 -3
  327. package/dist/utils/get-ast-from-query.js +22 -28
  328. package/dist/utils/get-cache-headers.d.ts +4 -2
  329. package/dist/utils/get-cache-headers.js +21 -21
  330. package/dist/utils/get-cache-headers.test.d.ts +1 -0
  331. package/dist/utils/get-cache-key.d.ts +1 -1
  332. package/dist/utils/get-cache-key.js +2 -3
  333. package/dist/utils/get-collection-from-alias.d.ts +1 -1
  334. package/dist/utils/get-column-path.d.ts +2 -2
  335. package/dist/utils/get-column-path.js +3 -4
  336. package/dist/utils/get-column.d.ts +4 -4
  337. package/dist/utils/get-column.js +4 -5
  338. package/dist/utils/get-default-value.d.ts +2 -2
  339. package/dist/utils/get-default-value.js +1 -2
  340. package/dist/utils/get-graphql-query-and-variables.d.ts +1 -1
  341. package/dist/utils/get-graphql-query-and-variables.js +1 -2
  342. package/dist/utils/get-graphql-type.d.ts +2 -2
  343. package/dist/utils/get-graphql-type.js +1 -1
  344. package/dist/utils/get-ip-from-req.d.ts +1 -1
  345. package/dist/utils/get-local-type.d.ts +1 -1
  346. package/dist/utils/get-local-type.js +3 -3
  347. package/dist/utils/get-milliseconds.d.ts +4 -0
  348. package/dist/utils/get-milliseconds.js +14 -0
  349. package/dist/utils/get-milliseconds.test.d.ts +1 -0
  350. package/dist/utils/get-permissions.d.ts +1 -1
  351. package/dist/utils/get-permissions.js +1 -1
  352. package/dist/utils/get-relation-info.d.ts +1 -1
  353. package/dist/utils/get-relation-info.js +3 -5
  354. package/dist/utils/get-relation-type.d.ts +1 -1
  355. package/dist/utils/get-relation-type.js +3 -4
  356. package/dist/utils/get-schema.d.ts +2 -2
  357. package/dist/utils/get-schema.js +19 -21
  358. package/dist/utils/get-snapshot-diff.js +10 -7
  359. package/dist/utils/get-snapshot.d.ts +3 -3
  360. package/dist/utils/get-snapshot.js +35 -14
  361. package/dist/utils/get-versioned-hash.d.ts +1 -0
  362. package/dist/utils/get-versioned-hash.js +12 -0
  363. package/dist/utils/get-versioned-hash.test.d.ts +1 -0
  364. package/dist/utils/is-directus-jwt.js +1 -1
  365. package/dist/utils/job-queue.js +2 -0
  366. package/dist/utils/jwt.d.ts +1 -1
  367. package/dist/utils/map-values-deep.d.ts +1 -0
  368. package/dist/utils/map-values-deep.js +29 -0
  369. package/dist/utils/map-values-deep.test.d.ts +1 -0
  370. package/dist/utils/merge-permissions-for-share.d.ts +1 -1
  371. package/dist/utils/merge-permissions-for-share.js +3 -4
  372. package/dist/utils/merge-permissions.d.ts +3 -3
  373. package/dist/utils/redact-header-cookies.d.ts +1 -0
  374. package/dist/utils/redact-header-cookies.js +11 -0
  375. package/dist/utils/redact-header-cookies.test.d.ts +1 -0
  376. package/dist/utils/reduce-schema.d.ts +1 -1
  377. package/dist/utils/reduce-schema.js +12 -12
  378. package/dist/utils/sanitize-query.d.ts +1 -1
  379. package/dist/utils/sanitize-query.js +1 -1
  380. package/dist/utils/sanitize-schema.d.ts +30 -0
  381. package/dist/utils/sanitize-schema.js +80 -0
  382. package/dist/utils/sanitize-schema.test.d.ts +1 -0
  383. package/dist/utils/should-skip-cache.d.ts +7 -0
  384. package/dist/utils/should-skip-cache.js +21 -0
  385. package/dist/utils/should-skip-cache.test.d.ts +1 -0
  386. package/dist/utils/track.js +3 -3
  387. package/dist/utils/transformations.d.ts +1 -1
  388. package/dist/utils/transformations.js +2 -4
  389. package/dist/utils/url.js +9 -8
  390. package/dist/utils/url.test.d.ts +1 -0
  391. package/dist/utils/user-name.d.ts +1 -1
  392. package/dist/utils/validate-diff.d.ts +7 -0
  393. package/dist/utils/validate-diff.js +113 -0
  394. package/dist/utils/validate-diff.test.d.ts +1 -0
  395. package/dist/utils/validate-keys.d.ts +2 -2
  396. package/dist/utils/validate-keys.js +1 -1
  397. package/dist/utils/validate-query.d.ts +1 -1
  398. package/dist/utils/validate-query.js +3 -3
  399. package/dist/utils/validate-query.test.d.ts +1 -0
  400. package/dist/utils/validate-snapshot.d.ts +5 -0
  401. package/dist/utils/validate-snapshot.js +71 -0
  402. package/dist/utils/validate-snapshot.test.d.ts +1 -0
  403. package/dist/webhooks.js +4 -3
  404. package/package.json +62 -62
@@ -45,6 +45,10 @@ const local_1 = require("./local");
45
45
  // tell samlify to use validator...
46
46
  samlify.setSchemaValidator(validator);
47
47
  class SAMLAuthDriver extends local_1.LocalAuthDriver {
48
+ idp;
49
+ sp;
50
+ usersService;
51
+ config;
48
52
  constructor(options, config) {
49
53
  super(options, config);
50
54
  this.config = config;
@@ -58,12 +62,12 @@ class SAMLAuthDriver extends local_1.LocalAuthDriver {
58
62
  .from('directus_users')
59
63
  .whereRaw('LOWER(??) = ?', ['external_identifier', identifier.toLowerCase()])
60
64
  .first();
61
- return user === null || user === void 0 ? void 0 : user.id;
65
+ return user?.id;
62
66
  }
63
67
  async getUserID(payload) {
64
68
  const { provider, emailKey, identifierKey, givenNameKey, familyNameKey, allowPublicRegistration } = this.config;
65
- const email = payload[emailKey !== null && emailKey !== void 0 ? emailKey : 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'];
66
- const identifier = payload[identifierKey !== null && identifierKey !== void 0 ? identifierKey : 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'];
69
+ const email = payload[emailKey ?? 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'];
70
+ const identifier = payload[identifierKey ?? 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'];
67
71
  const userID = await this.fetchUserID(identifier);
68
72
  if (userID)
69
73
  return userID;
@@ -71,8 +75,8 @@ class SAMLAuthDriver extends local_1.LocalAuthDriver {
71
75
  logger_1.default.trace(`[SAML] User doesn't exist, and public registration not allowed for provider "${provider}"`);
72
76
  throw new exceptions_2.InvalidCredentialsException();
73
77
  }
74
- const firstName = payload[givenNameKey !== null && givenNameKey !== void 0 ? givenNameKey : 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'];
75
- const lastName = payload[familyNameKey !== null && familyNameKey !== void 0 ? familyNameKey : 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname'];
78
+ const firstName = payload[givenNameKey ?? 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'];
79
+ const lastName = payload[familyNameKey ?? 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname'];
76
80
  try {
77
81
  return await this.usersService.createOne({
78
82
  provider,
@@ -126,8 +130,7 @@ function createSAMLAuthRouter(providerName) {
126
130
  return res.redirect(context);
127
131
  }));
128
132
  router.post('/acs', express_1.default.urlencoded({ extended: false }), (0, async_handler_1.default)(async (req, res, next) => {
129
- var _a;
130
- const relayState = (_a = req.body) === null || _a === void 0 ? void 0 : _a.RelayState;
133
+ const relayState = req.body?.RelayState;
131
134
  try {
132
135
  const { sp, idp } = (0, auth_1.getAuthProvider)(providerName);
133
136
  const { extract } = await sp.parseLoginResponse(idp, 'post', req);
package/dist/auth.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { AuthDriver } from './auth/auth';
1
+ import type { AuthDriver } from './auth/auth';
2
2
  export declare function getAuthProvider(provider: string): AuthDriver;
3
3
  export declare function registerAuthProviders(): Promise<void>;
package/dist/auth.js CHANGED
@@ -4,15 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.registerAuthProviders = exports.getAuthProvider = void 0;
7
- const database_1 = __importDefault(require("./database"));
8
- const env_1 = __importDefault(require("./env"));
9
- const logger_1 = __importDefault(require("./logger"));
7
+ const utils_1 = require("@directus/shared/utils");
10
8
  const drivers_1 = require("./auth/drivers");
11
9
  const constants_1 = require("./constants");
10
+ const database_1 = __importDefault(require("./database"));
11
+ const env_1 = __importDefault(require("./env"));
12
12
  const exceptions_1 = require("./exceptions");
13
+ const logger_1 = __importDefault(require("./logger"));
13
14
  const get_config_from_env_1 = require("./utils/get-config-from-env");
14
15
  const get_schema_1 = require("./utils/get-schema");
15
- const utils_1 = require("@directus/shared/utils");
16
16
  const providerNames = (0, utils_1.toArray)(env_1.default.AUTH_PROVIDERS);
17
17
  const providers = new Map();
18
18
  function getAuthProvider(provider) {
package/dist/cache.d.ts CHANGED
@@ -1,12 +1,20 @@
1
1
  import Keyv from 'keyv';
2
+ import type { SchemaOverview } from '@directus/shared/types';
2
3
  export declare function getCache(): {
3
4
  cache: Keyv | null;
4
5
  systemCache: Keyv;
6
+ sharedSchemaCache: Keyv;
7
+ localSchemaCache: Keyv;
5
8
  lockCache: Keyv;
6
9
  };
7
10
  export declare function flushCaches(forced?: boolean): Promise<void>;
8
- export declare function clearSystemCache(forced?: boolean): Promise<void>;
11
+ export declare function clearSystemCache(opts?: {
12
+ forced?: boolean | undefined;
13
+ autoPurgeCache?: false | undefined;
14
+ }): Promise<void>;
9
15
  export declare function setSystemCache(key: string, value: any, ttl?: number): Promise<void>;
10
16
  export declare function getSystemCache(key: string): Promise<Record<string, any>>;
17
+ export declare function setSchemaCache(schema: SchemaOverview): Promise<void>;
18
+ export declare function getSchemaCache(): Promise<SchemaOverview | undefined>;
11
19
  export declare function setCacheValue(cache: Keyv, key: string, value: Record<string, any> | Record<string, any>[], ttl?: number): Promise<void>;
12
20
  export declare function getCacheValue(cache: Keyv, key: string): Promise<any>;
package/dist/cache.js CHANGED
@@ -3,48 +3,72 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getCacheValue = exports.setCacheValue = exports.getSystemCache = exports.setSystemCache = exports.clearSystemCache = exports.flushCaches = exports.getCache = void 0;
6
+ exports.getCacheValue = exports.setCacheValue = exports.getSchemaCache = exports.setSchemaCache = exports.getSystemCache = exports.setSystemCache = exports.clearSystemCache = exports.flushCaches = exports.getCache = void 0;
7
7
  const keyv_1 = __importDefault(require("keyv"));
8
- const ms_1 = __importDefault(require("ms"));
9
8
  const env_1 = __importDefault(require("./env"));
10
9
  const logger_1 = __importDefault(require("./logger"));
10
+ const compress_1 = require("./utils/compress");
11
11
  const get_config_from_env_1 = require("./utils/get-config-from-env");
12
+ const get_milliseconds_1 = require("./utils/get-milliseconds");
12
13
  const validate_env_1 = require("./utils/validate-env");
13
- const compress_1 = require("./utils/compress");
14
+ const messenger_1 = require("./messenger");
15
+ const utils_1 = require("@directus/shared/utils");
14
16
  let cache = null;
15
17
  let systemCache = null;
18
+ let localSchemaCache = null;
19
+ let sharedSchemaCache = null;
16
20
  let lockCache = null;
21
+ let messengerSubscribed = false;
22
+ const messenger = (0, messenger_1.getMessenger)();
23
+ if (env_1.default.MESSENGER_STORE === 'redis' && env_1.default.CACHE_STORE === 'memory' && env_1.default.CACHE_AUTO_PURGE && !messengerSubscribed) {
24
+ messengerSubscribed = true;
25
+ messenger.subscribe('schemaChanged', async (opts) => {
26
+ if (cache && opts?.autoPurgeCache !== false) {
27
+ await cache.clear();
28
+ }
29
+ });
30
+ }
17
31
  function getCache() {
18
32
  if (env_1.default.CACHE_ENABLED === true && cache === null) {
19
33
  (0, validate_env_1.validateEnv)(['CACHE_NAMESPACE', 'CACHE_TTL', 'CACHE_STORE']);
20
- cache = getKeyvInstance(env_1.default.CACHE_TTL ? (0, ms_1.default)(env_1.default.CACHE_TTL) : undefined);
34
+ cache = getKeyvInstance(env_1.default.CACHE_STORE, (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_TTL));
21
35
  cache.on('error', (err) => logger_1.default.warn(err, `[cache] ${err}`));
22
36
  }
23
37
  if (systemCache === null) {
24
- systemCache = getKeyvInstance(env_1.default.CACHE_SYSTEM_TTL ? (0, ms_1.default)(env_1.default.CACHE_SYSTEM_TTL) : undefined, '_system');
25
- systemCache.on('error', (err) => logger_1.default.warn(err, `[cache] ${err}`));
38
+ systemCache = getKeyvInstance(env_1.default.CACHE_STORE, (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_SYSTEM_TTL), '_system');
39
+ systemCache.on('error', (err) => logger_1.default.warn(err, `[system-cache] ${err}`));
40
+ }
41
+ if (sharedSchemaCache === null) {
42
+ sharedSchemaCache = getKeyvInstance(env_1.default.CACHE_STORE, (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_SYSTEM_TTL), '_schema_shared');
43
+ sharedSchemaCache.on('error', (err) => logger_1.default.warn(err, `[shared-schema-cache] ${err}`));
44
+ }
45
+ if (localSchemaCache === null) {
46
+ localSchemaCache = getKeyvInstance('memory', (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_SYSTEM_TTL), '_schema');
47
+ localSchemaCache.on('error', (err) => logger_1.default.warn(err, `[schema-cache] ${err}`));
26
48
  }
27
49
  if (lockCache === null) {
28
- lockCache = getKeyvInstance(undefined, '_lock');
29
- lockCache.on('error', (err) => logger_1.default.warn(err, `[cache] ${err}`));
50
+ lockCache = getKeyvInstance(env_1.default.CACHE_STORE, undefined, '_lock');
51
+ lockCache.on('error', (err) => logger_1.default.warn(err, `[lock-cache] ${err}`));
30
52
  }
31
- return { cache, systemCache, lockCache };
53
+ return { cache, systemCache, sharedSchemaCache, localSchemaCache, lockCache };
32
54
  }
33
55
  exports.getCache = getCache;
34
56
  async function flushCaches(forced) {
35
57
  const { cache } = getCache();
36
- await clearSystemCache(forced);
37
- await (cache === null || cache === void 0 ? void 0 : cache.clear());
58
+ await clearSystemCache({ forced });
59
+ await cache?.clear();
38
60
  }
39
61
  exports.flushCaches = flushCaches;
40
- async function clearSystemCache(forced) {
41
- const { systemCache, lockCache } = getCache();
62
+ async function clearSystemCache(opts) {
63
+ const { systemCache, localSchemaCache, lockCache } = getCache();
42
64
  // Flush system cache when forced or when system cache lock not set
43
- if (forced || !(await lockCache.get('system-cache-lock'))) {
65
+ if (opts?.forced || !(await lockCache.get('system-cache-lock'))) {
44
66
  await lockCache.set('system-cache-lock', true, 10000);
45
67
  await systemCache.clear();
46
68
  await lockCache.delete('system-cache-lock');
47
69
  }
70
+ await localSchemaCache.clear();
71
+ messenger.publish('schemaChanged', { autoPurgeCache: opts?.autoPurgeCache });
48
72
  }
49
73
  exports.clearSystemCache = clearSystemCache;
50
74
  async function setSystemCache(key, value, ttl) {
@@ -59,6 +83,25 @@ async function getSystemCache(key) {
59
83
  return await getCacheValue(systemCache, key);
60
84
  }
61
85
  exports.getSystemCache = getSystemCache;
86
+ async function setSchemaCache(schema) {
87
+ const { localSchemaCache, sharedSchemaCache } = getCache();
88
+ const schemaHash = await (0, utils_1.getSimpleHash)(JSON.stringify(schema));
89
+ await sharedSchemaCache.set('hash', schemaHash);
90
+ await localSchemaCache.set('schema', schema);
91
+ await localSchemaCache.set('hash', schemaHash);
92
+ }
93
+ exports.setSchemaCache = setSchemaCache;
94
+ async function getSchemaCache() {
95
+ const { localSchemaCache, sharedSchemaCache } = getCache();
96
+ const sharedSchemaHash = await sharedSchemaCache.get('hash');
97
+ if (!sharedSchemaHash)
98
+ return;
99
+ const localSchemaHash = await localSchemaCache.get('hash');
100
+ if (!localSchemaHash || localSchemaHash !== sharedSchemaHash)
101
+ return;
102
+ return await localSchemaCache.get('schema');
103
+ }
104
+ exports.getSchemaCache = getSchemaCache;
62
105
  async function setCacheValue(cache, key, value, ttl) {
63
106
  const compressed = await (0, compress_1.compress)(value);
64
107
  await cache.set(key, compressed, ttl);
@@ -72,8 +115,8 @@ async function getCacheValue(cache, key) {
72
115
  return decompressed;
73
116
  }
74
117
  exports.getCacheValue = getCacheValue;
75
- function getKeyvInstance(ttl, namespaceSuffix) {
76
- switch (env_1.default.CACHE_STORE) {
118
+ function getKeyvInstance(store, ttl, namespaceSuffix) {
119
+ switch (store) {
77
120
  case 'redis':
78
121
  return new keyv_1.default(getConfig('redis', ttl, namespaceSuffix));
79
122
  case 'memcache':
@@ -26,13 +26,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
+ const database_1 = __importStar(require("../../../database"));
29
30
  const run_1 = __importDefault(require("../../../database/migrations/run"));
30
31
  const run_2 = __importDefault(require("../../../database/seeds/run"));
31
32
  const env_1 = __importDefault(require("../../../env"));
32
33
  const logger_1 = __importDefault(require("../../../logger"));
33
- const get_schema_1 = require("../../../utils/get-schema");
34
34
  const services_1 = require("../../../services");
35
- const database_1 = __importStar(require("../../../database"));
35
+ const get_schema_1 = require("../../../utils/get-schema");
36
36
  const defaults_1 = require("../../utils/defaults");
37
37
  async function bootstrap({ skipAdminInit }) {
38
38
  logger_1.default.info('Initializing bootstrap...');
@@ -6,17 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const chalk_1 = __importDefault(require("chalk"));
7
7
  const execa_1 = __importDefault(require("execa"));
8
8
  const inquirer_1 = __importDefault(require("inquirer"));
9
+ const joi_1 = __importDefault(require("joi"));
9
10
  const ora_1 = __importDefault(require("ora"));
10
11
  const uuid_1 = require("uuid");
11
- const joi_1 = __importDefault(require("joi"));
12
12
  const run_1 = __importDefault(require("../../../database/migrations/run"));
13
13
  const run_2 = __importDefault(require("../../../database/seeds/run"));
14
+ const generate_hash_1 = require("../../../utils/generate-hash");
14
15
  const create_db_connection_1 = __importDefault(require("../../utils/create-db-connection"));
15
16
  const create_env_1 = __importDefault(require("../../utils/create-env"));
17
+ const defaults_1 = require("../../utils/defaults");
16
18
  const drivers_1 = require("../../utils/drivers");
17
19
  const questions_1 = require("./questions");
18
- const generate_hash_1 = require("../../../utils/generate-hash");
19
- const defaults_1 = require("../../utils/defaults");
20
20
  async function init() {
21
21
  const rootPath = process.cwd();
22
22
  const { client } = await inquirer_1.default.prompt([
@@ -35,11 +35,12 @@ const js_yaml_1 = require("js-yaml");
35
35
  const path_1 = __importDefault(require("path"));
36
36
  const database_1 = __importStar(require("../../../database"));
37
37
  const logger_1 = __importDefault(require("../../../logger"));
38
+ const types_1 = require("../../../types");
39
+ const apply_diff_1 = require("../../../utils/apply-diff");
38
40
  const apply_snapshot_1 = require("../../../utils/apply-snapshot");
39
41
  const get_snapshot_1 = require("../../../utils/get-snapshot");
40
42
  const get_snapshot_diff_1 = require("../../../utils/get-snapshot-diff");
41
43
  async function apply(snapshotPath, options) {
42
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
43
44
  const filename = path_1.default.resolve(process.cwd(), snapshotPath);
44
45
  const database = (0, database_1.default)();
45
46
  await (0, database_1.validateDatabaseConnection)(database);
@@ -66,29 +67,29 @@ async function apply(snapshotPath, options) {
66
67
  database.destroy();
67
68
  process.exit(0);
68
69
  }
69
- const dryRun = (options === null || options === void 0 ? void 0 : options.dryRun) === true;
70
- const promptForChanges = !dryRun && (options === null || options === void 0 ? void 0 : options.yes) !== true;
70
+ const dryRun = options?.dryRun === true;
71
+ const promptForChanges = !dryRun && options?.yes !== true;
71
72
  if (dryRun || promptForChanges) {
72
73
  let message = '';
73
74
  if (snapshotDiff.collections.length > 0) {
74
75
  message += chalk_1.default.black.underline.bold('Collections:');
75
76
  for (const { collection, diff } of snapshotDiff.collections) {
76
- if (((_a = diff[0]) === null || _a === void 0 ? void 0 : _a.kind) === 'E') {
77
+ if (diff[0]?.kind === types_1.DiffKind.EDIT) {
77
78
  message += `\n - ${chalk_1.default.blue('Update')} ${collection}`;
78
79
  for (const change of diff) {
79
- if (change.kind === 'E') {
80
+ if (change.kind === types_1.DiffKind.EDIT) {
80
81
  const path = change.path.slice(1).join('.');
81
82
  message += `\n - Set ${path} to ${change.rhs}`;
82
83
  }
83
84
  }
84
85
  }
85
- else if (((_b = diff[0]) === null || _b === void 0 ? void 0 : _b.kind) === 'D') {
86
+ else if (diff[0]?.kind === types_1.DiffKind.DELETE) {
86
87
  message += `\n - ${chalk_1.default.red('Delete')} ${collection}`;
87
88
  }
88
- else if (((_c = diff[0]) === null || _c === void 0 ? void 0 : _c.kind) === 'N') {
89
+ else if (diff[0]?.kind === types_1.DiffKind.NEW) {
89
90
  message += `\n - ${chalk_1.default.green('Create')} ${collection}`;
90
91
  }
91
- else if (((_d = diff[0]) === null || _d === void 0 ? void 0 : _d.kind) === 'A') {
92
+ else if (diff[0]?.kind === types_1.DiffKind.ARRAY) {
92
93
  message += `\n - ${chalk_1.default.blue('Update')} ${collection}`;
93
94
  }
94
95
  }
@@ -96,28 +97,28 @@ async function apply(snapshotPath, options) {
96
97
  if (snapshotDiff.fields.length > 0) {
97
98
  message += '\n\n' + chalk_1.default.black.underline.bold('Fields:');
98
99
  for (const { collection, field, diff } of snapshotDiff.fields) {
99
- if (((_e = diff[0]) === null || _e === void 0 ? void 0 : _e.kind) === 'E' || (0, apply_snapshot_1.isNestedMetaUpdate)(diff[0])) {
100
+ if (diff[0]?.kind === types_1.DiffKind.EDIT || (0, apply_diff_1.isNestedMetaUpdate)(diff[0])) {
100
101
  message += `\n - ${chalk_1.default.blue('Update')} ${collection}.${field}`;
101
102
  for (const change of diff) {
102
103
  const path = change.path.slice(1).join('.');
103
- if (change.kind === 'E') {
104
+ if (change.kind === types_1.DiffKind.EDIT) {
104
105
  message += `\n - Set ${path} to ${change.rhs}`;
105
106
  }
106
- else if (change.kind === 'D') {
107
+ else if (change.kind === types_1.DiffKind.DELETE) {
107
108
  message += `\n - Remove ${path}`;
108
109
  }
109
- else if (change.kind === 'N') {
110
+ else if (change.kind === types_1.DiffKind.NEW) {
110
111
  message += `\n - Add ${path} and set it to ${change.rhs}`;
111
112
  }
112
113
  }
113
114
  }
114
- else if (((_f = diff[0]) === null || _f === void 0 ? void 0 : _f.kind) === 'D') {
115
+ else if (diff[0]?.kind === types_1.DiffKind.DELETE) {
115
116
  message += `\n - ${chalk_1.default.red('Delete')} ${collection}.${field}`;
116
117
  }
117
- else if (((_g = diff[0]) === null || _g === void 0 ? void 0 : _g.kind) === 'N') {
118
+ else if (diff[0]?.kind === types_1.DiffKind.NEW) {
118
119
  message += `\n - ${chalk_1.default.green('Create')} ${collection}.${field}`;
119
120
  }
120
- else if (((_h = diff[0]) === null || _h === void 0 ? void 0 : _h.kind) === 'A') {
121
+ else if (diff[0]?.kind === types_1.DiffKind.ARRAY) {
121
122
  message += `\n - ${chalk_1.default.blue('Update')} ${collection}.${field}`;
122
123
  }
123
124
  }
@@ -125,22 +126,22 @@ async function apply(snapshotPath, options) {
125
126
  if (snapshotDiff.relations.length > 0) {
126
127
  message += '\n\n' + chalk_1.default.black.underline.bold('Relations:');
127
128
  for (const { collection, field, related_collection, diff } of snapshotDiff.relations) {
128
- if (((_j = diff[0]) === null || _j === void 0 ? void 0 : _j.kind) === 'E') {
129
+ if (diff[0]?.kind === types_1.DiffKind.EDIT) {
129
130
  message += `\n - ${chalk_1.default.blue('Update')} ${collection}.${field}`;
130
131
  for (const change of diff) {
131
- if (change.kind === 'E') {
132
+ if (change.kind === types_1.DiffKind.EDIT) {
132
133
  const path = change.path.slice(1).join('.');
133
134
  message += `\n - Set ${path} to ${change.rhs}`;
134
135
  }
135
136
  }
136
137
  }
137
- else if (((_k = diff[0]) === null || _k === void 0 ? void 0 : _k.kind) === 'D') {
138
+ else if (diff[0]?.kind === types_1.DiffKind.DELETE) {
138
139
  message += `\n - ${chalk_1.default.red('Delete')} ${collection}.${field}`;
139
140
  }
140
- else if (((_l = diff[0]) === null || _l === void 0 ? void 0 : _l.kind) === 'N') {
141
+ else if (diff[0]?.kind === types_1.DiffKind.NEW) {
141
142
  message += `\n - ${chalk_1.default.green('Create')} ${collection}.${field}`;
142
143
  }
143
- else if (((_m = diff[0]) === null || _m === void 0 ? void 0 : _m.kind) === 'A') {
144
+ else if (diff[0]?.kind === types_1.DiffKind.ARRAY) {
144
145
  message += `\n - ${chalk_1.default.blue('Update')} ${collection}.${field}`;
145
146
  }
146
147
  else {
@@ -16,7 +16,7 @@ async function snapshot(snapshotPath, options) {
16
16
  try {
17
17
  const snapshot = await (0, get_snapshot_1.getSnapshot)({ database });
18
18
  let snapshotString;
19
- if ((options === null || options === void 0 ? void 0 : options.format) === 'yaml') {
19
+ if (options?.format === 'yaml') {
20
20
  snapshotString = (0, js_yaml_1.dump)(snapshot);
21
21
  }
22
22
  else {
@@ -32,7 +32,7 @@ async function snapshot(snapshotPath, options) {
32
32
  catch {
33
33
  snapshotExists = false;
34
34
  }
35
- if (snapshotExists && (options === null || options === void 0 ? void 0 : options.yes) === false) {
35
+ if (snapshotExists && options?.yes === false) {
36
36
  const { overwrite } = await inquirer_1.default.prompt([
37
37
  {
38
38
  type: 'confirm',
@@ -1,4 +1,5 @@
1
1
  import { Knex } from 'knex';
2
+ import type { Driver } from '../../types';
2
3
  export type Credentials = {
3
4
  filename?: string;
4
5
  host?: string;
@@ -9,4 +10,4 @@ export type Credentials = {
9
10
  ssl?: boolean;
10
11
  options__encrypt?: boolean;
11
12
  };
12
- export default function createDBConnection(client: 'sqlite3' | 'mysql' | 'pg' | 'oracledb' | 'mssql' | 'cockroachdb', credentials: Credentials): Knex<any, unknown[]>;
13
+ export default function createDBConnection(client: Driver, credentials: Credentials): Knex<any, unknown[]>;
@@ -29,7 +29,8 @@ function createDBConnection(client, credentials) {
29
29
  }
30
30
  if (client === 'mssql') {
31
31
  const { options__encrypt } = credentials;
32
- connection['options'] = {
32
+ connection = {
33
+ ...connection,
33
34
  encrypt: options__encrypt,
34
35
  };
35
36
  }
@@ -167,7 +167,7 @@ STORAGE_LOCAL_ROOT="./uploads"
167
167
  # STORAGE_DIGITALOCEAN_DRIVER="s3"
168
168
  # STORAGE_DIGITALOCEAN_KEY="abcdef"
169
169
  # STORAGE_DIGITALOCEAN_SECRET="ghijkl"
170
- # STORAGE_DIGITALOCEAN_ENDPOINT="ams3.digitaloceanspaces.com"
170
+ # STORAGE_DIGITALOCEAN_ENDPOINT="https://ams3.digitaloceanspaces.com"
171
171
  # STORAGE_DIGITALOCEAN_BUCKET="my-files"
172
172
  # STORAGE_DIGITALOCEAN_REGION="ams3"
173
173
 
@@ -1,3 +1,3 @@
1
- import { Credentials } from '../create-db-connection';
2
- import { drivers } from '../drivers';
1
+ import type { Credentials } from '../create-db-connection';
2
+ import type { drivers } from '../drivers';
3
3
  export default function createEnv(client: keyof typeof drivers, credentials: Credentials, directory: string): Promise<void>;
@@ -1,9 +1,3 @@
1
- export declare const drivers: {
2
- pg: string;
3
- cockroachdb: string;
4
- mysql: string;
5
- sqlite3: string;
6
- mssql: string;
7
- oracledb: string;
8
- };
9
- export declare function getDriverForClient(client: string): keyof typeof drivers | null;
1
+ import type { Driver } from '../../types';
2
+ export declare const drivers: Record<Driver, string>;
3
+ export declare function getDriverForClient(client: string): Driver | null;
@@ -1,4 +1,5 @@
1
- import { TransformationParams } from './types';
1
+ import type { CookieOptions } from 'express';
2
+ import type { TransformationParams } from './types';
2
3
  export declare const SYSTEM_ASSET_ALLOW_LIST: TransformationParams[];
3
4
  export declare const ASSET_TRANSFORM_QUERY_KEYS: string[];
4
5
  export declare const FILTER_VARIABLES: string[];
@@ -7,12 +8,5 @@ export declare const DEFAULT_AUTH_PROVIDER = "default";
7
8
  export declare const COLUMN_TRANSFORMS: string[];
8
9
  export declare const GENERATE_SPECIAL: string[];
9
10
  export declare const UUID_REGEX = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
10
- export declare const COOKIE_OPTIONS: {
11
- httpOnly: boolean;
12
- domain: any;
13
- maxAge: number;
14
- secure: any;
15
- sameSite: "lax" | "strict" | "none";
16
- };
17
- export declare const ROBOTSTXT: string;
11
+ export declare const COOKIE_OPTIONS: CookieOptions;
18
12
  export declare const OAS_REQUIRED_SCHEMAS: string[];
package/dist/constants.js CHANGED
@@ -2,11 +2,10 @@
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
- var _a;
6
5
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.OAS_REQUIRED_SCHEMAS = exports.ROBOTSTXT = exports.COOKIE_OPTIONS = exports.UUID_REGEX = exports.GENERATE_SPECIAL = exports.COLUMN_TRANSFORMS = exports.DEFAULT_AUTH_PROVIDER = exports.ALIAS_TYPES = exports.FILTER_VARIABLES = exports.ASSET_TRANSFORM_QUERY_KEYS = exports.SYSTEM_ASSET_ALLOW_LIST = void 0;
6
+ exports.OAS_REQUIRED_SCHEMAS = exports.COOKIE_OPTIONS = exports.UUID_REGEX = exports.GENERATE_SPECIAL = exports.COLUMN_TRANSFORMS = exports.DEFAULT_AUTH_PROVIDER = exports.ALIAS_TYPES = exports.FILTER_VARIABLES = exports.ASSET_TRANSFORM_QUERY_KEYS = exports.SYSTEM_ASSET_ALLOW_LIST = void 0;
8
7
  const env_1 = __importDefault(require("./env"));
9
- const ms_1 = __importDefault(require("ms"));
8
+ const get_milliseconds_1 = require("./utils/get-milliseconds");
10
9
  exports.SYSTEM_ASSET_ALLOW_LIST = [
11
10
  {
12
11
  key: 'system-small-cover',
@@ -52,12 +51,8 @@ exports.UUID_REGEX = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{1
52
51
  exports.COOKIE_OPTIONS = {
53
52
  httpOnly: true,
54
53
  domain: env_1.default.REFRESH_TOKEN_COOKIE_DOMAIN,
55
- maxAge: (0, ms_1.default)(env_1.default.REFRESH_TOKEN_TTL),
56
- secure: (_a = env_1.default.REFRESH_TOKEN_COOKIE_SECURE) !== null && _a !== void 0 ? _a : false,
54
+ maxAge: (0, get_milliseconds_1.getMilliseconds)(env_1.default.REFRESH_TOKEN_TTL),
55
+ secure: env_1.default.REFRESH_TOKEN_COOKIE_SECURE ?? false,
57
56
  sameSite: env_1.default.REFRESH_TOKEN_COOKIE_SAME_SITE || 'strict',
58
57
  };
59
- exports.ROBOTSTXT = `
60
- User-agent: *
61
- Disallow: /
62
- `.trim();
63
- exports.OAS_REQUIRED_SCHEMAS = ['Query', 'x-metadata'];
58
+ exports.OAS_REQUIRED_SCHEMAS = ['Diff', 'Schema', 'Query', 'x-metadata'];
@@ -60,7 +60,6 @@ const createCommentSchema = joi_1.default.object({
60
60
  item: [joi_1.default.number().required(), joi_1.default.string().required()],
61
61
  });
62
62
  router.post('/comment', (0, async_handler_1.default)(async (req, res, next) => {
63
- var _a;
64
63
  const service = new services_1.ActivityService({
65
64
  accountability: req.accountability,
66
65
  schema: req.schema,
@@ -72,7 +71,7 @@ router.post('/comment', (0, async_handler_1.default)(async (req, res, next) => {
72
71
  const primaryKey = await service.createOne({
73
72
  ...req.body,
74
73
  action: types_1.Action.COMMENT,
75
- user: (_a = req.accountability) === null || _a === void 0 ? void 0 : _a.user,
74
+ user: req.accountability?.user,
76
75
  ip: (0, get_ip_from_req_1.getIPFromReq)(req),
77
76
  user_agent: req.get('user-agent'),
78
77
  origin: req.get('origin'),
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const utils_1 = require("@directus/shared/utils");
7
7
  const express_1 = require("express");
8
8
  const lodash_1 = require("lodash");
9
- const ms_1 = __importDefault(require("ms"));
10
9
  const constants_1 = require("../constants");
11
10
  const database_1 = __importDefault(require("../database"));
12
11
  const env_1 = __importDefault(require("../env"));
@@ -16,7 +15,9 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
16
15
  const services_1 = require("../services");
17
16
  const assets_1 = require("../types/assets");
18
17
  const async_handler_1 = __importDefault(require("../utils/async-handler"));
18
+ const get_cache_headers_1 = require("../utils/get-cache-headers");
19
19
  const get_config_from_env_1 = require("../utils/get-config-from-env");
20
+ const get_milliseconds_1 = require("../utils/get-milliseconds");
20
21
  const router = (0, express_1.Router)();
21
22
  router.use((0, use_collection_1.default)('directus_files'));
22
23
  router.get('/:pk/:filename?',
@@ -102,8 +103,7 @@ router.get('/:pk/:filename?',
102
103
  }),
103
104
  // Return file
104
105
  (0, async_handler_1.default)(async (req, res) => {
105
- var _a, _b, _c;
106
- const id = (_a = req.params.pk) === null || _a === void 0 ? void 0 : _a.substring(0, 36);
106
+ const id = req.params.pk?.substring(0, 36);
107
107
  const service = new services_1.AssetsService({
108
108
  accountability: req.accountability,
109
109
  schema: req.schema,
@@ -114,20 +114,25 @@ router.get('/:pk/:filename?',
114
114
  let range = undefined;
115
115
  if (req.headers.range) {
116
116
  const rangeParts = /bytes=([0-9]*)-([0-9]*)/.exec(req.headers.range);
117
- range = {
118
- start: (rangeParts === null || rangeParts === void 0 ? void 0 : rangeParts[1]) ? Number(rangeParts[1]) : undefined,
119
- end: (rangeParts === null || rangeParts === void 0 ? void 0 : rangeParts[2]) ? Number(rangeParts[2]) : undefined,
120
- };
121
- if (Number.isNaN(range.start) || Number.isNaN(range.end)) {
122
- throw new exceptions_1.RangeNotSatisfiableException(range);
117
+ if (rangeParts && rangeParts.length > 1) {
118
+ range = {};
119
+ if (rangeParts[1]) {
120
+ range.start = Number(rangeParts[1]);
121
+ if (Number.isNaN(range.start))
122
+ throw new exceptions_1.RangeNotSatisfiableException(range);
123
+ }
124
+ if (rangeParts[2]) {
125
+ range.end = Number(rangeParts[2]);
126
+ if (Number.isNaN(range.end))
127
+ throw new exceptions_1.RangeNotSatisfiableException(range);
128
+ }
123
129
  }
124
130
  }
125
131
  const { stream, file, stat } = await service.getAsset(id, transformation, range);
126
- const access = ((_b = req.accountability) === null || _b === void 0 ? void 0 : _b.role) ? 'private' : 'public';
127
- res.attachment((_c = req.params.filename) !== null && _c !== void 0 ? _c : file.filename_download);
132
+ res.attachment(req.params.filename ?? file.filename_download);
128
133
  res.setHeader('Content-Type', file.type);
129
134
  res.setHeader('Accept-Ranges', 'bytes');
130
- res.setHeader('Cache-Control', `${access}, max-age=${(0, ms_1.default)(env_1.default.ASSETS_CACHE_TTL) / 1000}`);
135
+ res.setHeader('Cache-Control', (0, get_cache_headers_1.getCacheControlHeader)(req, (0, get_milliseconds_1.getMilliseconds)(env_1.default.ASSETS_CACHE_TTL), false, true));
131
136
  const unixTime = Date.parse(file.modified_on);
132
137
  if (!Number.isNaN(unixTime)) {
133
138
  const lastModifiedDate = new Date(unixTime);