directus
117 строк · 3.2 Кб
1import { ErrorCode, createError } from '@directus/errors';2import express from 'express';3import { respond } from '../middleware/respond.js';4import useCollection from '../middleware/use-collection.js';5import { validateBatch } from '../middleware/validate-batch.js';6import { MetaService } from '../services/meta.js';7import { WebhooksService } from '../services/webhooks.js';8import asyncHandler from '../utils/async-handler.js';9import { sanitizeQuery } from '../utils/sanitize-query.js';10
11const router = express.Router();12
13router.use(useCollection('directus_webhooks'));14
15router.post(16'/',17asyncHandler(async (_req, _res, _next) => {18// Disallow creation of new Webhooks as part of the deprecation, see https://github.com/directus/directus/issues/1555319throw new (createError(ErrorCode.MethodNotAllowed, 'Webhooks are deprecated, use Flows instead', 405))();20}),21respond,22);23
24const readHandler = asyncHandler(async (req, res, next) => {25const service = new WebhooksService({26accountability: req.accountability,27schema: req.schema,28});29
30const metaService = new MetaService({31accountability: req.accountability,32schema: req.schema,33});34
35const records = await service.readByQuery(req.sanitizedQuery);36const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);37
38res.locals['payload'] = { data: records || null, meta };39return next();40});41
42router.get('/', validateBatch('read'), readHandler, respond);43router.search('/', validateBatch('read'), readHandler, respond);44
45router.get(46'/:pk',47asyncHandler(async (req, res, next) => {48const service = new WebhooksService({49accountability: req.accountability,50schema: req.schema,51});52
53const record = await service.readOne(req.params['pk']!, req.sanitizedQuery);54
55res.locals['payload'] = { data: record || null };56return next();57}),58respond,59);60
61router.patch(62'/',63validateBatch('update'),64asyncHandler(async (_req, _res, _next) => {65// Disallow patching of Webhooks as part of the deprecation, see https://github.com/directus/directus/issues/1555366throw new (createError(ErrorCode.MethodNotAllowed, 'Webhooks are deprecated, use Flows instead', 405))();67}),68respond,69);70
71router.patch(72'/:pk',73asyncHandler(async (_req, _res, _next) => {74// Disallow patching of Webhooks as part of the deprecation, see https://github.com/directus/directus/issues/1555375throw new (createError(ErrorCode.MethodNotAllowed, 'Webhooks are deprecated, use Flows instead', 405))();76}),77respond,78);79
80router.delete(81'/',82asyncHandler(async (req, _res, next) => {83const service = new WebhooksService({84accountability: req.accountability,85schema: req.schema,86});87
88if (Array.isArray(req.body)) {89await service.deleteMany(req.body);90} else if (req.body.keys) {91await service.deleteMany(req.body.keys);92} else {93const sanitizedQuery = sanitizeQuery(req.body.query, req.accountability);94await service.deleteByQuery(sanitizedQuery);95}96
97return next();98}),99respond,100);101
102router.delete(103'/:pk',104asyncHandler(async (req, _res, next) => {105const service = new WebhooksService({106accountability: req.accountability,107schema: req.schema,108});109
110await service.deleteOne(req.params['pk']!);111
112return next();113}),114respond,115);116
117export default router;118