directus 9.23.3 → 9.24.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 (132) hide show
  1. package/dist/app.js +15 -15
  2. package/dist/auth/drivers/ldap.js +22 -22
  3. package/dist/auth/drivers/local.js +7 -7
  4. package/dist/auth/drivers/oauth2.js +27 -25
  5. package/dist/auth/drivers/openid.js +32 -30
  6. package/dist/auth/drivers/saml.js +10 -10
  7. package/dist/auth.js +4 -3
  8. package/dist/cache.js +16 -11
  9. package/dist/cli/commands/bootstrap/index.js +5 -4
  10. package/dist/cli/utils/create-db-connection.js +1 -1
  11. package/dist/cli/utils/create-env/index.js +1 -1
  12. package/dist/constants.d.ts +1 -0
  13. package/dist/constants.js +6 -5
  14. package/dist/controllers/activity.js +10 -10
  15. package/dist/controllers/assets.js +19 -18
  16. package/dist/controllers/auth.js +16 -16
  17. package/dist/controllers/collections.js +11 -11
  18. package/dist/controllers/dashboards.js +11 -11
  19. package/dist/controllers/extensions.js +3 -3
  20. package/dist/controllers/fields.js +17 -17
  21. package/dist/controllers/files.js +18 -17
  22. package/dist/controllers/flows.js +13 -13
  23. package/dist/controllers/folders.js +11 -11
  24. package/dist/controllers/graphql.js +6 -6
  25. package/dist/controllers/items.js +19 -19
  26. package/dist/controllers/notifications.js +11 -11
  27. package/dist/controllers/operations.js +11 -11
  28. package/dist/controllers/panels.js +11 -11
  29. package/dist/controllers/permissions.js +11 -11
  30. package/dist/controllers/presets.js +11 -11
  31. package/dist/controllers/relations.js +11 -11
  32. package/dist/controllers/revisions.js +3 -3
  33. package/dist/controllers/roles.js +11 -11
  34. package/dist/controllers/schema.js +5 -5
  35. package/dist/controllers/server.js +7 -7
  36. package/dist/controllers/settings.js +2 -2
  37. package/dist/controllers/shares.js +14 -14
  38. package/dist/controllers/users.js +16 -16
  39. package/dist/controllers/utils.js +7 -7
  40. package/dist/controllers/webhooks.js +11 -11
  41. package/dist/database/helpers/fn/types.d.ts +0 -1
  42. package/dist/database/helpers/fn/types.js +0 -2
  43. package/dist/database/helpers/index.d.ts +3 -3
  44. package/dist/database/index.js +5 -5
  45. package/dist/database/migrations/20210805B-change-image-metadata-structure.js +15 -15
  46. package/dist/database/migrations/run.js +1 -1
  47. package/dist/database/run-ast.js +6 -6
  48. package/dist/database/system-data/collections/index.js +2 -2
  49. package/dist/database/system-data/fields/index.js +3 -3
  50. package/dist/env.js +1 -1
  51. package/dist/exceptions/database/dialects/mssql.js +2 -2
  52. package/dist/exceptions/database/dialects/mysql.js +6 -6
  53. package/dist/exceptions/database/record-not-unique.d.ts +1 -1
  54. package/dist/extensions.js +10 -10
  55. package/dist/flows.js +33 -31
  56. package/dist/logger.d.ts +1 -0
  57. package/dist/logger.js +32 -32
  58. package/dist/mailer.js +16 -16
  59. package/dist/messenger.js +4 -4
  60. package/dist/middleware/authenticate.d.ts +1 -1
  61. package/dist/middleware/authenticate.js +2 -2
  62. package/dist/middleware/cache.js +11 -11
  63. package/dist/middleware/collection-exists.js +4 -4
  64. package/dist/middleware/cors.js +8 -8
  65. package/dist/middleware/error-handler.js +2 -2
  66. package/dist/middleware/extract-token.js +3 -3
  67. package/dist/middleware/get-permissions.js +1 -1
  68. package/dist/middleware/graphql.js +12 -6
  69. package/dist/middleware/rate-limiter-global.js +5 -5
  70. package/dist/middleware/rate-limiter-ip.js +2 -2
  71. package/dist/middleware/respond.js +16 -16
  72. package/dist/middleware/sanitize-query.js +1 -1
  73. package/dist/middleware/schema.js +1 -1
  74. package/dist/middleware/use-collection.js +1 -1
  75. package/dist/middleware/validate-batch.js +1 -1
  76. package/dist/operations/exec/index.js +2 -2
  77. package/dist/rate-limiter.js +1 -1
  78. package/dist/request/validate-ip.js +2 -2
  79. package/dist/server.js +4 -4
  80. package/dist/services/activity.js +14 -14
  81. package/dist/services/assets.js +6 -6
  82. package/dist/services/authentication.js +9 -9
  83. package/dist/services/collections.js +9 -9
  84. package/dist/services/fields.js +5 -5
  85. package/dist/services/files.js +18 -18
  86. package/dist/services/graphql/index.js +170 -116
  87. package/dist/services/import-export.js +6 -6
  88. package/dist/services/items.js +6 -6
  89. package/dist/services/mail/index.js +5 -5
  90. package/dist/services/meta.js +1 -0
  91. package/dist/services/notifications.js +4 -4
  92. package/dist/services/relations.js +4 -4
  93. package/dist/services/revisions.js +3 -3
  94. package/dist/services/roles.js +5 -5
  95. package/dist/services/server.js +27 -27
  96. package/dist/services/shares.js +9 -9
  97. package/dist/services/specifications.js +5 -3
  98. package/dist/services/users.d.ts +1 -5
  99. package/dist/services/users.js +24 -27
  100. package/dist/storage/register-locations.js +1 -1
  101. package/dist/utils/apply-diff.js +12 -12
  102. package/dist/utils/apply-query.js +3 -2
  103. package/dist/utils/dynamic-import.js +1 -1
  104. package/dist/utils/generate-hash.js +1 -1
  105. package/dist/utils/get-ast-from-query.js +2 -2
  106. package/dist/utils/get-auth-providers.js +1 -1
  107. package/dist/utils/get-cache-headers.js +3 -3
  108. package/dist/utils/get-collection-from-alias.js +1 -0
  109. package/dist/utils/get-column-path.js +2 -1
  110. package/dist/utils/get-default-value.js +1 -1
  111. package/dist/utils/get-ip-from-req.js +2 -2
  112. package/dist/utils/get-permissions.js +11 -11
  113. package/dist/utils/get-schema.js +5 -5
  114. package/dist/utils/get-snapshot-diff.js +1 -1
  115. package/dist/utils/is-url-allowed.js +5 -2
  116. package/dist/utils/parse-image-metadata.js +3 -3
  117. package/dist/utils/reduce-schema.js +5 -5
  118. package/dist/utils/sanitize-query.js +26 -26
  119. package/dist/utils/should-skip-cache.js +13 -4
  120. package/dist/utils/strip-function.js +1 -1
  121. package/dist/utils/telemetry.d.ts +1 -0
  122. package/dist/utils/telemetry.js +30 -0
  123. package/dist/utils/validate-keys.js +1 -1
  124. package/dist/utils/validate-query.js +1 -1
  125. package/dist/utils/validate-storage.js +8 -8
  126. package/dist/webhooks.js +2 -2
  127. package/package.json +13 -13
  128. package/dist/utils/redact-header-cookies.d.ts +0 -1
  129. package/dist/utils/redact-header-cookies.js +0 -11
  130. package/dist/utils/track.d.ts +0 -1
  131. package/dist/utils/track.js +0 -81
  132. /package/dist/{utils/redact-header-cookies.test.d.ts → logger.test.d.ts} +0 -0
