directus 9.12.2 → 9.13.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 (117) hide show
  1. package/dist/app.js +5 -1
  2. package/dist/auth/drivers/index.js +5 -1
  3. package/dist/auth/drivers/ldap.js +5 -1
  4. package/dist/auth/drivers/oauth2.js +15 -23
  5. package/dist/auth/drivers/openid.js +16 -24
  6. package/dist/cli/commands/bootstrap/index.js +5 -1
  7. package/dist/cli/commands/schema/apply.js +7 -3
  8. package/dist/cli/commands/schema/snapshot.d.ts +1 -1
  9. package/dist/cli/commands/schema/snapshot.js +33 -25
  10. package/dist/cli/index.js +1 -1
  11. package/dist/cli/utils/create-env/env-stub.liquid +11 -11
  12. package/dist/controllers/assets.js +5 -5
  13. package/dist/controllers/dashboards.js +4 -1
  14. package/dist/controllers/files.js +8 -5
  15. package/dist/controllers/flows.js +4 -1
  16. package/dist/controllers/folders.js +4 -1
  17. package/dist/controllers/items.js +4 -1
  18. package/dist/controllers/notifications.js +4 -1
  19. package/dist/controllers/operations.js +4 -1
  20. package/dist/controllers/panels.js +4 -1
  21. package/dist/controllers/permissions.js +4 -1
  22. package/dist/controllers/presets.js +4 -1
  23. package/dist/controllers/roles.js +4 -1
  24. package/dist/controllers/shares.js +4 -1
  25. package/dist/controllers/users.js +75 -3
  26. package/dist/controllers/utils.js +3 -3
  27. package/dist/database/helpers/date/dialects/sqlite.js +3 -0
  28. package/dist/database/helpers/index.js +5 -1
  29. package/dist/database/index.js +2 -0
  30. package/dist/database/migrations/20210225A-add-relations-sort-field.js +2 -2
  31. package/dist/database/migrations/20210506A-rename-interfaces.js +2 -2
  32. package/dist/database/migrations/20210802A-replace-groups.js +2 -2
  33. package/dist/database/migrations/20210805A-update-groups.js +2 -2
  34. package/dist/database/migrations/20210805B-change-image-metadata-structure.js +3 -3
  35. package/dist/database/migrations/20211007A-update-presets.js +5 -5
  36. package/dist/database/migrations/20220429A-add-flows.js +1 -2
  37. package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.d.ts +3 -0
  38. package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.js +11 -0
  39. package/dist/database/system-data/fields/dashboards.yaml +1 -0
  40. package/dist/env.d.ts +1 -1
  41. package/dist/env.js +8 -3
  42. package/dist/exceptions/database/translate.js +5 -1
  43. package/dist/exceptions/index.js +5 -1
  44. package/dist/extensions.js +5 -1
  45. package/dist/flows.js +15 -11
  46. package/dist/index.js +5 -1
  47. package/dist/logger.js +5 -1
  48. package/dist/messenger.js +2 -2
  49. package/dist/middleware/graphql.js +2 -2
  50. package/dist/middleware/respond.js +10 -1
  51. package/dist/middleware/validate-batch.js +3 -1
  52. package/dist/operations/item-create/index.js +1 -2
  53. package/dist/operations/item-delete/index.d.ts +1 -0
  54. package/dist/operations/item-delete/index.js +8 -7
  55. package/dist/operations/item-read/index.js +7 -6
  56. package/dist/operations/item-update/index.d.ts +1 -0
  57. package/dist/operations/item-update/index.js +9 -8
  58. package/dist/operations/log/index.js +1 -2
  59. package/dist/operations/notification/index.js +1 -2
  60. package/dist/operations/transform/index.js +1 -2
  61. package/dist/operations/trigger/index.js +1 -2
  62. package/dist/server.js +5 -1
  63. package/dist/services/assets.js +5 -1
  64. package/dist/services/collections.js +5 -1
  65. package/dist/services/fields.d.ts +3 -3
  66. package/dist/services/fields.js +25 -17
  67. package/dist/services/files.js +5 -1
  68. package/dist/services/flows.d.ts +1 -0
  69. package/dist/services/flows.js +6 -0
  70. package/dist/services/{graphql.d.ts → graphql/index.d.ts} +3 -5
  71. package/dist/services/{graphql.js → graphql/index.js} +109 -101
  72. package/dist/services/graphql/types/date.d.ts +2 -0
  73. package/dist/services/graphql/types/date.js +9 -0
  74. package/dist/services/graphql/types/geojson.d.ts +2 -0
  75. package/dist/services/graphql/types/geojson.js +10 -0
  76. package/dist/services/graphql/types/string-or-float.d.ts +5 -0
  77. package/dist/services/graphql/types/string-or-float.js +34 -0
  78. package/dist/services/graphql/types/void.d.ts +2 -0
  79. package/dist/services/graphql/types/void.js +17 -0
  80. package/dist/services/graphql/utils/add-path-to-validation-error.d.ts +2 -0
  81. package/dist/services/graphql/utils/add-path-to-validation-error.js +20 -0
  82. package/dist/services/import-export.js +6 -7
  83. package/dist/services/index.js +5 -1
  84. package/dist/services/items.d.ts +5 -1
  85. package/dist/services/items.js +22 -2
  86. package/dist/services/mail/index.js +8 -6
  87. package/dist/services/operations.d.ts +1 -0
  88. package/dist/services/operations.js +6 -0
  89. package/dist/services/payload.js +2 -3
  90. package/dist/services/permissions.d.ts +1 -0
  91. package/dist/services/permissions.js +5 -0
  92. package/dist/services/relations.js +5 -1
  93. package/dist/services/roles.d.ts +1 -0
  94. package/dist/services/roles.js +9 -0
  95. package/dist/services/server.js +5 -1
  96. package/dist/services/users.d.ts +1 -0
  97. package/dist/services/users.js +17 -0
  98. package/dist/types/index.js +5 -1
  99. package/dist/utils/apply-query.js +24 -15
  100. package/dist/utils/calculate-field-depth.d.ts +33 -0
  101. package/dist/utils/calculate-field-depth.js +75 -0
  102. package/dist/utils/get-default-value.js +3 -13
  103. package/dist/utils/get-graphql-type.js +4 -3
  104. package/dist/utils/get-local-type.d.ts +6 -3
  105. package/dist/utils/get-permissions.js +3 -4
  106. package/dist/utils/get-schema.js +1 -2
  107. package/dist/utils/get-string-byte-size.d.ts +4 -0
  108. package/dist/utils/get-string-byte-size.js +10 -0
  109. package/dist/utils/jwt.js +5 -1
  110. package/dist/utils/sanitize-query.js +4 -5
  111. package/dist/utils/validate-query.js +50 -0
  112. package/dist/webhooks.js +5 -1
  113. package/package.json +74 -73
  114. package/dist/utils/operation-options.d.ts +0 -3
  115. package/dist/utils/operation-options.js +0 -45
  116. package/dist/utils/parse-json.d.ts +0 -5
  117. package/dist/utils/parse-json.js +0 -19
