@6thbridge/utils 1.8.3 → 1.9.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/lib/data/rabbitmq/index.d.ts +1 -0
- package/lib/data/rabbitmq/index.js +3 -0
- package/lib/data/rabbitmq/index.js.map +1 -1
- package/lib/index.js +0 -8
- package/lib/index.js.map +1 -1
- package/lib/logger/batching.d.ts +7 -0
- package/lib/logger/batching.js +90 -0
- package/lib/logger/batching.js.map +1 -0
- package/lib/logger/batching.spec.d.ts +1 -0
- package/lib/logger/batching.spec.js +108 -0
- package/lib/logger/batching.spec.js.map +1 -0
- package/lib/logger/index.d.ts +1 -0
- package/lib/logger/index.js +5 -1
- package/lib/logger/index.js.map +1 -1
- package/lib/logger/logger-test.js +53 -24
- package/lib/logger/logger-test.js.map +1 -1
- package/lib/logger/logger.js +5 -23
- package/lib/logger/logger.js.map +1 -1
- package/lib/logger/test.spec.js +57 -0
- package/lib/logger/test.spec.js.map +1 -1
- package/lib/middlewares/express.d.ts +1 -0
- package/lib/middlewares/express.js +25 -1
- package/lib/middlewares/express.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/context.entity.d.ts +20 -0
- package/lib/types/context.entity.js +47 -1
- package/lib/types/context.entity.js.map +1 -1
- package/lib/utils/http.d.ts +0 -4
- package/lib/utils/http.js +8 -11
- package/lib/utils/http.js.map +1 -1
- package/lib/utils/http.spec.js +18 -0
- package/lib/utils/http.spec.js.map +1 -1
- package/package.json +6 -4
- package/readme.md +30 -102
|
@@ -2,9 +2,28 @@ import { RequestUserEntity } from './user.entity';
|
|
|
2
2
|
import { RequestClientEntity } from './client.entity';
|
|
3
3
|
import express from 'express';
|
|
4
4
|
import { LoggerInterface } from '../logger';
|
|
5
|
+
import { z } from 'zod';
|
|
5
6
|
import { RabbitMQClient } from '../index';
|
|
6
7
|
import { AuthorizationClientResponse, AuthorizationUserResponse, ValidateUserAccessResponseDTO } from "./authentication.entity";
|
|
7
8
|
export declare const INTERNAL_REQUEST_SOURCE = "internal";
|
|
9
|
+
declare const partnerDataSchema: z.ZodObject<{
|
|
10
|
+
partnerId: z.ZodString;
|
|
11
|
+
name: z.ZodString;
|
|
12
|
+
provider: z.ZodString;
|
|
13
|
+
status: z.ZodString;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
export type PartnerEntity = z.infer<typeof partnerDataSchema>;
|
|
16
|
+
export declare class PartnerContextEntity {
|
|
17
|
+
partner: PartnerEntity;
|
|
18
|
+
logger: LoggerInterface;
|
|
19
|
+
request: express.Request;
|
|
20
|
+
requestId: string;
|
|
21
|
+
requestSource?: string;
|
|
22
|
+
ip?: string;
|
|
23
|
+
locale: string;
|
|
24
|
+
constructor();
|
|
25
|
+
static fromRequest(req: express.Request): PartnerContextEntity;
|
|
26
|
+
}
|
|
8
27
|
export declare class ContextEntity {
|
|
9
28
|
requestSource?: string;
|
|
10
29
|
clientId?: string;
|
|
@@ -37,3 +56,4 @@ export declare class ContextEntity {
|
|
|
37
56
|
static fromAuthorizationResult(req: express.Request, result: ValidateUserAccessResponseDTO): ContextEntity;
|
|
38
57
|
clone(): this;
|
|
39
58
|
}
|
|
59
|
+
export {};
|
|
@@ -33,11 +33,57 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ContextEntity = exports.INTERNAL_REQUEST_SOURCE = void 0;
|
|
36
|
+
exports.ContextEntity = exports.PartnerContextEntity = exports.INTERNAL_REQUEST_SOURCE = void 0;
|
|
37
37
|
const _ = __importStar(require("lodash"));
|
|
38
38
|
const crypto_1 = require("crypto");
|
|
39
39
|
const logger_1 = require("../logger/logger");
|
|
40
|
+
const zod_1 = require("zod");
|
|
41
|
+
const custom_exception_1 = require("./custom.exception");
|
|
40
42
|
exports.INTERNAL_REQUEST_SOURCE = 'internal';
|
|
43
|
+
const partnerDataSchema = zod_1.z.object({
|
|
44
|
+
partnerId: zod_1.z.string().regex(/\S/),
|
|
45
|
+
name: zod_1.z.string().regex(/\S/),
|
|
46
|
+
provider: zod_1.z.string().regex(/\S/),
|
|
47
|
+
status: zod_1.z.string().regex(/\S/),
|
|
48
|
+
});
|
|
49
|
+
class PartnerContextEntity {
|
|
50
|
+
constructor() {
|
|
51
|
+
this.logger = new logger_1.Logger({});
|
|
52
|
+
}
|
|
53
|
+
static fromRequest(req) {
|
|
54
|
+
let partner;
|
|
55
|
+
try {
|
|
56
|
+
const header = req.headers['x-partner-data'];
|
|
57
|
+
if (typeof header !== 'string')
|
|
58
|
+
throw new Error('Missing partner data');
|
|
59
|
+
partner = partnerDataSchema.parse(JSON.parse(header));
|
|
60
|
+
}
|
|
61
|
+
catch (_a) {
|
|
62
|
+
throw new custom_exception_1.CustomException({
|
|
63
|
+
message: "You don't have permission to access this service. ",
|
|
64
|
+
statusCode: 403,
|
|
65
|
+
errorCode: 'InvalidAuthorization',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const context = new PartnerContextEntity();
|
|
69
|
+
context.partner = partner;
|
|
70
|
+
context.request = req;
|
|
71
|
+
context.requestId = req.headers['x-request-id'] || (0, crypto_1.randomUUID)();
|
|
72
|
+
context.requestSource = (req.headers['x-request-source'] || req.headers.source);
|
|
73
|
+
context.ip = req.headers['cf-connecting-ip'] || req.ip;
|
|
74
|
+
context.locale = req.headers['x-locale-id'] || 'en';
|
|
75
|
+
context.logger.setProps({
|
|
76
|
+
requestId: context.requestId,
|
|
77
|
+
requestSource: context.requestSource,
|
|
78
|
+
ip: context.ip,
|
|
79
|
+
url: req.originalUrl,
|
|
80
|
+
partnerId: context.partner.partnerId,
|
|
81
|
+
provider: context.partner.provider,
|
|
82
|
+
});
|
|
83
|
+
return context;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.PartnerContextEntity = PartnerContextEntity;
|
|
41
87
|
class ContextEntity {
|
|
42
88
|
constructor() {
|
|
43
89
|
this.logger = new logger_1.Logger({});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.entity.js","sourceRoot":"","sources":["../../src/types/context.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAA4B;AAK5B,mCAAoC;AACpC,6CAA0C;
|
|
1
|
+
{"version":3,"file":"context.entity.js","sourceRoot":"","sources":["../../src/types/context.entity.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/http.d.ts
CHANGED
|
@@ -12,10 +12,6 @@ export interface FormattedAxiosError {
|
|
|
12
12
|
trace?: string | undefined;
|
|
13
13
|
[x: string]: any;
|
|
14
14
|
}
|
|
15
|
-
export declare class AxiosClass {
|
|
16
|
-
static resolveAxiosError(error: Error | AxiosError | any): FormattedAxiosError;
|
|
17
|
-
static getAxiosInstance(config?: CreateAxiosDefaults): import("axios").AxiosInstance;
|
|
18
|
-
}
|
|
19
15
|
export declare class HttpUtil {
|
|
20
16
|
private static getRequestTag;
|
|
21
17
|
private static getLoggableRequestData;
|
package/lib/utils/http.js
CHANGED
|
@@ -3,20 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.HttpUtil =
|
|
6
|
+
exports.HttpUtil = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
8
|
const axios_better_stacktrace_1 = __importDefault(require("axios-better-stacktrace"));
|
|
9
9
|
const logger_1 = require("../logger");
|
|
10
10
|
const storage_1 = require("./storage");
|
|
11
|
-
class AxiosClass {
|
|
12
|
-
static resolveAxiosError(error) {
|
|
13
|
-
return HttpUtil.resolveAxiosError(error);
|
|
14
|
-
}
|
|
15
|
-
static getAxiosInstance(config) {
|
|
16
|
-
return HttpUtil.getAxiosInstance(config);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
exports.AxiosClass = AxiosClass;
|
|
20
11
|
class HttpUtil {
|
|
21
12
|
static getRequestTag(headers) {
|
|
22
13
|
var _a;
|
|
@@ -77,12 +68,17 @@ class HttpUtil {
|
|
|
77
68
|
return headerSource === 'internal' || String((config === null || config === void 0 ? void 0 : config.url) || '').includes('/v1/logs');
|
|
78
69
|
}
|
|
79
70
|
static buildRequestLog(config) {
|
|
71
|
+
var _a;
|
|
72
|
+
const endpoint = ((_a = axios_1.default.getUri(Object.assign(Object.assign({}, config), { params: null }))) !== null && _a !== void 0 ? _a : '')
|
|
73
|
+
.replace(/^(?:[a-z][a-z\d+.-]*:)?\/\/[^/?#]*/i, '')
|
|
74
|
+
.split(/[?#]/, 1)[0];
|
|
80
75
|
return {
|
|
81
76
|
requestId: HttpUtil.getRequestIdHeader(config === null || config === void 0 ? void 0 : config.headers),
|
|
82
77
|
requestTag: HttpUtil.getRequestTag(config === null || config === void 0 ? void 0 : config.headers),
|
|
83
78
|
method: config === null || config === void 0 ? void 0 : config.method,
|
|
84
79
|
baseURL: config === null || config === void 0 ? void 0 : config.baseURL,
|
|
85
80
|
url: config === null || config === void 0 ? void 0 : config.url,
|
|
81
|
+
endpoint: endpoint.startsWith('/') ? endpoint : `/${endpoint}`,
|
|
86
82
|
headers: config === null || config === void 0 ? void 0 : config.headers,
|
|
87
83
|
params: config === null || config === void 0 ? void 0 : config.params,
|
|
88
84
|
data: HttpUtil.getLoggableRequestData(config === null || config === void 0 ? void 0 : config.data),
|
|
@@ -149,6 +145,7 @@ class HttpUtil {
|
|
|
149
145
|
const durationMs = typeof start === 'number' ? performance.now() - start : undefined;
|
|
150
146
|
if (!HttpUtil.shouldSkipLogging(response === null || response === void 0 ? void 0 : response.config)) {
|
|
151
147
|
requestLogger.info(HttpUtil.withRequestTag(requestTag, 'HTTP Response Received'), {
|
|
148
|
+
logType: 'http-metrics',
|
|
152
149
|
durationMs,
|
|
153
150
|
request: HttpUtil.buildRequestLog(response === null || response === void 0 ? void 0 : response.config),
|
|
154
151
|
response: {
|
|
@@ -175,7 +172,7 @@ class HttpUtil {
|
|
|
175
172
|
const durationMs = typeof start === 'number' ? performance.now() - start : undefined;
|
|
176
173
|
const requestLogger = ((_c = config === null || config === void 0 ? void 0 : config.__meta) === null || _c === void 0 ? void 0 : _c.logger) || logger_1.logger;
|
|
177
174
|
const timedOut = (error === null || error === void 0 ? void 0 : error.code) === 'ECONNABORTED' || (error === null || error === void 0 ? void 0 : error.code) === 'ETIMEDOUT' || /timeout/i.test((error === null || error === void 0 ? void 0 : error.message) || '');
|
|
178
|
-
requestLogger.error(HttpUtil.withRequestTag(requestTag, timedOut ? 'HTTP Request Timed Out' : 'HTTP Request Failed'), Object.assign(Object.assign({ durationMs, request: HttpUtil.buildRequestLog(config) }, ((error === null || error === void 0 ? void 0 : error.response) ? { response: {
|
|
175
|
+
requestLogger.error(HttpUtil.withRequestTag(requestTag, timedOut ? 'HTTP Request Timed Out' : 'HTTP Request Failed'), Object.assign(Object.assign({ logType: 'http-metrics', durationMs, request: HttpUtil.buildRequestLog(config) }, ((error === null || error === void 0 ? void 0 : error.response) ? { response: {
|
|
179
176
|
status: error.response.status,
|
|
180
177
|
statusText: error.response.statusText,
|
|
181
178
|
headers: error.response.headers,
|
package/lib/utils/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA6D;AAC7D,sFAA4D;AAC5D,sCAAiC;AACjC,uCAA2C;AAiB3C,MAAa,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/http.spec.js
CHANGED
|
@@ -47,6 +47,8 @@ describe('HttpUtil', () => {
|
|
|
47
47
|
expect(logger_1.logger.info).toHaveBeenCalledTimes(2);
|
|
48
48
|
expect(logger_1.logger.info.mock.calls[0][0]).toContain('HTTP Request Started');
|
|
49
49
|
expect(logger_1.logger.info.mock.calls[1][0]).toContain('HTTP Response Received');
|
|
50
|
+
expect(logger_1.logger.info.mock.calls[0][1]).not.toHaveProperty('logType');
|
|
51
|
+
expect(logger_1.logger.info.mock.calls[1][1].logType).toBe('http-metrics');
|
|
50
52
|
}));
|
|
51
53
|
it('logs timeout failures without a response event', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
52
54
|
const instance = http_1.HttpUtil.getMonitoredAxios({
|
|
@@ -61,6 +63,7 @@ describe('HttpUtil', () => {
|
|
|
61
63
|
expect(logger_1.logger.info.mock.calls[0][0]).toContain('HTTP Request Started');
|
|
62
64
|
expect(logger_1.logger.error.mock.calls[0][0]).toContain('HTTP Request Timed Out');
|
|
63
65
|
expect(logger_1.logger.error.mock.calls[0][1]).not.toHaveProperty('response');
|
|
66
|
+
expect(logger_1.logger.error.mock.calls[0][1].logType).toBe('http-metrics');
|
|
64
67
|
}));
|
|
65
68
|
it('logs non-timeout rejections as failed requests', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
69
|
const instance = http_1.HttpUtil.getMonitoredAxios({
|
|
@@ -68,8 +71,23 @@ describe('HttpUtil', () => {
|
|
|
68
71
|
});
|
|
69
72
|
yield expect(instance.request(requestConfig)).rejects.toThrow('connection refused');
|
|
70
73
|
expect(logger_1.logger.error.mock.calls[0][0]).toContain('HTTP Request Failed');
|
|
74
|
+
expect(logger_1.logger.error.mock.calls[0][1].logType).toBe('http-metrics');
|
|
71
75
|
}));
|
|
72
76
|
describe('buildRequestLog', () => {
|
|
77
|
+
it.each([
|
|
78
|
+
['https://example.com/api', '/Payments/123/?q=1#detail', '/api/Payments/123/'],
|
|
79
|
+
['https://example.com/api', 'https://other.example/a%2Fb?q=1#detail', '/a%2Fb'],
|
|
80
|
+
[undefined, 'relative/path?q=1#detail', '/relative/path'],
|
|
81
|
+
[undefined, '//example.com/path?q=1', '/path'],
|
|
82
|
+
[undefined, 'https://example.com', '/'],
|
|
83
|
+
[undefined, undefined, '/'],
|
|
84
|
+
])('derives endpoint from Axios (%s, %s)', (baseURL, url, endpoint) => {
|
|
85
|
+
const requestLog = http_1.HttpUtil.buildRequestLog({
|
|
86
|
+
baseURL, url, httpLogContext: { endpoint: '/ignored' },
|
|
87
|
+
});
|
|
88
|
+
expect(requestLog.endpoint).toBe(endpoint);
|
|
89
|
+
expect(requestLog.url).toBe(url);
|
|
90
|
+
});
|
|
73
91
|
it('parses stringified JSON request bodies before logging', () => {
|
|
74
92
|
const requestLog = http_1.HttpUtil.buildRequestLog({
|
|
75
93
|
method: 'post',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.spec.js","sourceRoot":"","sources":["../../src/utils/http.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1B,MAAM,EAAE;QACJ,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;QAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;KACnB;CACJ,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAEtD,iCAAkC;AAClC,sCAAmC;AAEnC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACtB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAEvC,MAAM,aAAa,GAAG;QAClB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,UAAU;QACf,OAAO,EAAE;YACL,cAAc,EAAE,WAAW;YAC3B,eAAe,EAAE,cAAc;YAC/B,aAAa,EAAE,eAAe;SACjC;QACD,IAAI,EAAE,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAC;KACnC,CAAC;IAEF,EAAE,CAAC,4DAA4D,EAAE,GAAS,EAAE;QACxE,MAAM,QAAQ,GAAG,eAAQ,CAAC,iBAAiB,CAAC;YACxC,OAAO,EAAE,CAAM,MAAM,EAAC,EAAE;gBAAC,OAAA,CAAC;oBACtB,IAAI,EAAE,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAC;oBACjC,MAAM,EAAE,GAAG;oBACX,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,EAAE;oBACX,MAAM;iBACT,CAAC,CAAA;cAAA;SACL,CAAC,CAAC;QAEH,MAAM,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAEtC,MAAM,CAAC,eAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAE,eAAM,CAAC,IAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACtF,MAAM,CAAE,eAAM,CAAC,IAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"http.spec.js","sourceRoot":"","sources":["../../src/utils/http.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@6thbridge/utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0-2",
|
|
4
4
|
"description": "simple interface for the our commonly used functions",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -9,11 +9,9 @@
|
|
|
9
9
|
],
|
|
10
10
|
"scripts": {
|
|
11
11
|
"test": "jest --verbose -c jest.config.ts",
|
|
12
|
+
"test:logger": "ts-node src/logger/logger-test.ts",
|
|
12
13
|
"build": "rm -rf lib && tsc -p tsconfig.json",
|
|
13
14
|
"prepare": "npm run build",
|
|
14
|
-
"format": "",
|
|
15
|
-
"version": "npm run format && git add -A src",
|
|
16
|
-
"postversion": "git push && git push --tags",
|
|
17
15
|
"bump-patch": "npm version patch",
|
|
18
16
|
"bump-minor": "npm version minor",
|
|
19
17
|
"bump-alpha": "npm --no-git-tag-version version prerelease"
|
|
@@ -63,5 +61,9 @@
|
|
|
63
61
|
},
|
|
64
62
|
"resolutions": {
|
|
65
63
|
"minimatch": "^10.2.5"
|
|
64
|
+
},
|
|
65
|
+
"repository": {
|
|
66
|
+
"type": "git",
|
|
67
|
+
"url": "git+https://github.com/DexlerNG/bridge-utils-package.git"
|
|
66
68
|
}
|
|
67
69
|
}
|
package/readme.md
CHANGED
|
@@ -7,7 +7,6 @@ A comprehensive TypeScript utility library for Node.js applications, providing r
|
|
|
7
7
|
- [Core Modules](#core-modules)
|
|
8
8
|
- [API Reference](#api-reference)
|
|
9
9
|
- [Examples](#examples)
|
|
10
|
-
- [Pipelines](#pipelines)
|
|
11
10
|
- [Testing](#testing)
|
|
12
11
|
- [Contributing](#contributing)
|
|
13
12
|
- [License](#license)
|
|
@@ -291,93 +290,6 @@ LOG_OUT=1
|
|
|
291
290
|
# Service URLs
|
|
292
291
|
USER_SERVICE_URL=http://user-service:3000
|
|
293
292
|
```
|
|
294
|
-
## Pipelines
|
|
295
|
-
|
|
296
|
-
`SerialPipeline` passes each executed step's result to the next step. `ParallelPipeline`
|
|
297
|
-
runs independent steps concurrently with the same initial input and returns named results.
|
|
298
|
-
Both accept the existing `ContextEntity` as the first argument on every invocation; the
|
|
299
|
-
pipeline never stores context.
|
|
300
|
-
|
|
301
|
-
Every step must provide `shouldRun(contextEntity, input): Promise<boolean>` and
|
|
302
|
-
`run(contextEntity, input): Promise<Result>`. Implementers choose the result type.
|
|
303
|
-
Register objects or class instances with `.pipe(name, step)`. Names must be unique.
|
|
304
|
-
Registration returns a new pipeline, so retain the returned instance or chain calls.
|
|
305
|
-
|
|
306
|
-
### Serial transformations and skipped steps
|
|
307
|
-
|
|
308
|
-
```typescript
|
|
309
|
-
import { ContextEntity, PipelineStep, SerialPipeline } from '@6thbridge/utils';
|
|
310
|
-
|
|
311
|
-
class MeasureText implements PipelineStep<string, number> {
|
|
312
|
-
constructor(private minimumLength: number) {}
|
|
313
|
-
|
|
314
|
-
async shouldRun(contextEntity: ContextEntity, input: string): Promise<boolean> {
|
|
315
|
-
return input.length >= this.minimumLength;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
async run(contextEntity: ContextEntity, input: string): Promise<number> {
|
|
319
|
-
return input.length;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
const pipeline = new SerialPipeline<string>()
|
|
324
|
-
.pipe('measure', new MeasureText(3))
|
|
325
|
-
.pipe('describe', {
|
|
326
|
-
async shouldRun(contextEntity, input) {
|
|
327
|
-
return true;
|
|
328
|
-
},
|
|
329
|
-
async run(contextEntity, input) {
|
|
330
|
-
// input is string | number: skipped measurement forwards the original string.
|
|
331
|
-
return typeof input === 'number' ? `Length: ${input}` : `Unmeasured: ${input}`;
|
|
332
|
-
},
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
const contextEntity = new ContextEntity();
|
|
336
|
-
await pipeline.run(contextEntity, 'hello'); // "Length: 5"
|
|
337
|
-
await pipeline.run(new ContextEntity(), 'hi'); // "Unmeasured: hi"
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
Serial execution awaits each predicate and result in registration order. A skipped step
|
|
341
|
-
forwards its input unchanged, so downstream input and the final result include the types
|
|
342
|
-
of values that may pass through skipped steps. Class instance methods retain their `this`.
|
|
343
|
-
|
|
344
|
-
### Named parallel results
|
|
345
|
-
|
|
346
|
-
```typescript
|
|
347
|
-
import { ContextEntity, ParallelPipeline } from '@6thbridge/utils';
|
|
348
|
-
|
|
349
|
-
const pipeline = new ParallelPipeline<string>()
|
|
350
|
-
.pipe('length', {
|
|
351
|
-
async shouldRun(contextEntity, input) {
|
|
352
|
-
return true;
|
|
353
|
-
},
|
|
354
|
-
async run(contextEntity, input) {
|
|
355
|
-
return input.length;
|
|
356
|
-
},
|
|
357
|
-
})
|
|
358
|
-
.pipe('uppercase', {
|
|
359
|
-
async shouldRun(contextEntity, input) {
|
|
360
|
-
return input.length > 0;
|
|
361
|
-
},
|
|
362
|
-
async run(contextEntity, input) {
|
|
363
|
-
return input.toUpperCase();
|
|
364
|
-
},
|
|
365
|
-
});
|
|
366
|
-
|
|
367
|
-
const results = await pipeline.run(new ContextEntity(), 'hello');
|
|
368
|
-
// { length: 5, uppercase: 'HELLO' }
|
|
369
|
-
// Inferred properties: length?: number; uppercase?: string.
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
Parallel predicates and executions run independently. Skipped steps are omitted from the
|
|
373
|
-
result object; executed steps returning `undefined` still have a result property. Result
|
|
374
|
-
keys follow registration order regardless of completion order.
|
|
375
|
-
|
|
376
|
-
Both pipelines reject errors from `shouldRun` or `run`. Serial execution stops before the
|
|
377
|
-
next step; already started parallel work continues. Empty serial pipelines return their
|
|
378
|
-
input, and empty parallel pipelines return `{}`. Pipelines can be reused concurrently
|
|
379
|
-
with different contexts and inputs; callers manage any mutable state inside their steps.
|
|
380
|
-
|
|
381
293
|
## Testing
|
|
382
294
|
The library includes comprehensive test suites using Jest:
|
|
383
295
|
``` bash
|
|
@@ -446,7 +358,7 @@ try {
|
|
|
446
358
|
### Development Setup
|
|
447
359
|
``` bash
|
|
448
360
|
# Clone repository
|
|
449
|
-
git clone https://github.com/
|
|
361
|
+
git clone https://github.com/DexlerNG/bridge-utils-package.git
|
|
450
362
|
|
|
451
363
|
# Install dependencies
|
|
452
364
|
yarn install
|
|
@@ -464,23 +376,39 @@ This project is licensed under the ISC License.
|
|
|
464
376
|
|
|
465
377
|
## Support
|
|
466
378
|
For support and questions, please open an issue on the GitHub repository.
|
|
467
|
-
**Note**: This library is actively maintained and used in production environments. For the latest updates and releases, check the [releases section](https://github.com/
|
|
379
|
+
**Note**: This library is actively maintained and used in production environments. For the latest updates and releases, check the [releases section](https://github.com/DexlerNG/bridge-utils-package/releases).
|
|
380
|
+
|
|
381
|
+
## Publishing
|
|
382
|
+
|
|
383
|
+
Merging a pull request into `main` publishes the package to npm and GitHub Packages, unless the pull request has the `skip-publish` label. Bump the version before merging. Add `publish-test-version` to a pull request from this repository to publish a test version to GitHub Packages.
|
|
384
|
+
|
|
385
|
+
Repository Actions secrets required:
|
|
386
|
+
|
|
387
|
+
- `NPM_TOKEN`: npm token with permission to publish `@6thbridge/utils`.
|
|
388
|
+
- `GH_PACKAGES_TOKEN`: GitHub personal access token (classic) with `write:packages` permission for the `6thbridge` package namespace. The repository currently belongs to `DexlerNG`, so its automatic `GITHUB_TOKEN` cannot publish to that separate namespace.
|
|
389
|
+
|
|
390
|
+
To install the GitHub Packages copy, authenticate to `npm.pkg.github.com` and configure `@6thbridge:registry=https://npm.pkg.github.com` in your npm configuration. The normal `npm install @6thbridge/utils` command uses npm.
|
|
468
391
|
|
|
469
|
-
##
|
|
392
|
+
## Log batching
|
|
470
393
|
|
|
471
|
-
|
|
394
|
+
Keep calling `logger.info()`, `logger.error()`, etc. Logs share an array and flush
|
|
395
|
+
at 100 messages or after 1 second. `configureLogBatching({ batchSize: 100,
|
|
396
|
+
flushIntervalMs: 1000 })` changes those defaults. Each flush sends a plain array
|
|
397
|
+
to the existing RabbitMQ instance, or to `POST /v1/logs` when none exists.
|
|
398
|
+
Transport selection happens during flushing. Transport failures are reported to
|
|
399
|
+
stderr; there is no background retry mechanism.
|
|
472
400
|
|
|
473
|
-
|
|
474
|
-
|
|
401
|
+
Call `registerLoggingShutdown()` once to register SIGTERM/SIGINT flushing, or
|
|
402
|
+
`await flushLogs()` explicitly before closing transports or exiting. Registration
|
|
403
|
+
only flushes the library buffer; it does not close providers or exit the process.
|
|
404
|
+
There are no automatic signal listeners when shutdown is not registered.
|
|
405
|
+
Deploy array support in utility-service before releasing the updated logger.
|
|
475
406
|
|
|
476
|
-
|
|
477
|
-
DatabaseSessionAction.configure(transactionRepository.getModel());
|
|
407
|
+
To send 10,000 test logs to your utility service:
|
|
478
408
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
async (session) => transactionRepository.updateMany(filter, update, { session }),
|
|
482
|
-
{ lockKey: ['wallet:123'], lockTTLInSeconds: 10 },
|
|
483
|
-
);
|
|
409
|
+
```bash
|
|
410
|
+
UTILITY_SERVICE_URL=https://your-utility-service yarn test:logger
|
|
484
411
|
```
|
|
485
412
|
|
|
486
|
-
|
|
413
|
+
The script uses two logger instances and batches of 100. It does not start a
|
|
414
|
+
server or verify receipt; check utility-service for the received logs.
|