@@ -21,7 +21,7 @@ router.get('/', (0, async_handler_1.default)(async (req, res, next) => {
21
21
  schema: req.schema,
22
22
  });
23
23
  const fields = await service.readAll();
24
- res.locals.payload = { data: fields || null };
24
+ res.locals['payload'] = { data: fields || null };
25
25
  return next();
26
26
  }), respond_1.respond);
27
27
  router.get('/:collection', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
@@ -29,8 +29,8 @@ router.get('/:collection', collection_exists_1.default, (0, async_handler_1.defa
29
29
  accountability: req.accountability,
30
30
  schema: req.schema,
31
31
  });
32
- const fields = await service.readAll(req.params.collection);
33
- res.locals.payload = { data: fields || null };
32
+ const fields = await service.readAll(req.params['collection']);
33
+ res.locals['payload'] = { data: fields || null };
34
34
  return next();
35
35
  }), respond_1.respond);
36
36
  router.get('/:collection/:field', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
@@ -38,8 +38,8 @@ router.get('/:collection/:field', collection_exists_1.default, (0, async_handler
38
38
  accountability: req.accountability,
39
39
  schema: req.schema,
40
40
  });
41
- const field = await service.readOne(req.params.collection, req.params.field);
42
- res.locals.payload = { data: field || null };
41
+ const field = await service.readOne(req.params['collection'], req.params['field']);
42
+ res.locals['payload'] = { data: field || null };
43
43
  return next();
44
44
  }), respond_1.respond);
