@directus/api 20.1.0 → 21.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 (97) hide show
  1. package/dist/app.js +2 -2
  2. package/dist/auth/drivers/ldap.js +1 -1
  3. package/dist/auth/drivers/oauth2.js +1 -1
  4. package/dist/auth/drivers/openid.js +1 -1
  5. package/dist/auth/drivers/saml.js +1 -1
  6. package/dist/auth.js +1 -1
  7. package/dist/cache.d.ts +0 -1
  8. package/dist/cache.js +8 -23
  9. package/dist/cli/commands/bootstrap/index.js +1 -1
  10. package/dist/cli/commands/count/index.js +1 -1
  11. package/dist/cli/commands/database/install.js +1 -1
  12. package/dist/cli/commands/database/migrate.js +1 -1
  13. package/dist/cli/commands/roles/create.js +1 -1
  14. package/dist/cli/commands/schema/apply.js +1 -1
  15. package/dist/cli/commands/schema/snapshot.js +1 -1
  16. package/dist/cli/commands/users/create.js +1 -1
  17. package/dist/cli/commands/users/passwd.js +1 -1
  18. package/dist/cli/load-extensions.js +1 -1
  19. package/dist/constants.js +2 -2
  20. package/dist/controllers/assets.js +1 -1
  21. package/dist/controllers/auth.js +1 -1
  22. package/dist/controllers/files.js +1 -1
  23. package/dist/controllers/schema.js +1 -1
  24. package/dist/controllers/tus.js +5 -3
  25. package/dist/database/index.js +11 -7
  26. package/dist/database/migrations/20210518A-add-foreign-key-constraints.js +1 -1
  27. package/dist/database/migrations/20210519A-add-system-fk-triggers.js +1 -1
  28. package/dist/database/migrations/20210802A-replace-groups.js +1 -1
  29. package/dist/database/migrations/20230721A-require-shares-fields.js +1 -1
  30. package/dist/database/migrations/20240305A-change-useragent-type.js +1 -1
  31. package/dist/database/migrations/20240716A-update-files-date-fields.d.ts +3 -0
  32. package/dist/database/migrations/20240716A-update-files-date-fields.js +33 -0
  33. package/dist/database/migrations/run.js +1 -1
  34. package/dist/emitter.js +1 -1
  35. package/dist/extensions/lib/get-shared-deps-mapping.js +1 -1
  36. package/dist/extensions/lib/installation/manager.js +1 -1
  37. package/dist/extensions/lib/sandbox/register/call-reference.js +1 -1
  38. package/dist/extensions/lib/sandbox/sdk/generators/log.js +1 -1
  39. package/dist/extensions/lib/sync-extensions.js +1 -1
  40. package/dist/extensions/manager.js +1 -1
  41. package/dist/flows.js +1 -1
  42. package/dist/{logger.js → logger/index.js} +3 -9
  43. package/dist/logger/redact-query.d.ts +1 -0
  44. package/dist/logger/redact-query.js +13 -0
  45. package/dist/mailer.js +1 -1
  46. package/dist/middleware/cache.js +1 -1
  47. package/dist/middleware/check-ip.js +1 -1
  48. package/dist/middleware/error-handler.d.ts +2 -2
  49. package/dist/middleware/error-handler.js +55 -52
  50. package/dist/middleware/rate-limiter-global.js +1 -1
  51. package/dist/middleware/respond.js +1 -1
  52. package/dist/operations/log/index.js +1 -1
  53. package/dist/operations/mail/index.js +1 -1
  54. package/dist/request/is-denied-ip.js +1 -1
  55. package/dist/server.js +1 -1
  56. package/dist/services/activity.js +1 -1
  57. package/dist/services/assets.js +3 -6
  58. package/dist/services/fields.d.ts +3 -0
  59. package/dist/services/fields.js +29 -5
  60. package/dist/services/files/lib/get-sharp-instance.d.ts +2 -0
  61. package/dist/services/files/lib/get-sharp-instance.js +10 -0
  62. package/dist/services/files/utils/get-metadata.js +8 -7
  63. package/dist/services/files.js +6 -1
  64. package/dist/services/graphql/utils/process-error.js +1 -1
  65. package/dist/services/graphql/utils/sanitize-gql-schema.js +1 -1
  66. package/dist/services/import-export.js +1 -1
  67. package/dist/services/mail/index.d.ts +1 -1
  68. package/dist/services/mail/index.js +10 -2
  69. package/dist/services/notifications.js +1 -1
  70. package/dist/services/relations.d.ts +3 -1
  71. package/dist/services/relations.js +27 -5
  72. package/dist/services/server.js +1 -1
  73. package/dist/services/shares.js +1 -1
  74. package/dist/services/tus/data-store.js +5 -6
  75. package/dist/services/tus/server.d.ts +1 -1
  76. package/dist/services/tus/server.js +9 -2
  77. package/dist/services/users.js +1 -1
  78. package/dist/services/webhooks.js +1 -1
  79. package/dist/telemetry/lib/track.js +1 -1
  80. package/dist/utils/apply-diff.js +1 -1
  81. package/dist/utils/apply-query.js +8 -2
  82. package/dist/utils/delete-from-require-cache.js +1 -1
  83. package/dist/utils/get-default-value.js +1 -1
  84. package/dist/utils/get-ip-from-req.js +1 -1
  85. package/dist/utils/get-permissions.js +1 -1
  86. package/dist/utils/get-schema.js +4 -4
  87. package/dist/utils/is-url-allowed.js +1 -1
  88. package/dist/utils/sanitize-query.js +1 -1
  89. package/dist/utils/transaction.js +1 -1
  90. package/dist/utils/validate-env.js +1 -1
  91. package/dist/utils/validate-storage.js +1 -1
  92. package/dist/websocket/controllers/base.js +1 -1
  93. package/dist/websocket/controllers/graphql.js +1 -1
  94. package/dist/websocket/controllers/rest.js +1 -1
  95. package/dist/websocket/errors.js +1 -1
  96. package/package.json +32 -32
  97. /package/dist/{logger.d.ts → logger/index.d.ts} +0 -0
