@dumanarge/xssrv-shared-lib 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/context/observability-context.d.ts +3 -0
  2. package/dist/context/observability-context.js +8 -2
  3. package/dist/context/observability-context.js.map +1 -1
  4. package/dist/context/observability.interceptor.js +139 -2
  5. package/dist/context/observability.interceptor.js.map +1 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +28 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/log-events/access-log-payload.builder.d.ts +69 -0
  10. package/dist/log-events/access-log-payload.builder.js +237 -0
  11. package/dist/log-events/access-log-payload.builder.js.map +1 -0
  12. package/dist/log-events/access-log.interceptor.d.ts +29 -0
  13. package/dist/log-events/access-log.interceptor.js +456 -0
  14. package/dist/log-events/access-log.interceptor.js.map +1 -0
  15. package/dist/log-events/index.d.ts +8 -0
  16. package/dist/log-events/index.js +37 -0
  17. package/dist/log-events/index.js.map +1 -0
  18. package/dist/log-events/log-event.types.d.ts +138 -0
  19. package/dist/log-events/log-event.types.js +56 -0
  20. package/dist/log-events/log-event.types.js.map +1 -0
  21. package/dist/log-events/log-publisher.d.ts +8 -0
  22. package/dist/log-events/log-publisher.js +26 -0
  23. package/dist/log-events/log-publisher.js.map +1 -0
  24. package/dist/log-events/rabbitmq-log-publisher.d.ts +34 -0
  25. package/dist/log-events/rabbitmq-log-publisher.js +159 -0
  26. package/dist/log-events/rabbitmq-log-publisher.js.map +1 -0
  27. package/dist/log-events/redaction.d.ts +16 -0
  28. package/dist/log-events/redaction.js +140 -0
  29. package/dist/log-events/redaction.js.map +1 -0
  30. package/dist/log-events/ring-buffer.d.ts +18 -0
  31. package/dist/log-events/ring-buffer.js +54 -0
  32. package/dist/log-events/ring-buffer.js.map +1 -0
  33. package/dist/log-events/sampling-policy.d.ts +26 -0
  34. package/dist/log-events/sampling-policy.js +95 -0
  35. package/dist/log-events/sampling-policy.js.map +1 -0
  36. package/dist/observability/request-context.js +3 -0
  37. package/dist/observability/request-context.js.map +1 -1
  38. package/dist/tracing/tracing.js +27 -0
  39. package/dist/tracing/tracing.js.map +1 -1
  40. package/package.json +5 -1
