UNPKG

@staticcms/proxy-server-lite

Version:
244 lines 8.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.joi = exports.defaultSchema = void 0; const joi_1 = __importDefault(require("joi")); const allowedActions = [ 'info', 'entriesByFolder', 'entriesByFiles', 'getEntry', 'unpublishedEntries', 'unpublishedEntry', 'unpublishedEntryDataFile', 'unpublishedEntryMediaFile', 'deleteUnpublishedEntry', 'persistEntry', 'updateUnpublishedEntryStatus', 'publishUnpublishedEntry', 'getMedia', 'getMediaFile', 'persistMedia', 'deleteFile', 'deleteFiles', 'getDeployPreview', ]; const requiredString = joi_1.default.string().required(); const requiredNumber = joi_1.default.number().required(); const collection = requiredString; const slug = requiredString; function defaultSchema({ path = requiredString } = {}) { const defaultParams = joi_1.default.object({ branch: requiredString, }); const asset = joi_1.default.object({ path, content: joi_1.default.string().allow(''), encoding: requiredString.valid('base64'), }); const dataFile = joi_1.default.object({ slug: requiredString, path, raw: requiredString, newPath: path.optional(), }); const params = joi_1.default.when('action', { switch: [ { is: 'info', then: joi_1.default.allow(), }, { is: 'entriesByFolder', then: defaultParams .keys({ folder: path, extension: requiredString, depth: requiredNumber, }) .required(), }, { is: 'entriesByFiles', then: defaultParams.keys({ files: joi_1.default.array() .items(joi_1.default.object({ path, label: joi_1.default.string() })) .required(), }), }, { is: 'getEntry', then: defaultParams .keys({ path, }) .required(), }, { is: 'unpublishedEntries', then: defaultParams.keys({ branch: requiredString }).required(), }, { is: 'unpublishedEntry', then: defaultParams .keys({ id: joi_1.default.string().optional(), collection: joi_1.default.string().optional(), slug: joi_1.default.string().optional(), cmsLabelPrefix: joi_1.default.string().optional(), }) .required(), }, { is: 'unpublishedEntryDataFile', then: defaultParams .keys({ collection, slug, id: requiredString, path: requiredString, }) .required(), }, { is: 'unpublishedEntryMediaFile', then: defaultParams .keys({ collection, slug, id: requiredString, path: requiredString, }) .required(), }, { is: 'deleteUnpublishedEntry', then: defaultParams .keys({ collection, slug, }) .required(), }, { is: 'persistEntry', then: defaultParams .keys({ cmsLabelPrefix: joi_1.default.string().optional(), entry: dataFile, dataFiles: joi_1.default.array().items(dataFile), assets: joi_1.default.array().items(asset).required(), options: joi_1.default.object({ collectionName: joi_1.default.string(), commitMessage: requiredString, useWorkflow: joi_1.default.bool(), status: joi_1.default.string(), }).required(), }) .xor('entry', 'dataFiles') .required(), }, { is: 'updateUnpublishedEntryStatus', then: defaultParams .keys({ collection, slug, newStatus: requiredString, cmsLabelPrefix: joi_1.default.string().optional(), }) .required(), }, { is: 'publishUnpublishedEntry', then: defaultParams .keys({ collection, slug, }) .required(), }, { is: 'getMedia', then: defaultParams .keys({ mediaFolder: path, }) .required(), }, { is: 'getMediaFile', then: defaultParams .keys({ path, }) .required(), }, { is: 'persistMedia', then: defaultParams .keys({ asset: asset.required(), options: joi_1.default.object({ commitMessage: requiredString, }).required(), }) .required(), }, { is: 'deleteFile', then: defaultParams .keys({ path, options: joi_1.default.object({ commitMessage: requiredString, }).required(), }) .required(), }, { is: 'deleteFiles', then: defaultParams .keys({ paths: joi_1.default.array().items(path).min(1).required(), options: joi_1.default.object({ commitMessage: requiredString, }).required(), }) .required(), }, { is: 'getDeployPreview', then: defaultParams .keys({ collection, slug, }) .required(), }, ], otherwise: joi_1.default.forbidden(), }); return joi_1.default.object({ action: joi_1.default.valid(...allowedActions).required(), params, }); } exports.defaultSchema = defaultSchema; function joi(schema) { return (req, res, next) => { const { error } = schema.validate(req.body, { allowUnknown: true }); if (error) { const { details } = error; const message = details.map(i => i.message).join(','); res.status(422).json({ error: message }); } else { next(); } }; } exports.joi = joi; //# sourceMappingURL=index.js.map