UNPKG

@vara/custom-logic-sdk

Version:

Server Side JavaScript SDK for Custom Business Logic

65 lines (53 loc) 1.79 kB
/** * 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;