package/dist/webhooks.js CHANGED
@@ -11,13 +11,17 @@ const logger_1 = __importDefault(require("./logger"));
11
11
  const services_1 = require("./services");
12
12
  const get_schema_1 = require("./utils/get-schema");
13
13
  const messenger_1 = require("./messenger");
14
+ const job_queue_1 = require("./utils/job-queue");
14
15
  let registered = [];
16
+ const reloadQueue = new job_queue_1.JobQueue();
15
17
  async function init() {
16
18
  await register();
17
19
  const messenger = (0, messenger_1.getMessenger)();
18
20
  messenger.subscribe('webhooks', (event) => {
19
21
  if (event.type === 'reload') {
20
- reload();
22
+ reloadQueue.enqueue(async () => {
23
+ await reload();
24
+ });
21
25
  }
22
26
  });
23
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "directus",
3
- "version": "9.12.2",
3
+ "version": "9.13.0",
4
4
  "license": "GPL-3.0-only",
5
5
  "homepage": "https://github.com/directus/directus#readme",
6
6
  "description": "Directus is a real-time API and App dashboard for managing SQL database content.",
@@ -76,87 +76,88 @@
76
76
  "README.md"
77
77
  ],
78
78
  "dependencies": {
79
- "@aws-sdk/client-ses": "^3.40.0",
80
- "@directus/app": "9.12.2",
81
- "@directus/drive": "9.12.2",
82
- "@directus/drive-azure": "9.12.2",
83
- "@directus/drive-gcs": "9.12.2",
84
- "@directus/drive-s3": "9.12.2",
85
- "@directus/extensions-sdk": "9.12.2",
86
- "@directus/format-title": "9.12.2",
87
- "@directus/schema": "9.12.2",
88
- "@directus/shared": "9.12.2",
89
- "@directus/specs": "9.12.2",
90
- "@godaddy/terminus": "^4.9.0",
79
+ "@aws-sdk/client-ses": "^3.107.0",
80
+ "@directus/app": "9.13.0",
81
+ "@directus/drive": "9.13.0",
82
+ "@directus/drive-azure": "9.13.0",
83
+ "@directus/drive-gcs": "9.13.0",
84
+ "@directus/drive-s3": "9.13.0",
85
+ "@directus/extensions-sdk": "9.13.0",
86
+ "@directus/format-title": "9.13.0",
87
+ "@directus/schema": "9.13.0",
88
+ "@directus/shared": "9.13.0",
89
+ "@directus/specs": "9.13.0",
90
+ "@godaddy/terminus": "^4.10.2",
91
91
  "@rollup/plugin-alias": "^3.1.9",
92
- "@rollup/plugin-virtual": "^2.0.3",
93
- "argon2": "^0.28.2",
94
- "async": "^3.2.0",
95
- "async-mutex": "^0.3.1",
96
- "axios": "^0.24.0",
97
- "busboy": "^0.3.1",
92
+ "@rollup/plugin-virtual": "^2.1.0",
93
+ "argon2": "^0.28.5",
94
+ "async": "^3.2.4",
95
+ "async-mutex": "^0.3.2",
96
+ "axios": "^0.27.2",
97
+ "busboy": "^1.6.0",
98
+ "bytes": "^3.1.2",
98
99
  "camelcase": "^6.2.0",
99
100
  "chalk": "^4.1.1",
100
- "chokidar": "^3.5.2",
101
+ "chokidar": "^3.5.3",
101
102
  "commander": "^8.0.0",
102
- "cookie-parser": "^1.4.5",
103
+ "cookie-parser": "^1.4.6",
103
104
  "cors": "^2.8.5",
104
105
  "csv-parser": "^3.0.0",
105
- "date-fns": "^2.22.1",
106
+ "date-fns": "^2.28.0",
106
107
  "deep-diff": "^1.0.2",
107
108
  "deep-map": "^2.0.0",
108
- "destroy": "^1.0.4",
109
+ "destroy": "^1.2.0",
109
110
  "dotenv": "^10.0.0",
110
- "eventemitter2": "^6.4.3",
111
+ "eventemitter2": "^6.4.5",
111
112
  "execa": "^5.1.1",
112
- "exifr": "^7.1.2",
113
- "express": "^4.17.1",
113
+ "exifr": "^7.1.3",
114
+ "express": "^4.18.1",
114
115
  "fast-redact": "^3.1.1",
115
116
  "flat": "^5.0.2",
116
- "fs-extra": "^10.0.0",
117
+ "fs-extra": "^10.1.0",
117
118
  "globby": "^11.0.4",
118
119
  "graphql": "^15.5.0",
119
- "graphql-compose": "^9.0.1",
120
+ "graphql-compose": "^9.0.8",
120
121
  "helmet": "^4.6.0",
121
- "inquirer": "^8.1.1",
122
+ "inquirer": "^8.2.4",
122
123
  "ioredis": "^4.27.6",
123
- "joi": "^17.3.0",
124
+ "joi": "^17.6.0",
124
125
  "js-yaml": "^4.1.0",
125
- "js2xmlparser": "^4.0.1",
126
- "json2csv": "^5.0.3",
126
+ "js2xmlparser": "^4.0.2",
127
+ "json2csv": "^5.0.7",
127
128
  "jsonwebtoken": "^8.5.1",
128
- "keyv": "^4.0.3",
129
- "knex": "^2.0.0",
130
- "knex-schema-inspector": "1.7.3",
131
- "ldapjs": "^2.3.1",
132
- "liquidjs": "^9.25.0",
129
+ "keyv": "^4.3.0",
130
+ "knex": "^2.1.0",
131
+ "knex-schema-inspector": "^2.0.1",
132
+ "ldapjs": "^2.3.3",
133
+ "liquidjs": "^9.37.0",
133
134
  "lodash": "^4.17.21",
134
135
  "macos-release": "^2.4.1",
135
- "marked": "^4.0.3",
136
+ "marked": "^4.0.16",
136
137
  "micromustache": "^8.0.3",
137
- "mime-types": "^2.1.31",
138
+ "mime-types": "^2.1.35",
138
139
  "ms": "^2.1.3",
139
140
  "nanoid": "^3.1.23",
140
- "node-cron": "^3.0.0",
141
+ "node-cron": "^3.0.1",
141
142
  "node-machine-id": "^1.1.12",
142
- "nodemailer": "^6.6.1",
143
+ "nodemailer": "^6.7.5",
143
144
  "object-hash": "^2.2.0",
144
- "openapi3-ts": "^2.0.0",
145
- "openid-client": "^5.0.0",
145
+ "openapi3-ts": "^2.0.2",
146
+ "openid-client": "^5.1.6",
146
147
  "ora": "^5.4.0",
147
148
  "otplib": "^12.0.1",
148
149
  "pino": "6.13.3",
149
- "pino-colada": "^2.1.0",
150
+ "pino-colada": "^2.2.2",
150
151
  "pino-http": "5.8.0",
151
- "qs": "^6.9.4",
152
- "rate-limiter-flexible": "^2.2.2",
152
+ "qs": "^6.10.5",
153
+ "rate-limiter-flexible": "^2.3.7",
153
154
  "resolve-cwd": "^3.0.0",
154
- "rollup": "^2.67.3",
155
- "sanitize-html": "^2.6.0",
156
- "sharp": "^0.30.3",
157
- "stream-json": "^1.7.1",
155
+ "rollup": "^2.75.6",
156
+ "sanitize-html": "^2.7.0",
157
+ "sharp": "^0.30.6",
158
+ "stream-json": "^1.7.4",
158
159
  "strip-bom-stream": "^4.0.0",
159
- "supertest": "^6.1.6",
160
+ "supertest": "^6.2.3",
160
161
  "tmp-promise": "^3.0.3",
161
162
  "update-check": "^1.5.4",
162
163
  "uuid": "^8.3.2",
@@ -164,21 +165,21 @@
164
165
  "wellknown": "^0.5.0"
165
166
  },