@@ -4,6 +4,9 @@ export interface ObservabilityContextData {
4
4
  traceId?: string;
5
5
  spanId?: string;
6
6
  tenantId?: string;
7
+ tenantName?: string;
8
+ applicationId?: string;
9
+ applicationName?: string;
7
10
  userId?: string;
8
11
  accountId?: string;
9
12
  userEmail?: string;
@@ -46,6 +46,9 @@ exports.ObservabilityContext = {
46
46
  traceId: context?.traceId,
47
47
  spanId: context?.spanId,
48
48
  tenantId: context?.tenantId,
49
+ tenantName: context?.tenantName,
50
+ applicationId: context?.applicationId,
51
+ applicationName: context?.applicationName,
49
52
  userId: context?.userId,
50
53
  accountId: context?.accountId,
51
54
  userEmail: context?.userEmail,
@@ -55,12 +58,15 @@ exports.ObservabilityContext = {
55
58
  },
56
59
  };
57
60
  function createHttpObservabilityContext(req) {
58
- const requestId = readHeader(req.headers, 'x-request-id') ?? (req.id ? String(req.id) : (0, crypto_1.randomUUID)());
59
- const correlationId = readHeader(req.headers, 'x-correlation-id') ?? requestId;
61
+ const requestId = (0, crypto_1.randomUUID)();
62
+ const correlationId = readHeader(req.headers, 'x-correlation-id') ?? (0, crypto_1.randomUUID)();
60
63
  return {
61
64
  requestId,
62
65
  correlationId,
63
66
  tenantId: readHeader(req.headers, 'x-tenant-id'),
67
+ tenantName: readHeader(req.headers, 'x-tenant-name'),
68
+ applicationId: readHeader(req.headers, 'x-application-id'),
69
+ applicationName: readHeader(req.headers, 'x-application-name'),
64
70
  userId: readHeader(req.headers, 'x-user-id'),
65
71
  accountId: readHeader(req.headers, 'x-account-id'),
66
72
  userEmail: readHeader(req.headers, 'x-user-email') ?? readHeader(req.headers, 'x-email'),
@@ -1 +1 @@
1
- {"version":3,"file":"observability-context.js","sourceRoot":"","sources":["../../src/context/observability-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observability-context.js","sourceRoot":"","sources":["../../src/context/observability-context.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,116 @@ const common_1 = require("@nestjs/common");
11
11
  const rxjs_1 = require("rxjs");
12
12
  const crypto_1 = require("crypto");
13
13
  const observability_context_1 = require("./observability-context");
14
+ const GRPC_PATTERN_METADATA_KEY = 'microservices:pattern';
15
+ function readGrpcPatternMetadata(context) {
16
+ try {
17
+ const handler = context.getHandler?.();
18
+ const metadataReader = Reflect;
19
+ const rawMetadata = metadataReader.getMetadata?.(GRPC_PATTERN_METADATA_KEY, handler);
20
+ const firstPattern = Array.isArray(rawMetadata)
21
+ ? rawMetadata[0]
22
+ : rawMetadata;
23
+ if (!firstPattern || typeof firstPattern !== 'object') {
24
+ return undefined;
25
+ }
26
+ const pattern = firstPattern;
27
+ const serviceName = typeof pattern.service === 'string' && pattern.service.trim().length > 0
28
+ ? pattern.service.trim()
29
+ : undefined;
30
+ const rpcName = typeof pattern.rpc === 'string' && pattern.rpc.trim().length > 0
31
+ ? pattern.rpc.trim()
32
+ : undefined;
33
+ return {
34
+ service: serviceName,
35
+ rpc: rpcName,
36
+ };
37
+ }
38
+ catch {
39
+ return undefined;
40
+ }
41
+ }
42
+ function resolveHandlerName(context) {
43
+ try {
44
+ const handler = context.getHandler?.();
45
+ if (typeof handler?.name === 'string' && handler.name.trim().length > 0) {
46
+ return handler.name.trim();
47
+ }
48
+ }
49
+ catch {
50
+ return undefined;
51
+ }
52
+ return undefined;
53
+ }
54
+ function resolveClassName(context) {
55
+ try {
56
+ const classRef = context.getClass?.();
57
+ if (typeof classRef?.name === 'string' && classRef.name.trim().length > 0) {
58
+ return classRef.name.trim();
59
+ }
60
+ }
61
+ catch {
62
+ return undefined;
63
+ }
64
+ return undefined;
65
+ }
66
+ function readPathCandidate(value) {
67
+ if (typeof value !== 'string') {
68
+ return undefined;
69
+ }
70
+ const trimmed = value.trim();
71
+ if (trimmed.length === 0) {
72
+ return undefined;
73
+ }
74
+ return trimmed;
75
+ }
76
+ function extractRpcOperationFromPath(path) {
77
+ if (!path) {
78
+ return undefined;
79
+ }
80
+ const sanitized = path.trim();
81
+ if (sanitized.length === 0) {
82
+ return undefined;
83
+ }
84
+ const segments = sanitized.split('/').filter(Boolean);
85
+ const lastSegment = segments.length > 0 ? segments[segments.length - 1] : undefined;
86
+ return lastSegment && lastSegment.length > 0 ? lastSegment : undefined;
87
+ }
88
+ function readGrpcOperationFromRpcContext(context) {
89
+ try {
90
+ const rpcContext = context.switchToRpc().getContext();
91
+ const rpcContextRecord = rpcContext && typeof rpcContext === 'object'
92
+ ? rpcContext
93
+ : undefined;
94
+ const directPath = readPathCandidate(rpcContextRecord?.path);
95
+ const handlerPath = readPathCandidate(rpcContextRecord?.handler?.path);
96
+ const callPath = readPathCandidate(rpcContextRecord?.call?.path);
97
+ const callHandlerPath = readPathCandidate(rpcContextRecord?.call
98
+ ?.handler?.path);
99
+ return (extractRpcOperationFromPath(directPath) ??
100
+ extractRpcOperationFromPath(handlerPath) ??
101
+ extractRpcOperationFromPath(callPath) ??
102
+ extractRpcOperationFromPath(callHandlerPath));
103
+ }
104
+ catch {
105
+ return undefined;
106
+ }
107
+ }
108
+ function normalizeOperationCandidate(candidate, className) {
109
+ if (!candidate) {
110
+ return undefined;
111
+ }
112
+ const trimmed = candidate.trim();
113
+ if (trimmed.length === 0) {
114
+ return undefined;
115
+ }
116
+ if (className && trimmed === className) {
117
+ return undefined;
118
+ }
119
+ if (trimmed === 'wrapped') {
120
+ return undefined;
121
+ }
122
+ return trimmed;
123
+ }
14
124
  function metadataValue(metadata, key) {
15
125
  const values = metadata.get(key);
16
126
  if (!values?.length) {
@@ -25,6 +135,14 @@ function metadataValue(metadata, key) {
25
135
  }
26
136
  return undefined;
27
137
  }
138
+ function readBooleanMetadataFlag(metadata, key) {
139
+ const rawValue = metadataValue(metadata, key);
140
+ if (!rawValue) {
141
+ return false;
142
+ }
143
+ const normalizedValue = rawValue.trim().toLowerCase();
144
+ return normalizedValue === 'true' || normalizedValue === '1' || normalizedValue === 'yes';
145
+ }
28
146
  let ObservabilityGrpcInterceptor = class ObservabilityGrpcInterceptor {
29
147
  intercept(context, next) {
30
148
  if (context.getType() !== 'rpc') {
@@ -39,12 +157,30 @@ let ObservabilityGrpcInterceptor = class ObservabilityGrpcInterceptor {
39
157
  if (!metadata) {
40
158
  return next.handle();
41
159
  }
42
- const requestId = metadataValue(metadata, 'x-request-id') ?? (0, crypto_1.randomUUID)();
160
+ const requestId = (0, crypto_1.randomUUID)();
43
161
  const correlationId = metadataValue(metadata, 'x-correlation-id') ?? requestId;
162
+ metadata.set?.('x-request-id', requestId);
163
+ metadata.set?.('x-correlation-id', correlationId);
164
+ const grpcPattern = readGrpcPatternMetadata(context);
165
+ const grpcMethodName = resolveHandlerName(context);
166
+ const grpcServiceName = resolveClassName(context);
167
+ const rpcOperationFromContext = readGrpcOperationFromRpcContext(context);
168
+ const sourceOperationFromMetadata = metadataValue(metadata, 'x-source-operation');
169
+ const isSystemSource = readBooleanMetadataFlag(metadata, 'x-source-system');
170
+ const operationLabel = normalizeOperationCandidate(grpcPattern?.rpc, grpcServiceName) ??
171
+ normalizeOperationCandidate(rpcOperationFromContext, grpcServiceName) ??
172
+ normalizeOperationCandidate(sourceOperationFromMetadata, grpcServiceName) ??
173
+ normalizeOperationCandidate(grpcMethodName, grpcServiceName) ??
174
+ (grpcServiceName && grpcMethodName
175
+ ? `${grpcServiceName}/${grpcMethodName}`
176
+ : grpcMethodName ?? grpcServiceName);
44
177
  const contextData = {
45
178
  requestId,
46
179
  correlationId,
47
180
  tenantId: metadataValue(metadata, 'x-tenant-id'),
181
+ tenantName: metadataValue(metadata, 'x-tenant-name'),
182
+ applicationId: metadataValue(metadata, 'x-application-id'),
183
+ applicationName: metadataValue(metadata, 'x-application-name'),
48
184
  userId: metadataValue(metadata, 'x-user-id'),
49
185
  accountId: metadataValue(metadata, 'x-account-id'),
50
186
  userEmail: metadataValue(metadata, 'x-user-email'),
@@ -52,7 +188,8 @@ let ObservabilityGrpcInterceptor = class ObservabilityGrpcInterceptor {
52
188
  .split(',')
53
189
  .map((role) => role.trim())
54
190
  .filter(Boolean),
55
- origin: 'grpc',
191
+ origin: isSystemSource ? 'system' : 'grpc',
192
+ operation: operationLabel,
56
193
  };
57
194
  return new rxjs_1.Observable((subscriber) => {
58
195
  observability_context_1.ObservabilityContext.run(contextData, () => {
@@ -1 +1 @@
1
- {"version":3,"file":"observability.interceptor.js","sourceRoot":"","sources":["../../src/context/observability.interceptor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAKwB;AACxB,+BAAkC;AAClC,mCAAoC;AACpC,mEAA8F;AAM9F,SAAS,aAAa,CAAC,QAA0B,EAAE,GAAW;IAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAGM,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IACvC,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,KAAK,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,UAAU,GAAG,OAAO;aACvB,WAAW,EAAE;aACb,UAAU,EAAsD,CAAC;QACpE,MAAM,QAAQ,GACZ,UAAU,IAAI,OAAQ,UAA+B,CAAC,GAAG,KAAK,UAAU;YACtE,CAAC,CAAE,UAA+B;YAClC,CAAC,CAAE,UAA8C,EAAE,QAAQ,CAAC;QAEhE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,IAAA,mBAAU,GAAE,CAAC;QAC1E,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,SAAS,CAAC;QAC/E,MAAM,WAAW,GAA6B;YAC5C,SAAS;YACT,aAAa;YACb,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;YAChD,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC;YAC5C,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC;YAClD,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC;YAClD,SAAS,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;iBAClD,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,MAAM;SACf,CAAC;QAEF,OAAO,IAAI,iBAAU,CAAC,CAAC,UAAU,EAAE,EAAE;YACnC,4CAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE;gBACzC,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;oBACtB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;oBACvC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;oBACzC,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE;iBACtC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA5CY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,mBAAU,GAAE;GACA,4BAA4B,CA4CxC"}
1
+ {"version":3,"file":"observability.interceptor.js","sourceRoot":"","sources":["../../src/context/observability.interceptor.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export { RequestLoggingInterceptor } from './logging/request-logging.interceptor
5
5
  export * from './filters';
6
6
  export { HealthModule, HealthController, RedisHealthIndicator, RabbitMQHealthIndicator, } from './health/health.module';
7
7
  export { OutboxEvent, OutboxRepository, OutboxWorker, EventPublisher, RabbitMQEventPublisher, } from './outbox/outbox.module';
8
+ 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, AccessLogPayloadBuilder, AccessLogPayloadBuilderOptions, AccessLogInterceptor, AccessLogInterceptorOptions, RedactionOptions, TruncateBodyResult, redactHeaders, redactObject, truncateBody, hashEmail, } from './log-events';
8
9
  export { TenantContext, TenantMiddleware, TenantGuard, createPrismaTenantMiddleware, extractTenantFromGrpcMetadata, } from './auth/tenant.middleware';
9
10
  export { AuditInterceptor, AuditEntry } from './auth/audit.interceptor';
10
11
  export * from './errors';
package/dist/index.js CHANGED
@@ -14,7 +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.ObservabilityContextStorage = exports.resolveErrorSeverity = exports.emitAppErrorObservability = exports.FeatureFlagService = exports.enableGracefulShutdown = exports.GracefulShutdownModule = exports.GracefulShutdownService = exports.AuditInterceptor = exports.extractTenantFromGrpcMetadata = exports.createPrismaTenantMiddleware = exports.TenantGuard = exports.TenantMiddleware = exports.TenantContext = 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;
17
+ exports.enableGracefulShutdown = exports.GracefulShutdownModule = exports.GracefulShutdownService = exports.AuditInterceptor = exports.extractTenantFromGrpcMetadata = exports.createPrismaTenantMiddleware = exports.TenantGuard = exports.TenantMiddleware = exports.TenantContext = exports.hashEmail = exports.truncateBody = exports.redactObject = exports.redactHeaders = exports.AccessLogInterceptor = exports.AccessLogPayloadBuilder = 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.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 = void 0;
18
19
  var span_decorator_1 = require("./tracing/span.decorator");
19
20
  Object.defineProperty(exports, "Span", { enumerable: true, get: function () { return span_decorator_1.Span; } });
20
21
  Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return span_decorator_1.trace; } });
@@ -38,6 +39,32 @@ Object.defineProperty(exports, "OutboxRepository", { enumerable: true, get: func
38
39
  Object.defineProperty(exports, "OutboxWorker", { enumerable: true, get: function () { return outbox_module_1.OutboxWorker; } });
39
40
  Object.defineProperty(exports, "EventPublisher", { enumerable: true, get: function () { return outbox_module_1.EventPublisher; } });
40
41
  Object.defineProperty(exports, "RabbitMQEventPublisher", { enumerable: true, get: function () { return outbox_module_1.RabbitMQEventPublisher; } });
42
+ var log_events_1 = require("./log-events");
43
+ Object.defineProperty(exports, "LOG_KIND", { enumerable: true, get: function () { return log_events_1.LOG_KIND; } });
44
+ Object.defineProperty(exports, "LOG_TRANSPORT", { enumerable: true, get: function () { return log_events_1.LOG_TRANSPORT; } });
45
+ Object.defineProperty(exports, "ACCESS_LOG_RESULT_STATUS", { enumerable: true, get: function () { return log_events_1.ACCESS_LOG_RESULT_STATUS; } });
46
+ Object.defineProperty(exports, "ACCESS_LOG_OUTCOME", { enumerable: true, get: function () { return log_events_1.ACCESS_LOG_OUTCOME; } });
47
+ Object.defineProperty(exports, "ACCESS_LOG_FAILURE_SOURCE", { enumerable: true, get: function () { return log_events_1.ACCESS_LOG_FAILURE_SOURCE; } });
48
+ Object.defineProperty(exports, "AUDIT_ACTOR_TYPE", { enumerable: true, get: function () { return log_events_1.AUDIT_ACTOR_TYPE; } });
49
+ Object.defineProperty(exports, "AUDIT_SEVERITY", { enumerable: true, get: function () { return log_events_1.AUDIT_SEVERITY; } });
50
+ Object.defineProperty(exports, "ACCESS_LOG_OPERATION_KIND", { enumerable: true, get: function () { return log_events_1.ACCESS_LOG_OPERATION_KIND; } });
51
+ Object.defineProperty(exports, "REDACTED_VALUE", { enumerable: true, get: function () { return log_events_1.REDACTED_VALUE; } });
52
+ Object.defineProperty(exports, "DEFAULT_REDACTED_HEADER_KEYS", { enumerable: true, get: function () { return log_events_1.DEFAULT_REDACTED_HEADER_KEYS; } });
53
+ Object.defineProperty(exports, "DEFAULT_REDACTED_BODY_KEYS", { enumerable: true, get: function () { return log_events_1.DEFAULT_REDACTED_BODY_KEYS; } });
54
+ Object.defineProperty(exports, "buildLogRoutingKey", { enumerable: true, get: function () { return log_events_1.buildLogRoutingKey; } });
55
+ Object.defineProperty(exports, "LogPublisher", { enumerable: true, get: function () { return log_events_1.LogPublisher; } });
56
+ Object.defineProperty(exports, "NoopLogPublisher", { enumerable: true, get: function () { return log_events_1.NoopLogPublisher; } });
57
+ Object.defineProperty(exports, "RingBuffer", { enumerable: true, get: function () { return log_events_1.RingBuffer; } });
58
+ Object.defineProperty(exports, "RabbitMqLogPublisher", { enumerable: true, get: function () { return log_events_1.RabbitMqLogPublisher; } });
59
+ Object.defineProperty(exports, "LogSamplingPolicy", { enumerable: true, get: function () { return log_events_1.LogSamplingPolicy; } });
60
+ Object.defineProperty(exports, "OutcomeAwareSamplingPolicy", { enumerable: true, get: function () { return log_events_1.OutcomeAwareSamplingPolicy; } });
61
+ Object.defineProperty(exports, "AlwaysSampleLogPolicy", { enumerable: true, get: function () { return log_events_1.AlwaysSampleLogPolicy; } });
62
+ Object.defineProperty(exports, "AccessLogPayloadBuilder", { enumerable: true, get: function () { return log_events_1.AccessLogPayloadBuilder; } });
63
+ Object.defineProperty(exports, "AccessLogInterceptor", { enumerable: true, get: function () { return log_events_1.AccessLogInterceptor; } });
64
+ Object.defineProperty(exports, "redactHeaders", { enumerable: true, get: function () { return log_events_1.redactHeaders; } });
65
+ Object.defineProperty(exports, "redactObject", { enumerable: true, get: function () { return log_events_1.redactObject; } });
66
+ Object.defineProperty(exports, "truncateBody", { enumerable: true, get: function () { return log_events_1.truncateBody; } });
67
+ Object.defineProperty(exports, "hashEmail", { enumerable: true, get: function () { return log_events_1.hashEmail; } });
41
68
  var tenant_middleware_1 = require("./auth/tenant.middleware");
42
69
  Object.defineProperty(exports, "TenantContext", { enumerable: true, get: function () { return tenant_middleware_1.TenantContext; } });
43
70
  Object.defineProperty(exports, "TenantMiddleware", { enumerable: true, get: function () { return tenant_middleware_1.TenantMiddleware; } });
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,wDAMgC;AAJ9B,iHAAA,gBAAgB,OAAA;AAChB,6GAAA,YAAY,OAAA;AACZ,+GAAA,cAAc,OAAA;AACd,uHAAA,sBAAsB,OAAA;AAIxB,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,wDAMgC;AAJ9B,iHAAA,gBAAgB,OAAA;AAChB,6GAAA,YAAY,OAAA;AACZ,+GAAA,cAAc,OAAA;AACd,uHAAA,sBAAsB,OAAA;AAIxB,2CAiDsB;AAhDpB,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,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,69 @@
1
+ import { type AccessLogFailureSource, type AccessLogOutcome, type AccessLogPayload, type LogTransport } from './log-event.types';
2
+ export interface AccessLogPayloadBuilderOptions {
3
+ readonly maxBodyBytes?: number;
4
+ readonly redactedHeaderKeys?: ReadonlyArray<string>;
5
+ readonly redactedBodyKeys?: ReadonlyArray<string>;
6
+ }
7
+ export declare class AccessLogPayloadBuilder {
8
+ private readonly startedAtMs;
9
+ private readonly maxBodyBytes;
10
+ private readonly redactedHeaderKeys;
11
+ private readonly redactedBodyKeys;
12
+ private readonly draft;
13
+ private finalized;
14
+ constructor(options?: AccessLogPayloadBuilderOptions);
15
+ static create(options?: AccessLogPayloadBuilderOptions): AccessLogPayloadBuilder;
16
+ correlation(input: {
17
+ correlationId: string;
18
+ requestId?: string;
19
+ traceId?: string;
20
+ spanId?: string;
21
+ }): this;
22
+ identity(input: {
23
+ tenantId?: string;
24
+ accountId?: string;
25
+ email?: string;
26
+ }): this;
27
+ tenantName(tenantName?: string): this;
28
+ transport(transport: LogTransport): this;
29
+ method(method?: string): this;
30
+ path(path?: string): this;
31
+ http(input: {
32
+ method?: string;
33
+ path?: string;
34
+ }): this;
35
+ grpc(input: {
36
+ service?: string;
37
+ method?: string;
38
+ }): this;
39
+ graphql(input: {
40
+ operationType?: string;
41
+ operationName?: string;
42
+ }): this;
43
+ application(input: {
44
+ id?: string;
45
+ name?: string;
46
+ }): this;
47
+ source(input: {
48
+ service?: string;
49
+ transport?: LogTransport;
50
+ operation?: string;
51
+ }): this;
52
+ requestHeaders(headers: Record<string, string | string[] | undefined>): this;
53
+ requestBody(body: unknown): this;
54
+ responseBody(body: unknown): this;
55
+ statusCode(statusCode: number | undefined): this;
56
+ success(statusCode?: number): this;
57
+ failure(input: {
58
+ outcome?: AccessLogOutcome;
59
+ source?: AccessLogFailureSource;
60
+ reason?: string;
61
+ statusCode?: number;
62
+ }): this;
63
+ error(input: {
64
+ key?: string;
65
+ category?: string;
66
+ exceptionClass?: string;
67
+ }): this;
68
+ build(): AccessLogPayload;
69
+ }
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccessLogPayloadBuilder = void 0;
4
+ const log_event_types_1 = require("./log-event.types");
5
+ const redaction_1 = require("./redaction");
6
+ const DEFAULT_MAX_BODY_BYTES = 16 * 1024;
7
+ class AccessLogPayloadBuilder {
8
+ startedAtMs;
9
+ maxBodyBytes;
10
+ redactedHeaderKeys;
11
+ redactedBodyKeys;
12
+ draft = {};
13
+ finalized = false;
14
+ constructor(options = {}) {
15
+ this.startedAtMs = Date.now();
16
+ this.maxBodyBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
17
+ this.redactedHeaderKeys =
18
+ options.redactedHeaderKeys ?? redaction_1.DEFAULT_REDACTED_HEADER_KEYS;
19
+ this.redactedBodyKeys =
20
+ options.redactedBodyKeys ?? redaction_1.DEFAULT_REDACTED_BODY_KEYS;
21
+ this.draft.started_at = new Date(this.startedAtMs).toISOString();
22
+ this.draft.outcome = log_event_types_1.ACCESS_LOG_OUTCOME.SUCCESS;
23
+ this.draft.result_status = log_event_types_1.ACCESS_LOG_RESULT_STATUS.SUCCESS;
24
+ }
25
+ static create(options = {}) {
26
+ return new AccessLogPayloadBuilder(options);
27
+ }
28
+ correlation(input) {
29
+ this.draft.correlation_id = input.correlationId;
30
+ this.draft.request_id = input.requestId;
31
+ this.draft.trace_id = input.traceId;
32
+ this.draft.span_id = input.spanId;
33
+ return this;
34
+ }
35
+ identity(input) {
36
+ this.draft.tenant_id = input.tenantId;
37
+ this.draft.account_id = input.accountId;
38
+ this.draft.email = input.email;
39
+ return this;
40
+ }
41
+ tenantName(tenantName) {
42
+ const normalizedTenantName = typeof tenantName === 'string' && tenantName.trim().length > 0
43
+ ? tenantName.trim()
44
+ : undefined;
45
+ if (normalizedTenantName) {
46
+ this.draft.tenant_name = normalizedTenantName;
47
+ }
48
+ return this;
49
+ }
50
+ transport(transport) {
51
+ this.draft.transport = transport;
52
+ return this;
53
+ }
54
+ method(method) {
55
+ const methodLabel = typeof method === 'string' && method.trim().length > 0
56
+ ? method.trim().toUpperCase()
57
+ : undefined;
58
+ if (methodLabel) {
59
+ this.draft.method = methodLabel;
60
+ }
61
+ return this;
62
+ }
63
+ path(path) {
64
+ const pathLabel = typeof path === 'string' && path.trim().length > 0
65
+ ? path.trim()
66
+ : undefined;
67
+ if (pathLabel) {
68
+ this.draft.path = pathLabel;
69
+ }
70
+ return this;
71
+ }
72
+ http(input) {
73
+ if (input.method) {
74
+ this.draft.method = input.method.toUpperCase();
75
+ }
76
+ if (input.path) {
77
+ this.draft.path = input.path;
78
+ }
79
+ if (!this.draft.transport) {
80
+ this.draft.transport = log_event_types_1.LOG_TRANSPORT.HTTP;
81
+ }
82
+ return this;
83
+ }
84
+ grpc(input) {
85
+ const grpcMethodLabel = typeof input.method === 'string' && input.method.trim().length > 0
86
+ ? input.method.trim()
87
+ : undefined;
88
+ const grpcServiceLabel = typeof input.service === 'string' && input.service.trim().length > 0
89
+ ? input.service.trim()
90
+ : undefined;
91
+ this.draft.method = 'RPC';
92
+ if (grpcMethodLabel) {
93
+ this.draft.path = grpcServiceLabel
94
+ ? `${grpcServiceLabel}/${grpcMethodLabel}`
95
+ : grpcMethodLabel;
96
+ }
97
+ if (!this.draft.transport) {
98
+ this.draft.transport = log_event_types_1.LOG_TRANSPORT.GRPC;
99
+ }
100
+ return this;
101
+ }
102
+ graphql(input) {
103
+ const operationTypeLabel = typeof input.operationType === 'string' &&
104
+ input.operationType.trim().length > 0
105
+ ? input.operationType.trim().toUpperCase()
106
+ : undefined;
107
+ const operationNameLabel = typeof input.operationName === 'string' &&
108
+ input.operationName.trim().length > 0
109
+ ? input.operationName.trim()
110
+ : undefined;
111
+ if (operationTypeLabel) {
112
+ this.draft.method = operationTypeLabel;
113
+ }
114
+ if (operationNameLabel) {
115
+ this.draft.path = operationNameLabel;
116
+ }
117
+ if (!this.draft.transport) {
118
+ this.draft.transport = log_event_types_1.LOG_TRANSPORT.GRAPHQL;
119
+ }
120
+ return this;
121
+ }
122
+ application(input) {
123
+ const applicationId = typeof input.id === 'string' && input.id.trim().length > 0
124
+ ? input.id.trim()
125
+ : undefined;
126
+ const applicationName = typeof input.name === 'string' && input.name.trim().length > 0
127
+ ? input.name.trim()
128
+ : applicationId;
129
+ if (applicationId) {
130
+ this.draft.application_id = applicationId;
131
+ }
132
+ if (applicationName) {
133
+ this.draft.application_name = applicationName;
134
+ }
135
+ return this;
136
+ }
137
+ source(input) {
138
+ const sourceServiceLabel = typeof input.service === 'string' && input.service.trim().length > 0
139
+ ? input.service.trim()
140
+ : undefined;
141
+ const sourceOperationLabel = typeof input.operation === 'string' && input.operation.trim().length > 0
142
+ ? input.operation.trim()
143
+ : undefined;
144
+ if (sourceServiceLabel) {
145
+ this.draft.source_service = sourceServiceLabel;
146
+ }
147
+ if (input.transport) {
148
+ this.draft.source_transport = input.transport;
149
+ }
150
+ if (sourceOperationLabel) {
151
+ this.draft.source_operation = sourceOperationLabel;
152
+ }
153
+ return this;
154
+ }
155
+ requestHeaders(headers) {
156
+ this.draft.request_headers = (0, redaction_1.redactHeaders)(headers, {
157
+ keys: this.redactedHeaderKeys,
158
+ });
159
+ return this;
160
+ }
161
+ requestBody(body) {
162
+ const redacted = (0, redaction_1.redactObject)(body, {
163
+ keys: this.redactedBodyKeys,
164
+ });
165
+ const truncated = (0, redaction_1.truncateBody)(redacted, this.maxBodyBytes);
166
+ this.draft.request_body = truncated.body;
167
+ if (truncated.truncated) {
168
+ this.draft.body_truncated = true;
169
+ }
170
+ return this;
171
+ }
172
+ responseBody(body) {
173
+ const redacted = (0, redaction_1.redactObject)(body, {
174
+ keys: this.redactedBodyKeys,
175
+ });
176
+ const truncated = (0, redaction_1.truncateBody)(redacted, this.maxBodyBytes);
177
+ this.draft.response_body = truncated.body;
178
+ if (truncated.truncated) {
179
+ this.draft.body_truncated = true;
180
+ }
181
+ return this;
182
+ }
183
+ statusCode(statusCode) {
184
+ if (typeof statusCode === 'number') {
185
+ this.draft.status_code = statusCode;
186
+ }
187
+ return this;
188
+ }
189
+ success(statusCode) {
190
+ this.draft.result_status = log_event_types_1.ACCESS_LOG_RESULT_STATUS.SUCCESS;
191
+ this.draft.outcome = log_event_types_1.ACCESS_LOG_OUTCOME.SUCCESS;
192
+ if (typeof statusCode === 'number') {
193
+ this.draft.status_code = statusCode;
194
+ }
195
+ return this;
196
+ }
197
+ failure(input) {
198
+ this.draft.result_status = log_event_types_1.ACCESS_LOG_RESULT_STATUS.FAILURE;
199
+ this.draft.outcome = input.outcome ?? log_event_types_1.ACCESS_LOG_OUTCOME.ERROR;
200
+ this.draft.failure_source =
201
+ input.source ?? log_event_types_1.ACCESS_LOG_FAILURE_SOURCE.APPLICATION;
202
+ if (input.reason) {
203
+ this.draft.failure_reason = input.reason;
204
+ }
205
+ if (typeof input.statusCode === 'number') {
206
+ this.draft.status_code = input.statusCode;
207
+ }
208
+ return this;
209
+ }
210
+ error(input) {
211
+ this.draft.error_key = input.key;
212
+ this.draft.error_category = input.category;
213
+ this.draft.exception_class = input.exceptionClass;
214
+ return this;
215
+ }
216
+ build() {
217
+ if (this.finalized) {
218
+ throw new Error('AccessLogPayloadBuilder.build() already called — builders are single-use');
219
+ }
220
+ this.finalized = true;
221
+ const completedAtMs = Date.now();
222
+ this.draft.completed_at = new Date(completedAtMs).toISOString();
223
+ this.draft.duration_ms = Math.max(0, completedAtMs - this.startedAtMs);
224
+ if (!this.draft.correlation_id) {
225
+ throw new Error('AccessLogPayloadBuilder: correlation_id is required before build()');
226
+ }
227
+ if (!this.draft.result_status) {
228
+ this.draft.result_status = log_event_types_1.ACCESS_LOG_RESULT_STATUS.SUCCESS;
229
+ }
230
+ if (!this.draft.outcome) {
231
+ this.draft.outcome = log_event_types_1.ACCESS_LOG_OUTCOME.SUCCESS;
232
+ }
233
+ return this.draft;
234
+ }
235
+ }
236
+ exports.AccessLogPayloadBuilder = AccessLogPayloadBuilder;
237
+ //# sourceMappingURL=access-log-payload.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-log-payload.builder.js","sourceRoot":"","sources":["../../src/log-events/access-log-payload.builder.ts"],"names":[],"mappings":"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"}