@directus/api 32.1.1 → 33.0.0

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 (336) hide show
  1. package/dist/ai/chat/constants/system-prompt.d.ts +1 -0
  2. package/dist/ai/chat/constants/system-prompt.js +51 -0
  3. package/dist/ai/chat/controllers/chat.post.d.ts +2 -0
  4. package/dist/ai/chat/controllers/chat.post.js +47 -0
  5. package/dist/ai/chat/lib/create-ui-stream.d.ts +15 -0
  6. package/dist/ai/chat/lib/create-ui-stream.js +42 -0
  7. package/dist/ai/chat/middleware/load-settings.d.ts +2 -0
  8. package/dist/ai/chat/middleware/load-settings.js +18 -0
  9. package/dist/ai/chat/models/chat-request.d.ts +34 -0
  10. package/dist/ai/chat/models/chat-request.js +26 -0
  11. package/dist/ai/chat/models/providers.d.ts +9 -0
  12. package/dist/ai/chat/models/providers.js +9 -0
  13. package/dist/ai/chat/router.d.ts +1 -0
  14. package/dist/ai/chat/router.js +5 -0
  15. package/dist/ai/chat/utils/chat-request-tool-to-ai-sdk-tool.d.ts +9 -0
  16. package/dist/ai/chat/utils/chat-request-tool-to-ai-sdk-tool.js +38 -0
  17. package/dist/ai/chat/utils/fix-error-tool-calls.d.ts +12 -0
  18. package/dist/ai/chat/utils/fix-error-tool-calls.js +30 -0
  19. package/dist/ai/chat/utils/parse-json-schema-7.d.ts +13 -0
  20. package/dist/ai/chat/utils/parse-json-schema-7.js +75 -0
  21. package/dist/{mcp → ai/mcp}/server.d.ts +13 -16
  22. package/dist/{mcp → ai/mcp}/server.js +4 -13
  23. package/dist/ai/mcp/types.d.ts +15 -0
  24. package/dist/{mcp/tools/assets.js → ai/tools/assets/index.js} +8 -5
  25. package/dist/{mcp/tools/collections.js → ai/tools/collections/index.js} +7 -4
  26. package/dist/{mcp/tools/fields.js → ai/tools/fields/index.js} +12 -9
  27. package/dist/{mcp/tools/files.js → ai/tools/files/index.js} +11 -5
  28. package/dist/{mcp/tools/flows.js → ai/tools/flows/index.js} +11 -5
  29. package/dist/{mcp/tools/folders.js → ai/tools/folders/index.js} +12 -5
  30. package/dist/ai/tools/index.d.ts +15 -0
  31. package/dist/ai/tools/index.js +29 -0
  32. package/dist/{mcp/tools/items.js → ai/tools/items/index.js} +13 -6
  33. package/dist/{mcp/tools/prompts/items.md → ai/tools/items/prompt.md} +19 -15
  34. package/dist/{mcp/tools/operations.d.ts → ai/tools/operations/index.d.ts} +46 -0
  35. package/dist/{mcp/tools/operations.js → ai/tools/operations/index.js} +12 -5
  36. package/dist/{mcp/tools/relations.js → ai/tools/relations/index.js} +7 -4
  37. package/dist/{mcp/tools/schema.d.ts → ai/tools/schema/index.d.ts} +1 -1
  38. package/dist/{mcp/tools/schema.js → ai/tools/schema/index.js} +9 -6
  39. package/dist/{mcp/tools/system.js → ai/tools/system/index.js} +7 -4
  40. package/dist/{mcp/tools/trigger-flow.js → ai/tools/trigger-flow/index.js} +8 -5
  41. package/dist/{mcp → ai/tools}/types.d.ts +1 -17
  42. package/dist/ai/tools/utils.d.ts +9 -0
  43. package/dist/ai/tools/utils.js +17 -0
  44. package/dist/app.js +11 -6
  45. package/dist/auth/drivers/ldap.js +2 -2
  46. package/dist/auth/drivers/local.js +1 -1
  47. package/dist/auth/drivers/oauth2.d.ts +1 -2
  48. package/dist/auth/drivers/oauth2.js +22 -17
  49. package/dist/auth/drivers/openid.d.ts +1 -2
  50. package/dist/auth/drivers/openid.js +18 -13
  51. package/dist/auth/drivers/saml.js +6 -3
  52. package/dist/auth/utils/generate-callback-url.d.ts +11 -0
  53. package/dist/auth/utils/generate-callback-url.js +40 -0
  54. package/dist/auth/utils/is-login-redirect-allowed.d.ts +7 -0
  55. package/dist/{utils → auth/utils}/is-login-redirect-allowed.js +12 -9
  56. package/dist/cache.js +2 -2
  57. package/dist/cli/commands/bootstrap/index.js +2 -2
  58. package/dist/cli/commands/database/install.js +1 -1
  59. package/dist/cli/commands/database/migrate.js +1 -1
  60. package/dist/cli/commands/init/index.js +2 -2
  61. package/dist/cli/commands/roles/create.js +4 -4
  62. package/dist/cli/commands/schema/apply.js +3 -3
  63. package/dist/cli/commands/schema/snapshot.js +1 -1
  64. package/dist/cli/utils/create-db-connection.d.ts +1 -1
  65. package/dist/cli/utils/create-db-connection.js +1 -1
  66. package/dist/cli/utils/create-env/index.js +1 -1
  67. package/dist/constants.d.ts +7 -3
  68. package/dist/constants.js +7 -3
  69. package/dist/controllers/access.js +1 -1
  70. package/dist/controllers/assets.js +40 -3
  71. package/dist/controllers/extensions.js +1 -1
  72. package/dist/controllers/fields.js +2 -2
  73. package/dist/controllers/files.js +1 -1
  74. package/dist/controllers/items.js +1 -1
  75. package/dist/controllers/mcp.js +1 -1
  76. package/dist/controllers/not-found.js +1 -1
  77. package/dist/controllers/relations.js +1 -1
  78. package/dist/database/errors/dialects/mysql.d.ts +1 -1
  79. package/dist/database/errors/dialects/postgres.d.ts +1 -1
  80. package/dist/database/errors/dialects/sqlite.d.ts +1 -1
  81. package/dist/database/errors/translate.d.ts +1 -1
  82. package/dist/database/errors/translate.js +1 -1
  83. package/dist/database/helpers/date/dialects/mssql.js +1 -1
  84. package/dist/database/helpers/date/dialects/mysql.js +1 -1
  85. package/dist/database/helpers/date/types.js +1 -1
  86. package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +1 -0
  87. package/dist/database/helpers/schema/dialects/cockroachdb.js +24 -1
  88. package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
  89. package/dist/database/helpers/schema/dialects/mysql.d.ts +2 -1
  90. package/dist/database/helpers/schema/dialects/mysql.js +16 -3
  91. package/dist/database/helpers/schema/dialects/postgres.d.ts +1 -1
  92. package/dist/database/helpers/schema/types.d.ts +13 -0
  93. package/dist/database/helpers/schema/types.js +24 -0
  94. package/dist/database/index.js +4 -4
  95. package/dist/database/migrations/20220429A-add-flows.js +1 -1
  96. package/dist/database/migrations/20230526A-migrate-translation-strings.js +1 -1
  97. package/dist/database/migrations/20231009A-update-csv-fields-to-text.js +1 -1
  98. package/dist/database/migrations/20240204A-marketplace.js +9 -7
  99. package/dist/database/migrations/20240311A-deprecate-webhooks.d.ts +15 -0
  100. package/dist/database/migrations/20240311A-deprecate-webhooks.js +1 -1
  101. package/dist/database/migrations/20240806A-permissions-policies.js +3 -3
  102. package/dist/database/migrations/20240924A-migrate-legacy-comments.js +1 -1
  103. package/dist/database/migrations/20251014A-add-project-owner.js +1 -1
  104. package/dist/database/migrations/20251103A-add-ai-settings.d.ts +3 -0
  105. package/dist/database/migrations/20251103A-add-ai-settings.js +14 -0
  106. package/dist/database/migrations/20251224A-remove-webhooks.d.ts +3 -0
  107. package/dist/database/migrations/20251224A-remove-webhooks.js +19 -0
  108. package/dist/database/migrations/20260113A-add-revisions-index.d.ts +3 -0
  109. package/dist/database/migrations/20260113A-add-revisions-index.js +41 -0
  110. package/dist/database/migrations/run.js +3 -3
  111. package/dist/database/run-ast/lib/apply-query/filter/get-filter-type.d.ts +2 -2
  112. package/dist/database/run-ast/lib/apply-query/filter/get-filter-type.js +1 -1
  113. package/dist/database/run-ast/lib/apply-query/filter/operator.js +1 -1
  114. package/dist/database/run-ast/lib/apply-query/sort.js +1 -1
  115. package/dist/database/run-ast/run-ast.js +1 -1
  116. package/dist/database/run-ast/utils/get-column-pre-processor.js +2 -2
  117. package/dist/database/run-ast/utils/get-column.js +1 -1
  118. package/dist/database/seeds/run.js +3 -3
  119. package/dist/extensions/lib/get-extensions-path.js +1 -1
  120. package/dist/extensions/lib/get-extensions-settings.js +1 -1
  121. package/dist/extensions/lib/get-extensions.js +1 -1
  122. package/dist/extensions/lib/get-shared-deps-mapping.js +3 -3
  123. package/dist/extensions/lib/installation/manager.js +8 -12
  124. package/dist/extensions/lib/sandbox/register/route.d.ts +1 -1
  125. package/dist/extensions/lib/sync/status.d.ts +11 -0
  126. package/dist/extensions/lib/sync/status.js +34 -0
  127. package/dist/extensions/lib/sync/sync.d.ts +6 -0
  128. package/dist/extensions/lib/sync/sync.js +90 -0
  129. package/dist/extensions/lib/sync/tracker.d.ts +18 -0
  130. package/dist/extensions/lib/sync/tracker.js +71 -0
  131. package/dist/extensions/lib/sync/utils.d.ts +24 -0
  132. package/dist/extensions/lib/sync/utils.js +62 -0
  133. package/dist/extensions/manager.d.ts +9 -5
  134. package/dist/extensions/manager.js +36 -19
  135. package/dist/flows.d.ts +1 -1
  136. package/dist/logger/index.js +1 -1
  137. package/dist/logger/logs-stream.d.ts +1 -1
  138. package/dist/logger/logs-stream.js +1 -1
  139. package/dist/mailer.js +1 -1
  140. package/dist/metrics/lib/create-metrics.js +2 -2
  141. package/dist/middleware/authenticate.js +3 -3
  142. package/dist/middleware/collection-exists.js +1 -1
  143. package/dist/middleware/extract-token.js +1 -1
  144. package/dist/middleware/graphql.js +2 -2
  145. package/dist/middleware/respond.js +2 -2
  146. package/dist/middleware/validate-batch.js +1 -1
  147. package/dist/operations/exec/index.js +2 -1
  148. package/dist/operations/mail/index.js +1 -1
  149. package/dist/operations/mail/rate-limiter.js +2 -2
  150. package/dist/permissions/cache.js +5 -0
  151. package/dist/permissions/lib/fetch-policies.d.ts +1 -1
  152. package/dist/permissions/lib/fetch-roles-tree.d.ts +6 -3
  153. package/dist/permissions/lib/fetch-roles-tree.js +5 -27
  154. package/dist/permissions/modules/fetch-allowed-collections/fetch-allowed-collections.js +1 -1
  155. package/dist/permissions/modules/fetch-allowed-field-map/fetch-allowed-field-map.js +1 -1
  156. package/dist/permissions/modules/fetch-global-access/fetch-global-access.d.ts +9 -7
  157. package/dist/permissions/modules/fetch-global-access/fetch-global-access.js +17 -9
  158. package/dist/permissions/modules/fetch-inconsistent-field-map/fetch-inconsistent-field-map.js +2 -2
  159. package/dist/permissions/modules/fetch-policies-ip-access/fetch-policies-ip-access.d.ts +1 -1
  160. package/dist/permissions/modules/process-ast/lib/inject-cases.js +1 -1
  161. package/dist/permissions/modules/process-ast/process-ast.js +1 -1
  162. package/dist/permissions/modules/process-payload/process-payload.js +1 -1
  163. package/dist/permissions/modules/validate-access/lib/validate-item-access.d.ts +13 -1
  164. package/dist/permissions/modules/validate-access/lib/validate-item-access.js +54 -6
  165. package/dist/permissions/modules/validate-access/validate-access.js +3 -2
  166. package/dist/permissions/utils/fetch-raw-permissions.d.ts +1 -1
  167. package/dist/permissions/utils/fetch-share-info.d.ts +1 -1
  168. package/dist/permissions/utils/fetch-share-info.js +1 -1
  169. package/dist/permissions/utils/filter-policies-by-ip.js +1 -1
  170. package/dist/permissions/utils/get-permissions-for-share.js +8 -8
  171. package/dist/permissions/utils/with-cache.d.ts +8 -6
  172. package/dist/permissions/utils/with-cache.js +12 -10
  173. package/dist/rate-limiter.js +1 -1
  174. package/dist/request/is-denied-ip.js +2 -2
  175. package/dist/schedules/project.js +1 -1
  176. package/dist/schedules/telemetry.js +1 -1
  177. package/dist/schedules/tus.js +1 -1
  178. package/dist/server.js +4 -4
  179. package/dist/services/assets/name-deduper.d.ts +7 -0
  180. package/dist/services/assets/name-deduper.js +23 -0
  181. package/dist/services/assets.d.ts +17 -3
  182. package/dist/services/assets.js +133 -13
  183. package/dist/services/authentication.js +6 -6
  184. package/dist/services/collections.js +1 -1
  185. package/dist/services/comments.js +2 -2
  186. package/dist/services/extensions.d.ts +1 -1
  187. package/dist/services/extensions.js +4 -0
  188. package/dist/services/files/utils/get-metadata.d.ts +1 -1
  189. package/dist/services/files/utils/get-metadata.js +1 -1
  190. package/dist/services/files.d.ts +1 -1
  191. package/dist/services/files.js +4 -4
  192. package/dist/services/folders.d.ts +27 -2
  193. package/dist/services/folders.js +75 -0
  194. package/dist/services/graphql/index.d.ts +1 -1
  195. package/dist/services/graphql/index.js +1 -1
  196. package/dist/services/graphql/resolvers/mutation.js +1 -1
  197. package/dist/services/graphql/schema/get-types.d.ts +1 -1
  198. package/dist/services/graphql/schema/read.js +1 -1
  199. package/dist/services/graphql/subscription.d.ts +1 -1
  200. package/dist/services/graphql/types/date.js +1 -1
  201. package/dist/services/graphql/types/hash.js +1 -1
  202. package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -1
  203. package/dist/services/import-export.d.ts +2 -2
  204. package/dist/services/import-export.js +6 -7
  205. package/dist/services/index.d.ts +0 -1
  206. package/dist/services/index.js +0 -1
  207. package/dist/services/mail/index.js +2 -2
  208. package/dist/services/mail/rate-limiter.js +2 -2
  209. package/dist/services/notifications.js +2 -2
  210. package/dist/services/payload.js +21 -1
  211. package/dist/services/roles.js +2 -2
  212. package/dist/services/schema.js +1 -1
  213. package/dist/services/server.js +12 -4
  214. package/dist/services/settings.js +2 -2
  215. package/dist/services/tfa.js +1 -1
  216. package/dist/services/translations.js +1 -1
  217. package/dist/services/tus/data-store.d.ts +1 -3
  218. package/dist/services/tus/data-store.js +2 -5
  219. package/dist/services/tus/server.js +9 -9
  220. package/dist/services/users.js +4 -4
  221. package/dist/services/versions.js +1 -1
  222. package/dist/telemetry/lib/send-report.d.ts +1 -1
  223. package/dist/telemetry/lib/send-report.js +1 -1
  224. package/dist/telemetry/lib/track.js +1 -1
  225. package/dist/telemetry/utils/get-settings.d.ts +15 -0
  226. package/dist/telemetry/utils/get-settings.js +13 -1
  227. package/dist/test-utils/README.md +95 -24
  228. package/dist/test-utils/cache.d.ts +2 -2
  229. package/dist/test-utils/cache.js +2 -2
  230. package/dist/test-utils/knex.js +1 -1
  231. package/dist/test-utils/{fields-service.d.ts → services/fields-service.d.ts} +1 -1
  232. package/dist/test-utils/{fields-service.js → services/fields-service.js} +3 -2
  233. package/dist/test-utils/services/files-service.d.ts +28 -0
  234. package/dist/test-utils/services/files-service.js +34 -0
  235. package/dist/test-utils/services/folders-service.d.ts +28 -0
  236. package/dist/test-utils/services/folders-service.js +33 -0
  237. package/dist/types/collection.d.ts +1 -1
  238. package/dist/utils/async-handler.d.ts +1 -1
  239. package/dist/utils/calculate-field-depth.js +1 -1
  240. package/dist/utils/compress.js +1 -1
  241. package/dist/utils/deep-map-response.js +2 -2
  242. package/dist/utils/encrypt.d.ts +2 -0
  243. package/dist/utils/encrypt.js +64 -0
  244. package/dist/utils/get-accountability-for-role.js +2 -2
  245. package/dist/utils/get-accountability-for-token.js +4 -4
  246. package/dist/utils/get-cache-key.js +3 -3
  247. package/dist/utils/get-field-system-rows.js +1 -1
  248. package/dist/utils/get-ip-from-req.d.ts +1 -1
  249. package/dist/utils/get-ip-from-req.js +1 -1
  250. package/dist/utils/get-local-type.js +7 -3
  251. package/dist/utils/get-service.js +1 -3
  252. package/dist/utils/get-snapshot-diff.js +1 -1
  253. package/dist/utils/is-url-allowed.js +1 -1
  254. package/dist/utils/jwt.js +1 -1
  255. package/dist/utils/require-text.d.ts +1 -0
  256. package/dist/utils/require-text.js +4 -0
  257. package/dist/utils/require-yaml.js +2 -2
  258. package/dist/utils/sanitize-schema.d.ts +1 -1
  259. package/dist/utils/should-clear-cache.d.ts +1 -1
  260. package/dist/utils/should-skip-cache.js +2 -2
  261. package/dist/utils/validate-diff.js +1 -1
  262. package/dist/utils/validate-snapshot.js +3 -3
  263. package/dist/utils/validate-storage.js +2 -2
  264. package/dist/utils/verify-session-jwt.js +1 -1
  265. package/dist/utils/versioning/deep-map-with-schema.js +2 -2
  266. package/dist/websocket/controllers/base.d.ts +2 -2
  267. package/dist/websocket/controllers/base.js +3 -3
  268. package/dist/websocket/controllers/graphql.d.ts +1 -1
  269. package/dist/websocket/controllers/graphql.js +1 -1
  270. package/dist/websocket/controllers/logs.d.ts +1 -1
  271. package/dist/websocket/controllers/rest.d.ts +1 -1
  272. package/dist/websocket/controllers/rest.js +2 -2
  273. package/dist/websocket/handlers/heartbeat.js +1 -1
  274. package/dist/websocket/handlers/items.js +2 -2
  275. package/dist/websocket/handlers/subscribe.js +1 -1
  276. package/dist/websocket/types.d.ts +1 -1
  277. package/dist/websocket/utils/wait-for-message.js +1 -1
  278. package/package.json +34 -28
  279. package/dist/controllers/webhooks.d.ts +0 -2
  280. package/dist/controllers/webhooks.js +0 -74
  281. package/dist/extensions/lib/sync-extensions.d.ts +0 -3
  282. package/dist/extensions/lib/sync-extensions.js +0 -70
  283. package/dist/extensions/lib/sync-status.d.ts +0 -10
  284. package/dist/extensions/lib/sync-status.js +0 -27
  285. package/dist/mcp/tools/index.d.ts +0 -15
  286. package/dist/mcp/tools/index.js +0 -29
  287. package/dist/mcp/tools/prompts/index.d.ts +0 -16
  288. package/dist/mcp/tools/prompts/index.js +0 -19
  289. package/dist/permissions/modules/fetch-global-access/lib/fetch-global-access-for-roles.d.ts +0 -5
  290. package/dist/permissions/modules/fetch-global-access/lib/fetch-global-access-for-roles.js +0 -7
  291. package/dist/permissions/modules/fetch-global-access/lib/fetch-global-access-for-user.d.ts +0 -5
  292. package/dist/permissions/modules/fetch-global-access/lib/fetch-global-access-for-user.js +0 -10
  293. package/dist/permissions/modules/fetch-global-access/types.d.ts +0 -4
  294. package/dist/permissions/modules/fetch-global-access/utils/fetch-global-access-for-query.d.ts +0 -4
  295. package/dist/permissions/modules/fetch-global-access/utils/fetch-global-access-for-query.js +0 -27
  296. package/dist/services/webhooks.d.ts +0 -14
  297. package/dist/services/webhooks.js +0 -32
  298. package/dist/utils/get-date-formatted.d.ts +0 -1
  299. package/dist/utils/get-date-formatted.js +0 -10
  300. package/dist/utils/ip-in-networks.d.ts +0 -6
  301. package/dist/utils/ip-in-networks.js +0 -13
  302. package/dist/utils/is-login-redirect-allowed.d.ts +0 -4
  303. /package/dist/{mcp → ai/mcp}/index.d.ts +0 -0
  304. /package/dist/{mcp → ai/mcp}/index.js +0 -0
  305. /package/dist/{mcp → ai/mcp}/transport.d.ts +0 -0
  306. /package/dist/{mcp → ai/mcp}/transport.js +0 -0
  307. /package/dist/{mcp → ai/mcp}/types.js +0 -0
  308. /package/dist/{mcp/tools/assets.d.ts → ai/tools/assets/index.d.ts} +0 -0
  309. /package/dist/{mcp/tools/prompts/assets.md → ai/tools/assets/prompt.md} +0 -0
  310. /package/dist/{mcp/tools/collections.d.ts → ai/tools/collections/index.d.ts} +0 -0
  311. /package/dist/{mcp/tools/prompts/collections.md → ai/tools/collections/prompt.md} +0 -0
  312. /package/dist/{mcp/define.d.ts → ai/tools/define-tool.d.ts} +0 -0
  313. /package/dist/{mcp/define.js → ai/tools/define-tool.js} +0 -0
  314. /package/dist/{mcp/tools/fields.d.ts → ai/tools/fields/index.d.ts} +0 -0
  315. /package/dist/{mcp/tools/prompts/fields.md → ai/tools/fields/prompt.md} +0 -0
  316. /package/dist/{mcp/tools/files.d.ts → ai/tools/files/index.d.ts} +0 -0
  317. /package/dist/{mcp/tools/prompts/files.md → ai/tools/files/prompt.md} +0 -0
  318. /package/dist/{mcp/tools/flows.d.ts → ai/tools/flows/index.d.ts} +0 -0
  319. /package/dist/{mcp/tools/prompts/flows.md → ai/tools/flows/prompt.md} +0 -0
  320. /package/dist/{mcp/tools/folders.d.ts → ai/tools/folders/index.d.ts} +0 -0
  321. /package/dist/{mcp/tools/prompts/folders.md → ai/tools/folders/prompt.md} +0 -0
  322. /package/dist/{mcp/tools/items.d.ts → ai/tools/items/index.d.ts} +0 -0
  323. /package/dist/{mcp/tools/prompts/operations.md → ai/tools/operations/prompt.md} +0 -0
  324. /package/dist/{mcp/tools/relations.d.ts → ai/tools/relations/index.d.ts} +0 -0
  325. /package/dist/{mcp/tools/prompts/relations.md → ai/tools/relations/prompt.md} +0 -0
  326. /package/dist/{mcp/tools/prompts/schema.md → ai/tools/schema/prompt.md} +0 -0
  327. /package/dist/{mcp → ai/tools}/schema.d.ts +0 -0
  328. /package/dist/{mcp → ai/tools}/schema.js +0 -0
  329. /package/dist/{mcp/tools/system.d.ts → ai/tools/system/index.d.ts} +0 -0
  330. /package/dist/{mcp/tools/prompts/system-prompt-description.md → ai/tools/system/prompt-description.md} +0 -0
  331. /package/dist/{mcp/tools/prompts/system-prompt.md → ai/tools/system/prompt.md} +0 -0
  332. /package/dist/{mcp/tools/trigger-flow.d.ts → ai/tools/trigger-flow/index.d.ts} +0 -0
  333. /package/dist/{mcp/tools/prompts/trigger-flow.md → ai/tools/trigger-flow/prompt.md} +0 -0
  334. /package/dist/{permissions/modules/fetch-global-access → ai/tools}/types.js +0 -0
  335. /package/dist/test-utils/{items-service.d.ts → services/items-service.d.ts} +0 -0
  336. /package/dist/test-utils/{items-service.js → services/items-service.js} +0 -0