45
45
  const newFieldSchema = joi_1.default.object({
@@ -68,10 +68,10 @@ router.post('/:collection', collection_exists_1.default, (0, async_handler_1.def
68
68
  throw new exceptions_1.InvalidPayloadException(error.message);
69
69
  }
70
70
  const field = req.body;
71
- await service.createField(req.params.collection, field);
71
+ await service.createField(req.params['collection'], field);
72
72
  try {
73
- const createdField = await service.readOne(req.params.collection, field.field);
74
- res.locals.payload = { data: createdField || null };
73
+ const createdField = await service.readOne(req.params['collection'], field.field);
74
+ res.locals['payload'] = { data: createdField || null };
75
75
  }
76
76
  catch (error) {
77
77
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -90,14 +90,14 @@ router.patch('/:collection', collection_exists_1.default, (0, async_handler_1.de
90
90
  throw new exceptions_1.InvalidPayloadException('Submitted body has to be an array.');
91
91
  }
92
92
  for (const field of req.body) {
93
- await service.updateField(req.params.collection, field);
93
+ await service.updateField(req.params['collection'], field);
94
94
  }
95
95
  try {
96
96
  const results = [];
97
97
  for (const field of req.body) {
98
- const updatedField = await service.readOne(req.params.collection, field.field);
98
+ const updatedField = await service.readOne(req.params['collection'], field.field);
99
99
  results.push(updatedField);
100
- res.locals.payload = { data: results || null };
100
+ res.locals['payload'] = { data: results || null };
101
101
  }
102
102
  }
103
103
  catch (error) {
@@ -135,11 +135,11 @@ router.patch('/:collection/:field', collection_exists_1.default, (0, async_handl
135
135
  }
136
136
  const fieldData = req.body;
137
137
  if (!fieldData.field)
138
- fieldData.field = req.params.field;
139
- await service.updateField(req.params.collection, fieldData);
138
+ fieldData.field = req.params['field'];
139
+ await service.updateField(req.params['collection'], fieldData);
140
140
  try {
141
- const updatedField = await service.readOne(req.params.collection, req.params.field);
142
- res.locals.payload = { data: updatedField || null };
141
+ const updatedField = await service.readOne(req.params['collection'], req.params['field']);
142
+ res.locals['payload'] = { data: updatedField || null };
143
143
  }
144
144
  catch (error) {
145
145
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -149,12 +149,12 @@ router.patch('/:collection/:field', collection_exists_1.default, (0, async_handl
149
149
  }
150
150
  return next();
151
151
  }), respond_1.respond);
152
- router.delete('/:collection/:field', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
152
+ router.delete('/:collection/:field', collection_exists_1.default, (0, async_handler_1.default)(async (req, _res, next) => {
153
153
  const service = new fields_1.FieldsService({
154
154
  accountability: req.accountability,
155
155
  schema: req.schema,
156
156
  });
157
- await service.deleteField(req.params.collection, req.params.field);
157
+ await service.deleteField(req.params['collection'], req.params['field']);
158
158
  return next();
159
159
  }), respond_1.respond);
160
160
  exports.default = router;
@@ -37,13 +37,13 @@ const multipartHandler = (req, res, next) => {
37
37
  const busboy = (0, busboy_1.default)({ headers, defParamCharset: 'utf8' });
38
38
  const savedFiles = [];
39
39
  const service = new services_1.FilesService({ accountability: req.accountability, schema: req.schema });
40
- const existingPrimaryKey = req.params.pk || undefined;
40
+ const existingPrimaryKey = req.params['pk'] || undefined;
41
41
  /**
42
42
  * The order of the fields in multipart/form-data is important. We require that all fields
43
43
  * are provided _before_ the files. This allows us to set the storage location, and create
44
44
  * the row in directus_files async during the upload of the actual file.
45
45
  */
46
- let disk = (0, utils_1.toArray)(env_1.default.STORAGE_LOCATIONS)[0];
46
+ let disk = (0, utils_1.toArray)(env_1.default['STORAGE_LOCATIONS'])[0];
47
47
  let payload = {};
48
48
  let fileCount = 0;
49
49
  busboy.on('field', (fieldname, val) => {
@@ -85,6 +85,7 @@ const multipartHandler = (req, res, next) => {
85
85
  catch (error) {
86
86
  busboy.emit('error', error);
87
87
  }
88
+ return undefined;
88
89
  });
89
90
  busboy.on('error', (error) => {
90
91
  next(error);
@@ -98,7 +99,7 @@ const multipartHandler = (req, res, next) => {
98
99
  if (fileCount === 0) {
99
100
  return next(new exceptions_1.InvalidPayloadException(`No files were included in the body`));
100
101
  }
101
- res.locals.savedFiles = savedFiles;
102
+ res.locals['savedFiles'] = savedFiles;
102
103
  return next();
103
104
  }
104
105
  }
@@ -111,7 +112,7 @@ router.post('/', (0, async_handler_1.default)(exports.multipartHandler), (0, asy
111
112
  });
112
113
  let keys = [];
113
114
  if (req.is('multipart/form-data')) {
114
- keys = res.locals.savedFiles;
115
+ keys = res.locals['savedFiles'];
115
116
  }
116
117
  else {
117
118
  keys = await service.createOne(req.body);
@@ -119,14 +120,14 @@ router.post('/', (0, async_handler_1.default)(exports.multipartHandler), (0, asy
119
120
  try {
120
121
  if (Array.isArray(keys) && keys.length > 1) {
121
122
  const records = await service.readMany(keys, req.sanitizedQuery);
122
- res.locals.payload = {
123
+ res.locals['payload'] = {
123
124
  data: records,
124
125
  };
125
126
  }
126
127
  else {
127
128
  const key = Array.isArray(keys) ? keys[0] : keys;
128
129
  const record = await service.readOne(key, req.sanitizedQuery);
129
- res.locals.payload = {
130
+ res.locals['payload'] = {
130
131
  data: record,
131
132
  };
132
133
  }
@@ -155,7 +156,7 @@ router.post('/import', (0, async_handler_1.default)(async (req, res, next) => {
155
156
  const primaryKey = await service.importOne(req.body.url, req.body.data);
156
157
  try {
157
158
  const record = await service.readOne(primaryKey, req.sanitizedQuery);
158
- res.locals.payload = { data: record || null };
159
+ res.locals['payload'] = { data: record || null };
159
160
  }
160
161
  catch (error) {
161
162
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -185,7 +186,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
185
186
  result = await service.readByQuery(req.sanitizedQuery);
186
187
  }
187
188
  const meta = await metaService.getMetaForQuery('directus_files', req.sanitizedQuery);
188
- res.locals.payload = { data: result, meta };
189
+ res.locals['payload'] = { data: result, meta };
189
190
  return next();
190
191
  });
191
192
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -195,8 +196,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
195
196
  accountability: req.accountability,
196
197
  schema: req.schema,
197
198
  });
198
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
199
- res.locals.payload = { data: record || null };
199
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
200
+ res.locals['payload'] = { data: record || null };
200
201
  return next();
201
202
  }), respond_1.respond);
202
203
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -217,7 +218,7 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
217
218
  }
218
219
  try {
219
220
  const result = await service.readMany(keys, req.sanitizedQuery);
220
- res.locals.payload = { data: result || null };
221
+ res.locals['payload'] = { data: result || null };
221
222
  }
222
223
  catch (error) {
223
224
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -232,10 +233,10 @@ router.patch('/:pk', (0, async_handler_1.default)(exports.multipartHandler), (0,
232
233
  accountability: req.accountability,
233
234
  schema: req.schema,
234
235
  });
235
- await service.updateOne(req.params.pk, req.body);
236
+ await service.updateOne(req.params['pk'], req.body);
236
237
  try {
237
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
238
- res.locals.payload = { data: record || null };
238
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
239
+ res.locals['payload'] = { data: record || null };
239
240
  }
240
241
  catch (error) {
241
242
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -245,7 +246,7 @@ router.patch('/:pk', (0, async_handler_1.default)(exports.multipartHandler), (0,
245
246
  }
246
247
  return next();
247
248
  }), respond_1.respond);
248
- router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, res, next) => {
249
+ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, _res, next) => {
249
250
  const service = new services_1.FilesService({
250
251
  accountability: req.accountability,
251
252
  schema: req.schema,
@@ -262,12 +263,12 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
262
263
  }
263
264
  return next();
264
265
  }), respond_1.respond);
265
- router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
266
+ router.delete('/:pk', (0, async_handler_1.default)(async (req, _res, next) => {
266
267
  const service = new services_1.FilesService({
267
268
  accountability: req.accountability,
268
269
  schema: req.schema,
269
270
  });
270
- await service.deleteOne(req.params.pk);
271
+ await service.deleteOne(req.params['pk']);
271
272
  return next();
272
273
  }), respond_1.respond);
273
274
  exports.default = router;
@@ -17,7 +17,7 @@ const router = express_1.default.Router();
17
17
  router.use((0, use_collection_1.default)('directus_flows'));
18
18
  const webhookFlowHandler = (0, async_handler_1.default)(async (req, res, next) => {
19
19
  const flowManager = (0, flows_1.getFlowManager)();
20
- const result = await flowManager.runWebhookFlow(`${req.method}-${req.params.pk}`, {
20
+ const result = await flowManager.runWebhookFlow(`${req.method}-${req.params['pk']}`, {
21
21
  path: req.path,
22
22
  query: req.query,
23
23
  body: req.body,
@@ -27,7 +27,7 @@ const webhookFlowHandler = (0, async_handler_1.default)(async (req, res, next) =
27
27
  accountability: req.accountability,
28
28
  schema: req.schema,
29
29
  });
30
- res.locals.payload = result;
30
+ res.locals['payload'] = result;
31
31
  return next();
32
32
  });
33
33
  router.get(`/trigger/:pk(${constants_1.UUID_REGEX})`, webhookFlowHandler, respond_1.respond);
@@ -49,11 +49,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
49
49
  try {
50
50
  if (Array.isArray(req.body)) {
51
51
  const items = await service.readMany(savedKeys, req.sanitizedQuery);
52
- res.locals.payload = { data: items };
52
+ res.locals['payload'] = { data: items };
53
53
  }
54
54
  else {
55
55
  const item = await service.readOne(savedKeys[0], req.sanitizedQuery);
56
- res.locals.payload = { data: item };
56
+ res.locals['payload'] = { data: item };
57
57
  }
58
58
  }
59
59
  catch (error) {
@@ -75,7 +75,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
75
75
  });
76
76
  const records = await service.readByQuery(req.sanitizedQuery);
77
77
  const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
78
- res.locals.payload = { data: records || null, meta };
78
+ res.locals['payload'] = { data: records || null, meta };
79
79
  return next();
80
80
  });
81
81
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -85,8 +85,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
85
85
  accountability: req.accountability,
86
86
  schema: req.schema,
87
87
  });
88
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
89
- res.locals.payload = { data: record || null };
88
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
89
+ res.locals['payload'] = { data: record || null };
90
90
  return next();
91
91
  }), respond_1.respond);
92
92
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -107,7 +107,7 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
107
107
  }
108
108
  try {
109
109
  const result = await service.readMany(keys, req.sanitizedQuery);
110
- res.locals.payload = { data: result };
110
+ res.locals['payload'] = { data: result };
111
111
  }
112
112
  catch (error) {
113
113
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -122,10 +122,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
122
122
  accountability: req.accountability,
123
123
  schema: req.schema,
124
124
  });
125
- const primaryKey = await service.updateOne(req.params.pk, req.body);
125
+ const primaryKey = await service.updateOne(req.params['pk'], req.body);
126
126
  try {
127
127
  const item = await service.readOne(primaryKey, req.sanitizedQuery);
128
- res.locals.payload = { data: item || null };
128
+ res.locals['payload'] = { data: item || null };
129
129
  }
130
130
  catch (error) {
131
131
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -135,7 +135,7 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
135
135
  }
136
136
  return next();
137
137
  }), respond_1.respond);
