@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.
@@ -1,12 +1,12 @@
1
- export type Env = 'base' | 'local' | 'dev' | 'test' | 'production';
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:()=>K,buildProxyResult:()=>x,buildResponseBody:()=>j,defaultApiSchema:()=>A,getAuthorizerValidator:()=>h,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:()=>X,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}}),Q={isWarmingUp:e=>"serverless-plugin-warmup"===e.source},X=(e={})=>{const r={...Q,...e};return{before:e=>{if(r.isWarmingUp(e.event))return"warmup"}}},K=[X(),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([...K]),re=e=>P()(e).use([...K,...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=()=>"production"===ie(),pe=e=>{const r=e.base,t=e[ie()]??{};return ae()(r,t)};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:()=>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})()));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spytecgps/lambda-utils",
3
- "version": "2.3.0",
3
+ "version": "2.3.2",
4
4
  "description": "Lambda Utils",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",