@directus/api 31.0.0 → 32.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 (135) hide show
  1. package/dist/app.js +2 -0
  2. package/dist/auth/auth.d.ts +2 -1
  3. package/dist/auth/auth.js +7 -2
  4. package/dist/auth/drivers/ldap.d.ts +0 -2
  5. package/dist/auth/drivers/ldap.js +9 -7
  6. package/dist/auth/drivers/oauth2.d.ts +0 -2
  7. package/dist/auth/drivers/oauth2.js +11 -8
  8. package/dist/auth/drivers/openid.d.ts +0 -2
  9. package/dist/auth/drivers/openid.js +11 -8
  10. package/dist/auth/drivers/saml.d.ts +0 -2
  11. package/dist/auth/drivers/saml.js +5 -5
  12. package/dist/auth.js +1 -2
  13. package/dist/cli/commands/bootstrap/index.js +12 -33
  14. package/dist/cli/commands/init/index.js +1 -1
  15. package/dist/cli/commands/schema/apply.d.ts +4 -0
  16. package/dist/cli/commands/schema/apply.js +26 -3
  17. package/dist/controllers/collections.js +7 -2
  18. package/dist/controllers/fields.js +31 -8
  19. package/dist/controllers/server.js +26 -1
  20. package/dist/controllers/settings.js +9 -2
  21. package/dist/controllers/users.js +2 -2
  22. package/dist/database/helpers/fn/types.js +3 -3
  23. package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +2 -1
  24. package/dist/database/helpers/schema/dialects/cockroachdb.js +13 -0
  25. package/dist/database/helpers/schema/dialects/mssql.d.ts +2 -1
  26. package/dist/database/helpers/schema/dialects/mssql.js +23 -0
  27. package/dist/database/helpers/schema/dialects/mysql.d.ts +2 -1
  28. package/dist/database/helpers/schema/dialects/mysql.js +25 -0
  29. package/dist/database/helpers/schema/dialects/oracle.d.ts +2 -1
  30. package/dist/database/helpers/schema/dialects/oracle.js +13 -0
  31. package/dist/database/helpers/schema/dialects/postgres.d.ts +2 -1
  32. package/dist/database/helpers/schema/dialects/postgres.js +13 -0
  33. package/dist/database/helpers/schema/types.d.ts +5 -0
  34. package/dist/database/helpers/schema/types.js +6 -0
  35. package/dist/database/migrations/20251012A-add-field-searchable.d.ts +3 -0
  36. package/dist/database/migrations/20251012A-add-field-searchable.js +10 -0
  37. package/dist/database/migrations/20251014A-add-project-owner.d.ts +3 -0
  38. package/dist/database/migrations/20251014A-add-project-owner.js +37 -0
  39. package/dist/database/migrations/20251028A-add-retention-indexes.d.ts +3 -0
  40. package/dist/database/migrations/20251028A-add-retention-indexes.js +42 -0
  41. package/dist/database/run-ast/lib/apply-query/add-join.js +2 -2
  42. package/dist/database/run-ast/lib/apply-query/filter/get-filter-type.d.ts +2 -2
  43. package/dist/database/run-ast/lib/apply-query/index.d.ts +0 -1
  44. package/dist/database/run-ast/lib/apply-query/index.js +4 -6
  45. package/dist/database/run-ast/lib/apply-query/search.js +2 -0
  46. package/dist/database/run-ast/lib/get-db-query.js +7 -6
  47. package/dist/database/run-ast/utils/generate-alias.d.ts +6 -0
  48. package/dist/database/run-ast/utils/generate-alias.js +57 -0
  49. package/dist/flows.js +1 -0
  50. package/dist/mcp/schema.d.ts +14 -14
  51. package/dist/mcp/schema.js +6 -6
  52. package/dist/mcp/server.d.ts +9 -3
  53. package/dist/mcp/server.js +1 -1
  54. package/dist/mcp/tools/collections.d.ts +1 -1
  55. package/dist/mcp/tools/fields.d.ts +1 -1
  56. package/dist/mcp/tools/files.d.ts +25 -25
  57. package/dist/mcp/tools/flows.d.ts +36 -36
  58. package/dist/mcp/tools/folders.d.ts +18 -18
  59. package/dist/mcp/tools/items.d.ts +18 -18
  60. package/dist/mcp/tools/operations.d.ts +19 -19
  61. package/dist/mcp/tools/prompts/items.md +1 -1
  62. package/dist/metrics/lib/create-metrics.js +16 -25
  63. package/dist/middleware/collection-exists.js +2 -2
  64. package/dist/operations/mail/index.js +3 -1
  65. package/dist/operations/mail/rate-limiter.d.ts +1 -0
  66. package/dist/operations/mail/rate-limiter.js +29 -0
  67. package/dist/permissions/modules/process-payload/process-payload.js +3 -10
  68. package/dist/permissions/modules/validate-access/validate-access.js +2 -3
  69. package/dist/schedules/metrics.js +6 -2
  70. package/dist/schedules/project.d.ts +4 -0
  71. package/dist/schedules/project.js +27 -0
  72. package/dist/services/collections.d.ts +3 -3
  73. package/dist/services/collections.js +16 -1
  74. package/dist/services/fields.d.ts +21 -5
  75. package/dist/services/fields.js +105 -28
  76. package/dist/services/graphql/resolvers/query.js +1 -1
  77. package/dist/services/graphql/resolvers/system-admin.js +49 -5
  78. package/dist/services/graphql/schema/parse-query.js +8 -8
  79. package/dist/services/graphql/utils/aggregate-query.d.ts +1 -1
  80. package/dist/services/graphql/utils/aggregate-query.js +5 -1
  81. package/dist/services/graphql/utils/filter-replace-m2a.js +2 -1
  82. package/dist/services/import-export.d.ts +9 -1
  83. package/dist/services/import-export.js +287 -101
  84. package/dist/services/items.d.ts +1 -1
  85. package/dist/services/items.js +36 -20
  86. package/dist/services/mail/index.js +2 -0
  87. package/dist/services/mail/rate-limiter.d.ts +1 -0
  88. package/dist/services/mail/rate-limiter.js +29 -0
  89. package/dist/services/meta.js +28 -24
  90. package/dist/services/schema.js +4 -1
  91. package/dist/services/server.d.ts +1 -0
  92. package/dist/services/server.js +14 -18
  93. package/dist/services/settings.d.ts +2 -1
  94. package/dist/services/settings.js +15 -0
  95. package/dist/services/tus/server.js +14 -9
  96. package/dist/telemetry/lib/get-report.js +4 -4
  97. package/dist/telemetry/lib/send-report.d.ts +6 -1
  98. package/dist/telemetry/lib/send-report.js +3 -1
  99. package/dist/telemetry/types/report.d.ts +17 -1
  100. package/dist/telemetry/utils/get-settings.d.ts +9 -0
  101. package/dist/telemetry/utils/get-settings.js +14 -0
  102. package/dist/test-utils/README.md +760 -0
  103. package/dist/test-utils/cache.d.ts +51 -0
  104. package/dist/test-utils/cache.js +59 -0
  105. package/dist/test-utils/database.d.ts +48 -0
  106. package/dist/test-utils/database.js +52 -0
  107. package/dist/test-utils/emitter.d.ts +35 -0
  108. package/dist/test-utils/emitter.js +38 -0
  109. package/dist/test-utils/fields-service.d.ts +28 -0
  110. package/dist/test-utils/fields-service.js +36 -0
  111. package/dist/test-utils/items-service.d.ts +23 -0
  112. package/dist/test-utils/items-service.js +37 -0
  113. package/dist/test-utils/knex.d.ts +164 -0
  114. package/dist/test-utils/knex.js +268 -0
  115. package/dist/test-utils/schema.d.ts +26 -0
  116. package/dist/test-utils/schema.js +35 -0
  117. package/dist/types/auth.d.ts +0 -2
  118. package/dist/utils/apply-diff.js +15 -0
  119. package/dist/utils/create-admin.d.ts +11 -0
  120. package/dist/utils/create-admin.js +50 -0
  121. package/dist/utils/get-schema.js +5 -3
  122. package/dist/utils/get-snapshot-diff.js +49 -5
  123. package/dist/utils/get-snapshot.js +13 -7
  124. package/dist/utils/sanitize-schema.d.ts +11 -4
  125. package/dist/utils/sanitize-schema.js +9 -6
  126. package/dist/utils/schedule.js +15 -19
  127. package/dist/utils/validate-diff.js +31 -0
  128. package/dist/utils/validate-snapshot.js +7 -0
  129. package/dist/websocket/controllers/hooks.js +12 -20
  130. package/dist/websocket/messages.d.ts +3 -3
  131. package/package.json +63 -65
  132. package/dist/cli/utils/defaults.d.ts +0 -4
  133. package/dist/cli/utils/defaults.js +0 -17
  134. package/dist/telemetry/utils/get-project-id.d.ts +0 -2
  135. package/dist/telemetry/utils/get-project-id.js +0 -4
