raffel 1.1.28 → 1.1.32
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 +67 -0
- package/dist/docs/corpus/core-guides.d.ts +1 -0
- package/dist/docs/corpus/core-guides.d.ts.map +1 -1
- package/dist/docs/corpus/core-guides.js +56 -0
- package/dist/docs/corpus/core-guides.js.map +1 -1
- package/dist/docs/corpus/index.d.ts +1 -1
- package/dist/docs/corpus/index.d.ts.map +1 -1
- package/dist/docs/corpus/index.js +1 -1
- package/dist/docs/corpus/index.js.map +1 -1
- package/dist/mcp/resources/index.d.ts.map +1 -1
- package/dist/mcp/resources/index.js +7 -1
- package/dist/mcp/resources/index.js.map +1 -1
- package/dist/middleware/auth.d.ts +9 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +58 -2
- package/dist/middleware/auth.js.map +1 -1
- package/dist/server/builder.d.ts.map +1 -1
- package/dist/server/builder.js +27 -2
- package/dist/server/builder.js.map +1 -1
- package/dist/server/fs-routes/discovery-sources.d.ts +8 -0
- package/dist/server/fs-routes/discovery-sources.d.ts.map +1 -1
- package/dist/server/fs-routes/discovery-sources.js +5 -3
- package/dist/server/fs-routes/discovery-sources.js.map +1 -1
- package/dist/server/fs-routes/loader.d.ts.map +1 -1
- package/dist/server/fs-routes/loader.js +55 -8
- package/dist/server/fs-routes/loader.js.map +1 -1
- package/dist/server/fs-routes/resources/loader.d.ts.map +1 -1
- package/dist/server/fs-routes/resources/loader.js +16 -6
- package/dist/server/fs-routes/resources/loader.js.map +1 -1
- package/dist/server/fs-routes/resources/types.d.ts +11 -0
- package/dist/server/fs-routes/resources/types.d.ts.map +1 -1
- package/dist/server/types/config-types.d.ts +33 -0
- package/dist/server/types/config-types.d.ts.map +1 -1
- package/dist/types/context.d.ts.map +1 -1
- package/dist/types/context.js +3 -0
- package/dist/types/context.js.map +1 -1
- package/dist/ui/docs/corpus/core-guides.d.ts +1 -0
- package/dist/ui/docs/corpus/core-guides.d.ts.map +1 -1
- package/dist/ui/docs/corpus/index.d.ts +1 -1
- package/dist/ui/docs/corpus/index.d.ts.map +1 -1
- package/dist/ui/server/fs-routes/discovery-sources.d.ts +8 -0
- package/dist/ui/server/fs-routes/discovery-sources.d.ts.map +1 -1
- package/dist/ui/server/fs-routes/loader.d.ts.map +1 -1
- package/dist/ui/server/fs-routes/resources/loader.d.ts.map +1 -1
- package/dist/ui/server/fs-routes/resources/types.d.ts +11 -0
- package/dist/ui/server/fs-routes/resources/types.d.ts.map +1 -1
- package/dist/ui/types/context.d.ts.map +1 -1
- package/dist/ui/utils/logger.d.ts +46 -3
- package/dist/ui/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +46 -3
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +163 -27
- package/dist/utils/logger.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,6BAA6B,CAAA;AAuF5E;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAQxE;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAiC3D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAAC,MAAM,CAEvC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,15 +1,58 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Logger Utility
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Logging built on pino, with pretty-print in development.
|
|
5
|
+
*
|
|
6
|
+
* The base logger is swappable at runtime via `configureLogger()` so a host
|
|
7
|
+
* application can inject its own pino instance (or a `LoggerFactory`) through
|
|
8
|
+
* `createServer({ logger })` and have *all* of Raffel's logs — internal
|
|
9
|
+
* adapters, core, request-scoped `ctx.logger`, and the `log` provider — flow
|
|
10
|
+
* through it in a single, Datadog-consistent format.
|
|
11
|
+
*
|
|
12
|
+
* ## Memory contract
|
|
13
|
+
*
|
|
14
|
+
* `createLogger()` returns a *stable* proxy created once (typically at module
|
|
15
|
+
* import). Its underlying pino child is resolved once per
|
|
16
|
+
* (logger generation, component) and memoized; method handles are cached too.
|
|
17
|
+
* It therefore never allocates a logger per call, and component loggers are
|
|
18
|
+
* process-scoped (one per module), never request-scoped. Swapping the base via
|
|
19
|
+
* `configureLogger()` only bumps a generation counter — it does not multiply
|
|
20
|
+
* allocations. Request correlation (`requestId`) is handled lazily in
|
|
21
|
+
* `createContext` (see `types/context.ts`), which materializes at most one
|
|
22
|
+
* child per request, and only if the handler actually logs.
|
|
5
23
|
*/
|
|
6
24
|
import pino from 'pino';
|
|
25
|
+
import type { LoggerFactory } from '../ports/outbound/logger.js';
|
|
7
26
|
/**
|
|
8
|
-
*
|
|
27
|
+
* Inject the host application's logger. Called once by `createServer({ logger })`
|
|
28
|
+
* before any request is served.
|
|
29
|
+
*
|
|
30
|
+
* Accepts either:
|
|
31
|
+
* - a `pino.Logger` — the rich path; component loggers become
|
|
32
|
+
* `parent.child({ component })`, and request loggers
|
|
33
|
+
* `parent.child({ requestId })`, so every binding is preserved end to end; or
|
|
34
|
+
* - a `LoggerFactory` — the abstract path; component loggers come from the
|
|
35
|
+
* factory, mapped onto the pino-shaped surface (`trace`→`debug`,
|
|
36
|
+
* `fatal`→`error`).
|
|
37
|
+
*/
|
|
38
|
+
export declare function configureLogger(input: pino.Logger | LoggerFactory): void;
|
|
39
|
+
/**
|
|
40
|
+
* Reset the logger back to the env-derived default. Primarily for tests that
|
|
41
|
+
* inject a logger and need to restore global state afterwards.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resetLogger(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Create a child logger scoped to a component.
|
|
46
|
+
*
|
|
47
|
+
* Returns a stable proxy: the call site keeps the same reference for the
|
|
48
|
+
* process lifetime, while the proxy transparently re-resolves and re-binds its
|
|
49
|
+
* underlying pino child whenever the base logger is swapped. The resolved child
|
|
50
|
+
* and its bound methods are memoized per generation, so logging never allocates
|
|
51
|
+
* in the hot path.
|
|
9
52
|
*/
|
|
10
53
|
export declare function createLogger(component: string): pino.Logger;
|
|
11
54
|
/**
|
|
12
|
-
* Get the base logger
|
|
55
|
+
* Get the base logger (the active root the host injected, or the env default).
|
|
13
56
|
*/
|
|
14
57
|
export declare function getLogger(): pino.Logger;
|
|
15
58
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,6BAA6B,CAAA;AAuF5E;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAQxE;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAiC3D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAAC,MAAM,CAEvC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,42 +1,178 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Logger Utility
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Logging built on pino, with pretty-print in development.
|
|
5
|
+
*
|
|
6
|
+
* The base logger is swappable at runtime via `configureLogger()` so a host
|
|
7
|
+
* application can inject its own pino instance (or a `LoggerFactory`) through
|
|
8
|
+
* `createServer({ logger })` and have *all* of Raffel's logs — internal
|
|
9
|
+
* adapters, core, request-scoped `ctx.logger`, and the `log` provider — flow
|
|
10
|
+
* through it in a single, Datadog-consistent format.
|
|
11
|
+
*
|
|
12
|
+
* ## Memory contract
|
|
13
|
+
*
|
|
14
|
+
* `createLogger()` returns a *stable* proxy created once (typically at module
|
|
15
|
+
* import). Its underlying pino child is resolved once per
|
|
16
|
+
* (logger generation, component) and memoized; method handles are cached too.
|
|
17
|
+
* It therefore never allocates a logger per call, and component loggers are
|
|
18
|
+
* process-scoped (one per module), never request-scoped. Swapping the base via
|
|
19
|
+
* `configureLogger()` only bumps a generation counter — it does not multiply
|
|
20
|
+
* allocations. Request correlation (`requestId`) is handled lazily in
|
|
21
|
+
* `createContext` (see `types/context.ts`), which materializes at most one
|
|
22
|
+
* child per request, and only if the handler actually logs.
|
|
5
23
|
*/
|
|
6
24
|
import pino from 'pino';
|
|
7
25
|
const isDev = process.env.NODE_ENV !== 'production';
|
|
8
|
-
// Respect `LOG_FORMAT=json` to opt into JSON output even in dev. Without
|
|
9
|
-
// this override raffel always emits pino-pretty in dev, which mixes
|
|
10
|
-
// badly with a host service's own JSON logs and is hostile to grep / jq
|
|
11
|
-
// when the operator is shipping aggregated logs to a JSON sink.
|
|
12
|
-
const logFormat = String(process.env.LOG_FORMAT ?? '').toLowerCase();
|
|
13
|
-
const wantsPretty = isDev && logFormat !== 'json';
|
|
14
|
-
/**
|
|
15
|
-
* Base logger instance
|
|
16
|
-
*/
|
|
17
|
-
const baseLogger = pino({
|
|
18
|
-
level: process.env.LOG_LEVEL ?? (isDev ? 'debug' : 'info'),
|
|
19
|
-
transport: wantsPretty
|
|
20
|
-
? {
|
|
21
|
-
target: 'pino-pretty',
|
|
22
|
-
options: {
|
|
23
|
-
colorize: true,
|
|
24
|
-
translateTime: 'SYS:standard',
|
|
25
|
-
ignore: 'pid,hostname',
|
|
26
|
-
},
|
|
27
|
-
}
|
|
28
|
-
: undefined,
|
|
29
|
-
});
|
|
30
26
|
/**
|
|
31
|
-
*
|
|
27
|
+
* Build the env-derived default pino logger.
|
|
28
|
+
*
|
|
29
|
+
* Respects `LOG_FORMAT=json` to opt into JSON output even in dev. Without this
|
|
30
|
+
* override raffel always emits pino-pretty in dev, which mixes badly with a
|
|
31
|
+
* host service's own JSON logs and is hostile to grep / jq when the operator is
|
|
32
|
+
* shipping aggregated logs to a JSON sink.
|
|
33
|
+
*/
|
|
34
|
+
function buildDefaultLogger() {
|
|
35
|
+
const logFormat = String(process.env.LOG_FORMAT ?? '').toLowerCase();
|
|
36
|
+
const wantsPretty = isDev && logFormat !== 'json';
|
|
37
|
+
return pino({
|
|
38
|
+
level: process.env.LOG_LEVEL ?? (isDev ? 'debug' : 'info'),
|
|
39
|
+
transport: wantsPretty
|
|
40
|
+
? {
|
|
41
|
+
target: 'pino-pretty',
|
|
42
|
+
options: {
|
|
43
|
+
colorize: true,
|
|
44
|
+
translateTime: 'SYS:standard',
|
|
45
|
+
ignore: 'pid,hostname',
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
: undefined,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/** Active base logger. Swapped by `configureLogger()`. */
|
|
52
|
+
let baseLogger = buildDefaultLogger();
|
|
53
|
+
/**
|
|
54
|
+
* Optional component factory. When a host injects a `LoggerFactory` (rather than
|
|
55
|
+
* a pino instance) the component loggers are produced by it instead of via
|
|
56
|
+
* `baseLogger.child(...)`.
|
|
57
|
+
*/
|
|
58
|
+
let componentFactory = null;
|
|
59
|
+
/**
|
|
60
|
+
* Generation counter, bumped on every `configureLogger()` / `resetLogger()`
|
|
61
|
+
* call so the lazy proxies returned by `createLogger()` know to re-resolve and
|
|
62
|
+
* re-bind their cached child.
|
|
63
|
+
*/
|
|
64
|
+
let generation = 0;
|
|
65
|
+
/**
|
|
66
|
+
* Adapt a minimal `LoggerPort` (debug/info/warn/error) up to the
|
|
67
|
+
* pino.Logger-shaped surface the rest of the codebase expects:
|
|
68
|
+
* `trace`→`debug`, `fatal`→`error`, and `child` rebinding to itself (a
|
|
69
|
+
* `LoggerPort` carries no bindings, so child loggers share the same sink).
|
|
70
|
+
*/
|
|
71
|
+
function portToPinoShape(port) {
|
|
72
|
+
const forward = (method) => (...args) => {
|
|
73
|
+
;
|
|
74
|
+
port[method](...args);
|
|
75
|
+
};
|
|
76
|
+
const shaped = {
|
|
77
|
+
trace: forward('debug'),
|
|
78
|
+
debug: forward('debug'),
|
|
79
|
+
info: forward('info'),
|
|
80
|
+
warn: forward('warn'),
|
|
81
|
+
error: forward('error'),
|
|
82
|
+
fatal: forward('error'),
|
|
83
|
+
child: () => shaped,
|
|
84
|
+
level: process.env.LOG_LEVEL ?? (isDev ? 'debug' : 'info'),
|
|
85
|
+
};
|
|
86
|
+
return shaped;
|
|
87
|
+
}
|
|
88
|
+
/** Cache of the resolved active base, keyed by generation. */
|
|
89
|
+
let resolvedBaseGen = -1;
|
|
90
|
+
let resolvedBase = baseLogger;
|
|
91
|
+
function activeBase() {
|
|
92
|
+
if (resolvedBaseGen !== generation) {
|
|
93
|
+
resolvedBase = componentFactory ? portToPinoShape(componentFactory('')) : baseLogger;
|
|
94
|
+
resolvedBaseGen = generation;
|
|
95
|
+
}
|
|
96
|
+
return resolvedBase;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Inject the host application's logger. Called once by `createServer({ logger })`
|
|
100
|
+
* before any request is served.
|
|
101
|
+
*
|
|
102
|
+
* Accepts either:
|
|
103
|
+
* - a `pino.Logger` — the rich path; component loggers become
|
|
104
|
+
* `parent.child({ component })`, and request loggers
|
|
105
|
+
* `parent.child({ requestId })`, so every binding is preserved end to end; or
|
|
106
|
+
* - a `LoggerFactory` — the abstract path; component loggers come from the
|
|
107
|
+
* factory, mapped onto the pino-shaped surface (`trace`→`debug`,
|
|
108
|
+
* `fatal`→`error`).
|
|
109
|
+
*/
|
|
110
|
+
export function configureLogger(input) {
|
|
111
|
+
if (typeof input === 'function') {
|
|
112
|
+
componentFactory = input;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
baseLogger = input;
|
|
116
|
+
componentFactory = null;
|
|
117
|
+
}
|
|
118
|
+
generation += 1;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Reset the logger back to the env-derived default. Primarily for tests that
|
|
122
|
+
* inject a logger and need to restore global state afterwards.
|
|
123
|
+
*/
|
|
124
|
+
export function resetLogger() {
|
|
125
|
+
baseLogger = buildDefaultLogger();
|
|
126
|
+
componentFactory = null;
|
|
127
|
+
generation += 1;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Create a child logger scoped to a component.
|
|
131
|
+
*
|
|
132
|
+
* Returns a stable proxy: the call site keeps the same reference for the
|
|
133
|
+
* process lifetime, while the proxy transparently re-resolves and re-binds its
|
|
134
|
+
* underlying pino child whenever the base logger is swapped. The resolved child
|
|
135
|
+
* and its bound methods are memoized per generation, so logging never allocates
|
|
136
|
+
* in the hot path.
|
|
32
137
|
*/
|
|
33
138
|
export function createLogger(component) {
|
|
34
|
-
|
|
139
|
+
let cachedGen = -1;
|
|
140
|
+
let child;
|
|
141
|
+
const boundCache = new Map();
|
|
142
|
+
const resolve = () => {
|
|
143
|
+
if (cachedGen !== generation) {
|
|
144
|
+
child = componentFactory
|
|
145
|
+
? portToPinoShape(componentFactory(component))
|
|
146
|
+
: activeBase().child({ component });
|
|
147
|
+
cachedGen = generation;
|
|
148
|
+
boundCache.clear();
|
|
149
|
+
}
|
|
150
|
+
return child;
|
|
151
|
+
};
|
|
152
|
+
return new Proxy(Object.create(null), {
|
|
153
|
+
get(_target, prop) {
|
|
154
|
+
const target = resolve();
|
|
155
|
+
const value = target[prop];
|
|
156
|
+
if (typeof value !== 'function')
|
|
157
|
+
return value;
|
|
158
|
+
let bound = boundCache.get(prop);
|
|
159
|
+
if (bound === undefined) {
|
|
160
|
+
bound = value.bind(target);
|
|
161
|
+
boundCache.set(prop, bound);
|
|
162
|
+
}
|
|
163
|
+
return bound;
|
|
164
|
+
},
|
|
165
|
+
set(_target, prop, value) {
|
|
166
|
+
;
|
|
167
|
+
resolve()[prop] = value;
|
|
168
|
+
return true;
|
|
169
|
+
},
|
|
170
|
+
});
|
|
35
171
|
}
|
|
36
172
|
/**
|
|
37
|
-
* Get the base logger
|
|
173
|
+
* Get the base logger (the active root the host injected, or the env default).
|
|
38
174
|
*/
|
|
39
175
|
export function getLogger() {
|
|
40
|
-
return
|
|
176
|
+
return activeBase();
|
|
41
177
|
}
|
|
42
178
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|