166
167
  "optionalDependencies": {
167
- "@keyv/redis": "^2.1.2",
168
+ "@keyv/redis": "^2.3.6",
168
169
  "keyv-memcache": "^1.2.5",
169
170
  "memcached": "^2.2.2",
170
171
  "mysql": "^2.18.1",
171
- "nodemailer-mailgun-transport": "^2.1.3",
172
- "pg": "^8.6.0",
173
- "sqlite3": "^5.0.6",
172
+ "nodemailer-mailgun-transport": "^2.1.4",
173
+ "pg": "^8.7.3",
174
+ "sqlite3": "^5.0.8",
174
175
  "tedious": "^13.0.0"
175
176
  },
176
- "gitHead": "bce19abf6f52adc933ebc4f557e6959aa69d083e",
177
+ "gitHead": "fd55233b1124a2887e04e4418f04c7a7b94398b7",
177
178
  "devDependencies": {
178
- "@types/async": "3.2.10",
179
+ "@types/async": "3.2.13",
179
180
  "@types/body-parser": "1.19.2",
180
- "@types/busboy": "0.3.1",
181
- "@types/cookie-parser": "1.4.2",
181
+ "@types/busboy": "1.5.0",
182
+ "@types/cookie-parser": "1.4.3",
182
183
  "@types/cors": "2.8.12",
183
184
  "@types/deep-diff": "1.0.1",
184
185
  "@types/destroy": "1.0.0",
@@ -188,16 +189,16 @@
188
189
  "@types/fast-redact": "^3.0.1",
189
190
  "@types/flat": "5.0.2",
190
191
  "@types/fs-extra": "9.0.13",
191
- "@types/inquirer": "8.1.3",
192
+ "@types/inquirer": "8.2.1",
192
193
  "@types/ioredis": "^4.28.10",
193
194
  "@types/jest": "27.4.1",
194
195
  "@types/js-yaml": "4.0.5",
195
196
  "@types/json2csv": "5.0.3",
196
- "@types/jsonwebtoken": "8.5.6",
197
- "@types/keyv": "3.1.3",
197
+ "@types/jsonwebtoken": "8.5.8",
198
+ "@types/keyv": "3.1.4",
198
199
  "@types/ldapjs": "2.2.2",
199
- "@types/lodash": "4.14.177",
200
- "@types/marked": "4.0.1",
200
+ "@types/lodash": "4.14.182",
201
+ "@types/marked": "4.0.3",
201
202
  "@types/mime-types": "2.1.1",
202
203
  "@types/ms": "0.7.31",
203
204
  "@types/node": "16.11.9",
@@ -205,22 +206,22 @@
205
206
  "@types/nodemailer": "6.4.4",
206
207
  "@types/object-hash": "2.2.1",
207
208
  "@types/pino": "6.3.12",
208
- "@types/pino-http": "5.8.0",
209
+ "@types/pino-http": "5.8.1",
209
210
  "@types/qs": "6.9.7",
210
- "@types/sanitize-html": "2.5.0",
211
- "@types/sharp": "0.29.4",
212
- "@types/stream-json": "1.7.1",
213
- "@types/supertest": "2.0.11",
214
- "@types/uuid": "8.3.3",
211
+ "@types/sanitize-html": "2.6.2",
212
+ "@types/sharp": "0.30.4",
213
+ "@types/stream-json": "1.7.2",
214
+ "@types/supertest": "2.0.12",
215
+ "@types/uuid": "8.3.4",
215
216
  "@types/uuid-validate": "0.0.1",
216
- "@types/wellknown": "0.5.1",
217
+ "@types/wellknown": "0.5.3",
217
218
  "copyfiles": "2.4.1",
218
219
  "cross-env": "7.0.3",
219
220
  "form-data": "^4.0.0",
220
221
  "jest": "27.5.1",
221
- "knex-mock-client": "1.7.0",
222
+ "knex-mock-client": "1.8.4",
222
223
  "ts-jest": "27.1.3",
223
224
  "ts-node-dev": "1.1.8",
224
- "typescript": "4.5.2"
225
+ "typescript": "4.7.3"
225
226
  }
