@into-cps-association/logger-ms 0.1.1

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 (79) hide show
  1. package/LICENSE.md +3 -0
  2. package/README.md +198 -0
  3. package/dist/src/app.controller.d.ts +12 -0
  4. package/dist/src/app.controller.js +53 -0
  5. package/dist/src/app.controller.js.map +1 -0
  6. package/dist/src/app.module.d.ts +2 -0
  7. package/dist/src/app.module.js +44 -0
  8. package/dist/src/app.module.js.map +1 -0
  9. package/dist/src/config/certificates.d.ts +5 -0
  10. package/dist/src/config/certificates.js +47 -0
  11. package/dist/src/config/certificates.js.map +1 -0
  12. package/dist/src/config/cli.d.ts +1 -0
  13. package/dist/src/config/cli.js +45 -0
  14. package/dist/src/config/cli.js.map +1 -0
  15. package/dist/src/config/config.interface.d.ts +17 -0
  16. package/dist/src/config/config.interface.js +2 -0
  17. package/dist/src/config/config.interface.js.map +1 -0
  18. package/dist/src/config/config.service.d.ts +21 -0
  19. package/dist/src/config/config.service.js +275 -0
  20. package/dist/src/config/config.service.js.map +1 -0
  21. package/dist/src/config/cors.d.ts +7 -0
  22. package/dist/src/config/cors.js +29 -0
  23. package/dist/src/config/cors.js.map +1 -0
  24. package/dist/src/config/util.d.ts +1 -0
  25. package/dist/src/config/util.js +5 -0
  26. package/dist/src/config/util.js.map +1 -0
  27. package/dist/src/dto/log-event.dto.d.ts +37 -0
  28. package/dist/src/dto/log-event.dto.js +125 -0
  29. package/dist/src/dto/log-event.dto.js.map +1 -0
  30. package/dist/src/log-event-validation.pipe.d.ts +4 -0
  31. package/dist/src/log-event-validation.pipe.js +23 -0
  32. package/dist/src/log-event-validation.pipe.js.map +1 -0
  33. package/dist/src/logger-auth.guard.d.ts +7 -0
  34. package/dist/src/logger-auth.guard.js +46 -0
  35. package/dist/src/logger-auth.guard.js.map +1 -0
  36. package/dist/src/logs/logs.module.d.ts +2 -0
  37. package/dist/src/logs/logs.module.js +19 -0
  38. package/dist/src/logs/logs.module.js.map +1 -0
  39. package/dist/src/logs/logs.service.d.ts +29 -0
  40. package/dist/src/logs/logs.service.js +201 -0
  41. package/dist/src/logs/logs.service.js.map +1 -0
  42. package/dist/src/main.d.ts +12 -0
  43. package/dist/src/main.js +59 -0
  44. package/dist/src/main.js.map +1 -0
  45. package/dist/src/socket-address-throttler.guard.d.ts +12 -0
  46. package/dist/src/socket-address-throttler.guard.js +10 -0
  47. package/dist/src/socket-address-throttler.guard.js.map +1 -0
  48. package/dist/src/validation.pipe.d.ts +8 -0
  49. package/dist/src/validation.pipe.js +20 -0
  50. package/dist/src/validation.pipe.js.map +1 -0
  51. package/dist/test/e2e/app.e2e.spec.d.ts +1 -0
  52. package/dist/test/e2e/app.e2e.spec.js +276 -0
  53. package/dist/test/e2e/app.e2e.spec.js.map +1 -0
  54. package/dist/test/unit/certificates.spec.d.ts +1 -0
  55. package/dist/test/unit/certificates.spec.js +46 -0
  56. package/dist/test/unit/certificates.spec.js.map +1 -0
  57. package/dist/test/unit/cli.spec.d.ts +1 -0
  58. package/dist/test/unit/cli.spec.js +100 -0
  59. package/dist/test/unit/cli.spec.js.map +1 -0
  60. package/dist/test/unit/config.service.spec.d.ts +1 -0
  61. package/dist/test/unit/config.service.spec.js +189 -0
  62. package/dist/test/unit/config.service.spec.js.map +1 -0
  63. package/dist/test/unit/cors.spec.d.ts +1 -0
  64. package/dist/test/unit/cors.spec.js +41 -0
  65. package/dist/test/unit/cors.spec.js.map +1 -0
  66. package/dist/test/unit/logger-auth.guard.spec.d.ts +1 -0
  67. package/dist/test/unit/logger-auth.guard.spec.js +40 -0
  68. package/dist/test/unit/logger-auth.guard.spec.js.map +1 -0
  69. package/dist/test/unit/logs.service.spec.d.ts +1 -0
  70. package/dist/test/unit/logs.service.spec.js +246 -0
  71. package/dist/test/unit/logs.service.spec.js.map +1 -0
  72. package/dist/test/unit/socket-address-throttler.guard.spec.d.ts +1 -0
  73. package/dist/test/unit/socket-address-throttler.guard.spec.js +18 -0
  74. package/dist/test/unit/socket-address-throttler.guard.spec.js.map +1 -0
  75. package/dist/test/unit/validation.pipe.spec.d.ts +1 -0
  76. package/dist/test/unit/validation.pipe.spec.js +132 -0
  77. package/dist/test/unit/validation.pipe.spec.js.map +1 -0
  78. package/dist/tsconfig.tsbuildinfo +1 -0
  79. package/package.json +80 -0