@@ -6,8 +6,6 @@ import { pick } from 'lodash-es';
6
6
  * @returns sanitized collection
7
7
  */
8
8
  export function sanitizeCollection(collection) {
9
- if (!collection)
10
- return collection;
11
9
  return pick(collection, ['collection', 'fields', 'meta', 'schema.name']);
12
10
  }
13
11
  /**
@@ -18,8 +16,6 @@ export function sanitizeCollection(collection) {
18
16
  * @returns sanitized field
19
17
  */
20
18
  export function sanitizeField(field, sanitizeAllSchema = false) {
21
- if (!field)
22
- return field;
23
19
  const defaultPaths = ['collection', 'field', 'type', 'meta', 'name', 'children'];
24
20
  const pickedPaths = sanitizeAllSchema
25
21
  ? defaultPaths
@@ -71,8 +67,6 @@ export function sanitizeColumn(column) {
71
67
  * @returns sanitized relation
72
68
  */
73
69
  export function sanitizeRelation(relation) {
74
- if (!relation)
75
- return relation;
76
70
  return pick(relation, [
77
71
  'collection',
78
72
  'field',
@@ -87,3 +81,12 @@ export function sanitizeRelation(relation) {
87
81
  'schema.on_delete',
88
82
  ]);
89
83
  }
84
+ /**
85
+ * Pick certain specific system field properties that should be compared when performing diff
86
+ *
87
+ * @param field field to sanitize
88
+ * @returns sanitized system field
89
+ */
90
+ export function sanitizeSystemField(field) {
91
+ return pick(field, ['collection', 'field', 'schema.is_indexed']);
92
+ }
@@ -1,29 +1,25 @@
1
- import cron from 'cron-parser';
2
- import schedule from 'node-schedule';
1
+ import { CronJob, validateCronExpression } from 'cron';
3
2
  import { SynchronizedClock } from '../synchronization.js';
4
3
  export function validateCron(rule) {
5
- try {
6
- cron.parseExpression(rule);
7
- }
8
- catch {
9
- return false;
10
- }
11
- return true;
4
+ return validateCronExpression(rule).valid;
12
5
  }
13
6
  export function scheduleSynchronizedJob(id, rule, cb) {
14
7
  const clock = new SynchronizedClock(`${id}:${rule}`);
15
- const job = schedule.scheduleJob(rule, async (fireDate) => {
16
- const nextInvocation = job.nextInvocation();
17
- if (!nextInvocation)
18
- return;
19
- const nextTimestamp = nextInvocation.getTime();
20
- const wasSet = await clock.set(nextTimestamp);
21
- if (wasSet) {
22
- await cb(fireDate);
23
- }
8
+ const job = CronJob.from({
9
+ cronTime: rule,
10
+ onTick: async (fireDate) => {
11
+ // Get next execution time for synchronization
12
+ const nextDate = job.nextDate();
13
+ const nextTimestamp = nextDate.toMillis();
14
+ const wasSet = await clock.set(nextTimestamp);
15
+ if (wasSet) {
16
+ await cb(fireDate);
17
+ }
18
+ },
19
+ start: true,
24
20
  });
25
21
  const stop = async () => {
26
- job.cancel();
22
+ job.stop();
27
23
  await clock.reset();
28
24
  };
29
25
  return { stop };
@@ -31,6 +31,13 @@ const applyJoiSchema = Joi.object({
31
31
  diff: Joi.array().items(deepDiffSchema).required(),
32
32
  }))
33
33
  .required(),
34
+ systemFields: Joi.array()
35
+ .items(Joi.object({
36
+ collection: Joi.string().required(),
37
+ field: Joi.string().required(),
38
+ diff: Joi.array().items(deepDiffSchema).required(),
39
+ }))
40
+ .required(),
34
41
  relations: Joi.array()
35
42
  .items(Joi.object({
36
43
  collection: Joi.string().required(),
@@ -53,6 +60,7 @@ export function validateApplyDiff(applyDiff, currentSnapshotWithHash) {
53
60
  // No changes to apply
54
61
  if (applyDiff.diff.collections.length === 0 &&
55
62
  applyDiff.diff.fields.length === 0 &&
63
+ applyDiff.diff.systemFields.length === 0 &&
56
64
  applyDiff.diff.relations.length === 0) {
57
65
  return false;
58
66
  }
@@ -97,6 +105,29 @@ export function validateApplyDiff(applyDiff, currentSnapshotWithHash) {
97
105
  }
98
106
  }
99
107
  }
108
+ for (const diffSystemField of applyDiff.diff.systemFields) {
109
+ const systemField = `${diffSystemField.collection}.${diffSystemField.field}`;
110
+ if (!diffSystemField.diff[0])
111
+ continue;
112
+ if (diffSystemField.diff[0].kind !== DiffKind.EDIT) {
113
+ let action = 'update array'; // DiffKind.ARRAY
114
+ if (diffSystemField.diff[0].kind === DiffKind.NEW) {
115
+ action = 'create';
116
+ }
117
+ else if (diffSystemField.diff[0].kind === DiffKind.DELETE) {
118
+ action = 'delete';
119
+ }
120
+ throw new InvalidPayloadError({
121
+ reason: `Provided diff is trying to ${action} field "${systemField}" but this action is not supported. Please generate a new diff and try again`,
122
+ });
123
+ }
124
+ const pathString = diffSystemField.diff[0].path?.join('.') ?? '';
125
+ if (pathString.length === 0 || pathString !== 'schema.is_indexed') {
126
+ throw new InvalidPayloadError({
127
+ reason: `Provided diff is trying to alter property "${pathString}" on "${systemField}" but currently only "schema.is_indexed" is supported. Please generate a new diff and try again`,
128
+ });
129
+ }
130
+ }
100
131
  for (const diffRelation of applyDiff.diff.relations) {
101
132
  let relation = `${diffRelation.collection}.${diffRelation.field}`;
102
133
  if (diffRelation.related_collection)
@@ -33,6 +33,13 @@ const snapshotJoiSchema = Joi.object({
33
33
  .valid(...TYPES, ...ALIAS_TYPES)
34
34
  .allow(null),
35
35
  })),
36
+ systemFields: Joi.array().items(Joi.object({
37
+ collection: Joi.string(),
38
+ field: Joi.string(),
39
+ schema: Joi.object({
40
+ is_indexed: Joi.bool(),
41
+ }),
42
+ })),
36
43
  relations: Joi.array().items(Joi.object({
37
44
  collection: Joi.string(),
38
45
  field: Joi.string(),
@@ -1,3 +1,4 @@
1
+ import { systemCollectionNames } from '@directus/system-data';
1
2
  import { useBus } from '../../bus/index.js';
2
3
  import emitter from '../../emitter.js';
3
4
  let actionsRegistered = false;
@@ -7,26 +8,17 @@ export function registerWebSocketEvents() {
7
8
  actionsRegistered = true;
8
9
  registerActionHooks([
9
10
  'items',
10
- 'access',
11
- 'activity',
12
- 'collections',
13
- 'dashboards',
14
- 'flows',
15
- 'folders',
16
- 'notifications',
17
- 'operations',
18
- 'panels',
19
- 'permissions',
20
- 'policies',
21
- 'presets',
22
- 'revisions',
23
- 'roles',
24
- 'settings',
25
- 'shares',
26
- 'translations',
27
- 'users',
28
- 'versions',
29
- 'webhooks',
11
+ ...systemCollectionNames
12
+ .filter((collection) => ![
13
+ 'directus_migrations',
14
+ // manually registered below
15
+ 'directus_fields',
16
+ 'directus_relations',
17
+ 'directus_files',
18
+ // excluded for security reasons
19
+ 'directus_sessions',
20
+ ].includes(collection))
21
+ .map((collection) => collection.replace('directus_', '')),
30
22
  ]);
31
23
  registerFieldsHooks();
32
24
  registerFilesHooks();
@@ -12,7 +12,7 @@ export declare const WebSocketResponse: z.ZodDiscriminatedUnion<[z.ZodObject<{
12
12
  code: z.ZodString;
13
13
  message: z.ZodString;
14
14
  }, z.core.$loose>;
15
- }, z.core.$loose>]>;
15
+ }, z.core.$loose>], "status">;
16
16
  export type WebSocketResponse = z.infer<typeof WebSocketResponse>;
17
17
  export declare const ConnectionParams: z.ZodObject<{
18
18
  access_token: z.ZodOptional<z.ZodString>;
@@ -49,7 +49,7 @@ export declare const WebSocketSubscribeMessage: z.ZodDiscriminatedUnion<[z.ZodOb
49
49
  }, z.core.$loose>, z.ZodObject<{
50
50
  uid: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
51
51
  type: z.ZodLiteral<"unsubscribe">;
52
- }, z.core.$loose>]>;
52
+ }, z.core.$loose>], "type">;
53
53
  export type WebSocketSubscribeMessage = z.infer<typeof WebSocketSubscribeMessage>;
54
54
  export declare const WebSocketLogsMessage: z.ZodUnion<readonly [z.ZodObject<{
55
55
  type: z.ZodLiteral<"subscribe">;
@@ -108,7 +108,7 @@ export declare const WebSocketEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
108
108
  collection: z.ZodString;
109
109
  payload: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
110
110
  keys: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
111
- }, z.core.$strip>]>;
111
+ }, z.core.$strip>], "action">;
112
112
  export type WebSocketEvent = z.infer<typeof WebSocketEvent>;
113
113
  export declare const AuthMode: z.ZodUnion<readonly [z.ZodLiteral<"public">, z.ZodLiteral<"handshake">, z.ZodLiteral<"strict">]>;
114
114
  export type AuthMode = z.infer<typeof AuthMode>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@directus/api",
3
- "version": "31.0.0",
3
+ "version": "32.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,48 +59,47 @@
59
59
  ],
60
60
  "dependencies": {
61
61
  "@authenio/samlify-node-xmllint": "2.0.0",
62
- "@aws-sdk/client-sesv2": "3.864.0",
62
+ "@aws-sdk/client-sesv2": "3.918.0",
63
63
  "@godaddy/terminus": "4.12.1",
64
- "@modelcontextprotocol/sdk": "1.17.1",
64
+ "@modelcontextprotocol/sdk": "1.20.2",
65
65
  "@rollup/plugin-alias": "5.1.1",
66
- "@rollup/plugin-node-resolve": "16.0.1",
66
+ "@rollup/plugin-node-resolve": "16.0.3",
67
67
  "@rollup/plugin-virtual": "3.0.2",
68
- "@tus/server": "1.10.2",
69
- "@tus/utils": "0.5.1",
70
- "argon2": "0.43.1",
68
+ "@tus/server": "2.3.0",
69
+ "@tus/utils": "0.6.0",
70
+ "argon2": "0.44.0",
71
71
  "async": "3.2.6",
72
72
  "async-mutex": "0.5.0",
73
- "axios": "1.11.0",
73
+ "axios": "1.12.2",
74
74
  "busboy": "1.6.0",
75
75
  "bytes": "3.1.2",
76
76
  "camelcase": "8.0.0",
77
- "chalk": "5.4.1",
77
+ "chalk": "5.6.2",
78
78
  "chokidar": "4.0.3",
79
- "commander": "14.0.0",
79
+ "commander": "14.0.2",
80
80
  "content-disposition": "0.5.4",
81
81
  "cookie": "1.0.2",
82
82
  "cookie-parser": "1.4.7",
83
83
  "cors": "2.8.5",
84
- "cron-parser": "4.9.0",
85
84
  "date-fns": "4.1.0",
86
85
  "deep-diff": "1.0.2",
87
86
  "destroy": "1.2.0",
88
- "dotenv": "17.2.1",
87
+ "dotenv": "17.2.3",
89
88
  "encodeurl": "2.0.0",
90
89
  "eventemitter2": "6.4.9",
91
90
  "execa": "9.6.0",
92
91
  "exif-reader": "2.0.2",
93
92
  "express": "4.21.2",
94
93
  "flat": "6.0.1",
95
- "fs-extra": "11.3.0",
94
+ "fs-extra": "11.3.2",
96
95
  "glob-to-regexp": "0.4.1",
97
96
  "graphql": "16.11.0",
98
97
  "graphql-compose": "9.1.0",
99
98
  "graphql-ws": "6.0.6",
100
99
  "helmet": "8.1.0",
101
100
  "icc": "3.0.0",
102
- "inquirer": "12.9.0",
103
- "ioredis": "5.7.0",
101
+ "inquirer": "12.10.0",
102
+ "ioredis": "5.8.2",
104
103
  "ip-matching": "2.1.2",
105
104
  "isolated-vm": "5.0.3",
106
105
  "joi": "18.0.1",
@@ -108,85 +107,85 @@
108
107
  "js2xmlparser": "5.0.0",
109
108
  "json2csv": "5.0.7",
110
109
  "jsonwebtoken": "9.0.2",
111
- "keyv": "5.4.0",
110
+ "keyv": "5.5.3",
112
111
  "knex": "3.1.0",
113
112
  "ldapjs": "2.3.3",
114
- "liquidjs": "10.21.1",
113
+ "liquidjs": "10.24.0",
115
114
  "lodash-es": "4.17.21",
116
- "marked": "16.1.1",
115
+ "marked": "16.4.1",
117
116
  "micromustache": "8.0.3",
118
117
  "mime-types": "3.0.1",
119
- "minimatch": "10.0.3",
118
+ "minimatch": "10.1.1",
120
119
  "mnemonist": "0.40.3",
121
120
  "ms": "2.1.3",
122
- "nanoid": "5.1.5",
121
+ "nanoid": "5.1.6",
123
122
  "node-machine-id": "1.1.12",
124
- "node-schedule": "2.1.1",
125
- "nodemailer": "7.0.5",
123
+ "cron": "4.3.3",
124
+ "nodemailer": "7.0.10",
126
125
  "object-hash": "3.0.0",
127
126
  "openapi3-ts": "4.5.0",
128
127
  "openid-client": "5.7.1",
129
128
  "ora": "8.2.0",
130
129
  "otplib": "12.0.1",
131
- "p-limit": "6.2.0",
130
+ "p-limit": "7.2.0",
132
131
  "p-queue": "8.1.0",
133
132
  "papaparse": "5.5.3",
134
133
  "pino": "9.7.0",
135
134
  "pino-http": "10.5.0",
136
135
  "pino-http-print": "3.1.0",
137
- "pino-pretty": "13.1.1",
138
- "pm2": "6.0.8",
136
+ "pino-pretty": "13.1.2",
137
+ "pm2": "6.0.13",
139
138
  "prom-client": "15.1.3",
140
139
  "proxy-addr": "2.0.7",
141
140
  "qs": "6.14.0",
142
141
  "rate-limiter-flexible": "7.2.0",
143
142
  "rolldown": "1.0.0-beta.31",
144
- "rollup": "4.46.2",
143
+ "rollup": "4.52.5",
145
144
  "samlify": "2.10.1",
146
145
  "sanitize-html": "2.17.0",
147
- "sharp": "0.34.3",
148
- "snappy": "7.3.0",
146
+ "sharp": "0.34.4",
147
+ "snappy": "7.3.3",
149
148
  "stream-json": "1.9.1",
150
- "tar": "7.4.3",
151
- "tsx": "4.20.3",
149
+ "tar": "7.5.2",
150
+ "tsx": "4.20.6",
152
151
  "uuid": "11.1.0",
153
152
  "wellknown": "0.5.0",
154
153
  "ws": "8.18.3",
155
- "zod": "4.0.14",
156
- "zod-validation-error": "4.0.1",
157
- "@directus/env": "5.2.0",
158
- "@directus/app": "14.0.0",
159
- "@directus/errors": "2.0.4",
160
- "@directus/extensions": "3.0.11",
161
- "@directus/constants": "13.0.3",
162
- "@directus/extensions-registry": "3.0.11",
163
- "@directus/extensions-sdk": "16.0.2",
164
- "@directus/format-title": "12.1.0",
165
- "@directus/memory": "3.0.9",
166
- "@directus/pressure": "3.0.9",
167
- "@directus/schema": "13.0.3",
168
- "@directus/schema-builder": "0.0.6",
154
+ "zod": "4.1.12",
155
+ "zod-validation-error": "4.0.2",
156
+ "@directus/app": "14.1.0",
157
+ "@directus/constants": "14.0.0",
158
+ "@directus/errors": "2.0.5",
159
+ "@directus/extensions": "3.0.12",
160
+ "@directus/env": "5.3.0",
161
+ "@directus/extensions-sdk": "17.0.0",
162
+ "@directus/extensions-registry": "3.0.12",
163
+ "@directus/format-title": "12.1.1",
164
+ "@directus/memory": "3.0.10",
165
+ "@directus/pressure": "3.0.10",
166
+ "@directus/schema-builder": "0.0.7",
167
+ "@directus/schema": "13.0.4",
168
+ "@directus/storage": "12.0.3",
169
169
  "@directus/specs": "11.1.1",
170
- "@directus/storage": "12.0.2",
171
- "@directus/storage-driver-azure": "12.0.9",
172
- "@directus/storage-driver-cloudinary": "12.0.9",
173
- "@directus/storage-driver-gcs": "12.0.9",
174
- "@directus/storage-driver-local": "12.0.2",
175
- "@directus/storage-driver-s3": "12.0.9",
176
- "@directus/storage-driver-supabase": "3.0.9",
177
- "@directus/system-data": "3.3.0",
178
- "@directus/utils": "13.0.10",
179
- "directus": "11.12.0",
180
- "@directus/validation": "2.0.9"
170
+ "@directus/storage-driver-azure": "12.0.10",
171
+ "@directus/storage-driver-cloudinary": "12.0.10",
172
+ "@directus/storage-driver-gcs": "12.0.10",
173
+ "@directus/storage-driver-s3": "12.0.10",
174
+ "@directus/system-data": "3.4.0",
175
+ "@directus/storage-driver-local": "12.0.3",
176
+ "@directus/utils": "13.0.11",
177
+ "@directus/storage-driver-supabase": "3.0.10",
178
+ "@directus/validation": "2.0.10",
179
+ "directus": "11.13.0"
181
180
  },
182
181
  "devDependencies": {
183
182
  "@directus/tsconfig": "3.0.0",
184
183
  "@ngneat/falso": "8.0.2",
185
- "@types/async": "3.2.24",
184
+ "@types/async": "3.2.25",
186
185
  "@types/busboy": "1.5.4",
187
186
  "@types/bytes": "3.1.5",
188
187
  "@types/content-disposition": "0.5.9",
189
- "@types/cookie-parser": "1.4.9",
188
+ "@types/cookie-parser": "1.4.10",
190
189
  "@types/cors": "2.8.19",
191
190
  "@types/deep-diff": "1.0.5",
192
191
  "@types/destroy": "1.0.3",
@@ -195,7 +194,7 @@
195
194
  "@types/express-serve-static-core": "4.19.6",
196
195
  "@types/fs-extra": "11.0.4",
197
196
  "@types/glob-to-regexp": "0.4.4",
198
- "@types/inquirer": "9.0.8",
197
+ "@types/inquirer": "9.0.9",
199
198
  "@types/js-yaml": "4.0.9",
200
199
  "@types/json2csv": "5.0.7",
201
200
  "@types/jsonwebtoken": "9.0.10",
@@ -204,8 +203,7 @@
204
203
  "@types/mime-types": "3.0.1",
205
204
  "@types/ms": "2.1.0",
206
205
  "@types/node": "22.13.14",
207
- "@types/node-schedule": "2.1.8",
208
- "@types/nodemailer": "6.4.17",
206
+ "@types/nodemailer": "7.0.3",
209
207
  "@types/object-hash": "3.0.6",
210
208
  "@types/papaparse": "5.3.16",
211
209
  "@types/proxy-addr": "2.0.3",
@@ -219,16 +217,16 @@
219
217
  "form-data": "4.0.4",
220
218
  "get-port": "7.1.0",
221
219
  "knex-mock-client": "3.0.2",
222
- "typescript": "5.8.3",
220
+ "typescript": "5.9.3",
223
221
  "vitest": "3.2.4",
224
- "@directus/schema-builder": "0.0.6",
225
- "@directus/types": "13.2.3"
222
+ "@directus/types": "13.3.0",
223
+ "@directus/schema-builder": "0.0.7"
226
224
  },
227
225
  "optionalDependencies": {
228
226
  "@keyv/redis": "3.0.1",
229
- "mysql2": "3.14.3",
227
+ "mysql2": "3.15.3",
230
228
  "nodemailer-mailgun-transport": "2.1.5",
231
- "oracledb": "6.9.0",
229
+ "oracledb": "6.10.0",
232
230
  "pg": "8.16.3",
233
231
  "sqlite3": "5.1.7",
234
232
  "tedious": "18.6.1"
@@ -1,4 +0,0 @@
1
- import type { Policy, Role, User } from '@directus/types';
2
- export declare const defaultAdminRole: Partial<Role>;
3
- export declare const defaultAdminUser: Partial<User>;
4
- export declare const defaultAdminPolicy: Partial<Policy>;
@@ -1,17 +0,0 @@
1
- export const defaultAdminRole = {
2
- name: 'Administrator',
3
- icon: 'verified',
4
- description: '$t:admin_description',
5
- };
6
- export const defaultAdminUser = {
7
- status: 'active',
8
- first_name: 'Admin',
9
- last_name: 'User',
10
- };
11
- export const defaultAdminPolicy = {
12
- name: 'Administrator',
13
- icon: 'verified',
14
- admin_access: true,
15
- app_access: true,
16
- description: '$t:admin_description',
17
- };
@@ -1,2 +0,0 @@
1
- import type { Knex } from 'knex';
2
- export declare const getProjectId: (db: Knex) => Promise<string>;
@@ -1,4 +0,0 @@
1
- export const getProjectId = async (db) => {
2
- const projectId = await db.select('project_id').from('directus_settings').first();
3
- return projectId?.project_id || null;
4
- };