UNPKG

@leanstacks/serverless-common

Version:

LeanStacks organization common serverless components.

3 lines (2 loc) 5.74 kB
import e from"http-status";import{transports as t,createLogger as s,format as r}from"winston";import a from"joi";import{DynamoDBDocumentClient as n,BatchWriteCommand as o,DeleteCommand as d,GetCommand as i,PutCommand as u,QueryCommand as m,ScanCommand as l,UpdateCommand as c}from"@aws-sdk/lib-dynamodb";import{DynamoDBClient as f}from"@aws-sdk/client-dynamodb";import{SQSClient as g,SendMessageCommand as S}from"@aws-sdk/client-sqs";import{CognitoIdentityProviderClient as E,AdminDisableUserCommand as h,AdminSetUserPasswordCommand as p,ListUsersCommand as w}from"@aws-sdk/client-cognito-identity-provider";import C from"@middy/core";import N from"@middy/http-event-normalizer";import v from"@middy/http-json-body-parser";import _ from"crypto";class I extends Error{constructor(e,t){super(),this.name="HttpError",this.statusCode=500,this.statusCode=t,"string"==typeof e&&(this.message=e),e instanceof Error&&(this.message=e.message)}}class O extends Error{constructor(e,t,s){super(),this.name="ServiceError",this.code=500,this.statusCode=500,this.code=t||500,this.statusCode=s||500,"string"==typeof e&&(this.message=e),e instanceof Error&&(this.message=e.message)}}class y extends I{constructor(t){super(t||e[`${e.BAD_REQUEST}_MESSAGE`],e.BAD_REQUEST),this.name="BadRequestError"}}class M extends I{constructor(t){super(t||e[`${e.FORBIDDEN}_MESSAGE`],e.FORBIDDEN),this.name="ForbiddenError"}}class b extends I{constructor(t){super(t||e[`${e.NOT_FOUND}_MESSAGE`],e.NOT_FOUND),this.name="NotFoundError"}}function D(e){const{error:t,value:s}=e.validate(process.env,{abortEarly:!1,allowUnknown:!0});if(t)throw console.warn(`Configuration is invalid. Detail: ${t}`),new O(`Configuration validation failed. ${t.message}`);return s}const A=a.object({AWS_EXECUTION_ENV:a.string().required(),AWS_LAMBDA_FUNCTION_NAME:a.string().required(),AWS_LAMBDA_FUNCTION_MEMORY_SIZE:a.string().required(),AWS_LAMBDA_FUNCTION_VERSION:a.string().required(),AWS_REGION:a.string().required(),LOGGING_ENABLED:a.boolean().default(!0),LOGGING_LEVEL:a.string().allow("debug","info","warn","error").default("info")}),G=D(A),L={validateConfig:D},{combine:U,json:B,timestamp:T}=r,R=s({format:U(T(),B()),level:G.LOGGING_LEVEL,silent:!G.LOGGING_ENABLED,transports:[new t.Console]});R.debug("Logger::creating new Logger");const q={defaultMessage:"Unhandled error",defaultStatusCode:500},F=e=>{const t={...q,...e};return{onError:e=>{if(void 0!==e.response)return;if(!e.error)return;const{error:s}=e;(e=>e instanceof I)(s)?(R.error(`middleware::http-error-handler::HttpError::${s}`,s),e.response={statusCode:s.statusCode??t.defaultStatusCode,body:JSON.stringify({name:s.name,message:s.message??t.defaultMessage,code:s.statusCode??t.defaultStatusCode,statusCode:s.statusCode??t.defaultStatusCode})}):(e=>e instanceof O)(s)?(R.error(`middleware::http-error-handler::ServiceError::${s}`,s),e.response={statusCode:s.statusCode??t.defaultStatusCode,body:JSON.stringify({name:s.name,message:s.message||t.defaultMessage,code:s.code||t.defaultStatusCode,statusCode:s.statusCode||t.defaultStatusCode})}):(R.error(`middleware::http-error-handler::Error::${s}`,s),e.response={statusCode:t.defaultStatusCode??500,body:JSON.stringify({name:s.name,message:s.message??t.defaultMessage,code:t.defaultStatusCode,statusCode:t.defaultStatusCode})})}}},W=()=>({before:e=>{R.defaultMeta={requestId:e.context.awsRequestId}}}),$={abortEarly:!1,allowUnknown:!0},x=e=>({before:t=>{if(R.debug("middleware::validator::before"),e.eventSchema){const{error:s,value:r}=((e,t)=>e.validate(t,$))(e.eventSchema,t.event);if(s)throw R.error(`middleware::validator::error::${s}`),new y(s.message);t.event={...t.event,...r}}}}),k={region:G.AWS_REGION},V={convertEmptyValues:!1,removeUndefinedValues:!0,convertClassInstanceToMap:!0},H={wrapNumbers:!1},Q={marshallOptions:V,unmarshallOptions:H};R.debug("DynamoService::creating new DynamoDBDocumentClient",{data:{dynamoDbClientConfig:k,marshallOptions:V,unmarshallOptions:H}});const j=n.from(new f(k),Q),J={batchWriteItems:e=>j.send(new o(e)),deleteItem:e=>j.send(new d(e)),getItem:e=>j.send(new i(e)),putItem:e=>j.send(new u(e)),queryItems:e=>j.send(new m(e)),scanItems:e=>j.send(new l(e)),updateItem:e=>j.send(new c(e))},X={region:G.AWS_REGION};R.debug("SQSService::creating new SQSClient",{data:{clientConfig:X}});const z=new g(X),P={sendMessage:e=>z.send(new S(e))},Y={send:async(e,t)=>{await P.sendMessage({QueueUrl:t,MessageBody:JSON.stringify({data:e.templateData,destinations:e.destinations,template:e.templateName})})}},Z=new E({region:G.AWS_REGION}),K={adminDisableUser:e=>Z.send(new h(e)),adminSetUserPassword:e=>Z.send(new p(e)),listUsers:e=>Z.send(new w(e))},ee=e=>C(e.handler).use(W()).use(N()).use(v()).use(x({eventSchema:e.eventSchema})).use(F({defaultMessage:e.defaultErrorMessage,defaultStatusCode:e.defaultErrorStatusCode})),te=e=>C(e.handler).use(W()).use(x({eventSchema:e.eventSchema})),se=e=>C(e.handler).use(W()).use(x({eventSchema:e.eventSchema})),re=e=>C(e.handler).use(W()).use(x({eventSchema:e.eventSchema})),ae=e=>C(e.handler).use(W()).use(x({eventSchema:e.eventSchema})),ne={generate:(e=16)=>{let t=e;(e<1||e>128)&&(t=16);const s=Math.ceil(t/2);return _.randomBytes(s).toString("hex").substring(0,t)},ID_LENGTH_DEFAULT:16,ID_LENGTH_MAXIMUM:128,ID_LENGTH_MINIMUM:1};export{y as BadRequestError,K as CognitoIdentityProviderService,L as ConfigService,J as DynamoService,Y as EmailService,M as ForbiddenError,I as HttpError,ne as ID,R as Logger,b as NotFoundError,P as SQSService,O as ServiceError,A as baseConfigSchema,G as baseConfigValues,F as httpErrorHandler,W as loggerInitializer,ee as middyfyAPIGateway,ae as middyfyLambda,se as middyfySNS,re as middyfySQS,te as middyfyScheduled,x as validator}; //# sourceMappingURL=index.js.map