@stackone/transport 1.10.0 → 1.11.1
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.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -509,15 +509,15 @@ declare const buildHttpClientInstance: <TError extends Error = Error>(redisClien
|
|
|
509
509
|
declare class HttpClientManager {
|
|
510
510
|
private static httpClientInstance;
|
|
511
511
|
static getInstance<TError extends Error = Error>({
|
|
512
|
-
getHttpClient,
|
|
513
512
|
redisClientConfig,
|
|
514
513
|
logger,
|
|
515
|
-
errorMappingFn
|
|
514
|
+
errorMappingFn,
|
|
515
|
+
getHttpClient
|
|
516
516
|
}: {
|
|
517
|
-
getHttpClient: typeof buildHttpClientInstance;
|
|
518
517
|
redisClientConfig: RedisClientConfig;
|
|
519
518
|
logger?: ILogger;
|
|
520
519
|
errorMappingFn?: ErrorMappingFn<TError>;
|
|
520
|
+
getHttpClient?: typeof buildHttpClientInstance;
|
|
521
521
|
}): Promise<IHttpClient>;
|
|
522
522
|
static resetInstance(): void;
|
|
523
523
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -509,15 +509,15 @@ declare const buildHttpClientInstance: <TError extends Error = Error>(redisClien
|
|
|
509
509
|
declare class HttpClientManager {
|
|
510
510
|
private static httpClientInstance;
|
|
511
511
|
static getInstance<TError extends Error = Error>({
|
|
512
|
-
getHttpClient,
|
|
513
512
|
redisClientConfig,
|
|
514
513
|
logger,
|
|
515
|
-
errorMappingFn
|
|
514
|
+
errorMappingFn,
|
|
515
|
+
getHttpClient
|
|
516
516
|
}: {
|
|
517
|
-
getHttpClient: typeof buildHttpClientInstance;
|
|
518
517
|
redisClientConfig: RedisClientConfig;
|
|
519
518
|
logger?: ILogger;
|
|
520
519
|
errorMappingFn?: ErrorMappingFn<TError>;
|
|
520
|
+
getHttpClient?: typeof buildHttpClientInstance;
|
|
521
521
|
}): Promise<IHttpClient>;
|
|
522
522
|
static resetInstance(): void;
|
|
523
523
|
}
|
package/dist/index.js
CHANGED
|
@@ -290,4 +290,4 @@ var $c=9e15,el=1e9,tl=`0123456789abcdef`,nl=`2.302585092994045684017991454684364
|
|
|
290
290
|
${r}
|
|
291
291
|
${e}
|
|
292
292
|
return o
|
|
293
|
-
`}}),af=o((exports,t)=>{t.exports=n;function n(e){let{secret:t,censor:n,compileRestore:r,serialize:i,groupRedact:a,nestedRedact:o,wildcards:s,wcLen:c}=e,l=[{secret:t,censor:n,compileRestore:r}];return i!==!1&&l.push({serialize:i}),c>0&&l.push({groupRedact:a,nestedRedact:o,wildcards:s,wcLen:c}),Object.assign(...l)}}),sf=o((exports,t)=>{let n=Qd(),r=ef(),i=tf(),a=rf(),{groupRedact:o,nestedRedact:s}=nf(),c=af(),l=$d(),u=n(),d=e=>e;d.restore=d;let f=`[REDACTED]`;p.rx=l,p.validator=n,t.exports=p;function p(e={}){let t=Array.from(new Set(e.paths||[])),n=`serialize`in e&&(e.serialize===!1||typeof e.serialize==`function`)?e.serialize:JSON.stringify,l=e.remove;if(l===!0&&n!==JSON.stringify)throw Error(`fast-redact – remove option may only be set when serializer is JSON.stringify`);let p=l===!0?void 0:`censor`in e?e.censor:f,m=typeof p==`function`,h=m&&p.length>1;if(t.length===0)return n||d;u({paths:t,serialize:n,censor:p});let{wildcards:g,wcLen:_,secret:v}=r({paths:t,censor:p}),y=a(),b=`strict`in e?e.strict:!0;return i({secret:v,wcLen:_,serialize:n,strict:b,isCensorFct:m,censorFctTakesPath:h},c({secret:v,censor:p,compileRestore:y,serialize:n,groupRedact:o,nestedRedact:s,wildcards:g,wcLen:_}))}}),cf=c(sf(),1);const lf=[`client_secret`,`access_token`,`refresh_token`,`api_key`,`password`,`job_board_token`,`private_key`,`certificate`,`service_user_token`,`key_id`,`secret_key`,`provhash`,`admin_key`,`session_key`,`id_token`,`authorization`,`bh_rest_token`,`external_trigger_token`,`tempauth`],uf=[`req.headers.authorization`,`req.headers.cookie`,`req.headers.cookies`,`req.headers["set-cookie"]`,`req.headers["set-cookies"]`,`req.headers.httpsAgent.options.cert`,`req.headers.httpsAgent.options.key`,`req.headers["x-stackone-external-trigger-token"]`,`error.config.headers.authorization`,`error.config.data`,`error.config.headers.cookie`,`error.config.headers.cookies`,`error.config.headers["set-cookie"]`,`error.config.headers["set-cookies"]`,`error.config.httpsAgent.options.cert`,`error.config.httpsAgent.options.key`,`err.config.headers.authorization`,`err.config.data`,`err.config.headers.cookie`,`err.config.headers.cookies`,`err.config.headers["set-cookie"]`,`err.config.headers["set-cookies"]`,`err.config.httpsAgent.options.cert`,`err.config.httpsAgent.options.key`,`res.headers.authorization`,`res.headers.cookie`,`res.headers.cookies`,`res.headers["set-cookie"]`,`res.headers["set-cookies"]`,`res.headers.httpsAgent.options.cert`,`res.headers.httpsAgent.options.key`,`context.credentials`,...lf],df=`**redacted**`;let ff=function(e){return e.FULL=`FULL`,e.PARTIAL=`PARTIAL`,e}({});const pf=e=>df,mf=e=>typeof e==`string`?e.startsWith(df)?e:e.length<10?df:`${df}${e.slice(-5)}`:df,hf=(e=[],t=!0)=>{if(!t)return[];let n=e.map(e=>_f(e));return[...e,...n]},gf=(e=[],t=!0)=>{if(!t)return[];let n=new Set;return e.forEach(e=>{if(n.add(e),e.includes(`_`)){let t=e.replace(/_([a-z])/g,(e,t)=>t.toUpperCase());n.add(t)}else{let t=e.replace(/([A-Z])/g,`_$1`).toLowerCase();n.add(t)}}),Array.from(n)},_f=e=>{let t=yf(e);return t||vf(e)},vf=e=>{let t=e.split(`.`);if(t.length<2)return bf(e);let n=t.pop()??``,r=bf(n);return[...t,r].join(`.`)},yf=e=>{let t=e.lastIndexOf(`[`),n=e.indexOf(`]`,t);if(t===-1||n===-1)return;let r=e.slice(t,n+1),i=r.replace(/(["'])([^"']*)(["'])/g,(e,t,n)=>n?t+bf(n)+t:t+t);return`${e.slice(0,t)}${i}${e.slice(n+1)}`},bf=e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`,xf=hf(uf),Sf=gf(lf),Cf={[ff.FULL]:pf,[ff.PARTIAL]:mf},wf={[ff.FULL]:(0,cf.default)({paths:xf,serialize:!1,censor:Cf[ff.FULL]}),[ff.PARTIAL]:(0,cf.default)({paths:xf,serialize:!1,censor:Cf[ff.PARTIAL]})},Tf=(e,t=ff.FULL)=>(0,l.isMissing)(e)||typeof e!=`object`||!e?e:wf[t]((0,l.deepCopy)(e)),Ef=(e,t=ff.FULL,n)=>{if(!(0,l.isMissing)(e))try{let n=new URL(e),r=[...n.searchParams].reduce((e,[n,r])=>{let i=n.toLowerCase();return e.set(n,Sf.some(e=>e.toLowerCase()===i)?Cf[t](r):r),e},new URLSearchParams);return`${n.origin}${n.pathname}${r.toString()?`?`+r:``}${n.hash}`}catch(t){return n?.warning({message:`Invalid URL provided, unable to redact`,context:{value:e,error:t},category:`redactUrl`}),e}},Df=(e,t=ff.FULL,n)=>{if(!(0,l.isMissing)(e))try{let[n,r]=e.split(`?`);if(!r)return e;let i=[...new URLSearchParams(r)].reduce((e,[n,r])=>{let i=n.toLowerCase();return e.set(n,Sf.some(e=>e.toLowerCase()===i)?Cf[t](r):r),e},new URLSearchParams);return`${n}?${i}`}catch(t){return n?.warning({message:`Invalid path provided, unable to redact`,context:{value:e,error:t},category:`redactPath`}),e}},Of=(e,t=ff.FULL)=>{if(!(0,l.isMissing)(e))return typeof e==`string`?Cf[t](e):Object.entries(e).reduce((e,[n,r])=>(e[n]=Sf.some(e=>e.toLowerCase()===n.toLowerCase())?Cf[t](r):r,e),{})};var kf=class e{#transportFactory;#getRedisClient;#logger;#redisClientConfig;#errorMappingFn;#redisClient;constructor({transportFactory:e=Jd,getRedisClient:t=ce,logger:n,redisClientConfig:r,errorMappingFn:i}={}){this.#transportFactory=e,this.#getRedisClient=t,this.#logger=n,this.#redisClientConfig=r,this.#errorMappingFn=i}#generateCacheKey({url:e,payload:t,method:n,context:r}){let i=20;if(!r?.accountSecureId||r.accountSecureId.length<i||!e||!n)return null;let a=t?(0,l.getContentHash)(t):``;return`${r.accountSecureId}-${n.toUpperCase()}${a}-${e}`}async#getCachedResponse({url:t,payload:n,method:r,cacheTTL:i,context:a}){if(!this.#redisClient||!i||i<=0)return null;let o=this.#generateCacheKey({url:t,payload:n,method:r,context:a});if(!o)return null;let s=await this.#redisClient.getData(o);return s?(this.#logger?.debug({category:e.name,message:`Cache hit for key [${o}].`}),s):(this.#logger?.debug({category:e.name,message:`Cache miss for key [${o}].`}),null)}async#cacheResponse({url:t,payload:n,method:r,cacheTTL:i,context:a,response:o}){if(!this.#redisClient||!i||i<=0)return!1;let s=this.#generateCacheKey({url:t,payload:n,method:r,context:a});return s?(this.#logger?.debug({category:e.name,message:`Caching result for key [${s}].`}),this.#redisClient.setData({key:s,value:o,cacheTTL:i*60})):!1}async request({headers:t={},url:n,method:r=`get`,maxRedirects:i=0,responseType:a,cacheTTL:o,context:s,traceId:c,payload:u,httpsAgent:d,httpAgent:f}){try{(0,l.notMissing)(this.#redisClientConfig)&&(0,l.isMissing)(this.#redisClient)&&(this.#redisClient=await this.#getRedisClient(this.#redisClientConfig,this.#logger));let e=this.#normalizeHeaders(t),p=await this.#getCachedResponse({url:n,payload:u,method:r,cacheTTL:o,context:s});if(p)return{...p,responseTime:new Date};let m=ho.getInstance(),h=(0,l.notMissing)(c)?await m.get(c):null,g=h?.signal,_=await this.#transportFactory({redisClientConfig:this.#redisClientConfig,logger:this.#logger,context:s}),v=await _.request({headers:e,url:n,method:r,maxRedirects:i,responseType:a,data:this.#getSafePayload(u,e),httpsAgent:d,httpAgent:f,signal:g}),y={data:v.data,status:v.status,body:u,method:r,headers:this.#extractAxiosHeaders(v.headers),requestUrl:n,responseType:v?.config?.responseType,responseTime:new Date};return await this.#cacheResponse({url:n,payload:u,method:r,cacheTTL:o,context:s,response:y}),y}catch(t){let i=t;i.url=Ef(n),this.#logger?.warning({category:e.name,message:`Request error [${r?.toUpperCase()} ${i.url}]: ${i.message}.`,error:i});let a=this.#mapErrorToHttpException(i);throw(0,l.notMissing)(a)?a:t}}async get({headers:e,url:t,maxRedirects:n,cacheTTL:r,context:i,traceId:a}){return this.request({url:t,method:`get`,headers:e,maxRedirects:n,cacheTTL:r,context:i,traceId:a})}async post({headers:e,url:t,maxRedirects:n,cacheTTL:r,context:i,traceId:a,payload:o}){return this.request({url:t,method:`post`,headers:e,maxRedirects:n,cacheTTL:r,context:i,traceId:a,payload:o})}#normalizeHeaders(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{t[n.toLowerCase()]=e[n]||``}),t}#extractAxiosHeaders(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{t[n]=e[n]||``}),t}#isFormUrlEncoded(e){return e[`content-type`]===`application/x-www-form-urlencoded`}#getSafePayload(e,t){if(e)return this.#isFormUrlEncoded(t)?g.default.stringify(e):e}#mapErrorToHttpException(e){if((0,d.isAxiosError)(e)&&this.#errorMappingFn)return this.#errorMappingFn(e)}};const Af=(e,t,n)=>new kf({redisClientConfig:e,logger:t,errorMappingFn:n});var jf=class{static httpClientInstance=null;static async getInstance({getHttpClient:e=Af,redisClientConfig:t,logger:n,errorMappingFn:r}){return this.httpClientInstance??=e(t,n,r),this.httpClientInstance}static resetInstance(){this.httpClientInstance=null}};const Mf=[`get`,`post`,`put`,`delete`,`patch`],Nf=e=>e.reduce((e,t)=>(Array.isArray(e[t.in][t.name])?e[t.in][t.name]=e[t.in][t.name].concat(t.value):typeof e[t.in][t.name]==`object`&&typeof t.value==`object`?e[t.in][t.name]={...e[t.in][t.name],...t.value}:e[t.in][t.name]=t.in===`body`?t.value:String(t.value),e),{query:{},body:{},headers:{}}),Pf=[`query`,`body`,`headers`],Ff=(e,t)=>{if((0,l.isMissing)(t)||t?.length===0||(0,l.isMissing)(e))return{data:e.data,status:e.status,headers:e.headers,requestUrl:e.requestUrl,responseType:e.responseType,responseTime:e.responseTime,message:e.message};let n=t?.filter(t=>t.receivedStatus===e.status);if(n?.length)for(let t of n){let n=t.condition,r=(0,_.safeEvaluate)(n,e)===!0;if((0,l.isMissing)(n)||r)return{data:e.data,headers:e.headers,requestUrl:e.requestUrl,responseType:e.responseType,responseTime:e.responseTime,status:t.targetStatus,message:t?.message??uo[t.targetStatus]??`Unknown error`}}return e},If=e=>(0,l.notMissing)(e)&&e>=200&&e<=299,Lf=e=>(0,l.notMissing)(e)&&e>=400&&e<=599,Rf=e=>(0,l.notMissing)(e)&&e>=100&&e<=199;var zf=class{async performRequest({httpClient:e,url:t,method:n,headers:r,body:i,customErrorConfigs:a}){let o;try{o=await e?.request({method:n,url:t,headers:r,maxRedirects:0,payload:i})}catch(e){if((0,l.isMissing)(e?.response))throw e;o=e.response}let s=Ff(o,a);if(Lf(s?.status))throw new fo(s,s.message);return s}},Bf=class{static build(e=`rest`){if(e===`rest`)return new zf;throw Error(`Unknown request client type: ${e}`)}};exports.CUSTOM_ERROR_CONFIG_SCHEMA=lo,exports.ConcurrencyManager=Ge,exports.EventClient=se,exports.HttpClient=kf,exports.HttpClientManager=jf,exports.HttpErrorMessages=uo,exports.HttpMethods=Mf,exports.HttpResponseError=fo,exports.HttpTransportFactory=po,exports.InstanceManager=ho,exports.LockManager=x,exports.MemoryStore=O,exports.QueueManager=Te,exports.RateLimitManager=ko,exports.RedisClient=le,exports.RequestClientFactory=Bf,exports.RequestParameterLocations=Pf,exports.ScriptManager=pe,exports.SubscriptionManager=me,exports.buildHttpClientInstance=Af,exports.createAuthorizationHeaders=v,exports.getTransportInstance=Jd,exports.isFailedStatusCode=Lf,exports.isInfoStatusCode=Rf,exports.isSuccessStatusCode=If,exports.parseRequestParameters=Nf;
|
|
293
|
+
`}}),af=o((exports,t)=>{t.exports=n;function n(e){let{secret:t,censor:n,compileRestore:r,serialize:i,groupRedact:a,nestedRedact:o,wildcards:s,wcLen:c}=e,l=[{secret:t,censor:n,compileRestore:r}];return i!==!1&&l.push({serialize:i}),c>0&&l.push({groupRedact:a,nestedRedact:o,wildcards:s,wcLen:c}),Object.assign(...l)}}),sf=o((exports,t)=>{let n=Qd(),r=ef(),i=tf(),a=rf(),{groupRedact:o,nestedRedact:s}=nf(),c=af(),l=$d(),u=n(),d=e=>e;d.restore=d;let f=`[REDACTED]`;p.rx=l,p.validator=n,t.exports=p;function p(e={}){let t=Array.from(new Set(e.paths||[])),n=`serialize`in e&&(e.serialize===!1||typeof e.serialize==`function`)?e.serialize:JSON.stringify,l=e.remove;if(l===!0&&n!==JSON.stringify)throw Error(`fast-redact – remove option may only be set when serializer is JSON.stringify`);let p=l===!0?void 0:`censor`in e?e.censor:f,m=typeof p==`function`,h=m&&p.length>1;if(t.length===0)return n||d;u({paths:t,serialize:n,censor:p});let{wildcards:g,wcLen:_,secret:v}=r({paths:t,censor:p}),y=a(),b=`strict`in e?e.strict:!0;return i({secret:v,wcLen:_,serialize:n,strict:b,isCensorFct:m,censorFctTakesPath:h},c({secret:v,censor:p,compileRestore:y,serialize:n,groupRedact:o,nestedRedact:s,wildcards:g,wcLen:_}))}}),cf=c(sf(),1);const lf=[`client_secret`,`access_token`,`refresh_token`,`api_key`,`password`,`job_board_token`,`private_key`,`certificate`,`service_user_token`,`key_id`,`secret_key`,`provhash`,`admin_key`,`session_key`,`id_token`,`authorization`,`bh_rest_token`,`external_trigger_token`,`tempauth`],uf=[`req.headers.authorization`,`req.headers.cookie`,`req.headers.cookies`,`req.headers["set-cookie"]`,`req.headers["set-cookies"]`,`req.headers.httpsAgent.options.cert`,`req.headers.httpsAgent.options.key`,`req.headers["x-stackone-external-trigger-token"]`,`error.config.headers.authorization`,`error.config.data`,`error.config.headers.cookie`,`error.config.headers.cookies`,`error.config.headers["set-cookie"]`,`error.config.headers["set-cookies"]`,`error.config.httpsAgent.options.cert`,`error.config.httpsAgent.options.key`,`err.config.headers.authorization`,`err.config.data`,`err.config.headers.cookie`,`err.config.headers.cookies`,`err.config.headers["set-cookie"]`,`err.config.headers["set-cookies"]`,`err.config.httpsAgent.options.cert`,`err.config.httpsAgent.options.key`,`res.headers.authorization`,`res.headers.cookie`,`res.headers.cookies`,`res.headers["set-cookie"]`,`res.headers["set-cookies"]`,`res.headers.httpsAgent.options.cert`,`res.headers.httpsAgent.options.key`,`context.credentials`,...lf],df=`**redacted**`;let ff=function(e){return e.FULL=`FULL`,e.PARTIAL=`PARTIAL`,e}({});const pf=e=>df,mf=e=>typeof e==`string`?e.startsWith(df)?e:e.length<10?df:`${df}${e.slice(-5)}`:df,hf=(e=[],t=!0)=>{if(!t)return[];let n=e.map(e=>_f(e));return[...e,...n]},gf=(e=[],t=!0)=>{if(!t)return[];let n=new Set;return e.forEach(e=>{if(n.add(e),e.includes(`_`)){let t=e.replace(/_([a-z])/g,(e,t)=>t.toUpperCase());n.add(t)}else{let t=e.replace(/([A-Z])/g,`_$1`).toLowerCase();n.add(t)}}),Array.from(n)},_f=e=>{let t=yf(e);return t||vf(e)},vf=e=>{let t=e.split(`.`);if(t.length<2)return bf(e);let n=t.pop()??``,r=bf(n);return[...t,r].join(`.`)},yf=e=>{let t=e.lastIndexOf(`[`),n=e.indexOf(`]`,t);if(t===-1||n===-1)return;let r=e.slice(t,n+1),i=r.replace(/(["'])([^"']*)(["'])/g,(e,t,n)=>n?t+bf(n)+t:t+t);return`${e.slice(0,t)}${i}${e.slice(n+1)}`},bf=e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`,xf=hf(uf),Sf=gf(lf),Cf={[ff.FULL]:pf,[ff.PARTIAL]:mf},wf={[ff.FULL]:(0,cf.default)({paths:xf,serialize:!1,censor:Cf[ff.FULL]}),[ff.PARTIAL]:(0,cf.default)({paths:xf,serialize:!1,censor:Cf[ff.PARTIAL]})},Tf=(e,t=ff.FULL)=>(0,l.isMissing)(e)||typeof e!=`object`||!e?e:wf[t]((0,l.deepCopy)(e)),Ef=(e,t=ff.FULL,n)=>{if(!(0,l.isMissing)(e))try{let n=new URL(e),r=[...n.searchParams].reduce((e,[n,r])=>{let i=n.toLowerCase();return e.set(n,Sf.some(e=>e.toLowerCase()===i)?Cf[t](r):r),e},new URLSearchParams);return`${n.origin}${n.pathname}${r.toString()?`?`+r:``}${n.hash}`}catch(t){return n?.warning({message:`Invalid URL provided, unable to redact`,context:{value:e,error:t},category:`redactUrl`}),e}},Df=(e,t=ff.FULL,n)=>{if(!(0,l.isMissing)(e))try{let[n,r]=e.split(`?`);if(!r)return e;let i=[...new URLSearchParams(r)].reduce((e,[n,r])=>{let i=n.toLowerCase();return e.set(n,Sf.some(e=>e.toLowerCase()===i)?Cf[t](r):r),e},new URLSearchParams);return`${n}?${i}`}catch(t){return n?.warning({message:`Invalid path provided, unable to redact`,context:{value:e,error:t},category:`redactPath`}),e}},Of=(e,t=ff.FULL)=>{if(!(0,l.isMissing)(e))return typeof e==`string`?Cf[t](e):Object.entries(e).reduce((e,[n,r])=>(e[n]=Sf.some(e=>e.toLowerCase()===n.toLowerCase())?Cf[t](r):r,e),{})};var kf=class e{#transportFactory;#getRedisClient;#logger;#redisClientConfig;#errorMappingFn;#redisClient;constructor({transportFactory:e=Jd,getRedisClient:t=ce,logger:n,redisClientConfig:r,errorMappingFn:i}={}){this.#transportFactory=e,this.#getRedisClient=t,this.#logger=n,this.#redisClientConfig=r,this.#errorMappingFn=i}#generateCacheKey({url:e,payload:t,method:n,context:r}){let i=20;if(!r?.accountSecureId||r.accountSecureId.length<i||!e||!n)return null;let a=t?(0,l.getContentHash)(t):``;return`${r.accountSecureId}-${n.toUpperCase()}${a}-${e}`}async#getCachedResponse({url:t,payload:n,method:r,cacheTTL:i,context:a}){if(!this.#redisClient||!i||i<=0)return null;let o=this.#generateCacheKey({url:t,payload:n,method:r,context:a});if(!o)return null;let s=await this.#redisClient.getData(o);return s?(this.#logger?.debug({category:e.name,message:`Cache hit for key [${o}].`}),s):(this.#logger?.debug({category:e.name,message:`Cache miss for key [${o}].`}),null)}async#cacheResponse({url:t,payload:n,method:r,cacheTTL:i,context:a,response:o}){if(!this.#redisClient||!i||i<=0)return!1;let s=this.#generateCacheKey({url:t,payload:n,method:r,context:a});return s?(this.#logger?.debug({category:e.name,message:`Caching result for key [${s}].`}),this.#redisClient.setData({key:s,value:o,cacheTTL:i*60})):!1}async request({headers:t={},url:n,method:r=`get`,maxRedirects:i=0,responseType:a,cacheTTL:o,context:s,traceId:c,payload:u,httpsAgent:d,httpAgent:f}){try{(0,l.notMissing)(this.#redisClientConfig)&&(0,l.isMissing)(this.#redisClient)&&(this.#redisClient=await this.#getRedisClient(this.#redisClientConfig,this.#logger));let e=this.#normalizeHeaders(t),p=this.#getSafePayload(u,t),m=await this.#getCachedResponse({url:n,payload:p,method:r,cacheTTL:o,context:s});if(m)return{...m,responseTime:new Date};let h=ho.getInstance(),g=(0,l.notMissing)(c)?await h.get(c):null,_=g?.signal,v=await this.#transportFactory({redisClientConfig:this.#redisClientConfig,logger:this.#logger,context:s}),y=await v.request({headers:e,url:n,method:r,maxRedirects:i,responseType:a,data:p,httpsAgent:d,httpAgent:f,signal:_}),b={data:y.data,status:y.status,body:p,method:r,headers:this.#extractAxiosHeaders(y.headers),requestUrl:n,responseType:y?.config?.responseType,responseTime:new Date};return await this.#cacheResponse({url:n,payload:p,method:r,cacheTTL:o,context:s,response:b}),b}catch(t){let i=t;i.url=Ef(n),this.#logger?.warning({category:e.name,message:`Request error [${r?.toUpperCase()} ${i.url}]: ${i.message}.`,error:i});let a=this.#mapErrorToHttpException(i);throw(0,l.notMissing)(a)?a:t}}async get({headers:e,url:t,maxRedirects:n,cacheTTL:r,context:i,traceId:a}){return this.request({url:t,method:`get`,headers:e,maxRedirects:n,cacheTTL:r,context:i,traceId:a})}async post({headers:e,url:t,maxRedirects:n,cacheTTL:r,context:i,traceId:a,payload:o}){return this.request({url:t,method:`post`,headers:e,maxRedirects:n,cacheTTL:r,context:i,traceId:a,payload:o})}#normalizeHeaders(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{t[n.toLowerCase()]=e[n]||``}),t}#extractAxiosHeaders(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{t[n]=e[n]||``}),t}#isFormUrlEncoded(e){return e[`content-type`]===`application/x-www-form-urlencoded`}#getSafePayload(e,t){if(!((0,l.isMissing)(e)||(0,l.isObject)(e)&&Object.keys(e).length===0))return this.#isFormUrlEncoded(t)?g.default.stringify(e):e}#mapErrorToHttpException(e){if((0,d.isAxiosError)(e)&&this.#errorMappingFn)return this.#errorMappingFn(e)}};const Af=(e,t,n)=>new kf({redisClientConfig:e,logger:t,errorMappingFn:n});var jf=class{static httpClientInstance=null;static async getInstance({redisClientConfig:e,logger:t,errorMappingFn:n,getHttpClient:r=Af}){return this.httpClientInstance??=r(e,t,n),this.httpClientInstance}static resetInstance(){this.httpClientInstance=null}};const Mf=[`get`,`post`,`put`,`delete`,`patch`],Nf=e=>e.reduce((e,t)=>(Array.isArray(e[t.in][t.name])?e[t.in][t.name]=e[t.in][t.name].concat(t.value):typeof e[t.in][t.name]==`object`&&typeof t.value==`object`?e[t.in][t.name]={...e[t.in][t.name],...t.value}:e[t.in][t.name]=t.in===`body`?t.value:String(t.value),e),{query:{},body:{},headers:{}}),Pf=[`query`,`body`,`headers`],Ff=(e,t)=>{if((0,l.isMissing)(t)||t?.length===0||(0,l.isMissing)(e))return{data:e.data,status:e.status,headers:e.headers,requestUrl:e.requestUrl,responseType:e.responseType,responseTime:e.responseTime,message:e.message};let n=t?.filter(t=>t.receivedStatus===e.status);if(n?.length)for(let t of n){let n=t.condition,r=(0,_.safeEvaluate)(n,e)===!0;if((0,l.isMissing)(n)||r)return{data:e.data,headers:e.headers,requestUrl:e.requestUrl,responseType:e.responseType,responseTime:e.responseTime,status:t.targetStatus,message:t?.message??uo[t.targetStatus]??`Unknown error`}}return e},If=e=>(0,l.notMissing)(e)&&e>=200&&e<=299,Lf=e=>(0,l.notMissing)(e)&&e>=400&&e<=599,Rf=e=>(0,l.notMissing)(e)&&e>=100&&e<=199;var zf=class{async performRequest({httpClient:e,url:t,method:n,headers:r,body:i,customErrorConfigs:a}){let o;try{o=await e?.request({method:n,url:t,headers:r,maxRedirects:0,payload:i})}catch(e){if((0,l.isMissing)(e?.response))throw e;o=e.response}let s=Ff(o,a);if(Lf(s?.status))throw new fo(s,s.message);return s}},Bf=class{static build(e=`rest`){if(e===`rest`)return new zf;throw Error(`Unknown request client type: ${e}`)}};exports.CUSTOM_ERROR_CONFIG_SCHEMA=lo,exports.ConcurrencyManager=Ge,exports.EventClient=se,exports.HttpClient=kf,exports.HttpClientManager=jf,exports.HttpErrorMessages=uo,exports.HttpMethods=Mf,exports.HttpResponseError=fo,exports.HttpTransportFactory=po,exports.InstanceManager=ho,exports.LockManager=x,exports.MemoryStore=O,exports.QueueManager=Te,exports.RateLimitManager=ko,exports.RedisClient=le,exports.RequestClientFactory=Bf,exports.RequestParameterLocations=Pf,exports.ScriptManager=pe,exports.SubscriptionManager=me,exports.buildHttpClientInstance=Af,exports.createAuthorizationHeaders=v,exports.getTransportInstance=Jd,exports.isFailedStatusCode=Lf,exports.isInfoStatusCode=Rf,exports.isSuccessStatusCode=If,exports.parseRequestParameters=Nf;
|
package/dist/index.mjs
CHANGED
|
@@ -290,4 +290,4 @@ var ul=9e15,dl=1e9,fl=`0123456789abcdef`,pl=`2.302585092994045684017991454684364
|
|
|
290
290
|
${r}
|
|
291
291
|
${e}
|
|
292
292
|
return o
|
|
293
|
-
`}}),vf=T((exports,t)=>{t.exports=n;function n(e){let{secret:t,censor:n,compileRestore:r,serialize:i,groupRedact:a,nestedRedact:o,wildcards:s,wcLen:c}=e,l=[{secret:t,censor:n,compileRestore:r}];return i!==!1&&l.push({serialize:i}),c>0&&l.push({groupRedact:a,nestedRedact:o,wildcards:s,wcLen:c}),Object.assign(...l)}}),yf=T((exports,t)=>{let n=ff(),r=mf(),i=hf(),a=_f(),{groupRedact:o,nestedRedact:s}=gf(),c=vf(),l=pf(),u=n(),d=e=>e;d.restore=d;let f=`[REDACTED]`;p.rx=l,p.validator=n,t.exports=p;function p(e={}){let t=Array.from(new Set(e.paths||[])),n=`serialize`in e&&(e.serialize===!1||typeof e.serialize==`function`)?e.serialize:JSON.stringify,l=e.remove;if(l===!0&&n!==JSON.stringify)throw Error(`fast-redact – remove option may only be set when serializer is JSON.stringify`);let p=l===!0?void 0:`censor`in e?e.censor:f,m=typeof p==`function`,h=m&&p.length>1;if(t.length===0)return n||d;u({paths:t,serialize:n,censor:p});let{wildcards:g,wcLen:_,secret:v}=r({paths:t,censor:p}),y=a(),b=`strict`in e?e.strict:!0;return i({secret:v,wcLen:_,serialize:n,strict:b,isCensorFct:m,censorFctTakesPath:h},c({secret:v,censor:p,compileRestore:y,serialize:n,groupRedact:o,nestedRedact:s,wildcards:g,wcLen:_}))}}),bf=E(yf(),1);const xf=[`client_secret`,`access_token`,`refresh_token`,`api_key`,`password`,`job_board_token`,`private_key`,`certificate`,`service_user_token`,`key_id`,`secret_key`,`provhash`,`admin_key`,`session_key`,`id_token`,`authorization`,`bh_rest_token`,`external_trigger_token`,`tempauth`],Sf=[`req.headers.authorization`,`req.headers.cookie`,`req.headers.cookies`,`req.headers["set-cookie"]`,`req.headers["set-cookies"]`,`req.headers.httpsAgent.options.cert`,`req.headers.httpsAgent.options.key`,`req.headers["x-stackone-external-trigger-token"]`,`error.config.headers.authorization`,`error.config.data`,`error.config.headers.cookie`,`error.config.headers.cookies`,`error.config.headers["set-cookie"]`,`error.config.headers["set-cookies"]`,`error.config.httpsAgent.options.cert`,`error.config.httpsAgent.options.key`,`err.config.headers.authorization`,`err.config.data`,`err.config.headers.cookie`,`err.config.headers.cookies`,`err.config.headers["set-cookie"]`,`err.config.headers["set-cookies"]`,`err.config.httpsAgent.options.cert`,`err.config.httpsAgent.options.key`,`res.headers.authorization`,`res.headers.cookie`,`res.headers.cookies`,`res.headers["set-cookie"]`,`res.headers["set-cookies"]`,`res.headers.httpsAgent.options.cert`,`res.headers.httpsAgent.options.key`,`context.credentials`,...xf],Cf=`**redacted**`;let wf=function(e){return e.FULL=`FULL`,e.PARTIAL=`PARTIAL`,e}({});const Tf=e=>Cf,Ef=e=>typeof e==`string`?e.startsWith(Cf)?e:e.length<10?Cf:`${Cf}${e.slice(-5)}`:Cf,Df=(e=[],t=!0)=>{if(!t)return[];let n=e.map(e=>kf(e));return[...e,...n]},Of=(e=[],t=!0)=>{if(!t)return[];let n=new Set;return e.forEach(e=>{if(n.add(e),e.includes(`_`)){let t=e.replace(/_([a-z])/g,(e,t)=>t.toUpperCase());n.add(t)}else{let t=e.replace(/([A-Z])/g,`_$1`).toLowerCase();n.add(t)}}),Array.from(n)},kf=e=>{let t=jf(e);return t||Af(e)},Af=e=>{let t=e.split(`.`);if(t.length<2)return Mf(e);let n=t.pop()??``,r=Mf(n);return[...t,r].join(`.`)},jf=e=>{let t=e.lastIndexOf(`[`),n=e.indexOf(`]`,t);if(t===-1||n===-1)return;let r=e.slice(t,n+1),i=r.replace(/(["'])([^"']*)(["'])/g,(e,t,n)=>n?t+Mf(n)+t:t+t);return`${e.slice(0,t)}${i}${e.slice(n+1)}`},Mf=e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`,Nf=Df(Sf),Pf=Of(xf),Ff={[wf.FULL]:Tf,[wf.PARTIAL]:Ef},If={[wf.FULL]:(0,bf.default)({paths:Nf,serialize:!1,censor:Ff[wf.FULL]}),[wf.PARTIAL]:(0,bf.default)({paths:Nf,serialize:!1,censor:Ff[wf.PARTIAL]})},Lf=(t,n=wf.FULL)=>s(t)||typeof t!=`object`||!t?t:If[n](e(t)),Rf=(e,t=wf.FULL,n)=>{if(!s(e))try{let n=new URL(e),r=[...n.searchParams].reduce((e,[n,r])=>{let i=n.toLowerCase();return e.set(n,Pf.some(e=>e.toLowerCase()===i)?Ff[t](r):r),e},new URLSearchParams);return`${n.origin}${n.pathname}${r.toString()?`?`+r:``}${n.hash}`}catch(t){return n?.warning({message:`Invalid URL provided, unable to redact`,context:{value:e,error:t},category:`redactUrl`}),e}},zf=(e,t=wf.FULL,n)=>{if(!s(e))try{let[n,r]=e.split(`?`);if(!r)return e;let i=[...new URLSearchParams(r)].reduce((e,[n,r])=>{let i=n.toLowerCase();return e.set(n,Pf.some(e=>e.toLowerCase()===i)?Ff[t](r):r),e},new URLSearchParams);return`${n}?${i}`}catch(t){return n?.warning({message:`Invalid path provided, unable to redact`,context:{value:e,error:t},category:`redactPath`}),e}},Bf=(e,t=wf.FULL)=>{if(!s(e))return typeof e==`string`?Ff[t](e):Object.entries(e).reduce((e,[n,r])=>(e[n]=Pf.some(e=>e.toLowerCase()===n.toLowerCase())?Ff[t](r):r,e),{})};var Vf=class e{#transportFactory;#getRedisClient;#logger;#redisClientConfig;#errorMappingFn;#redisClient;constructor({transportFactory:e=cf,getRedisClient:t=A,logger:n,redisClientConfig:r,errorMappingFn:i}={}){this.#transportFactory=e,this.#getRedisClient=t,this.#logger=n,this.#redisClientConfig=r,this.#errorMappingFn=i}#generateCacheKey({url:e,payload:t,method:n,context:r}){let a=20;if(!r?.accountSecureId||r.accountSecureId.length<a||!e||!n)return null;let o=t?i(t):``;return`${r.accountSecureId}-${n.toUpperCase()}${o}-${e}`}async#getCachedResponse({url:t,payload:n,method:r,cacheTTL:i,context:a}){if(!this.#redisClient||!i||i<=0)return null;let o=this.#generateCacheKey({url:t,payload:n,method:r,context:a});if(!o)return null;let s=await this.#redisClient.getData(o);return s?(this.#logger?.debug({category:e.name,message:`Cache hit for key [${o}].`}),s):(this.#logger?.debug({category:e.name,message:`Cache miss for key [${o}].`}),null)}async#cacheResponse({url:t,payload:n,method:r,cacheTTL:i,context:a,response:o}){if(!this.#redisClient||!i||i<=0)return!1;let s=this.#generateCacheKey({url:t,payload:n,method:r,context:a});return s?(this.#logger?.debug({category:e.name,message:`Caching result for key [${s}].`}),this.#redisClient.setData({key:s,value:o,cacheTTL:i*60})):!1}async request({headers:t={},url:n,method:r=`get`,maxRedirects:i=0,responseType:a,cacheTTL:o,context:c,traceId:l,payload:u,httpsAgent:f,httpAgent:p}){try{d(this.#redisClientConfig)&&s(this.#redisClient)&&(this.#redisClient=await this.#getRedisClient(this.#redisClientConfig,this.#logger));let e=this.#normalizeHeaders(t),m=await this.#getCachedResponse({url:n,payload:u,method:r,cacheTTL:o,context:c});if(m)return{...m,responseTime:new Date};let h=Eo.getInstance(),g=d(l)?await h.get(l):null,_=g?.signal,v=await this.#transportFactory({redisClientConfig:this.#redisClientConfig,logger:this.#logger,context:c}),y=await v.request({headers:e,url:n,method:r,maxRedirects:i,responseType:a,data:this.#getSafePayload(u,e),httpsAgent:f,httpAgent:p,signal:_}),b={data:y.data,status:y.status,body:u,method:r,headers:this.#extractAxiosHeaders(y.headers),requestUrl:n,responseType:y?.config?.responseType,responseTime:new Date};return await this.#cacheResponse({url:n,payload:u,method:r,cacheTTL:o,context:c,response:b}),b}catch(t){let i=t;i.url=Rf(n),this.#logger?.warning({category:e.name,message:`Request error [${r?.toUpperCase()} ${i.url}]: ${i.message}.`,error:i});let a=this.#mapErrorToHttpException(i);throw d(a)?a:t}}async get({headers:e,url:t,maxRedirects:n,cacheTTL:r,context:i,traceId:a}){return this.request({url:t,method:`get`,headers:e,maxRedirects:n,cacheTTL:r,context:i,traceId:a})}async post({headers:e,url:t,maxRedirects:n,cacheTTL:r,context:i,traceId:a,payload:o}){return this.request({url:t,method:`post`,headers:e,maxRedirects:n,cacheTTL:r,context:i,traceId:a,payload:o})}#normalizeHeaders(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{t[n.toLowerCase()]=e[n]||``}),t}#extractAxiosHeaders(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{t[n]=e[n]||``}),t}#isFormUrlEncoded(e){return e[`content-type`]===`application/x-www-form-urlencoded`}#getSafePayload(e,t){if(e)return this.#isFormUrlEncoded(t)?y.stringify(e):e}#mapErrorToHttpException(e){if(m(e)&&this.#errorMappingFn)return this.#errorMappingFn(e)}};const Hf=(e,t,n)=>new Vf({redisClientConfig:e,logger:t,errorMappingFn:n});var Uf=class{static httpClientInstance=null;static async getInstance({getHttpClient:e=Hf,redisClientConfig:t,logger:n,errorMappingFn:r}){return this.httpClientInstance??=e(t,n,r),this.httpClientInstance}static resetInstance(){this.httpClientInstance=null}};const Wf=[`get`,`post`,`put`,`delete`,`patch`],Gf=e=>e.reduce((e,t)=>(Array.isArray(e[t.in][t.name])?e[t.in][t.name]=e[t.in][t.name].concat(t.value):typeof e[t.in][t.name]==`object`&&typeof t.value==`object`?e[t.in][t.name]={...e[t.in][t.name],...t.value}:e[t.in][t.name]=t.in===`body`?t.value:String(t.value),e),{query:{},body:{},headers:{}}),Kf=[`query`,`body`,`headers`],qf=(e,t)=>{if(s(t)||t?.length===0||s(e))return{data:e.data,status:e.status,headers:e.headers,requestUrl:e.requestUrl,responseType:e.responseType,responseTime:e.responseTime,message:e.message};let n=t?.filter(t=>t.receivedStatus===e.status);if(n?.length)for(let t of n){let n=t.condition,r=b(n,e)===!0;if(s(n)||r)return{data:e.data,headers:e.headers,requestUrl:e.requestUrl,responseType:e.responseType,responseTime:e.responseTime,status:t.targetStatus,message:t?.message??So[t.targetStatus]??`Unknown error`}}return e},Jf=e=>d(e)&&e>=200&&e<=299,Yf=e=>d(e)&&e>=400&&e<=599,Xf=e=>d(e)&&e>=100&&e<=199;var Zf=class{async performRequest({httpClient:e,url:t,method:n,headers:r,body:i,customErrorConfigs:a}){let o;try{o=await e?.request({method:n,url:t,headers:r,maxRedirects:0,payload:i})}catch(e){if(s(e?.response))throw e;o=e.response}let c=qf(o,a);if(Yf(c?.status))throw new Co(c,c.message);return c}},Qf=class{static build(e=`rest`){if(e===`rest`)return new Zf;throw Error(`Unknown request client type: ${e}`)}};export{xo as CUSTOM_ERROR_CONFIG_SCHEMA,nt as ConcurrencyManager,ye as EventClient,Vf as HttpClient,Uf as HttpClientManager,So as HttpErrorMessages,Wf as HttpMethods,Co as HttpResponseError,wo as HttpTransportFactory,Eo as InstanceManager,ie as LockManager,he as MemoryStore,Ie as QueueManager,Bo as RateLimitManager,be as RedisClient,Qf as RequestClientFactory,Kf as RequestParameterLocations,we as ScriptManager,Te as SubscriptionManager,Hf as buildHttpClientInstance,re as createAuthorizationHeaders,cf as getTransportInstance,Yf as isFailedStatusCode,Xf as isInfoStatusCode,Jf as isSuccessStatusCode,Gf as parseRequestParameters};
|
|
293
|
+
`}}),vf=T((exports,t)=>{t.exports=n;function n(e){let{secret:t,censor:n,compileRestore:r,serialize:i,groupRedact:a,nestedRedact:o,wildcards:s,wcLen:c}=e,l=[{secret:t,censor:n,compileRestore:r}];return i!==!1&&l.push({serialize:i}),c>0&&l.push({groupRedact:a,nestedRedact:o,wildcards:s,wcLen:c}),Object.assign(...l)}}),yf=T((exports,t)=>{let n=ff(),r=mf(),i=hf(),a=_f(),{groupRedact:o,nestedRedact:s}=gf(),c=vf(),l=pf(),u=n(),d=e=>e;d.restore=d;let f=`[REDACTED]`;p.rx=l,p.validator=n,t.exports=p;function p(e={}){let t=Array.from(new Set(e.paths||[])),n=`serialize`in e&&(e.serialize===!1||typeof e.serialize==`function`)?e.serialize:JSON.stringify,l=e.remove;if(l===!0&&n!==JSON.stringify)throw Error(`fast-redact – remove option may only be set when serializer is JSON.stringify`);let p=l===!0?void 0:`censor`in e?e.censor:f,m=typeof p==`function`,h=m&&p.length>1;if(t.length===0)return n||d;u({paths:t,serialize:n,censor:p});let{wildcards:g,wcLen:_,secret:v}=r({paths:t,censor:p}),y=a(),b=`strict`in e?e.strict:!0;return i({secret:v,wcLen:_,serialize:n,strict:b,isCensorFct:m,censorFctTakesPath:h},c({secret:v,censor:p,compileRestore:y,serialize:n,groupRedact:o,nestedRedact:s,wildcards:g,wcLen:_}))}}),bf=E(yf(),1);const xf=[`client_secret`,`access_token`,`refresh_token`,`api_key`,`password`,`job_board_token`,`private_key`,`certificate`,`service_user_token`,`key_id`,`secret_key`,`provhash`,`admin_key`,`session_key`,`id_token`,`authorization`,`bh_rest_token`,`external_trigger_token`,`tempauth`],Sf=[`req.headers.authorization`,`req.headers.cookie`,`req.headers.cookies`,`req.headers["set-cookie"]`,`req.headers["set-cookies"]`,`req.headers.httpsAgent.options.cert`,`req.headers.httpsAgent.options.key`,`req.headers["x-stackone-external-trigger-token"]`,`error.config.headers.authorization`,`error.config.data`,`error.config.headers.cookie`,`error.config.headers.cookies`,`error.config.headers["set-cookie"]`,`error.config.headers["set-cookies"]`,`error.config.httpsAgent.options.cert`,`error.config.httpsAgent.options.key`,`err.config.headers.authorization`,`err.config.data`,`err.config.headers.cookie`,`err.config.headers.cookies`,`err.config.headers["set-cookie"]`,`err.config.headers["set-cookies"]`,`err.config.httpsAgent.options.cert`,`err.config.httpsAgent.options.key`,`res.headers.authorization`,`res.headers.cookie`,`res.headers.cookies`,`res.headers["set-cookie"]`,`res.headers["set-cookies"]`,`res.headers.httpsAgent.options.cert`,`res.headers.httpsAgent.options.key`,`context.credentials`,...xf],Cf=`**redacted**`;let wf=function(e){return e.FULL=`FULL`,e.PARTIAL=`PARTIAL`,e}({});const Tf=e=>Cf,Ef=e=>typeof e==`string`?e.startsWith(Cf)?e:e.length<10?Cf:`${Cf}${e.slice(-5)}`:Cf,Df=(e=[],t=!0)=>{if(!t)return[];let n=e.map(e=>kf(e));return[...e,...n]},Of=(e=[],t=!0)=>{if(!t)return[];let n=new Set;return e.forEach(e=>{if(n.add(e),e.includes(`_`)){let t=e.replace(/_([a-z])/g,(e,t)=>t.toUpperCase());n.add(t)}else{let t=e.replace(/([A-Z])/g,`_$1`).toLowerCase();n.add(t)}}),Array.from(n)},kf=e=>{let t=jf(e);return t||Af(e)},Af=e=>{let t=e.split(`.`);if(t.length<2)return Mf(e);let n=t.pop()??``,r=Mf(n);return[...t,r].join(`.`)},jf=e=>{let t=e.lastIndexOf(`[`),n=e.indexOf(`]`,t);if(t===-1||n===-1)return;let r=e.slice(t,n+1),i=r.replace(/(["'])([^"']*)(["'])/g,(e,t,n)=>n?t+Mf(n)+t:t+t);return`${e.slice(0,t)}${i}${e.slice(n+1)}`},Mf=e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`,Nf=Df(Sf),Pf=Of(xf),Ff={[wf.FULL]:Tf,[wf.PARTIAL]:Ef},If={[wf.FULL]:(0,bf.default)({paths:Nf,serialize:!1,censor:Ff[wf.FULL]}),[wf.PARTIAL]:(0,bf.default)({paths:Nf,serialize:!1,censor:Ff[wf.PARTIAL]})},Lf=(t,n=wf.FULL)=>s(t)||typeof t!=`object`||!t?t:If[n](e(t)),Rf=(e,t=wf.FULL,n)=>{if(!s(e))try{let n=new URL(e),r=[...n.searchParams].reduce((e,[n,r])=>{let i=n.toLowerCase();return e.set(n,Pf.some(e=>e.toLowerCase()===i)?Ff[t](r):r),e},new URLSearchParams);return`${n.origin}${n.pathname}${r.toString()?`?`+r:``}${n.hash}`}catch(t){return n?.warning({message:`Invalid URL provided, unable to redact`,context:{value:e,error:t},category:`redactUrl`}),e}},zf=(e,t=wf.FULL,n)=>{if(!s(e))try{let[n,r]=e.split(`?`);if(!r)return e;let i=[...new URLSearchParams(r)].reduce((e,[n,r])=>{let i=n.toLowerCase();return e.set(n,Pf.some(e=>e.toLowerCase()===i)?Ff[t](r):r),e},new URLSearchParams);return`${n}?${i}`}catch(t){return n?.warning({message:`Invalid path provided, unable to redact`,context:{value:e,error:t},category:`redactPath`}),e}},Bf=(e,t=wf.FULL)=>{if(!s(e))return typeof e==`string`?Ff[t](e):Object.entries(e).reduce((e,[n,r])=>(e[n]=Pf.some(e=>e.toLowerCase()===n.toLowerCase())?Ff[t](r):r,e),{})};var Vf=class e{#transportFactory;#getRedisClient;#logger;#redisClientConfig;#errorMappingFn;#redisClient;constructor({transportFactory:e=cf,getRedisClient:t=A,logger:n,redisClientConfig:r,errorMappingFn:i}={}){this.#transportFactory=e,this.#getRedisClient=t,this.#logger=n,this.#redisClientConfig=r,this.#errorMappingFn=i}#generateCacheKey({url:e,payload:t,method:n,context:r}){let a=20;if(!r?.accountSecureId||r.accountSecureId.length<a||!e||!n)return null;let o=t?i(t):``;return`${r.accountSecureId}-${n.toUpperCase()}${o}-${e}`}async#getCachedResponse({url:t,payload:n,method:r,cacheTTL:i,context:a}){if(!this.#redisClient||!i||i<=0)return null;let o=this.#generateCacheKey({url:t,payload:n,method:r,context:a});if(!o)return null;let s=await this.#redisClient.getData(o);return s?(this.#logger?.debug({category:e.name,message:`Cache hit for key [${o}].`}),s):(this.#logger?.debug({category:e.name,message:`Cache miss for key [${o}].`}),null)}async#cacheResponse({url:t,payload:n,method:r,cacheTTL:i,context:a,response:o}){if(!this.#redisClient||!i||i<=0)return!1;let s=this.#generateCacheKey({url:t,payload:n,method:r,context:a});return s?(this.#logger?.debug({category:e.name,message:`Caching result for key [${s}].`}),this.#redisClient.setData({key:s,value:o,cacheTTL:i*60})):!1}async request({headers:t={},url:n,method:r=`get`,maxRedirects:i=0,responseType:a,cacheTTL:o,context:c,traceId:l,payload:u,httpsAgent:f,httpAgent:p}){try{d(this.#redisClientConfig)&&s(this.#redisClient)&&(this.#redisClient=await this.#getRedisClient(this.#redisClientConfig,this.#logger));let e=this.#normalizeHeaders(t),m=this.#getSafePayload(u,t),h=await this.#getCachedResponse({url:n,payload:m,method:r,cacheTTL:o,context:c});if(h)return{...h,responseTime:new Date};let g=Eo.getInstance(),_=d(l)?await g.get(l):null,v=_?.signal,y=await this.#transportFactory({redisClientConfig:this.#redisClientConfig,logger:this.#logger,context:c}),b=await y.request({headers:e,url:n,method:r,maxRedirects:i,responseType:a,data:m,httpsAgent:f,httpAgent:p,signal:v}),x={data:b.data,status:b.status,body:m,method:r,headers:this.#extractAxiosHeaders(b.headers),requestUrl:n,responseType:b?.config?.responseType,responseTime:new Date};return await this.#cacheResponse({url:n,payload:m,method:r,cacheTTL:o,context:c,response:x}),x}catch(t){let i=t;i.url=Rf(n),this.#logger?.warning({category:e.name,message:`Request error [${r?.toUpperCase()} ${i.url}]: ${i.message}.`,error:i});let a=this.#mapErrorToHttpException(i);throw d(a)?a:t}}async get({headers:e,url:t,maxRedirects:n,cacheTTL:r,context:i,traceId:a}){return this.request({url:t,method:`get`,headers:e,maxRedirects:n,cacheTTL:r,context:i,traceId:a})}async post({headers:e,url:t,maxRedirects:n,cacheTTL:r,context:i,traceId:a,payload:o}){return this.request({url:t,method:`post`,headers:e,maxRedirects:n,cacheTTL:r,context:i,traceId:a,payload:o})}#normalizeHeaders(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{t[n.toLowerCase()]=e[n]||``}),t}#extractAxiosHeaders(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{t[n]=e[n]||``}),t}#isFormUrlEncoded(e){return e[`content-type`]===`application/x-www-form-urlencoded`}#getSafePayload(e,t){if(!(s(e)||l(e)&&Object.keys(e).length===0))return this.#isFormUrlEncoded(t)?y.stringify(e):e}#mapErrorToHttpException(e){if(m(e)&&this.#errorMappingFn)return this.#errorMappingFn(e)}};const Hf=(e,t,n)=>new Vf({redisClientConfig:e,logger:t,errorMappingFn:n});var Uf=class{static httpClientInstance=null;static async getInstance({redisClientConfig:e,logger:t,errorMappingFn:n,getHttpClient:r=Hf}){return this.httpClientInstance??=r(e,t,n),this.httpClientInstance}static resetInstance(){this.httpClientInstance=null}};const Wf=[`get`,`post`,`put`,`delete`,`patch`],Gf=e=>e.reduce((e,t)=>(Array.isArray(e[t.in][t.name])?e[t.in][t.name]=e[t.in][t.name].concat(t.value):typeof e[t.in][t.name]==`object`&&typeof t.value==`object`?e[t.in][t.name]={...e[t.in][t.name],...t.value}:e[t.in][t.name]=t.in===`body`?t.value:String(t.value),e),{query:{},body:{},headers:{}}),Kf=[`query`,`body`,`headers`],qf=(e,t)=>{if(s(t)||t?.length===0||s(e))return{data:e.data,status:e.status,headers:e.headers,requestUrl:e.requestUrl,responseType:e.responseType,responseTime:e.responseTime,message:e.message};let n=t?.filter(t=>t.receivedStatus===e.status);if(n?.length)for(let t of n){let n=t.condition,r=b(n,e)===!0;if(s(n)||r)return{data:e.data,headers:e.headers,requestUrl:e.requestUrl,responseType:e.responseType,responseTime:e.responseTime,status:t.targetStatus,message:t?.message??So[t.targetStatus]??`Unknown error`}}return e},Jf=e=>d(e)&&e>=200&&e<=299,Yf=e=>d(e)&&e>=400&&e<=599,Xf=e=>d(e)&&e>=100&&e<=199;var Zf=class{async performRequest({httpClient:e,url:t,method:n,headers:r,body:i,customErrorConfigs:a}){let o;try{o=await e?.request({method:n,url:t,headers:r,maxRedirects:0,payload:i})}catch(e){if(s(e?.response))throw e;o=e.response}let c=qf(o,a);if(Yf(c?.status))throw new Co(c,c.message);return c}},Qf=class{static build(e=`rest`){if(e===`rest`)return new Zf;throw Error(`Unknown request client type: ${e}`)}};export{xo as CUSTOM_ERROR_CONFIG_SCHEMA,nt as ConcurrencyManager,ye as EventClient,Vf as HttpClient,Uf as HttpClientManager,So as HttpErrorMessages,Wf as HttpMethods,Co as HttpResponseError,wo as HttpTransportFactory,Eo as InstanceManager,ie as LockManager,he as MemoryStore,Ie as QueueManager,Bo as RateLimitManager,be as RedisClient,Qf as RequestClientFactory,Kf as RequestParameterLocations,we as ScriptManager,Te as SubscriptionManager,Hf as buildHttpClientInstance,re as createAuthorizationHeaders,cf as getTransportInstance,Yf as isFailedStatusCode,Xf as isInfoStatusCode,Jf as isSuccessStatusCode,Gf as parseRequestParameters};
|