138
- router.delete('/', (0, async_handler_1.default)(async (req, res, next) => {
138
+ router.delete('/', (0, async_handler_1.default)(async (req, _res, next) => {
139
139
  const service = new services_1.FlowsService({
140
140
  accountability: req.accountability,
141
141
  schema: req.schema,
@@ -152,12 +152,12 @@ router.delete('/', (0, async_handler_1.default)(async (req, res, next) => {
152
152
  }
153
153
  return next();
154
154
  }), respond_1.respond);
155
- router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
155
+ router.delete('/:pk', (0, async_handler_1.default)(async (req, _res, next) => {
156
156
  const service = new services_1.FlowsService({
157
157
  accountability: req.accountability,
158
158
  schema: req.schema,
159
159
  });
160
- await service.deleteOne(req.params.pk);
160
+ await service.deleteOne(req.params['pk']);
161
161
  return next();
162
162
  }), respond_1.respond);
163
163
  exports.default = router;
@@ -30,11 +30,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
30
30
  try {
31
31
  if (Array.isArray(req.body)) {
32
32
  const records = await service.readMany(savedKeys, req.sanitizedQuery);
33
- res.locals.payload = { data: records };
33
+ res.locals['payload'] = { data: records };
34
34
  }
35
35
  else {
36
36
  const record = await service.readOne(savedKeys[0], req.sanitizedQuery);
37
- res.locals.payload = { data: record };
37
+ res.locals['payload'] = { data: record };
38
38
  }
39
39
  }
40
40
  catch (error) {
@@ -65,7 +65,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
65
65
  result = await service.readByQuery(req.sanitizedQuery);
66
66
  }
67
67
  const meta = await metaService.getMetaForQuery('directus_folders', req.sanitizedQuery);
68
- res.locals.payload = { data: result, meta };
68
+ res.locals['payload'] = { data: result, meta };
69
69
  return next();
70
70
  });
71
71
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -75,8 +75,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
75
75
  accountability: req.accountability,
76
76
  schema: req.schema,
77
77
  });
78
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
79
- res.locals.payload = { data: record || null };
78
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
79
+ res.locals['payload'] = { data: record || null };
80
80
  return next();
81
81
  }), respond_1.respond);
