@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 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.createPrismaTenantMiddleware = 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.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 = 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,wDAQgC;AAJ9B,iHAAA,gBAAgB,OAAA;AAChB,6GAAA,YAAY,OAAA;AACZ,+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"}
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,3 @@
1
+ export declare function loadLoggingEnvironmentFiles(): void;
2
+ export declare function readBooleanEnv(name: string, fallback: boolean): boolean;
3
+ export declare function readCsvEnv(name: string): string[];
@@ -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"}
@@ -8,7 +8,7 @@ export declare const PINO_LOGGER_CONFIG: {
8
8
  singleLine: boolean;
9
9
  };
10
10
  };
11
- autoLogging: {
11
+ autoLogging: boolean | {
12
12
  ignore: (req: any) => boolean;
13
13
  };
14
14
  serializers: {
@@ -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: process.env.NODE_ENV === 'development'
47
+ transport: prettyLoggingEnabled
30
48
  ? { target: 'pino-pretty', options: { colorize: true, singleLine: true } }
31
49
  : undefined,
32
- autoLogging: {
33
- ignore: (req) => {
34
- return req.url === '/health/live' || req.url === '/health/ready' || req.url === '/metrics';
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":"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"}
1
+ {"version":3,"file":"logging.module.js","sourceRoot":"","sources":["../../src/logging/logging.module.ts"],"names":[],"mappings":"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"}
@@ -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 pollIntervalMs;
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: { processedAt: new Date() },
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: { status: 'FAILED', failedAt: new Date() },
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
- pollIntervalMs;
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.pollIntervalMs = parseInt(process.env.OUTBOX_POLL_INTERVAL_MS || '1000', 10);
87
- this.batchSize = parseInt(process.env.OUTBOX_BATCH_SIZE || '50', 10);
147
+ this.config = loadOutboxWorkerConfig();
88
148
  }
89
149
  onModuleInit() {
90
- this.logger.log(`Starting outbox worker (poll: ${this.pollIntervalMs}ms, batch: ${this.batchSize})`);
91
- this.intervalId = setInterval(() => this.processOutbox(), this.pollIntervalMs);
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.fetchUnprocessed(this.batchSize);
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(`Processing ${events.length} outbox event(s)`);
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.incrementRetry(event.id);
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":"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"}
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.15",
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",