UNPKG

24.8 kBSource Map (JSON)View Raw
1{"version":3,"file":"APILove.js","sourceRoot":"","sources":["APILove.ts"],"names":[],"mappings":"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","sourcesContent":["import express from \"express\";\nimport bodyParser from \"body-parser\";\nimport cookieParser from \"cookie-parser\";\nimport {get, isNil, set, defaultsDeep, each, castArray, has, isNaN} from \"lodash\";\nimport {APIConfig} from \"./lib/APIConfig\";\nimport path from \"path\";\nimport {APIUtils} from \"./lib/APIUtils\";\nimport \"reflect-metadata\";\nimport {APIResponse} from \"./lib/APIResponse\";\nimport {APIError} from \"./lib/APIError\";\nimport {KVService} from \"./lib/Services/KeyValue/KVService\";\nimport {FileService} from \"./lib/Services/File/FileService\";\nimport {EnvVarSync} from \"./lib/Services/Config\";\nimport {APIAuthUser, APIAuthUtils} from \"./lib/APIAuthUtils\";\n\ninterface HandlerParameterData {\n paramRawType: string;\n paramType: string;\n paramName: string;\n paramOptions: APIParameterOptions;\n}\n\ninterface HandlerData {\n isInstance: boolean;\n options: APIEndpointOptions;\n handlerFunction: Function;\n handlerParameterNames: string[];\n handlerParameterData: { [paramIndex: number]: HandlerParameterData };\n}\n\nexport interface APILoaderDefinition {\n apiPath?: string;\n require: string;\n moduleName?: string;\n}\n\nexport interface APILoveOptions {\n\n // One or more APIs to allow apilove to load. Remember these are lazy-loaded.\n apis?: APILoaderDefinition[];\n\n // By default cookieParser and bodyParser will be loaded. You can set this to false to prevent those from loading. Defaults to true.\n loadStandardMiddleware?: boolean;\n\n // Any other express.js middleware you want loaded before requests make it to apilove.\n middleware?: any[];\n\n // Override default express.js and APILove error handling\n defaultErrorHandler?: (error, req, res, next) => void;\n\n // This can be used to provide a default output for all requests. Useful to return a 404 or other default page.\n defaultRouteHandler?: (req, res) => void;\n\n callbackWaitsForEmptyEventLoop?: boolean;\n}\n\nfunction _createHandlerWrapperFunction(handlerData: HandlerData, thisObject) {\n return (req, res, next) => {\n\n let apiResponse = new APIResponse(req, res, next);\n\n // Does this require authentication?\n if (handlerData.options.requireAuthentication) {\n if (!req.auth || !req.auth.isAuthenticated || req.auth.isExpired) {\n apiResponse.withError(APIError.create401UnauthorizedError());\n return;\n }\n }\n\n let handlerArgs = [];\n let validationErrors: { parameter: string, message: string }[] = [];\n\n // Loop through each parameter in our function and pull it from the request\n for (let index = 0; index < handlerData.handlerParameterNames.length; index++) {\n let paramData: HandlerParameterData = handlerData.handlerParameterData[index];\n let paramOptions: APIParameterOptions = get(paramData, \"paramOptions\", {});\n let paramName = APIUtils.coalesce(paramOptions.rawName, handlerData.handlerParameterNames[index]);\n\n // Ignore request and response parameters if the function asks for it\n if ((index === handlerData.handlerParameterNames.length - 1 || index === handlerData.handlerParameterNames.length - 2) && [\"req\", \"request\", \"res\", \"response\"].indexOf(paramName.toLowerCase()) >= 0) {\n continue;\n }\n\n let paramSources: string[] = castArray(get(paramOptions, \"sources\", [\"params\", \"query\", \"body\", \"cookie\", \"headers\"]));\n let paramValue;\n\n if (req.auth && paramData.paramType === \"APIAuthUser\") {\n paramValue = APIAuthUtils.getAPIAuthUserFromAuthCredentials(req.auth);\n } else {\n for (let paramSource of paramSources) {\n let paramValues = get(req, paramSource);\n\n if (isNil(paramValues)) {\n continue;\n }\n\n if (paramOptions.includeFullSource ||\n (/[\\.\\[\\]]/g).test(paramSource) // If the source contains any of the characters \".[]\" (ie a path), assume the developer meant to include the full source.\n ) {\n paramValue = paramValues;\n break;\n } else {\n if (has(paramValues, paramName)) {\n paramValue = paramValues[paramName];\n\n if(paramSource === \"query\")\n {\n paramValue = decodeURIComponent(paramValue);\n }\n\n break;\n }\n }\n }\n }\n\n let argValue = APIUtils.coalesce(paramValue, paramOptions.defaultValue);\n\n if (paramOptions.processor) {\n try {\n argValue = paramOptions.processor(argValue, req);\n } catch (error) {\n validationErrors.push({\n parameter: paramName,\n message: error.message || error.toString()\n });\n continue;\n }\n }\n\n if (isNil(argValue)) {\n\n // Is this parameter required?\n if (!get(paramOptions, \"optional\", false)) {\n validationErrors.push({\n parameter: paramName,\n message: \"missing\"\n });\n }\n\n handlerArgs.push(undefined);\n continue;\n }\n\n argValue = APIUtils.convertToType(argValue, paramData.paramRawType);\n\n if (isNil(argValue) || isNaN(argValue)) {\n validationErrors.push({\n parameter: paramName,\n message: \"invalid\"\n });\n continue;\n }\n\n handlerArgs.push(argValue);\n }\n\n if (validationErrors.length > 0) {\n apiResponse.withError(APIError.createValidationError(validationErrors));\n return;\n }\n\n apiResponse.processHandlerFunction(thisObject, handlerData.handlerFunction, handlerArgs, handlerData.options.disableFriendlyResponse, handlerData.options.successResponse);\n };\n}\n\nfunction _loadAPI(apiRouter, apiDefinition: APILoaderDefinition) {\n\n let apiModule;\n try {\n apiModule = require(path.resolve(process.cwd(), apiDefinition.require));\n } catch (e) {\n console.error(e);\n return null;\n }\n\n if (isNil(apiModule)) {\n return null;\n }\n\n let moduleName = APIUtils.coalesce(apiDefinition.moduleName, path.basename(apiDefinition.require));\n let apiClass = APIUtils.coalesce(apiModule[moduleName], apiModule.default, apiModule);\n\n let apiInstance;\n\n each(get(apiClass, \"__handlerData\", {}), (handlerData: HandlerData, name) => {\n\n // If this is an instance function, we need to create an instance of the class\n if (handlerData.isInstance && isNil(apiInstance)) {\n apiInstance = new apiClass();\n }\n\n let options: APIEndpointOptions = handlerData.options;\n let argsArray: any[] = [options.path];\n\n\n if (options.middleware) {\n argsArray = argsArray.concat(castArray(options.middleware));\n }\n\n let handlerWrapper = _createHandlerWrapperFunction(handlerData, handlerData.isInstance ? apiInstance : apiClass);\n argsArray.push(handlerWrapper);\n\n apiRouter[options.method.toLowerCase()].apply(apiRouter, argsArray);\n });\n}\n\nexport class APILove {\n\n static app = express();\n\n static start(options: APILoveOptions) {\n\n if (options.loadStandardMiddleware !== false) {\n this.app.use(cookieParser());\n this.app.use(bodyParser.json({limit: \"50mb\"}));\n this.app.use(bodyParser.urlencoded({limit: \"50mb\", extended: false, parameterLimit: 50000}));\n this.app.use(bodyParser.text({limit: \"50mb\"}));\n this.app.use((req, res, next) => {\n req.auth = APIAuthUtils.getAuthCredentialsFromRequest(req, true);\n next();\n });\n }\n\n for (let mw of get(options, \"middleware\", [])) {\n this.app.use(mw);\n }\n\n // Here we load our APIs, but we only load them when requested\n for (let api of get(options, \"apis\", []) as APILoaderDefinition[]) {\n\n if (isNil(api.apiPath)) {\n api.apiPath = \"\";\n }\n\n if (APIConfig.LAZY_LOAD_APIS) {\n let apiRouter;\n\n this.app.use(api.apiPath, (req, res, next) => {\n\n // Lazy load our API\n if (!apiRouter) {\n apiRouter = express.Router();\n _loadAPI(apiRouter, api);\n }\n\n apiRouter(req, res, next);\n });\n } else {\n let apiRouter = express.Router();\n _loadAPI(apiRouter, api);\n this.app.use(api.apiPath, apiRouter);\n }\n }\n\n if (!isNil(options.defaultRouteHandler)) {\n this.app.use(options.defaultRouteHandler);\n }\n\n // Setup our default error handler\n if (!isNil(options.defaultErrorHandler)) {\n this.app.use(options.defaultErrorHandler);\n } else {\n this.app.use((error, req, res, next) => {\n\n if (error instanceof APIError) {\n let apiError = error as APIError;\n res.status(apiError.statusCode).send(APIConfig.OUTPUT_HAPI_RESULTS ? apiError.hapiOut() : apiError.out());\n } else {\n let apiResponse = new APIResponse(res, res);\n apiResponse.withError(error);\n }\n\n });\n }\n\n\n if (APIConfig.RUN_AS_SERVER) {\n this.app.listen(APIConfig.WEB_PORT, () => console.log(`API listening on port ${APIConfig.WEB_PORT}`));\n return this.app;\n } else {\n let serverless = require(\"serverless-http\");\n return serverless(this.app, {callbackWaitsForEmptyEventLoop: !!options.callbackWaitsForEmptyEventLoop});\n }\n }\n}\n\nexport interface APIParameterOptions {\n\n /**\n * If set to true, an error will not be thrown to the API caller if the value is not sent\n */\n optional?: boolean;\n\n /**\n * A default value to be used if one can't be found. This would be an equivalent shortcut for setting optional=true and providing a default value for your method property\n */\n defaultValue?: any;\n\n /**\n * A synchronous function that can be used to transform an incoming parameter into something else. Can also be used as validation by throwing an error.\n * You also get access to the raw express.js req object if you want it.\n */\n processor?: (value: any, req?) => any;\n\n /**\n * One or more sources from which to look for this value. This is basically a path in the req object. So for example, a value of `query` would be equivalent to `req.query[myParamName]`\n * Multiple values can be defined, and whichever one results in a non-null value first will be used. Defaults to [\"params\", \"query\", \"body\", \"cookie\", \"headers\"].\n */\n sources?: string[] | string;\n\n /**\n * If set to true, the entire source will be returned instead of looking for a particular value. Defaults to false.\n *\n * Examples:\n *\n * The following would look for something named `userData` in the query params and return that.\n * @APIParameter({sources:[\"query\"]})\n * userData:string\n *\n * The following would take all the query params and return them as an object\n * @APIParameter({sources:[\"query\"], includeFullSource:true})\n * userData:{[paramName:string] : any}\n */\n includeFullSource?: boolean;\n\n /**\n * This is the raw name of the parameter to look for in cases where the name can't be represented as a valid javascript variable name.\n * Examples usages might be when looking for a header like \"content-type\" or a parameter named \"function\"\n */\n rawName?: string;\n}\n\nexport function APIParameter(options: APIParameterOptions) {\n return function (target, key, parameterIndex: number) {\n let isInstance = isNil(target.prototype);\n let theClass = isInstance ? target.constructor : target.prototype.constructor;\n\n let handlerData: HandlerData = get(theClass, `__handlerData.${key}`, {});\n set(handlerData, `handlerParameterData.${parameterIndex}.paramOptions`, options);\n set(theClass, `__handlerData.${key}`, handlerData);\n }\n}\n\nexport interface APIEndpointOptions {\n // The method to be used when requesting this endpoint. Defaults to \"get\".\n method?: string;\n\n // The path to reach this endpoint. Defaults to \"/\".\n path?: string;\n\n // Any express.js middleware functions you want to be executed before invoking this method. Useful for things like authentication.\n middleware?: ((req, res, next?) => void)[] | ((req, res, next) => void);\n\n // Turn this on if you want to return data as-is and not in HAPI format\n disableFriendlyResponse?: boolean;\n\n // Specify a function here to handle the response yourself\n successResponse?: (responseData: any, res) => void;\n\n // If set to true, a valid JWT must be present in the request, otherwise a 401 error will be thrown\n requireAuthentication?: boolean;\n}\n\nexport function APIEndpoint(options?: APIEndpointOptions) {\n return function (target, key, descriptor) {\n\n let isInstance = isNil(target.prototype);\n let theClass = isInstance ? target.constructor : target.prototype.constructor;\n\n let handlerData: HandlerData = get(theClass, `__handlerData.${key}`, {});\n\n options = defaultsDeep({}, options, {\n method: \"get\",\n path: \"/\"\n });\n\n let parameterMetadata = Reflect.getMetadata(\"design:paramtypes\", target, key);\n let parameterNames = APIUtils.getFunctionParamNames(descriptor.value);\n\n handlerData.isInstance = isInstance;\n handlerData.handlerFunction = descriptor.value;\n handlerData.options = options;\n handlerData.handlerParameterNames = parameterNames;\n\n for (let parameterIndex = 0; parameterIndex < parameterNames.length; parameterIndex++) {\n set(handlerData, `handlerParameterData.${parameterIndex}.paramRawType`, APIUtils.getRawTypeName(parameterMetadata[parameterIndex].prototype));\n set(handlerData, `handlerParameterData.${parameterIndex}.paramType`, parameterMetadata[parameterIndex].name);\n set(handlerData, `handlerParameterData.${parameterIndex}.paramName`, parameterNames[parameterIndex]);\n }\n\n set(theClass, `__handlerData.${key}`, handlerData);\n }\n}\n\n// Re-export stuff\n// TODO: do we need to reconsider this? Is this causing unneeded memory usage if none of these end up getting used?\nexport {\n APIConfig,\n APIAuthUtils,\n APIError,\n APIResponse,\n APIUtils,\n KVService as APIKVService,\n FileService as APIFileService,\n EnvVarSync\n};"]}
\No newline at end of file