@spytecgps/lambda-utils 2.1.0-rc4 → 2.1.0-rc5

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/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:()=>A,BaseError:()=>M,ConflictError:()=>T,ForbiddenError:()=>_,HttpError:()=>h,LambdaCache:()=>K,NotFoundError:()=>z,SpytecJoi:()=>v,UnauthorizedError:()=>w,apiGatewayEventWrapper:()=>O,apiGatewayMiddlewares:()=>F,apiGatewayMiddy:()=>Z,baseMiddlewares:()=>V,buildProxyResult:()=>R,buildResponseBody:()=>q,defaultApiSchema:()=>x,getAuthorizerValidator:()=>f,getRequestContextValidator:()=>C,httpErrorHandler:()=>$(),httpResponseSerializer:()=>W(),iccidSchema:()=>b,imeiSchema:()=>y,json:()=>g,logger:()=>a,middy:()=>L,promiseWithCache:()=>Q,promiseWithTimeout:()=>X,requestContextValidator:()=>E,resetLogger:()=>o,sqsEventWrapper:()=>N,sqsEventWrapperWithReturn:()=>I,urlEncoded:()=>m,validateEvent:()=>j,validatorMiddleware:()=>D,withRequest:()=>t.withRequest});const t=require("@spytecgps/sdk-logger");let a=(0,t.createLogger)();const o=e=>(a=(0,t.createLogger)({base:e}),a),s=require("dayjs");var n=e.n(s);const i=require("dayjs/plugin/timezone");var l=e.n(i);const c=require("dayjs/plugin/utc");var d=e.n(c);const u=require("joi"),p=require("qs");n().extend(d()),n().extend(l());const g=u.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")}}))),m=u.extend((e=>({type:"object",base:e.object(),coerce:e=>({value:p.parse(e)})}))),y=u.string().regex(/^\d{15,16}$/).message("Invalid IMEI"),b=u.string().regex(/^[0-9A-Za-z]{18,22}$/).message("Invalid ICCID"),v=u.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:p.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=n().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 h extends Error{}class w extends h{code=401;statusCode=401;name="UnauthorizedError"}const f=({scope:e,type:r}={})=>u.object({clientId:u.number(),resources:g.object({}),scope:e?u.string().pattern(new RegExp(`${e}`)).error((()=>new w(`missing scope ${e}`))):u.optional(),type:r?u.any().valid(r).error((()=>new w(`missing user type ${r}`))):u.optional(),enterprise:u.boolean().default(!1),maintenanceModule:u.boolean().default(!1),billingMethod:u.string().optional(),customerSegment:u.string().optional(),securityGroupTagId:u.number().optional().allow(null)}),E=u.object({authorizer:f()}),C=(e={})=>u.object({authorizer:f(e)});class A extends h{code=400;statusCode=400;name="BadRequestError"}const j=(e,r,t)=>{if(!r)return a.warn("skipping validation"),e;const{error:o,value:s}=r.validate(e,{allowUnknown:t?.allowUnknown||!0,errors:{label:"key",wrap:{label:!1}}});if(o)throw a.error({error:o},"Validation error"),o.isJoi?new A(o.message):o;return s},x=v.object({requestContext:C()}),S={"Content-Type":"application/json","Access-Control-Allow-Origin":"*","Access-Control-Allow-Credentials":!0},q=(e,r,t)=>({success:e<400,message:r,result:t||void 0}),R=({statusCode:e=200,message:r="ok",data:t,headers:a={},rawResult:o=!1,stringifyBody:s=!0})=>{const n=o?t:q(e,r,t),i=s?n&&JSON.stringify(n):t;return{headers:{...S,...a},statusCode:e,body:i}},O=async({event:e,context:r,schema:o,handler:s})=>{e&&r&&(0,t.withRequest)(e,r);try{const r=j(e,o),t=await s(r);return R(t)}catch(r){return a.error({err:r,event:(n=e,{resource:n.resource,httpMethod:n.httpMethod,queryStringParameters:n.queryStringParameters,pathParameters:n.pathParameters,body:n.body})},"apiGatewayWrapper - caught error"),R({statusCode:r.code||500,message:r.message||"Error"})}var n},N=async({event:e,context:r,schema:o,handler:s,singleHandler:n,mode:i="serial"})=>{e&&r&&(0,t.withRequest)(e,r);try{const r=j(e,o);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,s,n,i)}catch(r){throw a.error({err:r,event:(l=e,(l.Records||[]).map((e=>({messageId:e.messageId,body:e.body,messageAttributes:e.messageAttributes}))))},"sqsEventWrapper - caught error"),r}var l},I=async({event:e,context:r,schema:o,handler:s,singleHandler:n,mode:i="serial"})=>{e&&r&&(0,t.withRequest)(e,r);try{const r=j(e,o);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,s,n,i)}catch(r){throw a.error({err:r,event:(l=e,(l.Records||[]).map((e=>({messageId:e.messageId,body:e.body,messageAttributes:e.messageAttributes}))))},"sqsEventWrapper - caught error"),r}var l};class M extends Error{code;statusCode}class T extends h{code=409;statusCode=409;name="ConflictError"}class _ extends h{code=403;statusCode=403;name="ForbiddenError"}class z extends h{code=404;statusCode=404;name="NotFoundError"}const P=require("@middy/core");var H=e.n(P);const G=require("@middy/http-error-handler");var $=e.n(G);const U=require("@middy/http-response-serializer");var W=e.n(U);const k={before:async({event:e,context:r})=>{a.info("hello1"),(0,t.withRequest)(e,r),a.info("hello2")}},J=require("@middy/input-output-logger"),B=e.n(J)()({logger:e=>{const r=e?.event?"event":"response";a.info(r,e)}}),D=({schema:e,allowUnknown:r=!0})=>({before:t=>{const{error:o,value:s}=e.validate(t.event,{allowUnknown:r,errors:{label:"key",wrap:{label:!1}}});if(o)throw a.error("Validation error",{error:o}),o.isJoi?new A(o.message):o;t.event=s}}),V=[k,B],F=[W()({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"}),$()({logger:e=>a.error(e)}),{after:e=>{e.response=R(e.response)}}],L=e=>H()(e).use([...V]),Z=e=>H()(e).use([...V,...F]);class K{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 Q=async(e,r,t,a)=>{let o=r.get(t);return o||(o=await e(),r.set(t,o,a)),o},X=(e,r,t=new Error("Promise timed out"))=>{const a=new Promise(((e,a)=>{setTimeout((()=>{a(t)}),r)}));return Promise.race([e,a])};return r})()));
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:()=>N,ConflictError:()=>I,ForbiddenError:()=>M,HttpError:()=>b,LambdaCache:()=>L,NotFoundError:()=>T,SpytecJoi:()=>y,UnauthorizedError:()=>v,apiGatewayEventWrapper:()=>q,apiGatewayMiddlewares:()=>D,apiGatewayMiddy:()=>F,baseMiddlewares:()=>B,buildProxyResult:()=>S,buildResponseBody:()=>x,defaultApiSchema:()=>A,getAuthorizerValidator:()=>h,getRequestContextValidator:()=>f,httpErrorHandler:()=>H(),httpResponseSerializer:()=>$(),iccidSchema:()=>m,imeiSchema:()=>g,json:()=>u,logger:()=>t.logger,middy:()=>V,promiseWithCache:()=>Z,promiseWithTimeout:()=>K,requestContextValidator:()=>w,sqsEventWrapper:()=>R,sqsEventWrapperWithReturn:()=>O,urlEncoded:()=>p,validateEvent:()=>C,validatorMiddleware:()=>J,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 c=require("joi"),d=require("qs");o().extend(l()),o().extend(n());const u=c.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=c.extend((e=>({type:"object",base:e.object(),coerce:e=>({value:d.parse(e)})}))),g=c.string().regex(/^\d{15,16}$/).message("Invalid IMEI"),m=c.string().regex(/^[0-9A-Za-z]{18,22}$/).message("Invalid ICCID"),y=c.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:d.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 b extends Error{}class v extends b{code=401;statusCode=401;name="UnauthorizedError"}const h=({scope:e,type:r}={})=>c.object({clientId:c.number(),resources:u.object({}),scope:e?c.string().pattern(new RegExp(`${e}`)).error((()=>new v(`missing scope ${e}`))):c.optional(),type:r?c.any().valid(r).error((()=>new v(`missing user type ${r}`))):c.optional(),enterprise:c.boolean().default(!1),maintenanceModule:c.boolean().default(!1),billingMethod:c.string().optional(),customerSegment:c.string().optional(),securityGroupTagId:c.number().optional().allow(null)}),w=c.object({authorizer:h()}),f=(e={})=>c.object({authorizer:h(e)});class E extends b{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()}),j={"Content-Type":"application/json","Access-Control-Allow-Origin":"*","Access-Control-Allow-Credentials":!0},x=(e,r,t)=>({success:e<400,message:r,result:t||void 0}),S=({statusCode:e=200,message:r="ok",data:t,headers:a={},rawResult:o=!1,stringifyBody:s=!0})=>{const n=o?t:x(e,r,t),i=s?n&&JSON.stringify(n):t;return{headers:{...j,...a},statusCode:e,body:i}},q=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 S(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"),S({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},O=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 N extends Error{code;statusCode}class I extends b{code=409;statusCode=409;name="ConflictError"}class M extends b{code=403;statusCode=403;name="ForbiddenError"}class T extends b{code=404;statusCode=404;name="NotFoundError"}const _=require("@middy/core");var z=e.n(_);const P=require("@middy/http-error-handler");var H=e.n(P);const G=require("@middy/http-response-serializer");var $=e.n(G);const U={before:async({event:e,context:r})=>{t.logger.info("hello1"),(0,t.withRequest)(e,r),t.logger.info("hello2")}},W=require("@middy/input-output-logger"),k=e.n(W)()({logger:e=>{const r=e?.event?"event":"response";t.logger.info(r,e)}}),J=({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}}),B=[U,k],D=[$()({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"}),H()({logger:e=>t.logger.error(e)}),{after:e=>{e.response=S(e.response)}}],V=e=>z()(e).use([...B]),F=e=>z()(e).use([...B,...D]);class L{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 Z=async(e,r,t,a)=>{let o=r.get(t);return o||(o=await e(),r.set(t,o,a)),o},K=(e,r,t=new Error("Promise timed out"))=>{const a=new Promise(((e,a)=>{setTimeout((()=>{a(t)}),r)}));return Promise.race([e,a])};return r})()));
@@ -1,4 +1,2 @@
1
- import { HapnLogger, withRequest } from '@spytecgps/sdk-logger';
2
- declare let logger: HapnLogger;
3
- declare const resetLogger: (metadata: any) => HapnLogger;
4
- export { logger, withRequest, resetLogger };
1
+ import { logger, withRequest } from '@spytecgps/sdk-logger';
2
+ export { logger, withRequest };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spytecgps/lambda-utils",
3
- "version": "2.1.0-rc4",
3
+ "version": "2.1.0-rc5",
4
4
  "description": "Lambda Utils",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",