@vara/custom-logic-sdk
Version:
Server Side JavaScript SDK for Custom Business Logic
65 lines (53 loc) • 1.79 kB
JavaScript
/**
* Created by stevenchin on 2/1/17.
*/
const Joi = require('joi');
const { CUSTOM_LOGIC } = require('../constants/constants');
const { EXECUTION_MODES } = CUSTOM_LOGIC.FUNCTIONS;
const { TYPES: CL_FN_TYPES } = CUSTOM_LOGIC.FUNCTIONS;
const { TYPES: CL_ACTION_TYPES } = CUSTOM_LOGIC.ACTIONS;
const baseSchema = Joi.object()
.keys({
name: Joi.string().required().min(1),
type: Joi.string().required()
.valid([
CL_FN_TYPES.STANDALONE,
CL_FN_TYPES.POST_HOOK,
CL_FN_TYPES.PRE_HOOK,
CL_ACTION_TYPES.CL_ACTION,
]),
});
const baseClFnSchema = baseSchema
.keys({
executionMode: Joi.string().required().valid([EXECUTION_MODES.SYNC]),
clProtocolVersion: Joi.string().required().min(3),
});
const standaloneFnSchema = baseClFnSchema
.keys({
supportAllMethods: Joi.boolean(),
httpMethods: Joi.array().items(Joi.string().only(['GET', 'PUT', 'POST', 'DELETE'])),
})
.xor('supportAllMethods', 'httpMethods');
const postHookSchema = baseClFnSchema
.keys({
modelName: Joi.string().required(),
modelMethod: Joi.string().required(),
});
const preHookSchema = baseClFnSchema
.keys({
url: Joi.string(),
urlPath: Joi.string(),
// array must contain one string and the string must match one of the set of allowed values
httpMethods: Joi.array().items(Joi.string().only(['*', 'GET', 'PUT', 'POST', 'DELETE']).required()),
})
.xor('urlPath', 'url')
.requiredKeys(['httpMethods']);
const clActionSchema = baseSchema;
const schemas = {
baseSchema,
[CL_FN_TYPES.STANDALONE]: standaloneFnSchema,
[CL_FN_TYPES.POST_HOOK]: postHookSchema,
[CL_FN_TYPES.PRE_HOOK]: preHookSchema,
[CL_ACTION_TYPES.CL_ACTION]: clActionSchema,
};
module.exports = schemas;