82
82
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -97,7 +97,7 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
97
97
  }
98
98
  try {
99
99
  const result = await service.readMany(keys, req.sanitizedQuery);
100
- res.locals.payload = { data: result || null };
100
+ res.locals['payload'] = { data: result || null };
101
101
  }
102
102
  catch (error) {
103
103
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -112,10 +112,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
112
112
  accountability: req.accountability,
113
113
  schema: req.schema,
114
114
  });
115
- const primaryKey = await service.updateOne(req.params.pk, req.body);
115
+ const primaryKey = await service.updateOne(req.params['pk'], req.body);
116
116
  try {
117
117
  const record = await service.readOne(primaryKey, req.sanitizedQuery);
118
- res.locals.payload = { data: record || null };
118
+ res.locals['payload'] = { data: record || null };
119
119
  }
120
120
  catch (error) {
121
121
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -125,7 +125,7 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
125
125
  }
126
126
  return next();
127
127
  }), respond_1.respond);
128
- router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, res, next) => {
128
+ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, _res, next) => {
129
129
  const service = new services_1.FoldersService({
130
130
  accountability: req.accountability,
131
131
  schema: req.schema,
@@ -142,12 +142,12 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
142
142
  }
143
143
  return next();
144
144
  }), respond_1.respond);
145
- router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
145
+ router.delete('/:pk', (0, async_handler_1.default)(async (req, _res, next) => {
146
146
  const service = new services_1.FoldersService({
147
147
  accountability: req.accountability,
148
148
  schema: req.schema,
149
149
  });
150
- await service.deleteOne(req.params.pk);
150
+ await service.deleteOne(req.params['pk']);
151
151
  return next();
152
152
  }), respond_1.respond);