226
227
  }
@@ -1,3 +0,0 @@
1
- export declare function applyOperationOptions(options: Record<string, any>, data: Record<string, any>): Record<string, any>;
2
- export declare function optionToObject<T>(option: T): Exclude<T, string>;
3
- export declare function optionToString(option: unknown): string;
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.optionToString = exports.optionToObject = exports.applyOperationOptions = void 0;
4
- const micromustache_1 = require("micromustache");
5
- const parse_json_1 = require("./parse-json");
6
- function resolveFn(path, scope) {
7
- if (!scope)
8
- return undefined;
9
- const value = (0, micromustache_1.get)(scope, path);
10
- return typeof value === 'object' ? JSON.stringify(value) : value;
11
- }
12
- function renderMustache(item, scope) {
13
- if (typeof item === 'string') {
14
- return (0, micromustache_1.renderFn)(item, resolveFn, scope, { explicit: true });
15
- }
16
- else if (Array.isArray(item)) {
17
- return item.map((element) => renderMustache(element, scope));
18
- }
19
- else if (typeof item === 'object' && item !== null) {
20
- return Object.fromEntries(Object.entries(item).map(([key, value]) => [key, renderMustache(value, scope)]));
21
- }
22
- else {
23
- return item;
24
- }
25
- }
26
- function applyOperationOptions(options, data) {
27
- return Object.fromEntries(Object.entries(options).map(([key, value]) => {
28
- if (typeof value === 'string') {
29
- const single = value.match(/^\{\{\s*([^}\s]+)\s*\}\}$/);
30
- if (single !== null) {
31
- return [key, (0, micromustache_1.get)(data, single[1])];
32
- }
33
- }
34
- return [key, renderMustache(value, data)];
35
- }));
36
- }
37
- exports.applyOperationOptions = applyOperationOptions;
38
- function optionToObject(option) {
39
- return typeof option === 'string' ? (0, parse_json_1.parseJSON)(option) : option;
40
- }
41
- exports.optionToObject = optionToObject;
42
- function optionToString(option) {
43
- return typeof option === 'object' ? JSON.stringify(option) : String(option);
44
- }
45
- exports.optionToString = optionToString;
@@ -1,5 +0,0 @@
1
- /**
2
- * Run JSON.parse, but ignore `__proto__` properties. This prevents prototype pollution attacks
3
- */
4
- export declare function parseJSON(input: string): any;
5
- export declare function noproto<T>(key: string, value: T): T | void;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.noproto = exports.parseJSON = void 0;
4
- /**
5
- * Run JSON.parse, but ignore `__proto__` properties. This prevents prototype pollution attacks
6
- */
7
- function parseJSON(input) {
8
- if (String(input).includes('__proto__')) {
9
- return JSON.parse(input, noproto);
10
- }
11
- return JSON.parse(input);
12
- }
13
- exports.parseJSON = parseJSON;
14
- function noproto(key, value) {
15
- if (key !== '__proto__') {
16
- return value;
17
- }
18
- }
19
- exports.noproto = noproto;