@spytecgps/lambda-utils 2.3.0 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/config/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export type Env = 'base' | 'local' | 'dev' | 'test' | '
|
|
1
|
+
export type Env = 'base' | 'local' | 'dev' | 'test' | 'prod';
|
|
2
2
|
export type DeepPartial<T> = {
|
|
3
3
|
[P in keyof T]?: DeepPartial<T[P]>;
|
|
4
4
|
};
|
|
5
|
-
export type PartialConfig<T> = DeepPartial<T>;
|
|
6
5
|
export type EnvConfigsParam<T> = {
|
|
7
6
|
base: DeepPartial<T>;
|
|
8
7
|
[k: string]: DeepPartial<T>;
|
|
9
8
|
};
|
|
9
|
+
export declare const getEnvKey: () => Env;
|
|
10
10
|
export declare const isLocal: () => boolean;
|
|
11
11
|
export declare const isTest: () => boolean;
|
|
12
12
|
export declare const isDev: () => boolean;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports["lambda-utils"]=r():e["lambda-utils"]=r()}(global,(()=>(()=>{"use strict";var e={n:r=>{var t=r&&r.__esModule?()=>r.default:()=>r;return e.d(t,{a:t}),t},d:(r,t)=>{for(var a in t)e.o(t,a)&&!e.o(r,a)&&Object.defineProperty(r,a,{enumerable:!0,get:t[a]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};e.r(r),e.d(r,{BadRequestError:()=>E,BaseError:()=>O,ConflictError:()=>N,ForbiddenError:()=>_,HttpError:()=>v,LambdaCache:()=>oe,NotFoundError:()=>T,SpytecJoi:()=>y,UnauthorizedError:()=>b,apiGatewayEventWrapper:()=>S,apiGatewayMiddlewares:()=>Y,apiGatewayMiddy:()=>re,baseMiddlewares:()=>
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports["lambda-utils"]=r():e["lambda-utils"]=r()}(global,(()=>(()=>{"use strict";var e={n:r=>{var t=r&&r.__esModule?()=>r.default:()=>r;return e.d(t,{a:t}),t},d:(r,t)=>{for(var a in t)e.o(t,a)&&!e.o(r,a)&&Object.defineProperty(r,a,{enumerable:!0,get:t[a]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};e.r(r),e.d(r,{BadRequestError:()=>E,BaseError:()=>O,ConflictError:()=>N,ForbiddenError:()=>_,HttpError:()=>v,LambdaCache:()=>oe,NotFoundError:()=>T,SpytecJoi:()=>y,UnauthorizedError:()=>b,apiGatewayEventWrapper:()=>S,apiGatewayMiddlewares:()=>Y,apiGatewayMiddy:()=>re,baseMiddlewares:()=>X,buildProxyResult:()=>x,buildResponseBody:()=>j,defaultApiSchema:()=>A,getAuthorizerValidator:()=>h,getEnvKey:()=>ie,getRequestContextValidator:()=>f,httpErrorHandler:()=>z(),httpResponseSerializer:()=>$(),iccidSchema:()=>m,imeiSchema:()=>g,isDev:()=>ce,isLocal:()=>le,isProduction:()=>ue,isTest:()=>de,json:()=>u,logger:()=>t.logger,merge:()=>ae(),middy:()=>ee,promiseWithCache:()=>se,promiseWithTimeout:()=>ne,requestContextValidator:()=>w,setupEnvConfig:()=>pe,sqsEventWrapper:()=>R,sqsEventWrapperWithReturn:()=>I,sqsJsonBodyParser:()=>U(),urlEncoded:()=>p,validateEvent:()=>C,validatorMiddleware:()=>Z,warmupMiddleware:()=>Q,withRequest:()=>t.withRequest});const t=require("@spytecgps/sdk-logger"),a=require("dayjs");var o=e.n(a);const s=require("dayjs/plugin/timezone");var n=e.n(s);const i=require("dayjs/plugin/utc");var l=e.n(i);const d=require("joi"),c=require("qs");o().extend(l()),o().extend(n());const u=d.extend((e=>({type:"object",base:e.object(),messages:{"json.valid":"must be valid JSON"},coerce(e){try{return{value:JSON.parse(e)}}catch(e){return null}},validate:(e,r)=>e?{value:e}:{value:e,errors:r.error("json.valid")}}))),p=d.extend((e=>({type:"object",base:e.object(),coerce:e=>({value:c.parse(e)})}))),g=d.string().regex(/^\d{15,16}$/).message("Invalid IMEI"),m=d.string().regex(/^[0-9A-Za-z]{18,22}$/).message("Invalid ICCID"),y=d.extend((e=>({type:"imei",messages:"Invalid IMEI",base:e.string().regex(/^\d{15,16}$/)})),(e=>({type:"iccid",messages:"Invalid ICCID",base:e.string().regex(/^[0-9A-Za-z]{18,22}$/)})),(e=>({type:"urlEncodedObject",base:e.object(),coerce:e=>({value:c.parse(e)})})),(e=>({type:"jsonObject",base:e.object(),coerce(e){try{return{value:JSON.parse(e)}}catch(e){return null}},validate:(e,r)=>e?{value:e}:{value:e,errors:r.error("json.valid")}})),(e=>({type:"delimitedArray",base:e.array().default([]),coerce:e=>({value:e.split?e.split(","):e})})),(e=>({type:"queryStringParameters",messages:"Missing query parameters",base:e.object().required()})),(e=>({type:"date",base:e.date(),prepare(e,r){try{const r=o().tz(e,"UTC");if(r.isValid())return{value:r.toDate()}}catch(e){return r.error("any.invalid")}}})),(e=>({type:"jsonArray",base:e.array(),coerce(e){try{return{value:JSON.parse(e)}}catch(e){return{value:null}}},validate:(e,r)=>Array.isArray(e)?{value:e}:{value:e,errors:r.error("jsonArray.schema")}})),(e=>({type:"base64ThenUriEncodedObject",base:e.object(),coerce(e){try{const r=decodeURIComponent(Buffer.from(e,"base64").toString());return{value:JSON.parse(r)}}catch(e){return null}},validate:(e,r)=>e?{value:e}:{value:e,errors:r.error("json.valid")}})));class v extends Error{}class b extends v{code=401;statusCode=401;name="UnauthorizedError"}const h=({scope:e,type:r}={})=>d.object({clientId:d.number(),resources:u.object({}),scope:e?d.string().pattern(new RegExp(`${e}`)).error((()=>new b(`missing scope ${e}`))):d.optional(),type:r?d.any().valid(r).error((()=>new b(`missing user type ${r}`))):d.optional(),enterprise:d.boolean().default(!1),maintenanceModule:d.boolean().default(!1),billingMethod:d.string().optional(),customerSegment:d.string().optional(),securityGroupTagId:d.number().optional().allow(null)}),w=d.object({authorizer:h()}),f=(e={})=>d.object({authorizer:h(e)});class E extends v{code=400;statusCode=400;name="BadRequestError"}const C=(e,r,a)=>{if(!r)return t.logger.warn("skipping validation"),e;const{error:o,value:s}=r.validate(e,{allowUnknown:a?.allowUnknown||!0,errors:{label:"key",wrap:{label:!1}}});if(o)throw t.logger.error({error:o},"Validation error"),o.isJoi?new E(o.message):o;return s},A=y.object({requestContext:f()}),q={"Content-Type":"application/json","Access-Control-Allow-Origin":"*","Access-Control-Allow-Credentials":!0},j=(e,r,t)=>({success:e<400,message:r,result:t||void 0}),x=({statusCode:e=200,message:r="ok",data:t,headers:a={},rawResult:o=!1,stringifyBody:s=!0})=>{const n=o?t:j(e,r,t),i=s?n&&JSON.stringify(n):t;return{headers:{...q,...a},statusCode:e,body:i}},S=async({event:e,context:r,schema:a,handler:o})=>{e&&r&&(0,t.withRequest)(e,r);try{const r=C(e,a),t=await o(r);return x(t)}catch(r){return t.logger.error({err:r,event:(s=e,{resource:s.resource,httpMethod:s.httpMethod,queryStringParameters:s.queryStringParameters,pathParameters:s.pathParameters,body:s.body})},"apiGatewayWrapper - caught error"),x({statusCode:r.code||500,message:r.message||"Error"})}var s},R=async({event:e,context:r,schema:a,handler:o,singleHandler:s,mode:n="serial"})=>{e&&r&&(0,t.withRequest)(e,r);try{const r=C(e,a);await async function(e,r,t,a){if(!r&&!t)throw new Error("handler or singleHandler not defined");if(r)await r(e);else if(t){const r=e.Records;if("serial"===a)for(const e of r)await t(e);else"parallel"===a&&await Promise.all(r.map((e=>t(e))))}}(r,o,s,n)}catch(r){throw t.logger.error({err:r,event:(i=e,(i.Records||[]).map((e=>({messageId:e.messageId,body:e.body,messageAttributes:e.messageAttributes}))))},"sqsEventWrapper - caught error"),r}var i},I=async({event:e,context:r,schema:a,handler:o,singleHandler:s,mode:n="serial"})=>{e&&r&&(0,t.withRequest)(e,r);try{const r=C(e,a);return await(async(e,r,t,a)=>{if(!r&&!t)throw new Error("handler or singleHandler not defined");if(r)return await r(e);if(t){const r=e.Records;if("serial"===a){const e=[];for(const a of r){const r=await t(a);e.push(r)}return e}if("parallel"===a)return await Promise.all(r.map((e=>t(e))))}})(r,o,s,n)}catch(r){throw t.logger.error({err:r,event:(i=e,(i.Records||[]).map((e=>({messageId:e.messageId,body:e.body,messageAttributes:e.messageAttributes}))))},"sqsEventWrapper - caught error"),r}var i};class O extends Error{code;statusCode}class N extends v{code=409;statusCode=409;name="ConflictError"}class _ extends v{code=403;statusCode=403;name="ForbiddenError"}class T extends v{code=404;statusCode=404;name="NotFoundError"}const M=require("@middy/core");var P=e.n(M);const H=require("@middy/http-error-handler");var z=e.n(H);const G=require("@middy/http-response-serializer");var $=e.n(G);const W=require("@middy/sqs-json-body-parser");var U=e.n(W);const k="_X_AMZN_TRACE_ID",J="x-correlation-",B=`${J}id`,D=`${J}trace-id`,V={before:async({event:e,context:r})=>{const a={awsRequestId:r.awsRequestId},o=e.requestContext?.requestId;o&&(a.apiRequestId=o),e.headers&&Object.keys(e.headers).forEach((r=>{r.toLowerCase().startsWith(J)&&(a[r]=e.headers[r])})),process.env[k]&&(a[D]=process.env[k]),a[B]||(a[B]=r.awsRequestId),t.logger.setHapnContext(a)}},F=require("@middy/input-output-logger"),L=e.n(F)()({omitPaths:["event.multiValueHeaders","event.multiValueQueryStringParameters"],logger:e=>{const r=e?.event?"event":"response";t.logger.info(e.event??e.response,r)}}),Z=({schema:e,allowUnknown:r=!0})=>({before:a=>{const{error:o,value:s}=e.validate(a.event,{allowUnknown:r,errors:{label:"key",wrap:{label:!1}}});if(o)throw t.logger.error("Validation error",{error:o}),o.isJoi?new E(o.message):o;a.event=s}}),K={isWarmingUp:e=>"serverless-plugin-warmup"===e.source},Q=(e={})=>{const r={...K,...e};return{before:e=>{if(r.isWarmingUp(e.event))return"warmup"}}},X=[Q(),V,L],Y=[$()({serializers:[{regex:/^application\/xml$/,serializer:({body:e})=>`<message>${e}</message>`},{regex:/^application\/json$/,serializer:({body:e})=>JSON.stringify(e)},{regex:/^text\/plain$/,serializer:({body:e})=>e}],default:"application/json"}),{after:e=>{e.response=x(e.response)},onError:e=>{t.logger.error(e.error,"Request failed"),e.response=x({statusCode:e.error.code||500,message:e.error.message||"Error"})}}],ee=e=>P()(e).use([...X]),re=e=>P()(e).use([...X,...Y]),te=require("deepmerge");var ae=e.n(te);class oe{collectionName;constructor(e){this.collectionName=e??`${process.env.AWS_LAMBDA_FUNCTION_NAME}-${process.env.AWS_LAMBDA_FUNCTION_VERSION}`,global.CACHE_STORAGE||(global.CACHE_STORAGE={}),global.CACHE_STORAGE[this.collectionName]||(global.CACHE_STORAGE[this.collectionName]=new Map)}set(e,r,t){const a=1e3*t+Date.now();global.CACHE_STORAGE[this.collectionName].set(e,{value:r,expire:a})}get(e){if(!e)throw new Error("key is required!");const r=global.CACHE_STORAGE[this.collectionName].get(e);return r?!r.expire||r.expire>Date.now()?r.value:this.remove(e):null}remove(e){global.CACHE_STORAGE[this.collectionName].get(e)&&global.CACHE_STORAGE[this.collectionName].delete(e)}}const se=async(e,r,t,a)=>{let o=r.get(t);return o||(o=await e(),r.set(t,o,a)),o},ne=(e,r,t=new Error("Promise timed out"))=>{const a=new Promise(((e,a)=>{setTimeout((()=>{a(t)}),r)}));return Promise.race([e,a])},ie=()=>process.env.IS_OFFLINE&&"dev"===process.env.STAGE?"local":process.env.STAGE??"production"??"dev",le=()=>"local"===ie(),de=()=>"test"===ie(),ce=()=>"dev"===ie(),ue=()=>"prod"===ie(),pe=e=>{const r=e.base,t=e[ie()]??{};return ae()(r,t)};return r})()));
|