@nest-omni/core 3.1.2-6 → 3.1.2-8
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/common/dto/dto-extensions.js +6 -5
- package/common/utils.d.ts +1 -0
- package/common/utils.js +6 -0
- package/http-client/config/http-client.config.d.ts +6 -0
- package/http-client/config/http-client.config.js +87 -0
- package/http-client/config/index.d.ts +1 -0
- package/http-client/config/index.js +17 -0
- package/http-client/decorators/http-client.decorators.d.ts +72 -0
- package/http-client/decorators/http-client.decorators.js +204 -0
- package/http-client/decorators/index.d.ts +1 -0
- package/http-client/decorators/index.js +17 -0
- package/http-client/entities/http-log.entity.d.ts +98 -0
- package/http-client/entities/http-log.entity.js +143 -0
- package/http-client/entities/index.d.ts +1 -0
- package/http-client/entities/index.js +17 -0
- package/http-client/errors/http-client.errors.d.ts +56 -0
- package/http-client/errors/http-client.errors.js +149 -0
- package/http-client/errors/index.d.ts +1 -0
- package/http-client/errors/index.js +17 -0
- package/http-client/examples/advanced-usage.example.d.ts +23 -0
- package/http-client/examples/advanced-usage.example.js +319 -0
- package/http-client/examples/basic-usage.example.d.ts +61 -0
- package/http-client/examples/basic-usage.example.js +171 -0
- package/http-client/examples/index.d.ts +3 -0
- package/http-client/examples/index.js +19 -0
- package/http-client/examples/multi-api-configuration.example.d.ts +98 -0
- package/http-client/examples/multi-api-configuration.example.js +353 -0
- package/http-client/http-client.module.d.ts +11 -0
- package/http-client/http-client.module.js +254 -0
- package/http-client/index.d.ts +10 -0
- package/http-client/index.js +27 -0
- package/http-client/interfaces/api-client-config.interface.d.ts +152 -0
- package/http-client/interfaces/api-client-config.interface.js +12 -0
- package/http-client/interfaces/http-client-config.interface.d.ts +123 -0
- package/http-client/interfaces/http-client-config.interface.js +2 -0
- package/http-client/services/api-client-registry.service.d.ts +40 -0
- package/http-client/services/api-client-registry.service.js +411 -0
- package/http-client/services/cache.service.d.ts +24 -0
- package/http-client/services/cache.service.js +264 -0
- package/http-client/services/circuit-breaker.service.d.ts +33 -0
- package/http-client/services/circuit-breaker.service.js +180 -0
- package/http-client/services/http-client.service.d.ts +43 -0
- package/http-client/services/http-client.service.js +384 -0
- package/http-client/services/http-log-query.service.d.ts +56 -0
- package/http-client/services/http-log-query.service.js +414 -0
- package/http-client/services/index.d.ts +7 -0
- package/http-client/services/index.js +23 -0
- package/http-client/services/log-cleanup.service.d.ts +64 -0
- package/http-client/services/log-cleanup.service.js +268 -0
- package/http-client/services/logging.service.d.ts +36 -0
- package/http-client/services/logging.service.js +445 -0
- package/http-client/utils/call-stack-extractor.util.d.ts +29 -0
- package/http-client/utils/call-stack-extractor.util.js +138 -0
- package/http-client/utils/context-extractor.util.d.ts +44 -0
- package/http-client/utils/context-extractor.util.js +173 -0
- package/http-client/utils/curl-generator.util.d.ts +9 -0
- package/http-client/utils/curl-generator.util.js +169 -0
- package/http-client/utils/index.d.ts +4 -0
- package/http-client/utils/index.js +20 -0
- package/http-client/utils/retry-recorder.util.d.ts +30 -0
- package/http-client/utils/retry-recorder.util.js +143 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.HttpLogEntity = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
const common_1 = require("../../common");
|
|
15
|
+
let HttpLogEntity = class HttpLogEntity extends common_1.AbstractUuidPrimaryEntity {
|
|
16
|
+
};
|
|
17
|
+
exports.HttpLogEntity = HttpLogEntity;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 36, nullable: true }),
|
|
20
|
+
(0, typeorm_1.Index)(),
|
|
21
|
+
__metadata("design:type", String)
|
|
22
|
+
], HttpLogEntity.prototype, "requestId", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 36, nullable: true }),
|
|
25
|
+
(0, typeorm_1.Index)(),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], HttpLogEntity.prototype, "userId", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 10 }),
|
|
30
|
+
(0, typeorm_1.Index)(),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], HttpLogEntity.prototype, "method", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, typeorm_1.Column)({ type: 'text' }),
|
|
35
|
+
(0, typeorm_1.Index)(),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], HttpLogEntity.prototype, "url", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, typeorm_1.Column)({ type: 'json', nullable: true }),
|
|
40
|
+
__metadata("design:type", Object)
|
|
41
|
+
], HttpLogEntity.prototype, "headers", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, typeorm_1.Column)({ type: 'text', nullable: true }),
|
|
44
|
+
__metadata("design:type", String)
|
|
45
|
+
], HttpLogEntity.prototype, "body", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, typeorm_1.Column)({ type: 'json', nullable: true }),
|
|
48
|
+
__metadata("design:type", Object)
|
|
49
|
+
], HttpLogEntity.prototype, "params", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
52
|
+
(0, typeorm_1.Index)(),
|
|
53
|
+
__metadata("design:type", Number)
|
|
54
|
+
], HttpLogEntity.prototype, "statusCode", void 0);
|
|
55
|
+
__decorate([
|
|
56
|
+
(0, typeorm_1.Column)({ type: 'int' }),
|
|
57
|
+
__metadata("design:type", Number)
|
|
58
|
+
], HttpLogEntity.prototype, "responseTime", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, typeorm_1.Column)({ type: 'int', default: 1 }),
|
|
61
|
+
__metadata("design:type", Number)
|
|
62
|
+
], HttpLogEntity.prototype, "attemptCount", void 0);
|
|
63
|
+
__decorate([
|
|
64
|
+
(0, typeorm_1.Column)({ type: 'boolean', default: false }),
|
|
65
|
+
(0, typeorm_1.Index)(),
|
|
66
|
+
__metadata("design:type", Boolean)
|
|
67
|
+
], HttpLogEntity.prototype, "success", void 0);
|
|
68
|
+
__decorate([
|
|
69
|
+
(0, typeorm_1.Column)({ type: 'text', nullable: true }),
|
|
70
|
+
__metadata("design:type", String)
|
|
71
|
+
], HttpLogEntity.prototype, "errorMessage", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
(0, typeorm_1.Column)({ type: 'text', nullable: true }),
|
|
74
|
+
__metadata("design:type", String)
|
|
75
|
+
], HttpLogEntity.prototype, "errorStack", void 0);
|
|
76
|
+
__decorate([
|
|
77
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }),
|
|
78
|
+
__metadata("design:type", String)
|
|
79
|
+
], HttpLogEntity.prototype, "errorCode", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
(0, typeorm_1.Column)({ type: 'json', nullable: true }),
|
|
82
|
+
__metadata("design:type", Object)
|
|
83
|
+
], HttpLogEntity.prototype, "responseHeaders", void 0);
|
|
84
|
+
__decorate([
|
|
85
|
+
(0, typeorm_1.Column)({ type: 'text', nullable: true }),
|
|
86
|
+
__metadata("design:type", String)
|
|
87
|
+
], HttpLogEntity.prototype, "responseBody", void 0);
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
90
|
+
__metadata("design:type", Number)
|
|
91
|
+
], HttpLogEntity.prototype, "responseSize", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
94
|
+
__metadata("design:type", Number)
|
|
95
|
+
], HttpLogEntity.prototype, "requestSize", void 0);
|
|
96
|
+
__decorate([
|
|
97
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 100, nullable: true }),
|
|
98
|
+
__metadata("design:type", String)
|
|
99
|
+
], HttpLogEntity.prototype, "serviceName", void 0);
|
|
100
|
+
__decorate([
|
|
101
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 200, nullable: true }),
|
|
102
|
+
(0, typeorm_1.Index)(),
|
|
103
|
+
__metadata("design:type", String)
|
|
104
|
+
], HttpLogEntity.prototype, "operationName", void 0);
|
|
105
|
+
__decorate([
|
|
106
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 45, nullable: true }),
|
|
107
|
+
__metadata("design:type", String)
|
|
108
|
+
], HttpLogEntity.prototype, "clientIp", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }),
|
|
111
|
+
__metadata("design:type", String)
|
|
112
|
+
], HttpLogEntity.prototype, "source", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
(0, typeorm_1.Column)({ type: 'json', nullable: true }),
|
|
115
|
+
__metadata("design:type", Array)
|
|
116
|
+
], HttpLogEntity.prototype, "tags", void 0);
|
|
117
|
+
__decorate([
|
|
118
|
+
(0, typeorm_1.Column)({ type: 'json', nullable: true }),
|
|
119
|
+
__metadata("design:type", Object)
|
|
120
|
+
], HttpLogEntity.prototype, "metadata", void 0);
|
|
121
|
+
__decorate([
|
|
122
|
+
(0, typeorm_1.Column)({ type: 'json', nullable: true }),
|
|
123
|
+
__metadata("design:type", Array)
|
|
124
|
+
], HttpLogEntity.prototype, "retryRecords", void 0);
|
|
125
|
+
__decorate([
|
|
126
|
+
(0, typeorm_1.Column)({ type: 'boolean', nullable: true }),
|
|
127
|
+
__metadata("design:type", Boolean)
|
|
128
|
+
], HttpLogEntity.prototype, "cacheHit", void 0);
|
|
129
|
+
__decorate([
|
|
130
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 20, nullable: true }),
|
|
131
|
+
__metadata("design:type", String)
|
|
132
|
+
], HttpLogEntity.prototype, "circuitBreakerState", void 0);
|
|
133
|
+
exports.HttpLogEntity = HttpLogEntity = __decorate([
|
|
134
|
+
(0, typeorm_1.Entity)('http_logs'),
|
|
135
|
+
(0, typeorm_1.Index)(['requestId']),
|
|
136
|
+
(0, typeorm_1.Index)(['userId']),
|
|
137
|
+
(0, typeorm_1.Index)(['method']),
|
|
138
|
+
(0, typeorm_1.Index)(['url']),
|
|
139
|
+
(0, typeorm_1.Index)(['statusCode']),
|
|
140
|
+
(0, typeorm_1.Index)(['success']),
|
|
141
|
+
(0, typeorm_1.Index)(['createdAt']),
|
|
142
|
+
(0, typeorm_1.Index)(['method', 'url', 'createdAt'])
|
|
143
|
+
], HttpLogEntity);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './http-log.entity';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./http-log.entity"), exports);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export declare class HttpClientError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly statusCode?: number;
|
|
4
|
+
readonly response?: any;
|
|
5
|
+
readonly config?: any;
|
|
6
|
+
constructor(message: string, code?: string, statusCode?: number, response?: any, config?: any);
|
|
7
|
+
}
|
|
8
|
+
export declare class NetworkError extends HttpClientError {
|
|
9
|
+
constructor(message: string, config?: any);
|
|
10
|
+
}
|
|
11
|
+
export declare class TimeoutError extends HttpClientError {
|
|
12
|
+
constructor(message: string, config?: any);
|
|
13
|
+
}
|
|
14
|
+
export declare class RetryExhaustedError extends HttpClientError {
|
|
15
|
+
readonly attempts: number;
|
|
16
|
+
readonly lastError: any;
|
|
17
|
+
constructor(message: string, attempts: number, lastError: any, config?: any);
|
|
18
|
+
}
|
|
19
|
+
export declare class CircuitBreakerOpenError extends HttpClientError {
|
|
20
|
+
readonly circuitName: string;
|
|
21
|
+
readonly failureCount: number;
|
|
22
|
+
constructor(message: string, circuitName: string, failureCount: number, config?: any);
|
|
23
|
+
}
|
|
24
|
+
export declare class AuthenticationError extends HttpClientError {
|
|
25
|
+
constructor(message: string, statusCode?: number, response?: any, config?: any);
|
|
26
|
+
}
|
|
27
|
+
export declare class AuthorizationError extends HttpClientError {
|
|
28
|
+
constructor(message: string, statusCode?: number, response?: any, config?: any);
|
|
29
|
+
}
|
|
30
|
+
export declare class RateLimitError extends HttpClientError {
|
|
31
|
+
readonly retryAfter?: number;
|
|
32
|
+
readonly limit?: number;
|
|
33
|
+
readonly remaining?: number;
|
|
34
|
+
constructor(message: string, statusCode?: number, response?: any, config?: any, retryAfter?: number, limit?: number, remaining?: number);
|
|
35
|
+
}
|
|
36
|
+
export declare class ServerError extends HttpClientError {
|
|
37
|
+
constructor(message: string, statusCode?: number, response?: any, config?: any);
|
|
38
|
+
}
|
|
39
|
+
export declare class ResponseFormatError extends HttpClientError {
|
|
40
|
+
readonly responseData: any;
|
|
41
|
+
constructor(message: string, responseData: any, config?: any);
|
|
42
|
+
}
|
|
43
|
+
export declare class ApiClientConfigError extends HttpClientError {
|
|
44
|
+
constructor(message: string, config?: any);
|
|
45
|
+
}
|
|
46
|
+
export declare class CacheError extends HttpClientError {
|
|
47
|
+
constructor(message: string, config?: any);
|
|
48
|
+
}
|
|
49
|
+
export declare class ErrorFactory {
|
|
50
|
+
static fromAxiosError(error: any): HttpClientError;
|
|
51
|
+
static createRetryExhaustedError(attempts: number, lastError: any, config?: any): RetryExhaustedError;
|
|
52
|
+
static createCircuitBreakerOpenError(circuitName: string, failureCount: number, config?: any): CircuitBreakerOpenError;
|
|
53
|
+
static createResponseFormatError(message: string, responseData: any, config?: any): ResponseFormatError;
|
|
54
|
+
static createApiClientConfigError(message: string, config?: any): ApiClientConfigError;
|
|
55
|
+
static createCacheError(message: string, config?: any): CacheError;
|
|
56
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorFactory = exports.CacheError = exports.ApiClientConfigError = exports.ResponseFormatError = exports.ServerError = exports.RateLimitError = exports.AuthorizationError = exports.AuthenticationError = exports.CircuitBreakerOpenError = exports.RetryExhaustedError = exports.TimeoutError = exports.NetworkError = exports.HttpClientError = void 0;
|
|
4
|
+
class HttpClientError extends Error {
|
|
5
|
+
constructor(message, code = 'HTTP_CLIENT_ERROR', statusCode, response, config) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'HttpClientError';
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.statusCode = statusCode;
|
|
10
|
+
this.response = response;
|
|
11
|
+
this.config = config;
|
|
12
|
+
Error.captureStackTrace(this, this.constructor);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.HttpClientError = HttpClientError;
|
|
16
|
+
class NetworkError extends HttpClientError {
|
|
17
|
+
constructor(message, config) {
|
|
18
|
+
super(message, 'NETWORK_ERROR', undefined, undefined, config);
|
|
19
|
+
this.name = 'NetworkError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.NetworkError = NetworkError;
|
|
23
|
+
class TimeoutError extends HttpClientError {
|
|
24
|
+
constructor(message, config) {
|
|
25
|
+
super(message, 'TIMEOUT_ERROR', undefined, undefined, config);
|
|
26
|
+
this.name = 'TimeoutError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.TimeoutError = TimeoutError;
|
|
30
|
+
class RetryExhaustedError extends HttpClientError {
|
|
31
|
+
constructor(message, attempts, lastError, config) {
|
|
32
|
+
super(message, 'RETRY_EXHAUSTED', undefined, undefined, config);
|
|
33
|
+
this.name = 'RetryExhaustedError';
|
|
34
|
+
this.attempts = attempts;
|
|
35
|
+
this.lastError = lastError;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.RetryExhaustedError = RetryExhaustedError;
|
|
39
|
+
class CircuitBreakerOpenError extends HttpClientError {
|
|
40
|
+
constructor(message, circuitName, failureCount, config) {
|
|
41
|
+
super(message, 'CIRCUIT_BREAKER_OPEN', 503, undefined, config);
|
|
42
|
+
this.name = 'CircuitBreakerOpenError';
|
|
43
|
+
this.circuitName = circuitName;
|
|
44
|
+
this.failureCount = failureCount;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.CircuitBreakerOpenError = CircuitBreakerOpenError;
|
|
48
|
+
class AuthenticationError extends HttpClientError {
|
|
49
|
+
constructor(message, statusCode = 401, response, config) {
|
|
50
|
+
super(message, 'AUTHENTICATION_ERROR', statusCode, response, config);
|
|
51
|
+
this.name = 'AuthenticationError';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.AuthenticationError = AuthenticationError;
|
|
55
|
+
class AuthorizationError extends HttpClientError {
|
|
56
|
+
constructor(message, statusCode = 403, response, config) {
|
|
57
|
+
super(message, 'AUTHORIZATION_ERROR', statusCode, response, config);
|
|
58
|
+
this.name = 'AuthorizationError';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.AuthorizationError = AuthorizationError;
|
|
62
|
+
class RateLimitError extends HttpClientError {
|
|
63
|
+
constructor(message, statusCode = 429, response, config, retryAfter, limit, remaining) {
|
|
64
|
+
super(message, 'RATE_LIMIT_ERROR', statusCode, response, config);
|
|
65
|
+
this.name = 'RateLimitError';
|
|
66
|
+
this.retryAfter = retryAfter;
|
|
67
|
+
this.limit = limit;
|
|
68
|
+
this.remaining = remaining;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.RateLimitError = RateLimitError;
|
|
72
|
+
class ServerError extends HttpClientError {
|
|
73
|
+
constructor(message, statusCode = 500, response, config) {
|
|
74
|
+
super(message, 'SERVER_ERROR', statusCode, response, config);
|
|
75
|
+
this.name = 'ServerError';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.ServerError = ServerError;
|
|
79
|
+
class ResponseFormatError extends HttpClientError {
|
|
80
|
+
constructor(message, responseData, config) {
|
|
81
|
+
super(message, 'RESPONSE_FORMAT_ERROR', undefined, undefined, config);
|
|
82
|
+
this.name = 'ResponseFormatError';
|
|
83
|
+
this.responseData = responseData;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.ResponseFormatError = ResponseFormatError;
|
|
87
|
+
class ApiClientConfigError extends HttpClientError {
|
|
88
|
+
constructor(message, config) {
|
|
89
|
+
super(message, 'API_CLIENT_CONFIG_ERROR', 500, undefined, config);
|
|
90
|
+
this.name = 'ApiClientConfigError';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.ApiClientConfigError = ApiClientConfigError;
|
|
94
|
+
class CacheError extends HttpClientError {
|
|
95
|
+
constructor(message, config) {
|
|
96
|
+
super(message, 'CACHE_ERROR', undefined, undefined, config);
|
|
97
|
+
this.name = 'CacheError';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.CacheError = CacheError;
|
|
101
|
+
class ErrorFactory {
|
|
102
|
+
static fromAxiosError(error) {
|
|
103
|
+
const config = error.config;
|
|
104
|
+
const response = error.response;
|
|
105
|
+
const message = error.message || 'Unknown error';
|
|
106
|
+
if (!error.response) {
|
|
107
|
+
if (error.code === 'ECONNABORTED') {
|
|
108
|
+
return new TimeoutError(`Request timeout: ${message}`, config);
|
|
109
|
+
}
|
|
110
|
+
return new NetworkError(`Network error: ${message}`, config);
|
|
111
|
+
}
|
|
112
|
+
const statusCode = error.response.status;
|
|
113
|
+
const responseData = error.response.data;
|
|
114
|
+
switch (statusCode) {
|
|
115
|
+
case 401:
|
|
116
|
+
return new AuthenticationError((responseData === null || responseData === void 0 ? void 0 : responseData.message) || 'Authentication failed', statusCode, response, config);
|
|
117
|
+
case 403:
|
|
118
|
+
return new AuthorizationError((responseData === null || responseData === void 0 ? void 0 : responseData.message) || 'Access forbidden', statusCode, response, config);
|
|
119
|
+
case 429:
|
|
120
|
+
const retryAfter = error.response.headers['retry-after'];
|
|
121
|
+
const limit = error.response.headers['x-ratelimit-limit'];
|
|
122
|
+
const remaining = error.response.headers['x-ratelimit-remaining'];
|
|
123
|
+
return new RateLimitError((responseData === null || responseData === void 0 ? void 0 : responseData.message) || 'Rate limit exceeded', statusCode, response, config, retryAfter ? parseInt(retryAfter) : undefined, limit ? parseInt(limit) : undefined, remaining ? parseInt(remaining) : undefined);
|
|
124
|
+
case 500:
|
|
125
|
+
case 502:
|
|
126
|
+
case 503:
|
|
127
|
+
case 504:
|
|
128
|
+
return new ServerError((responseData === null || responseData === void 0 ? void 0 : responseData.message) || `Server error (${statusCode})`, statusCode, response, config);
|
|
129
|
+
default:
|
|
130
|
+
return new HttpClientError((responseData === null || responseData === void 0 ? void 0 : responseData.message) || `HTTP error (${statusCode})`, 'HTTP_ERROR', statusCode, response, config);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
static createRetryExhaustedError(attempts, lastError, config) {
|
|
134
|
+
return new RetryExhaustedError(`Retry failed after ${attempts} attempts. Last error: ${lastError.message}`, attempts, lastError, config);
|
|
135
|
+
}
|
|
136
|
+
static createCircuitBreakerOpenError(circuitName, failureCount, config) {
|
|
137
|
+
return new CircuitBreakerOpenError(`Circuit breaker '${circuitName}' is open after ${failureCount} failures`, circuitName, failureCount, config);
|
|
138
|
+
}
|
|
139
|
+
static createResponseFormatError(message, responseData, config) {
|
|
140
|
+
return new ResponseFormatError(message, responseData, config);
|
|
141
|
+
}
|
|
142
|
+
static createApiClientConfigError(message, config) {
|
|
143
|
+
return new ApiClientConfigError(message, config);
|
|
144
|
+
}
|
|
145
|
+
static createCacheError(message, config) {
|
|
146
|
+
return new CacheError(message, config);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.ErrorFactory = ErrorFactory;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './http-client.errors';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./http-client.errors"), exports);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { HttpClientService } from '../services/http-client.service';
|
|
2
|
+
export declare class GitHubHttpService {
|
|
3
|
+
private httpClient;
|
|
4
|
+
constructor(httpClient: HttpClientService);
|
|
5
|
+
getUser(username: string): Promise<any>;
|
|
6
|
+
searchRepositories(query: string, sort?: string, order?: string): Promise<any>;
|
|
7
|
+
getUserRepositories(username: string): Promise<any>;
|
|
8
|
+
createRepository(repoData: any, token: string): Promise<any>;
|
|
9
|
+
getRepositoryContributors(owner: string, repo: string): Promise<any>;
|
|
10
|
+
getMultipleUsers(usernames: string[]): Promise<any[]>;
|
|
11
|
+
getRepositoryDetails(owner: string, repo: string, options?: {
|
|
12
|
+
public?: boolean;
|
|
13
|
+
}): Promise<any>;
|
|
14
|
+
}
|
|
15
|
+
export declare class PaymentHttpService {
|
|
16
|
+
private httpClient;
|
|
17
|
+
constructor(httpClient: HttpClientService);
|
|
18
|
+
createPayment(paymentData: any, apiKey: string): Promise<any>;
|
|
19
|
+
getPaymentStatus(paymentId: string, apiKey: string): Promise<any>;
|
|
20
|
+
refundPayment(paymentId: string, refundData: any, apiKey: string): Promise<any>;
|
|
21
|
+
callExternalApi(url: string, method?: string, data?: any): Promise<any>;
|
|
22
|
+
private generateIdempotencyKey;
|
|
23
|
+
}
|