153
153
  exports.default = router;
@@ -15,9 +15,9 @@ router.use('/system', graphql_1.parseGraphQL, (0, async_handler_1.default)(async
15
15
  schema: req.schema,
16
16
  scope: 'system',
17
17
  });
18
- res.locals.payload = await service.execute(res.locals.graphqlParams);
19
- if (res.locals.payload?.errors?.length > 0) {
20
- res.locals.cache = false;
18
+ res.locals['payload'] = await service.execute(res.locals['graphqlParams']);
19
+ if (res.locals['payload']?.errors?.length > 0) {
20
+ res.locals['cache'] = false;
21
21
  }
22
22
  return next();
23
23
  }), respond_1.respond);
@@ -27,9 +27,9 @@ router.use('/', graphql_1.parseGraphQL, (0, async_handler_1.default)(async (req,
27
27
  schema: req.schema,
28
28
  scope: 'items',
29
29
  });
30
- res.locals.payload = await service.execute(res.locals.graphqlParams);
31
- if (res.locals.payload?.errors?.length > 0) {
32
- res.locals.cache = false;
30
+ res.locals['payload'] = await service.execute(res.locals['graphqlParams']);
31
+ if (res.locals['payload']?.errors?.length > 0) {
32
+ res.locals['cache'] = false;
33
33
  }
34
34
  return next();
35
35
  }), respond_1.respond);
@@ -13,7 +13,7 @@ const async_handler_1 = __importDefault(require("../utils/async-handler"));
13
13
  const sanitize_query_1 = require("../utils/sanitize-query");
14
14
  const router = express_1.default.Router();