@@ -0,0 +1,64 @@
1
+ import crypto from 'node:crypto';
2
+ import { promisify } from 'node:util';
3
+ const VERSION = '1';
4
+ const KDF = 'scrypt';
5
+ const SCRYPT_DEFAULTS = { N: 2 ** 14, r: 8, p: 1 }; // ~16MB mem, good server default
6
+ const scryptAsync = promisify(crypto.scrypt);
7
+ const deriveKey = async (password, salt, opts = SCRYPT_DEFAULTS) => {
8
+ return await scryptAsync(password, salt, 32, opts);
9
+ };
10
+ export const encrypt = async (plainText, password) => {
11
+ const salt = crypto.randomBytes(16);
12
+ const keyBuf = await deriveKey(password, salt, SCRYPT_DEFAULTS);
13
+ // Generate a 12-byte IV for GCM and keep base64 string for storage
14
+ const ivBuf = crypto.randomBytes(12);
15
+ const iv = ivBuf.toString('base64');
16
+ const cipher = crypto.createCipheriv('aes-256-gcm', keyBuf, ivBuf);
17
+ let cipherText = cipher.update(plainText, 'utf8', 'base64');
18
+ cipherText += cipher.final('base64');
19
+ const tag = cipher.getAuthTag().toString('base64');
20
+ // 1||scrypt||N||r||p||salt||iv||cipherText||tag
21
+ return [
22
+ VERSION,
23
+ KDF,
24
+ SCRYPT_DEFAULTS.N,
25
+ SCRYPT_DEFAULTS.r,
26
+ SCRYPT_DEFAULTS.p,
27
+ salt.toString('base64'),
28
+ iv,
29
+ cipherText,
30
+ tag,
31
+ ].join('||');
32
+ };
33
+ export const decrypt = async (encryptedText, password) => {
34
+ const parts = encryptedText.split('||');
35
+ if (parts.length < 9)
36
+ throw new Error('Invalid encrypted payload');
37
+ const [version, kdf, nStr, rStr, pStr, saltB64, ivB64, cipherText, tagB64] = parts;
38
+ if (version !== VERSION)
39
+ throw new Error(`Unsupported version: ${version}`);
40
+ if (kdf !== KDF)
41
+ throw new Error(`Unsupported kdf: ${kdf}`);
42
+ if (!saltB64)
43
+ throw new Error('No salt in encrypted string');
44
+ if (!ivB64)
45
+ throw new Error('No iv in encrypted string');
46
+ if (cipherText === undefined)
47
+ throw new Error('No cipherText in encrypted string');
48
+ if (!tagB64)
49
+ throw new Error('No tag in encrypted string');
50
+ const opts = {
51
+ N: Number(nStr) || SCRYPT_DEFAULTS.N,
52
+ r: Number(rStr) || SCRYPT_DEFAULTS.r,
53
+ p: Number(pStr) || SCRYPT_DEFAULTS.p,
54
+ };
55
+ const salt = Buffer.from(saltB64, 'base64');
56
+ const keyBuf = await deriveKey(password, salt, opts);
57
+ const iv = Buffer.from(ivB64, 'base64');
58
+ const tag = Buffer.from(tagB64, 'base64');
59
+ const decipher = crypto.createDecipheriv('aes-256-gcm', keyBuf, iv);
60
+ decipher.setAuthTag(tag);
61
+ let plaintext = decipher.update(cipherText, 'base64', 'utf8');
62
+ plaintext += decipher.final('utf8');
63
+ return plaintext;
64
+ };
@@ -13,13 +13,13 @@ export async function getAccountabilityForRole(role, context) {
13
13
  });
