snugkv-nest 0.6.0 → 0.8.0

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/README.md CHANGED
@@ -184,6 +184,20 @@ What is traced without any code:
184
184
  Options: `tracing: { http, ignorePaths, httpClient, stream, maxLen, batchSize, flushMs, maxBuffer, redact, maxAttrLength }`.
185
185
  Without Nest: `const tracer = new Tracer(client, { service: 'api' }); setTracer(tracer);`
186
186
 
187
+ ## Log shipping
188
+
189
+ ```ts
190
+ SnugKvModule.forRoot({ url: 'snugkv://localhost:6383', service: 'ledger', logs: true });
191
+ ```
192
+
193
+ Everything the app writes to stdout and stderr (Nest's logger, winston, pino, `console.log`, stack traces) is also written to the `snug:logs` stream. The terminal output does not change. The Logs page of the SnugKV console then shows the logs of every service in one place, with live tail, level and service filters and search.
194
+
195
+ - Levels and contexts are read from Nest's console format, winston's `timestamp [Context] level: message`, JSON lines (`level`, `message`/`msg`, `context`) and `console.warn`/`console.error`. Anything else on stdout is `info`, on stderr `error`.
196
+ - A line written inside a trace carries the trace id, so the console links it to the flow on the Traces page.
197
+ - Lines are written in batches and kept in memory while the server is unreachable (newest 5,000). Shipping never throws into your code.
198
+
199
+ Options (`logs: { … }`): `level` (lowest level shipped, default `debug`), `stream` (default `snug:logs`), `maxLen` (stream cap, default 100,000), `maxMessageLength` (default 8,000), `batchSize`, `flushMs`, `maxBuffer`, `instance` (default: host name). Without Nest: `captureLogs(new LogShipper(client, { service: 'worker' }))`.
200
+
187
201
  ## Service map
188
202
 
189
203
  Every app using `SnugKvModule` describes itself in SnugKV so tools can draw the whole system: the SnugKV console's **Map** page shows each service with its HTTP routes, the queues it adds jobs to and works on, and the topics it publishes and reads, connected into one picture. Nothing to write by hand.
@@ -200,6 +214,18 @@ The card is a JSON string at `snug:svc:<service>:<instance>`, refreshed every 15
200
214
  }
