@iamnnort/request 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -41
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -13,44 +13,66 @@ yarn add @iamnnort/request
|
|
|
13
13
|
## Usage
|
|
14
14
|
|
|
15
15
|
```typescript
|
|
16
|
-
import { LoggerLevels, RequestDataSource } from '@iamnnort/request';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
|
|
16
|
+
import { HttpMethods, LoggerLevels, RequestDataSource } from '@iamnnort/request';
|
|
17
|
+
|
|
18
|
+
class TodoDataSource extends RequestDataSource {
|
|
19
|
+
constructor() {
|
|
20
|
+
super({
|
|
21
|
+
baseUrl: 'https://dummyjson.com',
|
|
22
|
+
url: '/todos',
|
|
23
|
+
logger: {
|
|
24
|
+
name: 'Todo Api',
|
|
25
|
+
level: LoggerLevels.INFO,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
search() {
|
|
31
|
+
return this.common({
|
|
32
|
+
method: HttpMethods.GET,
|
|
33
|
+
params: {
|
|
34
|
+
limit: 10,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
get(id: number) {
|
|
40
|
+
return this.common({
|
|
41
|
+
method: HttpMethods.GET,
|
|
42
|
+
url: id,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
create(data: { todo: string; completed: boolean; userId: number }) {
|
|
47
|
+
return this.common({
|
|
48
|
+
method: HttpMethods.POST,
|
|
49
|
+
url: '/add',
|
|
50
|
+
data,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
update(id: number, data: { completed: boolean }) {
|
|
55
|
+
return this.common({
|
|
56
|
+
method: HttpMethods.PUT,
|
|
57
|
+
url: id,
|
|
58
|
+
data,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
remove(id: number) {
|
|
63
|
+
return this.common({
|
|
64
|
+
method: HttpMethods.DELETE,
|
|
65
|
+
url: id,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const dataSource = new TodoDataSource();
|
|
71
|
+
|
|
72
|
+
await dataSource.search();
|
|
73
|
+
await dataSource.get(1);
|
|
74
|
+
await dataSource.create({ todo: 'Test todo', completed: false, userId: 1 });
|
|
75
|
+
await dataSource.update(1, { completed: true });
|
|
54
76
|
await dataSource.remove(1);
|
|
55
77
|
```
|
|
56
78
|
|
|
@@ -73,13 +95,17 @@ const dataSource = new RequestDataSource({
|
|
|
73
95
|
|
|
74
96
|
Log levels: `trace`, `debug`, `info`, `warn`, `error`, `fatal`.
|
|
75
97
|
|
|
76
|
-
Logs include the HTTP method, full URL with query parameters,
|
|
98
|
+
Logs include the HTTP method, full URL with query parameters, status code, and duration. Request and response data is logged as structured objects.
|
|
77
99
|
|
|
78
100
|
When the log level is `trace` or `debug`, response body data is also included in the output.
|
|
79
101
|
|
|
102
|
+
Client errors (4xx) are logged as `warn`, server errors (5xx) as `error`.
|
|
103
|
+
|
|
80
104
|
```
|
|
81
|
-
DEBUG (Todo Api): GET https://dummyjson.com/todos?
|
|
82
|
-
INFO (Todo Api): GET https://dummyjson.com/todos?
|
|
105
|
+
DEBUG (Todo Api): GET https://dummyjson.com/todos?limit=10
|
|
106
|
+
INFO (Todo Api): GET https://dummyjson.com/todos?limit=10 200 OK (150ms)
|
|
107
|
+
WARN (Todo Api): GET https://dummyjson.com/todos/999 400 Bad Request (100ms)
|
|
108
|
+
ERROR (Todo Api): GET https://dummyjson.com/todos 500 Internal Server Error (200ms)
|
|
83
109
|
```
|
|
84
110
|
|
|
85
111
|
## Configuration
|
package/dist/index.d.mts
CHANGED
|
@@ -25,13 +25,13 @@ declare class Logger {
|
|
|
25
25
|
logError(request: AxiosRequestConfig, error: AxiosError, duration: number): void;
|
|
26
26
|
makeResponse<T>(response: AxiosResponse): {
|
|
27
27
|
success: boolean;
|
|
28
|
-
status:
|
|
28
|
+
status: HttpStatuses;
|
|
29
29
|
method: _iamnnort_config_http.HttpMethods;
|
|
30
30
|
data: T;
|
|
31
31
|
};
|
|
32
32
|
makeErrorResponse<T>(error: AxiosError): {
|
|
33
33
|
success: boolean;
|
|
34
|
-
status:
|
|
34
|
+
status: HttpStatuses;
|
|
35
35
|
method: _iamnnort_config_http.HttpMethods;
|
|
36
36
|
data: T;
|
|
37
37
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -25,13 +25,13 @@ declare class Logger {
|
|
|
25
25
|
logError(request: AxiosRequestConfig, error: AxiosError, duration: number): void;
|
|
26
26
|
makeResponse<T>(response: AxiosResponse): {
|
|
27
27
|
success: boolean;
|
|
28
|
-
status:
|
|
28
|
+
status: HttpStatuses;
|
|
29
29
|
method: _iamnnort_config_http.HttpMethods;
|
|
30
30
|
data: T;
|
|
31
31
|
};
|
|
32
32
|
makeErrorResponse<T>(error: AxiosError): {
|
|
33
33
|
success: boolean;
|
|
34
|
-
status:
|
|
34
|
+
status: HttpStatuses;
|
|
35
35
|
method: _iamnnort_config_http.HttpMethods;
|
|
36
36
|
data: T;
|
|
37
37
|
};
|
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
|
|
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},this.logger=_pino2.default.call(void 0, {name:this.config.name,level:this.config.level,transport:{target:"pino-pretty",options:{colorize:!1,ignore:"time,pid,hostname"}}})}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;
|
|
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","pino","transport","target","options","colorize","ignore","logRequest","request","message","HttpMessageBuilder","makeMethodText","makeUrlText","makeRequestDataText","build","debug","logResponse","response","duration","messageBuilder","makeStatusText","TRACE","DEBUG","includes","makeResponseDataText","makeDurationText","info","logError","error","makeResponse","makeErrorResponse","SerializerArrayFormats","RequestBuilder","baseRequestConfig","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 } 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 this.logger = pino({\n name: this.config.name,\n level: this.config.level,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: false,\n ignore: 'time,pid,hostname',\n },\n },\n });\n }\n\n logRequest(request: AxiosRequestConfig) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().makeRequestDataText().build();\n\n this.logger.debug(message);\n }\n\n logResponse(response: AxiosResponse, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n response,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeRequestDataText().makeStatusText();\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n messageBuilder.makeResponseDataText();\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n this.logger.info(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().makeRequestDataText().makeStatusText();\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n messageBuilder.makeResponseDataText();\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n this.logger.error(message);\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.types.ts","../src/data-source.ts","../src/builder.ts"],"names":["LoggerLevels","Logger","logger","config","name","level","INFO","pino","transport","target","options","colorize","ignore","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","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, 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 this.logger = pino({\n name: this.config.name,\n level: this.config.level,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: false,\n ignore: 'time,pid,hostname',\n },\n },\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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var R=Object.defineProperty;var g=(r,e)=>R(r,"name",{value:e,configurable:!0});import T from"pino";import{HttpMessageBuilder as l,HttpStatuses as x}from"@iamnnort/config/http";import{HttpMethods as S,HttpStatuses as U}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},this.logger=T({name:this.config.name,level:this.config.level,transport:{target:"pino-pretty",options:{colorize:!1,ignore:"time,pid,hostname"}}})}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()>=x.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 D from"axios";import{HttpMethods as m}from"@iamnnort/config/http";import{stringify as k}from"qs";import{HttpMethods as E}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===E.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 D.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{S as HttpMethods,U as HttpStatuses,p as Logger,c as LoggerLevels,C as RequestDataSource,q as RequestHelper,b as SerializerArrayFormats};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -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 } 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 this.logger = pino({\n name: this.config.name,\n level: this.config.level,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: false,\n ignore: 'time,pid,hostname',\n },\n },\n });\n }\n\n logRequest(request: AxiosRequestConfig) {\n const messageBuilder = new HttpMessageBuilder({\n request,\n });\n\n const message = messageBuilder.makeMethodText().makeUrlText().makeRequestDataText().build();\n\n this.logger.debug(message);\n }\n\n logResponse(response: AxiosResponse, duration: number) {\n const messageBuilder = new HttpMessageBuilder({\n response,\n duration,\n });\n\n messageBuilder.makeMethodText().makeUrlText().makeRequestDataText().makeStatusText();\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n messageBuilder.makeResponseDataText();\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n this.logger.info(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().makeRequestDataText().makeStatusText();\n\n if ([LoggerLevels.TRACE, LoggerLevels.DEBUG].includes(this.config.level)) {\n messageBuilder.makeResponseDataText();\n }\n\n const message = messageBuilder.makeDurationText().build();\n\n this.logger.error(message);\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","HttpMethods","HttpStatuses","LoggerLevels","Logger","logger","config","name","level","LoggerLevels","INFO","pino","transport","target","options","colorize","ignore","logRequest","request","message","HttpMessageBuilder","makeMethodText","makeUrlText","makeRequestDataText","build","debug","logResponse","response","duration","messageBuilder","makeStatusText","TRACE","DEBUG","includes","makeResponseDataText","makeDurationText","info","logError","error","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.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, 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 this.logger = pino({\n name: this.config.name,\n level: this.config.level,\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: false,\n ignore: 'time,pid,hostname',\n },\n },\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","HttpStatuses","HttpMethods","HttpStatuses","LoggerLevels","Logger","logger","config","name","level","LoggerLevels","INFO","pino","transport","target","options","colorize","ignore","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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamnnort/request",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Request handler for Node.js - Fast - Interactive - Simple",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"prepare": "husky"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@iamnnort/config": "^1.1.
|
|
38
|
+
"@iamnnort/config": "^1.1.8",
|
|
39
39
|
"axios": "^1.13.5",
|
|
40
40
|
"pino": "^9.6.0",
|
|
41
41
|
"pino-pretty": "^13.1.3",
|