14
14
  }
15
15
  else {
16
- const roles = await fetchRolesTree(role, context.database);
16
+ const roles = await fetchRolesTree(role, { knex: context.database });
17
17
  // The roles tree should always include the passed role. If it doesn't, it's because it
18
18
  // couldn't be read from the database and therefore doesn't exist
19
19
  if (roles.length === 0) {
20
20
  throw new Error(`Configured role "${role}" isn't a valid role ID or doesn't exist.`);
21
21
  }
22
- const globalAccess = await fetchGlobalAccess({ user: null, roles, ip: context.accountability?.ip ?? null }, context.database);
22
+ const globalAccess = await fetchGlobalAccess({ user: null, roles, ip: context.accountability?.ip ?? null }, { knex: context.database });
23
23
  generatedAccountability = createDefaultAccountability({
24
24
  role,
25
25
  roles,
@@ -25,8 +25,8 @@ export async function getAccountabilityForToken(token, accountability) {
25
25
  if (payload.id)
26
26
  accountability.user = payload.id;
27
27
  accountability.role = payload.role;
28
- accountability.roles = await fetchRolesTree(payload.role, database);
29
- const { admin, app } = await fetchGlobalAccess(accountability, database);
28
+ accountability.roles = await fetchRolesTree(payload.role, { knex: database });
29
+ const { admin, app } = await fetchGlobalAccess(accountability, { knex: database });
30
30
  accountability.admin = admin;
31
31
  accountability.app = app;
32
32
  }
@@ -44,8 +44,8 @@ export async function getAccountabilityForToken(token, accountability) {
44
44
  }
45
45
  accountability.user = user.id;
46
46
  accountability.role = user.role;
47
- accountability.roles = await fetchRolesTree(user.role, database);
48
- const { admin, app } = await fetchGlobalAccess(accountability, database);
47
+ accountability.roles = await fetchRolesTree(user.role, { knex: database });
48
+ const { admin, app } = await fetchGlobalAccess(accountability, { knex: database });
49
49
  accountability.admin = admin;
50
50
  accountability.app = app;
51
51
  }
@@ -1,10 +1,10 @@
1
- import hash from 'object-hash';
2
1
  import url from 'url';
2
+ import { ipInNetworks } from '@directus/utils/node';
3
+ import { version } from 'directus/version';
4
+ import hash from 'object-hash';
3
5
  import getDatabase from '../database/index.js';
4
6
  import { fetchPoliciesIpAccess } from '../permissions/modules/fetch-policies-ip-access/fetch-policies-ip-access.js';
5
7
  import { getGraphqlQueryAndVariables } from './get-graphql-query-and-variables.js';
6
- import { version } from 'directus/version';
7
- import { ipInNetworks } from './ip-in-networks.js';
8
8
  export async function getCacheKey(req) {
9
9
  const path = url.parse(req.originalUrl).pathname;
10
10
  const isGraphQl = path?.startsWith('/graphql');
@@ -1,5 +1,5 @@
1
- import { systemFieldRows } from '@directus/system-data';
2
1
  import formatTitle from '@directus/format-title';
2
+ import { systemFieldRows } from '@directus/system-data';
3
3
  import { getAuthProviders } from './get-auth-providers.js';
4
4
  // Dynamically populate auth providers field
5
5
  export function getSystemFieldRowsWithAuthProviders() {
@@ -1,3 +1,3 @@
1
- import type { Request } from 'express';
2
1
  import type { IncomingMessage } from 'http';
2
+ import type { Request } from 'express';
3
3
  export declare function getIPFromReq(req: IncomingMessage | Request): string | null;
@@ -1,5 +1,5 @@
1
- import { useEnv } from '@directus/env';
2
1
  import { isIP } from 'net';
2
+ import { useEnv } from '@directus/env';
3
3
  import proxyAddr from 'proxy-addr';
4
4
  import { useLogger } from '../logger/index.js';
5
5
  /**
@@ -61,15 +61,15 @@ const localTypeMap = {
61
61
  binary: 'binary',
62
62
  varbinary: 'binary',
63
63
  uniqueidentifier: 'uuid',
64
- // Postgres
64
+ // Postgres / Cockroachdb
65
65
  json: 'json',
66
66
  jsonb: 'json',
67
67
  uuid: 'uuid',
68
68
  int2: 'integer',
69
69
  serial4: 'integer',
70
70
  int4: 'integer',
71
- serial8: 'integer',
72
- int8: 'integer',
71
+ serial8: 'bigInteger',
72
+ int8: 'bigInteger',
73
73
  bool: 'boolean',
74
74
  'character varying': 'string',
75
75
  character: 'string',
@@ -124,5 +124,9 @@ export default function getLocalType(column, field) {
124
124
  if (column.data_type === 'nvarchar' && column.max_length === -1) {
125
125
  return 'text';
126
126
  }
127
+ /** Handle CockroachDB 64-bit integers (reported as 'integer' with precision 64) */
128
+ if ((dataType === 'integer' || dataType === 'int') && column.numeric_precision === 64) {
129
+ return 'bigInteger';
130
+ }
127
131
  return type ?? 'unknown';
128
132
  }
@@ -1,5 +1,5 @@
1
1
  import { ForbiddenError } from '@directus/errors';
2
- import { AccessService, ActivityService, CommentsService, DashboardsService, FilesService, FlowsService, FoldersService, ItemsService, NotificationsService, OperationsService, PanelsService, PermissionsService, PoliciesService, PresetsService, RevisionsService, RolesService, SettingsService, SharesService, TranslationsService, UsersService, VersionsService, WebhooksService, } from '../services/index.js';
2
+ import { AccessService, ActivityService, CommentsService, DashboardsService, FilesService, FlowsService, FoldersService, ItemsService, NotificationsService, OperationsService, PanelsService, PermissionsService, PoliciesService, PresetsService, RevisionsService, RolesService, SettingsService, SharesService, TranslationsService, UsersService, VersionsService, } from '../services/index.js';
3
3
  /**
4
4
  * Select the correct service for the given collection. This allows the individual services to run
5
5
  * their custom checks (f.e. it allows `UsersService` to prevent updating TFA secret from outside).
@@ -46,8 +46,6 @@ export function getService(collection, opts) {
46
46
  return new UsersService(opts);
47
47
  case 'directus_versions':
48
48
  return new VersionsService(opts);
49
- case 'directus_webhooks':
50
- return new WebhooksService(opts);
51
49
  default:
52
50
  // Deny usage of other system collections via ItemsService
53
51
  if (collection.startsWith('directus_'))
@@ -1,5 +1,5 @@
1
- import deepDiff from 'deep-diff';
2
1
  import { DiffKind } from '@directus/types';
2
+ import deepDiff from 'deep-diff';
3
3
  import { sanitizeCollection, sanitizeField, sanitizeRelation, sanitizeSystemField } from './sanitize-schema.js';
4
4
  export function getSnapshotDiff(current, after) {
5
5
  const diffedSnapshot = {
@@ -1,5 +1,5 @@
1
- import { toArray } from '@directus/utils';
2
1
  import { URL } from 'url';
2
+ import { toArray } from '@directus/utils';
3
3
  import { useLogger } from '../logger/index.js';
4
4
  /**
5
5
  * Check if URL matches allow list either exactly or by origin (protocol+domain+port) + pathname
package/dist/utils/jwt.js CHANGED
@@ -1,5 +1,5 @@
1
- import jwt from 'jsonwebtoken';
2
1
  import { InvalidTokenError, ServiceUnavailableError, TokenExpiredError } from '@directus/errors';
2
+ import jwt from 'jsonwebtoken';
3
3
  export function verifyJWT(token, secret) {
4
4
  let payload;
5
5
  try {
@@ -0,0 +1 @@
1
+ export declare function requireText(filepath: string): string;
@@ -0,0 +1,4 @@
1
+ import fse from 'fs-extra';
2
+ export function requireText(filepath) {
3
+ return fse.readFileSync(filepath, 'utf8');
4
+ }
@@ -1,6 +1,6 @@
1
- import fse from 'fs-extra';
2
1
  import yaml from 'js-yaml';
2
+ import { requireText } from './require-text.js';
3
3
  export function requireYAML(filepath) {
4
- const yamlRaw = fse.readFileSync(filepath, 'utf8');
4
+ const yamlRaw = requireText(filepath);
5
5
  return yaml.load(yamlRaw);
6
6
  }
@@ -16,7 +16,7 @@ export declare function sanitizeCollection(collection: Collection): SnapshotColl
16
16
  * @returns sanitized field
17
17
  */
18
18
  export declare function sanitizeField(field: Field, sanitizeAllSchema?: boolean): SnapshotField;
19
- export declare function sanitizeColumn(column: Column): Pick<Column, "table" | "foreign_key_table" | "foreign_key_column" | "name" | "data_type" | "default_value" | "max_length" | "numeric_precision" | "numeric_scale" | "is_nullable" | "is_unique" | "is_indexed" | "is_primary_key" | "is_generated" | "generation_expression" | "has_auto_increment">;
19
+ export declare function sanitizeColumn(column: Column): Pick<Column, "name" | "table" | "foreign_key_table" | "foreign_key_column" | "data_type" | "default_value" | "max_length" | "numeric_precision" | "numeric_scale" | "is_nullable" | "is_unique" | "is_indexed" | "is_primary_key" | "is_generated" | "generation_expression" | "has_auto_increment">;
20
20
  /**
21
21
  * Pick certain database vendor specific relation properties that should be compared when performing diff
22
22
  *
@@ -1,5 +1,5 @@
1
- import type Keyv from 'keyv';
2
1
  import type { MutationOptions } from '@directus/types';
2
+ import type Keyv from 'keyv';
3
3
  /**
4
4
  * Check whether cache should be cleared
5
5
  *
@@ -1,7 +1,7 @@
1
- import { useEnv } from '@directus/env';
2
1
  import url from 'url';
3
- import { Url } from './url.js';
2
+ import { useEnv } from '@directus/env';
4
3
  import { getEndpoint } from '@directus/utils';
4
+ import { Url } from './url.js';
5
5
  /**
6
6
  * Whether to skip caching for the current request
7
7
  *
@@ -1,6 +1,6 @@
1
- import Joi from 'joi';
2
1
  import { InvalidPayloadError } from '@directus/errors';
3
2
  import { DiffKind } from '@directus/types';
3
+ import Joi from 'joi';
4
4
  const deepDiffSchema = Joi.object({
5
5
  kind: Joi.string()
6
6
  .valid(...Object.values(DiffKind))
@@ -1,10 +1,10 @@
1
1
  import { TYPES } from '@directus/constants';
2
- import Joi from 'joi';
3
- import { ALIAS_TYPES } from '../constants.js';
4
- import { getDatabaseClient } from '../database/index.js';
5
2
  import { InvalidPayloadError } from '@directus/errors';
6
3
  import { DatabaseClients } from '@directus/types';
7
4
  import { version } from 'directus/version';
5
+ import Joi from 'joi';
6
+ import { ALIAS_TYPES } from '../constants.js';
7
+ import { getDatabaseClient } from '../database/index.js';
8
8
  const snapshotJoiSchema = Joi.object({
9
9
  version: Joi.number().valid(1).required(),
10
10
  directus: Joi.string().required(),
@@ -1,8 +1,8 @@
1
- import { useEnv } from '@directus/env';
2
- import { toArray } from '@directus/utils';
3
1
  import { constants } from 'fs';
4
2
  import { access } from 'node:fs/promises';
5
3
  import path from 'path';
4
+ import { useEnv } from '@directus/env';
5
+ import { toArray } from '@directus/utils';
6
6
  import { getExtensionsPath } from '../extensions/lib/get-extensions-path.js';
7
7
  import { useLogger } from '../logger/index.js';
8
8
  export async function validateStorage() {
@@ -1,5 +1,5 @@
1
- import getDatabase from '../database/index.js';
2
1
  import { InvalidCredentialsError } from '@directus/errors';
2
+ import getDatabase from '../database/index.js';
3
3
  /**
4
4
  * Verifies the associated session is still available and valid.
5
5
  *
@@ -1,7 +1,7 @@
1
- import { isPlainObject } from 'lodash-es';
2
1
  import assert from 'node:assert';
3
- import { getRelationInfo } from '../get-relation-info.js';
4
2
  import { InvalidQueryError } from '@directus/errors';
3
+ import { isPlainObject } from 'lodash-es';
4
+ import { getRelationInfo } from '../get-relation-info.js';
5
5
  /**
6
6
  * Allows to deep map the data like a response or delta changes with collection, field and relation context for each entry.
7
7
  * Bottom to Top depth first mapping of values.
@@ -1,8 +1,8 @@
1
+ import type { Server as httpServer, IncomingMessage } from 'http';
2
+ import type internal from 'stream';
1
3
  import type { Accountability } from '@directus/types';
2
4
  import { WebSocketMessage } from '@directus/types';
3
- import type { IncomingMessage, Server as httpServer } from 'http';
4
5
  import type { RateLimiterAbstract } from 'rate-limiter-flexible';
5
- import type internal from 'stream';
6
6
  import WebSocket, { type Server } from 'ws';
7
7
  import { WebSocketAuthMessage } from '../messages.js';
8
8
  import type { AuthenticationState, UpgradeContext, WebSocketAuthentication, WebSocketClient } from '../types.js';
@@ -1,10 +1,10 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { parse } from 'url';
1
3
  import { useEnv } from '@directus/env';
2
4
  import { InvalidProviderConfigError, TokenExpiredError } from '@directus/errors';
3
5
  import { WebSocketMessage } from '@directus/types';
4
6
  import { parseJSON, toBoolean } from '@directus/utils';
5
7
  import cookie from 'cookie';
6
- import { randomUUID } from 'node:crypto';
7
- import { parse } from 'url';
8
8
  import WebSocket, { WebSocketServer } from 'ws';
9
9
  import { fromZodError } from 'zod-validation-error';
10
10
  import emitter from '../../emitter.js';
@@ -13,7 +13,7 @@ import { createDefaultAccountability } from '../../permissions/utils/create-defa
13
13
  import { createRateLimiter } from '../../rate-limiter.js';
14
14
  import { getIPFromReq } from '../../utils/get-ip-from-req.js';
15
15
  import { authenticateConnection, authenticationSuccess } from '../authenticate.js';
16
- import { WebSocketError, handleWebSocketError } from '../errors.js';
16
+ import { handleWebSocketError, WebSocketError } from '../errors.js';
17
17
  import { AuthMode, WebSocketAuthMessage } from '../messages.js';
18
18
  import { getMessageType } from '../utils/message.js';
19
19
  import { waitForAnyMessage, waitForMessageType } from '../utils/wait-for-message.js';
@@ -1,5 +1,5 @@
1
- import type { Server } from 'graphql-ws';
2
1
  import type { Server as httpServer } from 'http';
2
+ import type { Server } from 'graphql-ws';
3
3
  import type { GraphQLSocket, UpgradeContext, WebSocketClient } from '../types.js';
4
4
  import SocketController from './base.js';
5
5
  export declare class GraphQLSubscriptionController extends SocketController {
@@ -1,4 +1,4 @@
1
- import { CloseCode, MessageType, makeServer } from 'graphql-ws';
1
+ import { CloseCode, makeServer, MessageType } from 'graphql-ws';
2
2
  import { useLogger } from '../../logger/index.js';
3
3
  import { createDefaultAccountability } from '../../permissions/utils/create-default-accountability.js';
4
4
  import { bindPubSub } from '../../services/graphql/subscription.js';
@@ -1,7 +1,7 @@
1
1
  import type { Server as httpServer } from 'http';
2
+ import type { Accountability } from '@directus/types';
2
3
  import { AuthMode } from '../messages.js';
3
4
  import SocketController from './base.js';
4
- import type { Accountability } from '@directus/types';
5
5
  export declare class LogsController extends SocketController {
6
6
  constructor(httpServer: httpServer);
7
7
  getEnvironmentConfig(configPrefix: string): {
@@ -1,5 +1,5 @@
1
- import { WebSocketMessage } from '@directus/types';
2
1
  import type { Server as httpServer } from 'http';
2
+ import { WebSocketMessage } from '@directus/types';
3
3
  import SocketController from './base.js';
4
4
  export declare class WebSocketController extends SocketController {
5
5
  constructor(httpServer: httpServer);
@@ -1,9 +1,9 @@
1
- import { parseJSON } from '@directus/utils';
2
1
  import { WebSocketMessage } from '@directus/types';
2
+ import { parseJSON } from '@directus/utils';
3
3
  import emitter from '../../emitter.js';
4
4
  import { useLogger } from '../../logger/index.js';
5
5
  import { getAddress } from '../../utils/get-address.js';
6
- import { WebSocketError, handleWebSocketError } from '../errors.js';
6
+ import { handleWebSocketError, WebSocketError } from '../errors.js';
7
7
  import SocketController from './base.js';
8
8
  import { registerWebSocketEvents } from './hooks.js';
9
9
  const logger = useLogger();
@@ -3,7 +3,7 @@ import { ServiceUnavailableError } from '@directus/errors';
3
3
  import { WebSocketMessage } from '@directus/types';
4
4
  import { toBoolean } from '@directus/utils';
5
5
  import emitter from '../../emitter.js';
6
- import { WebSocketController, getWebSocketController } from '../controllers/index.js';
6
+ import { getWebSocketController, WebSocketController } from '../controllers/index.js';
7
7
  import { fmtMessage, getMessageType } from '../utils/message.js';
8
8
  const env = useEnv();
9
9
  const HEARTBEAT_FREQUENCY = Number(env['WEBSOCKETS_HEARTBEAT_PERIOD']) * 1000;
@@ -1,9 +1,9 @@
1
+ import { isSystemCollection } from '@directus/system-data';
1
2
  import emitter from '../../emitter.js';
2
3
  import { ItemsService, MetaService } from '../../services/index.js';
3
4
  import { getSchema } from '../../utils/get-schema.js';
4
- import { isSystemCollection } from '@directus/system-data';
5
5
  import { sanitizeQuery } from '../../utils/sanitize-query.js';
6
- import { WebSocketError, handleWebSocketError } from '../errors.js';
6
+ import { handleWebSocketError, WebSocketError } from '../errors.js';
7
7
  import { WebSocketItemsMessage } from '../messages.js';
8
8
  import { fmtMessage, getMessageType } from '../utils/message.js';
9
9
  export class ItemsHandler {
@@ -4,7 +4,7 @@ import { useBus } from '../../bus/index.js';
4
4
  import emitter from '../../emitter.js';
5
5
  import { getSchema } from '../../utils/get-schema.js';
6
6
  import { sanitizeQuery } from '../../utils/sanitize-query.js';
7
- import { WebSocketError, handleWebSocketError } from '../errors.js';
7
+ import { handleWebSocketError, WebSocketError } from '../errors.js';
8
8
  import { WebSocketSubscribeMessage } from '../messages.js';
9
9
  import { getPayload } from '../utils/items.js';
10
10
  import { fmtMessage, getMessageType } from '../utils/message.js';
@@ -1,6 +1,6 @@
1
- import type { Accountability, Query } from '@directus/types';
2
1
  import type { IncomingMessage } from 'http';
3
2
  import type internal from 'stream';
3
+ import type { Accountability, Query } from '@directus/types';
4
4
  import type { WebSocket } from 'ws';
5
5
  import type { AuthMode } from './messages.js';
6
6
  export type AuthenticationState = {
@@ -1,5 +1,5 @@
1
- import { parseJSON } from '@directus/utils';
2
1
  import { WebSocketMessage } from '@directus/types';
2
+ import { parseJSON } from '@directus/utils';
3
3
  import { getMessageType } from './message.js';
4
4
  export const waitForAnyMessage = (client, timeout) => {
5
5
  return new Promise((resolve, reject) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@directus/api",
3
- "version": "32.1.1",
3
+ "version": "33.0.0",
4
4
  "description": "Directus is a real-time API and App dashboard for managing SQL database content",
5
5
  "keywords": [
6
6
  "directus",
@@ -58,15 +58,19 @@
58
58
  "dist"
59
59
  ],
60
60
  "dependencies": {
61
+ "@ai-sdk/anthropic": "3.0.0-beta.53",
62
+ "@ai-sdk/openai": "3.0.0-beta.57",
61
63
  "@authenio/samlify-node-xmllint": "2.0.0",
62
64
  "@aws-sdk/client-sesv2": "3.928.0",
63
65
  "@godaddy/terminus": "4.12.1",
64
- "@modelcontextprotocol/sdk": "1.21.1",
66
+ "@modelcontextprotocol/sdk": "1.24.0",
65
67
  "@rollup/plugin-alias": "5.1.1",
66
68
  "@rollup/plugin-node-resolve": "16.0.3",
67
69
  "@rollup/plugin-virtual": "3.0.2",
68
70
  "@tus/server": "2.3.0",
69
71
  "@tus/utils": "0.6.0",
72
+ "archiver": "7.0.1",
73
+ "ai": "6.0.0-beta.98",
70
74
  "argon2": "0.44.0",
71
75
  "async": "3.2.6",
72
76
  "async-mutex": "0.5.0",
@@ -81,6 +85,7 @@
81
85
  "cookie": "1.0.2",
82
86
  "cookie-parser": "1.4.7",
83
87
  "cors": "2.8.5",
88
+ "cron": "4.3.4",
84
89
  "date-fns": "4.1.0",
85
90
  "deep-diff": "1.0.2",
86
91
  "destroy": "1.2.0",
@@ -106,7 +111,7 @@
106
111
  "js-yaml": "4.1.1",
107
112
  "js2xmlparser": "5.0.0",
108
113
  "json2csv": "5.0.7",
109
- "jsonwebtoken": "9.0.2",
114
+ "jsonwebtoken": "9.0.3",
110
115
  "keyv": "5.5.3",
111
116
  "knex": "3.1.0",
112
117
  "ldapjs": "2.3.3",
@@ -120,8 +125,7 @@
120
125
  "ms": "2.1.3",
121
126
  "nanoid": "5.1.6",
122
127
  "node-machine-id": "1.1.12",
123
- "cron": "4.3.4",
124
- "nodemailer": "7.0.10",
128
+ "nodemailer": "7.0.11",
125
129
  "object-hash": "3.0.0",
126
130
  "openapi3-ts": "4.5.0",
127
131
  "openid-client": "5.7.1",
@@ -141,7 +145,8 @@
141
145
  "rate-limiter-flexible": "7.2.0",
142
146
  "rolldown": "1.0.0-beta.31",
143
147
  "rollup": "4.52.5",
144
- "samlify": "2.10.1",
148
+ "samlify": "2.10.2",
149
+ "sanitize-filename": "1.6.3",
145
150
  "sanitize-html": "2.17.0",
146
151
  "sharp": "0.34.5",
147
152
  "snappy": "7.3.3",
@@ -153,34 +158,35 @@
153
158
  "ws": "8.18.3",
154
159
  "zod": "4.1.12",
155
160
  "zod-validation-error": "4.0.2",
156
- "@directus/app": "14.3.0",
157
- "@directus/env": "5.3.2",
158
- "@directus/extensions-registry": "3.0.14",
159
- "@directus/extensions": "3.0.14",
160
- "@directus/errors": "2.0.5",
161
+ "@directus/app": "15.0.0",
161
162
  "@directus/constants": "14.0.0",
162
- "@directus/extensions-sdk": "17.0.3",
163
- "@directus/memory": "3.0.12",
163
+ "@directus/env": "5.4.0",
164
+ "@directus/extensions": "3.0.16",
165
+ "@directus/extensions-registry": "3.0.16",
166
+ "@directus/errors": "2.1.0",
167
+ "@directus/extensions-sdk": "17.0.5",
168
+ "@directus/memory": "3.0.14",
164
169
  "@directus/format-title": "12.1.1",
165
- "@directus/pressure": "3.0.12",
166
- "@directus/schema-builder": "0.0.9",
167
- "@directus/specs": "11.2.0",
168
- "@directus/schema": "13.0.4",
170
+ "@directus/pressure": "3.0.14",
171
+ "@directus/schema": "13.0.5",
172
+ "@directus/schema-builder": "0.0.11",
173
+ "@directus/specs": "12.0.0",
169
174
  "@directus/storage": "12.0.3",
170
- "@directus/storage-driver-cloudinary": "12.0.12",
171
- "@directus/storage-driver-azure": "12.0.12",
175
+ "@directus/storage-driver-azure": "12.0.14",
176
+ "@directus/storage-driver-gcs": "12.0.14",
172
177
  "@directus/storage-driver-local": "12.0.3",
173
- "@directus/storage-driver-gcs": "12.0.12",
174
- "@directus/storage-driver-supabase": "3.0.12",
175
- "@directus/storage-driver-s3": "12.0.12",
176
- "@directus/utils": "13.0.13",
177
- "@directus/validation": "2.0.12",
178
- "@directus/system-data": "3.4.2",
179
- "directus": "11.13.4"
178
+ "@directus/storage-driver-cloudinary": "12.0.14",
179
+ "@directus/storage-driver-s3": "12.1.0",
180
+ "@directus/system-data": "4.0.0",
181
+ "@directus/utils": "13.1.1",
182
+ "@directus/validation": "2.0.14",
183
+ "directus": "11.14.1",
184
+ "@directus/storage-driver-supabase": "3.0.14"
180
185
  },
181
186
  "devDependencies": {
182
187
  "@directus/tsconfig": "3.0.0",
183
188
  "@ngneat/falso": "8.0.2",
189
+ "@types/archiver": "7.0.0",
184
190
  "@types/async": "3.2.25",
185
191
  "@types/busboy": "1.5.4",
186
192
  "@types/bytes": "3.1.5",
@@ -219,8 +225,8 @@
219
225
  "knex-mock-client": "3.0.2",
220
226
  "typescript": "5.9.3",
221
227
  "vitest": "3.2.4",
222
- "@directus/schema-builder": "0.0.9",
223
- "@directus/types": "13.4.0"
228
+ "@directus/schema-builder": "0.0.11",
229
+ "@directus/types": "14.0.0"
224
230
  },
225
231
  "optionalDependencies": {
226
232
  "@keyv/redis": "3.0.1",
@@ -1,2 +0,0 @@
1
- declare const router: import("express-serve-static-core").Router;
2
- export default router;