201
215
  ```
202
216
 
217
+ The card also lists **dependencies**: things outside the app it uses or is called by. SnugKV is added by itself; declare the rest once at startup so the map shows the whole picture:
218
+
219
+ ```ts
220
+ import { declareDependency } from 'snugkv-nest';
221
+
222
+ declareDependency({ kind: 'mongodb', name: 'MongoDB', address: 'mongo:27017' });
223
+ declareDependency({ kind: 'http', name: 'Alchemy', direction: 'in', routes: ['/api/evm/alchemy-webhook'] }); // calls us
224
+ declareDependency({ kind: 'http', name: 'Alchemy', hosts: ['eth-sepolia.g.alchemy.com'] }); // we call it
225
+ ```
226
+
227
+ or pass them as `serviceMap: { dependencies: [...] }`. Credentials in addresses are removed.
228
+
203
229
  Routes come from the app's controllers (with the global prefix). Queues and topics are recorded as they are used: registered with `SnugKvQueueModule`, added to, processed by a worker, published to or subscribed to. Turn it off with `serviceMap: false`. With `tracing: true` the Map page also draws what actually happens (traffic, errors, external hosts, databases) from the traces.
204
230
 
205
231
  ## Messaging (streams)
@@ -14,4 +14,5 @@ export * from './ratelimit';
14
14
  export * from './queue';
15
15
  export * from './trace';
16
16
  export * from './trace-http';
17
+ export * from './logs';
17
18
  export * from './service-map';
@@ -34,5 +34,6 @@ __exportStar(require("./ratelimit"), exports);
34
34
  __exportStar(require("./queue"), exports);
35
35
  __exportStar(require("./trace"), exports);
36
36
  __exportStar(require("./trace-http"), exports);
37
+ __exportStar(require("./logs"), exports);
37
38
  __exportStar(require("./service-map"), exports);
38
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,2CAA8E;AAArE,wGAAA,UAAU,OAAA;AAAE,6GAAA,eAAe,OAAA;AACpC,2CAAyB;AACzB,6CAA2B;AAC3B,8CAA4B;AAC5B,6CAA2B;AAC3B,wCAAsB;AACtB,+BAA6C;AAAzB,gGAAA,QAAQ,OAAA;AAC5B,2CAAyB;AACzB,uCAAqB;AACrB,0CAAwB;AACxB,yCAAuB;AACvB,8CAA4B;AAC5B,0CAAwB;AACxB,0CAAwB;AACxB,+CAA6B;AAC7B,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,2CAA8E;AAArE,wGAAA,UAAU,OAAA;AAAE,6GAAA,eAAe,OAAA;AACpC,2CAAyB;AACzB,6CAA2B;AAC3B,8CAA4B;AAC5B,6CAA2B;AAC3B,wCAAsB;AACtB,+BAA6C;AAAzB,gGAAA,QAAQ,OAAA;AAC5B,2CAAyB;AACzB,uCAAqB;AACrB,0CAAwB;AACxB,yCAAuB;AACvB,8CAA4B;AAC5B,0CAAwB;AACxB,0CAAwB;AACxB,+CAA6B;AAC7B,yCAAuB;AACvB,gDAA8B"}
@@ -0,0 +1,97 @@
1
+ import type { SnugKvClient } from './client';
2
+ /**
3
+ * Log shipping: every line an app writes to stdout or stderr (Nest's logger,
4
+ * winston, pino, plain console.log) is also written to a SnugKV stream
5
+ * (`snug:logs`), so one console can show the logs of all services together.
6
+ *
7
+ * Lines keep going to the terminal unchanged. Levels and contexts are read
8
+ * from the common formats (Nest, winston, JSON lines); a line written inside
9
+ * a trace carries its trace id, so the console links the two.
10
+ */
11
+ export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
12
+ /** One log line (or one multi-line entry, such as an error with its stack). */
13
+ export interface LogRecord {
14
+ /** Time, ms since epoch. */
15
+ ts: number;
16
+ service: string;
17
+ instance: string;
18
+ level: LogLevel;
19
+ /** Nest/winston context (the class name in `[TokenService]`), if any. */
20
+ context?: string;
21
+ message: string;
22
+ traceId?: string;
23
+ spanId?: string;
24
+ }
25
+ export interface LogShipperOptions {
26
+ /** Name of this app, shown on every line. */
27
+ service: string;
28
+ /** This process (default: host name, the container id in Docker). */
29
+ instance?: string;
30
+ /** Stream the lines go to (default `snug:logs`). */
31
+ stream?: string;
32
+ /** Approximate cap on the stream length (default 100,000). */
33
+ maxLen?: number;
34
+ /** Lowest level shipped (default `debug`, i.e. everything). */
35
+ level?: LogLevel;
36
+ /** Write after this many lines are buffered (default 200). */
37
+ batchSize?: number;
38
+ /** Write buffered lines at least this often, ms (default 500). */
39
+ flushMs?: number;
40
+ /** Lines kept while the server is unreachable; older ones are dropped (default 5,000). */
41
+ maxBuffer?: number;
42
+ /** Longest message kept (default 8,000 characters). */
43
+ maxMessageLength?: number;
44
+ /** Called when lines cannot be written. Shipping never throws into your code. */
45
+ onError?: (err: unknown) => void;
46
+ }
47
+ export declare class LogShipper {
48
+ private readonly client;
49
+ readonly service: string;
50
+ readonly instance: string;
51
+ readonly stream: string;
52
+ private readonly maxLen;
53
+ private readonly minRank;
54
+ private readonly batchSize;
55
+ private readonly maxBuffer;
56
+ private readonly maxMessageLength;
57
+ private readonly onError;
58
+ private buffer;
59
+ private timer;
60
+ private flushing;
61
+ constructor(client: Pick<SnugKvClient, 'pipeline'>, options: LogShipperOptions);
62
+ /** Queues one line. Lines below the configured level are dropped. */
63
+ ship(line: Omit<LogRecord, 'service' | 'instance' | 'ts'> & {
64
+ ts?: number;
65
+ }): void;
66
+ /** Writes buffered lines now. Resolves when they are written (or kept for later on error). */
67
+ flush(): Promise<void>;
68
+ /** Flushes and stops the timer. */
69
+ close(): Promise<void>;
70
+ }
71
+ export declare function toLevel(word: string | number | undefined, fallback?: LogLevel): LogLevel;
72
+ export interface ParsedLine {
73
+ level: LogLevel;
74
+ context?: string;
75
+ message: string;
76
+ /** Time written in the line itself, if it had one. */
77
+ ts?: number;
78
+ }
79
+ /**
80
+ * Level, context and message of one formatted entry. `fallback` is the level
81
+ * when the line does not say (from the console method or the output stream).
82
+ */
83
+ export declare function parseLogLine(raw: string, fallback?: LogLevel): ParsedLine;
84
+ /**
85
+ * Splits one write into entries. A write is usually one entry (several lines
86
+ * only for a stack or a printed object); it is split only where a line starts
87
+ * a new entry of a known format.
88
+ */
89
+ export declare function splitEntries(chunk: string): string[];
90
+ /** The shipper installed by {@link captureLogs}, if any. */
91
+ export declare function getLogShipper(): LogShipper | undefined;
92
+ /**
93
+ * Copies everything the process writes to stdout and stderr to `shipper`
94
+ * (the terminal output is unchanged). Returns a function that undoes it.
95
+ * Installing again replaces the previous capture.
96
+ */
97
+ export declare function captureLogs(shipper: LogShipper): () => void;
@@ -0,0 +1,310 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogShipper = void 0;
4
+ exports.toLevel = toLevel;
5
+ exports.parseLogLine = parseLogLine;
6
+ exports.splitEntries = splitEntries;
7
+ exports.getLogShipper = getLogShipper;
8
+ exports.captureLogs = captureLogs;
9
+ const node_os_1 = require("node:os");
10
+ const trace_1 = require("./trace");
11
+ const LEVEL_RANK = { error: 0, warn: 1, info: 2, debug: 3 };
12
+ class LogShipper {
13
+ client;
14
+ service;
15
+ instance;
16
+ stream;
17
+ maxLen;
18
+ minRank;
19
+ batchSize;
20
+ maxBuffer;
21
+ maxMessageLength;
22
+ onError;
23
+ buffer = [];
24
+ timer;
25
+ flushing;
26
+ constructor(client, options) {
27
+ this.client = client;
28
+ this.service = options.service;
29
+ this.instance = options.instance ?? (0, node_os_1.hostname)();
30
+ this.stream = options.stream ?? 'snug:logs';
31
+ this.maxLen = options.maxLen ?? 100_000;
32
+ this.minRank = LEVEL_RANK[options.level ?? 'debug'];
33
+ this.batchSize = options.batchSize ?? 200;
34
+ this.maxBuffer = options.maxBuffer ?? 5_000;
35
+ this.maxMessageLength = options.maxMessageLength ?? 8_000;
36
+ this.onError = options.onError ?? (() => undefined);
37
+ this.timer = setInterval(() => void this.flush(), options.flushMs ?? 500);
38
+ this.timer.unref?.();
39
+ }
40
+ /** Queues one line. Lines below the configured level are dropped. */
41
+ ship(line) {
42
+ if (LEVEL_RANK[line.level] > this.minRank)
43
+ return;
44
+ const message = line.message.length > this.maxMessageLength ? `${line.message.slice(0, this.maxMessageLength)}…` : line.message;
45
+ this.buffer.push({ ...line, message, ts: line.ts ?? Date.now(), service: this.service, instance: this.instance });
46
+ if (this.buffer.length > this.maxBuffer)
47
+ this.buffer.splice(0, this.buffer.length - this.maxBuffer);
48
+ if (this.buffer.length >= this.batchSize)
49
+ void this.flush();
50
+ }
51
+ /** Writes buffered lines now. Resolves when they are written (or kept for later on error). */
52
+ async flush() {
53
+ if (this.flushing)
54
+ return this.flushing;
55
+ if (!this.buffer.length)
56
+ return;
57
+ const batch = this.buffer;
58
+ this.buffer = [];
59
+ const commands = batch.map((l) => [
60
+ 'XADD', this.stream, 'MAXLEN', '~', this.maxLen, '*',
61
+ 'ts', String(l.ts),
62
+ 'service', l.service,
63
+ 'instance', l.instance,
64
+ 'level', l.level,
65
+ 'message', l.message,
66
+ ...(l.context ? ['context', l.context] : []),
67
+ ...(l.traceId ? ['traceId', l.traceId] : []),
68
+ ...(l.spanId ? ['spanId', l.spanId] : []),
69
+ ]);
70
+ this.flushing = this.client
71
+ .pipeline(commands)
72
+ .then(() => undefined)
73
+ .catch((err) => {
74
+ // Put the batch back (newest kept) so a short outage loses nothing.
75
+ this.buffer = [...batch, ...this.buffer].slice(-this.maxBuffer);
76
+ this.onError(err);
77
+ })
78
+ .finally(() => {
79
+ this.flushing = undefined;
80
+ });
81
+ return this.flushing;
82
+ }
83
+ /** Flushes and stops the timer. */
84
+ async close() {
85
+ if (this.timer)
86
+ clearInterval(this.timer);
87
+ this.timer = undefined;
88
+ await this.flush();
89
+ if (this.buffer.length)
90
+ await this.flush();
91
+ }
92
+ }
93
+ exports.LogShipper = LogShipper;
94
+ // ----- reading levels and contexts out of formatted lines
95
+ const ANSI = /\x1b\[[0-9;]*[A-Za-z]/g;
96
+ // [Nest] 12 - 10/16/2026, 6:19:00 AM LOG [RouterExplorer] Mapped {/api, GET} route +2ms
97
+ const NEST = /^\[Nest\]\s+\d+\s+-\s+.*?\s{2,}(LOG|ERROR|WARN|DEBUG|VERBOSE|FATAL)\s+(?:\[([^\]]+)\]\s+)?([\s\S]*)$/;
98
+ // 2026-10-15T15:24:40.947Z [TokenService] info: Using network: testnet +8ms
99
+ const WINSTON = /^(\d{4}-\d\d-\d\d[T ][\d:.]+Z?)\s+(?:\[([^\]]+)\]\s+)?(error|warn|warning|info|http|verbose|debug|silly):\s?([\s\S]*)$/i;
100
+ // [warn] something / warn: something / WARN something (not "Error handling…")
101
+ const LEADING_TAG = /^(?:\[(error|err|fatal|warn|warning|info|debug|trace|verbose)\]:?|(error|err|fatal|warn|warning|info|debug|trace|verbose):)\s+([\s\S]*)$/i;
102
+ const LEADING_UPPER = /^(ERROR|ERR|FATAL|WARN|WARNING|INFO|DEBUG|TRACE|VERBOSE)\s+([\s\S]*)$/;
103
+ const NEST_MS = /\s\+\d+ms$/;
104
+ function toLevel(word, fallback = 'info') {
105
+ if (typeof word === 'number') {
106
+ // pino / bunyan numeric levels
107
+ if (word >= 50)
108
+ return 'error';
109
+ if (word >= 40)
110
+ return 'warn';
111
+ if (word >= 30)
112
+ return 'info';
113
+ return 'debug';
114
+ }
115
+ switch ((word ?? '').toLowerCase()) {
116
+ case 'error':
117
+ case 'err':
118
+ case 'fatal':
119
+ case 'crit':
120
+ case 'critical':
121
+ case 'emerg':
122
+ case 'alert':
123
+ return 'error';
124
+ case 'warn':
125
+ case 'warning':
126
+ return 'warn';
127
+ case 'info':
128
+ case 'log':
129
+ case 'http':
130
+ case 'notice':
131
+ return 'info';
132
+ case 'debug':
133
+ case 'verbose':
134
+ case 'silly':
135
+ case 'trace':
136
+ return 'debug';
137
+ default:
138
+ return fallback;
139
+ }
140
+ }
141
+ /**
142
+ * Level, context and message of one formatted entry. `fallback` is the level
143
+ * when the line does not say (from the console method or the output stream).
144
+ */
145
+ function parseLogLine(raw, fallback = 'info') {
146
+ const text = raw.replace(ANSI, '').replace(/\s+$/, '');
147
+ const first = text.trimStart();
148
+ if (first.startsWith('{') && first.endsWith('}')) {
149
+ try {
150
+ const j = JSON.parse(first);
151
+ const msg = j.message ?? j.msg;
152
+ if (typeof msg === 'string') {
153
+ const ctx = j.context ?? j.ctx ?? j.name;
154
+ const time = typeof j.time === 'number' ? j.time : typeof j.timestamp === 'string' ? Date.parse(j.timestamp) : NaN;
155
+ const out = { level: toLevel(j.level, fallback), message: msg };
156
+ if (typeof ctx === 'string' && ctx)
157
+ out.context = ctx;
158
+ if (Number.isFinite(time))
159
+ out.ts = time;
160
+ if (typeof j.stack === 'string' && !msg.includes(j.stack))
161
+ out.message = `${msg}\n${j.stack}`;
162
+ return out;
163
+ }
164
+ }
165
+ catch {
166
+ /* not JSON after all */
167
+ }
168
+ }
169
+ let m = NEST.exec(text);
170
+ if (m) {
171
+ const out = { level: toLevel(m[1], fallback), message: m[3].replace(NEST_MS, '') };
172
+ if (m[2])
173
+ out.context = m[2];
174
+ return out;
175
+ }
176
+ m = WINSTON.exec(text);
177
+ if (m) {
178
+ const out = { level: toLevel(m[3], fallback), message: m[4].replace(NEST_MS, '') };
179
+ if (m[2])
180
+ out.context = m[2];
181
+ const ts = Date.parse(m[1]);
182
+ if (Number.isFinite(ts))
183
+ out.ts = ts;
184
+ return out;
185
+ }
186
+ m = LEADING_TAG.exec(text);
187
+ if (m)
188
+ return { level: toLevel(m[1] ?? m[2], fallback), message: m[3] };
189
+ m = LEADING_UPPER.exec(text);
190
+ if (m)
191
+ return { level: toLevel(m[1], fallback), message: m[2] };
192
+ return { level: fallback, message: text };
193
+ }
194
+ /** True when a line starts a new entry in one of the known formats. */
195
+ function startsEntry(line) {
196
+ const t = line.replace(ANSI, '');
197
+ return NEST.test(t) || WINSTON.test(t) || (t.startsWith('{') && t.trimEnd().endsWith('}'));
198
+ }
199
+ /**
200
+ * Splits one write into entries. A write is usually one entry (several lines
201
+ * only for a stack or a printed object); it is split only where a line starts
202
+ * a new entry of a known format.
203
+ */
204
+ function splitEntries(chunk) {
205
+ const lines = chunk.replace(/\r\n/g, '\n').split('\n');
206
+ const out = [];
207
+ for (const line of lines) {
208
+ if (out.length > 0 && startsEntry(line))
209
+ out.push(line);
210
+ else if (out.length === 0)
211
+ out.push(line);
212
+ else
213
+ out[out.length - 1] += `\n${line}`;
214
+ }
215
+ return out.map((e) => e.replace(/\s+$/, '')).filter((e) => e.replace(ANSI, '').trim() !== '');
216
+ }
217
+ let installed;
218
+ /** The shipper installed by {@link captureLogs}, if any. */
219
+ function getLogShipper() {
220
+ return installed?.shipper;
221
+ }
222
+ /**
223
+ * Copies everything the process writes to stdout and stderr to `shipper`
224
+ * (the terminal output is unchanged). Returns a function that undoes it.
225
+ * Installing again replaces the previous capture.
226
+ */
227
+ function captureLogs(shipper) {
228
+ installed?.restore();
229
+ // The console method being run, so console.warn lines are warnings even
230
+ // when the format does not say so.
231
+ let methodLevel;
232
+ let inside = false;
233
+ const handle = (chunk, encoding, fallback) => {
234
+ if (inside)
235
+ return;
236
+ inside = true;
237
+ try {
238
+ const text = typeof chunk === 'string' ? chunk : Buffer.isBuffer(chunk) || chunk instanceof Uint8Array ? Buffer.from(chunk).toString(typeof encoding === 'string' ? encoding : 'utf8') : '';
239
+ if (!text)
240
+ return;
241
+ const trace = (0, trace_1.currentTrace)();
242
+ for (const entry of splitEntries(text)) {
243
+ const p = parseLogLine(entry, methodLevel ?? fallback);
244
+ shipper.ship({
245
+ level: p.level,
246
+ message: p.message,
247
+ ...(p.context ? { context: p.context } : {}),
248
+ ...(p.ts ? { ts: p.ts } : {}),
249
+ ...(trace ? { traceId: trace.traceId, spanId: trace.spanId } : {}),
250
+ });
251
+ }
252
+ }
253
+ catch {
254
+ /* never break the app's output */
255
+ }
256
+ finally {
257
+ inside = false;
258
+ }
259
+ };
260
+ const wrap = (stream, fallback) => {
261
+ const original = stream.write;
262
+ const patched = function (chunk, encoding, cb) {
263
+ handle(chunk, encoding, fallback);
264
+ return original.call(this, chunk, encoding, cb);
265
+ };
266
+ stream.write = patched;
267
+ return () => {
268
+ if (stream.write === patched)
269
+ stream.write = original;
270
+ };
271
+ };
272
+ const consoleLevels = [
273
+ ['log', 'info'],
274
+ ['info', 'info'],
275
+ ['debug', 'debug'],
276
+ ['warn', 'warn'],
277
+ ['error', 'error'],
278
+ ['trace', 'debug'],
279
+ ];
280
+ const restoreConsole = consoleLevels.map(([method, level]) => {
281
+ const original = console[method];
282
+ const patched = function (...args) {
283
+ const prev = methodLevel;
284
+ methodLevel = level;
285
+ try {
286
+ return original.apply(this, args);
287
+ }
288
+ finally {
289
+ methodLevel = prev;
290
+ }
291
+ };
292
+ console[method] = patched;
293
+ return () => {
294
+ if (console[method] === patched)
295
+ console[method] = original;
296
+ };
297
+ });
298
+ const restoreOut = wrap(process.stdout, 'info');
299
+ const restoreErr = wrap(process.stderr, 'error');
300
+ const restore = () => {
301
+ restoreOut();
302
+ restoreErr();
303
+ restoreConsole.forEach((r) => r());
304
+ if (installed?.restore === restore)
305
+ installed = undefined;
306
+ };
307
+ installed = { shipper, restore };
308
+ return restore;
309
+ }
310
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/core/logs.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,23 @@ export interface ServiceRoute {
15
15
  /** `Controller.method` */
16
16
  handler?: string;
17
17
  }
18
+ /**
19
+ * Something outside the app that it depends on or that calls it: a database,
20
+ * SnugKV itself, a third-party API, a webhook provider.
21
+ */
22
+ export interface ServiceDependency {
23
+ /** `snugkv`, `mongodb`, `postgres`, `redis`, `http`, … */
24
+ kind: string;
25
+ /** Shown on the map, e.g. `MongoDB`, `Alchemy`. */
26
+ name: string;
27
+ /** `host:port` or a host name; never credentials. */
28
+ address?: string;
29
+ /** `out` (default): the app calls it. `in`: it calls the app (webhooks). */
30
+ direction?: 'in' | 'out';
31
+ /** For `in`: the routes it calls. For `out` HTTP APIs: host names it is reached at. */
32
+ routes?: string[];
33
+ hosts?: string[];
34
+ }
18
35
  export interface ServiceCard {
19
36
  service: string;
20
37
  instance: string;
@@ -40,7 +57,15 @@ export interface ServiceCard {
40
57
  group?: string;
41
58
  }>;
42
59
  };
60
+ dependencies: ServiceDependency[];
43
61
  }
62
+ /**
63
+ * Adds something this app uses or is called by to its service card, for the
64
+ * console's map: `declareDependency({ kind: 'mongodb', name: 'MongoDB', address: 'mongo:27017' })`,
65
+ * `declareDependency({ kind: 'http', name: 'Alchemy', direction: 'in', routes: ['/api/webhooks/alchemy'] })`.
66
+ * Declaring the same kind and name again replaces it.
67
+ */
68
+ export declare function declareDependency(dep: ServiceDependency): void;
44
69
  /** @internal Called by Queue.add, registered queues and FlowProducer. */
45
70
  export declare function noteQueueProducer(queue: string): void;
46
71
  /** @internal Called when a Worker starts. */
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ServiceCardReporter = exports.SERVICE_CARD_PREFIX = void 0;
4
+ exports.declareDependency = declareDependency;
4
5
  exports.noteQueueProducer = noteQueueProducer;
5
6
  exports.noteQueueWorker = noteQueueWorker;
6
7
  exports.notePublish = notePublish;
@@ -23,7 +24,18 @@ const seen = {
23
24
  processes: new Map(),
24
25
  publishes: new Set(),
25
26
  subscribes: new Map(),
27
+ dependencies: new Map(),
26
28
  };
29
+ /**
30
+ * Adds something this app uses or is called by to its service card, for the
31
+ * console's map: `declareDependency({ kind: 'mongodb', name: 'MongoDB', address: 'mongo:27017' })`,
32
+ * `declareDependency({ kind: 'http', name: 'Alchemy', direction: 'in', routes: ['/api/webhooks/alchemy'] })`.
33
+ * Declaring the same kind and name again replaces it.
34
+ */
35
+ function declareDependency(dep) {
36
+ const address = dep.address?.replace(/\/\/[^@/]*@/, '//').replace(/^[^@/]*@/, '');
37
+ seen.dependencies.set(`${dep.kind}\u0000${dep.name}\u0000${dep.direction ?? 'out'}`, { ...dep, address });
38
+ }
27
39
  /** @internal Called by Queue.add, registered queues and FlowProducer. */
28
40
  function noteQueueProducer(queue) {
29
41
  seen.produces.add(queue);
@@ -46,6 +58,7 @@ function resetServiceMap() {
46
58
  seen.processes.clear();
47
59
  seen.publishes.clear();
48
60
  seen.subscribes.clear();
61
+ seen.dependencies.clear();
49
62
  }
50
63
  /** Writes this process's card until stopped. Never throws into the app. */
51
64
  class ServiceCardReporter {
@@ -80,6 +93,7 @@ class ServiceCardReporter {
80
93
  publishes: [...seen.publishes].sort(),
81
94
  subscribes: [...seen.subscribes].map(([topic, group]) => ({ topic, group })).sort((a, b) => a.topic.localeCompare(b.topic)),
82
95
  },
96
+ dependencies: [...seen.dependencies.values()],
83
97
  };
84
98
  }
85
99
  /** Writes the card now. */
@@ -1 +1 @@
1
- {"version":3,"file":"service-map.js","sourceRoot":"","sources":["../../src/core/service-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-map.js","sourceRoot":"","sources":["../../src/core/service-map.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import { DynamicModule, InjectionToken, ModuleMetadata, OptionalFactoryDependenc
2
2
  import { SnugKvBusOptions } from '../core/bus';
3
3
  import { CacheOptions } from '../core/cache';
4
4
  import { TracerOptions } from '../core/trace';
5
+ import { LogShipperOptions } from '../core/logs';
6
+ import type { ServiceDependency } from '../core/service-map';
5
7
  export interface SnugKvModuleOptions extends Omit<SnugKvBusOptions, 'service'> {
6
8
  /** Name of this app. Needed for messaging (default consumer group); defaults to `app`. */
7
9
  service?: string;
@@ -29,8 +31,18 @@ export interface SnugKvModuleOptions extends Omit<SnugKvBusOptions, 'service'> {
29
31
  * Describe this app in SnugKV (`snug:svc:<service>:<instance>`): its HTTP
30
32
  * routes, queues and topics, for the console's Map page. Default true.
31
33
  */
32
- serviceMap?: boolean;
34
+ serviceMap?: boolean | {
35
+ dependencies?: ServiceDependency[];
36
+ };
37
+ /**
38
+ * Log shipping: everything the app writes to stdout and stderr (Nest's
39
+ * logger, winston, console.log) also goes to the `snug:logs` stream, where
40
+ * the console shows the logs of all services together. Terminal output is
41
+ * unchanged. Off by default.
42
+ */
43
+ logs?: boolean | SnugLogsOptions;
33
44
  }
45
+ export type SnugLogsOptions = Omit<LogShipperOptions, 'service'>;
34
46
  export interface SnugTracingOptions extends Omit<TracerOptions, 'service'> {
35
47
  /** Make every incoming HTTP request a trace (default true). */
36
48
  http?: boolean;
@@ -18,6 +18,7 @@ const flow_1 = require("../core/queue/flow");
18
18
  const pubsub_1 = require("../core/pubsub");
19
19
  const ratelimit_1 = require("../core/ratelimit");
20
20
  const trace_1 = require("../core/trace");
21
+ const logs_1 = require("../core/logs");
21
22
  const trace_http_1 = require("../core/trace-http");
22
23
  const trace_interceptor_1 = require("./trace-interceptor");
23
24
  const runtime_1 = require("./runtime");
@@ -35,7 +36,7 @@ const sharedProviders = [
35
36
  {
36
37
  provide: bus_1.SnugKvBus,
37
38
  useFactory: (options) => {
38
- const { isGlobal, autoSubscribe, autoProcess, queuePrefix, cache, lockPrefix, rateLimitPrefix, service, tracing, serviceMap, ...bus } = options;
39
+ const { isGlobal, autoSubscribe, autoProcess, queuePrefix, cache, lockPrefix, rateLimitPrefix, service, tracing, serviceMap, logs, ...bus } = options;
39
40
  return new bus_1.SnugKvBus({ logger: nestLogger(), service: service ?? 'app', ...bus });
40
41
  },
41
42
  inject: [tokens_1.SNUG_OPTIONS],
@@ -87,11 +88,35 @@ const sharedProviders = [
87
88
  },
88
89
  inject: [client_1.SnugKvClient, tokens_1.SNUG_OPTIONS],
89
90
  },
91
+ {
92
+ // Null when log shipping is off; inject it with @Optional().
93
+ provide: logs_1.LogShipper,
94
+ useFactory: (client, o) => {
95
+ if (!o.logs)
96
+ return null;
97
+ const out = process.stderr.write.bind(process.stderr);
98
+ let warned = 0;
99
+ const shipper = new logs_1.LogShipper(client, {
100
+ // Written past the capture, so a failing write cannot loop.
101
+ onError: (e) => {
102
+ if (Date.now() - warned > 60_000) {
103
+ warned = Date.now();
104
+ out(`[SnugKV] log lines not written: ${e instanceof Error ? e.message : String(e)}\n`);
105
+ }
106
+ },
107
+ ...(o.logs === true ? {} : o.logs),
108
+ service: o.service ?? 'app',
109
+ });
110
+ (0, logs_1.captureLogs)(shipper);
111
+ return shipper;
112
+ },
113
+ inject: [client_1.SnugKvClient, tokens_1.SNUG_OPTIONS],
114
+ },
90
115
  // Passes requests straight through unless tracing (and its `http` option) is on.
91
116
  { provide: core_1.APP_INTERCEPTOR, useClass: trace_interceptor_1.TraceInterceptor },
92
117
  runtime_1.SnugKvRuntime,
93
118
  ];
94
- const exported = [bus_1.SnugKvBus, client_1.SnugKvClient, pubsub_1.SnugKvSubscriber, cache_1.SnugKvCache, lock_1.SnugKvLocks, ratelimit_1.SnugKvRateLimiter, flow_1.FlowProducer, trace_1.Tracer];
119
+ const exported = [bus_1.SnugKvBus, client_1.SnugKvClient, pubsub_1.SnugKvSubscriber, cache_1.SnugKvCache, lock_1.SnugKvLocks, ratelimit_1.SnugKvRateLimiter, flow_1.FlowProducer, trace_1.Tracer, logs_1.LogShipper];
95
120
  let SnugKvModule = SnugKvModule_1 = class SnugKvModule {
96
121
  static forRoot(options) {
97
122
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/nest/module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/nest/module.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,11 @@ const common_1 = require("@nestjs/common");
17
17
  const constants_1 = require("@nestjs/common/constants");
18
18
  const core_1 = require("@nestjs/core");
19
19
  const service_map_1 = require("../core/service-map");
20
+ const util_1 = require("../core/util");
20
21
  const bus_1 = require("../core/bus");
21
22
  const worker_1 = require("../core/queue/worker");
22
23
  const trace_1 = require("../core/trace");
24
+ const logs_1 = require("../core/logs");
23
25
  const explorer_1 = require("./explorer");
24
26
  const tokens_1 = require("./tokens");
25
27
  /**
@@ -75,6 +77,22 @@ let SnugKvRuntime = class SnugKvRuntime {
75
77
  }
76
78
  }
77
79
  if (this.options.serviceMap !== false) {
80
+ // SnugKV itself is always a dependency.
81
+ let address;
82
+ try {
83
+ if (this.options.url) {
84
+ const u = (0, util_1.parseUrl)(this.options.url);
85
+ address = `${u.host}:${u.port}`;
86
+ }
87
+ else if (this.options.host)
88
+ address = `${this.options.host}:${this.options.port ?? 6379}`;
89
+ }
90
+ catch {
91
+ /* unusual URL: leave the address out */
92
+ }
93
+ (0, service_map_1.declareDependency)({ kind: 'snugkv', name: 'SnugKV', address });
94
+ for (const d of (typeof this.options.serviceMap === 'object' ? this.options.serviceMap.dependencies : undefined) ?? [])
95
+ (0, service_map_1.declareDependency)(d);
78
96
  this.card = new service_map_1.ServiceCardReporter(this.bus.client, { service: this.bus.service, instance: this.bus.instance, http: this.routes() });
79
97
  this.card.start();
80
98
  }
@@ -122,6 +140,9 @@ let SnugKvRuntime = class SnugKvRuntime {
122
140
  await tracer.close().catch(() => undefined);
123
141
  (0, trace_1.setTracer)(undefined);
124
142
  }
143
+ // Last, so the shutdown lines above are shipped too. Capture stays on
144
+ // until the process exits; lines after this are dropped quietly.
145
+ await (0, logs_1.getLogShipper)()?.close().catch(() => undefined);
125
146
  await this.bus.close();
126
147
  this.subscriptions = [];
127
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/nest/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/nest/runtime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snugkv-nest",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "NestJS module and TypeScript client for SnugKV: data types, cache, locks, rate limits, pub/sub, transactions, job queues, flow tracing and a durable stream message bus.",
5
5
  "keywords": [
6
6
  "nestjs",