@@ -4,7 +4,7 @@ import { extname } from 'node:path';
4
4
  import stream from 'node:stream';
5
5
  import { DataStore, ERRORS, Upload } from '@tus/utils';
6
6
  import { ItemsService } from '../items.js';
7
- import { useLogger } from '../../logger.js';
7
+ import { useLogger } from '../../logger/index.js';
8
8
  import getDatabase from '../../database/index.js';
9
9
  import { omit } from 'lodash-es';
10
10
  export class TusDataStore extends DataStore {
@@ -79,16 +79,15 @@ export class TusDataStore extends DataStore {
79
79
  }
80
80
  // If this is a new file upload, we need to generate a new primary key and DB record
81
81
  const primaryKey = await itemsService.createOne(fileData, { emitEvents: false });
82
+ // Set the file id, so it is available to be sent as a header on upload creation / resume
83
+ if (!upload.metadata['id']) {
84
+ upload.metadata['id'] = primaryKey;
85
+ }
82
86
  const fileExtension = extname(upload.metadata['filename_download']) ||
83
87
  (upload.metadata['type'] && '.' + extension(upload.metadata['type'])) ||
84
88
  '';
85
89
  // The filename_disk is the FINAL filename on disk
86
90
  fileData.filename_disk ||= primaryKey + (fileExtension || '');
87
- // Temp filename is used for replacements
88
- // const tempFilenameDisk = fileData.tus_id! + (fileExtension || '');
89
- // if (isReplacement) {
90
- // upload.metadata['temp_file'] = tempFilenameDisk;
91
- // }
92
91
  try {
93
92
  // If this is a replacement, we'll write the file to a temp location first to ensure we don't overwrite the existing file if something goes wrong
94
93
  upload = (await this.storageDriver.createChunkedUpload(fileData.filename_disk, upload));
@@ -4,5 +4,5 @@ type Context = {
4
4
  schema: SchemaOverview;
5
5
  accountability?: Accountability | undefined;
6
6
  };
7
- export declare function createTusServer(context: Context): Promise<Server>;
7
+ export declare function createTusServer(context: Context): Promise<[Server, () => void]>;
8
8
  export {};
@@ -6,7 +6,7 @@
6
6
  import { useEnv } from '@directus/env';
7
7
  import { supportsTus } from '@directus/storage';
8
8
  import { toArray } from '@directus/utils';
9
- import { Server } from '@tus/server';
9
+ import { Server, EVENTS } from '@tus/server';
10
10
  import { RESUMABLE_UPLOADS } from '../../constants.js';
11
11
  import { getStorage } from '../../storage/index.js';
12
12
  import { extractMetadata } from '../files/lib/extract-metadata.js';
@@ -33,7 +33,7 @@ async function createTusStore(context) {
33
33
  export async function createTusServer(context) {
34
34
  const env = useEnv();
35
35
  const store = await createTusStore(context);
36
- return new Server({
36
+ const server = new Server({
37
37
  path: '/files/tus',
38
38
  datastore: store,
39
39
  locker: getTusLocker(),
@@ -77,4 +77,11 @@ export async function createTusServer(context) {
77
77
  },
78
78
  relativeLocation: String(env['PUBLIC_URL']).startsWith('http'),
79
79
  });
80
+ server.on(EVENTS.POST_CREATE, async (_req, res, upload) => {
81
+ res.setHeader('Directus-File-Id', upload.metadata['id']);
82
+ });
83
+ return [server, cleanup];
84
+ function cleanup() {
85
+ server.removeAllListeners();
86
+ }
80
87
  }
@@ -7,7 +7,7 @@ import jwt from 'jsonwebtoken';
7
7
  import { isEmpty, mergeWith } from 'lodash-es';
8
8
  import { performance } from 'perf_hooks';
9
9
  import getDatabase from '../database/index.js';
10
- import { useLogger } from '../logger.js';
10
+ import { useLogger } from '../logger/index.js';
11
11
  import { checkIncreasedUserLimits } from '../telemetry/utils/check-increased-user-limits.js';
12
12
  import { getRoleCountsByRoles } from '../telemetry/utils/get-role-counts-by-roles.js';
13
13
  import { getRoleCountsByUsers } from '../telemetry/utils/get-role-counts-by-users.js';
@@ -1,6 +1,6 @@
1
1
  import { ErrorCode, createError } from '@directus/errors';
2
2
  import { useBus } from '../bus/index.js';
3
- import { useLogger } from '../logger.js';
3
+ import { useLogger } from '../logger/index.js';
4
4
  import { ItemsService } from './items.js';
5
5
  const logger = useLogger();
6
6
  export class WebhooksService extends ItemsService {
@@ -1,6 +1,6 @@
1
1
  import { getNodeEnv } from '@directus/utils/node';
2
2
  import { setTimeout } from 'timers/promises';
3
- import { useLogger } from '../../logger.js';
3
+ import { useLogger } from '../../logger/index.js';
4
4
  import { getRandomWaitTime } from '../utils/get-random-wait-time.js';
5
5
  import { getReport } from './get-report.js';
6
6
  import { sendReport } from './send-report.js';
@@ -4,7 +4,7 @@ import { flushCaches } from '../cache.js';
4
4
  import { getHelpers } from '../database/helpers/index.js';
5
5
  import getDatabase from '../database/index.js';
6
6
  import emitter from '../emitter.js';
7
- import { useLogger } from '../logger.js';
7
+ import { useLogger } from '../logger/index.js';
8
8
  import { CollectionsService } from '../services/collections.js';
9
9
  import { FieldsService } from '../services/fields.js';
10
10
  import { RelationsService } from '../services/relations.js';
@@ -391,11 +391,17 @@ export function applyFilter(knex, schema, rootQuery, rootFilter, collection, ali
391
391
  // Knex supports "raw" in the columnName parameter, but isn't typed as such. Too bad..
392
392
  // See https://github.com/knex/knex/issues/4518 @TODO remove as any once knex is updated
393
393
  // These operators don't rely on a value, and can thus be used without one (eg `?filter[field][_null]`)
394
- if ((operator === '_null' && compareValue !== false) || (operator === '_nnull' && compareValue === false)) {
394
+ if ((operator === '_null' && compareValue !== false) ||
395
+ (operator === '_nnull' && compareValue === false) ||
396
+ (operator === '_eq' && compareValue === null)) {
395
397
  dbQuery[logical].whereNull(selectionRaw);
398
+ return;
396
399
  }
397
- if ((operator === '_nnull' && compareValue !== false) || (operator === '_null' && compareValue === false)) {
400
+ if ((operator === '_nnull' && compareValue !== false) ||
401
+ (operator === '_null' && compareValue === false) ||
402
+ (operator === '_neq' && compareValue === null)) {
398
403
  dbQuery[logical].whereNotNull(selectionRaw);
404
+ return;
399
405
  }
400
406
  if ((operator === '_empty' && compareValue !== false) || (operator === '_nempty' && compareValue === false)) {
401
407
  dbQuery[logical].andWhere((query) => {
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'node:module';
2
- import { useLogger } from '../logger.js';
2
+ import { useLogger } from '../logger/index.js';
3
3
  const require = createRequire(import.meta.url);
4
4
  export function deleteFromRequireCache(modulePath) {
5
5
  const logger = useLogger();
@@ -1,6 +1,6 @@
1
1
  import { parseJSON } from '@directus/utils';
2
2
  import { getNodeEnv } from '@directus/utils/node';
3
- import { useLogger } from '../logger.js';
3
+ import { useLogger } from '../logger/index.js';
4
4
  import getLocalType from './get-local-type.js';
5
5
  export default function getDefaultValue(column, field) {
6
6
  const type = getLocalType(column, field);
@@ -1,6 +1,6 @@
1
1
  import { useEnv } from '@directus/env';
2
2
  import { isIP } from 'net';
3
- import { useLogger } from '../logger.js';
3
+ import { useLogger } from '../logger/index.js';
4
4
  export function getIPFromReq(req) {
5
5
  const env = useEnv();
6
6
  const logger = useLogger();
@@ -5,7 +5,7 @@ import hash from 'object-hash';
5
5
  import { getCache, getCacheValue, getSystemCache, setCacheValue, setSystemCache } from '../cache.js';
6
6
  import getDatabase from '../database/index.js';
7
7
  import { appAccessMinimalPermissions } from '@directus/system-data';
8
- import { useLogger } from '../logger.js';
8
+ import { useLogger } from '../logger/index.js';
9
9
  import { RolesService } from '../services/roles.js';
10
10
  import { UsersService } from '../services/users.js';
11
11
  import { mergePermissionsForShare } from './merge-permissions-for-share.js';
@@ -8,7 +8,7 @@ import { getSchemaCache, setSchemaCache } from '../cache.js';
8
8
  import { ALIAS_TYPES } from '../constants.js';
9
9
  import getDatabase from '../database/index.js';
10
10
  import { useLock } from '../lock/index.js';
11
- import { useLogger } from '../logger.js';
11
+ import { useLogger } from '../logger/index.js';
12
12
  import { RelationsService } from '../services/relations.js';
13
13
  import getDefaultValue from './get-default-value.js';
14
14
  import { getSystemFieldRowsWithAuthProviders } from './get-field-system-rows.js';
@@ -17,9 +17,6 @@ const logger = useLogger();
17
17
  export async function getSchema(options, attempt = 0) {
18
18
  const MAX_ATTEMPTS = 3;
19
19
  const env = useEnv();
20
- if (attempt >= MAX_ATTEMPTS) {
21
- throw new Error(`Failed to get Schema information: hit infinite loop`);
22
- }
23
20
  if (options?.bypassCache || env['CACHE_SCHEMA'] === false) {
24
21
  const database = options?.database || getDatabase();
25
22
  const schemaInspector = createInspector(database);
@@ -29,6 +26,9 @@ export async function getSchema(options, attempt = 0) {
29
26
  if (cached) {
30
27
  return cached;
31
28
  }
29
+ if (attempt >= MAX_ATTEMPTS) {
30
+ throw new Error(`Failed to get Schema information: hit infinite loop`);
31
+ }
32
32
  const lock = useLock();
33
33
  const bus = useBus();
34
34
  const lockKey = 'schemaCache--preparing';
@@ -1,6 +1,6 @@
1
1
  import { toArray } from '@directus/utils';
2
2
  import { URL } from 'url';
3
- import { useLogger } from '../logger.js';
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
6
6
  */
@@ -2,7 +2,7 @@ import { useEnv } from '@directus/env';
2
2
  import { InvalidQueryError } from '@directus/errors';
3
3
  import { parseFilter, parseJSON } from '@directus/utils';
4
4
  import { flatten, get, isPlainObject, merge, set } from 'lodash-es';
5
- import { useLogger } from '../logger.js';
5
+ import { useLogger } from '../logger/index.js';
6
6
  import { Meta } from '../types/index.js';
7
7
  export function sanitizeQuery(rawQuery, accountability) {
8
8
  const env = useEnv();
@@ -1,6 +1,6 @@
1
1
  import {} from 'knex';
2
2
  import { getDatabaseClient } from '../database/index.js';
3
- import { useLogger } from '../logger.js';
3
+ import { useLogger } from '../logger/index.js';
4
4
  /**
5
5
  * Execute the given handler within the current transaction or a newly created one
6
6
  * if the current knex state isn't a transaction yet.
@@ -1,5 +1,5 @@
1
1
  import { useEnv } from '@directus/env';
2
- import { useLogger } from '../logger.js';
2
+ import { useLogger } from '../logger/index.js';
3
3
  export function validateEnv(requiredKeys) {
4
4
  const env = useEnv();
5
5
  const logger = useLogger();
@@ -4,7 +4,7 @@ import { constants } from 'fs';
4
4
  import { access } from 'node:fs/promises';
5
5
  import path from 'path';
6
6
  import { getExtensionsPath } from '../extensions/lib/get-extensions-path.js';
7
- import { useLogger } from '../logger.js';
7
+ import { useLogger } from '../logger/index.js';
8
8
  export async function validateStorage() {
9
9
  const env = useEnv();
10
10
  const logger = useLogger();
@@ -6,7 +6,7 @@ import { parse } from 'url';
6
6
  import WebSocket, { WebSocketServer } from 'ws';
7
7
  import { fromZodError } from 'zod-validation-error';
8
8
  import emitter from '../../emitter.js';
9
- import { useLogger } from '../../logger.js';
9
+ import { useLogger } from '../../logger/index.js';
10
10
  import { createRateLimiter } from '../../rate-limiter.js';
11
11
  import { getAccountabilityForToken } from '../../utils/get-accountability-for-token.js';
12
12
  import { authenticateConnection, authenticationSuccess } from '../authenticate.js';
@@ -1,6 +1,6 @@
1
1
  import { useEnv } from '@directus/env';
2
2
  import { CloseCode, MessageType, makeServer } from 'graphql-ws';
3
- import { useLogger } from '../../logger.js';
3
+ import { useLogger } from '../../logger/index.js';
4
4
  import { bindPubSub } from '../../services/graphql/subscription.js';
5
5
  import { GraphQLService } from '../../services/index.js';
6
6
  import { getSchema } from '../../utils/get-schema.js';
@@ -1,7 +1,7 @@
1
1
  import { useEnv } from '@directus/env';
2
2
  import { parseJSON } from '@directus/utils';
3
3
  import emitter from '../../emitter.js';
4
- import { useLogger } from '../../logger.js';
4
+ import { useLogger } from '../../logger/index.js';
5
5
  import { refreshAccountability } from '../authenticate.js';
6
6
  import { WebSocketError, handleWebSocketError } from '../errors.js';
7
7
  import { WebSocketMessage } from '../messages.js';
@@ -1,7 +1,7 @@
1
1
  import { isDirectusError } from '@directus/errors';
2
2
  import { ZodError } from 'zod';
3
3
  import { fromZodError } from 'zod-validation-error';
4
- import { useLogger } from '../logger.js';
4
+ import { useLogger } from '../logger/index.js';
5
5
  export class WebSocketError extends Error {
6
6
  type;
7
7
  code;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@directus/api",
3
- "version": "20.1.0",
3
+ "version": "21.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",
@@ -59,7 +59,7 @@
59
59
  ],
60
60
  "dependencies": {
61
61
  "@authenio/samlify-node-xmllint": "2.0.0",
62
- "@aws-sdk/client-ses": "3.600.0",
62
+ "@aws-sdk/client-ses": "3.614.0",
63
63
  "@godaddy/terminus": "4.12.1",
64
64
  "@rollup/plugin-alias": "5.1.0",
65
65
  "@rollup/plugin-node-resolve": "15.2.3",
@@ -70,7 +70,7 @@
70
70
  "@types/cookie": "0.6.0",
71
71
  "argon2": "0.40.3",
72
72
  "async": "3.2.5",
73
- "axios": "1.7.2",
73
+ "axios": "1.7.3",
74
74
  "busboy": "1.6.0",
75
75
  "bytes": "3.1.2",
76
76
  "camelcase": "8.0.0",
@@ -99,7 +99,7 @@
99
99
  "graphql-ws": "5.16.0",
100
100
  "helmet": "7.1.0",
101
101
  "icc": "3.0.0",
102
- "inquirer": "9.3.2",
102
+ "inquirer": "9.3.5",
103
103
  "ioredis": "5.4.1",
104
104
  "ip-matching": "2.1.2",
105
105
  "isolated-vm": "4.7.2",
@@ -111,12 +111,12 @@
111
111
  "keyv": "4.5.4",
112
112
  "knex": "3.1.0",
113
113
  "ldapjs": "2.3.3",
114
- "liquidjs": "10.14.0",
114
+ "liquidjs": "10.15.0",
115
115
  "lodash-es": "4.17.21",
116
116
  "marked": "12.0.2",
117
117
  "micromustache": "8.0.3",
118
118
  "mime-types": "2.1.35",
119
- "minimatch": "9.0.4",
119
+ "minimatch": "9.0.5",
120
120
  "mnemonist": "0.39.8",
121
121
  "ms": "2.1.3",
122
122
  "nanoid": "5.0.7",
@@ -124,7 +124,7 @@
124
124
  "node-schedule": "2.1.1",
125
125
  "nodemailer": "6.9.14",
126
126
  "object-hash": "3.0.0",
127
- "openapi3-ts": "4.3.2",
127
+ "openapi3-ts": "4.3.3",
128
128
  "openid-client": "5.6.5",
129
129
  "ora": "8.0.1",
130
130
  "otplib": "12.0.1",
@@ -135,7 +135,7 @@
135
135
  "pino-http": "9.0.0",
136
136
  "pino-http-print": "3.1.0",
137
137
  "pino-pretty": "11.2.1",
138
- "qs": "6.12.2",
138
+ "qs": "6.12.3",
139
139
  "rate-limiter-flexible": "5.0.3",
140
140
  "rollup": "4.17.2",
141
141
  "samlify": "2.8.10",
@@ -143,35 +143,35 @@
143
143
  "sharp": "0.33.4",
144
144
  "snappy": "7.2.2",
145
145
  "stream-json": "1.8.0",
146
- "tar": "7.4.0",
147
- "tsx": "4.12.0",
146
+ "tar": "7.4.2",
147
+ "tsx": "4.16.5",
148
148
  "wellknown": "0.5.0",
149
149
  "ws": "8.18.0",
150
150
  "zod": "3.23.8",
151
151
  "zod-validation-error": "3.3.0",
152
- "@directus/app": "12.2.1",
152
+ "@directus/app": "12.2.2",
153
+ "@directus/errors": "0.4.0",
153
154
  "@directus/constants": "11.0.4",
154
- "@directus/env": "1.3.0",
155
- "@directus/extensions": "1.0.9",
156
- "@directus/extensions-registry": "1.0.9",
155
+ "@directus/env": "1.3.1",
156
+ "@directus/extensions": "1.0.10",
157
+ "@directus/extensions-registry": "1.0.10",
158
+ "@directus/extensions-sdk": "11.0.10",
157
159
  "@directus/format-title": "10.1.2",
158
- "@directus/errors": "0.3.3",
159
- "@directus/memory": "1.0.10",
160
- "@directus/extensions-sdk": "11.0.9",
161
- "@directus/pressure": "1.0.21",
162
- "@directus/schema": "11.0.3",
163
- "@directus/specs": "10.2.10",
164
- "@directus/storage-driver-azure": "10.0.23",
160
+ "@directus/memory": "1.0.11",
161
+ "@directus/pressure": "1.0.22",
162
+ "@directus/schema": "11.0.4",
163
+ "@directus/specs": "10.2.11",
165
164
  "@directus/storage": "10.1.0",
166
- "@directus/storage-driver-cloudinary": "10.0.23",
167
- "@directus/storage-driver-gcs": "10.0.24",
165
+ "@directus/storage-driver-cloudinary": "10.0.24",
166
+ "@directus/storage-driver-azure": "10.0.24",
167
+ "@directus/storage-driver-gcs": "10.0.25",
168
168
  "@directus/storage-driver-local": "10.1.0",
169
- "@directus/storage-driver-s3": "10.1.0",
170
- "@directus/storage-driver-supabase": "1.0.15",
171
- "@directus/system-data": "1.1.0",
172
- "@directus/utils": "11.0.10",
173
- "@directus/validation": "0.0.18",
174
- "directus": "10.13.1"
169
+ "@directus/storage-driver-supabase": "1.0.16",
170
+ "@directus/storage-driver-s3": "10.1.1",
171
+ "@directus/utils": "11.0.11",
172
+ "@directus/validation": "0.0.19",
173
+ "@directus/system-data": "1.1.1",
174
+ "directus": "10.13.2"
175
175
  },
176
176
  "devDependencies": {
177
177
  "@ngneat/falso": "7.2.0",
@@ -196,7 +196,7 @@
196
196
  "@types/lodash-es": "4.17.12",
197
197
  "@types/mime-types": "2.1.4",
198
198
  "@types/ms": "0.7.34",
199
- "@types/node": "18.19.33",
199
+ "@types/node": "18.19.43",
200
200
  "@types/node-schedule": "2.1.7",
201
201
  "@types/nodemailer": "6.4.15",
202
202
  "@types/object-hash": "3.0.6",
@@ -205,7 +205,7 @@
205
205
  "@types/sanitize-html": "2.11.0",
206
206
  "@types/stream-json": "1.7.7",
207
207
  "@types/wellknown": "0.5.8",
208
- "@types/ws": "8.5.10",
208
+ "@types/ws": "8.5.11",
209
209
  "@vitest/coverage-v8": "1.5.3",
210
210
  "copyfiles": "2.4.1",
211
211
  "form-data": "4.0.0",
@@ -214,7 +214,7 @@
214
214
  "vitest": "1.5.3",
215
215
  "@directus/tsconfig": "1.0.1",
216
216
  "@directus/random": "0.2.8",
217
- "@directus/types": "11.2.0"
217
+ "@directus/types": "11.2.1"
218
218
  },
219
219
  "optionalDependencies": {
220
220
  "@keyv/redis": "2.8.5",
File without changes