@dumanarge/xssrv-shared-lib 1.0.15 → 1.0.18
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 +18 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/logging/logging-env.d.ts +3 -0
- package/dist/logging/logging-env.js +63 -0
- package/dist/logging/logging-env.js.map +1 -0
- package/dist/logging/logging.module.d.ts +1 -1
- package/dist/logging/logging.module.js +31 -6
- package/dist/logging/logging.module.js.map +1 -1
- package/dist/outbox/outbox.module.d.ts +14 -2
- package/dist/outbox/outbox.module.js +78 -11
- package/dist/outbox/outbox.module.js.map +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.16] - 2026-07-09
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Ensure logging `.env` files are loaded before evaluating `NODE_ENV`, `LOG_LEVEL`, and console logging flags.
|
|
13
|
+
|
|
14
|
+
## [1.0.15] - 2026-07-09
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Load `.env.local` and `.env` before evaluating logging env flags so console log controls work when services rely on env files.
|
|
19
|
+
|
|
20
|
+
## [1.0.14] - 2026-07-09
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- Env controls for request/access log console output without disabling structured log publishing.
|
|
25
|
+
|
|
8
26
|
## [1.0.0] - 2025-02-22
|
|
9
27
|
|
|
10
28
|
### Added
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export { HttpAppExceptionFilter } from './logging/http-exception.filter';
|
|
|
4
4
|
export { RequestLoggingInterceptor } from './logging/request-logging.interceptor';
|
|
5
5
|
export * from './filters';
|
|
6
6
|
export { HealthModule, HealthController, RedisHealthIndicator, RabbitMQHealthIndicator, } from './health/health.module';
|
|
7
|
-
export { OutboxEvent, OutboxEventStatus, PublishOptions, OutboxRepository, OutboxWorker, EventPublisher, RabbitMQEventPublisher, } from './outbox/outbox.module';
|
|
7
|
+
export { OutboxEvent, OutboxEventStatus, PublishOptions, OutboxRepository, OutboxWorker, OutboxWorkerConfig, loadOutboxWorkerConfig, EventPublisher, RabbitMQEventPublisher, } from './outbox/outbox.module';
|
|
8
8
|
export { InboxRepository, PrismaInboxRepository, RawPgInboxRepository, checkInboxDedup, type PgPoolLike, type PgPoolClientLike, type PgClientLike, type PgQueryResult, } from './inbox';
|
|
9
9
|
export { LOG_KIND, LOG_TRANSPORT, ACCESS_LOG_RESULT_STATUS, ACCESS_LOG_OUTCOME, ACCESS_LOG_FAILURE_SOURCE, AUDIT_ACTOR_TYPE, AUDIT_SEVERITY, ACCESS_LOG_OPERATION_KIND, REDACTED_VALUE, DEFAULT_REDACTED_HEADER_KEYS, DEFAULT_REDACTED_BODY_KEYS, LogKind, LogTransport, AccessLogResultStatus, AccessLogOutcome, AccessLogFailureSource, AuditActorType, AuditSeverity, AccessLogOperationKind, AccessLogPayload, AuditLogPayload, DomainEventLogPayload, LogEvent, AccessLogEvent, AuditLogEvent, DomainLogEvent, buildLogRoutingKey, LogPublisher, NoopLogPublisher, RingBuffer, RingBufferOptions, RabbitMqLogPublisher, RabbitMqLogPublisherPort, RabbitMqLogPublisherOptions, LogSamplingPolicy, OutcomeAwareSamplingPolicy, AlwaysSampleLogPolicy, OutcomeAwareSamplingOptions, DefaultHttpAccessLogSamplingPolicy, DefaultHttpAccessLogSamplingPolicyOptions, AccessLogPayloadBuilder, AccessLogPayloadBuilderOptions, AccessLogInterceptor, AccessLogInterceptorOptions, RedactionOptions, TruncateBodyResult, redactHeaders, redactObject, truncateBody, hashEmail, } from './log-events';
|
|
10
10
|
export { TenantContext, TenantMiddleware, TenantGuard, createPrismaTenantMiddleware, extractTenantFromGrpcMetadata, } from './auth/tenant.middleware';
|
package/dist/index.js
CHANGED
|
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
18
|
-
exports.ObservabilityContextStorage = exports.resolveErrorSeverity = exports.emitAppErrorObservability = exports.FeatureFlagService = exports.enableGracefulShutdown = exports.GracefulShutdownModule = exports.GracefulShutdownService = exports.AuditInterceptor = exports.extractTenantFromGrpcMetadata = void 0;
|
|
17
|
+
exports.TenantGuard = exports.TenantMiddleware = exports.TenantContext = exports.hashEmail = exports.truncateBody = exports.redactObject = exports.redactHeaders = exports.AccessLogInterceptor = exports.AccessLogPayloadBuilder = exports.DefaultHttpAccessLogSamplingPolicy = exports.AlwaysSampleLogPolicy = exports.OutcomeAwareSamplingPolicy = exports.LogSamplingPolicy = exports.RabbitMqLogPublisher = exports.RingBuffer = exports.NoopLogPublisher = exports.LogPublisher = exports.buildLogRoutingKey = exports.DEFAULT_REDACTED_BODY_KEYS = exports.DEFAULT_REDACTED_HEADER_KEYS = exports.REDACTED_VALUE = exports.ACCESS_LOG_OPERATION_KIND = exports.AUDIT_SEVERITY = exports.AUDIT_ACTOR_TYPE = exports.ACCESS_LOG_FAILURE_SOURCE = exports.ACCESS_LOG_OUTCOME = exports.ACCESS_LOG_RESULT_STATUS = exports.LOG_TRANSPORT = exports.LOG_KIND = exports.checkInboxDedup = exports.RawPgInboxRepository = exports.PrismaInboxRepository = exports.InboxRepository = exports.RabbitMQEventPublisher = exports.EventPublisher = exports.loadOutboxWorkerConfig = exports.OutboxWorker = exports.OutboxRepository = exports.RabbitMQHealthIndicator = exports.RedisHealthIndicator = exports.HealthController = exports.HealthModule = exports.RequestLoggingInterceptor = exports.HttpAppExceptionFilter = exports.PINO_LOGGER_CONFIG = exports.LoggingModule = exports.SpanStatusCode = exports.context = exports.trace = exports.Span = void 0;
|
|
18
|
+
exports.ObservabilityContextStorage = exports.resolveErrorSeverity = exports.emitAppErrorObservability = exports.FeatureFlagService = exports.enableGracefulShutdown = exports.GracefulShutdownModule = exports.GracefulShutdownService = exports.AuditInterceptor = exports.extractTenantFromGrpcMetadata = exports.createPrismaTenantMiddleware = void 0;
|
|
19
19
|
var span_decorator_1 = require("./tracing/span.decorator");
|
|
20
20
|
Object.defineProperty(exports, "Span", { enumerable: true, get: function () { return span_decorator_1.Span; } });
|
|
21
21
|
Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return span_decorator_1.trace; } });
|
|
@@ -37,6 +37,7 @@ Object.defineProperty(exports, "RabbitMQHealthIndicator", { enumerable: true, ge
|
|
|
37
37
|
var outbox_module_1 = require("./outbox/outbox.module");
|
|
38
38
|
Object.defineProperty(exports, "OutboxRepository", { enumerable: true, get: function () { return outbox_module_1.OutboxRepository; } });
|
|
39
39
|
Object.defineProperty(exports, "OutboxWorker", { enumerable: true, get: function () { return outbox_module_1.OutboxWorker; } });
|
|
40
|
+
Object.defineProperty(exports, "loadOutboxWorkerConfig", { enumerable: true, get: function () { return outbox_module_1.loadOutboxWorkerConfig; } });
|
|
40
41
|
Object.defineProperty(exports, "EventPublisher", { enumerable: true, get: function () { return outbox_module_1.EventPublisher; } });
|
|
41
42
|
Object.defineProperty(exports, "RabbitMQEventPublisher", { enumerable: true, get: function () { return outbox_module_1.RabbitMQEventPublisher; } });
|
|
42
43
|
var inbox_1 = require("./inbox");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,2DAAgF;AAAvE,sGAAA,IAAI,OAAA;AAAE,uGAAA,KAAK,OAAA;AAAE,yGAAA,OAAO,OAAA;AAAE,gHAAA,cAAc,OAAA;AAG7C,2DAA6E;AAApE,+GAAA,aAAa,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AAC1C,yEAAyE;AAAhE,+HAAA,sBAAsB,OAAA;AAC/B,qFAAkF;AAAzE,wIAAA,yBAAyB,OAAA;AAGlC,4CAA0B;AAG1B,wDAKgC;AAJ9B,6GAAA,YAAY,OAAA;AACZ,iHAAA,gBAAgB,OAAA;AAChB,qHAAA,oBAAoB,OAAA;AACpB,wHAAA,uBAAuB,OAAA;AAIzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,2DAAgF;AAAvE,sGAAA,IAAI,OAAA;AAAE,uGAAA,KAAK,OAAA;AAAE,yGAAA,OAAO,OAAA;AAAE,gHAAA,cAAc,OAAA;AAG7C,2DAA6E;AAApE,+GAAA,aAAa,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AAC1C,yEAAyE;AAAhE,+HAAA,sBAAsB,OAAA;AAC/B,qFAAkF;AAAzE,wIAAA,yBAAyB,OAAA;AAGlC,4CAA0B;AAG1B,wDAKgC;AAJ9B,6GAAA,YAAY,OAAA;AACZ,iHAAA,gBAAgB,OAAA;AAChB,qHAAA,oBAAoB,OAAA;AACpB,wHAAA,uBAAuB,OAAA;AAIzB,wDAUgC;AAN9B,iHAAA,gBAAgB,OAAA;AAChB,6GAAA,YAAY,OAAA;AAEZ,uHAAA,sBAAsB,OAAA;AACtB,+GAAA,cAAc,OAAA;AACd,uHAAA,sBAAsB,OAAA;AAIxB,iCASiB;AARf,wGAAA,eAAe,OAAA;AACf,8GAAA,qBAAqB,OAAA;AACrB,6GAAA,oBAAoB,OAAA;AACpB,wGAAA,eAAe,OAAA;AAQjB,2CAmDsB;AAlDpB,sGAAA,QAAQ,OAAA;AACR,2GAAA,aAAa,OAAA;AACb,sHAAA,wBAAwB,OAAA;AACxB,gHAAA,kBAAkB,OAAA;AAClB,uHAAA,yBAAyB,OAAA;AACzB,8GAAA,gBAAgB,OAAA;AAChB,4GAAA,cAAc,OAAA;AACd,uHAAA,yBAAyB,OAAA;AACzB,4GAAA,cAAc,OAAA;AACd,0HAAA,4BAA4B,OAAA;AAC5B,wHAAA,0BAA0B,OAAA;AAgB1B,gHAAA,kBAAkB,OAAA;AAClB,0GAAA,YAAY,OAAA;AACZ,8GAAA,gBAAgB,OAAA;AAChB,wGAAA,UAAU,OAAA;AAEV,kHAAA,oBAAoB,OAAA;AAGpB,+GAAA,iBAAiB,OAAA;AACjB,wHAAA,0BAA0B,OAAA;AAC1B,mHAAA,qBAAqB,OAAA;AAErB,gIAAA,kCAAkC,OAAA;AAElC,qHAAA,uBAAuB,OAAA;AAEvB,kHAAA,oBAAoB,OAAA;AAIpB,2GAAA,aAAa,OAAA;AACb,0GAAA,YAAY,OAAA;AACZ,0GAAA,YAAY,OAAA;AACZ,uGAAA,SAAS,OAAA;AAIX,8DAMkC;AALhC,kHAAA,aAAa,OAAA;AACb,qHAAA,gBAAgB,OAAA;AAChB,gHAAA,WAAW,OAAA;AACX,iIAAA,4BAA4B,OAAA;AAC5B,kIAAA,6BAA6B,OAAA;AAG/B,8DAAwE;AAA/D,qHAAA,gBAAgB,OAAA;AAGzB,2CAAyB;AAGzB,4CAA0B;AAG1B,4CAA0B;AAG1B,gEAAmI;AAA1H,4HAAA,uBAAuB,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AAChF,wDAAyE;AAAhE,mHAAA,kBAAkB,OAAA;AAG3B,2EAK6C;AAJ3C,gIAAA,yBAAyB,OAAA;AACzB,2HAAA,oBAAoB,OAAA;AAItB,mEAGyC;AAFvC,8HAAA,2BAA2B,OAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadLoggingEnvironmentFiles = loadLoggingEnvironmentFiles;
|
|
4
|
+
exports.readBooleanEnv = readBooleanEnv;
|
|
5
|
+
exports.readCsvEnv = readCsvEnv;
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const dotenv_1 = require("dotenv");
|
|
9
|
+
const envFileCandidates = ['.env.local', '.env'];
|
|
10
|
+
let envFilesLoaded = false;
|
|
11
|
+
function loadLoggingEnvironmentFiles() {
|
|
12
|
+
if (envFilesLoaded) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
envFilesLoaded = true;
|
|
16
|
+
for (const candidate of envFileCandidates) {
|
|
17
|
+
const path = (0, path_1.resolve)(process.cwd(), candidate);
|
|
18
|
+
if (!(0, fs_1.existsSync)(path)) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
(0, dotenv_1.config)({ path, override: false });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function readRawEnv(name) {
|
|
25
|
+
loadLoggingEnvironmentFiles();
|
|
26
|
+
const value = process.env[name];
|
|
27
|
+
if (typeof value !== 'string') {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const trimmed = value.trim();
|
|
31
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
32
|
+
}
|
|
33
|
+
function readBooleanEnv(name, fallback) {
|
|
34
|
+
const value = readRawEnv(name);
|
|
35
|
+
if (value === undefined) {
|
|
36
|
+
return fallback;
|
|
37
|
+
}
|
|
38
|
+
switch (value.toLowerCase()) {
|
|
39
|
+
case '1':
|
|
40
|
+
case 'true':
|
|
41
|
+
case 'yes':
|
|
42
|
+
case 'on':
|
|
43
|
+
return true;
|
|
44
|
+
case '0':
|
|
45
|
+
case 'false':
|
|
46
|
+
case 'no':
|
|
47
|
+
case 'off':
|
|
48
|
+
return false;
|
|
49
|
+
default:
|
|
50
|
+
return fallback;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function readCsvEnv(name) {
|
|
54
|
+
const value = readRawEnv(name);
|
|
55
|
+
if (value === undefined) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
return value
|
|
59
|
+
.split(',')
|
|
60
|
+
.map((item) => item.trim())
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=logging-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-env.js","sourceRoot":"","sources":["../../src/logging/logging-env.ts"],"names":[],"mappings":";;AAOA,kEAcC;AAcD,wCAoBC;AAED,gCAUC;AAnED,2BAAgC;AAChC,+BAA+B;AAC/B,mCAA8C;AAE9C,MAAM,iBAAiB,GAA0B,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACxE,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,SAAgB,2BAA2B;IACzC,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IACD,cAAc,GAAG,IAAI,CAAC;IAEtB,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QAED,IAAA,eAAU,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,2BAA2B,EAAE,CAAC;IAE9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY,EAAE,QAAiB;IAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,QAAQ,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,KAAK,GAAG,CAAC;QACT,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,IAAI;YACP,OAAO,IAAI,CAAC;QACd,KAAK,GAAG,CAAC;QACT,KAAK,OAAO,CAAC;QACb,KAAK,IAAI,CAAC;QACV,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -12,7 +12,25 @@ const nestjs_pino_1 = require("nestjs-pino");
|
|
|
12
12
|
const api_1 = require("@opentelemetry/api");
|
|
13
13
|
const crypto_1 = require("crypto");
|
|
14
14
|
const observability_context_1 = require("../context/observability-context");
|
|
15
|
+
const logging_env_1 = require("./logging-env");
|
|
16
|
+
(0, logging_env_1.loadLoggingEnvironmentFiles)();
|
|
15
17
|
const isProduction = process.env.NODE_ENV === 'production';
|
|
18
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
19
|
+
const defaultHttpRequestConsoleLogIgnorePaths = [
|
|
20
|
+
'/health/live',
|
|
21
|
+
'/health/ready',
|
|
22
|
+
'/api/health/live',
|
|
23
|
+
'/api/health/ready',
|
|
24
|
+
'/api/v1/health/live',
|
|
25
|
+
'/api/v1/health/ready',
|
|
26
|
+
'/metrics',
|
|
27
|
+
];
|
|
28
|
+
const httpRequestConsoleLogEnabled = (0, logging_env_1.readBooleanEnv)('HTTP_REQUEST_CONSOLE_LOG_ENABLED', true);
|
|
29
|
+
const prettyLoggingEnabled = (0, logging_env_1.readBooleanEnv)('LOG_PRETTY_ENABLED', isDevelopment);
|
|
30
|
+
const httpRequestConsoleLogIgnorePaths = new Set([
|
|
31
|
+
...defaultHttpRequestConsoleLogIgnorePaths.map(normalizeRequestPath),
|
|
32
|
+
...(0, logging_env_1.readCsvEnv)('HTTP_REQUEST_CONSOLE_LOG_IGNORE_PATHS').map(normalizeRequestPath),
|
|
33
|
+
]);
|
|
16
34
|
const redactPaths = [
|
|
17
35
|
'req.headers.authorization',
|
|
18
36
|
'req.headers.cookie',
|
|
@@ -26,14 +44,16 @@ if (isProduction) {
|
|
|
26
44
|
exports.PINO_LOGGER_CONFIG = {
|
|
27
45
|
pinoHttp: {
|
|
28
46
|
level: process.env.LOG_LEVEL || 'info',
|
|
29
|
-
transport:
|
|
47
|
+
transport: prettyLoggingEnabled
|
|
30
48
|
? { target: 'pino-pretty', options: { colorize: true, singleLine: true } }
|
|
31
49
|
: undefined,
|
|
32
|
-
autoLogging:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
autoLogging: httpRequestConsoleLogEnabled
|
|
51
|
+
? {
|
|
52
|
+
ignore: (req) => {
|
|
53
|
+
return httpRequestConsoleLogIgnorePaths.has(normalizeRequestPath(req?.url));
|
|
54
|
+
},
|
|
55
|
+
}
|
|
56
|
+
: false,
|
|
37
57
|
serializers: {
|
|
38
58
|
req: (req) => ({
|
|
39
59
|
method: req.method,
|
|
@@ -100,6 +120,11 @@ exports.PINO_LOGGER_CONFIG = {
|
|
|
100
120
|
},
|
|
101
121
|
},
|
|
102
122
|
};
|
|
123
|
+
function normalizeRequestPath(value) {
|
|
124
|
+
const rawUrl = typeof value === 'string' ? value : '';
|
|
125
|
+
const path = rawUrl.split('?')[0]?.trim() || '/';
|
|
126
|
+
return path.length > 1 ? path.replace(/\/+$/, '') : path;
|
|
127
|
+
}
|
|
103
128
|
let LoggingModule = class LoggingModule {
|
|
104
129
|
};
|
|
105
130
|
exports.LoggingModule = LoggingModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.module.js","sourceRoot":"","sources":["../../src/logging/logging.module.ts"],"names":[],"mappings":";;;;;;;;;AAUA,2CAAwC;AACxC,6CAA+D;AAC/D,4CAA2C;AAC3C,mCAAoC;AACpC,4EAAwE;
|
|
1
|
+
{"version":3,"file":"logging.module.js","sourceRoot":"","sources":["../../src/logging/logging.module.ts"],"names":[],"mappings":";;;;;;;;;AAUA,2CAAwC;AACxC,6CAA+D;AAC/D,4CAA2C;AAC3C,mCAAoC;AACpC,4EAAwE;AACxE,+CAIuB;AAEvB,IAAA,yCAA2B,GAAE,CAAC;AAE9B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;AAC7D,MAAM,uCAAuC,GAA0B;IACrE,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,mBAAmB;IACnB,qBAAqB;IACrB,sBAAsB;IACtB,UAAU;CACX,CAAC;AACF,MAAM,4BAA4B,GAAG,IAAA,4BAAc,EACjD,kCAAkC,EAClC,IAAI,CACL,CAAC;AACF,MAAM,oBAAoB,GAAG,IAAA,4BAAc,EAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;AACjF,MAAM,gCAAgC,GAAwB,IAAI,GAAG,CAAS;IAC5E,GAAG,uCAAuC,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACpE,GAAG,IAAA,wBAAU,EAAC,uCAAuC,CAAC,CAAC,GAAG,CACxD,oBAAoB,CACrB;CACF,CAAC,CAAC;AACH,MAAM,WAAW,GAAG;IAClB,2BAA2B;IAC3B,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,gBAAgB;CACjB,CAAC;AAEF,IAAI,YAAY,EAAE,CAAC;IACjB,WAAW,CAAC,IAAI,CAAC,0BAA0B,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AACxF,CAAC;AAEY,QAAA,kBAAkB,GAAG;IAChC,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,SAAS,EAAE,oBAAoB;YAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;YAC1E,CAAC,CAAC,SAAS;QACb,WAAW,EAAE,4BAA4B;YACvC,CAAC,CAAC;gBACE,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE;oBACnB,OAAO,gCAAgC,CAAC,GAAG,CACzC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAC/B,CAAC;gBACJ,CAAC;aACF;YACH,CAAC,CAAC,KAAK;QACT,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE;oBACP,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC3C,kBAAkB,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC;oBACnD,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;oBACzC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;oBACrC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC3C,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC3C,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;iBACxC;aACF,CAAC;YACF,GAAG,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;gBAClB,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B,CAAC;SACH;QACD,WAAW,EAAE,CAAC,GAAQ,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,WAAK,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,4CAAoB,CAAC,GAAG,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,WAAW,EAAE,SAAS,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC;YACtF,MAAM,aAAa,GACjB,WAAW,EAAE,aAAa,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,IAAI,SAAS,CAAC;YAEhF,MAAM,SAAS,GAAG;gBAChB,SAAS;gBACT,aAAa;gBACb,QAAQ,EAAE,WAAW,EAAE,QAAQ;gBAC/B,MAAM,EAAE,WAAW,EAAE,MAAM;gBAC3B,SAAS,EAAE,WAAW,EAAE,SAAS;gBACjC,SAAS,EAAE,WAAW,EAAE,SAAS;gBACjC,MAAM,EAAE,WAAW,EAAE,MAAM;gBAC3B,SAAS,EAAE,WAAW,EAAE,SAAS;aAClC,CAAC;YAEF,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC7C,4CAAoB,CAAC,GAAG,CAAC;oBACvB,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,MAAM,EAAE,WAAW,CAAC,MAAM;iBAC3B,CAAC,CAAC;gBACH,OAAO;oBACL,GAAG,SAAS;oBACZ,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,UAAU,EAAE,WAAW,CAAC,UAAU;iBACnC,CAAC;YACJ,CAAC;YAKD,MAAM,cAAc,GAAuB,WAAW,EAAE,OAAO,CAAC;YAChE,MAAM,aAAa,GAAuB,WAAW,EAAE,MAAM,CAAC;YAC9D,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;gBACpC,OAAO;oBACL,GAAG,SAAS;oBACZ,OAAO,EAAE,cAAc;oBACvB,MAAM,EAAE,aAAa;iBACtB,CAAC;YACJ,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,EAAE;YACN,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,YAAY;SACrB;QACD,QAAQ,EAAE,CAAC,GAAQ,EAAE,EAAE;YACrB,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,IAAA,mBAAU,GAAE,CAAC;QACrD,CAAC;KACF;CACF,CAAC;AAEF,SAAS,oBAAoB,CAAC,KAAc;IAC1C,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC;IACjD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAMM,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAJzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAgB,CAAC,OAAO,CAAC,0BAAkB,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC,0BAAgB,CAAC;KAC5B,CAAC;GACW,aAAa,CAAG"}
|
|
@@ -17,14 +17,27 @@ export interface OutboxEvent {
|
|
|
17
17
|
failedAt?: Date | null;
|
|
18
18
|
retryCount?: number;
|
|
19
19
|
maxRetries?: number;
|
|
20
|
+
lockedBy?: string | null;
|
|
21
|
+
lockedUntil?: Date | null;
|
|
20
22
|
}
|
|
23
|
+
export interface OutboxWorkerConfig {
|
|
24
|
+
pollIntervalMs: number;
|
|
25
|
+
batchSize: number;
|
|
26
|
+
lockLeaseMs: number;
|
|
27
|
+
retryBackoffMs: number;
|
|
28
|
+
workerEnabled: boolean;
|
|
29
|
+
instanceId: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function loadOutboxWorkerConfig(): OutboxWorkerConfig;
|
|
21
32
|
export declare class OutboxRepository {
|
|
22
33
|
private readonly prisma;
|
|
23
34
|
private readonly logger;
|
|
24
35
|
constructor(prisma: any);
|
|
25
36
|
createInTransaction(tx: any, event: OutboxEvent): Promise<any>;
|
|
37
|
+
claimBatch(batchSize: number, lockedBy: string, lockLeaseMs: number): Promise<OutboxEvent[]>;
|
|
26
38
|
fetchUnprocessed(batchSize?: number): Promise<OutboxEvent[]>;
|
|
27
39
|
markProcessed(eventId: string): Promise<void>;
|
|
40
|
+
releaseForRetry(eventId: string, currentRetryCount: number, retryBackoffMs: number): Promise<void>;
|
|
28
41
|
incrementRetry(eventId: string): Promise<void>;
|
|
29
42
|
markFailed(eventId: string): Promise<void>;
|
|
30
43
|
}
|
|
@@ -36,8 +49,7 @@ export declare class OutboxWorker implements OnModuleInit, OnModuleDestroy {
|
|
|
36
49
|
private readonly eventPublisher;
|
|
37
50
|
private readonly logger;
|
|
38
51
|
private intervalId;
|
|
39
|
-
private readonly
|
|
40
|
-
private readonly batchSize;
|
|
52
|
+
private readonly config;
|
|
41
53
|
private isProcessing;
|
|
42
54
|
constructor(outboxRepo: OutboxRepository, eventPublisher: EventPublisher);
|
|
43
55
|
onModuleInit(): void;
|
|
@@ -11,9 +11,20 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var OutboxRepository_1, OutboxWorker_1, RabbitMQEventPublisher_1;
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.RabbitMQEventPublisher = exports.OutboxWorker = exports.EventPublisher = exports.OutboxRepository = void 0;
|
|
14
|
+
exports.loadOutboxWorkerConfig = loadOutboxWorkerConfig;
|
|
14
15
|
const crypto_1 = require("crypto");
|
|
15
16
|
const common_1 = require("@nestjs/common");
|
|
16
17
|
const span_decorator_1 = require("../tracing/span.decorator");
|
|
18
|
+
function loadOutboxWorkerConfig() {
|
|
19
|
+
return {
|
|
20
|
+
pollIntervalMs: parseInt(process.env.OUTBOX_POLL_INTERVAL_MS || '1000', 10),
|
|
21
|
+
batchSize: parseInt(process.env.OUTBOX_BATCH_SIZE || '50', 10),
|
|
22
|
+
lockLeaseMs: parseInt(process.env.OUTBOX_LOCK_LEASE_MS || '30000', 10),
|
|
23
|
+
retryBackoffMs: parseInt(process.env.OUTBOX_RETRY_BACKOFF_MS || '5000', 10),
|
|
24
|
+
workerEnabled: (process.env.OUTBOX_WORKER_ENABLED ?? 'true') !== 'false',
|
|
25
|
+
instanceId: process.env.HOSTNAME || `outbox-${(0, crypto_1.randomUUID)().slice(0, 8)}`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
17
28
|
let OutboxRepository = OutboxRepository_1 = class OutboxRepository {
|
|
18
29
|
prisma;
|
|
19
30
|
logger = new common_1.Logger(OutboxRepository_1.name);
|
|
@@ -34,6 +45,37 @@ let OutboxRepository = OutboxRepository_1 = class OutboxRepository {
|
|
|
34
45
|
},
|
|
35
46
|
});
|
|
36
47
|
}
|
|
48
|
+
async claimBatch(batchSize, lockedBy, lockLeaseMs) {
|
|
49
|
+
const rows = await this.prisma.$queryRawUnsafe(`
|
|
50
|
+
UPDATE outbox_events
|
|
51
|
+
SET locked_by = $1,
|
|
52
|
+
locked_until = now() + ($2 || ' milliseconds')::interval
|
|
53
|
+
WHERE id IN (
|
|
54
|
+
SELECT id FROM outbox_events
|
|
55
|
+
WHERE status = 'PENDING'
|
|
56
|
+
AND processed_at IS NULL
|
|
57
|
+
AND (locked_until IS NULL OR locked_until < now())
|
|
58
|
+
ORDER BY created_at ASC
|
|
59
|
+
LIMIT $3
|
|
60
|
+
FOR UPDATE SKIP LOCKED
|
|
61
|
+
)
|
|
62
|
+
RETURNING
|
|
63
|
+
id,
|
|
64
|
+
aggregate_type AS "aggregateType",
|
|
65
|
+
aggregate_id AS "aggregateId",
|
|
66
|
+
event_type AS "eventType",
|
|
67
|
+
payload,
|
|
68
|
+
metadata,
|
|
69
|
+
status,
|
|
70
|
+
retry_count AS "retryCount",
|
|
71
|
+
max_retries AS "maxRetries",
|
|
72
|
+
created_at AS "createdAt",
|
|
73
|
+
processed_at AS "processedAt",
|
|
74
|
+
locked_by AS "lockedBy",
|
|
75
|
+
locked_until AS "lockedUntil"
|
|
76
|
+
`, lockedBy, String(lockLeaseMs), batchSize);
|
|
77
|
+
return rows;
|
|
78
|
+
}
|
|
37
79
|
async fetchUnprocessed(batchSize = 50) {
|
|
38
80
|
return this.prisma.outboxEvent.findMany({
|
|
39
81
|
where: {
|
|
@@ -47,7 +89,22 @@ let OutboxRepository = OutboxRepository_1 = class OutboxRepository {
|
|
|
47
89
|
async markProcessed(eventId) {
|
|
48
90
|
await this.prisma.outboxEvent.update({
|
|
49
91
|
where: { id: eventId },
|
|
50
|
-
data: {
|
|
92
|
+
data: {
|
|
93
|
+
processedAt: new Date(),
|
|
94
|
+
lockedBy: null,
|
|
95
|
+
lockedUntil: null,
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async releaseForRetry(eventId, currentRetryCount, retryBackoffMs) {
|
|
100
|
+
const backoffMs = retryBackoffMs * (currentRetryCount + 1);
|
|
101
|
+
await this.prisma.outboxEvent.update({
|
|
102
|
+
where: { id: eventId },
|
|
103
|
+
data: {
|
|
104
|
+
retryCount: { increment: 1 },
|
|
105
|
+
lockedBy: null,
|
|
106
|
+
lockedUntil: new Date(Date.now() + backoffMs),
|
|
107
|
+
},
|
|
51
108
|
});
|
|
52
109
|
}
|
|
53
110
|
async incrementRetry(eventId) {
|
|
@@ -59,7 +116,12 @@ let OutboxRepository = OutboxRepository_1 = class OutboxRepository {
|
|
|
59
116
|
async markFailed(eventId) {
|
|
60
117
|
await this.prisma.outboxEvent.update({
|
|
61
118
|
where: { id: eventId },
|
|
62
|
-
data: {
|
|
119
|
+
data: {
|
|
120
|
+
status: 'FAILED',
|
|
121
|
+
failedAt: new Date(),
|
|
122
|
+
lockedBy: null,
|
|
123
|
+
lockedUntil: null,
|
|
124
|
+
},
|
|
63
125
|
});
|
|
64
126
|
this.logger.warn(`[OUTBOX] Event permanently failed eventId=${eventId}`);
|
|
65
127
|
}
|
|
@@ -77,18 +139,23 @@ let OutboxWorker = OutboxWorker_1 = class OutboxWorker {
|
|
|
77
139
|
eventPublisher;
|
|
78
140
|
logger = new common_1.Logger(OutboxWorker_1.name);
|
|
79
141
|
intervalId = null;
|
|
80
|
-
|
|
81
|
-
batchSize;
|
|
142
|
+
config;
|
|
82
143
|
isProcessing = false;
|
|
83
144
|
constructor(outboxRepo, eventPublisher) {
|
|
84
145
|
this.outboxRepo = outboxRepo;
|
|
85
146
|
this.eventPublisher = eventPublisher;
|
|
86
|
-
this.
|
|
87
|
-
this.batchSize = parseInt(process.env.OUTBOX_BATCH_SIZE || '50', 10);
|
|
147
|
+
this.config = loadOutboxWorkerConfig();
|
|
88
148
|
}
|
|
89
149
|
onModuleInit() {
|
|
90
|
-
|
|
91
|
-
|
|
150
|
+
if (!this.config.workerEnabled) {
|
|
151
|
+
this.logger.log('Outbox worker disabled via OUTBOX_WORKER_ENABLED=false');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const jitterMs = Math.floor(Math.random() * this.config.pollIntervalMs * 0.2);
|
|
155
|
+
const effectiveIntervalMs = this.config.pollIntervalMs + jitterMs;
|
|
156
|
+
this.logger.log(`Starting outbox worker (poll: ${effectiveIntervalMs}ms, batch: ${this.config.batchSize}, ` +
|
|
157
|
+
`lease: ${this.config.lockLeaseMs}ms, instance: ${this.config.instanceId})`);
|
|
158
|
+
this.intervalId = setInterval(() => this.processOutbox(), effectiveIntervalMs);
|
|
92
159
|
}
|
|
93
160
|
onModuleDestroy() {
|
|
94
161
|
if (this.intervalId) {
|
|
@@ -101,10 +168,10 @@ let OutboxWorker = OutboxWorker_1 = class OutboxWorker {
|
|
|
101
168
|
return;
|
|
102
169
|
this.isProcessing = true;
|
|
103
170
|
try {
|
|
104
|
-
const events = await this.outboxRepo.
|
|
171
|
+
const events = await this.outboxRepo.claimBatch(this.config.batchSize, this.config.instanceId, this.config.lockLeaseMs);
|
|
105
172
|
if (events.length === 0)
|
|
106
173
|
return;
|
|
107
|
-
this.logger.debug(`
|
|
174
|
+
this.logger.debug(`Claimed ${events.length} outbox event(s) as ${this.config.instanceId}`);
|
|
108
175
|
for (const event of events) {
|
|
109
176
|
await this.processEvent(event);
|
|
110
177
|
}
|
|
@@ -136,7 +203,7 @@ let OutboxWorker = OutboxWorker_1 = class OutboxWorker {
|
|
|
136
203
|
await this.outboxRepo.markFailed(event.id);
|
|
137
204
|
}
|
|
138
205
|
else {
|
|
139
|
-
await this.outboxRepo.
|
|
206
|
+
await this.outboxRepo.releaseForRetry(event.id, currentRetry, this.config.retryBackoffMs);
|
|
140
207
|
}
|
|
141
208
|
}
|
|
142
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox.module.js","sourceRoot":"","sources":["../../src/outbox/outbox.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"outbox.module.js","sourceRoot":"","sources":["../../src/outbox/outbox.module.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dumanarge/xssrv-shared-lib",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.18",
|
|
4
4
|
"description": "Shared library for DumanArge IoT Platform services — tracing, logging, health, outbox, auth, config",
|
|
5
5
|
"author": "Oguzhan Karahan <oguzhan.karahan@xenonsmart.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -113,6 +113,7 @@
|
|
|
113
113
|
"@prisma/client": "^6.0.0",
|
|
114
114
|
"class-transformer": "^0.5.1",
|
|
115
115
|
"class-validator": "^0.14.0",
|
|
116
|
+
"dotenv": "^16.6.1",
|
|
116
117
|
"express": "^4.21.0",
|
|
117
118
|
"ioredis": "^5.4.0",
|
|
118
119
|
"nestjs-pino": "^4.0.0",
|