autotel-adapters 0.3.19 → 2.0.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 +13 -0
- package/dist/cloudflare.cjs +44 -29
- package/dist/cloudflare.cjs.map +1 -1
- package/dist/cloudflare.d.cts +11 -17
- package/dist/cloudflare.d.cts.map +1 -1
- package/dist/cloudflare.d.ts +11 -17
- package/dist/cloudflare.d.ts.map +1 -1
- package/dist/cloudflare.js +47 -30
- package/dist/cloudflare.js.map +1 -1
- package/dist/core.cjs +7 -11
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +7 -11
- package/dist/core.d.cts.map +1 -1
- package/dist/core.d.ts +6 -10
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +7 -12
- package/dist/core.js.map +1 -1
- package/dist/elysia.cjs +50 -0
- package/dist/elysia.cjs.map +1 -0
- package/dist/elysia.d.cts +18 -0
- package/dist/elysia.d.cts.map +1 -0
- package/dist/elysia.d.ts +18 -0
- package/dist/elysia.d.ts.map +1 -0
- package/dist/elysia.js +44 -0
- package/dist/elysia.js.map +1 -0
- package/dist/express.cjs +5 -16
- package/dist/express.cjs.map +1 -1
- package/dist/express.d.cts +6 -15
- package/dist/express.d.cts.map +1 -1
- package/dist/express.d.ts +6 -15
- package/dist/express.d.ts.map +1 -1
- package/dist/express.js +7 -16
- package/dist/express.js.map +1 -1
- package/dist/fastify.cjs +5 -16
- package/dist/fastify.cjs.map +1 -1
- package/dist/fastify.d.cts +6 -15
- package/dist/fastify.d.cts.map +1 -1
- package/dist/fastify.d.ts +6 -15
- package/dist/fastify.d.ts.map +1 -1
- package/dist/fastify.js +7 -16
- package/dist/fastify.js.map +1 -1
- package/dist/hono.cjs +52 -11
- package/dist/hono.cjs.map +1 -1
- package/dist/hono.d.cts +12 -5
- package/dist/hono.d.cts.map +1 -1
- package/dist/hono.d.ts +12 -5
- package/dist/hono.d.ts.map +1 -1
- package/dist/hono.js +49 -12
- package/dist/hono.js.map +1 -1
- package/dist/index.cjs +14 -9
- package/dist/index.d.cts +12 -9
- package/dist/index.d.ts +12 -9
- package/dist/index.js +12 -9
- package/dist/integration-DI-1RuTh.d.cts +100 -0
- package/dist/integration-DI-1RuTh.d.cts.map +1 -0
- package/dist/integration-IUpfttGT.js +335 -0
- package/dist/integration-IUpfttGT.js.map +1 -0
- package/dist/integration-guh7BHTF.cjs +412 -0
- package/dist/integration-guh7BHTF.cjs.map +1 -0
- package/dist/integration-rYoX8QLk.d.ts +100 -0
- package/dist/integration-rYoX8QLk.d.ts.map +1 -0
- package/dist/nestjs.cjs +119 -0
- package/dist/nestjs.cjs.map +1 -0
- package/dist/nestjs.d.cts +42 -0
- package/dist/nestjs.d.cts.map +1 -0
- package/dist/nestjs.d.ts +42 -0
- package/dist/nestjs.d.ts.map +1 -0
- package/dist/nestjs.js +114 -0
- package/dist/nestjs.js.map +1 -0
- package/dist/next.cjs +35 -33
- package/dist/next.cjs.map +1 -1
- package/dist/next.d.cts +6 -17
- package/dist/next.d.cts.map +1 -1
- package/dist/next.d.ts +6 -17
- package/dist/next.d.ts.map +1 -1
- package/dist/next.js +38 -34
- package/dist/next.js.map +1 -1
- package/dist/nitro.cjs +33 -41
- package/dist/nitro.cjs.map +1 -1
- package/dist/nitro.d.cts +6 -17
- package/dist/nitro.d.cts.map +1 -1
- package/dist/nitro.d.ts +6 -17
- package/dist/nitro.d.ts.map +1 -1
- package/dist/nitro.js +33 -42
- package/dist/nitro.js.map +1 -1
- package/dist/sveltekit.cjs +48 -0
- package/dist/sveltekit.cjs.map +1 -0
- package/dist/sveltekit.d.cts +24 -0
- package/dist/sveltekit.d.cts.map +1 -0
- package/dist/sveltekit.d.ts +24 -0
- package/dist/sveltekit.d.ts.map +1 -0
- package/dist/sveltekit.js +43 -0
- package/dist/sveltekit.js.map +1 -0
- package/dist/tanstack.cjs +0 -8
- package/dist/tanstack.cjs.map +1 -1
- package/dist/tanstack.d.cts +1 -7
- package/dist/tanstack.d.cts.map +1 -1
- package/dist/tanstack.d.ts +1 -7
- package/dist/tanstack.d.ts.map +1 -1
- package/dist/tanstack.js +2 -9
- package/dist/tanstack.js.map +1 -1
- package/dist/toolkit/index.cjs +23 -0
- package/dist/toolkit/index.d.cts +42 -0
- package/dist/toolkit/index.d.cts.map +1 -0
- package/dist/toolkit/index.d.ts +42 -0
- package/dist/toolkit/index.d.ts.map +1 -0
- package/dist/toolkit/index.js +4 -0
- package/dist/toolkit/storage.cjs +35 -0
- package/dist/toolkit/storage.cjs.map +1 -0
- package/dist/toolkit/storage.d.cts +20 -0
- package/dist/toolkit/storage.d.cts.map +1 -0
- package/dist/toolkit/storage.d.ts +20 -0
- package/dist/toolkit/storage.d.ts.map +1 -0
- package/dist/toolkit/storage.js +33 -0
- package/dist/toolkit/storage.js.map +1 -0
- package/package.json +39 -8
- package/skills/autotel-adapters/SKILL.md +42 -34
package/dist/nestjs.cjs
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_integration = require('./integration-guh7BHTF.cjs');
|
|
3
|
+
const require_toolkit_storage = require('./toolkit/storage.cjs');
|
|
4
|
+
let autotel = require("autotel");
|
|
5
|
+
let rxjs = require("rxjs");
|
|
6
|
+
|
|
7
|
+
//#region src/nestjs.ts
|
|
8
|
+
const { storage: nestLoggerStorage, useLogger: storageUseLogger } = require_toolkit_storage.createLoggerStorage("request context. Register AutotelInterceptor globally or on controllers.");
|
|
9
|
+
function enrichFromRequest(request) {
|
|
10
|
+
if (!request) return void 0;
|
|
11
|
+
const url = request.originalUrl ?? request.url;
|
|
12
|
+
const route = request.path ?? url;
|
|
13
|
+
return {
|
|
14
|
+
...request.method ? { "http.request.method": request.method } : {},
|
|
15
|
+
...url ? { "url.full": url } : {},
|
|
16
|
+
...route ? { "http.route": route } : {}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const integration = require_integration.defineFrameworkIntegration({
|
|
20
|
+
name: "nestjs",
|
|
21
|
+
storage: nestLoggerStorage,
|
|
22
|
+
extractRequest: (executionCtx) => {
|
|
23
|
+
const request = executionCtx.switchToHttp().getRequest();
|
|
24
|
+
const path = request.path ?? request.originalUrl ?? request.url ?? "/";
|
|
25
|
+
return {
|
|
26
|
+
method: request.method ?? "GET",
|
|
27
|
+
path,
|
|
28
|
+
headers: request.headers
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
attachLogger: () => {},
|
|
32
|
+
spanName: (executionCtx) => {
|
|
33
|
+
const handler = executionCtx.getHandler().name;
|
|
34
|
+
return `nestjs.${executionCtx.getClass().name}.${handler}`;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
function useLogger() {
|
|
38
|
+
return storageUseLogger();
|
|
39
|
+
}
|
|
40
|
+
var AutotelInterceptor = class {
|
|
41
|
+
options;
|
|
42
|
+
constructor(options = {}) {
|
|
43
|
+
this.options = options;
|
|
44
|
+
}
|
|
45
|
+
intercept(executionCtx, next) {
|
|
46
|
+
return new rxjs.Observable((subscriber) => {
|
|
47
|
+
let sourceSubscription;
|
|
48
|
+
let cancelled = false;
|
|
49
|
+
let cancelRun;
|
|
50
|
+
integration.runTraced(executionCtx, this.options, async (handle) => {
|
|
51
|
+
if (!handle.skipped) {
|
|
52
|
+
const request = executionCtx.switchToHttp().getRequest();
|
|
53
|
+
require_integration.applyLoggerEnrichment(handle.logger, enrichFromRequest(request), this.options.enrichRequest?.(request));
|
|
54
|
+
}
|
|
55
|
+
await handle.runWith(() => new Promise((resolve, reject) => {
|
|
56
|
+
let settled = false;
|
|
57
|
+
const settle = async (error) => {
|
|
58
|
+
if (settled) return;
|
|
59
|
+
settled = true;
|
|
60
|
+
try {
|
|
61
|
+
if (!handle.skipped && this.options.autoEmit !== false) if (error !== void 0) await handle.finish({ error: error instanceof Error ? error : new Error(String(error)) });
|
|
62
|
+
else {
|
|
63
|
+
const response = executionCtx.switchToHttp().getResponse();
|
|
64
|
+
await handle.finish({ status: response.statusCode });
|
|
65
|
+
}
|
|
66
|
+
} catch (finishError) {
|
|
67
|
+
reject(finishError);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (error !== void 0) reject(error);
|
|
71
|
+
else resolve();
|
|
72
|
+
};
|
|
73
|
+
cancelRun = () => {
|
|
74
|
+
settle();
|
|
75
|
+
};
|
|
76
|
+
let source;
|
|
77
|
+
try {
|
|
78
|
+
source = next.handle();
|
|
79
|
+
} catch (error) {
|
|
80
|
+
settle(error);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
sourceSubscription = ((0, rxjs.isObservable)(source) ? source : (0, rxjs.from)(Promise.resolve(source))).subscribe({
|
|
84
|
+
next: (value) => {
|
|
85
|
+
if (!cancelled) subscriber.next(value);
|
|
86
|
+
},
|
|
87
|
+
error: (error) => {
|
|
88
|
+
settle(error);
|
|
89
|
+
},
|
|
90
|
+
complete: () => {
|
|
91
|
+
settle();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
if (cancelled) {
|
|
95
|
+
sourceSubscription.unsubscribe();
|
|
96
|
+
cancelRun();
|
|
97
|
+
}
|
|
98
|
+
}));
|
|
99
|
+
}).then(() => {
|
|
100
|
+
if (!cancelled) subscriber.complete();
|
|
101
|
+
}, (error) => {
|
|
102
|
+
if (!cancelled) subscriber.error(error);
|
|
103
|
+
});
|
|
104
|
+
return () => {
|
|
105
|
+
cancelled = true;
|
|
106
|
+
sourceSubscription?.unsubscribe();
|
|
107
|
+
cancelRun?.();
|
|
108
|
+
};
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
114
|
+
exports.AutotelInterceptor = AutotelInterceptor;
|
|
115
|
+
exports.createDrainPipeline = autotel.createDrainPipeline;
|
|
116
|
+
exports.createStructuredError = autotel.createStructuredError;
|
|
117
|
+
exports.parseError = autotel.parseError;
|
|
118
|
+
exports.useLogger = useLogger;
|
|
119
|
+
//# sourceMappingURL=nestjs.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nestjs.cjs","names":["createLoggerStorage","defineFrameworkIntegration","Observable"],"sources":["../src/nestjs.ts"],"sourcesContent":["import { from, isObservable, Observable, type Subscription } from 'rxjs';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport type { FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n type ExtractedRequest,\n} from './toolkit/integration';\n\nexport interface NestExecutionContextLike {\n getClass: () => { name: string };\n getHandler: () => { name: string };\n getType: () => string;\n switchToHttp: () => {\n getRequest: () => NestRequestLike;\n getResponse: () => NestResponseLike;\n };\n}\n\nexport interface NestRequestLike {\n method?: string;\n url?: string;\n originalUrl?: string;\n path?: string;\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface NestResponseLike {\n statusCode?: number;\n}\n\nexport interface NestWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n request: NestRequestLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: nestLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Register AutotelInterceptor globally or on controllers.',\n );\n\nfunction enrichFromRequest(\n request?: NestRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const url = request.originalUrl ?? request.url;\n const route = request.path ?? url;\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(url ? { 'url.full': url } : {}),\n ...(route ? { 'http.route': route } : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<NestExecutionContextLike>({\n name: 'nestjs',\n storage: nestLoggerStorage,\n extractRequest: (executionCtx) => {\n const request = executionCtx.switchToHttp().getRequest();\n const path = request.path ?? request.originalUrl ?? request.url ?? '/';\n return {\n method: request.method ?? 'GET',\n path,\n headers: request.headers,\n } satisfies ExtractedRequest;\n },\n attachLogger: () => {},\n spanName: (executionCtx) => {\n const handler = executionCtx.getHandler().name;\n const controller = executionCtx.getClass().name;\n return `nestjs.${controller}.${handler}`;\n },\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport class AutotelInterceptor {\n constructor(public readonly options: NestWithAutotelOptions = {}) {}\n\n intercept(\n executionCtx: NestExecutionContextLike,\n next: { handle: () => unknown },\n ): Observable<unknown> {\n // Nest handlers are lazy Observables. Subscribe inside the trace + ALS\n // scope, but proxy values as they arrive so multi-value and streaming\n // handlers retain their normal semantics.\n return new Observable((subscriber) => {\n let sourceSubscription: Subscription | undefined;\n let cancelled = false;\n let cancelRun: (() => void) | undefined;\n\n const run = integration.runTraced(\n executionCtx,\n this.options,\n async (handle) => {\n if (!handle.skipped) {\n const request = executionCtx.switchToHttp().getRequest();\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n this.options.enrichRequest?.(request),\n );\n }\n\n await handle.runWith(\n () =>\n new Promise<void>((resolve, reject) => {\n let settled = false;\n\n const settle = async (error?: unknown) => {\n if (settled) return;\n settled = true;\n\n try {\n if (!handle.skipped && this.options.autoEmit !== false) {\n if (error !== undefined) {\n await handle.finish({\n error:\n error instanceof Error\n ? error\n : new Error(String(error)),\n });\n } else {\n const response = executionCtx\n .switchToHttp()\n .getResponse();\n await handle.finish({ status: response.statusCode });\n }\n }\n } catch (finishError) {\n reject(finishError);\n return;\n }\n\n if (error !== undefined) reject(error);\n else resolve();\n };\n\n cancelRun = () => {\n void settle();\n };\n\n let source: unknown;\n try {\n source = next.handle();\n } catch (error) {\n void settle(error);\n return;\n }\n\n const observable = isObservable(source)\n ? source\n : from(Promise.resolve(source));\n sourceSubscription = observable.subscribe({\n next: (value) => {\n if (!cancelled) subscriber.next(value);\n },\n error: (error) => {\n void settle(error);\n },\n complete: () => {\n void settle();\n },\n });\n\n if (cancelled) {\n sourceSubscription.unsubscribe();\n cancelRun();\n }\n }),\n );\n },\n );\n\n void run.then(\n () => {\n if (!cancelled) subscriber.complete();\n },\n (error: unknown) => {\n if (!cancelled) subscriber.error(error);\n },\n );\n\n return () => {\n cancelled = true;\n sourceSubscription?.unsubscribe();\n cancelRun?.();\n };\n });\n }\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { n as FrameworkHandlerOptions } from "./integration-DI-1RuTh.cjs";
|
|
2
|
+
import "./core.cjs";
|
|
3
|
+
import { RequestLogger, createDrainPipeline, createStructuredError, parseError } from "autotel";
|
|
4
|
+
import { Observable } from "rxjs";
|
|
5
|
+
//#region src/nestjs.d.ts
|
|
6
|
+
interface NestExecutionContextLike {
|
|
7
|
+
getClass: () => {
|
|
8
|
+
name: string;
|
|
9
|
+
};
|
|
10
|
+
getHandler: () => {
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
getType: () => string;
|
|
14
|
+
switchToHttp: () => {
|
|
15
|
+
getRequest: () => NestRequestLike;
|
|
16
|
+
getResponse: () => NestResponseLike;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
interface NestRequestLike {
|
|
20
|
+
method?: string;
|
|
21
|
+
url?: string;
|
|
22
|
+
originalUrl?: string;
|
|
23
|
+
path?: string;
|
|
24
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
25
|
+
}
|
|
26
|
+
interface NestResponseLike {
|
|
27
|
+
statusCode?: number;
|
|
28
|
+
}
|
|
29
|
+
interface NestWithAutotelOptions extends FrameworkHandlerOptions {
|
|
30
|
+
enrichRequest?: (request: NestRequestLike) => Record<string, unknown> | undefined;
|
|
31
|
+
}
|
|
32
|
+
declare function useLogger(): RequestLogger;
|
|
33
|
+
declare class AutotelInterceptor {
|
|
34
|
+
readonly options: NestWithAutotelOptions;
|
|
35
|
+
constructor(options?: NestWithAutotelOptions);
|
|
36
|
+
intercept(executionCtx: NestExecutionContextLike, next: {
|
|
37
|
+
handle: () => unknown;
|
|
38
|
+
}): Observable<unknown>;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { AutotelInterceptor, NestExecutionContextLike, NestRequestLike, NestResponseLike, NestWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger };
|
|
42
|
+
//# sourceMappingURL=nestjs.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nestjs.d.cts","names":[],"sources":["../src/nestjs.ts"],"mappings":";;;;;UAeiB;EACf;IAAkB;;EAClB;IAAoB;;EACpB;EACA;IACE,kBAAkB;IAClB,mBAAmB;;;UAIN;EACf;EACA;EACA;EACA;EACA,UAAU;;UAGK;EACf;;UAGe,+BAA+B;EAC9C,iBACE,SAAS,oBACN;;iBA2CS,aAAa;cAIhB;WACiB,SAAS;EAAT,YAAA,UAAS;EAErC,UACE,cAAc,0BACd;IAAQ;MACP"}
|
package/dist/nestjs.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { n as FrameworkHandlerOptions } from "./integration-rYoX8QLk.js";
|
|
2
|
+
import "./core.js";
|
|
3
|
+
import { RequestLogger, createDrainPipeline, createStructuredError, parseError } from "autotel";
|
|
4
|
+
import { Observable } from "rxjs";
|
|
5
|
+
//#region src/nestjs.d.ts
|
|
6
|
+
interface NestExecutionContextLike {
|
|
7
|
+
getClass: () => {
|
|
8
|
+
name: string;
|
|
9
|
+
};
|
|
10
|
+
getHandler: () => {
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
getType: () => string;
|
|
14
|
+
switchToHttp: () => {
|
|
15
|
+
getRequest: () => NestRequestLike;
|
|
16
|
+
getResponse: () => NestResponseLike;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
interface NestRequestLike {
|
|
20
|
+
method?: string;
|
|
21
|
+
url?: string;
|
|
22
|
+
originalUrl?: string;
|
|
23
|
+
path?: string;
|
|
24
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
25
|
+
}
|
|
26
|
+
interface NestResponseLike {
|
|
27
|
+
statusCode?: number;
|
|
28
|
+
}
|
|
29
|
+
interface NestWithAutotelOptions extends FrameworkHandlerOptions {
|
|
30
|
+
enrichRequest?: (request: NestRequestLike) => Record<string, unknown> | undefined;
|
|
31
|
+
}
|
|
32
|
+
declare function useLogger(): RequestLogger;
|
|
33
|
+
declare class AutotelInterceptor {
|
|
34
|
+
readonly options: NestWithAutotelOptions;
|
|
35
|
+
constructor(options?: NestWithAutotelOptions);
|
|
36
|
+
intercept(executionCtx: NestExecutionContextLike, next: {
|
|
37
|
+
handle: () => unknown;
|
|
38
|
+
}): Observable<unknown>;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { AutotelInterceptor, NestExecutionContextLike, NestRequestLike, NestResponseLike, NestWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger };
|
|
42
|
+
//# sourceMappingURL=nestjs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nestjs.d.ts","names":[],"sources":["../src/nestjs.ts"],"mappings":";;;;;UAeiB;EACf;IAAkB;;EAClB;IAAoB;;EACpB;EACA;IACE,kBAAkB;IAClB,mBAAmB;;;UAIN;EACf;EACA;EACA;EACA;EACA,UAAU;;UAGK;EACf;;UAGe,+BAA+B;EAC9C,iBACE,SAAS,oBACN;;iBA2CS,aAAa;cAIhB;WACiB,SAAS;EAAT,YAAA,UAAS;EAErC,UACE,cAAc,0BACd;IAAQ;MACP"}
|
package/dist/nestjs.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { i as defineFrameworkIntegration, t as applyLoggerEnrichment } from "./integration-IUpfttGT.js";
|
|
2
|
+
import { createLoggerStorage } from "./toolkit/storage.js";
|
|
3
|
+
import { createDrainPipeline, createStructuredError, parseError } from "autotel";
|
|
4
|
+
import { Observable, from, isObservable } from "rxjs";
|
|
5
|
+
|
|
6
|
+
//#region src/nestjs.ts
|
|
7
|
+
const { storage: nestLoggerStorage, useLogger: storageUseLogger } = createLoggerStorage("request context. Register AutotelInterceptor globally or on controllers.");
|
|
8
|
+
function enrichFromRequest(request) {
|
|
9
|
+
if (!request) return void 0;
|
|
10
|
+
const url = request.originalUrl ?? request.url;
|
|
11
|
+
const route = request.path ?? url;
|
|
12
|
+
return {
|
|
13
|
+
...request.method ? { "http.request.method": request.method } : {},
|
|
14
|
+
...url ? { "url.full": url } : {},
|
|
15
|
+
...route ? { "http.route": route } : {}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const integration = defineFrameworkIntegration({
|
|
19
|
+
name: "nestjs",
|
|
20
|
+
storage: nestLoggerStorage,
|
|
21
|
+
extractRequest: (executionCtx) => {
|
|
22
|
+
const request = executionCtx.switchToHttp().getRequest();
|
|
23
|
+
const path = request.path ?? request.originalUrl ?? request.url ?? "/";
|
|
24
|
+
return {
|
|
25
|
+
method: request.method ?? "GET",
|
|
26
|
+
path,
|
|
27
|
+
headers: request.headers
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
attachLogger: () => {},
|
|
31
|
+
spanName: (executionCtx) => {
|
|
32
|
+
const handler = executionCtx.getHandler().name;
|
|
33
|
+
return `nestjs.${executionCtx.getClass().name}.${handler}`;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
function useLogger() {
|
|
37
|
+
return storageUseLogger();
|
|
38
|
+
}
|
|
39
|
+
var AutotelInterceptor = class {
|
|
40
|
+
options;
|
|
41
|
+
constructor(options = {}) {
|
|
42
|
+
this.options = options;
|
|
43
|
+
}
|
|
44
|
+
intercept(executionCtx, next) {
|
|
45
|
+
return new Observable((subscriber) => {
|
|
46
|
+
let sourceSubscription;
|
|
47
|
+
let cancelled = false;
|
|
48
|
+
let cancelRun;
|
|
49
|
+
integration.runTraced(executionCtx, this.options, async (handle) => {
|
|
50
|
+
if (!handle.skipped) {
|
|
51
|
+
const request = executionCtx.switchToHttp().getRequest();
|
|
52
|
+
applyLoggerEnrichment(handle.logger, enrichFromRequest(request), this.options.enrichRequest?.(request));
|
|
53
|
+
}
|
|
54
|
+
await handle.runWith(() => new Promise((resolve, reject) => {
|
|
55
|
+
let settled = false;
|
|
56
|
+
const settle = async (error) => {
|
|
57
|
+
if (settled) return;
|
|
58
|
+
settled = true;
|
|
59
|
+
try {
|
|
60
|
+
if (!handle.skipped && this.options.autoEmit !== false) if (error !== void 0) await handle.finish({ error: error instanceof Error ? error : new Error(String(error)) });
|
|
61
|
+
else {
|
|
62
|
+
const response = executionCtx.switchToHttp().getResponse();
|
|
63
|
+
await handle.finish({ status: response.statusCode });
|
|
64
|
+
}
|
|
65
|
+
} catch (finishError) {
|
|
66
|
+
reject(finishError);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (error !== void 0) reject(error);
|
|
70
|
+
else resolve();
|
|
71
|
+
};
|
|
72
|
+
cancelRun = () => {
|
|
73
|
+
settle();
|
|
74
|
+
};
|
|
75
|
+
let source;
|
|
76
|
+
try {
|
|
77
|
+
source = next.handle();
|
|
78
|
+
} catch (error) {
|
|
79
|
+
settle(error);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
sourceSubscription = (isObservable(source) ? source : from(Promise.resolve(source))).subscribe({
|
|
83
|
+
next: (value) => {
|
|
84
|
+
if (!cancelled) subscriber.next(value);
|
|
85
|
+
},
|
|
86
|
+
error: (error) => {
|
|
87
|
+
settle(error);
|
|
88
|
+
},
|
|
89
|
+
complete: () => {
|
|
90
|
+
settle();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
if (cancelled) {
|
|
94
|
+
sourceSubscription.unsubscribe();
|
|
95
|
+
cancelRun();
|
|
96
|
+
}
|
|
97
|
+
}));
|
|
98
|
+
}).then(() => {
|
|
99
|
+
if (!cancelled) subscriber.complete();
|
|
100
|
+
}, (error) => {
|
|
101
|
+
if (!cancelled) subscriber.error(error);
|
|
102
|
+
});
|
|
103
|
+
return () => {
|
|
104
|
+
cancelled = true;
|
|
105
|
+
sourceSubscription?.unsubscribe();
|
|
106
|
+
cancelRun?.();
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
//#endregion
|
|
113
|
+
export { AutotelInterceptor, createDrainPipeline, createStructuredError, parseError, useLogger };
|
|
114
|
+
//# sourceMappingURL=nestjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nestjs.js","names":[],"sources":["../src/nestjs.ts"],"sourcesContent":["import { from, isObservable, Observable, type Subscription } from 'rxjs';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport type { FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n type ExtractedRequest,\n} from './toolkit/integration';\n\nexport interface NestExecutionContextLike {\n getClass: () => { name: string };\n getHandler: () => { name: string };\n getType: () => string;\n switchToHttp: () => {\n getRequest: () => NestRequestLike;\n getResponse: () => NestResponseLike;\n };\n}\n\nexport interface NestRequestLike {\n method?: string;\n url?: string;\n originalUrl?: string;\n path?: string;\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface NestResponseLike {\n statusCode?: number;\n}\n\nexport interface NestWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n request: NestRequestLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: nestLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Register AutotelInterceptor globally or on controllers.',\n );\n\nfunction enrichFromRequest(\n request?: NestRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const url = request.originalUrl ?? request.url;\n const route = request.path ?? url;\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(url ? { 'url.full': url } : {}),\n ...(route ? { 'http.route': route } : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<NestExecutionContextLike>({\n name: 'nestjs',\n storage: nestLoggerStorage,\n extractRequest: (executionCtx) => {\n const request = executionCtx.switchToHttp().getRequest();\n const path = request.path ?? request.originalUrl ?? request.url ?? '/';\n return {\n method: request.method ?? 'GET',\n path,\n headers: request.headers,\n } satisfies ExtractedRequest;\n },\n attachLogger: () => {},\n spanName: (executionCtx) => {\n const handler = executionCtx.getHandler().name;\n const controller = executionCtx.getClass().name;\n return `nestjs.${controller}.${handler}`;\n },\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport class AutotelInterceptor {\n constructor(public readonly options: NestWithAutotelOptions = {}) {}\n\n intercept(\n executionCtx: NestExecutionContextLike,\n next: { handle: () => unknown },\n ): Observable<unknown> {\n // Nest handlers are lazy Observables. Subscribe inside the trace + ALS\n // scope, but proxy values as they arrive so multi-value and streaming\n // handlers retain their normal semantics.\n return new Observable((subscriber) => {\n let sourceSubscription: Subscription | undefined;\n let cancelled = false;\n let cancelRun: (() => void) | undefined;\n\n const run = integration.runTraced(\n executionCtx,\n this.options,\n async (handle) => {\n if (!handle.skipped) {\n const request = executionCtx.switchToHttp().getRequest();\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n this.options.enrichRequest?.(request),\n );\n }\n\n await handle.runWith(\n () =>\n new Promise<void>((resolve, reject) => {\n let settled = false;\n\n const settle = async (error?: unknown) => {\n if (settled) return;\n settled = true;\n\n try {\n if (!handle.skipped && this.options.autoEmit !== false) {\n if (error !== undefined) {\n await handle.finish({\n error:\n error instanceof Error\n ? error\n : new Error(String(error)),\n });\n } else {\n const response = executionCtx\n .switchToHttp()\n .getResponse();\n await handle.finish({ status: response.statusCode });\n }\n }\n } catch (finishError) {\n reject(finishError);\n return;\n }\n\n if (error !== undefined) reject(error);\n else resolve();\n };\n\n cancelRun = () => {\n void settle();\n };\n\n let source: unknown;\n try {\n source = next.handle();\n } catch (error) {\n void settle(error);\n return;\n }\n\n const observable = isObservable(source)\n ? source\n : from(Promise.resolve(source));\n sourceSubscription = observable.subscribe({\n next: (value) => {\n if (!cancelled) subscriber.next(value);\n },\n error: (error) => {\n void settle(error);\n },\n complete: () => {\n void settle();\n },\n });\n\n if (cancelled) {\n sourceSubscription.unsubscribe();\n cancelRun();\n }\n }),\n );\n },\n );\n\n void run.then(\n () => {\n if (!cancelled) subscriber.complete();\n },\n (error: unknown) => {\n if (!cancelled) subscriber.error(error);\n },\n );\n\n return () => {\n cancelled = true;\n sourceSubscription?.unsubscribe();\n cancelRun?.();\n };\n });\n }\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":"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"}
|
package/dist/next.cjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_integration = require('./integration-guh7BHTF.cjs');
|
|
3
|
+
const require_toolkit_storage = require('./toolkit/storage.cjs');
|
|
2
4
|
const require_core = require('./core.cjs');
|
|
3
5
|
let autotel = require("autotel");
|
|
4
|
-
let node_async_hooks = require("node:async_hooks");
|
|
5
6
|
|
|
6
7
|
//#region src/next.ts
|
|
7
|
-
const nextLoggerStorage =
|
|
8
|
+
const { storage: nextLoggerStorage, useLogger: storageUseLogger } = require_toolkit_storage.createLoggerStorage("request context. Wrap handlers with withAutotel() first.");
|
|
8
9
|
function enrichFromRequest(request) {
|
|
9
10
|
if (!request) return void 0;
|
|
10
11
|
let route = "/";
|
|
@@ -26,47 +27,48 @@ const baseUseLogger = require_core.createUseLogger({
|
|
|
26
27
|
enrich: enrichFromRequest
|
|
27
28
|
});
|
|
28
29
|
function useLogger(request, requestLoggerOptions) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
try {
|
|
31
|
+
return storageUseLogger();
|
|
32
|
+
} catch {
|
|
33
|
+
return baseUseLogger(request, requestLoggerOptions);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function resolvePath(request) {
|
|
37
|
+
if (!request?.url) return "/";
|
|
38
|
+
try {
|
|
39
|
+
return new URL(request.url).pathname;
|
|
40
|
+
} catch {
|
|
41
|
+
return request.url;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const integration = require_integration.defineFrameworkIntegration({
|
|
45
|
+
name: "next",
|
|
46
|
+
storage: nextLoggerStorage,
|
|
47
|
+
extractRequest: (request) => ({
|
|
48
|
+
method: request?.method ?? "GET",
|
|
49
|
+
path: resolvePath(request),
|
|
50
|
+
headers: request?.headers,
|
|
51
|
+
requestId: require_core.getHeader(request?.headers, "x-request-id")
|
|
52
|
+
}),
|
|
53
|
+
attachLogger: () => {}
|
|
54
|
+
});
|
|
55
|
+
function resolveSpanName(request, options) {
|
|
56
|
+
if (typeof options?.spanName === "function") return options.spanName(request);
|
|
57
|
+
return options?.spanName ?? "next.request";
|
|
32
58
|
}
|
|
33
59
|
function withAutotel(handler, options) {
|
|
34
60
|
return async (...args) => {
|
|
35
61
|
const request = args[0];
|
|
36
|
-
return
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (auto && Object.keys(auto).length > 0) log.set(auto);
|
|
41
|
-
const custom = options?.enrich?.(innerRequest);
|
|
42
|
-
if (custom && Object.keys(custom).length > 0) log.set(custom);
|
|
43
|
-
try {
|
|
44
|
-
return await nextLoggerStorage.run(log, async () => handler(...innerArgs));
|
|
45
|
-
} finally {
|
|
46
|
-
if (options?.autoEmit !== false) log.emitNow();
|
|
47
|
-
}
|
|
48
|
-
})(...args);
|
|
62
|
+
return integration.runTraced(request, require_integration.buildTracedOptions(options, resolveSpanName(request, options)), async (handle) => require_integration.runWithIntegratedHandle(handle, options, async () => {
|
|
63
|
+
require_integration.applyLoggerEnrichment(handle.logger, enrichFromRequest(request), options?.enrichRequest?.(request));
|
|
64
|
+
return handler(...args);
|
|
65
|
+
}));
|
|
49
66
|
};
|
|
50
67
|
}
|
|
51
|
-
function createNextAdapter(options) {
|
|
52
|
-
return {
|
|
53
|
-
withAutotel: (handler) => withAutotel(handler, options),
|
|
54
|
-
useLogger: (request, requestLoggerOptions) => useLogger(request, requestLoggerOptions),
|
|
55
|
-
parseError: (error) => (0, autotel.parseError)(error),
|
|
56
|
-
createStructuredError: (input) => (0, autotel.createStructuredError)(input),
|
|
57
|
-
createDrainPipeline: (drainOptions) => (0, autotel.createDrainPipeline)(drainOptions)
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
const nextToolkit = require_core.createAdapterToolkit({
|
|
61
|
-
adapterName: "next",
|
|
62
|
-
enrich: enrichFromRequest
|
|
63
|
-
});
|
|
64
68
|
|
|
65
69
|
//#endregion
|
|
66
70
|
exports.createDrainPipeline = autotel.createDrainPipeline;
|
|
67
|
-
exports.createNextAdapter = createNextAdapter;
|
|
68
71
|
exports.createStructuredError = autotel.createStructuredError;
|
|
69
|
-
exports.nextToolkit = nextToolkit;
|
|
70
72
|
exports.parseError = autotel.parseError;
|
|
71
73
|
exports.useLogger = useLogger;
|
|
72
74
|
exports.withAutotel = withAutotel;
|
package/dist/next.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.cjs","names":["
|
|
1
|
+
{"version":3,"file":"next.cjs","names":["createLoggerStorage","getHeader","createUseLogger","defineFrameworkIntegration","buildTracedOptions","runWithIntegratedHandle"],"sources":["../src/next.ts"],"sourcesContent":["import {\n createDrainPipeline,\n parseError,\n createStructuredError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createUseLogger,\n getHeader,\n type FrameworkHandlerOptions,\n} from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n buildTracedOptions,\n} from './toolkit/integration';\n\nexport interface NextRequestLike {\n method?: string;\n url?: string;\n headers?:\n { get(name: string): string | null } | Record<string, string | undefined>;\n}\n\nexport interface NextWithAutotelOptions extends Omit<\n FrameworkHandlerOptions,\n 'spanName'\n> {\n spanName?: string | ((request?: NextRequestLike) => string);\n enrichRequest?: (\n request?: NextRequestLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: nextLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Wrap handlers with withAutotel() first.',\n );\n\nfunction enrichFromRequest(\n request?: NextRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n let route = '/';\n if (request.url) {\n try {\n route = new URL(request.url).pathname;\n } catch {\n route = request.url;\n }\n }\n const requestId = getHeader(request.headers, 'x-request-id');\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(request.url ? { 'url.full': request.url } : {}),\n ...(route ? { 'http.route': route } : {}),\n ...(requestId ? { 'http.request.header.x-request-id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<NextRequestLike>({\n adapterName: 'next',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: NextRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n try {\n return storageUseLogger();\n } catch {\n return baseUseLogger(request, requestLoggerOptions);\n }\n}\n\nfunction resolvePath(request?: NextRequestLike): string {\n if (!request?.url) return '/';\n try {\n return new URL(request.url).pathname;\n } catch {\n return request.url;\n }\n}\n\nconst integration = defineFrameworkIntegration<NextRequestLike | undefined>({\n name: 'next',\n storage: nextLoggerStorage,\n extractRequest: (request) => ({\n method: request?.method ?? 'GET',\n path: resolvePath(request),\n headers: request?.headers,\n requestId: getHeader(request?.headers, 'x-request-id'),\n }),\n attachLogger: () => {},\n});\n\nfunction resolveSpanName(\n request: NextRequestLike | undefined,\n options?: NextWithAutotelOptions,\n): string {\n if (typeof options?.spanName === 'function') {\n return options.spanName(request);\n }\n return options?.spanName ?? 'next.request';\n}\n\nexport function withAutotel<TArgs extends unknown[], TReturn>(\n handler: (...args: TArgs) => TReturn | Promise<TReturn>,\n options?: NextWithAutotelOptions,\n): (...args: TArgs) => Promise<TReturn> {\n return async (...args: TArgs): Promise<TReturn> => {\n const request = args[0] as NextRequestLike | undefined;\n\n return integration.runTraced(\n request,\n buildTracedOptions(options, resolveSpanName(request, options)),\n async (handle) =>\n runWithIntegratedHandle(handle, options, async () => {\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n options?.enrichRequest?.(request),\n );\n return handler(...args);\n }),\n );\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;AAqCA,MAAM,EAAE,SAAS,mBAAmB,WAAW,qBAC7CA,4CACE,0DACF;AAEF,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,IAAI,QAAQ;CACZ,IAAI,QAAQ,KACV,IAAI;EACF,QAAQ,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC/B,QAAQ;EACN,QAAQ,QAAQ;CAClB;CAEF,MAAM,YAAYC,uBAAU,QAAQ,SAAS,cAAc;CAE3D,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,QAAQ,MAAM,EAAE,YAAY,QAAQ,IAAI,IAAI,CAAC;EACjD,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,oCAAoC,UAAU,IAAI,CAAC;CACvE;AACF;AAEA,MAAM,gBAAgBC,6BAAiC;CACrD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,IAAI;EACF,OAAO,iBAAiB;CAC1B,QAAQ;EACN,OAAO,cAAc,SAAS,oBAAoB;CACpD;AACF;AAEA,SAAS,YAAY,SAAmC;CACtD,IAAI,CAAC,SAAS,KAAK,OAAO;CAC1B,IAAI;EACF,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC9B,QAAQ;EACN,OAAO,QAAQ;CACjB;AACF;AAEA,MAAM,cAAcC,+CAAwD;CAC1E,MAAM;CACN,SAAS;CACT,iBAAiB,aAAa;EAC5B,QAAQ,SAAS,UAAU;EAC3B,MAAM,YAAY,OAAO;EACzB,SAAS,SAAS;EAClB,WAAWF,uBAAU,SAAS,SAAS,cAAc;CACvD;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAS,gBACP,SACA,SACQ;CACR,IAAI,OAAO,SAAS,aAAa,YAC/B,OAAO,QAAQ,SAAS,OAAO;CAEjC,OAAO,SAAS,YAAY;AAC9B;AAEA,SAAgB,YACd,SACA,SACsC;CACtC,OAAO,OAAO,GAAG,SAAkC;EACjD,MAAM,UAAU,KAAK;EAErB,OAAO,YAAY,UACjB,SACAG,uCAAmB,SAAS,gBAAgB,SAAS,OAAO,CAAC,GAC7D,OAAO,WACLC,4CAAwB,QAAQ,SAAS,YAAY;GACnD,0CACE,OAAO,QACP,kBAAkB,OAAO,GACzB,SAAS,gBAAgB,OAAO,CAClC;GACA,OAAO,QAAQ,GAAG,IAAI;EACxB,CAAC,CACL;CACF;AACF"}
|
package/dist/next.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
1
|
+
import { n as FrameworkHandlerOptions } from "./integration-DI-1RuTh.cjs";
|
|
2
|
+
import "./core.cjs";
|
|
3
|
+
import { RequestLogger, RequestLoggerOptions, createDrainPipeline, createStructuredError, parseError } from "autotel";
|
|
4
4
|
//#region src/next.d.ts
|
|
5
5
|
interface NextRequestLike {
|
|
6
6
|
method?: string;
|
|
@@ -9,23 +9,12 @@ interface NextRequestLike {
|
|
|
9
9
|
get(name: string): string | null;
|
|
10
10
|
} | Record<string, string | undefined>;
|
|
11
11
|
}
|
|
12
|
-
interface NextWithAutotelOptions {
|
|
12
|
+
interface NextWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanName'> {
|
|
13
13
|
spanName?: string | ((request?: NextRequestLike) => string);
|
|
14
|
-
|
|
15
|
-
enrich?: (request?: NextRequestLike) => Record<string, unknown> | undefined;
|
|
16
|
-
/** Emit one wide event automatically when the handler settles. Default `true`. */
|
|
17
|
-
autoEmit?: boolean;
|
|
14
|
+
enrichRequest?: (request?: NextRequestLike) => Record<string, unknown> | undefined;
|
|
18
15
|
}
|
|
19
16
|
declare function useLogger(request?: NextRequestLike, requestLoggerOptions?: RequestLoggerOptions): RequestLogger;
|
|
20
17
|
declare function withAutotel<TArgs extends unknown[], TReturn>(handler: (...args: TArgs) => TReturn | Promise<TReturn>, options?: NextWithAutotelOptions): (...args: TArgs) => Promise<TReturn>;
|
|
21
|
-
declare function createNextAdapter(options?: NextWithAutotelOptions): {
|
|
22
|
-
withAutotel: <TArgs extends unknown[], TReturn>(handler: (...args: TArgs) => TReturn | Promise<TReturn>) => (...args: TArgs) => Promise<TReturn>;
|
|
23
|
-
useLogger: (request?: NextRequestLike, requestLoggerOptions?: RequestLoggerOptions) => RequestLogger;
|
|
24
|
-
parseError: (error: unknown) => ParsedError;
|
|
25
|
-
createStructuredError: (input: StructuredErrorInput) => StructuredError;
|
|
26
|
-
createDrainPipeline: <T = unknown>(drainOptions?: DrainPipelineOptions<T>) => ((batchDrain: (batch: T[]) => void | Promise<void>) => PipelineDrainFn<T>);
|
|
27
|
-
};
|
|
28
|
-
declare const nextToolkit: AdapterToolkit<NextRequestLike>;
|
|
29
18
|
//#endregion
|
|
30
|
-
export { NextRequestLike, NextWithAutotelOptions, createDrainPipeline,
|
|
19
|
+
export { NextRequestLike, NextWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
|
|
31
20
|
//# sourceMappingURL=next.d.cts.map
|
package/dist/next.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.cts","names":[],"sources":["../src/next.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"next.d.cts","names":[],"sources":["../src/next.ts"],"mappings":";;;;UAoBiB;EACf;EACA;EACA;IACI,IAAI;MAAiC;;UAG1B,+BAA+B,KAC9C;EAGA,sBAAsB,UAAU;EAChC,iBACE,UAAU,oBACP;;iBAoCS,UACd,UAAU,iBACV,uBAAuB,uBACtB;iBAuCa,YAAY,yBAAyB,SACnD,aAAa,MAAM,UAAU,UAAU,QAAQ,UAC/C,UAAU,6BACL,MAAM,UAAU,QAAQ"}
|
package/dist/next.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
1
|
+
import { n as FrameworkHandlerOptions } from "./integration-rYoX8QLk.js";
|
|
2
|
+
import "./core.js";
|
|
3
|
+
import { RequestLogger, RequestLoggerOptions, createDrainPipeline, createStructuredError, parseError } from "autotel";
|
|
4
4
|
//#region src/next.d.ts
|
|
5
5
|
interface NextRequestLike {
|
|
6
6
|
method?: string;
|
|
@@ -9,23 +9,12 @@ interface NextRequestLike {
|
|
|
9
9
|
get(name: string): string | null;
|
|
10
10
|
} | Record<string, string | undefined>;
|
|
11
11
|
}
|
|
12
|
-
interface NextWithAutotelOptions {
|
|
12
|
+
interface NextWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanName'> {
|
|
13
13
|
spanName?: string | ((request?: NextRequestLike) => string);
|
|
14
|
-
|
|
15
|
-
enrich?: (request?: NextRequestLike) => Record<string, unknown> | undefined;
|
|
16
|
-
/** Emit one wide event automatically when the handler settles. Default `true`. */
|
|
17
|
-
autoEmit?: boolean;
|
|
14
|
+
enrichRequest?: (request?: NextRequestLike) => Record<string, unknown> | undefined;
|
|
18
15
|
}
|
|
19
16
|
declare function useLogger(request?: NextRequestLike, requestLoggerOptions?: RequestLoggerOptions): RequestLogger;
|
|
20
17
|
declare function withAutotel<TArgs extends unknown[], TReturn>(handler: (...args: TArgs) => TReturn | Promise<TReturn>, options?: NextWithAutotelOptions): (...args: TArgs) => Promise<TReturn>;
|
|
21
|
-
declare function createNextAdapter(options?: NextWithAutotelOptions): {
|
|
22
|
-
withAutotel: <TArgs extends unknown[], TReturn>(handler: (...args: TArgs) => TReturn | Promise<TReturn>) => (...args: TArgs) => Promise<TReturn>;
|
|
23
|
-
useLogger: (request?: NextRequestLike, requestLoggerOptions?: RequestLoggerOptions) => RequestLogger;
|
|
24
|
-
parseError: (error: unknown) => ParsedError;
|
|
25
|
-
createStructuredError: (input: StructuredErrorInput) => StructuredError;
|
|
26
|
-
createDrainPipeline: <T = unknown>(drainOptions?: DrainPipelineOptions<T>) => ((batchDrain: (batch: T[]) => void | Promise<void>) => PipelineDrainFn<T>);
|
|
27
|
-
};
|
|
28
|
-
declare const nextToolkit: AdapterToolkit<NextRequestLike>;
|
|
29
18
|
//#endregion
|
|
30
|
-
export { NextRequestLike, NextWithAutotelOptions, createDrainPipeline,
|
|
19
|
+
export { NextRequestLike, NextWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
|
|
31
20
|
//# sourceMappingURL=next.d.ts.map
|
package/dist/next.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","names":[],"sources":["../src/next.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"next.d.ts","names":[],"sources":["../src/next.ts"],"mappings":";;;;UAoBiB;EACf;EACA;EACA;IACI,IAAI;MAAiC;;UAG1B,+BAA+B,KAC9C;EAGA,sBAAsB,UAAU;EAChC,iBACE,UAAU,oBACP;;iBAoCS,UACd,UAAU,iBACV,uBAAuB,uBACtB;iBAuCa,YAAY,yBAAyB,SACnD,aAAa,MAAM,UAAU,UAAU,QAAQ,UAC/C,UAAU,6BACL,MAAM,UAAU,QAAQ"}
|