@@ -0,0 +1,275 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { readFileSync } from 'node:fs';
11
+ import path from 'node:path';
12
+ import * as yaml from 'js-yaml';
13
+ import { Injectable } from '@nestjs/common';
14
+ import { z } from 'zod';
15
+ import resolveFile from './util.js';
16
+ const DEFAULT_HOSTNAME = '127.0.0.1';
17
+ const DEFAULT_PORT = 4003;
18
+ const DEFAULT_AUTH_TOKEN = '';
19
+ const DEFAULT_CERTS_DIR = 'certs';
20
+ const DEFAULT_LOG_FILE = 'logs/workflow-logs.jsonl';
21
+ const DEFAULT_MAX_PAYLOAD_BYTES = 64 * 1024;
22
+ const DEFAULT_CORS_ALLOW_ORIGIN = '';
23
+ const DEFAULT_CORS_ALLOW_CREDENTIALS = false;
24
+ const DEFAULT_LOG_MAX_BYTES = 50 * 1024 * 1024;
25
+ const DEFAULT_LOG_RETENTION_FILES = 5;
26
+ const DEFAULT_THROTTLE_TTL = 60_000;
27
+ const DEFAULT_THROTTLE_LIMIT = 120;
28
+ const booleanSchema = z.preprocess((value) => {
29
+ if (typeof value === 'boolean') {
30
+ return value;
31
+ }
32
+ if (typeof value !== 'string') {
33
+ return value;
34
+ }
35
+ const normalized = value.trim().toLowerCase();
36
+ if (normalized === 'true' ||
37
+ normalized === '1' ||
38
+ normalized === 'yes' ||
39
+ normalized === 'y') {
40
+ return true;
41
+ }
42
+ if (normalized === 'false' ||
43
+ normalized === '0' ||
44
+ normalized === 'no' ||
45
+ normalized === 'n') {
46
+ return false;
47
+ }
48
+ return value;
49
+ }, z.boolean());
50
+ const loggerConfigSchema = z
51
+ .object({
52
+ hostname: z.string().trim().min(1).optional(),
53
+ port: z.coerce.number().int().positive().optional(),
54
+ 'cors-allow-origin': z
55
+ .union([
56
+ z.string().trim().min(1),
57
+ z.array(z.string().trim().min(1)).min(1),
58
+ ])
59
+ .optional(),
60
+ 'cors-allow-credentials': booleanSchema.optional(),
61
+ 'auth-token': z.string().optional(),
62
+ certs: z.string().trim().min(1).optional(),
63
+ tls: booleanSchema.optional(),
64
+ 'log-file-path': z.string().trim().min(1).optional(),
65
+ 'max-payload-bytes': z.coerce.number().int().positive().optional(),
66
+ 'log-max-bytes': z.coerce.number().int().positive().optional(),
67
+ 'log-retention-files': z.coerce.number().int().positive().optional(),
68
+ 'throttle-ttl': z.coerce.number().int().positive().optional(),
69
+ 'throttle-limit': z.coerce.number().int().positive().optional(),
70
+ })
71
+ .strict();
72
+ function defaultConfigValues() {
73
+ return {
74
+ hostname: DEFAULT_HOSTNAME,
75
+ port: DEFAULT_PORT,
76
+ 'cors-allow-origin': DEFAULT_CORS_ALLOW_ORIGIN,
77
+ 'cors-allow-credentials': DEFAULT_CORS_ALLOW_CREDENTIALS,
78
+ 'auth-token': DEFAULT_AUTH_TOKEN,
79
+ certs: path.resolve(process.cwd(), DEFAULT_CERTS_DIR),
80
+ tls: false,
81
+ 'log-file-path': path.resolve(process.cwd(), DEFAULT_LOG_FILE),
82
+ 'max-payload-bytes': DEFAULT_MAX_PAYLOAD_BYTES,
83
+ 'log-max-bytes': DEFAULT_LOG_MAX_BYTES,
84
+ 'log-retention-files': DEFAULT_LOG_RETENTION_FILES,
85
+ 'throttle-ttl': DEFAULT_THROTTLE_TTL,
86
+ 'throttle-limit': DEFAULT_THROTTLE_LIMIT,
87
+ };
88
+ }
89
+ function resolvePath(pathValue, baseDirectory) {
90
+ if (path.isAbsolute(pathValue)) {
91
+ return pathValue;
92
+ }
93
+ return path.resolve(baseDirectory, pathValue);
94
+ }
95
+ function parseBooleanEnv(envValue, variableName) {
96
+ if (envValue === undefined || envValue.trim() === '') {
97
+ return undefined;
98
+ }
99
+ const parsed = booleanSchema.safeParse(envValue);
100
+ if (!parsed.success) {
101
+ throw new Error(`${variableName} must be a boolean value (true/false, yes/no, 1/0)`);
102
+ }
103
+ return parsed.data;
104
+ }
105
+ function parsePositiveIntegerEnv(envValue, variableName) {
106
+ if (envValue === undefined || envValue.trim() === '') {
107
+ return undefined;
108
+ }
109
+ const parsed = Number.parseInt(envValue, 10);
110
+ if (Number.isNaN(parsed) || parsed <= 0) {
111
+ throw new Error(`${variableName} must be a positive integer`);
112
+ }
113
+ return parsed;
114
+ }
115
+ let Config = class Config {
116
+ configValues = defaultConfigValues();
117
+ constructor() {
118
+ this.loadConfig();
119
+ }
120
+ loadConfig(configPath) {
121
+ this.configValues = defaultConfigValues();
122
+ const selectedConfigPath = configPath ?? process.env.LOGGER_CONFIG_PATH;
123
+ if (selectedConfigPath !== undefined && selectedConfigPath.trim() !== '') {
124
+ this.loadYamlConfig(selectedConfigPath);
125
+ }
126
+ this.applyEnvOverrides();
127
+ }
128
+ getHostname() {
129
+ return this.configValues.hostname;
130
+ }
131
+ getPort() {
132
+ return this.configValues.port;
133
+ }
134
+ getCorsAllowOrigin() {
135
+ return this.configValues['cors-allow-origin'];
136
+ }
137
+ getCorsAllowCredentials() {
138
+ return this.configValues['cors-allow-credentials'];
139
+ }
140
+ getAuthToken() {
141
+ return this.configValues['auth-token'];
142
+ }
143
+ getTls() {
144
+ return this.configValues.tls;
145
+ }
146
+ getCertsDirectory() {
147
+ return this.configValues.certs;
148
+ }
149
+ getLogFilePath() {
150
+ return this.configValues['log-file-path'];
151
+ }
152
+ getMaxPayloadBytes() {
153
+ return this.configValues['max-payload-bytes'];
154
+ }
155
+ getLogMaxBytes() {
156
+ return this.configValues['log-max-bytes'];
157
+ }
158
+ getLogRetentionFiles() {
159
+ return this.configValues['log-retention-files'];
160
+ }
161
+ getThrottleTtl() {
162
+ return this.configValues['throttle-ttl'];
163
+ }
164
+ getThrottleLimit() {
165
+ return this.configValues['throttle-limit'];
166
+ }
167
+ loadYamlConfig(configPath) {
168
+ const resolvedConfigPath = resolveFile(configPath);
169
+ const configDirectory = path.dirname(resolvedConfigPath);
170
+ const configFile = readFileSync(resolvedConfigPath, 'utf8');
171
+ const loadedYaml = yaml.load(configFile);
172
+ const yamlValues = loadedYaml === undefined ? {} : loggerConfigSchema.parse(loadedYaml);
173
+ if (yamlValues.hostname !== undefined) {
174
+ this.configValues.hostname = yamlValues.hostname;
175
+ }
176
+ if (yamlValues.port !== undefined) {
177
+ this.configValues.port = yamlValues.port;
178
+ }
179
+ if (yamlValues['cors-allow-origin'] !== undefined) {
180
+ this.configValues['cors-allow-origin'] = yamlValues['cors-allow-origin'];
181
+ }
182
+ if (yamlValues['cors-allow-credentials'] !== undefined) {
183
+ this.configValues['cors-allow-credentials'] =
184
+ yamlValues['cors-allow-credentials'];
185
+ }
186
+ if (yamlValues['auth-token'] !== undefined) {
187
+ this.configValues['auth-token'] = yamlValues['auth-token'];
188
+ }
189
+ if (yamlValues.tls !== undefined) {
190
+ this.configValues.tls = yamlValues.tls;
191
+ }
192
+ if (yamlValues.certs !== undefined) {
193
+ this.configValues.certs = resolvePath(yamlValues.certs, configDirectory);
194
+ }
195
+ if (yamlValues['log-file-path'] !== undefined) {
196
+ this.configValues['log-file-path'] = resolvePath(yamlValues['log-file-path'], configDirectory);
197
+ }
198
+ if (yamlValues['max-payload-bytes'] !== undefined) {
199
+ this.configValues['max-payload-bytes'] = yamlValues['max-payload-bytes'];
200
+ }
201
+ if (yamlValues['log-max-bytes'] !== undefined) {
202
+ this.configValues['log-max-bytes'] = yamlValues['log-max-bytes'];
203
+ }
204
+ if (yamlValues['log-retention-files'] !== undefined) {
205
+ this.configValues['log-retention-files'] =
206
+ yamlValues['log-retention-files'];
207
+ }
208
+ if (yamlValues['throttle-ttl'] !== undefined) {
209
+ this.configValues['throttle-ttl'] = yamlValues['throttle-ttl'];
210
+ }
211
+ if (yamlValues['throttle-limit'] !== undefined) {
212
+ this.configValues['throttle-limit'] = yamlValues['throttle-limit'];
213
+ }
214
+ }
215
+ applyEnvOverrides() {
216
+ const hostname = process.env.LOGGER_HOSTNAME;
217
+ if (hostname !== undefined && hostname.trim() !== '') {
218
+ this.configValues.hostname = hostname.trim();
219
+ }
220
+ const port = parsePositiveIntegerEnv(process.env.LOGGER_PORT, 'LOGGER_PORT');
221
+ if (port !== undefined) {
222
+ this.configValues.port = port;
223
+ }
224
+ const corsAllowOrigin = process.env.LOGGER_CORS_ALLOW_ORIGIN;
225
+ if (corsAllowOrigin !== undefined && corsAllowOrigin.trim() !== '') {
226
+ this.configValues['cors-allow-origin'] = corsAllowOrigin.trim();
227
+ }
228
+ const corsAllowCredentials = parseBooleanEnv(process.env.LOGGER_CORS_ALLOW_CREDENTIALS, 'LOGGER_CORS_ALLOW_CREDENTIALS');
229
+ if (corsAllowCredentials !== undefined) {
230
+ this.configValues['cors-allow-credentials'] = corsAllowCredentials;
231
+ }
232
+ const authToken = process.env.LOGGER_AUTH_TOKEN;
233
+ if (authToken !== undefined) {
234
+ this.configValues['auth-token'] = authToken;
235
+ }
236
+ const tls = parseBooleanEnv(process.env.LOGGER_TLS, 'LOGGER_TLS');
237
+ if (tls !== undefined) {
238
+ this.configValues.tls = tls;
239
+ }
240
+ const certsDirectory = process.env.LOGGER_CERTS_DIR;
241
+ if (certsDirectory !== undefined && certsDirectory.trim() !== '') {
242
+ this.configValues.certs = resolvePath(certsDirectory, process.cwd());
243
+ }
244
+ const logFilePath = process.env.LOGGER_LOG_FILE_PATH;
245
+ if (logFilePath !== undefined && logFilePath.trim() !== '') {
246
+ this.configValues['log-file-path'] = resolvePath(logFilePath, process.cwd());
247
+ }
248
+ const maxPayloadBytes = parsePositiveIntegerEnv(process.env.LOGGER_MAX_PAYLOAD_BYTES, 'LOGGER_MAX_PAYLOAD_BYTES');
249
+ if (maxPayloadBytes !== undefined) {
250
+ this.configValues['max-payload-bytes'] = maxPayloadBytes;
251
+ }
252
+ const logMaxBytes = parsePositiveIntegerEnv(process.env.LOGGER_LOG_MAX_BYTES, 'LOGGER_LOG_MAX_BYTES');
253
+ if (logMaxBytes !== undefined) {
254
+ this.configValues['log-max-bytes'] = logMaxBytes;
255
+ }
256
+ const retentionFiles = parsePositiveIntegerEnv(process.env.LOGGER_LOG_RETENTION_FILES, 'LOGGER_LOG_RETENTION_FILES');
257
+ if (retentionFiles !== undefined) {
258
+ this.configValues['log-retention-files'] = retentionFiles;
259
+ }
260
+ const throttleTtl = parsePositiveIntegerEnv(process.env.LOGGER_THROTTLE_TTL, 'LOGGER_THROTTLE_TTL');
261
+ if (throttleTtl !== undefined) {
262
+ this.configValues['throttle-ttl'] = throttleTtl;
263
+ }
264
+ const throttleLimit = parsePositiveIntegerEnv(process.env.LOGGER_THROTTLE_LIMIT, 'LOGGER_THROTTLE_LIMIT');
265
+ if (throttleLimit !== undefined) {
266
+ this.configValues['throttle-limit'] = throttleLimit;
267
+ }
268
+ }
269
+ };
270
+ Config = __decorate([
271
+ Injectable(),
272
+ __metadata("design:paramtypes", [])
273
+ ], Config);
274
+ export default Config;
275
+ //# sourceMappingURL=config.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/config/config.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type CorsAllowOrigin } from './config.interface.js';
2
+ export declare function normalizeCorsOrigin(configuredOrigin: CorsAllowOrigin): boolean | string | string[];
3
+ export declare function buildCorsOptions(configuredOrigin: CorsAllowOrigin, credentials: boolean): {
4
+ origin: boolean | string | string[];
5
+ methods: string[];
6
+ credentials: boolean;
7
+ };
@@ -0,0 +1,29 @@
1
+ function normalizeSingleOrigin(configuredOrigin) {
2
+ const trimmedOrigin = configuredOrigin.trim();
3
+ if (/^https?:\/\//i.test(trimmedOrigin))
4
+ return trimmedOrigin;
5
+ return `http://${trimmedOrigin}`;
6
+ }
7
+ export function normalizeCorsOrigin(configuredOrigin) {
8
+ if (Array.isArray(configuredOrigin)) {
9
+ return configuredOrigin.map(normalizeSingleOrigin);
10
+ }
11
+ const trimmedOrigin = configuredOrigin.trim();
12
+ if (trimmedOrigin === '')
13
+ return false;
14
+ if (trimmedOrigin === '*')
15
+ return true;
16
+ return normalizeSingleOrigin(trimmedOrigin);
17
+ }
18
+ export function buildCorsOptions(configuredOrigin, credentials) {
19
+ const origin = normalizeCorsOrigin(configuredOrigin);
20
+ if (credentials && origin === true) {
21
+ throw new Error('cors-allow-credentials cannot be enabled with cors-allow-origin: *');
22
+ }
23
+ return {
24
+ origin,
25
+ methods: ['GET', 'POST', 'OPTIONS'],
26
+ credentials,
27
+ };
28
+ }
29
+ //# sourceMappingURL=cors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../src/config/cors.ts"],"names":[],"mappings":"AAEA,SAAS,qBAAqB,CAAC,gBAAwB;IACrD,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;QAAE,OAAO,aAAa,CAAC;IAC9D,OAAO,UAAU,aAAa,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,gBAAiC;IAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,OAAO,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,aAAa,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,aAAa,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,gBAAiC,EACjC,WAAoB;IAMpB,MAAM,MAAM,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACrD,IAAI,WAAW,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM;QACN,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;QACnC,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export default function resolveFile(name: string): string;
@@ -0,0 +1,5 @@
1
+ import path from 'node:path';
2
+ export default function resolveFile(name) {
3
+ return path.resolve(name);
4
+ }
5
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/config/util.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ export declare const logEventTypeSchema: z.ZodEnum<{
3
+ click: "click";
4
+ change: "change";
5
+ navigation: "navigation";
6
+ notification: "notification";
7
+ dismiss: "dismiss";
8
+ }>;
9
+ type ContextValue = string | number | boolean | null | ContextValue[] | {
10
+ [key: string]: ContextValue;
11
+ };
12
+ type ContextObject = {
13
+ [key: string]: ContextValue;
14
+ };
15
+ export declare const logEventSchema: z.ZodObject<{
16
+ sessionId: z.ZodString;
17
+ userHash: z.ZodString;
18
+ timestamp: z.ZodString;
19
+ event: z.ZodEnum<{
20
+ click: "click";
21
+ change: "change";
22
+ navigation: "navigation";
23
+ notification: "notification";
24
+ dismiss: "dismiss";
25
+ }>;
26
+ page: z.ZodString;
27
+ page_transition: z.ZodOptional<z.ZodObject<{
28
+ src: z.ZodString;
29
+ target: z.ZodString;
30
+ }, z.core.$strip>>;
31
+ element: z.ZodString;
32
+ label: z.ZodString;
33
+ context: z.ZodDefault<z.ZodCustom<ContextObject, ContextObject>>;
34
+ }, z.core.$strip>;
35
+ export type LogEventTypeDto = z.infer<typeof logEventTypeSchema>;
36
+ export type LogEventDto = z.infer<typeof logEventSchema>;
37
+ export {};
@@ -0,0 +1,125 @@
1
+ import { z } from 'zod';
2
+ const MAX_CONTEXT_ENTRIES = 100;
3
+ const MAX_CONTEXT_DEPTH = 6;
4
+ const MAX_CONTEXT_VALUE_LENGTH = 1024;
5
+ const MAX_CONTEXT_KEY_LENGTH = 128;
6
+ export const logEventTypeSchema = z.enum([
7
+ 'click',
8
+ 'change',
9
+ 'navigation',
10
+ 'notification',
11
+ 'dismiss',
12
+ ]);
13
+ function isContextObject(value) {
14
+ return !!value && typeof value === 'object' && !Array.isArray(value);
15
+ }
16
+ function isPrimitiveContextValue(value) {
17
+ return (typeof value === 'string' ||
18
+ typeof value === 'number' ||
19
+ typeof value === 'boolean' ||
20
+ value === null);
21
+ }
22
+ function addContextIssue(ctx, message, path) {
23
+ ctx.addIssue({ code: 'custom', message, path });
24
+ }
25
+ function validatePrimitive(value, ctx, path) {
26
+ if (typeof value === 'string' && value.length > MAX_CONTEXT_VALUE_LENGTH) {
27
+ addContextIssue(ctx, `context string may have at most ${MAX_CONTEXT_VALUE_LENGTH} characters`, path);
28
+ }
29
+ if (!isPrimitiveContextValue(value)) {
30
+ addContextIssue(ctx, 'context values must be primitives, arrays, or objects', path);
31
+ }
32
+ }
33
+ function childEntries(frame) {
34
+ if (Array.isArray(frame.value))
35
+ return [...frame.value.entries()];
36
+ if (isContextObject(frame.value))
37
+ return Object.entries(frame.value);
38
+ return [];
39
+ }
40
+ function validateContextStructure(context, ctx) {
41
+ const walk = createContextWalk(context);
42
+ while (walk.stack.length > 0) {
43
+ validateContextFrame(walk.stack.pop(), walk, ctx);
44
+ }
45
+ }
46
+ function createContextWalk(context) {
47
+ return {
48
+ stack: [{ value: context, depth: MAX_CONTEXT_DEPTH, path: [] }],
49
+ entriesSeen: 0,
50
+ };
51
+ }
52
+ function validateContextFrame(frame, walk, ctx) {
53
+ for (const entry of childEntries(frame)) {
54
+ validateContextChildEntry({ entry, frame, walk }, ctx);
55
+ }
56
+ }
57
+ function validateContextChildEntry(child, ctx) {
58
+ const entry = createContextEntryCheck(child);
59
+ validateContextEntry(entry, ctx);
60
+ queueContextChild(entry, child.walk);
61
+ }
62
+ function createContextEntryCheck(child) {
63
+ const [key, value] = child.entry;
64
+ child.walk.entriesSeen += 1;
65
+ return {
66
+ key,
67
+ value,
68
+ depth: child.frame.depth - 1,
69
+ entriesSeen: child.walk.entriesSeen,
70
+ path: [...child.frame.path, key],
71
+ };
72
+ }
73
+ function queueContextChild(entry, walk) {
74
+ if (!Array.isArray(entry.value) && !isContextObject(entry.value))
75
+ return;
76
+ walk.stack.push({ value: entry.value, depth: entry.depth, path: entry.path });
77
+ }
78
+ function validateContextEntry(entry, ctx) {
79
+ validateContextKey(entry.key, ctx, entry.path);
80
+ validateContextBudget(entry.entriesSeen, ctx, entry.path);
81
+ if (rejectsContextDepth(entry, ctx))
82
+ return;
83
+ if (!Array.isArray(entry.value) && !isContextObject(entry.value)) {
84
+ validatePrimitive(entry.value, ctx, entry.path);
85
+ }
86
+ }
87
+ function validateContextKey(key, ctx, path) {
88
+ if (typeof key !== 'string' || key.length <= MAX_CONTEXT_KEY_LENGTH)
89
+ return;
90
+ addContextIssue(ctx, `context keys may have at most ${MAX_CONTEXT_KEY_LENGTH} characters`, path);
91
+ }
92
+ function validateContextBudget(entriesSeen, ctx, path) {
93
+ if (entriesSeen <= MAX_CONTEXT_ENTRIES)
94
+ return;
95
+ addContextIssue(ctx, `context may have at most ${MAX_CONTEXT_ENTRIES} entries`, path);
96
+ }
97
+ function rejectsContextDepth(entry, ctx) {
98
+ if (!Array.isArray(entry.value) && !isContextObject(entry.value))
99
+ return false;
100
+ if (entry.depth > 0)
101
+ return false;
102
+ addContextIssue(ctx, `context may have at most ${MAX_CONTEXT_DEPTH} levels`, entry.path);
103
+ return true;
104
+ }
105
+ const contextSchema = z
106
+ .custom(isContextObject, 'context must be an object')
107
+ .superRefine(validateContextStructure);
108
+ const pageTransitionSchema = z.object({
109
+ src: z.string().min(1).max(1024),
110
+ target: z.string().min(1).max(1024),
111
+ });
112
+ export const logEventSchema = z.object({
113
+ sessionId: z.string().uuid(),
114
+ userHash: z
115
+ .string()
116
+ .regex(/^[a-f0-9]{64}$/i, 'userHash must be a SHA-256 hex string'),
117
+ timestamp: z.string().datetime({ offset: true }),
118
+ event: logEventTypeSchema,
119
+ page: z.string().min(1).max(1024),
120
+ page_transition: pageTransitionSchema.optional(),
121
+ element: z.string().min(1).max(128),
122
+ label: z.string().min(1).max(512),
123
+ context: contextSchema.default({}),
124
+ });
125
+ //# sourceMappingURL=log-event.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-event.dto.js","sourceRoot":"","sources":["../../../src/dto/log-event.dto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import ZodValidationPipe from './validation.pipe.js';
2
+ export default class LogEventValidationPipe extends ZodValidationPipe {
3
+ constructor();
4
+ }
@@ -0,0 +1,23 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Injectable } from '@nestjs/common';
11
+ import { logEventSchema } from './dto/log-event.dto.js';
12
+ import ZodValidationPipe from './validation.pipe.js';
13
+ let LogEventValidationPipe = class LogEventValidationPipe extends ZodValidationPipe {
14
+ constructor() {
15
+ super(logEventSchema);
16
+ }
17
+ };
18
+ LogEventValidationPipe = __decorate([
19
+ Injectable(),
20
+ __metadata("design:paramtypes", [])
21
+ ], LogEventValidationPipe);
22
+ export default LogEventValidationPipe;
23
+ //# sourceMappingURL=log-event-validation.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-event-validation.pipe.js","sourceRoot":"","sources":["../../src/log-event-validation.pipe.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AAGtC,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,iBAAiB;IACnE;QACE,KAAK,CAAC,cAAc,CAAC,CAAC;IACxB,CAAC;CACF,CAAA;AAJoB,sBAAsB;IAD1C,UAAU,EAAE;;GACQ,sBAAsB,CAI1C;eAJoB,sBAAsB"}
@@ -0,0 +1,7 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import Config from './config/config.service.js';
3
+ export default class LoggerAuthGuard implements CanActivate {
4
+ private readonly config;
5
+ constructor(config: Config);
6
+ canActivate(context: ExecutionContext): boolean;
7
+ }
@@ -0,0 +1,46 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { createHash, timingSafeEqual } from 'node:crypto';
11
+ import { Injectable, UnauthorizedException, } from '@nestjs/common';
12
+ import Config from './config/config.service.js';
13
+ const BEARER_PREFIX = 'Bearer ';
14
+ function hash(value) {
15
+ return createHash('sha256').update(value).digest();
16
+ }
17
+ function tokensMatch(expected, provided) {
18
+ return timingSafeEqual(hash(expected), hash(provided));
19
+ }
20
+ let LoggerAuthGuard = class LoggerAuthGuard {
21
+ config;
22
+ constructor(config) {
23
+ this.config = config;
24
+ }
25
+ canActivate(context) {
26
+ const expectedToken = this.config.getAuthToken();
27
+ if (expectedToken === '') {
28
+ return true;
29
+ }
30
+ const request = context.switchToHttp().getRequest();
31
+ const authorizationHeader = request.headers.authorization ?? '';
32
+ const providedToken = authorizationHeader.startsWith(BEARER_PREFIX)
33
+ ? authorizationHeader.slice(BEARER_PREFIX.length)
34
+ : '';
35
+ if (providedToken === '' || !tokensMatch(expectedToken, providedToken)) {
36
+ throw new UnauthorizedException('Invalid or missing bearer token');
37
+ }
38
+ return true;
39
+ }
40
+ };
41
+ LoggerAuthGuard = __decorate([
42
+ Injectable(),
43
+ __metadata("design:paramtypes", [Config])
44
+ ], LoggerAuthGuard);
45
+ export default LoggerAuthGuard;
46
+ //# sourceMappingURL=logger-auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-auth.guard.js","sourceRoot":"","sources":["../../src/logger-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAGL,UAAU,EACV,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,MAAM,aAAa,GAAG,SAAS,CAAC;AAEhC,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,QAAgB;IACrD,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,CAAC;AAGc,IAAM,eAAe,GAArB,MAAM,eAAe;IAEL;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,WAAW,CAAC,OAAyB;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACjD,IAAI,aAAa,KAAK,EAAE,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QAC7D,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;QAChE,MAAM,aAAa,GAAG,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC;YACjE,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;YACjD,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,aAAa,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,qBAAqB,CAAC,iCAAiC,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAtBoB,eAAe;IADnC,UAAU,EAAE;qCAG0B,MAAM;GAFxB,eAAe,CAsBnC;eAtBoB,eAAe"}
@@ -0,0 +1,2 @@
1
+ export default class LogsModule {
2
+ }
@@ -0,0 +1,19 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Module } from '@nestjs/common';
8
+ import Config from '../config/config.service.js';
9
+ import LogsService from './logs.service.js';
10
+ let LogsModule = class LogsModule {
11
+ };
12
+ LogsModule = __decorate([
13
+ Module({
14
+ providers: [Config, LogsService],
15
+ exports: [Config, LogsService],
16
+ })
17
+ ], LogsModule);
18
+ export default LogsModule;
19
+ //# sourceMappingURL=logs.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.module.js","sourceRoot":"","sources":["../../../src/logs/logs.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAM7B,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,UAAU;IAJ9B,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;QAChC,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;KAC/B,CAAC;GACmB,UAAU,CAAG;eAAb,UAAU"}