@staticcms/proxy-server-lite
Version:
Proxy server to be used with Static CMS proxy backend
244 lines • 8.02 kB
JavaScript
"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