@iamnnort/request 2.0.5 → 2.1.0

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/README.md CHANGED
@@ -108,28 +108,54 @@ WARN (Todo Api): GET https://dummyjson.com/todos/999 400 Bad Request (100ms)
108
108
  ERROR (Todo Api): GET https://dummyjson.com/todos 500 Internal Server Error (200ms)
109
109
  ```
110
110
 
111
+ ## Signing
112
+
113
+ Set the `signer` option to automatically sign outgoing requests with an HMAC signature.
114
+
115
+ ```typescript
116
+ import { LoggerLevels, RequestDataSource } from '@iamnnort/request';
117
+
118
+ const dataSource = new RequestDataSource({
119
+ baseUrl: 'https://api.example.com',
120
+ logger: {
121
+ name: 'Webhook Api',
122
+ level: LoggerLevels.INFO,
123
+ },
124
+ signer: {
125
+ secretKey: 'my-secret-key',
126
+ },
127
+ });
128
+ ```
129
+
130
+ When configured, every request with a body will include an `x-signature` header in the format `t={timestamp},v1={hmac}`, where the HMAC is computed as `SHA-256(secretKey, "{timestamp}.{body}")`.
131
+
132
+ The header name defaults to `x-signature` and can be customized via `signer.header`.
133
+
111
134
  ## Configuration
112
135
 
113
136
  ### Base Config
114
137
 
115
- | Parameter | Type | Description |
116
- | ---------------------- | ------------------------ | ------------------------------------------------------------------ |
117
- | `baseUrl` | `string` | Main part of the server URL that will be used for the request |
118
- | `url` | `string \| number` | Server URL that will be used for the request |
119
- | `urlParts` | `(string \| number)[]` | Additional parts of URL that will be used for the request |
120
- | `baseUrlName` | `string` | Key to look up the base URL from `baseUrlMap` |
121
- | `baseUrlMap` | `Record<string, string>` | Map of named base URLs |
122
- | `headers` | `object` | Custom headers to be sent |
123
- | `auth` | `object` | HTTP Basic auth credentials |
124
- | `bearerToken` | `string` | Bearer token for Authorization header |
125
- | `apiKey` | `string` | API key sent via `x-api-key` header |
126
- | `timeout` | `number` | Request timeout in milliseconds |
127
- | `responseType` | `string` | Response type (e.g. `json`, `text`, `stream`) |
128
- | `logger` | `object` | Logger configuration |
129
- | `logger.name` | `string` | Name used as the logger label |
130
- | `logger.level` | `string` | Log level (`trace`, `debug`, `info`, `warn`, `error`, `fatal`) |
131
- | `serializer` | `object` | Config that allows you to customize serializing |
132
- | `serializer.arrayFormat` | `string` | Array format (`indices`, `brackets`, `repeat`, `comma`) |
138
+ | Parameter | Type | Description |
139
+ | ------------------------ | ------------------------ | ------------------------------------------------------------------ |
140
+ | `baseUrl` | `string` | Main part of the server URL that will be used for the request |
141
+ | `url` | `string \| number` | Server URL that will be used for the request |
142
+ | `urlParts` | `(string \| number)[]` | Additional parts of URL that will be used for the request |
143
+ | `baseUrlName` | `string` | Key to look up the base URL from `baseUrlMap` |
144
+ | `baseUrlMap` | `Record<string, string>` | Map of named base URLs |
145
+ | `headers` | `object` | Custom headers to be sent |
146
+ | `auth` | `object` | HTTP Basic auth credentials |
147
+ | `bearerToken` | `string` | Bearer token for Authorization header |
148
+ | `apiKey` | `string` | API key sent via `x-api-key` header |
149
+ | `timeout` | `number` | Request timeout in milliseconds |
150
+ | `responseType` | `string` | Response type (e.g. `json`, `text`, `stream`) |
151
+ | `logger` | `object` | Logger configuration |
152
+ | `logger.name` | `string` | Name used as the logger label |
153
+ | `logger.level` | `string` | Log level (`trace`, `debug`, `info`, `warn`, `error`, `fatal`) |
154
+ | `serializer` | `object` | Config that allows you to customize serializing |
155
+ | `serializer.arrayFormat` | `string` | Array format (`indices`, `brackets`, `repeat`, `comma`) |
156
+ | `signer` | `object` | Request signing configuration |
157
+ | `signer.secretKey` | `string` | HMAC secret key for signing requests |
158
+ | `signer.header` | `string` | Header name for the signature (default: `x-signature`) |
133
159
 
134
160
  ### Request Config
135
161
 
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _iamnnort_config_http from '@iamnnort/config/http';
2
2
  import { HttpStatuses, HttpMethods } from '@iamnnort/config/http';
3
3
  export { HttpMethods, HttpStatuses } from '@iamnnort/config/http';
4
- import { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
4
+ import { AxiosRequestConfig, AxiosResponse, AxiosError, ParamsSerializerOptions } from 'axios';
5
5
 
6
6
  type LoggerConfig = {
7
7
  name: string;
@@ -66,6 +66,26 @@ declare enum SerializerArrayFormats {
66
66
  COMMA = "comma"
67
67
  }
68
68
 
69
+ declare class Serializer {
70
+ private config;
71
+ constructor(config?: Partial<SerializerConfig>);
72
+ getConfig(): ParamsSerializerOptions;
73
+ }
74
+
75
+ type SignerConfig = {
76
+ secretKey: string;
77
+ header?: string;
78
+ };
79
+
80
+ declare class Signer {
81
+ private config;
82
+ constructor(config?: Partial<SignerConfig>);
83
+ private sign;
84
+ getConfig(body: string): {
85
+ [x: string]: string;
86
+ };
87
+ }
88
+
69
89
  type RequestParams = Pick<AxiosRequestConfig, 'params' | 'data'>;
70
90
  type RequestConfigParams = Pick<AxiosRequestConfig, 'params' | 'data'>;
71
91
  type RequestConfig = Omit<AxiosRequestConfig, 'baseURL' | 'url'> & {
@@ -90,6 +110,7 @@ type BaseRequestConfig = Pick<AxiosRequestConfig, 'auth' | 'headers' | 'timeout'
90
110
  apiKey?: string;
91
111
  serializer?: Partial<SerializerConfig>;
92
112
  logger?: Partial<LoggerConfig>;
113
+ signer?: Partial<SignerConfig>;
93
114
  };
94
115
  type ResponseConfig = {
95
116
  raw?: boolean;
@@ -138,4 +159,4 @@ declare class RequestHelper {
138
159
  static sleep(seconds: number): Promise<unknown>;
139
160
  }
140
161
 
141
- export { type BaseRequestConfig, Logger, type LoggerConfig, LoggerLevels, type Pagination, type PaginationDto, type PaginationResponse, type RawResponse, type RequestConfig, type RequestConfigParams, RequestDataSource, RequestHelper, type RequestParams, type Response, type ResponseConfig, SerializerArrayFormats, type SerializerConfig };
162
+ export { type BaseRequestConfig, Logger, type LoggerConfig, LoggerLevels, type Pagination, type PaginationDto, type PaginationResponse, type RawResponse, type RequestConfig, type RequestConfigParams, RequestDataSource, RequestHelper, type RequestParams, type Response, type ResponseConfig, Serializer, SerializerArrayFormats, type SerializerConfig, Signer, type SignerConfig };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _iamnnort_config_http from '@iamnnort/config/http';
2
2
  import { HttpStatuses, HttpMethods } from '@iamnnort/config/http';
3
3
  export { HttpMethods, HttpStatuses } from '@iamnnort/config/http';
4
- import { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
4
+ import { AxiosRequestConfig, AxiosResponse, AxiosError, ParamsSerializerOptions } from 'axios';
5
5
 
6
6
  type LoggerConfig = {
7
7
  name: string;
@@ -66,6 +66,26 @@ declare enum SerializerArrayFormats {
66
66
  COMMA = "comma"
67
67
  }
68
68
 
69
+ declare class Serializer {
70
+ private config;
71
+ constructor(config?: Partial<SerializerConfig>);
72
+ getConfig(): ParamsSerializerOptions;
73
+ }
74
+
75
+ type SignerConfig = {
76
+ secretKey: string;
77
+ header?: string;
78
+ };
79
+
80
+ declare class Signer {
81
+ private config;
82
+ constructor(config?: Partial<SignerConfig>);
83
+ private sign;
84
+ getConfig(body: string): {
85
+ [x: string]: string;
86
+ };
87
+ }
88
+
69
89
  type RequestParams = Pick<AxiosRequestConfig, 'params' | 'data'>;
70
90
  type RequestConfigParams = Pick<AxiosRequestConfig, 'params' | 'data'>;
71
91
  type RequestConfig = Omit<AxiosRequestConfig, 'baseURL' | 'url'> & {
@@ -90,6 +110,7 @@ type BaseRequestConfig = Pick<AxiosRequestConfig, 'auth' | 'headers' | 'timeout'
90
110
  apiKey?: string;
91
111
  serializer?: Partial<SerializerConfig>;
92
112
  logger?: Partial<LoggerConfig>;
113
+ signer?: Partial<SignerConfig>;
93
114
  };
94
115
  type ResponseConfig = {
95
116
  raw?: boolean;
@@ -138,4 +159,4 @@ declare class RequestHelper {
138
159
  static sleep(seconds: number): Promise<unknown>;
139
160
  }
140
161
 
141
- export { type BaseRequestConfig, Logger, type LoggerConfig, LoggerLevels, type Pagination, type PaginationDto, type PaginationResponse, type RawResponse, type RequestConfig, type RequestConfigParams, RequestDataSource, RequestHelper, type RequestParams, type Response, type ResponseConfig, SerializerArrayFormats, type SerializerConfig };
162
+ export { type BaseRequestConfig, Logger, type LoggerConfig, LoggerLevels, type Pagination, type PaginationDto, type PaginationResponse, type RawResponse, type RequestConfig, type RequestConfigParams, RequestDataSource, RequestHelper, type RequestParams, type Response, type ResponseConfig, Serializer, SerializerArrayFormats, type SerializerConfig, Signer, type SignerConfig };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var R=Object.defineProperty;var g=(r,e)=>R(r,"name",{value:e,configurable:!0});var _pino = require('pino'); var _pino2 = _interopRequireDefault(_pino);var _http = require('@iamnnort/config/http');var c=(function(r){return r.FATAL="fatal",r.ERROR="error",r.WARN="warn",r.INFO="info",r.DEBUG="debug",r.TRACE="trace",r})({});var p=class{static{g(this,"Logger")}constructor(e={}){this.config={name:"",level:c.INFO,...e};let t=new _http.HttpMessageFormatter;this.logger=_pino2.default.call(void 0, {name:this.config.name,level:this.config.level,timestamp:!1},t.makeLogStream())}logRequest(e){let t=new (0, _http.HttpMessageBuilder)({request:e}),s=t.makeMethodText().makeUrlText().build(),o={},a=t.makeRequestDataObj();Object.keys(a).length>0&&(o.request=a),this.logger.debug(o,s)}logResponse(e,t){let s=new (0, _http.HttpMessageBuilder)({response:e,duration:t});s.makeMethodText().makeUrlText().makeStatusText();let o={},a=s.makeRequestDataObj();if(Object.keys(a).length>0&&(o.request=a),[c.TRACE,c.DEBUG].includes(this.config.level)){let n=s.makeResponseDataObj();Object.keys(n).length>0&&(o.response=n)}let i=s.makeDurationText().build();this.logger.info(o,i)}logError(e,t,s){let o=new (0, _http.HttpMessageBuilder)({request:e,error:t,duration:s});o.makeMethodText().makeUrlText().makeStatusText();let a={},i=o.makeRequestDataObj();if(Object.keys(i).length>0&&(a.request=i),[c.TRACE,c.DEBUG].includes(this.config.level)){let h=o.makeResponseDataObj();Object.keys(h).length>0&&(a.response=h)}let n=o.makeDurationText().build();o.makeStatus()>=_http.HttpStatuses.INTERNAL_SERVER_ERROR?this.logger.error(a,n):this.logger.warn(a,n)}makeResponse(e){return new (0, _http.HttpMessageBuilder)({response:e}).makeResponse()}makeErrorResponse(e){return new (0, _http.HttpMessageBuilder)({error:e}).makeResponse()}};var b=(function(r){return r.INDICES="indices",r.BRACKETS="brackets",r.REPEAT="repeat",r.COMMA="comma",r})({});var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _qs = require('qs');var d=class{static{g(this,"RequestBuilder")}constructor(e){this.baseRequestConfig=e.baseRequestConfig,this.requestConfig=e.requestConfig,this.config={timeout:e.requestConfig.timeout||e.baseRequestConfig.timeout,responseType:e.requestConfig.responseType||e.baseRequestConfig.responseType,headers:{Accept:"application/json","Content-Type":"application/json",...e.baseRequestConfig.headers,...e.requestConfig.headers}}}makeContentType(){return this.requestConfig.multipart?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"multipart/form-data"}},this):this.requestConfig.urlencoded?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"application/x-www-form-urlencoded"}},this):this.requestConfig.xml?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"text/xml"}},this):this}makeAuth(){let e=this.requestConfig.auth||this.baseRequestConfig.auth;if(e)return this.config={...this.config,auth:e},this;let t=this.requestConfig.bearerToken||this.baseRequestConfig.bearerToken;if(t)return this.config={...this.config,headers:{...this.config.headers,Authorization:`Bearer ${t}`}},this;let s=this.requestConfig.apiKey||this.baseRequestConfig.apiKey;return s?(this.config={...this.config,headers:{...this.config.headers,"x-api-key":s}},this):this}makeUrl(){let e=this.requestConfig.baseUrlMap||this.baseRequestConfig.baseUrlMap,t=this.requestConfig.baseUrlName||this.baseRequestConfig.baseUrlName,s=[e&&t?e[t]:this.baseRequestConfig.baseUrl,this.baseRequestConfig.url,...this.baseRequestConfig.urlParts||[],this.requestConfig.baseUrl,this.requestConfig.url,...this.requestConfig.urlParts||[]].map(u=>_optionalChain([u, 'optionalAccess', _ => _.toString, 'call', _2 => _2()])),a=s.some(u=>_optionalChain([u, 'optionalAccess', _3 => _3.includes, 'call', _4 => _4("https")]))?"https":"http",i=s.filter(u=>u).map(u=>_optionalChain([u, 'optionalAccess', _5 => _5.replace, 'call', _6 => _6(/^(https?:\/\/|\/)?(.*?)(\/?)$/,"$2")])),n=`${a}://${i.join("/")}`;return this.config={...this.config,url:n},this}makeMethod(){return this.config={...this.config,method:this.requestConfig.method},this}makeData(){return this.requestConfig.method===_http.HttpMethods.GET?this:this.requestConfig.urlencoded?(this.config={...this.config,data:_qs.stringify.call(void 0, this.requestConfig.data)},this):(this.config={...this.config,data:this.requestConfig.data},this)}makeParams(){return this.config={...this.config,params:this.requestConfig.params},this}makeSerializer(){return this.config={...this.config,paramsSerializer:{serialize:g(e=>_qs.stringify.call(void 0, e,{arrayFormat:_optionalChain([this, 'access', _7 => _7.baseRequestConfig, 'access', _8 => _8.serializer, 'optionalAccess', _9 => _9.arrayFormat])||b.BRACKETS,skipNulls:!0}),"serialize")}},this}build(){return this.config}};var C=class{static{g(this,"RequestDataSource")}constructor(e){this.baseRequestConfig=e,this.logger=new p(this.baseRequestConfig.logger)}common(e,t={}){let o=new d({baseRequestConfig:this.baseRequestConfig,requestConfig:e}).makeContentType().makeAuth().makeUrl().makeMethod().makeParams().makeData().makeSerializer().build();this.logger.logRequest(o);let a=Date.now();return _axios2.default.request(o).then(i=>(this.logger.logResponse(i,Date.now()-a),t.raw?this.logger.makeResponse(i):i.data)).catch(i=>{if(this.logger.logError(o,i,Date.now()-a),t.raw)return this.logger.makeErrorResponse(i);throw _optionalChain([i, 'access', _10 => _10.response, 'optionalAccess', _11 => _11.data])||i.response||new Error(i.message)})}async*bulkCommon(e,t={}){let{page:s,pageSize:o,bulkSize:a,...i}=e.params||{},n={page:s||1,pageSize:o||30},u=a?n.page-1+a:null,h={total:0,currentPage:0,lastPage:0,from:0,to:0,pageSize:0};do{let f=await this.common({...e,params:{...n,...i}});if(h=f.pagination,!_optionalChain([f, 'access', _12 => _12.data, 'optionalAccess', _13 => _13.length]))return;t.raw?yield f:yield f.data,n.page+=1}while(h.currentPage!==h.lastPage&&h.currentPage!==u);h.currentPage!==h.lastPage&&t.bulkCallback&&await t.bulkCallback(n.page)}search(e={}){return this.common({...e,method:_http.HttpMethods.GET})}bulkSearch(e={}){return this.bulkCommon({...e,method:_http.HttpMethods.GET})}async searchOne(e={}){return((await this.common({...e,method:_http.HttpMethods.GET,params:{pageSize:1,extended:!0,strict:!0,...e.params}})).data||[])[0]}get(e,t={}){return this.common({...t,method:_http.HttpMethods.GET,url:e})}create(e){return this.common({...e,method:_http.HttpMethods.POST})}bulkCreate(e){return this.common({...e,method:_http.HttpMethods.POST,url:"/bulk",data:{bulk:e.data}})}update(e,t){return this.common({...t,method:_http.HttpMethods.PUT,url:e})}bulkUpdate(e){return this.common({...e,method:_http.HttpMethods.PUT,url:"/bulk",data:{bulk:e.data}})}remove(e,t={}){return this.common({...t,method:_http.HttpMethods.DELETE,url:e})}};var q=class{static{g(this,"RequestHelper")}static sleep(e){return new Promise(t=>{setTimeout(t,e*1e3)})}};exports.HttpMethods = _http.HttpMethods; exports.HttpStatuses = _http.HttpStatuses; exports.Logger = p; exports.LoggerLevels = c; exports.RequestDataSource = C; exports.RequestHelper = q; exports.SerializerArrayFormats = b;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var x=Object.defineProperty;var n=(r,e)=>x(r,"name",{value:e,configurable:!0});var _pino = require('pino'); var _pino2 = _interopRequireDefault(_pino);var _http = require('@iamnnort/config/http');var c=(function(r){return r.FATAL="fatal",r.ERROR="error",r.WARN="warn",r.INFO="info",r.DEBUG="debug",r.TRACE="trace",r})({});var p=class{static{n(this,"Logger")}constructor(e={}){this.config={name:"",level:c.INFO,...e};let t=new _http.HttpMessageFormatter;this.logger=_pino2.default.call(void 0, {name:this.config.name,level:this.config.level,timestamp:!1},t.makeLogStream())}logRequest(e){let t=new (0, _http.HttpMessageBuilder)({request:e}),s=t.makeMethodText().makeUrlText().build(),o={},i=t.makeRequestDataObj();Object.keys(i).length>0&&(o.request=i),this.logger.debug(o,s)}logResponse(e,t){let s=new (0, _http.HttpMessageBuilder)({response:e,duration:t});s.makeMethodText().makeUrlText().makeStatusText();let o={},i=s.makeRequestDataObj();if(Object.keys(i).length>0&&(o.request=i),[c.TRACE,c.DEBUG].includes(this.config.level)){let u=s.makeResponseDataObj();Object.keys(u).length>0&&(o.response=u)}let a=s.makeDurationText().build();this.logger.info(o,a)}logError(e,t,s){let o=new (0, _http.HttpMessageBuilder)({request:e,error:t,duration:s});o.makeMethodText().makeUrlText().makeStatusText();let i={},a=o.makeRequestDataObj();if(Object.keys(a).length>0&&(i.request=a),[c.TRACE,c.DEBUG].includes(this.config.level)){let h=o.makeResponseDataObj();Object.keys(h).length>0&&(i.response=h)}let u=o.makeDurationText().build();o.makeStatus()>=_http.HttpStatuses.INTERNAL_SERVER_ERROR?this.logger.error(i,u):this.logger.warn(i,u)}makeResponse(e){return new (0, _http.HttpMessageBuilder)({response:e}).makeResponse()}makeErrorResponse(e){return new (0, _http.HttpMessageBuilder)({error:e}).makeResponse()}};var _qs = require('qs');var C=(function(r){return r.INDICES="indices",r.BRACKETS="brackets",r.REPEAT="repeat",r.COMMA="comma",r})({});var d=class{static{n(this,"Serializer")}constructor(e={}){this.config={arrayFormat:C.BRACKETS,...e}}getConfig(){return{serialize:n(e=>_qs.stringify.call(void 0, e,{arrayFormat:this.config.arrayFormat,skipNulls:!0}),"serialize")}}};var _crypto = require('crypto');var k=class{static{n(this,"Signer")}constructor(e={}){this.config={secretKey:"",header:"x-signature",...e}}sign(e){let t=Math.floor(Date.now()/1e3),s=`${t}.${e}`,o=_crypto.createHmac.call(void 0, "sha256",this.config.secretKey).update(s,"utf8").digest("hex");return`t=${t},v1=${o}`}getConfig(e){return this.config.secretKey?{[this.config.header]:this.sign(e?JSON.stringify(e):"")}:{}}};var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var b=class{static{n(this,"RequestBuilder")}constructor(e){this.baseRequestConfig=e.baseRequestConfig,this.requestConfig=e.requestConfig,this.config={timeout:e.requestConfig.timeout||e.baseRequestConfig.timeout,responseType:e.requestConfig.responseType||e.baseRequestConfig.responseType,headers:{Accept:"application/json","Content-Type":"application/json",...e.baseRequestConfig.headers,...e.requestConfig.headers}},this.signer=new k(this.baseRequestConfig.signer),this.serializer=new d(this.baseRequestConfig.serializer)}makeContentType(){return this.requestConfig.multipart?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"multipart/form-data"}},this):this.requestConfig.urlencoded?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"application/x-www-form-urlencoded"}},this):this.requestConfig.xml?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"text/xml"}},this):this}makeAuth(){let e=this.requestConfig.auth||this.baseRequestConfig.auth;if(e)return this.config={...this.config,auth:e},this;let t=this.requestConfig.bearerToken||this.baseRequestConfig.bearerToken;if(t)return this.config={...this.config,headers:{...this.config.headers,Authorization:`Bearer ${t}`}},this;let s=this.requestConfig.apiKey||this.baseRequestConfig.apiKey;return s?(this.config={...this.config,headers:{...this.config.headers,"x-api-key":s}},this):this}makeUrl(){let e=this.requestConfig.baseUrlMap||this.baseRequestConfig.baseUrlMap,t=this.requestConfig.baseUrlName||this.baseRequestConfig.baseUrlName,s=[e&&t?e[t]:this.baseRequestConfig.baseUrl,this.baseRequestConfig.url,...this.baseRequestConfig.urlParts||[],this.requestConfig.baseUrl,this.requestConfig.url,...this.requestConfig.urlParts||[]].map(g=>_optionalChain([g, 'optionalAccess', _ => _.toString, 'call', _2 => _2()])),i=s.some(g=>_optionalChain([g, 'optionalAccess', _3 => _3.includes, 'call', _4 => _4("https")]))?"https":"http",a=s.filter(g=>g).map(g=>_optionalChain([g, 'optionalAccess', _5 => _5.replace, 'call', _6 => _6(/^(https?:\/\/|\/)?(.*?)(\/?)$/,"$2")])),u=`${i}://${a.join("/")}`;return this.config={...this.config,url:u},this}makeMethod(){return this.config={...this.config,method:this.requestConfig.method},this}makeData(){return this.requestConfig.method===_http.HttpMethods.GET?this:this.requestConfig.urlencoded?(this.config={...this.config,data:_qs.stringify.call(void 0, this.requestConfig.data)},this):(this.config={...this.config,data:this.requestConfig.data},this)}makeParams(){return this.config={...this.config,params:this.requestConfig.params},this}makeSignature(){return this.config={...this.config,headers:{...this.config.headers,...this.signer.getConfig(this.config.data)}},this}makeSerializer(){return this.config={...this.config,paramsSerializer:this.serializer.getConfig()},this}build(){return this.config}};var q=class{static{n(this,"RequestDataSource")}constructor(e){this.baseRequestConfig=e,this.logger=new p(this.baseRequestConfig.logger)}common(e,t={}){let o=new b({baseRequestConfig:this.baseRequestConfig,requestConfig:e}).makeContentType().makeAuth().makeUrl().makeMethod().makeParams().makeData().makeSignature().makeSerializer().build();this.logger.logRequest(o);let i=Date.now();return _axios2.default.request(o).then(a=>(this.logger.logResponse(a,Date.now()-i),t.raw?this.logger.makeResponse(a):a.data)).catch(a=>{if(this.logger.logError(o,a,Date.now()-i),t.raw)return this.logger.makeErrorResponse(a);throw _optionalChain([a, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.data])||a.response||new Error(a.message)})}async*bulkCommon(e,t={}){let{page:s,pageSize:o,bulkSize:i,...a}=e.params||{},u={page:s||1,pageSize:o||30},g=i?u.page-1+i:null,h={total:0,currentPage:0,lastPage:0,from:0,to:0,pageSize:0};do{let l=await this.common({...e,params:{...u,...a}});if(h=l.pagination,!_optionalChain([l, 'access', _9 => _9.data, 'optionalAccess', _10 => _10.length]))return;t.raw?yield l:yield l.data,u.page+=1}while(h.currentPage!==h.lastPage&&h.currentPage!==g);h.currentPage!==h.lastPage&&t.bulkCallback&&await t.bulkCallback(u.page)}search(e={}){return this.common({...e,method:_http.HttpMethods.GET})}bulkSearch(e={}){return this.bulkCommon({...e,method:_http.HttpMethods.GET})}async searchOne(e={}){return((await this.common({...e,method:_http.HttpMethods.GET,params:{pageSize:1,extended:!0,strict:!0,...e.params}})).data||[])[0]}get(e,t={}){return this.common({...t,method:_http.HttpMethods.GET,url:e})}create(e){return this.common({...e,method:_http.HttpMethods.POST})}bulkCreate(e){return this.common({...e,method:_http.HttpMethods.POST,url:"/bulk",data:{bulk:e.data}})}update(e,t){return this.common({...t,method:_http.HttpMethods.PUT,url:e})}bulkUpdate(e){return this.common({...e,method:_http.HttpMethods.PUT,url:"/bulk",data:{bulk:e.data}})}remove(e,t={}){return this.common({...t,method:_http.HttpMethods.DELETE,url:e})}};var R=class{static{n(this,"RequestHelper")}static sleep(e){return new Promise(t=>{setTimeout(t,e*1e3)})}};exports.HttpMethods = _http.HttpMethods; exports.HttpStatuses = _http.HttpStatuses; exports.Logger = p; exports.LoggerLevels = c; exports.RequestDataSource = q; exports.RequestHelper = R; exports.Serializer = d; exports.SerializerArrayFormats = C; exports.Signer = k;
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/request/request/dist/index.js","../src/logger/logger.ts","../src/logger/logger.types.ts","../src/serializer/serializer.types.ts","../src/data-source.ts","../src/builder.ts"],"names":["LoggerLevels","Logger","logger","config","name","level","INFO","formatter","HttpMessageFormatter","pino","timestamp","makeLogStream","logRequest","request","messageBuilder","HttpMessageBuilder","message","makeMethodText","makeUrlText","build","data","requestData","makeRequestDataObj","Object","keys","length","debug","logResponse","response","duration","makeStatusText","TRACE","DEBUG","includes","responseData","makeResponseDataObj","makeDurationText","info","logError","error","makeStatus","HttpStatuses","INTERNAL_SERVER_ERROR","warn","makeResponse","makeErrorResponse","SerializerArrayFormats","RequestBuilder","baseRequestConfig","options","requestConfig","timeout","responseType","headers","Accept","makeContentType","multipart","urlencoded","xml","makeAuth","auth","bearerToken","Authorization"],"mappings":"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","file":"/home/runner/work/request/request/dist/index.js","sourcesContent":[null,"import pino from 'pino';\nimport { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { HttpMessageBuilder, HttpMessageFormatter, HttpStatuses } from '@iamnnort/config/http';\nimport { LoggerConfig, LoggerLevels } from './logger.types';\n\nexport class Logger {\n private logger: pino.Logger;\n\n private config: Required<LoggerConfig>;\n\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n name: '',\n level: LoggerLevels.INFO,\n ...config,\n };\n\n const formatter = new HttpMessageFormatter();\n\n this.logger = pino(\n {\n name: this.config.name,\n level: this.config.level,\n timestamp: false,\n },\n formatter.makeLogStream(),\n );\n }\n\n logRequest(request: AxiosRequestConfig) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().build();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n this.logger.debug(data, message);\n }\n\n logResponse(response: AxiosResponse, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n response,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeStatusText();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n const responseData = messageBuilder.makeResponseDataObj();\n\n if (Object.keys(responseData).length > 0) {\n data['response'] = responseData;\n }\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n this.logger.info(data, message);\n }\n\n logError(request: AxiosRequestConfig, error: AxiosError, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n error,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeStatusText();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n const responseData = messageBuilder.makeResponseDataObj();\n\n if (Object.keys(responseData).length > 0) {\n data['response'] = responseData;\n }\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n const status = messageBuilder.makeStatus();\n\n if (status >= HttpStatuses.INTERNAL_SERVER_ERROR) {\n this.logger.error(data, message);\n } else {\n this.logger.warn(data, message);\n }\n }\n\n makeResponse<T>(response: AxiosResponse) {\n const loggerMessageBuilder = new HttpMessageBuilder({\n response,\n });\n\n const responseData = loggerMessageBuilder.makeResponse<T>();\n\n return responseData;\n }\n\n makeErrorResponse<T>(error: AxiosError) {\n const loggerMessageBuilder = new HttpMessageBuilder({\n error,\n });\n\n const errorResponseData = loggerMessageBuilder.makeResponse<T>();\n\n return errorResponseData;\n }\n}\n","export { HttpMethods, HttpStatuses } from '@iamnnort/config/http';\n\nexport type LoggerConfig = {\n name: string;\n level: LoggerLevels;\n};\n\nexport enum LoggerLevels {\n FATAL = 'fatal',\n ERROR = 'error',\n WARN = 'warn',\n INFO = 'info',\n DEBUG = 'debug',\n TRACE = 'trace',\n}\n","export type SerializerConfig = {\n arrayFormat: SerializerArrayFormats;\n};\n\nexport enum SerializerArrayFormats {\n INDICES = 'indices',\n BRACKETS = 'brackets',\n REPEAT = 'repeat',\n COMMA = 'comma',\n}\n","import axios, { AxiosError, AxiosResponse } from 'axios';\nimport { HttpMethods } from '@iamnnort/config/http';\nimport { RequestBuilder } from './builder';\nimport { Logger } from './logger/logger';\nimport { BaseRequestConfig, RequestConfig, RequestConfigParams, ResponseConfig, RawResponse } from './types';\nimport { PaginationResponse } from './pagination';\n\nexport class RequestDataSource<\n Entity extends Record<string, any> = any,\n SearchParams extends RequestConfigParams = any,\n SearchResponse extends Record<string, any> = any,\n CreateParams extends RequestConfigParams = any,\n UpdateParams extends RequestConfigParams = any,\n> {\n baseRequestConfig: BaseRequestConfig;\n\n logger: Logger;\n\n constructor(baseRequestConfig: BaseRequestConfig) {\n this.baseRequestConfig = baseRequestConfig;\n\n this.logger = new Logger(this.baseRequestConfig.logger);\n }\n\n common<T>(requestConfig: RequestConfig, responseConfig?: ResponseConfig): Promise<T>;\n\n common<T>(\n requestConfig: RequestConfig,\n responseConfig: ResponseConfig & {\n raw: true;\n },\n ): Promise<RawResponse<T>>;\n\n common<T>(requestConfig: RequestConfig, responseConfig: ResponseConfig = {}) {\n const requestBuilder = new RequestBuilder({\n baseRequestConfig: this.baseRequestConfig,\n requestConfig,\n });\n\n const request = requestBuilder\n .makeContentType()\n .makeAuth()\n .makeUrl()\n .makeMethod()\n .makeParams()\n .makeData()\n .makeSerializer()\n .build();\n\n this.logger.logRequest(request);\n\n const startTime = Date.now();\n\n return axios\n .request(request)\n .then((response: AxiosResponse<T>) => {\n this.logger.logResponse(response, Date.now() - startTime);\n\n if (responseConfig.raw) {\n return this.logger.makeResponse<T>(response);\n }\n\n return response.data;\n })\n .catch((error: AxiosError) => {\n this.logger.logError(request, error, Date.now() - startTime);\n\n if (responseConfig.raw) {\n return this.logger.makeErrorResponse<T>(error);\n }\n\n throw error.response?.data || error.response || new Error(error.message);\n });\n }\n\n bulkCommon<T>(requestConfig: RequestConfig, responseConfig?: ResponseConfig): AsyncGenerator<T[]>;\n\n bulkCommon<T>(\n requestConfig: RequestConfig,\n responseConfig: ResponseConfig & {\n raw: true;\n },\n ): AsyncGenerator<PaginationResponse<T>>;\n\n async *bulkCommon<T>(requestConfig: RequestConfig, responseConfig: ResponseConfig = {}) {\n const { page, pageSize, bulkSize, ...searchDto } = requestConfig.params || {};\n\n const paginationDto = {\n page: page || 1,\n pageSize: pageSize || 30,\n };\n\n const maxPage = bulkSize ? paginationDto.page - 1 + bulkSize : null;\n\n let pagination = {\n total: 0,\n currentPage: 0,\n lastPage: 0,\n from: 0,\n to: 0,\n pageSize: 0,\n };\n\n do {\n const response = await this.common<PaginationResponse<T>>({\n ...requestConfig,\n params: {\n ...paginationDto,\n ...searchDto,\n },\n });\n\n pagination = response.pagination;\n\n if (!response.data?.length) {\n return;\n }\n\n if (responseConfig.raw) {\n yield response;\n } else {\n yield response.data;\n }\n\n paginationDto.page += 1;\n } while (pagination.currentPage !== pagination.lastPage && pagination.currentPage !== maxPage);\n\n if (pagination.currentPage !== pagination.lastPage) {\n if (responseConfig.bulkCallback) {\n await responseConfig.bulkCallback(paginationDto.page);\n }\n }\n }\n\n search(config: SearchParams = {} as SearchParams) {\n return this.common<SearchResponse>({\n ...config,\n method: HttpMethods.GET,\n });\n }\n\n bulkSearch(config: SearchParams = {} as SearchParams) {\n return this.bulkCommon<Entity>({\n ...config,\n method: HttpMethods.GET,\n });\n }\n\n async searchOne(config: SearchParams = {} as SearchParams) {\n const response = await this.common<SearchResponse>({\n ...config,\n method: HttpMethods.GET,\n params: {\n pageSize: 1,\n extended: true,\n strict: true,\n ...config.params,\n },\n });\n\n const data = response.data || [];\n\n return data[0] as Entity;\n }\n\n get(id: number | string, config: SearchParams = {} as SearchParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.GET,\n url: id,\n });\n }\n\n create(config: CreateParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.POST,\n });\n }\n\n bulkCreate(config: Omit<CreateParams, 'data'> & { data: CreateParams['data'][] }) {\n return this.common<Entity[]>({\n ...config,\n method: HttpMethods.POST,\n url: '/bulk',\n data: {\n bulk: config.data,\n },\n });\n }\n\n update(id: number | string, config: UpdateParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.PUT,\n url: id,\n });\n }\n\n bulkUpdate(config: Omit<UpdateParams, 'data'> & { data: UpdateParams['data'][] }) {\n return this.common<Entity[]>({\n ...config,\n method: HttpMethods.PUT,\n url: '/bulk',\n data: {\n bulk: config.data,\n },\n });\n }\n\n remove(id: number | string, config: SearchParams = {} as SearchParams) {\n return this.common<void>({\n ...config,\n method: HttpMethods.DELETE,\n url: id,\n });\n }\n}\n","import { AxiosRequestConfig } from 'axios';\nimport { stringify } from 'qs';\nimport { HttpMethods } from '@iamnnort/config/http';\nimport { BaseRequestConfig, RequestConfig } from './types';\nimport { SerializerArrayFormats } from './serializer';\n\nexport class RequestBuilder {\n baseRequestConfig: BaseRequestConfig;\n requestConfig: RequestConfig;\n\n config: AxiosRequestConfig;\n\n constructor(options: { baseRequestConfig: BaseRequestConfig; requestConfig: RequestConfig }) {\n this.baseRequestConfig = options.baseRequestConfig;\n this.requestConfig = options.requestConfig;\n\n this.config = {\n timeout: options.requestConfig.timeout || options.baseRequestConfig.timeout,\n responseType: options.requestConfig.responseType || options.baseRequestConfig.responseType,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...options.baseRequestConfig.headers,\n ...options.requestConfig.headers,\n },\n };\n }\n\n makeContentType() {\n if (this.requestConfig.multipart) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'multipart/form-data',\n },\n };\n\n return this;\n }\n\n if (this.requestConfig.urlencoded) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n };\n\n return this;\n }\n\n if (this.requestConfig.xml) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'text/xml',\n },\n };\n\n return this;\n }\n\n return this;\n }\n\n makeAuth() {\n const auth = this.requestConfig.auth || this.baseRequestConfig.auth;\n\n if (auth) {\n this.config = {\n ...this.config,\n auth,\n };\n\n return this;\n }\n\n const bearerToken = this.requestConfig.bearerToken || this.baseRequestConfig.bearerToken;\n\n if (bearerToken) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n Authorization: `Bearer ${bearerToken}`,\n },\n };\n\n return this;\n }\n\n const apiKey = this.requestConfig.apiKey || this.baseRequestConfig.apiKey;\n\n if (apiKey) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'x-api-key': apiKey,\n },\n };\n\n return this;\n }\n\n return this;\n }\n\n makeUrl() {\n const baseUrlMap = this.requestConfig.baseUrlMap || this.baseRequestConfig.baseUrlMap;\n const baseUrlName = this.requestConfig.baseUrlName || this.baseRequestConfig.baseUrlName;\n\n const urlParts = [\n baseUrlMap && baseUrlName ? baseUrlMap[baseUrlName] : this.baseRequestConfig.baseUrl,\n this.baseRequestConfig.url,\n ...(this.baseRequestConfig.urlParts || []),\n this.requestConfig.baseUrl,\n this.requestConfig.url,\n ...(this.requestConfig.urlParts || []),\n ].map((urlPart) => urlPart?.toString());\n\n const isSecureProtocol = urlParts.some((urlPart) => urlPart?.includes('https'));\n const protocol = isSecureProtocol ? 'https' : 'http';\n\n const actualUrlParts = urlParts\n .filter((urlPart) => urlPart)\n .map((urlPart) => {\n return urlPart?.replace(/^(https?:\\/\\/|\\/)?(.*?)(\\/?)$/, '$2');\n });\n\n const url = `${protocol}://${actualUrlParts.join('/')}`;\n\n this.config = {\n ...this.config,\n url,\n };\n\n return this;\n }\n\n makeMethod() {\n this.config = {\n ...this.config,\n method: this.requestConfig.method,\n };\n\n return this;\n }\n\n makeData() {\n if (this.requestConfig.method === HttpMethods.GET) {\n return this;\n }\n\n if (this.requestConfig.urlencoded) {\n this.config = {\n ...this.config,\n data: stringify(this.requestConfig.data),\n };\n\n return this;\n }\n\n this.config = {\n ...this.config,\n data: this.requestConfig.data,\n };\n\n return this;\n }\n\n makeParams() {\n this.config = {\n ...this.config,\n params: this.requestConfig.params,\n };\n\n return this;\n }\n\n makeSerializer() {\n this.config = {\n ...this.config,\n paramsSerializer: {\n serialize: (params: any) => {\n return stringify(params, {\n arrayFormat: this.baseRequestConfig.serializer?.arrayFormat || SerializerArrayFormats.BRACKETS,\n skipNulls: true,\n });\n },\n },\n };\n\n return this;\n }\n\n build() {\n return this.config;\n }\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/request/request/dist/index.js","../src/logger/logger.ts","../src/logger/logger.types.ts","../src/serializer/serializer.ts","../src/serializer/serializer.types.ts","../src/signer/signer.ts"],"names":["LoggerLevels","Logger","logger","config","name","level","INFO","formatter","HttpMessageFormatter","pino","timestamp","makeLogStream","logRequest","request","messageBuilder","HttpMessageBuilder","message","makeMethodText","makeUrlText","build","data","requestData","makeRequestDataObj","Object","keys","length","debug","logResponse","response","duration","makeStatusText","TRACE","DEBUG","includes","responseData","makeResponseDataObj","makeDurationText","info","logError","error","makeStatus","HttpStatuses","INTERNAL_SERVER_ERROR","warn","makeResponse","makeErrorResponse","SerializerArrayFormats","Serializer","arrayFormat","BRACKETS","getConfig","serialize","__name","params","stringify","skipNulls","Signer","secretKey","header","sign","rawBody","Math","floor","Date","now","payload"],"mappings":"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","file":"/home/runner/work/request/request/dist/index.js","sourcesContent":[null,"import pino from 'pino';\nimport { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { HttpMessageBuilder, HttpMessageFormatter, HttpStatuses } from '@iamnnort/config/http';\nimport { LoggerConfig, LoggerLevels } from './logger.types';\n\nexport class Logger {\n private logger: pino.Logger;\n\n private config: Required<LoggerConfig>;\n\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n name: '',\n level: LoggerLevels.INFO,\n ...config,\n };\n\n const formatter = new HttpMessageFormatter();\n\n this.logger = pino(\n {\n name: this.config.name,\n level: this.config.level,\n timestamp: false,\n },\n formatter.makeLogStream(),\n );\n }\n\n logRequest(request: AxiosRequestConfig) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().build();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n this.logger.debug(data, message);\n }\n\n logResponse(response: AxiosResponse, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n response,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeStatusText();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n const responseData = messageBuilder.makeResponseDataObj();\n\n if (Object.keys(responseData).length > 0) {\n data['response'] = responseData;\n }\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n this.logger.info(data, message);\n }\n\n logError(request: AxiosRequestConfig, error: AxiosError, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n error,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeStatusText();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n const responseData = messageBuilder.makeResponseDataObj();\n\n if (Object.keys(responseData).length > 0) {\n data['response'] = responseData;\n }\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n const status = messageBuilder.makeStatus();\n\n if (status >= HttpStatuses.INTERNAL_SERVER_ERROR) {\n this.logger.error(data, message);\n } else {\n this.logger.warn(data, message);\n }\n }\n\n makeResponse<T>(response: AxiosResponse) {\n const loggerMessageBuilder = new HttpMessageBuilder({\n response,\n });\n\n const responseData = loggerMessageBuilder.makeResponse<T>();\n\n return responseData;\n }\n\n makeErrorResponse<T>(error: AxiosError) {\n const loggerMessageBuilder = new HttpMessageBuilder({\n error,\n });\n\n const errorResponseData = loggerMessageBuilder.makeResponse<T>();\n\n return errorResponseData;\n }\n}\n","export { HttpMethods, HttpStatuses } from '@iamnnort/config/http';\n\nexport type LoggerConfig = {\n name: string;\n level: LoggerLevels;\n};\n\nexport enum LoggerLevels {\n FATAL = 'fatal',\n ERROR = 'error',\n WARN = 'warn',\n INFO = 'info',\n DEBUG = 'debug',\n TRACE = 'trace',\n}\n","import { stringify } from 'qs';\nimport { SerializerArrayFormats, SerializerConfig } from './serializer.types';\nimport { ParamsSerializerOptions } from 'axios';\n\nexport class Serializer {\n private config: Required<SerializerConfig>;\n\n constructor(config: Partial<SerializerConfig> = {}) {\n this.config = {\n arrayFormat: SerializerArrayFormats.BRACKETS,\n ...config,\n };\n }\n\n getConfig(): ParamsSerializerOptions {\n return {\n serialize: (params: any) => {\n return stringify(params, {\n arrayFormat: this.config.arrayFormat,\n skipNulls: true,\n });\n },\n };\n }\n}\n","export type SerializerConfig = {\n arrayFormat: SerializerArrayFormats;\n};\n\nexport enum SerializerArrayFormats {\n INDICES = 'indices',\n BRACKETS = 'brackets',\n REPEAT = 'repeat',\n COMMA = 'comma',\n}\n","import { createHmac } from 'crypto';\nimport { SignerConfig } from './signer.types';\n\nexport class Signer {\n private config: Required<SignerConfig>;\n\n constructor(config: Partial<SignerConfig> = {}) {\n this.config = {\n secretKey: '',\n header: 'x-signature',\n ...config,\n };\n }\n\n private sign(rawBody: string) {\n const timestamp = Math.floor(Date.now() / 1000);\n const payload = `${timestamp}.${rawBody}`;\n\n const signature = createHmac('sha256', this.config.secretKey).update(payload, 'utf8').digest('hex');\n\n return `t=${timestamp},v1=${signature}`;\n }\n\n getConfig(body: string) {\n if (!this.config.secretKey) {\n return {};\n }\n\n return {\n [this.config.header]: this.sign(body ? JSON.stringify(body) : ''),\n };\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var R=Object.defineProperty;var g=(r,e)=>R(r,"name",{value:e,configurable:!0});import T from"pino";import{HttpMessageBuilder as l,HttpMessageFormatter as x,HttpStatuses as E}from"@iamnnort/config/http";import{HttpMethods as U,HttpStatuses as M}from"@iamnnort/config/http";var c=(function(r){return r.FATAL="fatal",r.ERROR="error",r.WARN="warn",r.INFO="info",r.DEBUG="debug",r.TRACE="trace",r})({});var p=class{static{g(this,"Logger")}logger;config;constructor(e={}){this.config={name:"",level:c.INFO,...e};let t=new x;this.logger=T({name:this.config.name,level:this.config.level,timestamp:!1},t.makeLogStream())}logRequest(e){let t=new l({request:e}),s=t.makeMethodText().makeUrlText().build(),o={},a=t.makeRequestDataObj();Object.keys(a).length>0&&(o.request=a),this.logger.debug(o,s)}logResponse(e,t){let s=new l({response:e,duration:t});s.makeMethodText().makeUrlText().makeStatusText();let o={},a=s.makeRequestDataObj();if(Object.keys(a).length>0&&(o.request=a),[c.TRACE,c.DEBUG].includes(this.config.level)){let n=s.makeResponseDataObj();Object.keys(n).length>0&&(o.response=n)}let i=s.makeDurationText().build();this.logger.info(o,i)}logError(e,t,s){let o=new l({request:e,error:t,duration:s});o.makeMethodText().makeUrlText().makeStatusText();let a={},i=o.makeRequestDataObj();if(Object.keys(i).length>0&&(a.request=i),[c.TRACE,c.DEBUG].includes(this.config.level)){let h=o.makeResponseDataObj();Object.keys(h).length>0&&(a.response=h)}let n=o.makeDurationText().build();o.makeStatus()>=E.INTERNAL_SERVER_ERROR?this.logger.error(a,n):this.logger.warn(a,n)}makeResponse(e){return new l({response:e}).makeResponse()}makeErrorResponse(e){return new l({error:e}).makeResponse()}};var b=(function(r){return r.INDICES="indices",r.BRACKETS="brackets",r.REPEAT="repeat",r.COMMA="comma",r})({});import w from"axios";import{HttpMethods as m}from"@iamnnort/config/http";import{stringify as k}from"qs";import{HttpMethods as D}from"@iamnnort/config/http";var d=class{static{g(this,"RequestBuilder")}baseRequestConfig;requestConfig;config;constructor(e){this.baseRequestConfig=e.baseRequestConfig,this.requestConfig=e.requestConfig,this.config={timeout:e.requestConfig.timeout||e.baseRequestConfig.timeout,responseType:e.requestConfig.responseType||e.baseRequestConfig.responseType,headers:{Accept:"application/json","Content-Type":"application/json",...e.baseRequestConfig.headers,...e.requestConfig.headers}}}makeContentType(){return this.requestConfig.multipart?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"multipart/form-data"}},this):this.requestConfig.urlencoded?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"application/x-www-form-urlencoded"}},this):this.requestConfig.xml?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"text/xml"}},this):this}makeAuth(){let e=this.requestConfig.auth||this.baseRequestConfig.auth;if(e)return this.config={...this.config,auth:e},this;let t=this.requestConfig.bearerToken||this.baseRequestConfig.bearerToken;if(t)return this.config={...this.config,headers:{...this.config.headers,Authorization:`Bearer ${t}`}},this;let s=this.requestConfig.apiKey||this.baseRequestConfig.apiKey;return s?(this.config={...this.config,headers:{...this.config.headers,"x-api-key":s}},this):this}makeUrl(){let e=this.requestConfig.baseUrlMap||this.baseRequestConfig.baseUrlMap,t=this.requestConfig.baseUrlName||this.baseRequestConfig.baseUrlName,s=[e&&t?e[t]:this.baseRequestConfig.baseUrl,this.baseRequestConfig.url,...this.baseRequestConfig.urlParts||[],this.requestConfig.baseUrl,this.requestConfig.url,...this.requestConfig.urlParts||[]].map(u=>u?.toString()),a=s.some(u=>u?.includes("https"))?"https":"http",i=s.filter(u=>u).map(u=>u?.replace(/^(https?:\/\/|\/)?(.*?)(\/?)$/,"$2")),n=`${a}://${i.join("/")}`;return this.config={...this.config,url:n},this}makeMethod(){return this.config={...this.config,method:this.requestConfig.method},this}makeData(){return this.requestConfig.method===D.GET?this:this.requestConfig.urlencoded?(this.config={...this.config,data:k(this.requestConfig.data)},this):(this.config={...this.config,data:this.requestConfig.data},this)}makeParams(){return this.config={...this.config,params:this.requestConfig.params},this}makeSerializer(){return this.config={...this.config,paramsSerializer:{serialize:g(e=>k(e,{arrayFormat:this.baseRequestConfig.serializer?.arrayFormat||b.BRACKETS,skipNulls:!0}),"serialize")}},this}build(){return this.config}};var C=class{static{g(this,"RequestDataSource")}baseRequestConfig;logger;constructor(e){this.baseRequestConfig=e,this.logger=new p(this.baseRequestConfig.logger)}common(e,t={}){let o=new d({baseRequestConfig:this.baseRequestConfig,requestConfig:e}).makeContentType().makeAuth().makeUrl().makeMethod().makeParams().makeData().makeSerializer().build();this.logger.logRequest(o);let a=Date.now();return w.request(o).then(i=>(this.logger.logResponse(i,Date.now()-a),t.raw?this.logger.makeResponse(i):i.data)).catch(i=>{if(this.logger.logError(o,i,Date.now()-a),t.raw)return this.logger.makeErrorResponse(i);throw i.response?.data||i.response||new Error(i.message)})}async*bulkCommon(e,t={}){let{page:s,pageSize:o,bulkSize:a,...i}=e.params||{},n={page:s||1,pageSize:o||30},u=a?n.page-1+a:null,h={total:0,currentPage:0,lastPage:0,from:0,to:0,pageSize:0};do{let f=await this.common({...e,params:{...n,...i}});if(h=f.pagination,!f.data?.length)return;t.raw?yield f:yield f.data,n.page+=1}while(h.currentPage!==h.lastPage&&h.currentPage!==u);h.currentPage!==h.lastPage&&t.bulkCallback&&await t.bulkCallback(n.page)}search(e={}){return this.common({...e,method:m.GET})}bulkSearch(e={}){return this.bulkCommon({...e,method:m.GET})}async searchOne(e={}){return((await this.common({...e,method:m.GET,params:{pageSize:1,extended:!0,strict:!0,...e.params}})).data||[])[0]}get(e,t={}){return this.common({...t,method:m.GET,url:e})}create(e){return this.common({...e,method:m.POST})}bulkCreate(e){return this.common({...e,method:m.POST,url:"/bulk",data:{bulk:e.data}})}update(e,t){return this.common({...t,method:m.PUT,url:e})}bulkUpdate(e){return this.common({...e,method:m.PUT,url:"/bulk",data:{bulk:e.data}})}remove(e,t={}){return this.common({...t,method:m.DELETE,url:e})}};var q=class{static{g(this,"RequestHelper")}static sleep(e){return new Promise(t=>{setTimeout(t,e*1e3)})}};export{U as HttpMethods,M as HttpStatuses,p as Logger,c as LoggerLevels,C as RequestDataSource,q as RequestHelper,b as SerializerArrayFormats};
1
+ var x=Object.defineProperty;var n=(r,e)=>x(r,"name",{value:e,configurable:!0});import T from"pino";import{HttpMessageBuilder as f,HttpMessageFormatter as w,HttpStatuses as y}from"@iamnnort/config/http";import{HttpMethods as j,HttpStatuses as A}from"@iamnnort/config/http";var c=(function(r){return r.FATAL="fatal",r.ERROR="error",r.WARN="warn",r.INFO="info",r.DEBUG="debug",r.TRACE="trace",r})({});var p=class{static{n(this,"Logger")}logger;config;constructor(e={}){this.config={name:"",level:c.INFO,...e};let t=new w;this.logger=T({name:this.config.name,level:this.config.level,timestamp:!1},t.makeLogStream())}logRequest(e){let t=new f({request:e}),s=t.makeMethodText().makeUrlText().build(),o={},i=t.makeRequestDataObj();Object.keys(i).length>0&&(o.request=i),this.logger.debug(o,s)}logResponse(e,t){let s=new f({response:e,duration:t});s.makeMethodText().makeUrlText().makeStatusText();let o={},i=s.makeRequestDataObj();if(Object.keys(i).length>0&&(o.request=i),[c.TRACE,c.DEBUG].includes(this.config.level)){let u=s.makeResponseDataObj();Object.keys(u).length>0&&(o.response=u)}let a=s.makeDurationText().build();this.logger.info(o,a)}logError(e,t,s){let o=new f({request:e,error:t,duration:s});o.makeMethodText().makeUrlText().makeStatusText();let i={},a=o.makeRequestDataObj();if(Object.keys(a).length>0&&(i.request=a),[c.TRACE,c.DEBUG].includes(this.config.level)){let h=o.makeResponseDataObj();Object.keys(h).length>0&&(i.response=h)}let u=o.makeDurationText().build();o.makeStatus()>=y.INTERNAL_SERVER_ERROR?this.logger.error(i,u):this.logger.warn(i,u)}makeResponse(e){return new f({response:e}).makeResponse()}makeErrorResponse(e){return new f({error:e}).makeResponse()}};import{stringify as E}from"qs";var C=(function(r){return r.INDICES="indices",r.BRACKETS="brackets",r.REPEAT="repeat",r.COMMA="comma",r})({});var d=class{static{n(this,"Serializer")}config;constructor(e={}){this.config={arrayFormat:C.BRACKETS,...e}}getConfig(){return{serialize:n(e=>E(e,{arrayFormat:this.config.arrayFormat,skipNulls:!0}),"serialize")}}};import{createHmac as D}from"crypto";var k=class{static{n(this,"Signer")}config;constructor(e={}){this.config={secretKey:"",header:"x-signature",...e}}sign(e){let t=Math.floor(Date.now()/1e3),s=`${t}.${e}`,o=D("sha256",this.config.secretKey).update(s,"utf8").digest("hex");return`t=${t},v1=${o}`}getConfig(e){return this.config.secretKey?{[this.config.header]:this.sign(e?JSON.stringify(e):"")}:{}}};import M from"axios";import{HttpMethods as m}from"@iamnnort/config/http";import{stringify as S}from"qs";import{HttpMethods as P}from"@iamnnort/config/http";var b=class{static{n(this,"RequestBuilder")}baseRequestConfig;requestConfig;config;signer;serializer;constructor(e){this.baseRequestConfig=e.baseRequestConfig,this.requestConfig=e.requestConfig,this.config={timeout:e.requestConfig.timeout||e.baseRequestConfig.timeout,responseType:e.requestConfig.responseType||e.baseRequestConfig.responseType,headers:{Accept:"application/json","Content-Type":"application/json",...e.baseRequestConfig.headers,...e.requestConfig.headers}},this.signer=new k(this.baseRequestConfig.signer),this.serializer=new d(this.baseRequestConfig.serializer)}makeContentType(){return this.requestConfig.multipart?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"multipart/form-data"}},this):this.requestConfig.urlencoded?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"application/x-www-form-urlencoded"}},this):this.requestConfig.xml?(this.config={...this.config,headers:{...this.config.headers,"Content-Type":"text/xml"}},this):this}makeAuth(){let e=this.requestConfig.auth||this.baseRequestConfig.auth;if(e)return this.config={...this.config,auth:e},this;let t=this.requestConfig.bearerToken||this.baseRequestConfig.bearerToken;if(t)return this.config={...this.config,headers:{...this.config.headers,Authorization:`Bearer ${t}`}},this;let s=this.requestConfig.apiKey||this.baseRequestConfig.apiKey;return s?(this.config={...this.config,headers:{...this.config.headers,"x-api-key":s}},this):this}makeUrl(){let e=this.requestConfig.baseUrlMap||this.baseRequestConfig.baseUrlMap,t=this.requestConfig.baseUrlName||this.baseRequestConfig.baseUrlName,s=[e&&t?e[t]:this.baseRequestConfig.baseUrl,this.baseRequestConfig.url,...this.baseRequestConfig.urlParts||[],this.requestConfig.baseUrl,this.requestConfig.url,...this.requestConfig.urlParts||[]].map(g=>g?.toString()),i=s.some(g=>g?.includes("https"))?"https":"http",a=s.filter(g=>g).map(g=>g?.replace(/^(https?:\/\/|\/)?(.*?)(\/?)$/,"$2")),u=`${i}://${a.join("/")}`;return this.config={...this.config,url:u},this}makeMethod(){return this.config={...this.config,method:this.requestConfig.method},this}makeData(){return this.requestConfig.method===P.GET?this:this.requestConfig.urlencoded?(this.config={...this.config,data:S(this.requestConfig.data)},this):(this.config={...this.config,data:this.requestConfig.data},this)}makeParams(){return this.config={...this.config,params:this.requestConfig.params},this}makeSignature(){return this.config={...this.config,headers:{...this.config.headers,...this.signer.getConfig(this.config.data)}},this}makeSerializer(){return this.config={...this.config,paramsSerializer:this.serializer.getConfig()},this}build(){return this.config}};var q=class{static{n(this,"RequestDataSource")}baseRequestConfig;logger;constructor(e){this.baseRequestConfig=e,this.logger=new p(this.baseRequestConfig.logger)}common(e,t={}){let o=new b({baseRequestConfig:this.baseRequestConfig,requestConfig:e}).makeContentType().makeAuth().makeUrl().makeMethod().makeParams().makeData().makeSignature().makeSerializer().build();this.logger.logRequest(o);let i=Date.now();return M.request(o).then(a=>(this.logger.logResponse(a,Date.now()-i),t.raw?this.logger.makeResponse(a):a.data)).catch(a=>{if(this.logger.logError(o,a,Date.now()-i),t.raw)return this.logger.makeErrorResponse(a);throw a.response?.data||a.response||new Error(a.message)})}async*bulkCommon(e,t={}){let{page:s,pageSize:o,bulkSize:i,...a}=e.params||{},u={page:s||1,pageSize:o||30},g=i?u.page-1+i:null,h={total:0,currentPage:0,lastPage:0,from:0,to:0,pageSize:0};do{let l=await this.common({...e,params:{...u,...a}});if(h=l.pagination,!l.data?.length)return;t.raw?yield l:yield l.data,u.page+=1}while(h.currentPage!==h.lastPage&&h.currentPage!==g);h.currentPage!==h.lastPage&&t.bulkCallback&&await t.bulkCallback(u.page)}search(e={}){return this.common({...e,method:m.GET})}bulkSearch(e={}){return this.bulkCommon({...e,method:m.GET})}async searchOne(e={}){return((await this.common({...e,method:m.GET,params:{pageSize:1,extended:!0,strict:!0,...e.params}})).data||[])[0]}get(e,t={}){return this.common({...t,method:m.GET,url:e})}create(e){return this.common({...e,method:m.POST})}bulkCreate(e){return this.common({...e,method:m.POST,url:"/bulk",data:{bulk:e.data}})}update(e,t){return this.common({...t,method:m.PUT,url:e})}bulkUpdate(e){return this.common({...e,method:m.PUT,url:"/bulk",data:{bulk:e.data}})}remove(e,t={}){return this.common({...t,method:m.DELETE,url:e})}};var R=class{static{n(this,"RequestHelper")}static sleep(e){return new Promise(t=>{setTimeout(t,e*1e3)})}};export{j as HttpMethods,A as HttpStatuses,p as Logger,c as LoggerLevels,q as RequestDataSource,R as RequestHelper,d as Serializer,C as SerializerArrayFormats,k as Signer};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger/logger.ts","../src/logger/logger.types.ts","../src/serializer/serializer.types.ts","../src/data-source.ts","../src/builder.ts","../src/helper.ts"],"sourcesContent":["import pino from 'pino';\nimport { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { HttpMessageBuilder, HttpMessageFormatter, HttpStatuses } from '@iamnnort/config/http';\nimport { LoggerConfig, LoggerLevels } from './logger.types';\n\nexport class Logger {\n private logger: pino.Logger;\n\n private config: Required<LoggerConfig>;\n\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n name: '',\n level: LoggerLevels.INFO,\n ...config,\n };\n\n const formatter = new HttpMessageFormatter();\n\n this.logger = pino(\n {\n name: this.config.name,\n level: this.config.level,\n timestamp: false,\n },\n formatter.makeLogStream(),\n );\n }\n\n logRequest(request: AxiosRequestConfig) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().build();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n this.logger.debug(data, message);\n }\n\n logResponse(response: AxiosResponse, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n response,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeStatusText();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n const responseData = messageBuilder.makeResponseDataObj();\n\n if (Object.keys(responseData).length > 0) {\n data['response'] = responseData;\n }\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n this.logger.info(data, message);\n }\n\n logError(request: AxiosRequestConfig, error: AxiosError, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n error,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeStatusText();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n const responseData = messageBuilder.makeResponseDataObj();\n\n if (Object.keys(responseData).length > 0) {\n data['response'] = responseData;\n }\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n const status = messageBuilder.makeStatus();\n\n if (status >= HttpStatuses.INTERNAL_SERVER_ERROR) {\n this.logger.error(data, message);\n } else {\n this.logger.warn(data, message);\n }\n }\n\n makeResponse<T>(response: AxiosResponse) {\n const loggerMessageBuilder = new HttpMessageBuilder({\n response,\n });\n\n const responseData = loggerMessageBuilder.makeResponse<T>();\n\n return responseData;\n }\n\n makeErrorResponse<T>(error: AxiosError) {\n const loggerMessageBuilder = new HttpMessageBuilder({\n error,\n });\n\n const errorResponseData = loggerMessageBuilder.makeResponse<T>();\n\n return errorResponseData;\n }\n}\n","export { HttpMethods, HttpStatuses } from '@iamnnort/config/http';\n\nexport type LoggerConfig = {\n name: string;\n level: LoggerLevels;\n};\n\nexport enum LoggerLevels {\n FATAL = 'fatal',\n ERROR = 'error',\n WARN = 'warn',\n INFO = 'info',\n DEBUG = 'debug',\n TRACE = 'trace',\n}\n","export type SerializerConfig = {\n arrayFormat: SerializerArrayFormats;\n};\n\nexport enum SerializerArrayFormats {\n INDICES = 'indices',\n BRACKETS = 'brackets',\n REPEAT = 'repeat',\n COMMA = 'comma',\n}\n","import axios, { AxiosError, AxiosResponse } from 'axios';\nimport { HttpMethods } from '@iamnnort/config/http';\nimport { RequestBuilder } from './builder';\nimport { Logger } from './logger/logger';\nimport { BaseRequestConfig, RequestConfig, RequestConfigParams, ResponseConfig, RawResponse } from './types';\nimport { PaginationResponse } from './pagination';\n\nexport class RequestDataSource<\n Entity extends Record<string, any> = any,\n SearchParams extends RequestConfigParams = any,\n SearchResponse extends Record<string, any> = any,\n CreateParams extends RequestConfigParams = any,\n UpdateParams extends RequestConfigParams = any,\n> {\n baseRequestConfig: BaseRequestConfig;\n\n logger: Logger;\n\n constructor(baseRequestConfig: BaseRequestConfig) {\n this.baseRequestConfig = baseRequestConfig;\n\n this.logger = new Logger(this.baseRequestConfig.logger);\n }\n\n common<T>(requestConfig: RequestConfig, responseConfig?: ResponseConfig): Promise<T>;\n\n common<T>(\n requestConfig: RequestConfig,\n responseConfig: ResponseConfig & {\n raw: true;\n },\n ): Promise<RawResponse<T>>;\n\n common<T>(requestConfig: RequestConfig, responseConfig: ResponseConfig = {}) {\n const requestBuilder = new RequestBuilder({\n baseRequestConfig: this.baseRequestConfig,\n requestConfig,\n });\n\n const request = requestBuilder\n .makeContentType()\n .makeAuth()\n .makeUrl()\n .makeMethod()\n .makeParams()\n .makeData()\n .makeSerializer()\n .build();\n\n this.logger.logRequest(request);\n\n const startTime = Date.now();\n\n return axios\n .request(request)\n .then((response: AxiosResponse<T>) => {\n this.logger.logResponse(response, Date.now() - startTime);\n\n if (responseConfig.raw) {\n return this.logger.makeResponse<T>(response);\n }\n\n return response.data;\n })\n .catch((error: AxiosError) => {\n this.logger.logError(request, error, Date.now() - startTime);\n\n if (responseConfig.raw) {\n return this.logger.makeErrorResponse<T>(error);\n }\n\n throw error.response?.data || error.response || new Error(error.message);\n });\n }\n\n bulkCommon<T>(requestConfig: RequestConfig, responseConfig?: ResponseConfig): AsyncGenerator<T[]>;\n\n bulkCommon<T>(\n requestConfig: RequestConfig,\n responseConfig: ResponseConfig & {\n raw: true;\n },\n ): AsyncGenerator<PaginationResponse<T>>;\n\n async *bulkCommon<T>(requestConfig: RequestConfig, responseConfig: ResponseConfig = {}) {\n const { page, pageSize, bulkSize, ...searchDto } = requestConfig.params || {};\n\n const paginationDto = {\n page: page || 1,\n pageSize: pageSize || 30,\n };\n\n const maxPage = bulkSize ? paginationDto.page - 1 + bulkSize : null;\n\n let pagination = {\n total: 0,\n currentPage: 0,\n lastPage: 0,\n from: 0,\n to: 0,\n pageSize: 0,\n };\n\n do {\n const response = await this.common<PaginationResponse<T>>({\n ...requestConfig,\n params: {\n ...paginationDto,\n ...searchDto,\n },\n });\n\n pagination = response.pagination;\n\n if (!response.data?.length) {\n return;\n }\n\n if (responseConfig.raw) {\n yield response;\n } else {\n yield response.data;\n }\n\n paginationDto.page += 1;\n } while (pagination.currentPage !== pagination.lastPage && pagination.currentPage !== maxPage);\n\n if (pagination.currentPage !== pagination.lastPage) {\n if (responseConfig.bulkCallback) {\n await responseConfig.bulkCallback(paginationDto.page);\n }\n }\n }\n\n search(config: SearchParams = {} as SearchParams) {\n return this.common<SearchResponse>({\n ...config,\n method: HttpMethods.GET,\n });\n }\n\n bulkSearch(config: SearchParams = {} as SearchParams) {\n return this.bulkCommon<Entity>({\n ...config,\n method: HttpMethods.GET,\n });\n }\n\n async searchOne(config: SearchParams = {} as SearchParams) {\n const response = await this.common<SearchResponse>({\n ...config,\n method: HttpMethods.GET,\n params: {\n pageSize: 1,\n extended: true,\n strict: true,\n ...config.params,\n },\n });\n\n const data = response.data || [];\n\n return data[0] as Entity;\n }\n\n get(id: number | string, config: SearchParams = {} as SearchParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.GET,\n url: id,\n });\n }\n\n create(config: CreateParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.POST,\n });\n }\n\n bulkCreate(config: Omit<CreateParams, 'data'> & { data: CreateParams['data'][] }) {\n return this.common<Entity[]>({\n ...config,\n method: HttpMethods.POST,\n url: '/bulk',\n data: {\n bulk: config.data,\n },\n });\n }\n\n update(id: number | string, config: UpdateParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.PUT,\n url: id,\n });\n }\n\n bulkUpdate(config: Omit<UpdateParams, 'data'> & { data: UpdateParams['data'][] }) {\n return this.common<Entity[]>({\n ...config,\n method: HttpMethods.PUT,\n url: '/bulk',\n data: {\n bulk: config.data,\n },\n });\n }\n\n remove(id: number | string, config: SearchParams = {} as SearchParams) {\n return this.common<void>({\n ...config,\n method: HttpMethods.DELETE,\n url: id,\n });\n }\n}\n","import { AxiosRequestConfig } from 'axios';\nimport { stringify } from 'qs';\nimport { HttpMethods } from '@iamnnort/config/http';\nimport { BaseRequestConfig, RequestConfig } from './types';\nimport { SerializerArrayFormats } from './serializer';\n\nexport class RequestBuilder {\n baseRequestConfig: BaseRequestConfig;\n requestConfig: RequestConfig;\n\n config: AxiosRequestConfig;\n\n constructor(options: { baseRequestConfig: BaseRequestConfig; requestConfig: RequestConfig }) {\n this.baseRequestConfig = options.baseRequestConfig;\n this.requestConfig = options.requestConfig;\n\n this.config = {\n timeout: options.requestConfig.timeout || options.baseRequestConfig.timeout,\n responseType: options.requestConfig.responseType || options.baseRequestConfig.responseType,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...options.baseRequestConfig.headers,\n ...options.requestConfig.headers,\n },\n };\n }\n\n makeContentType() {\n if (this.requestConfig.multipart) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'multipart/form-data',\n },\n };\n\n return this;\n }\n\n if (this.requestConfig.urlencoded) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n };\n\n return this;\n }\n\n if (this.requestConfig.xml) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'text/xml',\n },\n };\n\n return this;\n }\n\n return this;\n }\n\n makeAuth() {\n const auth = this.requestConfig.auth || this.baseRequestConfig.auth;\n\n if (auth) {\n this.config = {\n ...this.config,\n auth,\n };\n\n return this;\n }\n\n const bearerToken = this.requestConfig.bearerToken || this.baseRequestConfig.bearerToken;\n\n if (bearerToken) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n Authorization: `Bearer ${bearerToken}`,\n },\n };\n\n return this;\n }\n\n const apiKey = this.requestConfig.apiKey || this.baseRequestConfig.apiKey;\n\n if (apiKey) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'x-api-key': apiKey,\n },\n };\n\n return this;\n }\n\n return this;\n }\n\n makeUrl() {\n const baseUrlMap = this.requestConfig.baseUrlMap || this.baseRequestConfig.baseUrlMap;\n const baseUrlName = this.requestConfig.baseUrlName || this.baseRequestConfig.baseUrlName;\n\n const urlParts = [\n baseUrlMap && baseUrlName ? baseUrlMap[baseUrlName] : this.baseRequestConfig.baseUrl,\n this.baseRequestConfig.url,\n ...(this.baseRequestConfig.urlParts || []),\n this.requestConfig.baseUrl,\n this.requestConfig.url,\n ...(this.requestConfig.urlParts || []),\n ].map((urlPart) => urlPart?.toString());\n\n const isSecureProtocol = urlParts.some((urlPart) => urlPart?.includes('https'));\n const protocol = isSecureProtocol ? 'https' : 'http';\n\n const actualUrlParts = urlParts\n .filter((urlPart) => urlPart)\n .map((urlPart) => {\n return urlPart?.replace(/^(https?:\\/\\/|\\/)?(.*?)(\\/?)$/, '$2');\n });\n\n const url = `${protocol}://${actualUrlParts.join('/')}`;\n\n this.config = {\n ...this.config,\n url,\n };\n\n return this;\n }\n\n makeMethod() {\n this.config = {\n ...this.config,\n method: this.requestConfig.method,\n };\n\n return this;\n }\n\n makeData() {\n if (this.requestConfig.method === HttpMethods.GET) {\n return this;\n }\n\n if (this.requestConfig.urlencoded) {\n this.config = {\n ...this.config,\n data: stringify(this.requestConfig.data),\n };\n\n return this;\n }\n\n this.config = {\n ...this.config,\n data: this.requestConfig.data,\n };\n\n return this;\n }\n\n makeParams() {\n this.config = {\n ...this.config,\n params: this.requestConfig.params,\n };\n\n return this;\n }\n\n makeSerializer() {\n this.config = {\n ...this.config,\n paramsSerializer: {\n serialize: (params: any) => {\n return stringify(params, {\n arrayFormat: this.baseRequestConfig.serializer?.arrayFormat || SerializerArrayFormats.BRACKETS,\n skipNulls: true,\n });\n },\n },\n };\n\n return this;\n }\n\n build() {\n return this.config;\n }\n}\n","export class RequestHelper {\n static sleep(seconds: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, seconds * 1000);\n });\n }\n}\n"],"mappings":"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","names":["pino","HttpMessageBuilder","HttpMessageFormatter","HttpStatuses","HttpMethods","HttpStatuses","LoggerLevels","Logger","logger","config","name","level","LoggerLevels","INFO","formatter","HttpMessageFormatter","pino","timestamp","makeLogStream","logRequest","request","messageBuilder","HttpMessageBuilder","message","makeMethodText","makeUrlText","build","data","requestData","makeRequestDataObj","Object","keys","length","debug","logResponse","response","duration","makeStatusText","TRACE","DEBUG","includes","responseData","makeResponseDataObj","makeDurationText","info","logError","error","makeStatus","HttpStatuses","INTERNAL_SERVER_ERROR","warn","makeResponse","makeErrorResponse","SerializerArrayFormats","axios","HttpMethods","stringify","HttpMethods","RequestBuilder","baseRequestConfig","requestConfig","config","options","timeout","responseType","headers","Accept","makeContentType","multipart","urlencoded","xml","makeAuth","auth","bearerToken","Authorization","apiKey","makeUrl","baseUrlMap","baseUrlName","urlParts","baseUrl","url","map","urlPart","toString","protocol","some","includes","actualUrlParts","filter","replace","join","makeMethod","method","makeData","HttpMethods","GET","data","stringify","makeParams","params","makeSerializer","paramsSerializer","serialize","__name","arrayFormat","serializer","SerializerArrayFormats","BRACKETS","skipNulls","build","RequestDataSource","baseRequestConfig","logger","Logger","common","requestConfig","responseConfig","request","RequestBuilder","makeContentType","makeAuth","makeUrl","makeMethod","makeParams","makeData","makeSerializer","build","logRequest","startTime","Date","now","axios","then","response","logResponse","raw","makeResponse","data","catch","error","logError","makeErrorResponse","Error","message","bulkCommon","page","pageSize","bulkSize","searchDto","params","paginationDto","maxPage","pagination","total","currentPage","lastPage","from","to","length","bulkCallback","search","config","method","HttpMethods","GET","bulkSearch","searchOne","extended","strict","get","id","url","create","POST","bulkCreate","bulk","update","PUT","bulkUpdate","remove","DELETE","RequestHelper","sleep","seconds","Promise","resolve","setTimeout"]}
1
+ {"version":3,"sources":["../src/logger/logger.ts","../src/logger/logger.types.ts","../src/serializer/serializer.ts","../src/serializer/serializer.types.ts","../src/signer/signer.ts","../src/data-source.ts","../src/builder.ts","../src/helper.ts"],"sourcesContent":["import pino from 'pino';\nimport { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { HttpMessageBuilder, HttpMessageFormatter, HttpStatuses } from '@iamnnort/config/http';\nimport { LoggerConfig, LoggerLevels } from './logger.types';\n\nexport class Logger {\n private logger: pino.Logger;\n\n private config: Required<LoggerConfig>;\n\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n name: '',\n level: LoggerLevels.INFO,\n ...config,\n };\n\n const formatter = new HttpMessageFormatter();\n\n this.logger = pino(\n {\n name: this.config.name,\n level: this.config.level,\n timestamp: false,\n },\n formatter.makeLogStream(),\n );\n }\n\n logRequest(request: AxiosRequestConfig) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().build();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n this.logger.debug(data, message);\n }\n\n logResponse(response: AxiosResponse, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n response,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeStatusText();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n const responseData = messageBuilder.makeResponseDataObj();\n\n if (Object.keys(responseData).length > 0) {\n data['response'] = responseData;\n }\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n this.logger.info(data, message);\n }\n\n logError(request: AxiosRequestConfig, error: AxiosError, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n error,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeStatusText();\n\n const data = {};\n\n const requestData = messageBuilder.makeRequestDataObj();\n\n if (Object.keys(requestData).length > 0) {\n data['request'] = requestData;\n }\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n const responseData = messageBuilder.makeResponseDataObj();\n\n if (Object.keys(responseData).length > 0) {\n data['response'] = responseData;\n }\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n const status = messageBuilder.makeStatus();\n\n if (status >= HttpStatuses.INTERNAL_SERVER_ERROR) {\n this.logger.error(data, message);\n } else {\n this.logger.warn(data, message);\n }\n }\n\n makeResponse<T>(response: AxiosResponse) {\n const loggerMessageBuilder = new HttpMessageBuilder({\n response,\n });\n\n const responseData = loggerMessageBuilder.makeResponse<T>();\n\n return responseData;\n }\n\n makeErrorResponse<T>(error: AxiosError) {\n const loggerMessageBuilder = new HttpMessageBuilder({\n error,\n });\n\n const errorResponseData = loggerMessageBuilder.makeResponse<T>();\n\n return errorResponseData;\n }\n}\n","export { HttpMethods, HttpStatuses } from '@iamnnort/config/http';\n\nexport type LoggerConfig = {\n name: string;\n level: LoggerLevels;\n};\n\nexport enum LoggerLevels {\n FATAL = 'fatal',\n ERROR = 'error',\n WARN = 'warn',\n INFO = 'info',\n DEBUG = 'debug',\n TRACE = 'trace',\n}\n","import { stringify } from 'qs';\nimport { SerializerArrayFormats, SerializerConfig } from './serializer.types';\nimport { ParamsSerializerOptions } from 'axios';\n\nexport class Serializer {\n private config: Required<SerializerConfig>;\n\n constructor(config: Partial<SerializerConfig> = {}) {\n this.config = {\n arrayFormat: SerializerArrayFormats.BRACKETS,\n ...config,\n };\n }\n\n getConfig(): ParamsSerializerOptions {\n return {\n serialize: (params: any) => {\n return stringify(params, {\n arrayFormat: this.config.arrayFormat,\n skipNulls: true,\n });\n },\n };\n }\n}\n","export type SerializerConfig = {\n arrayFormat: SerializerArrayFormats;\n};\n\nexport enum SerializerArrayFormats {\n INDICES = 'indices',\n BRACKETS = 'brackets',\n REPEAT = 'repeat',\n COMMA = 'comma',\n}\n","import { createHmac } from 'crypto';\nimport { SignerConfig } from './signer.types';\n\nexport class Signer {\n private config: Required<SignerConfig>;\n\n constructor(config: Partial<SignerConfig> = {}) {\n this.config = {\n secretKey: '',\n header: 'x-signature',\n ...config,\n };\n }\n\n private sign(rawBody: string) {\n const timestamp = Math.floor(Date.now() / 1000);\n const payload = `${timestamp}.${rawBody}`;\n\n const signature = createHmac('sha256', this.config.secretKey).update(payload, 'utf8').digest('hex');\n\n return `t=${timestamp},v1=${signature}`;\n }\n\n getConfig(body: string) {\n if (!this.config.secretKey) {\n return {};\n }\n\n return {\n [this.config.header]: this.sign(body ? JSON.stringify(body) : ''),\n };\n }\n}\n","import axios, { AxiosError, AxiosResponse } from 'axios';\nimport { HttpMethods } from '@iamnnort/config/http';\nimport { RequestBuilder } from './builder';\nimport { Logger } from './logger/logger';\nimport { BaseRequestConfig, RequestConfig, RequestConfigParams, ResponseConfig, RawResponse } from './types';\nimport { PaginationResponse } from './pagination';\n\nexport class RequestDataSource<\n Entity extends Record<string, any> = any,\n SearchParams extends RequestConfigParams = any,\n SearchResponse extends Record<string, any> = any,\n CreateParams extends RequestConfigParams = any,\n UpdateParams extends RequestConfigParams = any,\n> {\n baseRequestConfig: BaseRequestConfig;\n\n logger: Logger;\n\n constructor(baseRequestConfig: BaseRequestConfig) {\n this.baseRequestConfig = baseRequestConfig;\n\n this.logger = new Logger(this.baseRequestConfig.logger);\n }\n\n common<T>(requestConfig: RequestConfig, responseConfig?: ResponseConfig): Promise<T>;\n\n common<T>(\n requestConfig: RequestConfig,\n responseConfig: ResponseConfig & {\n raw: true;\n },\n ): Promise<RawResponse<T>>;\n\n common<T>(requestConfig: RequestConfig, responseConfig: ResponseConfig = {}) {\n const requestBuilder = new RequestBuilder({\n baseRequestConfig: this.baseRequestConfig,\n requestConfig,\n });\n\n const request = requestBuilder\n .makeContentType()\n .makeAuth()\n .makeUrl()\n .makeMethod()\n .makeParams()\n .makeData()\n .makeSignature()\n .makeSerializer()\n .build();\n\n this.logger.logRequest(request);\n\n const startTime = Date.now();\n\n return axios\n .request(request)\n .then((response: AxiosResponse<T>) => {\n this.logger.logResponse(response, Date.now() - startTime);\n\n if (responseConfig.raw) {\n return this.logger.makeResponse<T>(response);\n }\n\n return response.data;\n })\n .catch((error: AxiosError) => {\n this.logger.logError(request, error, Date.now() - startTime);\n\n if (responseConfig.raw) {\n return this.logger.makeErrorResponse<T>(error);\n }\n\n throw error.response?.data || error.response || new Error(error.message);\n });\n }\n\n bulkCommon<T>(requestConfig: RequestConfig, responseConfig?: ResponseConfig): AsyncGenerator<T[]>;\n\n bulkCommon<T>(\n requestConfig: RequestConfig,\n responseConfig: ResponseConfig & {\n raw: true;\n },\n ): AsyncGenerator<PaginationResponse<T>>;\n\n async *bulkCommon<T>(requestConfig: RequestConfig, responseConfig: ResponseConfig = {}) {\n const { page, pageSize, bulkSize, ...searchDto } = requestConfig.params || {};\n\n const paginationDto = {\n page: page || 1,\n pageSize: pageSize || 30,\n };\n\n const maxPage = bulkSize ? paginationDto.page - 1 + bulkSize : null;\n\n let pagination = {\n total: 0,\n currentPage: 0,\n lastPage: 0,\n from: 0,\n to: 0,\n pageSize: 0,\n };\n\n do {\n const response = await this.common<PaginationResponse<T>>({\n ...requestConfig,\n params: {\n ...paginationDto,\n ...searchDto,\n },\n });\n\n pagination = response.pagination;\n\n if (!response.data?.length) {\n return;\n }\n\n if (responseConfig.raw) {\n yield response;\n } else {\n yield response.data;\n }\n\n paginationDto.page += 1;\n } while (pagination.currentPage !== pagination.lastPage && pagination.currentPage !== maxPage);\n\n if (pagination.currentPage !== pagination.lastPage) {\n if (responseConfig.bulkCallback) {\n await responseConfig.bulkCallback(paginationDto.page);\n }\n }\n }\n\n search(config: SearchParams = {} as SearchParams) {\n return this.common<SearchResponse>({\n ...config,\n method: HttpMethods.GET,\n });\n }\n\n bulkSearch(config: SearchParams = {} as SearchParams) {\n return this.bulkCommon<Entity>({\n ...config,\n method: HttpMethods.GET,\n });\n }\n\n async searchOne(config: SearchParams = {} as SearchParams) {\n const response = await this.common<SearchResponse>({\n ...config,\n method: HttpMethods.GET,\n params: {\n pageSize: 1,\n extended: true,\n strict: true,\n ...config.params,\n },\n });\n\n const data = response.data || [];\n\n return data[0] as Entity;\n }\n\n get(id: number | string, config: SearchParams = {} as SearchParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.GET,\n url: id,\n });\n }\n\n create(config: CreateParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.POST,\n });\n }\n\n bulkCreate(config: Omit<CreateParams, 'data'> & { data: CreateParams['data'][] }) {\n return this.common<Entity[]>({\n ...config,\n method: HttpMethods.POST,\n url: '/bulk',\n data: {\n bulk: config.data,\n },\n });\n }\n\n update(id: number | string, config: UpdateParams) {\n return this.common<Entity>({\n ...config,\n method: HttpMethods.PUT,\n url: id,\n });\n }\n\n bulkUpdate(config: Omit<UpdateParams, 'data'> & { data: UpdateParams['data'][] }) {\n return this.common<Entity[]>({\n ...config,\n method: HttpMethods.PUT,\n url: '/bulk',\n data: {\n bulk: config.data,\n },\n });\n }\n\n remove(id: number | string, config: SearchParams = {} as SearchParams) {\n return this.common<void>({\n ...config,\n method: HttpMethods.DELETE,\n url: id,\n });\n }\n}\n","import { AxiosRequestConfig } from 'axios';\nimport { stringify } from 'qs';\nimport { HttpMethods } from '@iamnnort/config/http';\nimport { BaseRequestConfig, RequestConfig } from './types';\nimport { Serializer } from './serializer';\nimport { Signer } from './signer';\n\nexport class RequestBuilder {\n baseRequestConfig: BaseRequestConfig;\n requestConfig: RequestConfig;\n\n config: AxiosRequestConfig;\n\n signer: Signer;\n serializer: Serializer;\n\n constructor(options: { baseRequestConfig: BaseRequestConfig; requestConfig: RequestConfig }) {\n this.baseRequestConfig = options.baseRequestConfig;\n this.requestConfig = options.requestConfig;\n\n this.config = {\n timeout: options.requestConfig.timeout || options.baseRequestConfig.timeout,\n responseType: options.requestConfig.responseType || options.baseRequestConfig.responseType,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...options.baseRequestConfig.headers,\n ...options.requestConfig.headers,\n },\n };\n\n this.signer = new Signer(this.baseRequestConfig.signer);\n this.serializer = new Serializer(this.baseRequestConfig.serializer);\n }\n\n makeContentType() {\n if (this.requestConfig.multipart) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'multipart/form-data',\n },\n };\n\n return this;\n }\n\n if (this.requestConfig.urlencoded) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n };\n\n return this;\n }\n\n if (this.requestConfig.xml) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'Content-Type': 'text/xml',\n },\n };\n\n return this;\n }\n\n return this;\n }\n\n makeAuth() {\n const auth = this.requestConfig.auth || this.baseRequestConfig.auth;\n\n if (auth) {\n this.config = {\n ...this.config,\n auth,\n };\n\n return this;\n }\n\n const bearerToken = this.requestConfig.bearerToken || this.baseRequestConfig.bearerToken;\n\n if (bearerToken) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n Authorization: `Bearer ${bearerToken}`,\n },\n };\n\n return this;\n }\n\n const apiKey = this.requestConfig.apiKey || this.baseRequestConfig.apiKey;\n\n if (apiKey) {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n 'x-api-key': apiKey,\n },\n };\n\n return this;\n }\n\n return this;\n }\n\n makeUrl() {\n const baseUrlMap = this.requestConfig.baseUrlMap || this.baseRequestConfig.baseUrlMap;\n const baseUrlName = this.requestConfig.baseUrlName || this.baseRequestConfig.baseUrlName;\n\n const urlParts = [\n baseUrlMap && baseUrlName ? baseUrlMap[baseUrlName] : this.baseRequestConfig.baseUrl,\n this.baseRequestConfig.url,\n ...(this.baseRequestConfig.urlParts || []),\n this.requestConfig.baseUrl,\n this.requestConfig.url,\n ...(this.requestConfig.urlParts || []),\n ].map((urlPart) => urlPart?.toString());\n\n const isSecureProtocol = urlParts.some((urlPart) => urlPart?.includes('https'));\n const protocol = isSecureProtocol ? 'https' : 'http';\n\n const actualUrlParts = urlParts\n .filter((urlPart) => urlPart)\n .map((urlPart) => {\n return urlPart?.replace(/^(https?:\\/\\/|\\/)?(.*?)(\\/?)$/, '$2');\n });\n\n const url = `${protocol}://${actualUrlParts.join('/')}`;\n\n this.config = {\n ...this.config,\n url,\n };\n\n return this;\n }\n\n makeMethod() {\n this.config = {\n ...this.config,\n method: this.requestConfig.method,\n };\n\n return this;\n }\n\n makeData() {\n if (this.requestConfig.method === HttpMethods.GET) {\n return this;\n }\n\n if (this.requestConfig.urlencoded) {\n this.config = {\n ...this.config,\n data: stringify(this.requestConfig.data),\n };\n\n return this;\n }\n\n this.config = {\n ...this.config,\n data: this.requestConfig.data,\n };\n\n return this;\n }\n\n makeParams() {\n this.config = {\n ...this.config,\n params: this.requestConfig.params,\n };\n\n return this;\n }\n\n makeSignature() {\n this.config = {\n ...this.config,\n headers: {\n ...this.config.headers,\n ...this.signer.getConfig(this.config.data),\n },\n };\n\n return this;\n }\n\n makeSerializer() {\n this.config = {\n ...this.config,\n paramsSerializer: this.serializer.getConfig(),\n };\n\n return this;\n }\n\n build() {\n return this.config;\n }\n}\n","export class RequestHelper {\n static sleep(seconds: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, seconds * 1000);\n });\n }\n}\n"],"mappings":"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","names":["pino","HttpMessageBuilder","HttpMessageFormatter","HttpStatuses","HttpMethods","HttpStatuses","LoggerLevels","Logger","logger","config","name","level","LoggerLevels","INFO","formatter","HttpMessageFormatter","pino","timestamp","makeLogStream","logRequest","request","messageBuilder","HttpMessageBuilder","message","makeMethodText","makeUrlText","build","data","requestData","makeRequestDataObj","Object","keys","length","debug","logResponse","response","duration","makeStatusText","TRACE","DEBUG","includes","responseData","makeResponseDataObj","makeDurationText","info","logError","error","makeStatus","HttpStatuses","INTERNAL_SERVER_ERROR","warn","makeResponse","makeErrorResponse","stringify","SerializerArrayFormats","Serializer","config","arrayFormat","SerializerArrayFormats","BRACKETS","getConfig","serialize","__name","params","stringify","skipNulls","createHmac","Signer","config","secretKey","header","sign","rawBody","timestamp","Math","floor","Date","now","payload","signature","createHmac","update","digest","getConfig","body","JSON","stringify","axios","HttpMethods","stringify","HttpMethods","RequestBuilder","baseRequestConfig","requestConfig","config","signer","serializer","options","timeout","responseType","headers","Accept","Signer","Serializer","makeContentType","multipart","urlencoded","xml","makeAuth","auth","bearerToken","Authorization","apiKey","makeUrl","baseUrlMap","baseUrlName","urlParts","baseUrl","url","map","urlPart","toString","protocol","some","includes","actualUrlParts","filter","replace","join","makeMethod","method","makeData","HttpMethods","GET","data","stringify","makeParams","params","makeSignature","getConfig","makeSerializer","paramsSerializer","build","RequestDataSource","baseRequestConfig","logger","Logger","common","requestConfig","responseConfig","request","RequestBuilder","makeContentType","makeAuth","makeUrl","makeMethod","makeParams","makeData","makeSignature","makeSerializer","build","logRequest","startTime","Date","now","axios","then","response","logResponse","raw","makeResponse","data","catch","error","logError","makeErrorResponse","Error","message","bulkCommon","page","pageSize","bulkSize","searchDto","params","paginationDto","maxPage","pagination","total","currentPage","lastPage","from","to","length","bulkCallback","search","config","method","HttpMethods","GET","bulkSearch","searchOne","extended","strict","get","id","url","create","POST","bulkCreate","bulk","update","PUT","bulkUpdate","remove","DELETE","RequestHelper","sleep","seconds","Promise","resolve","setTimeout"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iamnnort/request",
3
- "version": "2.0.5",
3
+ "version": "2.1.0",
4
4
  "description": "Request handler for Node.js - Fast - Interactive - Simple",
5
5
  "license": "MIT",
6
6
  "repository": {