@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.
- package/LICENSE.md +3 -0
- package/README.md +198 -0
- package/dist/src/app.controller.d.ts +12 -0
- package/dist/src/app.controller.js +53 -0
- package/dist/src/app.controller.js.map +1 -0
- package/dist/src/app.module.d.ts +2 -0
- package/dist/src/app.module.js +44 -0
- package/dist/src/app.module.js.map +1 -0
- package/dist/src/config/certificates.d.ts +5 -0
- package/dist/src/config/certificates.js +47 -0
- package/dist/src/config/certificates.js.map +1 -0
- package/dist/src/config/cli.d.ts +1 -0
- package/dist/src/config/cli.js +45 -0
- package/dist/src/config/cli.js.map +1 -0
- package/dist/src/config/config.interface.d.ts +17 -0
- package/dist/src/config/config.interface.js +2 -0
- package/dist/src/config/config.interface.js.map +1 -0
- package/dist/src/config/config.service.d.ts +21 -0
- package/dist/src/config/config.service.js +275 -0
- package/dist/src/config/config.service.js.map +1 -0
- package/dist/src/config/cors.d.ts +7 -0
- package/dist/src/config/cors.js +29 -0
- package/dist/src/config/cors.js.map +1 -0
- package/dist/src/config/util.d.ts +1 -0
- package/dist/src/config/util.js +5 -0
- package/dist/src/config/util.js.map +1 -0
- package/dist/src/dto/log-event.dto.d.ts +37 -0
- package/dist/src/dto/log-event.dto.js +125 -0
- package/dist/src/dto/log-event.dto.js.map +1 -0
- package/dist/src/log-event-validation.pipe.d.ts +4 -0
- package/dist/src/log-event-validation.pipe.js +23 -0
- package/dist/src/log-event-validation.pipe.js.map +1 -0
- package/dist/src/logger-auth.guard.d.ts +7 -0
- package/dist/src/logger-auth.guard.js +46 -0
- package/dist/src/logger-auth.guard.js.map +1 -0
- package/dist/src/logs/logs.module.d.ts +2 -0
- package/dist/src/logs/logs.module.js +19 -0
- package/dist/src/logs/logs.module.js.map +1 -0
- package/dist/src/logs/logs.service.d.ts +29 -0
- package/dist/src/logs/logs.service.js +201 -0
- package/dist/src/logs/logs.service.js.map +1 -0
- package/dist/src/main.d.ts +12 -0
- package/dist/src/main.js +59 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/socket-address-throttler.guard.d.ts +12 -0
- package/dist/src/socket-address-throttler.guard.js +10 -0
- package/dist/src/socket-address-throttler.guard.js.map +1 -0
- package/dist/src/validation.pipe.d.ts +8 -0
- package/dist/src/validation.pipe.js +20 -0
- package/dist/src/validation.pipe.js.map +1 -0
- package/dist/test/e2e/app.e2e.spec.d.ts +1 -0
- package/dist/test/e2e/app.e2e.spec.js +276 -0
- package/dist/test/e2e/app.e2e.spec.js.map +1 -0
- package/dist/test/unit/certificates.spec.d.ts +1 -0
- package/dist/test/unit/certificates.spec.js +46 -0
- package/dist/test/unit/certificates.spec.js.map +1 -0
- package/dist/test/unit/cli.spec.d.ts +1 -0
- package/dist/test/unit/cli.spec.js +100 -0
- package/dist/test/unit/cli.spec.js.map +1 -0
- package/dist/test/unit/config.service.spec.d.ts +1 -0
- package/dist/test/unit/config.service.spec.js +189 -0
- package/dist/test/unit/config.service.spec.js.map +1 -0
- package/dist/test/unit/cors.spec.d.ts +1 -0
- package/dist/test/unit/cors.spec.js +41 -0
- package/dist/test/unit/cors.spec.js.map +1 -0
- package/dist/test/unit/logger-auth.guard.spec.d.ts +1 -0
- package/dist/test/unit/logger-auth.guard.spec.js +40 -0
- package/dist/test/unit/logger-auth.guard.spec.js.map +1 -0
- package/dist/test/unit/logs.service.spec.d.ts +1 -0
- package/dist/test/unit/logs.service.spec.js +246 -0
- package/dist/test/unit/logs.service.spec.js.map +1 -0
- package/dist/test/unit/socket-address-throttler.guard.spec.d.ts +1 -0
- package/dist/test/unit/socket-address-throttler.guard.spec.js +18 -0
- package/dist/test/unit/socket-address-throttler.guard.spec.js.map +1 -0
- package/dist/test/unit/validation.pipe.spec.d.ts +1 -0
- package/dist/test/unit/validation.pipe.spec.js +132 -0
- package/dist/test/unit/validation.pipe.spec.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- 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 @@
|
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,SAAS;CACV,CAAC,CAAC;AAqCH,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,KAAK,KAAK,IAAI,CACf,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,GAAoB,EACpB,OAAe,EACf,IAA4B;IAE5B,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAc,EACd,GAAoB,EACpB,IAA4B;IAE5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QACzE,eAAe,CACb,GAAG,EACH,mCAAmC,wBAAwB,aAAa,EACxE,IAAI,CACL,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,eAAe,CACb,GAAG,EACH,uDAAuD,EACvD,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAmB;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAsB,EACtB,GAAoB;IAEpB,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAkB,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAsB;IAC/C,OAAO;QACL,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC/D,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAmB,EACnB,IAAsB,EACtB,GAAoB;IAEpB,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,yBAAyB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,KAAwB,EACxB,GAAoB;IAEpB,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC7C,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAwB;IACvD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;IAC5B,OAAO;QACL,GAAG;QACH,KAAK;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;QAC5B,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;QACnC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAwB,EACxB,IAAsB;IAEtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO;IACzE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAwB,EACxB,GAAoB;IAEpB,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,qBAAqB,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,GAAoB,EACpB,GAAoB,EACpB,IAA4B;IAE5B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,sBAAsB;QAAE,OAAO;IAC5E,eAAe,CACb,GAAG,EACH,iCAAiC,sBAAsB,aAAa,EACpE,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,WAAmB,EACnB,GAAoB,EACpB,IAA4B;IAE5B,IAAI,WAAW,IAAI,mBAAmB;QAAE,OAAO;IAC/C,eAAe,CACb,GAAG,EACH,4BAA4B,mBAAmB,UAAU,EACzD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAwB,EACxB,GAAoB;IAEpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,eAAe,CACb,GAAG,EACH,4BAA4B,iBAAiB,SAAS,EACtD,KAAK,CAAC,IAAI,CACX,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,aAAa,GAAG,CAAC;KACpB,MAAM,CAAgB,eAAe,EAAE,2BAA2B,CAAC;KACnE,WAAW,CAAC,wBAAwB,CAAC,CAAC;AAEzC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC5B,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,KAAK,CAAC,iBAAiB,EAAE,uCAAuC,CAAC;IACpE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAChD,KAAK,EAAE,kBAAkB;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,eAAe,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;CACnC,CAAC,CAAC"}
|
|
@@ -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,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"}
|