@squiz/optimization-utils 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/CHANGELOG.md +6 -0
- package/dist/cloudflare/ImplCloudflareKVHttpService.d.ts +2 -2
- package/dist/cloudflare/ImplCloudflareKVHttpService.js +8 -10
- package/dist/cloudflare/ImplCloudflareKVHttpService.js.map +1 -1
- package/dist/config/ConfigurationLoader.d.ts +1 -1
- package/dist/config/ConfigurationLoader.js +3 -4
- package/dist/config/ConfigurationLoader.js.map +1 -1
- package/dist/index.d.ts +0 -11
- package/dist/index.js +0 -11
- package/dist/index.js.map +1 -1
- package/dist/scheduler/EventBridgeScheduler.d.ts +1 -1
- package/dist/scheduler/EventBridgeScheduler.js +4 -5
- package/dist/scheduler/EventBridgeScheduler.js.map +1 -1
- package/dist/testing/mock.d.ts +0 -8
- package/dist/testing/mock.js +1 -35
- package/dist/testing/mock.js.map +1 -1
- package/package.json +4 -1
- package/src/cloudflare/ImplCloudflareKVHttpService.ts +5 -4
- package/src/cloudflare/__tests__/ImplCloudflareKVHttpService.spec.ts +4 -4
- package/src/config/ConfigurationLoader.ts +4 -2
- package/src/config/__tests__/ConfigurationLoader.spec.ts +3 -3
- package/src/event/__tests__/DynamoDBEventMapper.spec.ts +1 -1
- package/src/index.ts +0 -16
- package/src/scheduler/EventBridgeScheduler.ts +1 -2
- package/src/scheduler/__tests__/EventBridgeScheduler.spec.ts +2 -5
- package/src/testing/mock.ts +0 -47
- package/dist/exception/DomainException.d.ts +0 -18
- package/dist/exception/DomainException.js +0 -41
- package/dist/exception/DomainException.js.map +0 -1
- package/dist/httpClient/FetchHttpClient.d.ts +0 -7
- package/dist/httpClient/FetchHttpClient.js +0 -86
- package/dist/httpClient/FetchHttpClient.js.map +0 -1
- package/dist/httpClient/HttpClient.d.ts +0 -25
- package/dist/httpClient/HttpClient.js +0 -45
- package/dist/httpClient/HttpClient.js.map +0 -1
- package/dist/httpClient/HttpRequestBuilder.d.ts +0 -22
- package/dist/httpClient/HttpRequestBuilder.js +0 -126
- package/dist/httpClient/HttpRequestBuilder.js.map +0 -1
- package/dist/logger/Logger.d.ts +0 -10
- package/dist/logger/Logger.js +0 -30
- package/dist/logger/Logger.js.map +0 -1
- package/dist/logger/LoggerMessage.d.ts +0 -43
- package/dist/logger/LoggerMessage.js +0 -111
- package/dist/logger/LoggerMessage.js.map +0 -1
- package/dist/logger/LogsHandler.d.ts +0 -11
- package/dist/logger/LogsHandler.js +0 -66
- package/dist/logger/LogsHandler.js.map +0 -1
- package/dist/logger/RemoteLogger.d.ts +0 -30
- package/dist/logger/RemoteLogger.js +0 -35
- package/dist/logger/RemoteLogger.js.map +0 -1
- package/dist/logger/SquizRemoteLogger.d.ts +0 -53
- package/dist/logger/SquizRemoteLogger.js +0 -128
- package/dist/logger/SquizRemoteLogger.js.map +0 -1
- package/dist/validation/handleValidation.d.ts +0 -2
- package/dist/validation/handleValidation.js +0 -11
- package/dist/validation/handleValidation.js.map +0 -1
- package/dist/valueObject/TenantId.d.ts +0 -10
- package/dist/valueObject/TenantId.js +0 -23
- package/dist/valueObject/TenantId.js.map +0 -1
- package/src/exception/DomainException.ts +0 -34
- package/src/httpClient/FetchHttpClient.ts +0 -92
- package/src/httpClient/HttpClient.ts +0 -46
- package/src/httpClient/HttpRequestBuilder.ts +0 -120
- package/src/httpClient/__tests__/FetchHttpClient.spec.ts +0 -146
- package/src/httpClient/__tests__/HttpClient.spec.ts +0 -52
- package/src/httpClient/__tests__/httpRequestBuilder.spec.ts +0 -75
- package/src/logger/Logger.ts +0 -40
- package/src/logger/LoggerMessage.ts +0 -179
- package/src/logger/LogsHandler.ts +0 -66
- package/src/logger/RemoteLogger.ts +0 -32
- package/src/logger/SquizRemoteLogger.ts +0 -154
- package/src/logger/__tests__/LoggerMessage.spec.ts +0 -147
- package/src/logger/__tests__/LogsHandler.spec.ts +0 -77
- package/src/logger/__tests__/SquizRemoteLogger.spec.ts +0 -185
- package/src/validation/handleValidation.ts +0 -13
- package/src/valueObject/TenantId.ts +0 -27
|
@@ -1,35 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.RemoteLogger = exports.REMOTE_LOG_SCHEMA = exports.RemoteLogLevel = void 0;
|
|
10
|
-
const TenantId_1 = require("./../valueObject/TenantId");
|
|
11
|
-
const inversify_1 = require("inversify");
|
|
12
|
-
const zod_1 = require("zod");
|
|
13
|
-
var RemoteLogLevel;
|
|
14
|
-
(function (RemoteLogLevel) {
|
|
15
|
-
RemoteLogLevel["INFO"] = "info";
|
|
16
|
-
RemoteLogLevel["WARN"] = "warn";
|
|
17
|
-
RemoteLogLevel["ERROR"] = "error";
|
|
18
|
-
})(RemoteLogLevel || (exports.RemoteLogLevel = RemoteLogLevel = {}));
|
|
19
|
-
exports.REMOTE_LOG_SCHEMA = zod_1.z.object({
|
|
20
|
-
tenantId: zod_1.z.string().transform((v) => new TenantId_1.TenantId(v)),
|
|
21
|
-
message: zod_1.z.string(),
|
|
22
|
-
timestamp: zod_1.z
|
|
23
|
-
.string()
|
|
24
|
-
.datetime()
|
|
25
|
-
.transform((v) => new Date(v))
|
|
26
|
-
.optional(),
|
|
27
|
-
level: zod_1.z.nativeEnum(RemoteLogLevel),
|
|
28
|
-
});
|
|
29
|
-
let RemoteLogger = class RemoteLogger {
|
|
30
|
-
};
|
|
31
|
-
exports.RemoteLogger = RemoteLogger;
|
|
32
|
-
exports.RemoteLogger = RemoteLogger = __decorate([
|
|
33
|
-
(0, inversify_1.injectable)()
|
|
34
|
-
], RemoteLogger);
|
|
35
|
-
//# sourceMappingURL=RemoteLogger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteLogger.js","sourceRoot":"","sources":["../../src/logger/RemoteLogger.ts"],"names":[],"mappings":";;;;;;;;;AAAA,wDAAqD;AACrD,yCAAuC;AACvC,6BAAwB;AAExB,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,+BAAa,CAAA;IACb,iCAAe,CAAA;AACjB,CAAC,EAJW,cAAc,8BAAd,cAAc,QAIzB;AAEY,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,mBAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;SAC7B,QAAQ,EAAE;IACb,KAAK,EAAE,OAAC,CAAC,UAAU,CAAC,cAAc,CAAC;CACpC,CAAC,CAAC;AAII,IAAe,YAAY,GAA3B,MAAe,YAAY;CAQjC,CAAA;AARqB,oCAAY;uBAAZ,YAAY;IADjC,IAAA,sBAAU,GAAE;GACS,YAAY,CAQjC"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { RemoteLog, RemoteLogger } from './RemoteLogger';
|
|
3
|
-
import { Logger } from './Logger';
|
|
4
|
-
import { HttpRequestBuilderFactory } from '../httpClient/HttpRequestBuilder';
|
|
5
|
-
export type SquizRemoteLoggerServiceConfig = {
|
|
6
|
-
loggerServiceUrl: URL;
|
|
7
|
-
createLogsPath: string;
|
|
8
|
-
apiKey: string;
|
|
9
|
-
serviceName: string;
|
|
10
|
-
};
|
|
11
|
-
export type SquizRemoteLoggerServiceConfigProvider = () => Promise<SquizRemoteLoggerServiceConfig>;
|
|
12
|
-
declare const CREATE_LOGS_REQUEST_BODY_DTO_SCHEMA: z.ZodArray<z.ZodObject<{
|
|
13
|
-
level: z.ZodEnum<["INFO", "WARNING", "ERROR"]>;
|
|
14
|
-
service: z.ZodString;
|
|
15
|
-
timestamp: z.ZodString;
|
|
16
|
-
host: z.ZodOptional<z.ZodString>;
|
|
17
|
-
userid: z.ZodOptional<z.ZodString>;
|
|
18
|
-
message: z.ZodOptional<z.ZodString>;
|
|
19
|
-
tags: z.ZodOptional<z.ZodString>;
|
|
20
|
-
traceid: z.ZodOptional<z.ZodString>;
|
|
21
|
-
}, "strip", z.ZodTypeAny, {
|
|
22
|
-
level: "INFO" | "ERROR" | "WARNING";
|
|
23
|
-
timestamp: string;
|
|
24
|
-
service: string;
|
|
25
|
-
message?: string | undefined;
|
|
26
|
-
tags?: string | undefined;
|
|
27
|
-
host?: string | undefined;
|
|
28
|
-
userid?: string | undefined;
|
|
29
|
-
traceid?: string | undefined;
|
|
30
|
-
}, {
|
|
31
|
-
level: "INFO" | "ERROR" | "WARNING";
|
|
32
|
-
timestamp: string;
|
|
33
|
-
service: string;
|
|
34
|
-
message?: string | undefined;
|
|
35
|
-
tags?: string | undefined;
|
|
36
|
-
host?: string | undefined;
|
|
37
|
-
userid?: string | undefined;
|
|
38
|
-
traceid?: string | undefined;
|
|
39
|
-
}>, "many">;
|
|
40
|
-
export type CreateLogsRequestBodyDto = z.infer<typeof CREATE_LOGS_REQUEST_BODY_DTO_SCHEMA>;
|
|
41
|
-
export declare class SquizRemoteLogger implements RemoteLogger {
|
|
42
|
-
private readonly config;
|
|
43
|
-
private readonly logger;
|
|
44
|
-
private readonly httpRequestBuilderFactory;
|
|
45
|
-
constructor(config: SquizRemoteLoggerServiceConfigProvider, logger: Logger, httpRequestBuilderFactory: HttpRequestBuilderFactory);
|
|
46
|
-
info(log: Omit<RemoteLog, 'level'>): Promise<void>;
|
|
47
|
-
warn(log: Omit<RemoteLog, 'level'>): Promise<void>;
|
|
48
|
-
error(log: Omit<RemoteLog, 'level'>): Promise<void>;
|
|
49
|
-
log(logs: ReadonlyArray<RemoteLog>): Promise<void>;
|
|
50
|
-
private mapRemoteToRequestBody;
|
|
51
|
-
private callApi;
|
|
52
|
-
}
|
|
53
|
-
export {};
|
|
@@ -1,128 +0,0 @@
|
|
|
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.SquizRemoteLogger = void 0;
|
|
13
|
-
const zod_1 = require("zod");
|
|
14
|
-
const RemoteLogger_1 = require("./RemoteLogger");
|
|
15
|
-
const TenantId_1 = require("../valueObject/TenantId");
|
|
16
|
-
const inversify_1 = require("inversify");
|
|
17
|
-
const Logger_1 = require("./Logger");
|
|
18
|
-
const HttpRequestBuilder_1 = require("../httpClient/HttpRequestBuilder");
|
|
19
|
-
const HttpClient_1 = require("../httpClient/HttpClient");
|
|
20
|
-
const LoggerMessage_1 = require("./LoggerMessage");
|
|
21
|
-
const CREATE_LOGS_REQUEST_BODY_DTO_SCHEMA = zod_1.z
|
|
22
|
-
.object({
|
|
23
|
-
level: zod_1.z.enum(['INFO', 'WARNING', 'ERROR']),
|
|
24
|
-
service: zod_1.z.string(),
|
|
25
|
-
timestamp: zod_1.z.string().datetime(),
|
|
26
|
-
host: zod_1.z.string().optional(),
|
|
27
|
-
userid: zod_1.z.string().optional(),
|
|
28
|
-
message: zod_1.z.string().optional(),
|
|
29
|
-
tags: zod_1.z.string().optional(),
|
|
30
|
-
traceid: zod_1.z.string().optional(),
|
|
31
|
-
})
|
|
32
|
-
.array();
|
|
33
|
-
let SquizRemoteLogger = class SquizRemoteLogger {
|
|
34
|
-
config;
|
|
35
|
-
logger;
|
|
36
|
-
httpRequestBuilderFactory;
|
|
37
|
-
constructor(config, logger, httpRequestBuilderFactory) {
|
|
38
|
-
this.config = config;
|
|
39
|
-
this.logger = logger;
|
|
40
|
-
this.httpRequestBuilderFactory = httpRequestBuilderFactory;
|
|
41
|
-
}
|
|
42
|
-
async info(log) {
|
|
43
|
-
await this.callApi(log.tenantId, [
|
|
44
|
-
await this.mapRemoteToRequestBody({
|
|
45
|
-
...log,
|
|
46
|
-
level: RemoteLogger_1.RemoteLogLevel.INFO,
|
|
47
|
-
}),
|
|
48
|
-
]);
|
|
49
|
-
}
|
|
50
|
-
async warn(log) {
|
|
51
|
-
await this.callApi(log.tenantId, [
|
|
52
|
-
await this.mapRemoteToRequestBody({
|
|
53
|
-
...log,
|
|
54
|
-
level: RemoteLogger_1.RemoteLogLevel.WARN,
|
|
55
|
-
}),
|
|
56
|
-
]);
|
|
57
|
-
}
|
|
58
|
-
async error(log) {
|
|
59
|
-
await this.callApi(log.tenantId, [
|
|
60
|
-
await this.mapRemoteToRequestBody({
|
|
61
|
-
...log,
|
|
62
|
-
level: RemoteLogger_1.RemoteLogLevel.ERROR,
|
|
63
|
-
}),
|
|
64
|
-
]);
|
|
65
|
-
}
|
|
66
|
-
async log(logs) {
|
|
67
|
-
const logsGrouped = await logs.reduce(async (acc, log) => {
|
|
68
|
-
const resolvedAcc = await acc;
|
|
69
|
-
const tenantLogs = resolvedAcc[log.tenantId.valueOf()];
|
|
70
|
-
const mappedLog = await this.mapRemoteToRequestBody(log);
|
|
71
|
-
const mappedLogs = tenantLogs
|
|
72
|
-
? [...tenantLogs, mappedLog]
|
|
73
|
-
: [mappedLog];
|
|
74
|
-
return {
|
|
75
|
-
...resolvedAcc,
|
|
76
|
-
[log.tenantId.valueOf()]: mappedLogs,
|
|
77
|
-
};
|
|
78
|
-
}, Promise.resolve({}));
|
|
79
|
-
const entries = Object.entries(logsGrouped);
|
|
80
|
-
const promises = entries.map(async ([tenantId, logs]) => {
|
|
81
|
-
await this.callApi(new TenantId_1.TenantId(tenantId), logs);
|
|
82
|
-
});
|
|
83
|
-
await Promise.all(promises);
|
|
84
|
-
}
|
|
85
|
-
async mapRemoteToRequestBody({ tenantId, ...log }) {
|
|
86
|
-
const config = await this.config();
|
|
87
|
-
const logLevels = new Map([
|
|
88
|
-
[RemoteLogger_1.RemoteLogLevel.INFO, 'INFO'],
|
|
89
|
-
[RemoteLogger_1.RemoteLogLevel.WARN, 'WARNING'],
|
|
90
|
-
[RemoteLogger_1.RemoteLogLevel.ERROR, 'ERROR'],
|
|
91
|
-
]);
|
|
92
|
-
return {
|
|
93
|
-
...log,
|
|
94
|
-
timestamp: log.timestamp
|
|
95
|
-
? log.timestamp.toISOString()
|
|
96
|
-
: new Date().toISOString(),
|
|
97
|
-
level: logLevels.get(log.level),
|
|
98
|
-
service: config.serviceName,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
async callApi(tenantId, logs) {
|
|
102
|
-
if (!logs.length) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
const logMessage = (0, LoggerMessage_1.createLog)().attachTenantId(tenantId).create(this);
|
|
106
|
-
this.logger.debug(...logMessage(`started receiving config`));
|
|
107
|
-
const config = await this.config();
|
|
108
|
-
this.logger.debug(...logMessage(`finished receiving config`));
|
|
109
|
-
const url = new URL(config.createLogsPath + `/${tenantId.valueOf()}`, config.loggerServiceUrl);
|
|
110
|
-
this.logger.debug(...logMessage(`started request to: ${url.toString()}`));
|
|
111
|
-
await this.httpRequestBuilderFactory
|
|
112
|
-
.create()
|
|
113
|
-
.url(url)
|
|
114
|
-
.method(HttpClient_1.HttpMethod.POST)
|
|
115
|
-
.applicationJson()
|
|
116
|
-
.authorizationByXApiKey(config.apiKey)
|
|
117
|
-
.body(logs)
|
|
118
|
-
.sendRequest();
|
|
119
|
-
this.logger.debug(...logMessage(`finished request to: ${url.toString()}`));
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
exports.SquizRemoteLogger = SquizRemoteLogger;
|
|
123
|
-
exports.SquizRemoteLogger = SquizRemoteLogger = __decorate([
|
|
124
|
-
(0, inversify_1.injectable)(),
|
|
125
|
-
__metadata("design:paramtypes", [Function, Logger_1.Logger,
|
|
126
|
-
HttpRequestBuilder_1.HttpRequestBuilderFactory])
|
|
127
|
-
], SquizRemoteLogger);
|
|
128
|
-
//# sourceMappingURL=SquizRemoteLogger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SquizRemoteLogger.js","sourceRoot":"","sources":["../../src/logger/SquizRemoteLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleValidation = handleValidation;
|
|
4
|
-
const DomainException_1 = require("../exception/DomainException");
|
|
5
|
-
function handleValidation(safeParseResult, errorMessage = 'Validation Failed') {
|
|
6
|
-
if (!safeParseResult.success) {
|
|
7
|
-
throw new DomainException_1.ValidationException(errorMessage, safeParseResult.error.issues);
|
|
8
|
-
}
|
|
9
|
-
return safeParseResult.data;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=handleValidation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handleValidation.js","sourceRoot":"","sources":["../../src/validation/handleValidation.ts"],"names":[],"mappings":";;AAGA,4CASC;AAXD,kEAAmE;AAEnE,SAAgB,gBAAgB,CAC9B,eAA0C,EAC1C,YAAY,GAAG,mBAAmB;IAElC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,qCAAmB,CAAC,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,eAAe,CAAC,IAAI,CAAC;AAC9B,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export declare const TENANT_ID_SCHEMA: z.ZodString;
|
|
3
|
-
export type TenantIdValue = z.infer<typeof TENANT_ID_SCHEMA>;
|
|
4
|
-
export declare class TenantId {
|
|
5
|
-
private readonly value;
|
|
6
|
-
static parse(data: unknown): TenantId;
|
|
7
|
-
constructor(value: TenantIdValue);
|
|
8
|
-
valueOf(): TenantIdValue;
|
|
9
|
-
equals(tenantId: TenantId): boolean;
|
|
10
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TenantId = exports.TENANT_ID_SCHEMA = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const handleValidation_1 = require("../validation/handleValidation");
|
|
6
|
-
exports.TENANT_ID_SCHEMA = zod_1.z.string().min(1);
|
|
7
|
-
class TenantId {
|
|
8
|
-
value;
|
|
9
|
-
static parse(data) {
|
|
10
|
-
return new TenantId((0, handleValidation_1.handleValidation)(exports.TENANT_ID_SCHEMA.safeParse(data), 'The validation of tenant id failed'));
|
|
11
|
-
}
|
|
12
|
-
constructor(value) {
|
|
13
|
-
this.value = value;
|
|
14
|
-
}
|
|
15
|
-
valueOf() {
|
|
16
|
-
return this.value;
|
|
17
|
-
}
|
|
18
|
-
equals(tenantId) {
|
|
19
|
-
return this.value === tenantId.value;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
exports.TenantId = TenantId;
|
|
23
|
-
//# sourceMappingURL=TenantId.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TenantId.js","sourceRoot":"","sources":["../../src/valueObject/TenantId.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,qEAAkE;AAErD,QAAA,gBAAgB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAIlD,MAAa,QAAQ;IAUU;IAT7B,MAAM,CAAC,KAAK,CAAC,IAAa;QACxB,OAAO,IAAI,QAAQ,CACjB,IAAA,mCAAgB,EACd,wBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,EAChC,oCAAoC,CACrC,CACF,CAAC;IACJ,CAAC;IAED,YAA6B,KAAoB;QAApB,UAAK,GAAL,KAAK,CAAe;IAAG,CAAC;IAErD,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC;IACvC,CAAC;CACF;AAnBD,4BAmBC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export abstract class DomainException extends Error {
|
|
2
|
-
protected constructor(message: string) {
|
|
3
|
-
super(message);
|
|
4
|
-
|
|
5
|
-
Error.captureStackTrace(this, this.constructor);
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export class ValidationException extends DomainException {
|
|
10
|
-
constructor(
|
|
11
|
-
readonly message = 'Validation failed',
|
|
12
|
-
readonly details?: unknown,
|
|
13
|
-
) {
|
|
14
|
-
super(message);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export class UnprocessableEntityException extends DomainException {
|
|
19
|
-
constructor(
|
|
20
|
-
readonly message = 'Unprocessable entity',
|
|
21
|
-
readonly details?: unknown,
|
|
22
|
-
) {
|
|
23
|
-
super(message);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export class NotFoundException extends DomainException {
|
|
28
|
-
constructor(
|
|
29
|
-
readonly message = 'Not found',
|
|
30
|
-
readonly details?: unknown,
|
|
31
|
-
) {
|
|
32
|
-
super(message);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { inject, injectable } from 'inversify';
|
|
2
|
-
import { Logger } from '../logger/Logger';
|
|
3
|
-
import { createLog } from '../logger/LoggerMessage';
|
|
4
|
-
import fetch from 'node-fetch-commonjs';
|
|
5
|
-
import {
|
|
6
|
-
HttpClient,
|
|
7
|
-
HttpRequestOptions,
|
|
8
|
-
HttpResponse,
|
|
9
|
-
} from '../httpClient/HttpClient';
|
|
10
|
-
import { captureHTTPsGlobal } from 'aws-xray-sdk';
|
|
11
|
-
import http from 'http';
|
|
12
|
-
import https from 'https';
|
|
13
|
-
|
|
14
|
-
captureHTTPsGlobal(https, true);
|
|
15
|
-
captureHTTPsGlobal(http, true);
|
|
16
|
-
|
|
17
|
-
@injectable()
|
|
18
|
-
export class FetchHttpClient implements HttpClient {
|
|
19
|
-
constructor(
|
|
20
|
-
@inject(Logger)
|
|
21
|
-
private readonly logger: Logger,
|
|
22
|
-
) {}
|
|
23
|
-
|
|
24
|
-
async sendRequest({
|
|
25
|
-
headers = {},
|
|
26
|
-
url,
|
|
27
|
-
method,
|
|
28
|
-
body,
|
|
29
|
-
handleHttpErrorStatusCodes,
|
|
30
|
-
}: HttpRequestOptions): Promise<HttpResponse> {
|
|
31
|
-
const logMessage = createLog()
|
|
32
|
-
.attachMetadata({ url: url.toString() })
|
|
33
|
-
.attachMetadata({ method })
|
|
34
|
-
.create(this);
|
|
35
|
-
const applicationJsonHeader = 'application/json';
|
|
36
|
-
const isApplicationJson = headers['Content-Type'] === applicationJsonHeader;
|
|
37
|
-
const requestBody = body && isApplicationJson ? JSON.stringify(body) : body;
|
|
38
|
-
|
|
39
|
-
this.logger.debug(...logMessage('started sending http request'));
|
|
40
|
-
const response = await fetch(url, {
|
|
41
|
-
headers,
|
|
42
|
-
method,
|
|
43
|
-
...(body && { body: requestBody }),
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
this.logger.debug(...logMessage('finished sending http request'));
|
|
47
|
-
|
|
48
|
-
const responseContentType = response.headers.get('Content-Type');
|
|
49
|
-
const isJsonResponse = responseContentType?.includes(applicationJsonHeader);
|
|
50
|
-
|
|
51
|
-
this.logger.debug(
|
|
52
|
-
...logMessage(
|
|
53
|
-
`the response ` +
|
|
54
|
-
`${isJsonResponse ? 'contains' : 'does not contain'} ` +
|
|
55
|
-
`the application/json header`,
|
|
56
|
-
),
|
|
57
|
-
);
|
|
58
|
-
this.logger.debug(...logMessage('available headers in the next log:'));
|
|
59
|
-
this.logger.debug(...logMessage(response.headers));
|
|
60
|
-
const responseBodyRawText = await response.text();
|
|
61
|
-
const responseBody =
|
|
62
|
-
isJsonResponse && responseBodyRawText
|
|
63
|
-
? JSON.parse(responseBodyRawText)
|
|
64
|
-
: responseBodyRawText;
|
|
65
|
-
const httpResponse = new HttpResponse({
|
|
66
|
-
statusCode: response.status,
|
|
67
|
-
body: responseBody,
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const shouldBeHandled = handleHttpErrorStatusCodes?.includes(
|
|
71
|
-
response.status,
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
if (shouldBeHandled) {
|
|
75
|
-
this.logger.debug(...logMessage('handled NotFound as an empty response'));
|
|
76
|
-
return httpResponse;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (!response.ok) {
|
|
80
|
-
this.logger.error(
|
|
81
|
-
...logMessage(`http response status: ${response.status}`),
|
|
82
|
-
);
|
|
83
|
-
this.logger.debug(...logMessage(`http response body in the next log`));
|
|
84
|
-
this.logger.debug(...logMessage({ responseBodyRawText }));
|
|
85
|
-
throw new Error(`Error occurs calling: ${method} ${url}`, {
|
|
86
|
-
cause: responseBody,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return httpResponse;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { injectable } from 'inversify';
|
|
2
|
-
import { captureHTTPsGlobal } from 'aws-xray-sdk';
|
|
3
|
-
import { ClassFields } from './../typesUtils/utilities';
|
|
4
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
5
|
-
captureHTTPsGlobal(require('https'));
|
|
6
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
7
|
-
captureHTTPsGlobal(require('http'));
|
|
8
|
-
|
|
9
|
-
export type HttpRequestOptions = {
|
|
10
|
-
url: URL | string;
|
|
11
|
-
method: HttpMethod;
|
|
12
|
-
body?: string | Record<string, string> | Array<unknown>;
|
|
13
|
-
headers?: Record<string, string>;
|
|
14
|
-
handleHttpErrorStatusCodes?: Array<number>;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export enum HttpMethod {
|
|
18
|
-
GET = 'GET',
|
|
19
|
-
POST = 'POST',
|
|
20
|
-
DELETE = 'DELETE',
|
|
21
|
-
PUT = 'PUT',
|
|
22
|
-
PATCH = 'PATCH',
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export class HttpResponse {
|
|
26
|
-
readonly statusCode: number;
|
|
27
|
-
readonly body: unknown;
|
|
28
|
-
|
|
29
|
-
constructor(opts: ClassFields<HttpResponse>) {
|
|
30
|
-
this.statusCode = opts.statusCode;
|
|
31
|
-
this.body = opts.body;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
hasHttpStatus(statusCode: number): boolean {
|
|
35
|
-
return this.statusCode === statusCode;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
isNotFound(): boolean {
|
|
39
|
-
return this.hasHttpStatus(404);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
@injectable()
|
|
44
|
-
export abstract class HttpClient {
|
|
45
|
-
abstract sendRequest(opts: HttpRequestOptions): Promise<HttpResponse>;
|
|
46
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { injectable } from 'inversify';
|
|
2
|
-
import { HttpClient, HttpRequestOptions, HttpResponse } from './HttpClient';
|
|
3
|
-
|
|
4
|
-
@injectable()
|
|
5
|
-
export class HttpRequestBuilderFactory {
|
|
6
|
-
constructor(private readonly httpClient: HttpClient) {}
|
|
7
|
-
|
|
8
|
-
create(): Pick<HttpRequestBuilder, 'url'> {
|
|
9
|
-
return new HttpRequestBuilder({}, this.httpClient);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class HttpRequestBuilder {
|
|
14
|
-
constructor(
|
|
15
|
-
private opts: Partial<HttpRequestOptions>,
|
|
16
|
-
private readonly httpClient: HttpClient,
|
|
17
|
-
) {}
|
|
18
|
-
|
|
19
|
-
url(url: HttpRequestOptions['url']): Pick<HttpRequestBuilder, 'method'> {
|
|
20
|
-
return this.setOptions({
|
|
21
|
-
...this.opts,
|
|
22
|
-
url,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
method(method: HttpRequestOptions['method']): HttpRequestBuilder {
|
|
27
|
-
return this.setOptions({
|
|
28
|
-
...this.opts,
|
|
29
|
-
method,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
headers(headers: HttpRequestOptions['headers']): HttpRequestBuilder {
|
|
34
|
-
return this.setOptions({
|
|
35
|
-
...this.opts,
|
|
36
|
-
headers: {
|
|
37
|
-
...this.opts.headers,
|
|
38
|
-
...headers,
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
body(body?: HttpRequestOptions['body']): HttpRequestBuilder {
|
|
44
|
-
return this.setOptions({
|
|
45
|
-
...this.opts,
|
|
46
|
-
body,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
authorizationByBearer(token: string): HttpRequestBuilder {
|
|
51
|
-
return this.setOptions({
|
|
52
|
-
...this.opts,
|
|
53
|
-
headers: {
|
|
54
|
-
...this.opts.headers,
|
|
55
|
-
Authorization: `Bearer ${token}`,
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
authorizationByXApiKey(apiKey: string): HttpRequestBuilder {
|
|
61
|
-
return this.setOptions({
|
|
62
|
-
...this.opts,
|
|
63
|
-
headers: {
|
|
64
|
-
...this.opts.headers,
|
|
65
|
-
'x-api-key': apiKey,
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
applicationJson(): HttpRequestBuilder {
|
|
71
|
-
return this.setOptions({
|
|
72
|
-
...this.opts,
|
|
73
|
-
headers: {
|
|
74
|
-
...this.opts.headers,
|
|
75
|
-
'Content-Type': 'application/json',
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
handleNotFound(): HttpRequestBuilder {
|
|
81
|
-
return this.handleErrorStatusCode(404);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
handleErrorStatusCode(errorStatusCode: number): HttpRequestBuilder {
|
|
85
|
-
return this.setOptions({
|
|
86
|
-
...this.opts,
|
|
87
|
-
handleHttpErrorStatusCodes: [
|
|
88
|
-
...new Set([
|
|
89
|
-
...(this.opts.handleHttpErrorStatusCodes ?? []),
|
|
90
|
-
errorStatusCode,
|
|
91
|
-
]),
|
|
92
|
-
],
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
private setOptions(opts: Partial<HttpRequestOptions>): HttpRequestBuilder {
|
|
97
|
-
this.opts = opts;
|
|
98
|
-
return this;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
sendRequest(): Promise<HttpResponse> {
|
|
102
|
-
if (!this.opts.url) {
|
|
103
|
-
throw new Error('The url is not defined');
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (!this.opts.method) {
|
|
107
|
-
throw new Error('The method is not defined');
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// this is only for typescript information, without extra variable typescript thinks that
|
|
111
|
-
// the url and method are undefined
|
|
112
|
-
const options: HttpRequestOptions = {
|
|
113
|
-
url: this.opts.url,
|
|
114
|
-
method: this.opts.method,
|
|
115
|
-
...this.opts,
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
return this.httpClient.sendRequest(options);
|
|
119
|
-
}
|
|
120
|
-
}
|