directus 9.23.3 → 9.23.4
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.
- package/dist/app.js +12 -12
- package/dist/auth/drivers/ldap.js +22 -22
- package/dist/auth/drivers/local.js +7 -7
- package/dist/auth/drivers/oauth2.js +27 -25
- package/dist/auth/drivers/openid.js +32 -30
- package/dist/auth/drivers/saml.js +10 -10
- package/dist/auth.js +4 -3
- package/dist/cache.js +16 -11
- package/dist/cli/commands/bootstrap/index.js +5 -4
- package/dist/cli/utils/create-db-connection.js +1 -1
- package/dist/cli/utils/create-env/index.js +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +6 -5
- package/dist/controllers/activity.js +9 -9
- package/dist/controllers/assets.js +19 -18
- package/dist/controllers/auth.js +13 -13
- package/dist/controllers/collections.js +10 -10
- package/dist/controllers/dashboards.js +9 -9
- package/dist/controllers/extensions.js +3 -3
- package/dist/controllers/fields.js +16 -16
- package/dist/controllers/files.js +16 -15
- package/dist/controllers/flows.js +11 -11
- package/dist/controllers/folders.js +9 -9
- package/dist/controllers/graphql.js +6 -6
- package/dist/controllers/items.js +17 -17
- package/dist/controllers/notifications.js +9 -9
- package/dist/controllers/operations.js +9 -9
- package/dist/controllers/panels.js +9 -9
- package/dist/controllers/permissions.js +9 -9
- package/dist/controllers/presets.js +9 -9
- package/dist/controllers/relations.js +10 -10
- package/dist/controllers/revisions.js +3 -3
- package/dist/controllers/roles.js +9 -9
- package/dist/controllers/schema.js +5 -5
- package/dist/controllers/server.js +7 -7
- package/dist/controllers/settings.js +2 -2
- package/dist/controllers/shares.js +13 -13
- package/dist/controllers/users.js +16 -16
- package/dist/controllers/utils.js +5 -5
- package/dist/controllers/webhooks.js +9 -9
- package/dist/database/helpers/fn/types.d.ts +0 -1
- package/dist/database/helpers/fn/types.js +0 -2
- package/dist/database/helpers/index.d.ts +3 -3
- package/dist/database/index.js +5 -5
- package/dist/database/migrations/20210805B-change-image-metadata-structure.js +15 -15
- package/dist/database/migrations/run.js +1 -1
- package/dist/database/run-ast.js +4 -4
- package/dist/database/system-data/collections/index.js +2 -2
- package/dist/database/system-data/fields/index.js +3 -3
- package/dist/env.js +1 -1
- package/dist/extensions.js +10 -10
- package/dist/flows.js +33 -31
- package/dist/logger.d.ts +1 -0
- package/dist/logger.js +32 -32
- package/dist/mailer.js +16 -16
- package/dist/messenger.js +4 -4
- package/dist/middleware/authenticate.js +1 -1
- package/dist/middleware/cache.js +11 -11
- package/dist/middleware/collection-exists.js +3 -3
- package/dist/middleware/cors.js +7 -7
- package/dist/middleware/error-handler.js +2 -2
- package/dist/middleware/extract-token.js +2 -2
- package/dist/middleware/graphql.js +12 -6
- package/dist/middleware/rate-limiter-global.js +5 -5
- package/dist/middleware/rate-limiter-ip.js +2 -2
- package/dist/middleware/respond.js +16 -16
- package/dist/middleware/sanitize-query.js +1 -1
- package/dist/operations/exec/index.js +2 -2
- package/dist/rate-limiter.js +1 -1
- package/dist/request/validate-ip.js +2 -2
- package/dist/server.js +4 -4
- package/dist/services/activity.js +14 -14
- package/dist/services/assets.js +6 -6
- package/dist/services/authentication.js +9 -9
- package/dist/services/collections.js +9 -9
- package/dist/services/fields.js +5 -5
- package/dist/services/files.js +12 -12
- package/dist/services/graphql/index.js +100 -98
- package/dist/services/import-export.js +6 -6
- package/dist/services/items.js +6 -6
- package/dist/services/mail/index.js +5 -5
- package/dist/services/meta.js +1 -0
- package/dist/services/notifications.js +4 -4
- package/dist/services/revisions.js +3 -3
- package/dist/services/roles.js +5 -5
- package/dist/services/server.js +27 -27
- package/dist/services/shares.js +9 -9
- package/dist/services/specifications.js +5 -3
- package/dist/services/users.d.ts +1 -5
- package/dist/services/users.js +24 -27
- package/dist/storage/register-locations.js +1 -1
- package/dist/utils/apply-query.js +2 -1
- package/dist/utils/dynamic-import.js +1 -1
- package/dist/utils/generate-hash.js +1 -1
- package/dist/utils/get-ast-from-query.js +1 -1
- package/dist/utils/get-auth-providers.js +1 -1
- package/dist/utils/get-cache-headers.js +3 -3
- package/dist/utils/get-collection-from-alias.js +1 -0
- package/dist/utils/get-default-value.js +1 -1
- package/dist/utils/get-ip-from-req.js +2 -2
- package/dist/utils/get-permissions.js +11 -11
- package/dist/utils/get-schema.js +2 -2
- package/dist/utils/is-url-allowed.js +5 -2
- package/dist/utils/sanitize-query.js +26 -26
- package/dist/utils/should-skip-cache.js +2 -2
- package/dist/utils/track.js +16 -16
- package/dist/utils/validate-query.js +1 -1
- package/dist/utils/validate-storage.js +8 -8
- package/dist/webhooks.js +2 -2
- package/package.json +13 -13
- package/dist/utils/redact-header-cookies.d.ts +0 -1
- package/dist/utils/redact-header-cookies.js +0 -11
- /package/dist/{utils/redact-header-cookies.test.d.ts → logger.test.d.ts} +0 -0
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
199
|
-
res.locals
|
|
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
|
|
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
|
|
236
|
+
await service.updateOne(req.params['pk'], req.body);
|
|
236
237
|
try {
|
|
237
|
-
const record = await service.readOne(req.params
|
|
238
|
-
res.locals
|
|
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) {
|
|
@@ -267,7 +268,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
267
268
|
accountability: req.accountability,
|
|
268
269
|
schema: req.schema,
|
|
269
270
|
});
|
|
270
|
-
await service.deleteOne(req.params
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
89
|
-
res.locals
|
|
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
|
|
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
|
|
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
|
|
128
|
+
res.locals['payload'] = { data: item || null };
|
|
129
129
|
}
|
|
130
130
|
catch (error) {
|
|
131
131
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -157,7 +157,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
157
157
|
accountability: req.accountability,
|
|
158
158
|
schema: req.schema,
|
|
159
159
|
});
|
|
160
|
-
await service.deleteOne(req.params
|
|
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
|
|
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
|
|
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
|
|
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
|
|
79
|
-
res.locals
|
|
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
|
|
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
|
|
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
|
|
118
|
+
res.locals['payload'] = { data: record || null };
|
|
119
119
|
}
|
|
120
120
|
catch (error) {
|
|
121
121
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -147,7 +147,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
147
147
|
accountability: req.accountability,
|
|
148
148
|
schema: req.schema,
|
|
149
149
|
});
|
|
150
|
-
await service.deleteOne(req.params
|
|
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
|
|
19
|
-
if (res.locals
|
|
20
|
-
res.locals
|
|
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
|
|
31
|
-
if (res.locals
|
|
32
|
-
res.locals
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
90
|
-
res.locals
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
144
|
+
res.locals['payload'] = { data: result || null };
|
|
145
145
|
}
|
|
146
146
|
catch (error) {
|
|
147
147
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -152,7 +152,7 @@ router.patch('/:collection/:pk', collection_exists_1.default, (0, async_handler_
|
|
|
152
152
|
return next();
|
|
153
153
|
}), respond_1.respond);
|
|
154
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
|
|
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,
|
|
@@ -171,13 +171,13 @@ router.delete('/:collection', collection_exists_1.default, (0, validate_batch_1.
|
|
|
171
171
|
return next();
|
|
172
172
|
}), respond_1.respond);
|
|
173
173
|
router.delete('/:collection/:pk', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
|
|
174
|
-
if (req.params
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
79
|
-
res.locals
|
|
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
|
|
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
|
|
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
|
|
118
|
+
res.locals['payload'] = { data: record };
|
|
119
119
|
}
|
|
120
120
|
catch (error) {
|
|
121
121
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -147,7 +147,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
147
147
|
accountability: req.accountability,
|
|
148
148
|
schema: req.schema,
|
|
149
149
|
});
|
|
150
|
-
await service.deleteOne(req.params
|
|
150
|
+
await service.deleteOne(req.params['pk']);
|
|
151
151
|
return next();
|
|
152
152
|
}), respond_1.respond);
|
|
153
153
|
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 items = await service.readMany(savedKeys, req.sanitizedQuery);
|
|
33
|
-
res.locals
|
|
33
|
+
res.locals['payload'] = { data: items };
|
|
34
34
|
}
|
|
35
35
|
else {
|
|
36
36
|
const item = await service.readOne(savedKeys[0], req.sanitizedQuery);
|
|
37
|
-
res.locals
|
|
37
|
+
res.locals['payload'] = { data: item };
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
catch (error) {
|
|
@@ -56,7 +56,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
56
56
|
});
|
|
57
57
|
const records = await service.readByQuery(req.sanitizedQuery);
|
|
58
58
|
const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
|
|
59
|
-
res.locals
|
|
59
|
+
res.locals['payload'] = { data: records || null, meta };
|
|
60
60
|
return next();
|
|
61
61
|
});
|
|
62
62
|
router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
|
|
@@ -66,8 +66,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
66
66
|
accountability: req.accountability,
|
|
67
67
|
schema: req.schema,
|
|
68
68
|
});
|
|
69
|
-
const record = await service.readOne(req.params
|
|
70
|
-
res.locals
|
|
69
|
+
const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
|
|
70
|
+
res.locals['payload'] = { data: record || null };
|
|
71
71
|
return next();
|
|
72
72
|
}), respond_1.respond);
|
|
73
73
|
router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
|
|
@@ -88,7 +88,7 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
|
|
|
88
88
|
}
|
|
89
89
|
try {
|
|
90
90
|
const result = await service.readMany(keys, req.sanitizedQuery);
|
|
91
|
-
res.locals
|
|
91
|
+
res.locals['payload'] = { data: result };
|
|
92
92
|
}
|
|
93
93
|
catch (error) {
|
|
94
94
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -103,10 +103,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
103
103
|
accountability: req.accountability,
|
|
104
104
|
schema: req.schema,
|
|
105
105
|
});
|
|
106
|
-
const primaryKey = await service.updateOne(req.params
|
|
106
|
+
const primaryKey = await service.updateOne(req.params['pk'], req.body);
|
|
107
107
|
try {
|
|
108
108
|
const item = await service.readOne(primaryKey, req.sanitizedQuery);
|
|
109
|
-
res.locals
|
|
109
|
+
res.locals['payload'] = { data: item || null };
|
|
110
110
|
}
|
|
111
111
|
catch (error) {
|
|
112
112
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -138,7 +138,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
138
138
|
accountability: req.accountability,
|
|
139
139
|
schema: req.schema,
|
|
140
140
|
});
|
|
141
|
-
await service.deleteOne(req.params
|
|
141
|
+
await service.deleteOne(req.params['pk']);
|
|
142
142
|
return next();
|
|
143
143
|
}), respond_1.respond);
|
|
144
144
|
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 items = await service.readMany(savedKeys, req.sanitizedQuery);
|
|
33
|
-
res.locals
|
|
33
|
+
res.locals['payload'] = { data: items };
|
|
34
34
|
}
|
|
35
35
|
else {
|
|
36
36
|
const item = await service.readOne(savedKeys[0], req.sanitizedQuery);
|
|
37
|
-
res.locals
|
|
37
|
+
res.locals['payload'] = { data: item };
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
catch (error) {
|
|
@@ -56,7 +56,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
56
56
|
});
|
|
57
57
|
const records = await service.readByQuery(req.sanitizedQuery);
|
|
58
58
|
const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
|
|
59
|
-
res.locals
|
|
59
|
+
res.locals['payload'] = { data: records || null, meta };
|
|
60
60
|
return next();
|
|
61
61
|
});
|
|
62
62
|
router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
|
|
@@ -66,8 +66,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
66
66
|
accountability: req.accountability,
|
|
67
67
|
schema: req.schema,
|
|
68
68
|
});
|
|
69
|
-
const record = await service.readOne(req.params
|
|
70
|
-
res.locals
|
|
69
|
+
const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
|
|
70
|
+
res.locals['payload'] = { data: record || null };
|
|
71
71
|
return next();
|
|
72
72
|
}), respond_1.respond);
|
|
73
73
|
router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
|
|
@@ -88,7 +88,7 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
|
|
|
88
88
|
}
|
|
89
89
|
try {
|
|
90
90
|
const result = await service.readMany(keys, req.sanitizedQuery);
|
|
91
|
-
res.locals
|
|
91
|
+
res.locals['payload'] = { data: result };
|
|
92
92
|
}
|
|
93
93
|
catch (error) {
|
|
94
94
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -103,10 +103,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
103
103
|
accountability: req.accountability,
|
|
104
104
|
schema: req.schema,
|
|
105
105
|
});
|
|
106
|
-
const primaryKey = await service.updateOne(req.params
|
|
106
|
+
const primaryKey = await service.updateOne(req.params['pk'], req.body);
|
|
107
107
|
try {
|
|
108
108
|
const item = await service.readOne(primaryKey, req.sanitizedQuery);
|
|
109
|
-
res.locals
|
|
109
|
+
res.locals['payload'] = { data: item || null };
|
|
110
110
|
}
|
|
111
111
|
catch (error) {
|
|
112
112
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -138,7 +138,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
138
138
|
accountability: req.accountability,
|
|
139
139
|
schema: req.schema,
|
|
140
140
|
});
|
|
141
|
-
await service.deleteOne(req.params
|
|
141
|
+
await service.deleteOne(req.params['pk']);
|
|
142
142
|
return next();
|
|
143
143
|
}), respond_1.respond);
|
|
144
144
|
exports.default = router;
|