15
15
  router.post('/:collection', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
16
- if (req.params.collection.startsWith('directus_'))
16
+ if (req.params['collection'].startsWith('directus_'))
17
17
  throw new exceptions_1.ForbiddenException();
18
18
  if (req.singleton) {
19
19
  throw new exceptions_1.RouteNotFoundException(req.path);
@@ -34,11 +34,11 @@ router.post('/:collection', collection_exists_1.default, (0, async_handler_1.def
34
34
  try {
35
35
  if (Array.isArray(req.body)) {
36
36
  const result = await service.readMany(savedKeys, req.sanitizedQuery);
37
- res.locals.payload = { data: result || null };
37
+ res.locals['payload'] = { data: result || null };
38
38
  }
39
39
  else {
40
40
  const result = await service.readOne(savedKeys[0], req.sanitizedQuery);
41
- res.locals.payload = { data: result || null };
41
+ res.locals['payload'] = { data: result || null };
42
42
  }
43
43
  }
44
44
  catch (error) {
@@ -50,7 +50,7 @@ router.post('/:collection', collection_exists_1.default, (0, async_handler_1.def
50
50
  return next();
51
51
  }), respond_1.respond);
52
52
  const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
53
- if (req.params.collection.startsWith('directus_'))
53
+ if (req.params['collection'].startsWith('directus_'))
54
54
  throw new exceptions_1.ForbiddenException();
55
55
  const service = new services_1.ItemsService(req.collection, {
56
56
  accountability: req.accountability,
@@ -71,7 +71,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
71
71
  result = await service.readByQuery(req.sanitizedQuery);
72
72
  }
73
73
  const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
74
- res.locals.payload = {
74
+ res.locals['payload'] = {
75
75
  meta: meta,
76
76
  data: result,
77
77
  };
@@ -80,20 +80,20 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
80
80
  router.search('/:collection', collection_exists_1.default, (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
81
81
  router.get('/:collection', collection_exists_1.default, readHandler, respond_1.respond);
82
82
  router.get('/:collection/:pk', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
83
- if (req.params.collection.startsWith('directus_'))
83
+ if (req.params['collection'].startsWith('directus_'))
84
84
  throw new exceptions_1.ForbiddenException();
85
85
  const service = new services_1.ItemsService(req.collection, {
86
86
  accountability: req.accountability,
87
87
  schema: req.schema,
88
88
  });
89
- const result = await service.readOne(req.params.pk, req.sanitizedQuery);
90
- res.locals.payload = {
89
+ const result = await service.readOne(req.params['pk'], req.sanitizedQuery);
90
+ res.locals['payload'] = {
91
91
  data: result || null,
92
92
  };
93
93
  return next();
94
94
  }), respond_1.respond);
95
95
  router.patch('/:collection', collection_exists_1.default, (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
96
- if (req.params.collection.startsWith('directus_'))
96
+ if (req.params['collection'].startsWith('directus_'))
97
97
  throw new exceptions_1.ForbiddenException();
98
98
  const service = new services_1.ItemsService(req.collection, {
99
99
  accountability: req.accountability,
@@ -102,7 +102,7 @@ router.patch('/:collection', collection_exists_1.default, (0, validate_batch_1.v
102
102
  if (req.singleton === true) {
103
103
  await service.upsertSingleton(req.body);
104
104
  const item = await service.readSingleton(req.sanitizedQuery);
105
- res.locals.payload = { data: item || null };
105
+ res.locals['payload'] = { data: item || null };
106
106
  return next();
107
107
  }
108
108
  let keys = [];
@@ -118,7 +118,7 @@ router.patch('/:collection', collection_exists_1.default, (0, validate_batch_1.v
118
118
  }
119
119
  try {
120
120
  const result = await service.readMany(keys, req.sanitizedQuery);
121
- res.locals.payload = { data: result };
121
+ res.locals['payload'] = { data: result };
122
122
  }
123
123
  catch (error) {
124
124
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -129,7 +129,7 @@ router.patch('/:collection', collection_exists_1.default, (0, validate_batch_1.v
129
129
  return next();
130
130
  }), respond_1.respond);
131
131
  router.patch('/:collection/:pk', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
132
- if (req.params.collection.startsWith('directus_'))
132
+ if (req.params['collection'].startsWith('directus_'))
133
133
  throw new exceptions_1.ForbiddenException();
134
134
  if (req.singleton) {
135
135
  throw new exceptions_1.RouteNotFoundException(req.path);
@@ -138,10 +138,10 @@ router.patch('/:collection/:pk', collection_exists_1.default, (0, async_handler_
138
138
  accountability: req.accountability,
139
139
  schema: req.schema,
140
140
  });
141
- const updatedPrimaryKey = await service.updateOne(req.params.pk, req.body);
141
+ const updatedPrimaryKey = await service.updateOne(req.params['pk'], req.body);
142
142
  try {
143
143
  const result = await service.readOne(updatedPrimaryKey, req.sanitizedQuery);
144
- res.locals.payload = { data: result || null };
144
+ res.locals['payload'] = { data: result || null };
145
145
  }
146
146
  catch (error) {
147
147
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -151,8 +151,8 @@ router.patch('/:collection/:pk', collection_exists_1.default, (0, async_handler_
151
151
  }
152
152
  return next();
153
153
  }), respond_1.respond);
154
- router.delete('/:collection', collection_exists_1.default, (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, res, next) => {
155
- if (req.params.collection.startsWith('directus_'))
154
+ router.delete('/:collection', collection_exists_1.default, (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, _res, next) => {
155
+ if (req.params['collection'].startsWith('directus_'))
156
156
  throw new exceptions_1.ForbiddenException();
157
157
  const service = new services_1.ItemsService(req.collection, {
158
158
  accountability: req.accountability,
@@ -170,14 +170,14 @@ router.delete('/:collection', collection_exists_1.default, (0, validate_batch_1.
170
170
  }
171
171
  return next();
172
172
  }), respond_1.respond);
173
- router.delete('/:collection/:pk', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
174
- if (req.params.collection.startsWith('directus_'))
173
+ router.delete('/:collection/:pk', collection_exists_1.default, (0, async_handler_1.default)(async (req, _res, next) => {
174
+ if (req.params['collection'].startsWith('directus_'))
175
175
  throw new exceptions_1.ForbiddenException();
176
176
  const service = new services_1.ItemsService(req.collection, {
177
177
  accountability: req.accountability,
178
178
  schema: req.schema,
179
179
  });
180
- await service.deleteOne(req.params.pk);
180
+ await service.deleteOne(req.params['pk']);
181
181
  return next();
182
182
  }), respond_1.respond);
183
183
  exports.default = router;
@@ -30,11 +30,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
30
30
  try {
31
31
  if (Array.isArray(req.body)) {
32
32
  const records = await service.readMany(savedKeys, req.sanitizedQuery);
33
- res.locals.payload = { data: records };
33
+ res.locals['payload'] = { data: records };
34
34
  }
35
35
  else {
36
36
  const record = await service.readOne(savedKeys[0], req.sanitizedQuery);
37
- res.locals.payload = { data: record };
37
+ res.locals['payload'] = { data: record };
38
38
  }
39
39
  }
40
40
  catch (error) {
@@ -65,7 +65,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
65
65
  result = await service.readByQuery(req.sanitizedQuery);
66
66
  }
67
67
  const meta = await metaService.getMetaForQuery('directus_notifications', req.sanitizedQuery);
68
- res.locals.payload = { data: result, meta };
68
+ res.locals['payload'] = { data: result, meta };
69
69
  return next();
70
70
  });
71
71
  router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
@@ -75,8 +75,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
75
75
  accountability: req.accountability,
76
76
  schema: req.schema,
77
77
  });
78
- const record = await service.readOne(req.params.pk, req.sanitizedQuery);
79
- res.locals.payload = { data: record || null };
78
+ const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
79
+ res.locals['payload'] = { data: record || null };
80
80
  return next();
81
81
  }), respond_1.respond);
82
82
  router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
@@ -97,7 +97,7 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
97
97
  }
98
98
  try {
99
99
  const result = await service.readMany(keys, req.sanitizedQuery);
100
- res.locals.payload = { data: result };
100
+ res.locals['payload'] = { data: result };
101
101
  }
102
102
  catch (error) {
103
103
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -112,10 +112,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
112
112
  accountability: req.accountability,
113
113
  schema: req.schema,
114
114
  });
115
- const primaryKey = await service.updateOne(req.params.pk, req.body);
115
+ const primaryKey = await service.updateOne(req.params['pk'], req.body);
116
116
  try {
117
117
  const record = await service.readOne(primaryKey, req.sanitizedQuery);
118
- res.locals.payload = { data: record };
118
+ res.locals['payload'] = { data: record };
119
119
  }
120
120
  catch (error) {
121
121
  if (error instanceof exceptions_1.ForbiddenException) {
@@ -125,7 +125,7 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
125
125
  }
126
126
  return next();
127
127
  }), respond_1.respond);
128
- router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, res, next) => {
128
+ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_handler_1.default)(async (req, _res, next) => {
129
129
  const service = new services_1.NotificationsService({
130
130
  accountability: req.accountability,
131
131
  schema: req.schema,
@@ -142,12 +142,12 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
142
142
  }
143
143
  return next();
144
144
  }), respond_1.respond);
145
- router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
145
+ router.delete('/:pk', (0, async_handler_1.default)(async (req, _res, next) => {
146
146
  const service = new services_1.NotificationsService({
147
147
  accountability: req.accountability,
148
148
  schema: req.schema,
149
149
  });
150
- await service.deleteOne(req.params.pk);
150
+ await service.deleteOne(req.params['pk']);
151
151
  return next();
152
152
  }), respond_1.respond);
153
153
  exports.default = router;