autotel-adapters 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +8 -0
  2. package/dist/cloudflare.cjs +2 -3
  3. package/dist/cloudflare.d.cts +2 -3
  4. package/dist/cloudflare.d.ts +2 -3
  5. package/dist/cloudflare.js +2 -3
  6. package/dist/core.cjs +2 -3
  7. package/dist/core.d.cts +2 -3
  8. package/dist/core.d.ts +2 -3
  9. package/dist/core.js +2 -3
  10. package/dist/elysia.cjs +2 -3
  11. package/dist/elysia.d.cts +2 -3
  12. package/dist/elysia.d.ts +2 -3
  13. package/dist/elysia.js +2 -3
  14. package/dist/express.cjs +2 -3
  15. package/dist/express.d.cts +2 -3
  16. package/dist/express.d.ts +2 -3
  17. package/dist/express.js +2 -3
  18. package/dist/fastify.cjs +2 -3
  19. package/dist/fastify.d.cts +2 -3
  20. package/dist/fastify.d.ts +2 -3
  21. package/dist/fastify.js +2 -3
  22. package/dist/hono.cjs +3 -4
  23. package/dist/hono.d.cts +2 -3
  24. package/dist/hono.d.ts +2 -3
  25. package/dist/hono.js +3 -4
  26. package/dist/index.cjs +1 -1
  27. package/dist/index.d.cts +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/{integration-DI-1RuTh.d.cts → integration-BAs5uTiD.d.ts} +5 -4
  31. package/dist/{integration-guh7BHTF.cjs → integration-Cc8bXel_.cjs} +8 -5
  32. package/dist/{integration-rYoX8QLk.d.ts → integration-D_rlU8Nx.d.cts} +5 -4
  33. package/dist/{integration-IUpfttGT.js → integration-DvibHRzI.js} +8 -5
  34. package/dist/nestjs.cjs +2 -3
  35. package/dist/nestjs.d.cts +2 -3
  36. package/dist/nestjs.d.ts +2 -3
  37. package/dist/nestjs.js +2 -3
  38. package/dist/next.cjs +30 -6
  39. package/dist/next.d.cts +2 -3
  40. package/dist/next.d.ts +2 -3
  41. package/dist/next.js +30 -6
  42. package/dist/nitro.cjs +2 -3
  43. package/dist/nitro.d.cts +2 -3
  44. package/dist/nitro.d.ts +2 -3
  45. package/dist/nitro.js +2 -3
  46. package/dist/sveltekit.cjs +2 -3
  47. package/dist/sveltekit.d.cts +2 -3
  48. package/dist/sveltekit.d.ts +2 -3
  49. package/dist/sveltekit.js +2 -3
  50. package/dist/tanstack.cjs +1 -2
  51. package/dist/tanstack.d.cts +1 -2
  52. package/dist/tanstack.d.ts +1 -2
  53. package/dist/tanstack.js +1 -2
  54. package/dist/toolkit/index.cjs +1 -1
  55. package/dist/toolkit/index.d.cts +2 -3
  56. package/dist/toolkit/index.d.ts +2 -3
  57. package/dist/toolkit/index.js +1 -1
  58. package/dist/toolkit/storage.cjs +1 -2
  59. package/dist/toolkit/storage.d.cts +1 -2
  60. package/dist/toolkit/storage.d.ts +1 -2
  61. package/dist/toolkit/storage.js +1 -2
  62. package/package.json +6 -6
  63. package/dist/cloudflare.cjs.map +0 -1
  64. package/dist/cloudflare.d.cts.map +0 -1
  65. package/dist/cloudflare.d.ts.map +0 -1
  66. package/dist/cloudflare.js.map +0 -1
  67. package/dist/core.cjs.map +0 -1
  68. package/dist/core.d.cts.map +0 -1
  69. package/dist/core.d.ts.map +0 -1
  70. package/dist/core.js.map +0 -1
  71. package/dist/elysia.cjs.map +0 -1
  72. package/dist/elysia.d.cts.map +0 -1
  73. package/dist/elysia.d.ts.map +0 -1
  74. package/dist/elysia.js.map +0 -1
  75. package/dist/express.cjs.map +0 -1
  76. package/dist/express.d.cts.map +0 -1
  77. package/dist/express.d.ts.map +0 -1
  78. package/dist/express.js.map +0 -1
  79. package/dist/fastify.cjs.map +0 -1
  80. package/dist/fastify.d.cts.map +0 -1
  81. package/dist/fastify.d.ts.map +0 -1
  82. package/dist/fastify.js.map +0 -1
  83. package/dist/hono.cjs.map +0 -1
  84. package/dist/hono.d.cts.map +0 -1
  85. package/dist/hono.d.ts.map +0 -1
  86. package/dist/hono.js.map +0 -1
  87. package/dist/integration-DI-1RuTh.d.cts.map +0 -1
  88. package/dist/integration-IUpfttGT.js.map +0 -1
  89. package/dist/integration-guh7BHTF.cjs.map +0 -1
  90. package/dist/integration-rYoX8QLk.d.ts.map +0 -1
  91. package/dist/nestjs.cjs.map +0 -1
  92. package/dist/nestjs.d.cts.map +0 -1
  93. package/dist/nestjs.d.ts.map +0 -1
  94. package/dist/nestjs.js.map +0 -1
  95. package/dist/next.cjs.map +0 -1
  96. package/dist/next.d.cts.map +0 -1
  97. package/dist/next.d.ts.map +0 -1
  98. package/dist/next.js.map +0 -1
  99. package/dist/nitro.cjs.map +0 -1
  100. package/dist/nitro.d.cts.map +0 -1
  101. package/dist/nitro.d.ts.map +0 -1
  102. package/dist/nitro.js.map +0 -1
  103. package/dist/sveltekit.cjs.map +0 -1
  104. package/dist/sveltekit.d.cts.map +0 -1
  105. package/dist/sveltekit.d.ts.map +0 -1
  106. package/dist/sveltekit.js.map +0 -1
  107. package/dist/tanstack.cjs.map +0 -1
  108. package/dist/tanstack.d.cts.map +0 -1
  109. package/dist/tanstack.d.ts.map +0 -1
  110. package/dist/tanstack.js.map +0 -1
  111. package/dist/toolkit/index.d.cts.map +0 -1
  112. package/dist/toolkit/index.d.ts.map +0 -1
  113. package/dist/toolkit/storage.cjs.map +0 -1
  114. package/dist/toolkit/storage.d.cts.map +0 -1
  115. package/dist/toolkit/storage.d.ts.map +0 -1
  116. package/dist/toolkit/storage.js.map +0 -1
package/dist/next.cjs CHANGED
@@ -1,10 +1,27 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_integration = require('./integration-guh7BHTF.cjs');
2
+ const require_integration = require('./integration-Cc8bXel_.cjs');
3
3
  const require_toolkit_storage = require('./toolkit/storage.cjs');
4
4
  const require_core = require('./core.cjs');
5
5
  let autotel = require("autotel");
6
+ let next_navigation_js = require("next/navigation.js");
6
7
 
7
8
  //#region src/next.ts
9
+ /**
10
+ * Next navigation helpers throw internal values that the framework converts
11
+ * into responses. Delegate classification to Next itself so new signal types
12
+ * and signals wrapped in `cause` stay covered without duplicating its internals.
13
+ */
14
+ function findNextControlFlowSignal(error) {
15
+ try {
16
+ (0, next_navigation_js.unstable_rethrow)(error);
17
+ return null;
18
+ } catch (signal) {
19
+ return signal;
20
+ }
21
+ }
22
+ function isRealNextError(error) {
23
+ return findNextControlFlowSignal(error) === null;
24
+ }
8
25
  const { storage: nextLoggerStorage, useLogger: storageUseLogger } = require_toolkit_storage.createLoggerStorage("request context. Wrap handlers with withAutotel() first.");
9
26
  function enrichFromRequest(request) {
10
27
  if (!request) return void 0;
@@ -59,10 +76,18 @@ function resolveSpanName(request, options) {
59
76
  function withAutotel(handler, options) {
60
77
  return async (...args) => {
61
78
  const request = args[0];
62
- return integration.runTraced(request, require_integration.buildTracedOptions(options, resolveSpanName(request, options)), async (handle) => require_integration.runWithIntegratedHandle(handle, options, async () => {
79
+ const tracedOptions = require_integration.buildTracedOptions(options, resolveSpanName(request, options));
80
+ return integration.runTraced(request, tracedOptions, async (handle) => require_integration.runWithIntegratedHandle(handle, {
81
+ autoEmit: tracedOptions.autoEmit,
82
+ isError: isRealNextError
83
+ }, async () => {
63
84
  require_integration.applyLoggerEnrichment(handle.logger, enrichFromRequest(request), options?.enrichRequest?.(request));
64
- return handler(...args);
65
- }));
85
+ try {
86
+ return await handler(...args);
87
+ } catch (error) {
88
+ throw findNextControlFlowSignal(error) ?? error;
89
+ }
90
+ }), { isError: isRealNextError });
66
91
  };
67
92
  }
68
93
 
@@ -71,5 +96,4 @@ exports.createDrainPipeline = autotel.createDrainPipeline;
71
96
  exports.createStructuredError = autotel.createStructuredError;
72
97
  exports.parseError = autotel.parseError;
73
98
  exports.useLogger = useLogger;
74
- exports.withAutotel = withAutotel;
75
- //# sourceMappingURL=next.cjs.map
99
+ exports.withAutotel = withAutotel;
package/dist/next.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as FrameworkHandlerOptions } from "./integration-DI-1RuTh.cjs";
1
+ import { n as FrameworkHandlerOptions } from "./integration-D_rlU8Nx.cjs";
2
2
  import "./core.cjs";
3
3
  import { RequestLogger, RequestLoggerOptions, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
  //#region src/next.d.ts
@@ -16,5 +16,4 @@ interface NextWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanName
16
16
  declare function useLogger(request?: NextRequestLike, requestLoggerOptions?: RequestLoggerOptions): RequestLogger;
17
17
  declare function withAutotel<TArgs extends unknown[], TReturn>(handler: (...args: TArgs) => TReturn | Promise<TReturn>, options?: NextWithAutotelOptions): (...args: TArgs) => Promise<TReturn>;
18
18
  //#endregion
19
- export { NextRequestLike, NextWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
20
- //# sourceMappingURL=next.d.cts.map
19
+ export { NextRequestLike, NextWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
package/dist/next.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as FrameworkHandlerOptions } from "./integration-rYoX8QLk.js";
1
+ import { n as FrameworkHandlerOptions } from "./integration-BAs5uTiD.js";
2
2
  import "./core.js";
3
3
  import { RequestLogger, RequestLoggerOptions, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
  //#region src/next.d.ts
@@ -16,5 +16,4 @@ interface NextWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanName
16
16
  declare function useLogger(request?: NextRequestLike, requestLoggerOptions?: RequestLoggerOptions): RequestLogger;
17
17
  declare function withAutotel<TArgs extends unknown[], TReturn>(handler: (...args: TArgs) => TReturn | Promise<TReturn>, options?: NextWithAutotelOptions): (...args: TArgs) => Promise<TReturn>;
18
18
  //#endregion
19
- export { NextRequestLike, NextWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
20
- //# sourceMappingURL=next.d.ts.map
19
+ export { NextRequestLike, NextWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
package/dist/next.js CHANGED
@@ -1,9 +1,26 @@
1
- import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, n as buildTracedOptions, t as applyLoggerEnrichment } from "./integration-IUpfttGT.js";
1
+ import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, n as buildTracedOptions, t as applyLoggerEnrichment } from "./integration-DvibHRzI.js";
2
2
  import { createLoggerStorage } from "./toolkit/storage.js";
3
3
  import { createUseLogger, getHeader } from "./core.js";
4
4
  import { createDrainPipeline, createStructuredError, parseError } from "autotel";
5
+ import { unstable_rethrow } from "next/navigation.js";
5
6
 
6
7
  //#region src/next.ts
8
+ /**
9
+ * Next navigation helpers throw internal values that the framework converts
10
+ * into responses. Delegate classification to Next itself so new signal types
11
+ * and signals wrapped in `cause` stay covered without duplicating its internals.
12
+ */
13
+ function findNextControlFlowSignal(error) {
14
+ try {
15
+ unstable_rethrow(error);
16
+ return null;
17
+ } catch (signal) {
18
+ return signal;
19
+ }
20
+ }
21
+ function isRealNextError(error) {
22
+ return findNextControlFlowSignal(error) === null;
23
+ }
7
24
  const { storage: nextLoggerStorage, useLogger: storageUseLogger } = createLoggerStorage("request context. Wrap handlers with withAutotel() first.");
8
25
  function enrichFromRequest(request) {
9
26
  if (!request) return void 0;
@@ -58,13 +75,20 @@ function resolveSpanName(request, options) {
58
75
  function withAutotel(handler, options) {
59
76
  return async (...args) => {
60
77
  const request = args[0];
61
- return integration.runTraced(request, buildTracedOptions(options, resolveSpanName(request, options)), async (handle) => runWithIntegratedHandle(handle, options, async () => {
78
+ const tracedOptions = buildTracedOptions(options, resolveSpanName(request, options));
79
+ return integration.runTraced(request, tracedOptions, async (handle) => runWithIntegratedHandle(handle, {
80
+ autoEmit: tracedOptions.autoEmit,
81
+ isError: isRealNextError
82
+ }, async () => {
62
83
  applyLoggerEnrichment(handle.logger, enrichFromRequest(request), options?.enrichRequest?.(request));
63
- return handler(...args);
64
- }));
84
+ try {
85
+ return await handler(...args);
86
+ } catch (error) {
87
+ throw findNextControlFlowSignal(error) ?? error;
88
+ }
89
+ }), { isError: isRealNextError });
65
90
  };
66
91
  }
67
92
 
68
93
  //#endregion
69
- export { createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
70
- //# sourceMappingURL=next.js.map
94
+ export { createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
package/dist/nitro.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_integration = require('./integration-guh7BHTF.cjs');
2
+ const require_integration = require('./integration-Cc8bXel_.cjs');
3
3
  const require_toolkit_storage = require('./toolkit/storage.cjs');
4
4
  const require_core = require('./core.cjs');
5
5
  let autotel = require("autotel");
@@ -55,5 +55,4 @@ exports.createDrainPipeline = autotel.createDrainPipeline;
55
55
  exports.createStructuredError = autotel.createStructuredError;
56
56
  exports.parseError = autotel.parseError;
57
57
  exports.useLogger = useLogger;
58
- exports.withAutotelEventHandler = withAutotelEventHandler;
59
- //# sourceMappingURL=nitro.cjs.map
58
+ exports.withAutotelEventHandler = withAutotelEventHandler;
package/dist/nitro.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as FrameworkHandlerOptions } from "./integration-DI-1RuTh.cjs";
1
+ import { n as FrameworkHandlerOptions } from "./integration-D_rlU8Nx.cjs";
2
2
  import "./core.cjs";
3
3
  import { RequestLogger, RequestLoggerOptions, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
  //#region src/nitro.d.ts
@@ -14,5 +14,4 @@ interface NitroWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanNam
14
14
  declare function useLogger(event?: NitroEventLike, serviceOrOptions?: string | RequestLoggerOptions): RequestLogger;
15
15
  declare function withAutotelEventHandler<TEvent extends NitroEventLike, TReturn>(handler: (event: TEvent) => TReturn | Promise<TReturn>, options?: NitroWithAutotelOptions): (event: TEvent) => Promise<TReturn>;
16
16
  //#endregion
17
- export { NitroEventLike, NitroWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
18
- //# sourceMappingURL=nitro.d.cts.map
17
+ export { NitroEventLike, NitroWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
package/dist/nitro.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as FrameworkHandlerOptions } from "./integration-rYoX8QLk.js";
1
+ import { n as FrameworkHandlerOptions } from "./integration-BAs5uTiD.js";
2
2
  import "./core.js";
3
3
  import { RequestLogger, RequestLoggerOptions, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
  //#region src/nitro.d.ts
@@ -14,5 +14,4 @@ interface NitroWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanNam
14
14
  declare function useLogger(event?: NitroEventLike, serviceOrOptions?: string | RequestLoggerOptions): RequestLogger;
15
15
  declare function withAutotelEventHandler<TEvent extends NitroEventLike, TReturn>(handler: (event: TEvent) => TReturn | Promise<TReturn>, options?: NitroWithAutotelOptions): (event: TEvent) => Promise<TReturn>;
16
16
  //#endregion
17
- export { NitroEventLike, NitroWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
18
- //# sourceMappingURL=nitro.d.ts.map
17
+ export { NitroEventLike, NitroWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
package/dist/nitro.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, n as buildTracedOptions, t as applyLoggerEnrichment } from "./integration-IUpfttGT.js";
1
+ import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, n as buildTracedOptions, t as applyLoggerEnrichment } from "./integration-DvibHRzI.js";
2
2
  import { createLoggerStorage } from "./toolkit/storage.js";
3
3
  import { createUseLogger } from "./core.js";
4
4
  import { createDrainPipeline, createStructuredError, parseError } from "autotel";
@@ -50,5 +50,4 @@ function withAutotelEventHandler(handler, options) {
50
50
  }
51
51
 
52
52
  //#endregion
53
- export { createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
54
- //# sourceMappingURL=nitro.js.map
53
+ export { createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_integration = require('./integration-guh7BHTF.cjs');
2
+ const require_integration = require('./integration-Cc8bXel_.cjs');
3
3
  const require_toolkit_storage = require('./toolkit/storage.cjs');
4
4
  let autotel = require("autotel");
5
5
 
@@ -44,5 +44,4 @@ exports.autotelHandle = autotelHandle;
44
44
  exports.createDrainPipeline = autotel.createDrainPipeline;
45
45
  exports.createStructuredError = autotel.createStructuredError;
46
46
  exports.parseError = autotel.parseError;
47
- exports.useLogger = useLogger;
48
- //# sourceMappingURL=sveltekit.cjs.map
47
+ exports.useLogger = useLogger;
@@ -1,4 +1,4 @@
1
- import { n as FrameworkHandlerOptions } from "./integration-DI-1RuTh.cjs";
1
+ import { n as FrameworkHandlerOptions } from "./integration-D_rlU8Nx.cjs";
2
2
  import "./core.cjs";
3
3
  import { RequestLogger, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
  //#region src/sveltekit.d.ts
@@ -20,5 +20,4 @@ interface SvelteKitWithAutotelOptions extends FrameworkHandlerOptions {
20
20
  declare function useLogger(): RequestLogger;
21
21
  declare function autotelHandle(options?: SvelteKitWithAutotelOptions): ({ event, resolve }: SvelteKitHandleInput) => Promise<Response>;
22
22
  //#endregion
23
- export { SvelteKitEventLike, SvelteKitHandleInput, SvelteKitWithAutotelOptions, autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
24
- //# sourceMappingURL=sveltekit.d.cts.map
23
+ export { SvelteKitEventLike, SvelteKitHandleInput, SvelteKitWithAutotelOptions, autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
@@ -1,4 +1,4 @@
1
- import { n as FrameworkHandlerOptions } from "./integration-rYoX8QLk.js";
1
+ import { n as FrameworkHandlerOptions } from "./integration-BAs5uTiD.js";
2
2
  import "./core.js";
3
3
  import { RequestLogger, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
  //#region src/sveltekit.d.ts
@@ -20,5 +20,4 @@ interface SvelteKitWithAutotelOptions extends FrameworkHandlerOptions {
20
20
  declare function useLogger(): RequestLogger;
21
21
  declare function autotelHandle(options?: SvelteKitWithAutotelOptions): ({ event, resolve }: SvelteKitHandleInput) => Promise<Response>;
22
22
  //#endregion
23
- export { SvelteKitEventLike, SvelteKitHandleInput, SvelteKitWithAutotelOptions, autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
24
- //# sourceMappingURL=sveltekit.d.ts.map
23
+ export { SvelteKitEventLike, SvelteKitHandleInput, SvelteKitWithAutotelOptions, autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
package/dist/sveltekit.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, t as applyLoggerEnrichment } from "./integration-IUpfttGT.js";
1
+ import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, t as applyLoggerEnrichment } from "./integration-DvibHRzI.js";
2
2
  import { createLoggerStorage } from "./toolkit/storage.js";
3
3
  import { createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
 
@@ -39,5 +39,4 @@ function autotelHandle(options = {}) {
39
39
  }
40
40
 
41
41
  //#endregion
42
- export { autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
43
- //# sourceMappingURL=sveltekit.js.map
42
+ export { autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
package/dist/tanstack.cjs CHANGED
@@ -11,5 +11,4 @@ const useLogger = require_core.createUseLogger({
11
11
  });
12
12
 
13
13
  //#endregion
14
- exports.useLogger = useLogger;
15
- //# sourceMappingURL=tanstack.cjs.map
14
+ exports.useLogger = useLogger;
@@ -4,5 +4,4 @@ declare const useLogger: (context?: {
4
4
  method?: string;
5
5
  } | undefined, requestLoggerOptions?: import("autotel").RequestLoggerOptions) => import("autotel").RequestLogger;
6
6
  //#endregion
7
- export { useLogger };
8
- //# sourceMappingURL=tanstack.d.cts.map
7
+ export { useLogger };
@@ -4,5 +4,4 @@ declare const useLogger: (context?: {
4
4
  method?: string;
5
5
  } | undefined, requestLoggerOptions?: import("autotel").RequestLoggerOptions) => import("autotel").RequestLogger;
6
6
  //#endregion
7
- export { useLogger };
8
- //# sourceMappingURL=tanstack.d.ts.map
7
+ export { useLogger };
package/dist/tanstack.js CHANGED
@@ -10,5 +10,4 @@ const useLogger = createUseLogger({
10
10
  });
11
11
 
12
12
  //#endregion
13
- export { useLogger };
14
- //# sourceMappingURL=tanstack.js.map
13
+ export { useLogger };
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_integration = require('../integration-guh7BHTF.cjs');
2
+ const require_integration = require('../integration-Cc8bXel_.cjs');
3
3
  const require_toolkit_storage = require('./storage.cjs');
4
4
  let autotel_edge = require("autotel-edge");
5
5
 
@@ -1,4 +1,4 @@
1
- import { C as matchesRoutePattern, S as getServiceForPath, T as shouldInstrumentPath, _ as RouteAdapterOptions, a as FrameworkRequestHandle, b as TailSamplingContext, c as buildTracedOptions, d as runWithIntegratedHandle, f as toRouteAdapterOptions, g as MiddlewareLoggerResult, h as MiddlewareLoggerOptions, i as FrameworkIntegrationSpec, l as completeIntegratedRequest, m as ForkLifecycle, n as FrameworkHandlerOptions, o as IntegratedCompletionOptions, p as BaseAdapterOptions, r as FrameworkIntegrationHelpers, s as applyLoggerEnrichment, t as ExtractedRequest, u as defineFrameworkIntegration, v as RouteFilterOptions, w as mergeRequestLoggerOptions, x as createMiddlewareLogger, y as RouteServiceConfig } from "../integration-DI-1RuTh.cjs";
1
+ import { C as matchesRoutePattern, S as getServiceForPath, T as shouldInstrumentPath, _ as RouteAdapterOptions, a as FrameworkRequestHandle, b as TailSamplingContext, c as buildTracedOptions, d as runWithIntegratedHandle, f as toRouteAdapterOptions, g as MiddlewareLoggerResult, h as MiddlewareLoggerOptions, i as FrameworkIntegrationSpec, l as completeIntegratedRequest, m as ForkLifecycle, n as FrameworkHandlerOptions, o as IntegratedCompletionOptions, p as BaseAdapterOptions, r as FrameworkIntegrationHelpers, s as applyLoggerEnrichment, t as ExtractedRequest, u as defineFrameworkIntegration, v as RouteFilterOptions, w as mergeRequestLoggerOptions, x as createMiddlewareLogger, y as RouteServiceConfig } from "../integration-D_rlU8Nx.cjs";
2
2
  import { createLoggerStorage, createStorageForkLifecycle } from "./storage.cjs";
3
3
  import { ForkLifecycle as ForkLifecycle$1, RequestLogger } from "autotel";
4
4
  //#region src/toolkit/deferred-drain.d.ts
@@ -38,5 +38,4 @@ declare function shouldDeferEmitForResponse(response: Response): boolean;
38
38
  */
39
39
  declare function bindStreamingResponseLifecycle(response: Response, onComplete: (meta: StreamCompleteMeta) => void | Promise<void>): Response;
40
40
  //#endregion
41
- export { type BaseAdapterOptions, type ExtractedRequest, type ForkLifecycle, type FrameworkHandlerOptions, type FrameworkIntegrationHelpers, type FrameworkIntegrationSpec, type FrameworkRequestHandle, type IntegratedCompletionOptions, type MiddlewareLoggerOptions, type MiddlewareLoggerResult, type RouteAdapterOptions, type RouteFilterOptions, type RouteServiceConfig, type StreamCompleteMeta, type TailSamplingContext, applyLoggerEnrichment, attachForkToLogger, bindStreamingResponseLifecycle, buildTracedOptions, completeIntegratedRequest, createLoggerStorage, createMiddlewareLogger, createStorageForkLifecycle, defineFrameworkIntegration, extendDeferredDrain, getServiceForPath, isStreamingResponse, matchesRoutePattern, mergeRequestLoggerOptions, runWithIntegratedHandle, shouldDeferEmitForResponse, shouldInstrumentPath, toRouteAdapterOptions };
42
- //# sourceMappingURL=index.d.cts.map
41
+ export { type BaseAdapterOptions, type ExtractedRequest, type ForkLifecycle, type FrameworkHandlerOptions, type FrameworkIntegrationHelpers, type FrameworkIntegrationSpec, type FrameworkRequestHandle, type IntegratedCompletionOptions, type MiddlewareLoggerOptions, type MiddlewareLoggerResult, type RouteAdapterOptions, type RouteFilterOptions, type RouteServiceConfig, type StreamCompleteMeta, type TailSamplingContext, applyLoggerEnrichment, attachForkToLogger, bindStreamingResponseLifecycle, buildTracedOptions, completeIntegratedRequest, createLoggerStorage, createMiddlewareLogger, createStorageForkLifecycle, defineFrameworkIntegration, extendDeferredDrain, getServiceForPath, isStreamingResponse, matchesRoutePattern, mergeRequestLoggerOptions, runWithIntegratedHandle, shouldDeferEmitForResponse, shouldInstrumentPath, toRouteAdapterOptions };
@@ -1,4 +1,4 @@
1
- import { C as matchesRoutePattern, S as getServiceForPath, T as shouldInstrumentPath, _ as RouteAdapterOptions, a as FrameworkRequestHandle, b as TailSamplingContext, c as buildTracedOptions, d as runWithIntegratedHandle, f as toRouteAdapterOptions, g as MiddlewareLoggerResult, h as MiddlewareLoggerOptions, i as FrameworkIntegrationSpec, l as completeIntegratedRequest, m as ForkLifecycle, n as FrameworkHandlerOptions, o as IntegratedCompletionOptions, p as BaseAdapterOptions, r as FrameworkIntegrationHelpers, s as applyLoggerEnrichment, t as ExtractedRequest, u as defineFrameworkIntegration, v as RouteFilterOptions, w as mergeRequestLoggerOptions, x as createMiddlewareLogger, y as RouteServiceConfig } from "../integration-rYoX8QLk.js";
1
+ import { C as matchesRoutePattern, S as getServiceForPath, T as shouldInstrumentPath, _ as RouteAdapterOptions, a as FrameworkRequestHandle, b as TailSamplingContext, c as buildTracedOptions, d as runWithIntegratedHandle, f as toRouteAdapterOptions, g as MiddlewareLoggerResult, h as MiddlewareLoggerOptions, i as FrameworkIntegrationSpec, l as completeIntegratedRequest, m as ForkLifecycle, n as FrameworkHandlerOptions, o as IntegratedCompletionOptions, p as BaseAdapterOptions, r as FrameworkIntegrationHelpers, s as applyLoggerEnrichment, t as ExtractedRequest, u as defineFrameworkIntegration, v as RouteFilterOptions, w as mergeRequestLoggerOptions, x as createMiddlewareLogger, y as RouteServiceConfig } from "../integration-BAs5uTiD.js";
2
2
  import { createLoggerStorage, createStorageForkLifecycle } from "./storage.js";
3
3
  import { ForkLifecycle as ForkLifecycle$1, RequestLogger } from "autotel";
4
4
  //#region src/toolkit/deferred-drain.d.ts
@@ -38,5 +38,4 @@ declare function shouldDeferEmitForResponse(response: Response): boolean;
38
38
  */
39
39
  declare function bindStreamingResponseLifecycle(response: Response, onComplete: (meta: StreamCompleteMeta) => void | Promise<void>): Response;
40
40
  //#endregion
41
- export { type BaseAdapterOptions, type ExtractedRequest, type ForkLifecycle, type FrameworkHandlerOptions, type FrameworkIntegrationHelpers, type FrameworkIntegrationSpec, type FrameworkRequestHandle, type IntegratedCompletionOptions, type MiddlewareLoggerOptions, type MiddlewareLoggerResult, type RouteAdapterOptions, type RouteFilterOptions, type RouteServiceConfig, type StreamCompleteMeta, type TailSamplingContext, applyLoggerEnrichment, attachForkToLogger, bindStreamingResponseLifecycle, buildTracedOptions, completeIntegratedRequest, createLoggerStorage, createMiddlewareLogger, createStorageForkLifecycle, defineFrameworkIntegration, extendDeferredDrain, getServiceForPath, isStreamingResponse, matchesRoutePattern, mergeRequestLoggerOptions, runWithIntegratedHandle, shouldDeferEmitForResponse, shouldInstrumentPath, toRouteAdapterOptions };
42
- //# sourceMappingURL=index.d.ts.map
41
+ export { type BaseAdapterOptions, type ExtractedRequest, type ForkLifecycle, type FrameworkHandlerOptions, type FrameworkIntegrationHelpers, type FrameworkIntegrationSpec, type FrameworkRequestHandle, type IntegratedCompletionOptions, type MiddlewareLoggerOptions, type MiddlewareLoggerResult, type RouteAdapterOptions, type RouteFilterOptions, type RouteServiceConfig, type StreamCompleteMeta, type TailSamplingContext, applyLoggerEnrichment, attachForkToLogger, bindStreamingResponseLifecycle, buildTracedOptions, completeIntegratedRequest, createLoggerStorage, createMiddlewareLogger, createStorageForkLifecycle, defineFrameworkIntegration, extendDeferredDrain, getServiceForPath, isStreamingResponse, matchesRoutePattern, mergeRequestLoggerOptions, runWithIntegratedHandle, shouldDeferEmitForResponse, shouldInstrumentPath, toRouteAdapterOptions };
@@ -1,4 +1,4 @@
1
- import { a as runWithIntegratedHandle, c as createMiddlewareLogger, d as mergeRequestLoggerOptions, f as shouldInstrumentPath, g as extendDeferredDrain, h as shouldDeferEmitForResponse, i as defineFrameworkIntegration, l as getServiceForPath, m as isStreamingResponse, n as buildTracedOptions, o as toRouteAdapterOptions, p as bindStreamingResponseLifecycle, r as completeIntegratedRequest, s as attachForkToLogger, t as applyLoggerEnrichment, u as matchesRoutePattern } from "../integration-IUpfttGT.js";
1
+ import { a as runWithIntegratedHandle, c as createMiddlewareLogger, d as mergeRequestLoggerOptions, f as shouldInstrumentPath, g as extendDeferredDrain, h as shouldDeferEmitForResponse, i as defineFrameworkIntegration, l as getServiceForPath, m as isStreamingResponse, n as buildTracedOptions, o as toRouteAdapterOptions, p as bindStreamingResponseLifecycle, r as completeIntegratedRequest, s as attachForkToLogger, t as applyLoggerEnrichment, u as matchesRoutePattern } from "../integration-DvibHRzI.js";
2
2
  import { createLoggerStorage, createStorageForkLifecycle } from "./storage.js";
3
3
 
4
4
  export { applyLoggerEnrichment, attachForkToLogger, bindStreamingResponseLifecycle, buildTracedOptions, completeIntegratedRequest, createLoggerStorage, createMiddlewareLogger, createStorageForkLifecycle, defineFrameworkIntegration, extendDeferredDrain, getServiceForPath, isStreamingResponse, matchesRoutePattern, mergeRequestLoggerOptions, runWithIntegratedHandle, shouldDeferEmitForResponse, shouldInstrumentPath, toRouteAdapterOptions };
@@ -31,5 +31,4 @@ function createStorageForkLifecycle(storage) {
31
31
 
32
32
  //#endregion
33
33
  exports.createLoggerStorage = createLoggerStorage;
34
- exports.createStorageForkLifecycle = createStorageForkLifecycle;
35
- //# sourceMappingURL=storage.cjs.map
34
+ exports.createStorageForkLifecycle = createStorageForkLifecycle;
@@ -16,5 +16,4 @@ declare function createLoggerStorage(contextHint: string): {
16
16
  /** Bind forked loggers into the adapter's request-scoped storage. */
17
17
  declare function createStorageForkLifecycle(storage: AsyncLocalStorage<RequestLogger>): ForkLifecycle;
18
18
  //#endregion
19
- export { createLoggerStorage, createStorageForkLifecycle };
20
- //# sourceMappingURL=storage.d.cts.map
19
+ export { createLoggerStorage, createStorageForkLifecycle };
@@ -16,5 +16,4 @@ declare function createLoggerStorage(contextHint: string): {
16
16
  /** Bind forked loggers into the adapter's request-scoped storage. */
17
17
  declare function createStorageForkLifecycle(storage: AsyncLocalStorage<RequestLogger>): ForkLifecycle;
18
18
  //#endregion
19
- export { createLoggerStorage, createStorageForkLifecycle };
20
- //# sourceMappingURL=storage.d.ts.map
19
+ export { createLoggerStorage, createStorageForkLifecycle };
@@ -29,5 +29,4 @@ function createStorageForkLifecycle(storage) {
29
29
  }
30
30
 
31
31
  //#endregion
32
- export { createLoggerStorage, createStorageForkLifecycle };
33
- //# sourceMappingURL=storage.js.map
32
+ export { createLoggerStorage, createStorageForkLifecycle };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autotel-adapters",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "Framework adapters and composable DX helpers for autotel",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -84,8 +84,8 @@
84
84
  "README.md"
85
85
  ],
86
86
  "dependencies": {
87
- "autotel": "6.0.0",
88
- "autotel-edge": "4.0.1"
87
+ "autotel": "6.2.0",
88
+ "autotel-edge": "4.0.2"
89
89
  },
90
90
  "peerDependencies": {
91
91
  "hono": ">=4.12.31",
@@ -120,11 +120,11 @@
120
120
  }
121
121
  },
122
122
  "devDependencies": {
123
- "@types/node": "^26.1.1",
124
- "hono": "^4.12.28",
123
+ "@types/node": "^26.1.2",
124
+ "hono": "^4.12.32",
125
125
  "rimraf": "^6.1.3",
126
126
  "rxjs": "^7.8.2",
127
- "tsdown": "^0.22.12",
127
+ "tsdown": "^0.22.14",
128
128
  "typescript": "^6.0.3",
129
129
  "vitest": "^4.1.10"
130
130
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudflare.cjs","names":["getHeader","createUseLogger","defineFrameworkIntegration","buildTracedOptions","runWithIntegratedHandle"],"sources":["../src/cloudflare.ts"],"sourcesContent":["import {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createUseLogger,\n getHeader,\n type FrameworkHandlerOptions,\n} from './core';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n buildTracedOptions,\n} from './toolkit/integration';\n\nexport interface CloudflareRequestLike {\n method?: string;\n url?: string;\n headers?:\n { get(name: string): string | null } | Record<string, string | undefined>;\n cf?: Record<string, unknown>;\n}\n\nexport interface CloudflareExecutionContextLike {\n waitUntil?: (promise: Promise<unknown>) => void;\n passThroughOnException?: () => void;\n}\n\nexport interface CloudflareHandlerContext<\n TEnv,\n TRequest extends CloudflareRequestLike,\n TContext extends CloudflareExecutionContextLike,\n> {\n request: TRequest;\n env: TEnv;\n executionContext: TContext;\n}\n\nexport interface CloudflareWithAutotelOptions<TEnv = unknown> extends Omit<\n FrameworkHandlerOptions,\n 'spanName'\n> {\n spanName?: string | ((request: CloudflareRequestLike, env: TEnv) => string);\n enrichRequest?: (\n request: CloudflareRequestLike,\n env: TEnv,\n ctx: CloudflareExecutionContextLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst requestLoggers = new WeakMap<object, RequestLogger>();\n\nfunction enrichFromRequest(\n request?: CloudflareRequestLike,\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\n const requestId =\n getHeader(request.headers, 'x-request-id') ??\n getHeader(request.headers, 'cf-ray');\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.id': requestId } : {}),\n ...(request.cf?.country\n ? { 'cloudflare.country': request.cf.country }\n : {}),\n ...(request.cf?.colo ? { 'cloudflare.colo': request.cf.colo } : {}),\n ...(request.cf?.city ? { 'cloudflare.city': request.cf.city } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<CloudflareRequestLike>({\n adapterName: 'cloudflare',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: CloudflareRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n if (request) {\n const existing = requestLoggers.get(request as object);\n if (existing) return existing;\n }\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nfunction resolvePath(request: CloudflareRequestLike): string {\n if (!request.url) return '/';\n try {\n return new URL(request.url).pathname;\n } catch {\n return request.url;\n }\n}\n\nfunction createIntegration<TEnv>() {\n return defineFrameworkIntegration<\n CloudflareHandlerContext<\n TEnv,\n CloudflareRequestLike,\n CloudflareExecutionContextLike\n >\n >({\n name: 'cloudflare',\n extractRequest: ({ request }) => ({\n method: request.method ?? 'GET',\n path: resolvePath(request),\n headers: request.headers,\n requestId:\n getHeader(request.headers, 'x-request-id') ??\n getHeader(request.headers, 'cf-ray'),\n }),\n attachLogger: ({ request }, logger) => {\n requestLoggers.set(request as object, logger);\n },\n extractWaitUntil: ({ executionContext }) => {\n const waitUntil =\n typeof executionContext.waitUntil === 'function'\n ? executionContext.waitUntil.bind(executionContext)\n : undefined;\n return waitUntil;\n },\n });\n}\n\nconst integration = createIntegration<unknown>();\n\nfunction resolveSpanName<TEnv>(\n request: CloudflareRequestLike,\n env: TEnv,\n options?: CloudflareWithAutotelOptions<TEnv>,\n): string {\n if (typeof options?.spanName === 'function') {\n return options.spanName(request, env);\n }\n return options?.spanName ?? `cloudflare.${request.method ?? 'request'}`;\n}\n\nexport function withAutotelFetch<\n TEnv,\n TRequest extends CloudflareRequestLike,\n TContext extends CloudflareExecutionContextLike,\n TReturn,\n>(\n handler: (\n request: TRequest,\n env: TEnv,\n ctx: TContext,\n ) => TReturn | Promise<TReturn>,\n options?: CloudflareWithAutotelOptions<TEnv>,\n): (request: TRequest, env: TEnv, ctx: TContext) => Promise<TReturn> {\n return async (\n request: TRequest,\n env: TEnv,\n executionContext: TContext,\n ): Promise<TReturn> => {\n const ctx = { request, env, executionContext };\n try {\n return await integration.runTraced(\n ctx,\n buildTracedOptions(options, resolveSpanName(request, env, options)),\n async (handle) =>\n runWithIntegratedHandle(handle, options, async () => {\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n options?.enrichRequest?.(request, env, executionContext),\n );\n return handler(request, env, executionContext);\n }),\n );\n } finally {\n requestLoggers.delete(request as object);\n }\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAsDA,MAAM,iCAAiB,IAAI,QAA+B;AAE1D,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;CAGF,MAAM,YACJA,uBAAU,QAAQ,SAAS,cAAc,KACzCA,uBAAU,QAAQ,SAAS,QAAQ;CAErC,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,mBAAmB,UAAU,IAAI,CAAC;EACpD,GAAI,QAAQ,IAAI,UACZ,EAAE,sBAAsB,QAAQ,GAAG,QAAQ,IAC3C,CAAC;EACL,GAAI,QAAQ,IAAI,OAAO,EAAE,mBAAmB,QAAQ,GAAG,KAAK,IAAI,CAAC;EACjE,GAAI,QAAQ,IAAI,OAAO,EAAE,mBAAmB,QAAQ,GAAG,KAAK,IAAI,CAAC;CACnE;AACF;AAEA,MAAM,gBAAgBC,6BAAuC;CAC3D,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,IAAI,SAAS;EACX,MAAM,WAAW,eAAe,IAAI,OAAiB;EACrD,IAAI,UAAU,OAAO;CACvB;CACA,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,SAAS,YAAY,SAAwC;CAC3D,IAAI,CAAC,QAAQ,KAAK,OAAO;CACzB,IAAI;EACF,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC9B,QAAQ;EACN,OAAO,QAAQ;CACjB;AACF;AAEA,SAAS,oBAA0B;CACjC,OAAOC,+CAML;EACA,MAAM;EACN,iBAAiB,EAAE,eAAe;GAChC,QAAQ,QAAQ,UAAU;GAC1B,MAAM,YAAY,OAAO;GACzB,SAAS,QAAQ;GACjB,WACEF,uBAAU,QAAQ,SAAS,cAAc,KACzCA,uBAAU,QAAQ,SAAS,QAAQ;EACvC;EACA,eAAe,EAAE,WAAW,WAAW;GACrC,eAAe,IAAI,SAAmB,MAAM;EAC9C;EACA,mBAAmB,EAAE,uBAAuB;GAK1C,OAHE,OAAO,iBAAiB,cAAc,aAClC,iBAAiB,UAAU,KAAK,gBAAgB,IAChD;EAER;CACF,CAAC;AACH;AAEA,MAAM,cAAc,kBAA2B;AAE/C,SAAS,gBACP,SACA,KACA,SACQ;CACR,IAAI,OAAO,SAAS,aAAa,YAC/B,OAAO,QAAQ,SAAS,SAAS,GAAG;CAEtC,OAAO,SAAS,YAAY,cAAc,QAAQ,UAAU;AAC9D;AAEA,SAAgB,iBAMd,SAKA,SACmE;CACnE,OAAO,OACL,SACA,KACA,qBACqB;EACrB,MAAM,MAAM;GAAE;GAAS;GAAK;EAAiB;EAC7C,IAAI;GACF,OAAO,MAAM,YAAY,UACvB,KACAG,uCAAmB,SAAS,gBAAgB,SAAS,KAAK,OAAO,CAAC,GAClE,OAAO,WACLC,4CAAwB,QAAQ,SAAS,YAAY;IACnD,0CACE,OAAO,QACP,kBAAkB,OAAO,GACzB,SAAS,gBAAgB,SAAS,KAAK,gBAAgB,CACzD;IACA,OAAO,QAAQ,SAAS,KAAK,gBAAgB;GAC/C,CAAC,CACL;EACF,UAAU;GACR,eAAe,OAAO,OAAiB;EACzC;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudflare.d.cts","names":[],"sources":["../src/cloudflare.ts"],"mappings":";;;;UAmBiB;EACf;EACA;EACA;IACI,IAAI;MAAiC;EACzC,KAAK;;UAGU;EACf,aAAa,SAAS;EACtB;;UAGe,yBACf,MACA,iBAAiB,uBACjB,iBAAiB;EAEjB,SAAS;EACT,KAAK;EACL,kBAAkB;;UAGH,6BAA6B,wBAAwB,KACpE;EAGA,sBAAsB,SAAS,uBAAuB,KAAK;EAC3D,iBACE,SAAS,uBACT,KAAK,MACL,KAAK,mCACF;;iBAyCS,UACd,UAAU,uBACV,uBAAuB,uBACtB;iBA4Da,iBACd,MACA,iBAAiB,uBACjB,iBAAiB,gCACjB,SAEA,UACE,SAAS,UACT,KAAK,MACL,KAAK,aACF,UAAU,QAAQ,UACvB,UAAU,6BAA6B,SACrC,SAAS,UAAU,KAAK,MAAM,KAAK,aAAa,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudflare.d.ts","names":[],"sources":["../src/cloudflare.ts"],"mappings":";;;;UAmBiB;EACf;EACA;EACA;IACI,IAAI;MAAiC;EACzC,KAAK;;UAGU;EACf,aAAa,SAAS;EACtB;;UAGe,yBACf,MACA,iBAAiB,uBACjB,iBAAiB;EAEjB,SAAS;EACT,KAAK;EACL,kBAAkB;;UAGH,6BAA6B,wBAAwB,KACpE;EAGA,sBAAsB,SAAS,uBAAuB,KAAK;EAC3D,iBACE,SAAS,uBACT,KAAK,MACL,KAAK,mCACF;;iBAyCS,UACd,UAAU,uBACV,uBAAuB,uBACtB;iBA4Da,iBACd,MACA,iBAAiB,uBACjB,iBAAiB,gCACjB,SAEA,UACE,SAAS,UACT,KAAK,MACL,KAAK,aACF,UAAU,QAAQ,UACvB,UAAU,6BAA6B,SACrC,SAAS,UAAU,KAAK,MAAM,KAAK,aAAa,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudflare.js","names":[],"sources":["../src/cloudflare.ts"],"sourcesContent":["import {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createUseLogger,\n getHeader,\n type FrameworkHandlerOptions,\n} from './core';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n buildTracedOptions,\n} from './toolkit/integration';\n\nexport interface CloudflareRequestLike {\n method?: string;\n url?: string;\n headers?:\n { get(name: string): string | null } | Record<string, string | undefined>;\n cf?: Record<string, unknown>;\n}\n\nexport interface CloudflareExecutionContextLike {\n waitUntil?: (promise: Promise<unknown>) => void;\n passThroughOnException?: () => void;\n}\n\nexport interface CloudflareHandlerContext<\n TEnv,\n TRequest extends CloudflareRequestLike,\n TContext extends CloudflareExecutionContextLike,\n> {\n request: TRequest;\n env: TEnv;\n executionContext: TContext;\n}\n\nexport interface CloudflareWithAutotelOptions<TEnv = unknown> extends Omit<\n FrameworkHandlerOptions,\n 'spanName'\n> {\n spanName?: string | ((request: CloudflareRequestLike, env: TEnv) => string);\n enrichRequest?: (\n request: CloudflareRequestLike,\n env: TEnv,\n ctx: CloudflareExecutionContextLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst requestLoggers = new WeakMap<object, RequestLogger>();\n\nfunction enrichFromRequest(\n request?: CloudflareRequestLike,\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\n const requestId =\n getHeader(request.headers, 'x-request-id') ??\n getHeader(request.headers, 'cf-ray');\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.id': requestId } : {}),\n ...(request.cf?.country\n ? { 'cloudflare.country': request.cf.country }\n : {}),\n ...(request.cf?.colo ? { 'cloudflare.colo': request.cf.colo } : {}),\n ...(request.cf?.city ? { 'cloudflare.city': request.cf.city } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<CloudflareRequestLike>({\n adapterName: 'cloudflare',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: CloudflareRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n if (request) {\n const existing = requestLoggers.get(request as object);\n if (existing) return existing;\n }\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nfunction resolvePath(request: CloudflareRequestLike): string {\n if (!request.url) return '/';\n try {\n return new URL(request.url).pathname;\n } catch {\n return request.url;\n }\n}\n\nfunction createIntegration<TEnv>() {\n return defineFrameworkIntegration<\n CloudflareHandlerContext<\n TEnv,\n CloudflareRequestLike,\n CloudflareExecutionContextLike\n >\n >({\n name: 'cloudflare',\n extractRequest: ({ request }) => ({\n method: request.method ?? 'GET',\n path: resolvePath(request),\n headers: request.headers,\n requestId:\n getHeader(request.headers, 'x-request-id') ??\n getHeader(request.headers, 'cf-ray'),\n }),\n attachLogger: ({ request }, logger) => {\n requestLoggers.set(request as object, logger);\n },\n extractWaitUntil: ({ executionContext }) => {\n const waitUntil =\n typeof executionContext.waitUntil === 'function'\n ? executionContext.waitUntil.bind(executionContext)\n : undefined;\n return waitUntil;\n },\n });\n}\n\nconst integration = createIntegration<unknown>();\n\nfunction resolveSpanName<TEnv>(\n request: CloudflareRequestLike,\n env: TEnv,\n options?: CloudflareWithAutotelOptions<TEnv>,\n): string {\n if (typeof options?.spanName === 'function') {\n return options.spanName(request, env);\n }\n return options?.spanName ?? `cloudflare.${request.method ?? 'request'}`;\n}\n\nexport function withAutotelFetch<\n TEnv,\n TRequest extends CloudflareRequestLike,\n TContext extends CloudflareExecutionContextLike,\n TReturn,\n>(\n handler: (\n request: TRequest,\n env: TEnv,\n ctx: TContext,\n ) => TReturn | Promise<TReturn>,\n options?: CloudflareWithAutotelOptions<TEnv>,\n): (request: TRequest, env: TEnv, ctx: TContext) => Promise<TReturn> {\n return async (\n request: TRequest,\n env: TEnv,\n executionContext: TContext,\n ): Promise<TReturn> => {\n const ctx = { request, env, executionContext };\n try {\n return await integration.runTraced(\n ctx,\n buildTracedOptions(options, resolveSpanName(request, env, options)),\n async (handle) =>\n runWithIntegratedHandle(handle, options, async () => {\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n options?.enrichRequest?.(request, env, executionContext),\n );\n return handler(request, env, executionContext);\n }),\n );\n } finally {\n requestLoggers.delete(request as object);\n }\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;AAsDA,MAAM,iCAAiB,IAAI,QAA+B;AAE1D,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;CAGF,MAAM,YACJ,UAAU,QAAQ,SAAS,cAAc,KACzC,UAAU,QAAQ,SAAS,QAAQ;CAErC,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,mBAAmB,UAAU,IAAI,CAAC;EACpD,GAAI,QAAQ,IAAI,UACZ,EAAE,sBAAsB,QAAQ,GAAG,QAAQ,IAC3C,CAAC;EACL,GAAI,QAAQ,IAAI,OAAO,EAAE,mBAAmB,QAAQ,GAAG,KAAK,IAAI,CAAC;EACjE,GAAI,QAAQ,IAAI,OAAO,EAAE,mBAAmB,QAAQ,GAAG,KAAK,IAAI,CAAC;CACnE;AACF;AAEA,MAAM,gBAAgB,gBAAuC;CAC3D,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,IAAI,SAAS;EACX,MAAM,WAAW,eAAe,IAAI,OAAiB;EACrD,IAAI,UAAU,OAAO;CACvB;CACA,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,SAAS,YAAY,SAAwC;CAC3D,IAAI,CAAC,QAAQ,KAAK,OAAO;CACzB,IAAI;EACF,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC9B,QAAQ;EACN,OAAO,QAAQ;CACjB;AACF;AAEA,SAAS,oBAA0B;CACjC,OAAO,2BAML;EACA,MAAM;EACN,iBAAiB,EAAE,eAAe;GAChC,QAAQ,QAAQ,UAAU;GAC1B,MAAM,YAAY,OAAO;GACzB,SAAS,QAAQ;GACjB,WACE,UAAU,QAAQ,SAAS,cAAc,KACzC,UAAU,QAAQ,SAAS,QAAQ;EACvC;EACA,eAAe,EAAE,WAAW,WAAW;GACrC,eAAe,IAAI,SAAmB,MAAM;EAC9C;EACA,mBAAmB,EAAE,uBAAuB;GAK1C,OAHE,OAAO,iBAAiB,cAAc,aAClC,iBAAiB,UAAU,KAAK,gBAAgB,IAChD;EAER;CACF,CAAC;AACH;AAEA,MAAM,cAAc,kBAA2B;AAE/C,SAAS,gBACP,SACA,KACA,SACQ;CACR,IAAI,OAAO,SAAS,aAAa,YAC/B,OAAO,QAAQ,SAAS,SAAS,GAAG;CAEtC,OAAO,SAAS,YAAY,cAAc,QAAQ,UAAU;AAC9D;AAEA,SAAgB,iBAMd,SAKA,SACmE;CACnE,OAAO,OACL,SACA,KACA,qBACqB;EACrB,MAAM,MAAM;GAAE;GAAS;GAAK;EAAiB;EAC7C,IAAI;GACF,OAAO,MAAM,YAAY,UACvB,KACA,mBAAmB,SAAS,gBAAgB,SAAS,KAAK,OAAO,CAAC,GAClE,OAAO,WACL,wBAAwB,QAAQ,SAAS,YAAY;IACnD,sBACE,OAAO,QACP,kBAAkB,OAAO,GACzB,SAAS,gBAAgB,SAAS,KAAK,gBAAgB,CACzD;IACA,OAAO,QAAQ,SAAS,KAAK,gBAAgB;GAC/C,CAAC,CACL;EACF,UAAU;GACR,eAAe,OAAO,OAAiB;EACzC;CACF;AACF"}
package/dist/core.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.cjs","names":["mergeRequestLoggerOptions"],"sources":["../src/core.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n getRequestLogger,\n type ParsedError,\n type RequestLogger,\n type RequestLoggerOptions,\n type RequestLogSnapshot,\n type DrainPipelineOptions,\n type PipelineDrainFn,\n type StructuredError,\n type StructuredErrorInput,\n withTracing,\n} from 'autotel';\nimport {\n mergeRequestLoggerOptions,\n shouldInstrumentPath,\n type RouteAdapterOptions,\n} from './toolkit/middleware';\nimport {\n toRouteAdapterOptions,\n type FrameworkHandlerOptions,\n type IntegratedCompletionOptions,\n} from './toolkit/integration';\n\nexport { toRouteAdapterOptions };\nexport type {\n RouteAdapterOptions,\n FrameworkHandlerOptions,\n IntegratedCompletionOptions,\n};\nexport type BaseAdapterOptions = RouteAdapterOptions;\n\nexport interface AdapterUseLoggerOptions<TContext> {\n adapterName: string;\n enrich?: (context: TContext) => Record<string, unknown> | undefined;\n}\n\nexport function createUseLogger<TContext = unknown>(\n options: AdapterUseLoggerOptions<TContext>,\n) {\n return function useLogger(\n context?: TContext,\n requestLoggerOptions?: RequestLoggerOptions,\n ): RequestLogger {\n let logger: RequestLogger;\n try {\n logger = getRequestLogger(undefined, requestLoggerOptions);\n } catch {\n throw new Error(\n `[autotel-adapters/${options.adapterName}] No active trace context. ` +\n `Wrap your handler with autotel trace instrumentation before calling useLogger().`,\n );\n }\n\n if (context && options.enrich) {\n const extra = options.enrich(context);\n if (extra && Object.keys(extra).length > 0) {\n logger.set(extra);\n }\n }\n\n return logger;\n };\n}\n\nexport interface RequestRunnerOptions extends RouteAdapterOptions {\n requestLoggerOptions?: RequestLoggerOptions;\n /** HTTP route used for include/exclude filtering. */\n path?: string;\n /** Emit one wide event automatically when the handler settles. Default `true`. */\n autoEmit?: boolean;\n /** Fields merged into the wide event at emit time (e.g. response status). */\n finalize?: () => Record<string, unknown> | undefined;\n}\n\n/**\n * Build a request runner bound to one framework's logger storage. The returned\n * function opens a span, creates a request logger, runs `handler` inside the\n * storage so `useLogger()` resolves it, records thrown errors, and emits one\n * wide event when the handler settles (unless `autoEmit` is `false`).\n */\nexport function createRequestRunner(storage: AsyncLocalStorage<RequestLogger>) {\n return function runRequest<T>(\n spanName: string,\n enrich: (log: RequestLogger) => void,\n handler: () => T | Promise<T>,\n options?: RequestRunnerOptions,\n ): Promise<T> {\n if (options?.path && !shouldInstrumentPath(options.path, options)) {\n return Promise.resolve(handler());\n }\n\n const loggerOptions = mergeRequestLoggerOptions(\n options?.requestLoggerOptions,\n options?.waitUntil,\n );\n\n const wrapped = withTracing({ name: spanName })(\n (ctx) => async (): Promise<T> => {\n const log = getRequestLogger(ctx, loggerOptions);\n enrich(log);\n try {\n return await storage.run(log, () => handler());\n } catch (error) {\n log.error(error instanceof Error ? error : new Error(String(error)));\n throw error;\n } finally {\n if (options?.autoEmit !== false) {\n log.emitNow(options?.finalize?.());\n }\n }\n },\n );\n // The wrapped factory is async, so the call always yields a Promise.\n return wrapped() as Promise<T>;\n };\n}\n\n/**\n * Description of a single adapter config field. `env` is the ordered list of\n * environment variables to fall back to.\n */\nexport interface ConfigField<T> {\n key: keyof T & string;\n env?: string[];\n}\n\nfunction resolveEnv(envKeys?: string[]): string | undefined {\n if (!envKeys) return undefined;\n for (const key of envKeys) {\n const value = process.env[key];\n if (value) return value;\n }\n return undefined;\n}\n\n/**\n * Returns true when at least one env-backed field is not provided via\n * `overrides`, meaning runtime config may still contribute and should be\n * probed to preserve precedence (`overrides > runtime > env`).\n *\n * @example\n * ```ts\n * const FIELDS: ConfigField<MyAdapterConfig>[] = [\n * { key: 'token', env: ['MY_ADAPTER_TOKEN'] },\n * { key: 'endpoint', env: ['MY_ADAPTER_URL'] },\n * ]\n *\n * if (shouldProbeRuntime(FIELDS, overrides)) {\n * runtimeConfig = await loadRuntimeConfig()\n * }\n * ```\n */\nexport function shouldProbeRuntime<T>(\n fields: ConfigField<T>[],\n overrides?: Partial<T>,\n): boolean {\n return fields.some(({ key, env }) => {\n if (!env || env.length === 0) return false;\n if (overrides?.[key] !== undefined) return false;\n return true;\n });\n}\n\n/**\n * Resolve adapter configuration with the standard priority chain:\n *\n * 1. `overrides` passed to the adapter factory\n * 2. `runtimeConfig.autotel.{namespace}.{key}` (if a probe was performed)\n * 3. `runtimeConfig.{namespace}.{key}` (if a probe was performed)\n * 4. `process.env[envKey]` for each env in `field.env`\n *\n * Pass an async `probe` to defer the runtime config lookup so it is only\n * invoked when runtime resolution is needed (i.e. at least one env-backed\n * field is not set by overrides). Adapters that have no probe target may pass\n * `() => Promise.resolve(undefined)`.\n */\nexport async function resolveAdapterConfig<T>(\n namespace: string,\n fields: ConfigField<T>[],\n overrides: Partial<T> | undefined,\n probe: () => Promise<Record<string, any> | undefined>,\n): Promise<Partial<T>> {\n const runtimeConfig = shouldProbeRuntime(fields, overrides)\n ? await probe()\n : undefined;\n const autotelNs = runtimeConfig?.autotel?.[namespace];\n const rootNs = runtimeConfig?.[namespace];\n\n const config: Record<string, unknown> = {};\n for (const { key, env } of fields) {\n config[key] =\n overrides?.[key] ?? autotelNs?.[key] ?? rootNs?.[key] ?? resolveEnv(env);\n }\n\n return config as Partial<T>;\n}\n\nexport type HeadersLike =\n { get(name: string): string | null } | Record<string, string | undefined>;\n\nexport function getHeader(\n headers: HeadersLike | undefined,\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n if ('get' in headers && typeof headers.get === 'function') {\n return headers.get(name) ?? undefined;\n }\n const dictionary = headers as Record<string, string | undefined>;\n const value = dictionary[name] ?? dictionary[name.toLowerCase()];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport type {\n RequestLogger,\n RequestLoggerOptions,\n RequestLogSnapshot,\n ParsedError,\n StructuredError,\n StructuredErrorInput,\n DrainPipelineOptions,\n PipelineDrainFn,\n};\n"],"mappings":";;;;;;AAqCA,SAAgB,gBACd,SACA;CACA,OAAO,SAAS,UACd,SACA,sBACe;EACf,IAAI;EACJ,IAAI;GACF,uCAA0B,QAAW,oBAAoB;EAC3D,QAAQ;GACN,MAAM,IAAI,MACR,qBAAqB,QAAQ,YAAY,4GAE3C;EACF;EAEA,IAAI,WAAW,QAAQ,QAAQ;GAC7B,MAAM,QAAQ,QAAQ,OAAO,OAAO;GACpC,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,GACvC,OAAO,IAAI,KAAK;EAEpB;EAEA,OAAO;CACT;AACF;;;;;;;AAkBA,SAAgB,oBAAoB,SAA2C;CAC7E,OAAO,SAAS,WACd,UACA,QACA,SACA,SACY;EACZ,IAAI,SAAS,QAAQ,wCAAsB,QAAQ,MAAM,OAAO,GAC9D,OAAO,QAAQ,QAAQ,QAAQ,CAAC;EAGlC,MAAM,gBAAgBA,8CACpB,SAAS,sBACT,SAAS,SACX;EAmBA,gCAjB4B,EAAE,MAAM,SAAS,CAAC,CAAC,EAC5C,QAAQ,YAAwB;GAC/B,MAAM,oCAAuB,KAAK,aAAa;GAC/C,OAAO,GAAG;GACV,IAAI;IACF,OAAO,MAAM,QAAQ,IAAI,WAAW,QAAQ,CAAC;GAC/C,SAAS,OAAO;IACd,IAAI,MAAM,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,CAAC;IACnE,MAAM;GACR,UAAU;IACR,IAAI,SAAS,aAAa,OACxB,IAAI,QAAQ,SAAS,WAAW,CAAC;GAErC;EACF,CAGW,CAAC,CAAC;CACjB;AACF;AAWA,SAAS,WAAW,SAAwC;CAC1D,IAAI,CAAC,SAAS,OAAO;CACrB,KAAK,MAAM,OAAO,SAAS;EACzB,MAAM,QAAQ,QAAQ,IAAI;EAC1B,IAAI,OAAO,OAAO;CACpB;AAEF;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBACd,QACA,WACS;CACT,OAAO,OAAO,MAAM,EAAE,KAAK,UAAU;EACnC,IAAI,CAAC,OAAO,IAAI,WAAW,GAAG,OAAO;EACrC,IAAI,YAAY,SAAS,QAAW,OAAO;EAC3C,OAAO;CACT,CAAC;AACH;;;;;;;;;;;;;;AAeA,eAAsB,qBACpB,WACA,QACA,WACA,OACqB;CACrB,MAAM,gBAAgB,mBAAmB,QAAQ,SAAS,IACtD,MAAM,MAAM,IACZ;CACJ,MAAM,YAAY,eAAe,UAAU;CAC3C,MAAM,SAAS,gBAAgB;CAE/B,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,EAAE,KAAK,SAAS,QACzB,OAAO,OACL,YAAY,QAAQ,YAAY,QAAQ,SAAS,QAAQ,WAAW,GAAG;CAG3E,OAAO;AACT;AAKA,SAAgB,UACd,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,IAAI,SAAS,WAAW,OAAO,QAAQ,QAAQ,YAC7C,OAAO,QAAQ,IAAI,IAAI,KAAK;CAE9B,MAAM,aAAa;CACnB,MAAM,QAAQ,WAAW,SAAS,WAAW,KAAK,YAAY;CAC9D,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.d.cts","names":[],"sources":["../src/core.ts"],"mappings":";;;;KA8BY,qBAAqB;UAEhB,wBAAwB;EACvC;EACA,UAAU,SAAS,aAAa;;iBAGlB,gBAAgB,oBAC9B,SAAS,wBAAwB,aAG/B,UAAU,UACV,uBAAuB,yBACtB;UAsBY,6BAA6B;EAC5C,uBAAuB;;EAEvB;;EAEA;;EAEA,iBAAiB;;;;;;;;iBASH,oBAAoB,SAAS,kBAAkB,kBAClC,GACzB,kBACA,SAAS,KAAK,wBACd,eAAe,IAAI,QAAQ,IAC3B,UAAU,yBACT,QAAQ;;;;;UAmCI,YAAY;EAC3B,WAAW;EACX;;;;;;;;;;;;;;;;;;;iBA6Bc,mBAAmB,GACjC,QAAQ,YAAY,MACpB,YAAY,QAAQ;;;;;;;;;;;;;;iBAsBA,qBAAqB,GACzC,mBACA,QAAQ,YAAY,MACpB,WAAW,QAAQ,gBACnB,aAAa,QAAQ,mCACpB,QAAQ,QAAQ;KAgBP;EACR,IAAI;IAAiC;iBAEzB,UACd,SAAS,yBACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.d.ts","names":[],"sources":["../src/core.ts"],"mappings":";;;;KA8BY,qBAAqB;UAEhB,wBAAwB;EACvC;EACA,UAAU,SAAS,aAAa;;iBAGlB,gBAAgB,oBAC9B,SAAS,wBAAwB,aAG/B,UAAU,UACV,uBAAuB,yBACtB;UAsBY,6BAA6B;EAC5C,uBAAuB;;EAEvB;;EAEA;;EAEA,iBAAiB;;;;;;;;iBASH,oBAAoB,SAAS,kBAAkB,kBAClC,GACzB,kBACA,SAAS,KAAK,wBACd,eAAe,IAAI,QAAQ,IAC3B,UAAU,yBACT,QAAQ;;;;;UAmCI,YAAY;EAC3B,WAAW;EACX;;;;;;;;;;;;;;;;;;;iBA6Bc,mBAAmB,GACjC,QAAQ,YAAY,MACpB,YAAY,QAAQ;;;;;;;;;;;;;;iBAsBA,qBAAqB,GACzC,mBACA,QAAQ,YAAY,MACpB,WAAW,QAAQ,gBACnB,aAAa,QAAQ,mCACpB,QAAQ,QAAQ;KAgBP;EACR,IAAI;IAAiC;iBAEzB,UACd,SAAS,yBACT"}
package/dist/core.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n getRequestLogger,\n type ParsedError,\n type RequestLogger,\n type RequestLoggerOptions,\n type RequestLogSnapshot,\n type DrainPipelineOptions,\n type PipelineDrainFn,\n type StructuredError,\n type StructuredErrorInput,\n withTracing,\n} from 'autotel';\nimport {\n mergeRequestLoggerOptions,\n shouldInstrumentPath,\n type RouteAdapterOptions,\n} from './toolkit/middleware';\nimport {\n toRouteAdapterOptions,\n type FrameworkHandlerOptions,\n type IntegratedCompletionOptions,\n} from './toolkit/integration';\n\nexport { toRouteAdapterOptions };\nexport type {\n RouteAdapterOptions,\n FrameworkHandlerOptions,\n IntegratedCompletionOptions,\n};\nexport type BaseAdapterOptions = RouteAdapterOptions;\n\nexport interface AdapterUseLoggerOptions<TContext> {\n adapterName: string;\n enrich?: (context: TContext) => Record<string, unknown> | undefined;\n}\n\nexport function createUseLogger<TContext = unknown>(\n options: AdapterUseLoggerOptions<TContext>,\n) {\n return function useLogger(\n context?: TContext,\n requestLoggerOptions?: RequestLoggerOptions,\n ): RequestLogger {\n let logger: RequestLogger;\n try {\n logger = getRequestLogger(undefined, requestLoggerOptions);\n } catch {\n throw new Error(\n `[autotel-adapters/${options.adapterName}] No active trace context. ` +\n `Wrap your handler with autotel trace instrumentation before calling useLogger().`,\n );\n }\n\n if (context && options.enrich) {\n const extra = options.enrich(context);\n if (extra && Object.keys(extra).length > 0) {\n logger.set(extra);\n }\n }\n\n return logger;\n };\n}\n\nexport interface RequestRunnerOptions extends RouteAdapterOptions {\n requestLoggerOptions?: RequestLoggerOptions;\n /** HTTP route used for include/exclude filtering. */\n path?: string;\n /** Emit one wide event automatically when the handler settles. Default `true`. */\n autoEmit?: boolean;\n /** Fields merged into the wide event at emit time (e.g. response status). */\n finalize?: () => Record<string, unknown> | undefined;\n}\n\n/**\n * Build a request runner bound to one framework's logger storage. The returned\n * function opens a span, creates a request logger, runs `handler` inside the\n * storage so `useLogger()` resolves it, records thrown errors, and emits one\n * wide event when the handler settles (unless `autoEmit` is `false`).\n */\nexport function createRequestRunner(storage: AsyncLocalStorage<RequestLogger>) {\n return function runRequest<T>(\n spanName: string,\n enrich: (log: RequestLogger) => void,\n handler: () => T | Promise<T>,\n options?: RequestRunnerOptions,\n ): Promise<T> {\n if (options?.path && !shouldInstrumentPath(options.path, options)) {\n return Promise.resolve(handler());\n }\n\n const loggerOptions = mergeRequestLoggerOptions(\n options?.requestLoggerOptions,\n options?.waitUntil,\n );\n\n const wrapped = withTracing({ name: spanName })(\n (ctx) => async (): Promise<T> => {\n const log = getRequestLogger(ctx, loggerOptions);\n enrich(log);\n try {\n return await storage.run(log, () => handler());\n } catch (error) {\n log.error(error instanceof Error ? error : new Error(String(error)));\n throw error;\n } finally {\n if (options?.autoEmit !== false) {\n log.emitNow(options?.finalize?.());\n }\n }\n },\n );\n // The wrapped factory is async, so the call always yields a Promise.\n return wrapped() as Promise<T>;\n };\n}\n\n/**\n * Description of a single adapter config field. `env` is the ordered list of\n * environment variables to fall back to.\n */\nexport interface ConfigField<T> {\n key: keyof T & string;\n env?: string[];\n}\n\nfunction resolveEnv(envKeys?: string[]): string | undefined {\n if (!envKeys) return undefined;\n for (const key of envKeys) {\n const value = process.env[key];\n if (value) return value;\n }\n return undefined;\n}\n\n/**\n * Returns true when at least one env-backed field is not provided via\n * `overrides`, meaning runtime config may still contribute and should be\n * probed to preserve precedence (`overrides > runtime > env`).\n *\n * @example\n * ```ts\n * const FIELDS: ConfigField<MyAdapterConfig>[] = [\n * { key: 'token', env: ['MY_ADAPTER_TOKEN'] },\n * { key: 'endpoint', env: ['MY_ADAPTER_URL'] },\n * ]\n *\n * if (shouldProbeRuntime(FIELDS, overrides)) {\n * runtimeConfig = await loadRuntimeConfig()\n * }\n * ```\n */\nexport function shouldProbeRuntime<T>(\n fields: ConfigField<T>[],\n overrides?: Partial<T>,\n): boolean {\n return fields.some(({ key, env }) => {\n if (!env || env.length === 0) return false;\n if (overrides?.[key] !== undefined) return false;\n return true;\n });\n}\n\n/**\n * Resolve adapter configuration with the standard priority chain:\n *\n * 1. `overrides` passed to the adapter factory\n * 2. `runtimeConfig.autotel.{namespace}.{key}` (if a probe was performed)\n * 3. `runtimeConfig.{namespace}.{key}` (if a probe was performed)\n * 4. `process.env[envKey]` for each env in `field.env`\n *\n * Pass an async `probe` to defer the runtime config lookup so it is only\n * invoked when runtime resolution is needed (i.e. at least one env-backed\n * field is not set by overrides). Adapters that have no probe target may pass\n * `() => Promise.resolve(undefined)`.\n */\nexport async function resolveAdapterConfig<T>(\n namespace: string,\n fields: ConfigField<T>[],\n overrides: Partial<T> | undefined,\n probe: () => Promise<Record<string, any> | undefined>,\n): Promise<Partial<T>> {\n const runtimeConfig = shouldProbeRuntime(fields, overrides)\n ? await probe()\n : undefined;\n const autotelNs = runtimeConfig?.autotel?.[namespace];\n const rootNs = runtimeConfig?.[namespace];\n\n const config: Record<string, unknown> = {};\n for (const { key, env } of fields) {\n config[key] =\n overrides?.[key] ?? autotelNs?.[key] ?? rootNs?.[key] ?? resolveEnv(env);\n }\n\n return config as Partial<T>;\n}\n\nexport type HeadersLike =\n { get(name: string): string | null } | Record<string, string | undefined>;\n\nexport function getHeader(\n headers: HeadersLike | undefined,\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n if ('get' in headers && typeof headers.get === 'function') {\n return headers.get(name) ?? undefined;\n }\n const dictionary = headers as Record<string, string | undefined>;\n const value = dictionary[name] ?? dictionary[name.toLowerCase()];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport type {\n RequestLogger,\n RequestLoggerOptions,\n RequestLogSnapshot,\n ParsedError,\n StructuredError,\n StructuredErrorInput,\n DrainPipelineOptions,\n PipelineDrainFn,\n};\n"],"mappings":";;;;AAqCA,SAAgB,gBACd,SACA;CACA,OAAO,SAAS,UACd,SACA,sBACe;EACf,IAAI;EACJ,IAAI;GACF,SAAS,iBAAiB,QAAW,oBAAoB;EAC3D,QAAQ;GACN,MAAM,IAAI,MACR,qBAAqB,QAAQ,YAAY,4GAE3C;EACF;EAEA,IAAI,WAAW,QAAQ,QAAQ;GAC7B,MAAM,QAAQ,QAAQ,OAAO,OAAO;GACpC,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,GACvC,OAAO,IAAI,KAAK;EAEpB;EAEA,OAAO;CACT;AACF;;;;;;;AAkBA,SAAgB,oBAAoB,SAA2C;CAC7E,OAAO,SAAS,WACd,UACA,QACA,SACA,SACY;EACZ,IAAI,SAAS,QAAQ,CAAC,qBAAqB,QAAQ,MAAM,OAAO,GAC9D,OAAO,QAAQ,QAAQ,QAAQ,CAAC;EAGlC,MAAM,gBAAgB,0BACpB,SAAS,sBACT,SAAS,SACX;EAmBA,OAjBgB,YAAY,EAAE,MAAM,SAAS,CAAC,CAAC,EAC5C,QAAQ,YAAwB;GAC/B,MAAM,MAAM,iBAAiB,KAAK,aAAa;GAC/C,OAAO,GAAG;GACV,IAAI;IACF,OAAO,MAAM,QAAQ,IAAI,WAAW,QAAQ,CAAC;GAC/C,SAAS,OAAO;IACd,IAAI,MAAM,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,CAAC;IACnE,MAAM;GACR,UAAU;IACR,IAAI,SAAS,aAAa,OACxB,IAAI,QAAQ,SAAS,WAAW,CAAC;GAErC;EACF,CAGW,CAAC,CAAC;CACjB;AACF;AAWA,SAAS,WAAW,SAAwC;CAC1D,IAAI,CAAC,SAAS,OAAO;CACrB,KAAK,MAAM,OAAO,SAAS;EACzB,MAAM,QAAQ,QAAQ,IAAI;EAC1B,IAAI,OAAO,OAAO;CACpB;AAEF;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBACd,QACA,WACS;CACT,OAAO,OAAO,MAAM,EAAE,KAAK,UAAU;EACnC,IAAI,CAAC,OAAO,IAAI,WAAW,GAAG,OAAO;EACrC,IAAI,YAAY,SAAS,QAAW,OAAO;EAC3C,OAAO;CACT,CAAC;AACH;;;;;;;;;;;;;;AAeA,eAAsB,qBACpB,WACA,QACA,WACA,OACqB;CACrB,MAAM,gBAAgB,mBAAmB,QAAQ,SAAS,IACtD,MAAM,MAAM,IACZ;CACJ,MAAM,YAAY,eAAe,UAAU;CAC3C,MAAM,SAAS,gBAAgB;CAE/B,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,EAAE,KAAK,SAAS,QACzB,OAAO,OACL,YAAY,QAAQ,YAAY,QAAQ,SAAS,QAAQ,WAAW,GAAG;CAG3E,OAAO;AACT;AAKA,SAAgB,UACd,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,IAAI,SAAS,WAAW,OAAO,QAAQ,QAAQ,YAC7C,OAAO,QAAQ,IAAI,IAAI,KAAK;CAE9B,MAAM,aAAa;CACnB,MAAM,QAAQ,WAAW,SAAS,WAAW,KAAK,YAAY;CAC9D,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"elysia.cjs","names":["createLoggerStorage","getHeader","defineFrameworkIntegration","runWithIntegratedHandle","autotel"],"sources":["../src/elysia.ts"],"sourcesContent":["import {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport { getHeader, type FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n} from './toolkit/integration';\n\nexport interface ElysiaContextLike {\n request: Request;\n path: string;\n}\n\nexport interface ElysiaWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n ctx: ElysiaContextLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: elysiaLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Wrap handlers with withAutotelHandler() first.',\n );\n\nfunction enrichFromContext(\n ctx?: ElysiaContextLike,\n): Record<string, unknown> | undefined {\n if (!ctx) return undefined;\n\n const requestId = getHeader(ctx.request.headers, 'x-request-id');\n\n return {\n 'http.request.method': ctx.request.method,\n 'url.full': ctx.request.url,\n 'http.route': ctx.path,\n ...(requestId ? { 'http.request.id': requestId } : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<ElysiaContextLike>({\n name: 'elysia',\n storage: elysiaLoggerStorage,\n extractRequest: (ctx) => ({\n method: ctx.request.method,\n path: ctx.path,\n headers: ctx.request.headers,\n requestId: getHeader(ctx.request.headers, 'x-request-id'),\n }),\n attachLogger: () => {},\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport function withAutotelHandler<T>(\n handler: (ctx: ElysiaContextLike) => T | Promise<T>,\n options: ElysiaWithAutotelOptions = {},\n) {\n return (ctx: ElysiaContextLike) =>\n integration.runTraced(ctx, options, async (handle) => {\n if (handle.skipped) {\n return handle.runWith(() => handler(ctx));\n }\n\n applyLoggerEnrichment(\n handle.logger,\n enrichFromContext(ctx),\n options.enrichRequest?.(ctx),\n );\n\n return runWithIntegratedHandle(handle, options, () => handler(ctx));\n });\n}\n\n/** @deprecated Use {@link withAutotelHandler}. */\nexport const autotel = withAutotelHandler;\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;AAyBA,MAAM,EAAE,SAAS,qBAAqB,WAAW,qBAC/CA,4CACE,iEACF;AAEF,SAAS,kBACP,KACqC;CACrC,IAAI,CAAC,KAAK,OAAO;CAEjB,MAAM,YAAYC,uBAAU,IAAI,QAAQ,SAAS,cAAc;CAE/D,OAAO;EACL,uBAAuB,IAAI,QAAQ;EACnC,YAAY,IAAI,QAAQ;EACxB,cAAc,IAAI;EAClB,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,cAAcC,+CAA8C;CAChE,MAAM;CACN,SAAS;CACT,iBAAiB,SAAS;EACxB,QAAQ,IAAI,QAAQ;EACpB,MAAM,IAAI;EACV,SAAS,IAAI,QAAQ;EACrB,WAAWD,uBAAU,IAAI,QAAQ,SAAS,cAAc;CAC1D;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAgB,YAA2B;CACzC,OAAO,iBAAiB;AAC1B;AAEA,SAAgB,mBACd,SACA,UAAoC,CAAC,GACrC;CACA,QAAQ,QACN,YAAY,UAAU,KAAK,SAAS,OAAO,WAAW;EACpD,IAAI,OAAO,SACT,OAAO,OAAO,cAAc,QAAQ,GAAG,CAAC;EAG1C,0CACE,OAAO,QACP,kBAAkB,GAAG,GACrB,QAAQ,gBAAgB,GAAG,CAC7B;EAEA,OAAOE,4CAAwB,QAAQ,eAAe,QAAQ,GAAG,CAAC;CACpE,CAAC;AACL;;AAGA,MAAaC,YAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"elysia.d.cts","names":[],"sources":["../src/elysia.ts"],"mappings":";;;;UAciB;EACf,SAAS;EACT;;UAGe,iCAAiC;EAChD,iBACE,KAAK,sBACF;;iBAmCS,aAAa;iBAIb,mBAAmB,GACjC,UAAU,KAAK,sBAAsB,IAAI,QAAQ,IACjD,UAAS,4BAED,KAAK,sBAAiB,QAAA;;cAiBnB,gBAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"elysia.d.ts","names":[],"sources":["../src/elysia.ts"],"mappings":";;;;UAciB;EACf,SAAS;EACT;;UAGe,iCAAiC;EAChD,iBACE,KAAK,sBACF;;iBAmCS,aAAa;iBAIb,mBAAmB,GACjC,UAAU,KAAK,sBAAsB,IAAI,QAAQ,IACjD,UAAS,4BAED,KAAK,sBAAiB,QAAA;;cAiBnB,gBAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"elysia.js","names":[],"sources":["../src/elysia.ts"],"sourcesContent":["import {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport { getHeader, type FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n} from './toolkit/integration';\n\nexport interface ElysiaContextLike {\n request: Request;\n path: string;\n}\n\nexport interface ElysiaWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n ctx: ElysiaContextLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: elysiaLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Wrap handlers with withAutotelHandler() first.',\n );\n\nfunction enrichFromContext(\n ctx?: ElysiaContextLike,\n): Record<string, unknown> | undefined {\n if (!ctx) return undefined;\n\n const requestId = getHeader(ctx.request.headers, 'x-request-id');\n\n return {\n 'http.request.method': ctx.request.method,\n 'url.full': ctx.request.url,\n 'http.route': ctx.path,\n ...(requestId ? { 'http.request.id': requestId } : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<ElysiaContextLike>({\n name: 'elysia',\n storage: elysiaLoggerStorage,\n extractRequest: (ctx) => ({\n method: ctx.request.method,\n path: ctx.path,\n headers: ctx.request.headers,\n requestId: getHeader(ctx.request.headers, 'x-request-id'),\n }),\n attachLogger: () => {},\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport function withAutotelHandler<T>(\n handler: (ctx: ElysiaContextLike) => T | Promise<T>,\n options: ElysiaWithAutotelOptions = {},\n) {\n return (ctx: ElysiaContextLike) =>\n integration.runTraced(ctx, options, async (handle) => {\n if (handle.skipped) {\n return handle.runWith(() => handler(ctx));\n }\n\n applyLoggerEnrichment(\n handle.logger,\n enrichFromContext(ctx),\n options.enrichRequest?.(ctx),\n );\n\n return runWithIntegratedHandle(handle, options, () => handler(ctx));\n });\n}\n\n/** @deprecated Use {@link withAutotelHandler}. */\nexport const autotel = withAutotelHandler;\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAyBA,MAAM,EAAE,SAAS,qBAAqB,WAAW,qBAC/C,oBACE,iEACF;AAEF,SAAS,kBACP,KACqC;CACrC,IAAI,CAAC,KAAK,OAAO;CAEjB,MAAM,YAAY,UAAU,IAAI,QAAQ,SAAS,cAAc;CAE/D,OAAO;EACL,uBAAuB,IAAI,QAAQ;EACnC,YAAY,IAAI,QAAQ;EACxB,cAAc,IAAI;EAClB,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,cAAc,2BAA8C;CAChE,MAAM;CACN,SAAS;CACT,iBAAiB,SAAS;EACxB,QAAQ,IAAI,QAAQ;EACpB,MAAM,IAAI;EACV,SAAS,IAAI,QAAQ;EACrB,WAAW,UAAU,IAAI,QAAQ,SAAS,cAAc;CAC1D;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAgB,YAA2B;CACzC,OAAO,iBAAiB;AAC1B;AAEA,SAAgB,mBACd,SACA,UAAoC,CAAC,GACrC;CACA,QAAQ,QACN,YAAY,UAAU,KAAK,SAAS,OAAO,WAAW;EACpD,IAAI,OAAO,SACT,OAAO,OAAO,cAAc,QAAQ,GAAG,CAAC;EAG1C,sBACE,OAAO,QACP,kBAAkB,GAAG,GACrB,QAAQ,gBAAgB,GAAG,CAC7B;EAEA,OAAO,wBAAwB,QAAQ,eAAe,QAAQ,GAAG,CAAC;CACpE,CAAC;AACL;;AAGA,MAAa,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"express.cjs","names":["AsyncLocalStorage","createUseLogger","createRequestRunner","toRouteAdapterOptions"],"sources":["../src/express.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createRequestRunner,\n createUseLogger,\n toRouteAdapterOptions,\n type RouteAdapterOptions,\n} from './core';\n\nexport interface ExpressRequestLike {\n method?: string;\n originalUrl?: string;\n url?: string;\n path?: string;\n route?: { path?: string };\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface ExpressResponseLike {\n statusCode?: number;\n}\n\nexport type ExpressNext = (err?: unknown) => void;\n\nexport interface ExpressWithAutotelOptions extends RouteAdapterOptions {\n spanName?: string | ((request: ExpressRequestLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrichRequest?: (\n request: ExpressRequestLike,\n ) => Record<string, unknown> | undefined;\n autoEmit?: boolean;\n}\n\nconst expressLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nfunction headerValue(\n headers: ExpressRequestLike['headers'],\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n const value = headers[name] ?? headers[name.toLowerCase()];\n if (Array.isArray(value)) return value[0];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction enrichFromRequest(\n request?: ExpressRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const url = request.originalUrl ?? request.url;\n const route = request.route?.path ?? request.path ?? url;\n const requestId = headerValue(request.headers, 'x-request-id');\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(url ? { 'url.full': url } : {}),\n ...(route ? { 'http.route': route } : {}),\n ...(requestId ? { 'http.request.id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<ExpressRequestLike>({\n adapterName: 'express',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: ExpressRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n const stored = expressLoggerStorage.getStore();\n if (stored) return stored;\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nconst runRequest = createRequestRunner(expressLoggerStorage);\n\n/**\n * Wrap an Express route handler. Each request opens a span, gets a\n * request-scoped logger (via `useLogger(req)`), and emits one wide event when\n * the handler settles. Thrown errors are recorded and forwarded to `next`.\n */\nexport function withAutotel<\n TReq extends ExpressRequestLike,\n TRes extends ExpressResponseLike,\n TReturn,\n>(\n handler: (\n req: TReq,\n res: TRes,\n next?: ExpressNext,\n ) => TReturn | Promise<TReturn>,\n options?: ExpressWithAutotelOptions,\n): (req: TReq, res: TRes, next?: ExpressNext) => Promise<TReturn | undefined> {\n return async (\n req: TReq,\n res: TRes,\n next?: ExpressNext,\n ): Promise<TReturn | undefined> => {\n const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(req)\n : (options?.spanName ?? `express.${req.method ?? 'request'}`);\n\n const route =\n req.route?.path ?? req.path ?? req.originalUrl ?? req.url ?? '/';\n\n try {\n return await runRequest<TReturn>(\n spanName,\n (log) => {\n const auto = enrichFromRequest(req);\n if (auto && Object.keys(auto).length > 0) log.set(auto);\n const custom = options?.enrichRequest?.(req);\n if (custom && Object.keys(custom).length > 0) log.set(custom);\n },\n () => handler(req, res, next),\n {\n ...toRouteAdapterOptions(options),\n path: route,\n requestLoggerOptions: options?.requestLoggerOptions,\n autoEmit: options?.autoEmit,\n finalize: () =>\n res.statusCode\n ? { 'http.response.status_code': res.statusCode }\n : undefined,\n },\n );\n } catch (error) {\n if (typeof next === 'function') {\n next(error);\n return undefined;\n }\n throw error;\n }\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;AAuCA,MAAM,uBAAuB,IAAIA,mCAAiC;AAElE,SAAS,YACP,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,MAAM,QAAQ,QAAQ,SAAS,QAAQ,KAAK,YAAY;CACxD,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM;CACvC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,MAAM,MAAM,QAAQ,eAAe,QAAQ;CAC3C,MAAM,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;CACrD,MAAM,YAAY,YAAY,QAAQ,SAAS,cAAc;CAE7D,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;EACjC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,gBAAgBC,6BAAoC;CACxD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,MAAM,SAAS,qBAAqB,SAAS;CAC7C,IAAI,QAAQ,OAAO;CACnB,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,MAAM,aAAaC,iCAAoB,oBAAoB;;;;;;AAO3D,SAAgB,YAKd,SAKA,SAC4E;CAC5E,OAAO,OACL,KACA,KACA,SACiC;EACjC,MAAM,WACJ,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,GAAG,IACnB,SAAS,YAAY,WAAW,IAAI,UAAU;EAErD,MAAM,QACJ,IAAI,OAAO,QAAQ,IAAI,QAAQ,IAAI,eAAe,IAAI,OAAO;EAE/D,IAAI;GACF,OAAO,MAAM,WACX,WACC,QAAQ;IACP,MAAM,OAAO,kBAAkB,GAAG;IAClC,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,IAAI;IACtD,MAAM,SAAS,SAAS,gBAAgB,GAAG;IAC3C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,MAAM;GAC9D,SACM,QAAQ,KAAK,KAAK,IAAI,GAC5B;IACE,GAAGC,0CAAsB,OAAO;IAChC,MAAM;IACN,sBAAsB,SAAS;IAC/B,UAAU,SAAS;IACnB,gBACE,IAAI,aACA,EAAE,6BAA6B,IAAI,WAAW,IAC9C;GACR,CACF;EACF,SAAS,OAAO;GACd,IAAI,OAAO,SAAS,YAAY;IAC9B,KAAK,KAAK;IACV;GACF;GACA,MAAM;EACR;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"express.d.cts","names":[],"sources":["../src/express.ts"],"mappings":";;;;UAeiB;EACf;EACA;EACA;EACA;EACA;IAAU;;EACV,UAAU;;UAGK;EACf;;KAGU,eAAe;UAEV,kCAAkC;EACjD,sBAAsB,SAAS;EAC/B,uBAAuB;EACvB,iBACE,SAAS,uBACN;EACL;;iBAqCc,UACd,UAAU,oBACV,uBAAuB,uBACtB;;;;;;iBAaa,YACd,aAAa,oBACb,aAAa,qBACb,SAEA,UACE,KAAK,MACL,KAAK,MACL,OAAO,gBACJ,UAAU,QAAQ,UACvB,UAAU,6BACR,KAAK,MAAM,KAAK,MAAM,OAAO,gBAAgB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"express.d.ts","names":[],"sources":["../src/express.ts"],"mappings":";;;;UAeiB;EACf;EACA;EACA;EACA;EACA;IAAU;;EACV,UAAU;;UAGK;EACf;;KAGU,eAAe;UAEV,kCAAkC;EACjD,sBAAsB,SAAS;EAC/B,uBAAuB;EACvB,iBACE,SAAS,uBACN;EACL;;iBAqCc,UACd,UAAU,oBACV,uBAAuB,uBACtB;;;;;;iBAaa,YACd,aAAa,oBACb,aAAa,qBACb,SAEA,UACE,KAAK,MACL,KAAK,MACL,OAAO,gBACJ,UAAU,QAAQ,UACvB,UAAU,6BACR,KAAK,MAAM,KAAK,MAAM,OAAO,gBAAgB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"express.js","names":[],"sources":["../src/express.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createRequestRunner,\n createUseLogger,\n toRouteAdapterOptions,\n type RouteAdapterOptions,\n} from './core';\n\nexport interface ExpressRequestLike {\n method?: string;\n originalUrl?: string;\n url?: string;\n path?: string;\n route?: { path?: string };\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface ExpressResponseLike {\n statusCode?: number;\n}\n\nexport type ExpressNext = (err?: unknown) => void;\n\nexport interface ExpressWithAutotelOptions extends RouteAdapterOptions {\n spanName?: string | ((request: ExpressRequestLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrichRequest?: (\n request: ExpressRequestLike,\n ) => Record<string, unknown> | undefined;\n autoEmit?: boolean;\n}\n\nconst expressLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nfunction headerValue(\n headers: ExpressRequestLike['headers'],\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n const value = headers[name] ?? headers[name.toLowerCase()];\n if (Array.isArray(value)) return value[0];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction enrichFromRequest(\n request?: ExpressRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const url = request.originalUrl ?? request.url;\n const route = request.route?.path ?? request.path ?? url;\n const requestId = headerValue(request.headers, 'x-request-id');\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(url ? { 'url.full': url } : {}),\n ...(route ? { 'http.route': route } : {}),\n ...(requestId ? { 'http.request.id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<ExpressRequestLike>({\n adapterName: 'express',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: ExpressRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n const stored = expressLoggerStorage.getStore();\n if (stored) return stored;\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nconst runRequest = createRequestRunner(expressLoggerStorage);\n\n/**\n * Wrap an Express route handler. Each request opens a span, gets a\n * request-scoped logger (via `useLogger(req)`), and emits one wide event when\n * the handler settles. Thrown errors are recorded and forwarded to `next`.\n */\nexport function withAutotel<\n TReq extends ExpressRequestLike,\n TRes extends ExpressResponseLike,\n TReturn,\n>(\n handler: (\n req: TReq,\n res: TRes,\n next?: ExpressNext,\n ) => TReturn | Promise<TReturn>,\n options?: ExpressWithAutotelOptions,\n): (req: TReq, res: TRes, next?: ExpressNext) => Promise<TReturn | undefined> {\n return async (\n req: TReq,\n res: TRes,\n next?: ExpressNext,\n ): Promise<TReturn | undefined> => {\n const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(req)\n : (options?.spanName ?? `express.${req.method ?? 'request'}`);\n\n const route =\n req.route?.path ?? req.path ?? req.originalUrl ?? req.url ?? '/';\n\n try {\n return await runRequest<TReturn>(\n spanName,\n (log) => {\n const auto = enrichFromRequest(req);\n if (auto && Object.keys(auto).length > 0) log.set(auto);\n const custom = options?.enrichRequest?.(req);\n if (custom && Object.keys(custom).length > 0) log.set(custom);\n },\n () => handler(req, res, next),\n {\n ...toRouteAdapterOptions(options),\n path: route,\n requestLoggerOptions: options?.requestLoggerOptions,\n autoEmit: options?.autoEmit,\n finalize: () =>\n res.statusCode\n ? { 'http.response.status_code': res.statusCode }\n : undefined,\n },\n );\n } catch (error) {\n if (typeof next === 'function') {\n next(error);\n return undefined;\n }\n throw error;\n }\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAuCA,MAAM,uBAAuB,IAAI,kBAAiC;AAElE,SAAS,YACP,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,MAAM,QAAQ,QAAQ,SAAS,QAAQ,KAAK,YAAY;CACxD,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM;CACvC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,MAAM,MAAM,QAAQ,eAAe,QAAQ;CAC3C,MAAM,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;CACrD,MAAM,YAAY,YAAY,QAAQ,SAAS,cAAc;CAE7D,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;EACjC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,gBAAgB,gBAAoC;CACxD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,MAAM,SAAS,qBAAqB,SAAS;CAC7C,IAAI,QAAQ,OAAO;CACnB,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,MAAM,aAAa,oBAAoB,oBAAoB;;;;;;AAO3D,SAAgB,YAKd,SAKA,SAC4E;CAC5E,OAAO,OACL,KACA,KACA,SACiC;EACjC,MAAM,WACJ,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,GAAG,IACnB,SAAS,YAAY,WAAW,IAAI,UAAU;EAErD,MAAM,QACJ,IAAI,OAAO,QAAQ,IAAI,QAAQ,IAAI,eAAe,IAAI,OAAO;EAE/D,IAAI;GACF,OAAO,MAAM,WACX,WACC,QAAQ;IACP,MAAM,OAAO,kBAAkB,GAAG;IAClC,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,IAAI;IACtD,MAAM,SAAS,SAAS,gBAAgB,GAAG;IAC3C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,MAAM;GAC9D,SACM,QAAQ,KAAK,KAAK,IAAI,GAC5B;IACE,GAAG,sBAAsB,OAAO;IAChC,MAAM;IACN,sBAAsB,SAAS;IAC/B,UAAU,SAAS;IACnB,gBACE,IAAI,aACA,EAAE,6BAA6B,IAAI,WAAW,IAC9C;GACR,CACF;EACF,SAAS,OAAO;GACd,IAAI,OAAO,SAAS,YAAY;IAC9B,KAAK,KAAK;IACV;GACF;GACA,MAAM;EACR;CACF;AACF"}