autotel-adapters 1.0.0 → 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.
Files changed (102) hide show
  1. package/dist/cloudflare.cjs +1 -1
  2. package/dist/cloudflare.cjs.map +1 -1
  3. package/dist/cloudflare.d.cts +2 -2
  4. package/dist/cloudflare.d.cts.map +1 -1
  5. package/dist/cloudflare.d.ts +2 -2
  6. package/dist/cloudflare.d.ts.map +1 -1
  7. package/dist/cloudflare.js +1 -1
  8. package/dist/cloudflare.js.map +1 -1
  9. package/dist/core.cjs +2 -2
  10. package/dist/core.cjs.map +1 -1
  11. package/dist/core.d.cts +1 -2
  12. package/dist/core.d.cts.map +1 -1
  13. package/dist/core.d.ts +1 -2
  14. package/dist/core.d.ts.map +1 -1
  15. package/dist/core.js +3 -3
  16. package/dist/core.js.map +1 -1
  17. package/dist/elysia.cjs +1 -1
  18. package/dist/elysia.d.cts +2 -2
  19. package/dist/elysia.d.cts.map +1 -1
  20. package/dist/elysia.d.ts +2 -2
  21. package/dist/elysia.d.ts.map +1 -1
  22. package/dist/elysia.js +1 -1
  23. package/dist/express.cjs +1 -1
  24. package/dist/express.cjs.map +1 -1
  25. package/dist/express.d.cts +2 -2
  26. package/dist/express.d.cts.map +1 -1
  27. package/dist/express.d.ts +2 -2
  28. package/dist/express.d.ts.map +1 -1
  29. package/dist/express.js +1 -1
  30. package/dist/express.js.map +1 -1
  31. package/dist/fastify.cjs +1 -1
  32. package/dist/fastify.cjs.map +1 -1
  33. package/dist/fastify.d.cts +2 -2
  34. package/dist/fastify.d.cts.map +1 -1
  35. package/dist/fastify.d.ts +2 -2
  36. package/dist/fastify.d.ts.map +1 -1
  37. package/dist/fastify.js +1 -1
  38. package/dist/fastify.js.map +1 -1
  39. package/dist/hono.cjs +1 -1
  40. package/dist/hono.d.cts +2 -2
  41. package/dist/hono.d.cts.map +1 -1
  42. package/dist/hono.d.ts +2 -2
  43. package/dist/hono.d.ts.map +1 -1
  44. package/dist/hono.js +1 -1
  45. package/dist/index.cjs +1 -1
  46. package/dist/index.d.cts +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.js +1 -1
  49. package/dist/{integration-CaG_l5xr.d.ts → integration-DI-1RuTh.d.cts} +2 -3
  50. package/dist/integration-DI-1RuTh.d.cts.map +1 -0
  51. package/dist/{integration-BRVGyxPG.js → integration-IUpfttGT.js} +3 -3
  52. package/dist/integration-IUpfttGT.js.map +1 -0
  53. package/dist/{integration-Dd8Pi7jc.cjs → integration-guh7BHTF.cjs} +2 -2
  54. package/dist/integration-guh7BHTF.cjs.map +1 -0
  55. package/dist/{integration-7--zN-83.d.cts → integration-rYoX8QLk.d.ts} +2 -3
  56. package/dist/integration-rYoX8QLk.d.ts.map +1 -0
  57. package/dist/nestjs.cjs +1 -1
  58. package/dist/nestjs.d.cts +2 -2
  59. package/dist/nestjs.d.cts.map +1 -1
  60. package/dist/nestjs.d.ts +2 -2
  61. package/dist/nestjs.d.ts.map +1 -1
  62. package/dist/nestjs.js +1 -1
  63. package/dist/next.cjs +1 -1
  64. package/dist/next.cjs.map +1 -1
  65. package/dist/next.d.cts +2 -2
  66. package/dist/next.d.cts.map +1 -1
  67. package/dist/next.d.ts +2 -2
  68. package/dist/next.d.ts.map +1 -1
  69. package/dist/next.js +1 -1
  70. package/dist/next.js.map +1 -1
  71. package/dist/nitro.cjs +1 -1
  72. package/dist/nitro.cjs.map +1 -1
  73. package/dist/nitro.d.cts +2 -2
  74. package/dist/nitro.d.cts.map +1 -1
  75. package/dist/nitro.d.ts +2 -2
  76. package/dist/nitro.d.ts.map +1 -1
  77. package/dist/nitro.js +1 -1
  78. package/dist/nitro.js.map +1 -1
  79. package/dist/sveltekit.cjs +1 -1
  80. package/dist/sveltekit.d.cts +3 -6
  81. package/dist/sveltekit.d.cts.map +1 -1
  82. package/dist/sveltekit.d.ts +3 -6
  83. package/dist/sveltekit.d.ts.map +1 -1
  84. package/dist/sveltekit.js +1 -1
  85. package/dist/tanstack.d.cts.map +1 -1
  86. package/dist/tanstack.d.ts.map +1 -1
  87. package/dist/toolkit/index.cjs +1 -1
  88. package/dist/toolkit/index.d.cts +1 -2
  89. package/dist/toolkit/index.d.cts.map +1 -1
  90. package/dist/toolkit/index.d.ts +1 -2
  91. package/dist/toolkit/index.d.ts.map +1 -1
  92. package/dist/toolkit/index.js +1 -1
  93. package/dist/toolkit/storage.d.cts +0 -1
  94. package/dist/toolkit/storage.d.cts.map +1 -1
  95. package/dist/toolkit/storage.d.ts +0 -1
  96. package/dist/toolkit/storage.d.ts.map +1 -1
  97. package/package.json +9 -9
  98. package/skills/autotel-adapters/SKILL.md +15 -15
  99. package/dist/integration-7--zN-83.d.cts.map +0 -1
  100. package/dist/integration-BRVGyxPG.js.map +0 -1
  101. package/dist/integration-CaG_l5xr.d.ts.map +0 -1
  102. package/dist/integration-Dd8Pi7jc.cjs.map +0 -1
package/dist/nitro.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.js","names":[],"sources":["../src/nitro.ts"],"sourcesContent":["import {\n createDrainPipeline,\n parseError,\n createStructuredError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport { createUseLogger, type FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n buildTracedOptions,\n} from './toolkit/integration';\n\nexport interface NitroEventLike {\n method?: string;\n path?: string;\n context?: Record<string, unknown>;\n}\n\nexport interface NitroWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanName'> {\n spanName?: string | ((event: NitroEventLike) => string);\n enrichRequest?: (event: NitroEventLike) => Record<string, unknown> | undefined;\n}\n\nfunction enrichFromEvent(\n event?: NitroEventLike,\n): Record<string, unknown> | undefined {\n if (!event) return undefined;\n\n return {\n ...(event.method ? { 'http.request.method': event.method } : {}),\n ...(event.path ? { 'http.route': event.path } : {}),\n ...(typeof event.context?.requestId === 'string'\n ? { 'http.request.id': event.context.requestId }\n : {}),\n };\n}\n\nconst { storage: nitroLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Wrap handlers with withAutotelEventHandler() first.',\n );\n\nconst baseUseLogger = createUseLogger<NitroEventLike>({\n adapterName: 'nitro',\n enrich: enrichFromEvent,\n});\n\nexport function useLogger(\n event?: NitroEventLike,\n serviceOrOptions?: string | RequestLoggerOptions,\n): RequestLogger {\n try {\n const logger = storageUseLogger();\n if (typeof serviceOrOptions === 'string' && serviceOrOptions.length > 0) {\n logger.set({ service: serviceOrOptions });\n }\n return logger;\n } catch {\n const logger =\n typeof serviceOrOptions === 'string'\n ? baseUseLogger(event)\n : baseUseLogger(event, serviceOrOptions);\n\n if (typeof serviceOrOptions === 'string' && serviceOrOptions.length > 0) {\n logger.set({ service: serviceOrOptions });\n }\n\n return logger;\n }\n}\n\nconst integration = defineFrameworkIntegration<NitroEventLike>({\n name: 'nitro',\n storage: nitroLoggerStorage,\n extractRequest: (event) => ({\n method: event.method ?? 'GET',\n path: event.path ?? '/',\n requestId:\n typeof event.context?.requestId === 'string'\n ? event.context.requestId\n : undefined,\n }),\n attachLogger: () => {},\n});\n\nfunction resolveSpanName(\n event: NitroEventLike,\n options?: NitroWithAutotelOptions,\n): string {\n if (typeof options?.spanName === 'function') {\n return options.spanName(event);\n }\n return options?.spanName ?? `nitro.${event.method ?? 'request'}`;\n}\n\nexport function withAutotelEventHandler<TEvent extends NitroEventLike, TReturn>(\n handler: (event: TEvent) => TReturn | Promise<TReturn>,\n options?: NitroWithAutotelOptions,\n): (event: TEvent) => Promise<TReturn> {\n return async (event: TEvent): Promise<TReturn> =>\n integration.runTraced(\n event,\n buildTracedOptions(options, resolveSpanName(event, options)),\n async (handle) =>\n runWithIntegratedHandle(handle, options, async () => {\n applyLoggerEnrichment(\n handle.logger,\n enrichFromEvent(event),\n options?.enrichRequest?.(event),\n );\n return handler(event);\n }),\n );\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AA2BA,SAAS,gBACP,OACqC;CACrC,IAAI,CAAC,OAAO,OAAO;CAEnB,OAAO;EACL,GAAI,MAAM,SAAS,EAAE,uBAAuB,MAAM,OAAO,IAAI,CAAC;EAC9D,GAAI,MAAM,OAAO,EAAE,cAAc,MAAM,KAAK,IAAI,CAAC;EACjD,GAAI,OAAO,MAAM,SAAS,cAAc,WACpC,EAAE,mBAAmB,MAAM,QAAQ,UAAU,IAC7C,CAAC;CACP;AACF;AAEA,MAAM,EAAE,SAAS,oBAAoB,WAAW,qBAC9C,oBACE,sEACF;AAEF,MAAM,gBAAgB,gBAAgC;CACpD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,OACA,kBACe;CACf,IAAI;EACF,MAAM,SAAS,iBAAiB;EAChC,IAAI,OAAO,qBAAqB,YAAY,iBAAiB,SAAS,GACpE,OAAO,IAAI,EAAE,SAAS,iBAAiB,CAAC;EAE1C,OAAO;CACT,QAAQ;EACN,MAAM,SACJ,OAAO,qBAAqB,WACxB,cAAc,KAAK,IACnB,cAAc,OAAO,gBAAgB;EAE3C,IAAI,OAAO,qBAAqB,YAAY,iBAAiB,SAAS,GACpE,OAAO,IAAI,EAAE,SAAS,iBAAiB,CAAC;EAG1C,OAAO;CACT;AACF;AAEA,MAAM,cAAc,2BAA2C;CAC7D,MAAM;CACN,SAAS;CACT,iBAAiB,WAAW;EAC1B,QAAQ,MAAM,UAAU;EACxB,MAAM,MAAM,QAAQ;EACpB,WACE,OAAO,MAAM,SAAS,cAAc,WAChC,MAAM,QAAQ,YACd;CACR;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAS,gBACP,OACA,SACQ;CACR,IAAI,OAAO,SAAS,aAAa,YAC/B,OAAO,QAAQ,SAAS,KAAK;CAE/B,OAAO,SAAS,YAAY,SAAS,MAAM,UAAU;AACvD;AAEA,SAAgB,wBACd,SACA,SACqC;CACrC,OAAO,OAAO,UACZ,YAAY,UACV,OACA,mBAAmB,SAAS,gBAAgB,OAAO,OAAO,CAAC,GAC3D,OAAO,WACL,wBAAwB,QAAQ,SAAS,YAAY;EACnD,sBACE,OAAO,QACP,gBAAgB,KAAK,GACrB,SAAS,gBAAgB,KAAK,CAChC;EACA,OAAO,QAAQ,KAAK;CACtB,CAAC,CACL;AACJ"}
1
+ {"version":3,"file":"nitro.js","names":[],"sources":["../src/nitro.ts"],"sourcesContent":["import {\n createDrainPipeline,\n parseError,\n createStructuredError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport { createUseLogger, type FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n buildTracedOptions,\n} from './toolkit/integration';\n\nexport interface NitroEventLike {\n method?: string;\n path?: string;\n context?: Record<string, unknown>;\n}\n\nexport interface NitroWithAutotelOptions extends Omit<\n FrameworkHandlerOptions,\n 'spanName'\n> {\n spanName?: string | ((event: NitroEventLike) => string);\n enrichRequest?: (\n event: NitroEventLike,\n ) => Record<string, unknown> | undefined;\n}\n\nfunction enrichFromEvent(\n event?: NitroEventLike,\n): Record<string, unknown> | undefined {\n if (!event) return undefined;\n\n return {\n ...(event.method ? { 'http.request.method': event.method } : {}),\n ...(event.path ? { 'http.route': event.path } : {}),\n ...(typeof event.context?.requestId === 'string'\n ? { 'http.request.id': event.context.requestId }\n : {}),\n };\n}\n\nconst { storage: nitroLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Wrap handlers with withAutotelEventHandler() first.',\n );\n\nconst baseUseLogger = createUseLogger<NitroEventLike>({\n adapterName: 'nitro',\n enrich: enrichFromEvent,\n});\n\nexport function useLogger(\n event?: NitroEventLike,\n serviceOrOptions?: string | RequestLoggerOptions,\n): RequestLogger {\n try {\n const logger = storageUseLogger();\n if (typeof serviceOrOptions === 'string' && serviceOrOptions.length > 0) {\n logger.set({ service: serviceOrOptions });\n }\n return logger;\n } catch {\n const logger =\n typeof serviceOrOptions === 'string'\n ? baseUseLogger(event)\n : baseUseLogger(event, serviceOrOptions);\n\n if (typeof serviceOrOptions === 'string' && serviceOrOptions.length > 0) {\n logger.set({ service: serviceOrOptions });\n }\n\n return logger;\n }\n}\n\nconst integration = defineFrameworkIntegration<NitroEventLike>({\n name: 'nitro',\n storage: nitroLoggerStorage,\n extractRequest: (event) => ({\n method: event.method ?? 'GET',\n path: event.path ?? '/',\n requestId:\n typeof event.context?.requestId === 'string'\n ? event.context.requestId\n : undefined,\n }),\n attachLogger: () => {},\n});\n\nfunction resolveSpanName(\n event: NitroEventLike,\n options?: NitroWithAutotelOptions,\n): string {\n if (typeof options?.spanName === 'function') {\n return options.spanName(event);\n }\n return options?.spanName ?? `nitro.${event.method ?? 'request'}`;\n}\n\nexport function withAutotelEventHandler<TEvent extends NitroEventLike, TReturn>(\n handler: (event: TEvent) => TReturn | Promise<TReturn>,\n options?: NitroWithAutotelOptions,\n): (event: TEvent) => Promise<TReturn> {\n return async (event: TEvent): Promise<TReturn> =>\n integration.runTraced(\n event,\n buildTracedOptions(options, resolveSpanName(event, options)),\n async (handle) =>\n runWithIntegratedHandle(handle, options, async () => {\n applyLoggerEnrichment(\n handle.logger,\n enrichFromEvent(event),\n options?.enrichRequest?.(event),\n );\n return handler(event);\n }),\n );\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAgCA,SAAS,gBACP,OACqC;CACrC,IAAI,CAAC,OAAO,OAAO;CAEnB,OAAO;EACL,GAAI,MAAM,SAAS,EAAE,uBAAuB,MAAM,OAAO,IAAI,CAAC;EAC9D,GAAI,MAAM,OAAO,EAAE,cAAc,MAAM,KAAK,IAAI,CAAC;EACjD,GAAI,OAAO,MAAM,SAAS,cAAc,WACpC,EAAE,mBAAmB,MAAM,QAAQ,UAAU,IAC7C,CAAC;CACP;AACF;AAEA,MAAM,EAAE,SAAS,oBAAoB,WAAW,qBAC9C,oBACE,sEACF;AAEF,MAAM,gBAAgB,gBAAgC;CACpD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,OACA,kBACe;CACf,IAAI;EACF,MAAM,SAAS,iBAAiB;EAChC,IAAI,OAAO,qBAAqB,YAAY,iBAAiB,SAAS,GACpE,OAAO,IAAI,EAAE,SAAS,iBAAiB,CAAC;EAE1C,OAAO;CACT,QAAQ;EACN,MAAM,SACJ,OAAO,qBAAqB,WACxB,cAAc,KAAK,IACnB,cAAc,OAAO,gBAAgB;EAE3C,IAAI,OAAO,qBAAqB,YAAY,iBAAiB,SAAS,GACpE,OAAO,IAAI,EAAE,SAAS,iBAAiB,CAAC;EAG1C,OAAO;CACT;AACF;AAEA,MAAM,cAAc,2BAA2C;CAC7D,MAAM;CACN,SAAS;CACT,iBAAiB,WAAW;EAC1B,QAAQ,MAAM,UAAU;EACxB,MAAM,MAAM,QAAQ;EACpB,WACE,OAAO,MAAM,SAAS,cAAc,WAChC,MAAM,QAAQ,YACd;CACR;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAS,gBACP,OACA,SACQ;CACR,IAAI,OAAO,SAAS,aAAa,YAC/B,OAAO,QAAQ,SAAS,KAAK;CAE/B,OAAO,SAAS,YAAY,SAAS,MAAM,UAAU;AACvD;AAEA,SAAgB,wBACd,SACA,SACqC;CACrC,OAAO,OAAO,UACZ,YAAY,UACV,OACA,mBAAmB,SAAS,gBAAgB,OAAO,OAAO,CAAC,GAC3D,OAAO,WACL,wBAAwB,QAAQ,SAAS,YAAY;EACnD,sBACE,OAAO,QACP,gBAAgB,KAAK,GACrB,SAAS,gBAAgB,KAAK,CAChC;EACA,OAAO,QAAQ,KAAK;CACtB,CAAC,CACL;AACJ"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_integration = require('./integration-Dd8Pi7jc.cjs');
2
+ const require_integration = require('./integration-guh7BHTF.cjs');
3
3
  const require_toolkit_storage = require('./toolkit/storage.cjs');
4
4
  let autotel = require("autotel");
5
5
 
@@ -1,6 +1,6 @@
1
- import { n as FrameworkHandlerOptions } from "./integration-7--zN-83.cjs";
1
+ import { n as FrameworkHandlerOptions } from "./integration-DI-1RuTh.cjs";
2
+ import "./core.cjs";
2
3
  import { RequestLogger, createDrainPipeline, createStructuredError, parseError } from "autotel";
3
-
4
4
  //#region src/sveltekit.d.ts
5
5
  interface SvelteKitEventLike {
6
6
  request: Request;
@@ -18,10 +18,7 @@ interface SvelteKitWithAutotelOptions extends FrameworkHandlerOptions {
18
18
  enrichRequest?: (event: SvelteKitEventLike) => Record<string, unknown> | undefined;
19
19
  }
20
20
  declare function useLogger(): RequestLogger;
21
- declare function autotelHandle(options?: SvelteKitWithAutotelOptions): ({
22
- event,
23
- resolve
24
- }: SvelteKitHandleInput) => Promise<Response>;
21
+ declare function autotelHandle(options?: SvelteKitWithAutotelOptions): ({ event, resolve }: SvelteKitHandleInput) => Promise<Response>;
25
22
  //#endregion
26
23
  export { SvelteKitEventLike, SvelteKitHandleInput, SvelteKitWithAutotelOptions, autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
27
24
  //# sourceMappingURL=sveltekit.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sveltekit.d.cts","names":[],"sources":["../src/sveltekit.ts"],"mappings":";;;;UAciB,kBAAA;EACf,OAAA,EAAS,OAAA;EACT,GAAA,EAAK,GAAA;EACL,KAAA;IAAU,EAAA;EAAA;EACV,MAAA,GAAS,MAAA;AAAA;AAAA,UAGM,oBAAA;EACf,KAAA,EAAO,kBAAA;EACP,OAAA,GAAU,KAAA,EAAO,kBAAA,KAAuB,QAAA,GAAW,OAAA,CAAQ,QAAA;AAAA;AAAA,UAG5C,2BAAA,SAAoC,uBAAA;EACnD,aAAA,IACE,KAAA,EAAO,kBAAA,KACJ,MAAA;AAAA;AAAA,iBAsCS,SAAA,IAAa,aAAa;AAAA,iBAI1B,aAAA,CAAc,OAAA,GAAS,2BAAA;EACvB,KAAA;EAAA;AAAA,GAAoB,oBAAA,KAAuB,OAAA,CAAQ,QAAA"}
1
+ {"version":3,"file":"sveltekit.d.cts","names":[],"sources":["../src/sveltekit.ts"],"mappings":";;;;UAciB;EACf,SAAS;EACT,KAAK;EACL;IAAU;;EACV,SAAS;;UAGM;EACf,OAAO;EACP,UAAU,OAAO,uBAAuB,WAAW,QAAQ;;UAG5C,oCAAoC;EACnD,iBACE,OAAO,uBACJ;;iBAsCS,aAAa;iBAIb,cAAc,UAAS,iCACvB,OAAA,WAAoB,yBAAuB,QAAQ"}
@@ -1,6 +1,6 @@
1
- import { n as FrameworkHandlerOptions } from "./integration-CaG_l5xr.js";
1
+ import { n as FrameworkHandlerOptions } from "./integration-rYoX8QLk.js";
2
+ import "./core.js";
2
3
  import { RequestLogger, createDrainPipeline, createStructuredError, parseError } from "autotel";
3
-
4
4
  //#region src/sveltekit.d.ts
5
5
  interface SvelteKitEventLike {
6
6
  request: Request;
@@ -18,10 +18,7 @@ interface SvelteKitWithAutotelOptions extends FrameworkHandlerOptions {
18
18
  enrichRequest?: (event: SvelteKitEventLike) => Record<string, unknown> | undefined;
19
19
  }
20
20
  declare function useLogger(): RequestLogger;
21
- declare function autotelHandle(options?: SvelteKitWithAutotelOptions): ({
22
- event,
23
- resolve
24
- }: SvelteKitHandleInput) => Promise<Response>;
21
+ declare function autotelHandle(options?: SvelteKitWithAutotelOptions): ({ event, resolve }: SvelteKitHandleInput) => Promise<Response>;
25
22
  //#endregion
26
23
  export { SvelteKitEventLike, SvelteKitHandleInput, SvelteKitWithAutotelOptions, autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
27
24
  //# sourceMappingURL=sveltekit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sveltekit.d.ts","names":[],"sources":["../src/sveltekit.ts"],"mappings":";;;;UAciB,kBAAA;EACf,OAAA,EAAS,OAAA;EACT,GAAA,EAAK,GAAA;EACL,KAAA;IAAU,EAAA;EAAA;EACV,MAAA,GAAS,MAAA;AAAA;AAAA,UAGM,oBAAA;EACf,KAAA,EAAO,kBAAA;EACP,OAAA,GAAU,KAAA,EAAO,kBAAA,KAAuB,QAAA,GAAW,OAAA,CAAQ,QAAA;AAAA;AAAA,UAG5C,2BAAA,SAAoC,uBAAA;EACnD,aAAA,IACE,KAAA,EAAO,kBAAA,KACJ,MAAA;AAAA;AAAA,iBAsCS,SAAA,IAAa,aAAa;AAAA,iBAI1B,aAAA,CAAc,OAAA,GAAS,2BAAA;EACvB,KAAA;EAAA;AAAA,GAAoB,oBAAA,KAAuB,OAAA,CAAQ,QAAA"}
1
+ {"version":3,"file":"sveltekit.d.ts","names":[],"sources":["../src/sveltekit.ts"],"mappings":";;;;UAciB;EACf,SAAS;EACT,KAAK;EACL;IAAU;;EACV,SAAS;;UAGM;EACf,OAAO;EACP,UAAU,OAAO,uBAAuB,WAAW,QAAQ;;UAG5C,oCAAoC;EACnD,iBACE,OAAO,uBACJ;;iBAsCS,aAAa;iBAIb,cAAc,UAAS,iCACvB,OAAA,WAAoB,yBAAuB,QAAQ"}
package/dist/sveltekit.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, t as applyLoggerEnrichment } from "./integration-BRVGyxPG.js";
1
+ import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, t as applyLoggerEnrichment } from "./integration-IUpfttGT.js";
2
2
  import { createLoggerStorage } from "./toolkit/storage.js";
3
3
  import { createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"tanstack.d.cts","names":[],"sources":["../src/tanstack.ts"],"mappings":";cAEa,SAAA,GAAS,OAAA"}
1
+ {"version":3,"file":"tanstack.d.cts","names":[],"sources":["../src/tanstack.ts"],"mappings":";cAEa,YAAS;EACT;EACF;eAOT,yCAAA,2CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"tanstack.d.ts","names":[],"sources":["../src/tanstack.ts"],"mappings":";cAEa,SAAA,GAAS,OAAA"}
1
+ {"version":3,"file":"tanstack.d.ts","names":[],"sources":["../src/tanstack.ts"],"mappings":";cAEa,YAAS;EACT;EACF;eAOT,yCAAA,2CAAA"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_integration = require('../integration-Dd8Pi7jc.cjs');
2
+ const require_integration = require('../integration-guh7BHTF.cjs');
3
3
  const require_toolkit_storage = require('./storage.cjs');
4
4
  let autotel_edge = require("autotel-edge");
5
5
 
@@ -1,7 +1,6 @@
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-7--zN-83.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-DI-1RuTh.cjs";
2
2
  import { createLoggerStorage, createStorageForkLifecycle } from "./storage.cjs";
3
3
  import { ForkLifecycle as ForkLifecycle$1, RequestLogger } from "autotel";
4
-
5
4
  //#region src/toolkit/deferred-drain.d.ts
6
5
  /**
7
6
  * Extend drain lifetime on serverless runtimes without blocking the HTTP response.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/toolkit/deferred-drain.ts","../../src/toolkit/fork.ts","../../src/toolkit/stream-response.ts"],"mappings":";;;;;;;;;;AASA;;;;iBAAgB,mBAAA,CACd,YAAA,EAAc,OAAA,WACd,SAAA,IAAa,OAAA,EAAS,OAAO;;;;;;;iBCLf,kBAAA,CACd,MAAA,EAAQ,aAAA,EACR,SAAA,EAAW,eAAa;;;UCRT,kBAAA;EACf,MAAA;EACA,KAAA,GAAQ,KAAK;AAAA;AAAA,iBAGC,mBAAA,CAAoB,QAAkB,EAAR,QAAQ;AFItD;;;;;AAAA,iBEKgB,0BAAA,CAA2B,QAAkB,EAAR,QAAQ;;;;;iBA0E7C,8BAAA,CACd,QAAA,EAAU,QAAA,EACV,UAAA,GAAa,IAAA,EAAM,kBAAA,YAA8B,OAAA,SAChD,QAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/toolkit/deferred-drain.ts","../../src/toolkit/fork.ts","../../src/toolkit/stream-response.ts"],"mappings":";;;;;;;;;;;;;iBASgB,oBACd,cAAc,kBACd,aAAa,SAAS;;;;;;;iBCLR,mBACd,QAAQ,eACR,WAAW;;;UCRI;EACf;EACA,QAAQ;;iBAGM,oBAAoB,UAAU;;;;;;iBAS9B,2BAA2B,UAAU;;;;;iBAiFrC,+BACd,UAAU,UACV,aAAa,MAAM,8BAA8B,gBAChD"}
@@ -1,7 +1,6 @@
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-CaG_l5xr.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-rYoX8QLk.js";
2
2
  import { createLoggerStorage, createStorageForkLifecycle } from "./storage.js";
3
3
  import { ForkLifecycle as ForkLifecycle$1, RequestLogger } from "autotel";
4
-
5
4
  //#region src/toolkit/deferred-drain.d.ts
6
5
  /**
7
6
  * Extend drain lifetime on serverless runtimes without blocking the HTTP response.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/toolkit/deferred-drain.ts","../../src/toolkit/fork.ts","../../src/toolkit/stream-response.ts"],"mappings":";;;;;;;;;;AASA;;;;iBAAgB,mBAAA,CACd,YAAA,EAAc,OAAA,WACd,SAAA,IAAa,OAAA,EAAS,OAAO;;;;;;;iBCLf,kBAAA,CACd,MAAA,EAAQ,aAAA,EACR,SAAA,EAAW,eAAa;;;UCRT,kBAAA;EACf,MAAA;EACA,KAAA,GAAQ,KAAK;AAAA;AAAA,iBAGC,mBAAA,CAAoB,QAAkB,EAAR,QAAQ;AFItD;;;;;AAAA,iBEKgB,0BAAA,CAA2B,QAAkB,EAAR,QAAQ;;;;;iBA0E7C,8BAAA,CACd,QAAA,EAAU,QAAA,EACV,UAAA,GAAa,IAAA,EAAM,kBAAA,YAA8B,OAAA,SAChD,QAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/toolkit/deferred-drain.ts","../../src/toolkit/fork.ts","../../src/toolkit/stream-response.ts"],"mappings":";;;;;;;;;;;;;iBASgB,oBACd,cAAc,kBACd,aAAa,SAAS;;;;;;;iBCLR,mBACd,QAAQ,eACR,WAAW;;;UCRI;EACf;EACA,QAAQ;;iBAGM,oBAAoB,UAAU;;;;;;iBAS9B,2BAA2B,UAAU;;;;;iBAiFrC,+BACd,UAAU,UACV,aAAa,MAAM,8BAA8B,gBAChD"}
@@ -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-BRVGyxPG.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-IUpfttGT.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 };
@@ -1,6 +1,5 @@
1
1
  import { ForkLifecycle, RequestLogger } from "autotel";
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
-
4
3
  //#region src/toolkit/storage.d.ts
5
4
  /**
6
5
  * Create a request-scoped `AsyncLocalStorage` and matching `useLogger`
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.cts","names":[],"sources":["../../src/toolkit/storage.ts"],"mappings":";;;;;;AAWA;;;;;;iBAAgB,mBAAA,CAAoB,WAAA;;mBAGZ,aAAA;AAAA;;iBAcR,0BAAA,CACd,OAAA,EAAS,iBAAA,CAAkB,aAAA,IAC1B,aAAA"}
1
+ {"version":3,"file":"storage.d.cts","names":[],"sources":["../../src/toolkit/storage.ts"],"mappings":";;;;;;;;;;;iBAWgB,oBAAoB;;EAGZ,iBAAA;;;iBAcR,2BACd,SAAS,kBAAkB,iBAC1B"}
@@ -1,6 +1,5 @@
1
1
  import { ForkLifecycle, RequestLogger } from "autotel";
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
-
4
3
  //#region src/toolkit/storage.d.ts
5
4
  /**
6
5
  * Create a request-scoped `AsyncLocalStorage` and matching `useLogger`
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","names":[],"sources":["../../src/toolkit/storage.ts"],"mappings":";;;;;;AAWA;;;;;;iBAAgB,mBAAA,CAAoB,WAAA;;mBAGZ,aAAA;AAAA;;iBAcR,0BAAA,CACd,OAAA,EAAS,iBAAA,CAAkB,aAAA,IAC1B,aAAA"}
1
+ {"version":3,"file":"storage.d.ts","names":[],"sources":["../../src/toolkit/storage.ts"],"mappings":";;;;;;;;;;;iBAWgB,oBAAoB;;EAGZ,iBAAA;;;iBAcR,2BACd,SAAS,kBAAkB,iBAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autotel-adapters",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "Framework adapters and composable DX helpers for autotel",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -85,17 +85,17 @@
85
85
  "skills"
86
86
  ],
87
87
  "dependencies": {
88
- "autotel": "4.3.0",
89
- "autotel-edge": "3.17.2"
88
+ "autotel": "5.0.0",
89
+ "autotel-edge": "4.0.0"
90
90
  },
91
91
  "peerDependencies": {
92
- "hono": ">=4.12.28",
93
- "@tanstack/react-start": "^1.168.27",
94
- "@tanstack/solid-start": "^1.168.27",
92
+ "hono": ">=4.12.31",
93
+ "@tanstack/react-start": "^1.168.32",
94
+ "@tanstack/solid-start": "^1.168.32",
95
95
  "next": ">=16.2.10",
96
96
  "h3": "^2.0.0",
97
97
  "nitropack": "^2.13.4",
98
- "rxjs": ">=7.0.0"
98
+ "rxjs": ">=7.8.2"
99
99
  },
100
100
  "peerDependenciesMeta": {
101
101
  "rxjs": {
@@ -121,11 +121,11 @@
121
121
  }
122
122
  },
123
123
  "devDependencies": {
124
- "@types/node": "^26.1.0",
124
+ "@types/node": "^26.1.1",
125
125
  "hono": "^4.12.28",
126
126
  "rimraf": "^6.1.3",
127
127
  "rxjs": "^7.8.2",
128
- "tsdown": "^0.22.3",
128
+ "tsdown": "^0.22.12",
129
129
  "typescript": "^6.0.3",
130
130
  "vitest": "^4.1.10"
131
131
  },
@@ -12,10 +12,10 @@ Framework-specific wrappers around autotel's core tracing primitives. Each adapt
12
12
  - A `useLogger()` function that retrieves the logger from within the handler
13
13
  - Direct re-exports of the utilities `parseError`, `createStructuredError`, and `createDrainPipeline`
14
14
 
15
- Options are passed per call site (e.g. `withAutotel(handler, options)`) — there are no
15
+ Options are passed per call site (e.g. `withAutotel(handler, options)`). There are no
16
16
  `create*Adapter` factories or `*Toolkit` bundles.
17
17
 
18
- All adapters use `AsyncLocalStorage` (or a `WeakMap` for Cloudflare) internally so logger access is implicit — you never pass a logger through call chains manually.
18
+ All adapters use `AsyncLocalStorage` (or a `WeakMap` for Cloudflare) internally so logger access is implicit. You never pass a logger through call chains manually.
19
19
 
20
20
  ## Setup
21
21
 
@@ -35,7 +35,7 @@ pnpm add hono # Hono
35
35
 
36
36
  Import from the subpath `autotel-adapters/next` (or from the barrel `autotel-adapters`).
37
37
 
38
- **Option A — per-handler wrap:**
38
+ **Option A, per-handler wrap:**
39
39
 
40
40
  ```typescript
41
41
  import { withAutotel, useLogger } from 'autotel-adapters/next';
@@ -47,7 +47,7 @@ export const GET = withAutotel(async (request) => {
47
47
  });
48
48
  ```
49
49
 
50
- **Option B — share defaults by passing options at each wrap:**
50
+ **Option B, share defaults by passing options at each wrap:**
51
51
 
52
52
  ```typescript
53
53
  // lib/autotel.ts
@@ -74,7 +74,7 @@ export default defineEventHandler(
74
74
  const log = useLogger(event);
75
75
  log.info('handling event');
76
76
  return { ok: true };
77
- })
77
+ }),
78
78
  );
79
79
  ```
80
80
 
@@ -131,12 +131,12 @@ log.info('handling request');
131
131
  Each subpath re-exports `parseError`, `createStructuredError`, and
132
132
  `createDrainPipeline` directly (they also live in `autotel`):
133
133
 
134
- | Export | Description |
135
- |---|---|
136
- | `useLogger(ctx?, opts?)` | Get the request-scoped `RequestLogger` |
137
- | `parseError(error)` | Normalise any thrown value into `ParsedError` |
134
+ | Export | Description |
135
+ | ------------------------------ | --------------------------------------------------------- |
136
+ | `useLogger(ctx?, opts?)` | Get the request-scoped `RequestLogger` |
137
+ | `parseError(error)` | Normalise any thrown value into `ParsedError` |
138
138
  | `createStructuredError(input)` | Build a `StructuredError` for consistent API error shapes |
139
- | `createDrainPipeline(opts?)` | Create a batching drain pipeline |
139
+ | `createDrainPipeline(opts?)` | Create a batching drain pipeline |
140
140
 
141
141
  ### Custom adapter (createUseLogger)
142
142
 
@@ -151,7 +151,7 @@ const useLogger = createUseLogger<MyContext>({
151
151
 
152
152
  ## Common Mistakes
153
153
 
154
- ### HIGH — Calling useLogger outside a traced handler
154
+ ### HIGH: Calling useLogger outside a traced handler
155
155
 
156
156
  ```typescript
157
157
  // WRONG: no active trace context
@@ -164,13 +164,13 @@ export async function myFunction() {
164
164
  // CORRECT: always call useLogger inside a handler wrapped with withAutotel / withAutotelEventHandler
165
165
  export const GET = withAutotel(async (request) => {
166
166
  const log = useLogger(request); // ok — trace context is active
167
- await myFunction(log); // pass the logger down if needed
167
+ await myFunction(log); // pass the logger down if needed
168
168
  });
169
169
  ```
170
170
 
171
171
  `useLogger` looks up an `AsyncLocalStorage` store populated by the handler wrapper. Calling it outside that wrapper throws.
172
172
 
173
- ### HIGH — Importing from wrong subpath
173
+ ### HIGH: Importing from wrong subpath
174
174
 
175
175
  ```typescript
176
176
  // WRONG
@@ -184,7 +184,7 @@ import { useLogger } from 'autotel-adapters/next';
184
184
  import { withAutotelEventHandler } from 'autotel-adapters/nitro';
185
185
  ```
186
186
 
187
- ### MEDIUM — Skipping the request argument in Next.js useLogger
187
+ ### MEDIUM: Skipping the request argument in Next.js useLogger
188
188
 
189
189
  ```typescript
190
190
  // WRONG: loses auto-enrichment (method, url, route, requestId)
@@ -198,7 +198,7 @@ const log = useLogger(request);
198
198
 
199
199
  The request argument is optional only when you are certain the `AsyncLocalStorage` store is already populated (i.e., called from code deeply nested inside a `withAutotel`-wrapped handler).
200
200
 
201
- ### MEDIUM — Not passing request to useLogger on Cloudflare
201
+ ### MEDIUM: Not passing request to useLogger on Cloudflare
202
202
 
203
203
  In Cloudflare Workers, the logger is stored per-request in a `WeakMap`. If you call `useLogger()` without the request object, you always get a new logger with no stored enrichment.
204
204
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration-7--zN-83.d.cts","names":[],"sources":["../src/toolkit/middleware.ts","../src/toolkit/integration.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration-BRVGyxPG.js","names":[],"sources":["../src/toolkit/deferred-drain.ts","../src/toolkit/stream-response.ts","../src/toolkit/middleware.ts","../src/toolkit/fork.ts","../src/toolkit/integration.ts"],"sourcesContent":["/**\n * Extend drain lifetime on serverless runtimes without blocking the HTTP response.\n *\n * The drain always runs in the background (its rejection is logged, never\n * thrown). When `waitUntil` is provided, the promise is also handed to the\n * platform so the isolate stays alive until the drain settles. When it is\n * omitted there is no keep-alive guarantee: on a freezing runtime the drain may\n * not finish, so callers that need delivery must supply `waitUntil`.\n */\nexport function extendDeferredDrain(\n drainPromise: Promise<unknown>,\n waitUntil?: (promise: Promise<unknown>) => void,\n): void {\n void drainPromise.catch((err) => {\n console.error('[autotel-adapters] background drain failed:', err);\n });\n if (typeof waitUntil === 'function') {\n waitUntil(drainPromise);\n }\n}\n","export interface StreamCompleteMeta {\n status: number;\n error?: Error;\n}\n\nexport function isStreamingResponse(response: Response): boolean {\n return response.body !== null;\n}\n\n/**\n * Whether framework integrations should defer wide-event emit until the response\n * body finishes. Static string/JSON bodies are excluded even though they use a\n * ReadableStream under the hood in the Fetch API.\n */\nexport function shouldDeferEmitForResponse(response: Response): boolean {\n if (!response.body) return false;\n\n const contentType = (response.headers.get('content-type') ?? '').toLowerCase();\n\n if (contentType.includes('text/event-stream')) return true;\n if (contentType.includes('application/x-ndjson')) return true;\n if (response.headers.has('x-vercel-ai-ui-message-stream')) return true;\n if (response.headers.get('transfer-encoding')?.toLowerCase().includes('chunked')) {\n return true;\n }\n\n return false;\n}\n\nfunction toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\n\nfunction createObservedBody(\n body: ReadableStream<Uint8Array>,\n onDone: () => void | Promise<void>,\n onError: (error: unknown) => void | Promise<void>,\n): ReadableStream<Uint8Array> | null {\n if (body.locked) {\n void Promise.resolve(onError(new TypeError('stream is already locked'))).catch(\n (err: unknown) => {\n console.error('[autotel-adapters] stream error handling failed:', err);\n },\n );\n return null;\n }\n\n const reader = body.getReader();\n let settled = false;\n\n const settle = (fn: () => void | Promise<void>) => {\n if (settled) return;\n settled = true;\n void Promise.resolve(fn()).catch((err: unknown) => {\n console.error('[autotel-adapters] stream completion handling failed:', err);\n });\n };\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n settle(onDone);\n controller.close();\n return;\n }\n controller.enqueue(value);\n } catch (err) {\n settle(() => onError(err));\n controller.error(err);\n }\n },\n\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } finally {\n settle(onDone);\n }\n },\n });\n}\n\n/**\n * Observe a streaming Response body and invoke `onComplete` once when the body\n * closes, errors, or is cancelled.\n */\nexport function bindStreamingResponseLifecycle(\n response: Response,\n onComplete: (meta: StreamCompleteMeta) => void | Promise<void>,\n): Response {\n if (!response.body) {\n void Promise.resolve(onComplete({ status: response.status })).catch(\n (err: unknown) => {\n console.error('[autotel-adapters] stream completion handling failed:', err);\n },\n );\n return response;\n }\n\n const body = createObservedBody(\n response.body,\n () => onComplete({ status: response.status }),\n (err) => onComplete({ status: response.status, error: toError(err) }),\n );\n if (!body) return response;\n\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n","import type {\n ForkLifecycle,\n RequestLogger,\n RequestLoggerOptions,\n RequestLogSnapshot,\n} from 'autotel';\nimport { createNoopRequestLogger } from 'autotel';\nimport type { RouteFilterOptions, RouteServiceConfig } from 'autotel-edge';\nimport {\n getServiceForPath,\n matchesRoutePattern,\n shouldInstrumentPath,\n} from 'autotel-edge';\nimport { extendDeferredDrain } from './deferred-drain';\nimport {\n bindStreamingResponseLifecycle,\n shouldDeferEmitForResponse,\n} from './stream-response';\n\nexport type Awaitable<T> = T | Promise<T>;\n\nexport type { RouteFilterOptions, RouteServiceConfig };\nexport { getServiceForPath, matchesRoutePattern, shouldInstrumentPath };\n\nexport interface RouteAdapterOptions {\n include?: string[];\n exclude?: string[];\n routes?: Record<string, RouteServiceConfig>;\n waitUntil?: (promise: Promise<unknown>) => void;\n keep?: (ctx: TailSamplingContext) => Awaitable<void>;\n requestLoggerOptions?: RequestLoggerOptions;\n}\n\n/** @deprecated Use {@link RouteAdapterOptions}. */\nexport type BaseAdapterOptions = RouteAdapterOptions;\n\nexport interface TailSamplingContext {\n status?: number;\n durationMs: number;\n path: string;\n method: string;\n context: Record<string, unknown>;\n shouldKeep: boolean;\n}\n\nexport interface MiddlewareLoggerOptions extends RouteAdapterOptions {\n onFinish?: (ctx: {\n logger: RequestLogger;\n method: string;\n path: string;\n status?: number;\n durationMs: number;\n }) => Awaitable<void>;\n method: string;\n path: string;\n requestId?: string;\n}\n\nexport interface MiddlewareLoggerResult {\n logger: RequestLogger;\n finish: (opts?: {\n status?: number;\n error?: Error;\n overrides?: Record<string, unknown>;\n }) => Promise<RequestLogSnapshot | null>;\n finishResponse: (\n response: Response,\n opts?: { status?: number; overrides?: Record<string, unknown> },\n ) => Promise<Response>;\n skipped: boolean;\n}\n\nconst noopResult: MiddlewareLoggerResult = {\n logger: createNoopRequestLogger(),\n finish: () => Promise.resolve(null),\n finishResponse: (response) => Promise.resolve(response),\n skipped: true,\n};\n\nexport function mergeRequestLoggerOptions(\n base: RequestLoggerOptions | undefined,\n waitUntil?: (promise: Promise<unknown>) => void,\n): RequestLoggerOptions | undefined {\n if (!waitUntil) return base;\n\n const userOnEmit = base?.onEmit;\n return {\n ...base,\n onEmit: (snapshot) => {\n const drain = userOnEmit\n ? Promise.resolve(userOnEmit(snapshot))\n : Promise.resolve();\n extendDeferredDrain(drain, waitUntil);\n },\n };\n}\n\nasync function performFinish(\n logger: RequestLogger,\n options: MiddlewareLoggerOptions,\n startedAt: number,\n opts?: {\n status?: number;\n error?: Error;\n overrides?: Record<string, unknown>;\n },\n): Promise<RequestLogSnapshot | null> {\n const { status, error, overrides } = opts ?? {};\n\n if (error) {\n logger.error(error);\n logger.set({\n 'http.response.status_code': status ?? 500,\n error_message: error.message,\n });\n } else if (status !== undefined) {\n logger.set({ 'http.response.status_code': status });\n }\n\n const durationMs = Date.now() - startedAt;\n logger.set({ duration_ms: durationMs });\n\n const tailCtx: TailSamplingContext = {\n status:\n status ??\n (logger.getContext()['http.response.status_code'] as number | undefined),\n durationMs,\n path: options.path,\n method: options.method,\n context: logger.getContext(),\n shouldKeep: false,\n };\n\n if (options.keep) {\n await options.keep(tailCtx);\n }\n\n if (options.onFinish) {\n try {\n await options.onFinish({\n logger,\n method: options.method,\n path: options.path,\n status: tailCtx.status,\n durationMs,\n });\n } catch (err) {\n console.error('[autotel-adapters] onFinish failed:', err);\n }\n }\n\n const mergedOverrides = {\n ...(overrides ?? {}),\n ...(tailCtx.shouldKeep ? { 'autotel.sampling.tail.keep': true } : {}),\n };\n\n return logger.emitNow(\n Object.keys(mergedOverrides).length > 0 ? mergedOverrides : undefined,\n );\n}\n\n/**\n * Create a request logger handle for use inside an active autotel trace span.\n * Call `finish()` or `finishResponse()` when the request completes.\n */\nexport function createMiddlewareLogger(\n logger: RequestLogger,\n options: MiddlewareLoggerOptions,\n): MiddlewareLoggerResult {\n if (!shouldInstrumentPath(options.path, options)) {\n return noopResult;\n }\n\n const routeService = getServiceForPath(options.path, options.routes);\n if (routeService) {\n logger.set({ service: routeService });\n }\n\n if (options.requestId) {\n logger.set({ 'http.request.id': options.requestId });\n }\n\n const startedAt = Date.now();\n\n return {\n logger,\n skipped: false,\n finish: (opts) => performFinish(logger, options, startedAt, opts),\n finishResponse: async (response, opts) => {\n const status = opts?.status ?? response.status;\n if (!shouldDeferEmitForResponse(response)) {\n await performFinish(logger, options, startedAt, {\n status,\n overrides: opts?.overrides,\n });\n return response;\n }\n\n return bindStreamingResponseLifecycle(response, async (meta) => {\n await performFinish(logger, options, startedAt, {\n status: meta.status ?? status,\n error: meta.error,\n overrides: opts?.overrides,\n });\n });\n },\n };\n}\n\nexport type { ForkLifecycle };\n","import type { ForkLifecycle, RequestLogger } from 'autotel';\n\n/**\n * Wrap an existing request logger's `fork()` so adapter lifecycle hooks run\n * for background work spawned after the response returns.\n */\nexport function attachForkToLogger(\n logger: RequestLogger,\n lifecycle: ForkLifecycle,\n): void {\n const originalFork = logger.fork.bind(logger);\n logger.fork = (\n label: string,\n fn: () => void | Promise<void>,\n options?: { lifecycle?: ForkLifecycle },\n ) => {\n originalFork(label, fn, {\n lifecycle: {\n onChildEnter: (child) => {\n lifecycle.onChildEnter?.(child);\n options?.lifecycle?.onChildEnter?.(child);\n },\n onChildExit: (child) => {\n lifecycle.onChildExit?.(child);\n options?.lifecycle?.onChildExit?.(child);\n },\n },\n });\n };\n}\n","import type { AsyncLocalStorage } from 'node:async_hooks';\nimport type {\n ForkLifecycle,\n RequestLogger,\n RequestLoggerOptions,\n TraceContext,\n} from 'autotel';\nimport { createNoopRequestLogger, getRequestLogger, trace } from 'autotel';\nimport { attachForkToLogger } from './fork';\nimport { createStorageForkLifecycle } from './storage';\nimport {\n createMiddlewareLogger,\n mergeRequestLoggerOptions,\n shouldInstrumentPath,\n type MiddlewareLoggerOptions,\n type MiddlewareLoggerResult,\n type RouteAdapterOptions,\n} from './middleware';\n\nexport interface ExtractedRequest {\n method: string;\n path: string;\n headers?:\n | Headers\n | Record<string, string | string[] | undefined>\n | { get(name: string): string | null };\n requestId?: string;\n}\n\nexport interface IntegratedCompletionOptions {\n autoEmit?: boolean;\n}\n\nexport type TracedOptionInput = RouteAdapterOptions & {\n requestLoggerOptions?: RequestLoggerOptions;\n autoEmit?: boolean;\n};\n\nexport interface FrameworkHandlerOptions extends TracedOptionInput {\n spanName?: string;\n}\n\nexport interface FrameworkIntegrationSpec<TCtx> {\n name: string;\n extractRequest: (ctx: TCtx) => ExtractedRequest;\n attachLogger: (ctx: TCtx, logger: RequestLogger) => void;\n storage?: AsyncLocalStorage<RequestLogger>;\n forkLifecycle?: ForkLifecycle;\n extractWaitUntil?: (\n ctx: TCtx,\n ) => ((promise: Promise<unknown>) => void) | undefined;\n spanName?: string | ((ctx: TCtx, request: ExtractedRequest) => string);\n}\n\nexport interface FrameworkRequestHandle extends MiddlewareLoggerResult {\n middlewareOptions: MiddlewareLoggerOptions;\n runWith: <T>(fn: () => T | Promise<T>) => Promise<T>;\n}\n\nexport interface FrameworkIntegrationHelpers<TCtx> {\n begin: (\n traceCtx: TraceContext,\n ctx: TCtx,\n options?: FrameworkHandlerOptions,\n ) => FrameworkRequestHandle;\n runTraced: <T>(\n ctx: TCtx,\n options: FrameworkHandlerOptions | undefined,\n handler: (handle: FrameworkRequestHandle) => Promise<T>,\n ) => Promise<T>;\n}\n\nexport function applyLoggerEnrichment(\n logger: RequestLogger,\n ...attributeSets: Array<Record<string, unknown> | undefined | null>\n): void {\n for (const attrs of attributeSets) {\n if (attrs && Object.keys(attrs).length > 0) {\n logger.set(attrs);\n }\n }\n}\n\nexport async function completeIntegratedRequest<T>(\n handle: FrameworkRequestHandle,\n options: IntegratedCompletionOptions | undefined,\n result: T,\n): Promise<T> {\n if (handle.skipped || options?.autoEmit === false) {\n return result;\n }\n\n if (result instanceof Response) {\n return handle.finishResponse(result) as unknown as T;\n }\n\n await handle.finish({});\n return result;\n}\n\nexport async function runWithIntegratedHandle<T>(\n handle: FrameworkRequestHandle,\n options: IntegratedCompletionOptions | undefined,\n fn: () => T | Promise<T>,\n): Promise<T> {\n if (handle.skipped) {\n return handle.runWith(fn);\n }\n\n try {\n const result = await handle.runWith(fn);\n return completeIntegratedRequest(handle, options, result);\n } catch (error) {\n if (options?.autoEmit !== false) {\n await handle.finish({\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n throw error;\n }\n}\n\nexport function toRouteAdapterOptions(\n options?: Pick<\n FrameworkHandlerOptions,\n keyof RouteAdapterOptions | 'requestLoggerOptions'\n >,\n): RouteAdapterOptions {\n if (!options) return {};\n const { include, exclude, routes, waitUntil, keep, requestLoggerOptions } =\n options;\n return { include, exclude, routes, waitUntil, keep, requestLoggerOptions };\n}\n\nexport function buildTracedOptions(\n options: TracedOptionInput | undefined,\n spanName: string,\n): FrameworkHandlerOptions {\n return {\n ...toRouteAdapterOptions(options),\n requestLoggerOptions: options?.requestLoggerOptions,\n autoEmit: options?.autoEmit,\n spanName,\n };\n}\n\nfunction resolveSpanName<TCtx>(\n spec: FrameworkIntegrationSpec<TCtx>,\n ctx: TCtx,\n request: ExtractedRequest,\n): string {\n if (typeof spec.spanName === 'function') {\n return spec.spanName(ctx, request);\n }\n if (typeof spec.spanName === 'string') {\n return spec.spanName;\n }\n return `http.${request.method.toLowerCase() || 'request'}`;\n}\n\nfunction buildHandle<TCtx>(\n spec: FrameworkIntegrationSpec<TCtx>,\n ctx: TCtx,\n traceCtx: TraceContext,\n options: FrameworkHandlerOptions = {},\n): FrameworkRequestHandle {\n const extracted = spec.extractRequest(ctx);\n const waitUntil = options.waitUntil ?? spec.extractWaitUntil?.(ctx);\n const middlewareOptions: MiddlewareLoggerOptions = {\n method: extracted.method,\n path: extracted.path,\n requestId: extracted.requestId,\n ...toRouteAdapterOptions(options),\n waitUntil,\n requestLoggerOptions: mergeRequestLoggerOptions(\n options.requestLoggerOptions,\n waitUntil,\n ),\n };\n\n const log = getRequestLogger(\n traceCtx,\n middlewareOptions.requestLoggerOptions,\n );\n log.set({\n 'http.request.method': extracted.method,\n 'http.route': extracted.path,\n ...(extracted.requestId ? { 'http.request.id': extracted.requestId } : {}),\n });\n\n if (spec.storage) {\n attachForkToLogger(\n log,\n spec.forkLifecycle ?? createStorageForkLifecycle(spec.storage),\n );\n }\n\n spec.attachLogger(ctx, log);\n\n const result = createMiddlewareLogger(log, middlewareOptions);\n const storage = spec.storage;\n\n return {\n ...result,\n middlewareOptions,\n runWith: async (fn) => {\n if (!storage || result.skipped) return fn();\n return storage.run(log, fn);\n },\n };\n}\n\nfunction buildSkippedHandle<TCtx>(\n spec: FrameworkIntegrationSpec<TCtx>,\n ctx: TCtx,\n extracted: ExtractedRequest,\n options: FrameworkHandlerOptions = {},\n): FrameworkRequestHandle {\n const waitUntil = options.waitUntil ?? spec.extractWaitUntil?.(ctx);\n const middlewareOptions: MiddlewareLoggerOptions = {\n method: extracted.method,\n path: extracted.path,\n requestId: extracted.requestId,\n ...toRouteAdapterOptions(options),\n waitUntil,\n };\n\n const logger = createNoopRequestLogger();\n spec.attachLogger(ctx, logger);\n\n return {\n logger,\n middlewareOptions,\n skipped: true,\n finish: async () => null,\n finishResponse: async (response) => response,\n runWith: async (fn) => {\n if (!spec.storage) return fn();\n return spec.storage.run(logger, fn);\n },\n };\n}\n\nexport function defineFrameworkIntegration<TCtx>(\n spec: FrameworkIntegrationSpec<TCtx>,\n): FrameworkIntegrationHelpers<TCtx> {\n return {\n begin(traceCtx, ctx, options = {}) {\n const extracted = spec.extractRequest(ctx);\n if (\n !shouldInstrumentPath(extracted.path, toRouteAdapterOptions(options))\n ) {\n return buildSkippedHandle(spec, ctx, extracted, options);\n }\n return buildHandle(spec, ctx, traceCtx, options);\n },\n\n runTraced(ctx, options, handler) {\n const extracted = spec.extractRequest(ctx);\n if (\n !shouldInstrumentPath(extracted.path, toRouteAdapterOptions(options))\n ) {\n return handler(buildSkippedHandle(spec, ctx, extracted, options));\n }\n\n const spanName =\n options?.spanName ?? resolveSpanName(spec, ctx, extracted);\n\n return trace({ name: spanName }, (traceCtx) => async () => {\n const handle = buildHandle(spec, ctx, traceCtx, options ?? {});\n return handler(handle);\n })();\n },\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration-CaG_l5xr.d.ts","names":[],"sources":["../src/toolkit/middleware.ts","../src/toolkit/integration.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration-Dd8Pi7jc.cjs","names":["createStorageForkLifecycle"],"sources":["../src/toolkit/deferred-drain.ts","../src/toolkit/stream-response.ts","../src/toolkit/middleware.ts","../src/toolkit/fork.ts","../src/toolkit/integration.ts"],"sourcesContent":["/**\n * Extend drain lifetime on serverless runtimes without blocking the HTTP response.\n *\n * The drain always runs in the background (its rejection is logged, never\n * thrown). When `waitUntil` is provided, the promise is also handed to the\n * platform so the isolate stays alive until the drain settles. When it is\n * omitted there is no keep-alive guarantee: on a freezing runtime the drain may\n * not finish, so callers that need delivery must supply `waitUntil`.\n */\nexport function extendDeferredDrain(\n drainPromise: Promise<unknown>,\n waitUntil?: (promise: Promise<unknown>) => void,\n): void {\n void drainPromise.catch((err) => {\n console.error('[autotel-adapters] background drain failed:', err);\n });\n if (typeof waitUntil === 'function') {\n waitUntil(drainPromise);\n }\n}\n","export interface StreamCompleteMeta {\n status: number;\n error?: Error;\n}\n\nexport function isStreamingResponse(response: Response): boolean {\n return response.body !== null;\n}\n\n/**\n * Whether framework integrations should defer wide-event emit until the response\n * body finishes. Static string/JSON bodies are excluded even though they use a\n * ReadableStream under the hood in the Fetch API.\n */\nexport function shouldDeferEmitForResponse(response: Response): boolean {\n if (!response.body) return false;\n\n const contentType = (response.headers.get('content-type') ?? '').toLowerCase();\n\n if (contentType.includes('text/event-stream')) return true;\n if (contentType.includes('application/x-ndjson')) return true;\n if (response.headers.has('x-vercel-ai-ui-message-stream')) return true;\n if (response.headers.get('transfer-encoding')?.toLowerCase().includes('chunked')) {\n return true;\n }\n\n return false;\n}\n\nfunction toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\n\nfunction createObservedBody(\n body: ReadableStream<Uint8Array>,\n onDone: () => void | Promise<void>,\n onError: (error: unknown) => void | Promise<void>,\n): ReadableStream<Uint8Array> | null {\n if (body.locked) {\n void Promise.resolve(onError(new TypeError('stream is already locked'))).catch(\n (err: unknown) => {\n console.error('[autotel-adapters] stream error handling failed:', err);\n },\n );\n return null;\n }\n\n const reader = body.getReader();\n let settled = false;\n\n const settle = (fn: () => void | Promise<void>) => {\n if (settled) return;\n settled = true;\n void Promise.resolve(fn()).catch((err: unknown) => {\n console.error('[autotel-adapters] stream completion handling failed:', err);\n });\n };\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n settle(onDone);\n controller.close();\n return;\n }\n controller.enqueue(value);\n } catch (err) {\n settle(() => onError(err));\n controller.error(err);\n }\n },\n\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } finally {\n settle(onDone);\n }\n },\n });\n}\n\n/**\n * Observe a streaming Response body and invoke `onComplete` once when the body\n * closes, errors, or is cancelled.\n */\nexport function bindStreamingResponseLifecycle(\n response: Response,\n onComplete: (meta: StreamCompleteMeta) => void | Promise<void>,\n): Response {\n if (!response.body) {\n void Promise.resolve(onComplete({ status: response.status })).catch(\n (err: unknown) => {\n console.error('[autotel-adapters] stream completion handling failed:', err);\n },\n );\n return response;\n }\n\n const body = createObservedBody(\n response.body,\n () => onComplete({ status: response.status }),\n (err) => onComplete({ status: response.status, error: toError(err) }),\n );\n if (!body) return response;\n\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n","import type {\n ForkLifecycle,\n RequestLogger,\n RequestLoggerOptions,\n RequestLogSnapshot,\n} from 'autotel';\nimport { createNoopRequestLogger } from 'autotel';\nimport type { RouteFilterOptions, RouteServiceConfig } from 'autotel-edge';\nimport {\n getServiceForPath,\n matchesRoutePattern,\n shouldInstrumentPath,\n} from 'autotel-edge';\nimport { extendDeferredDrain } from './deferred-drain';\nimport {\n bindStreamingResponseLifecycle,\n shouldDeferEmitForResponse,\n} from './stream-response';\n\nexport type Awaitable<T> = T | Promise<T>;\n\nexport type { RouteFilterOptions, RouteServiceConfig };\nexport { getServiceForPath, matchesRoutePattern, shouldInstrumentPath };\n\nexport interface RouteAdapterOptions {\n include?: string[];\n exclude?: string[];\n routes?: Record<string, RouteServiceConfig>;\n waitUntil?: (promise: Promise<unknown>) => void;\n keep?: (ctx: TailSamplingContext) => Awaitable<void>;\n requestLoggerOptions?: RequestLoggerOptions;\n}\n\n/** @deprecated Use {@link RouteAdapterOptions}. */\nexport type BaseAdapterOptions = RouteAdapterOptions;\n\nexport interface TailSamplingContext {\n status?: number;\n durationMs: number;\n path: string;\n method: string;\n context: Record<string, unknown>;\n shouldKeep: boolean;\n}\n\nexport interface MiddlewareLoggerOptions extends RouteAdapterOptions {\n onFinish?: (ctx: {\n logger: RequestLogger;\n method: string;\n path: string;\n status?: number;\n durationMs: number;\n }) => Awaitable<void>;\n method: string;\n path: string;\n requestId?: string;\n}\n\nexport interface MiddlewareLoggerResult {\n logger: RequestLogger;\n finish: (opts?: {\n status?: number;\n error?: Error;\n overrides?: Record<string, unknown>;\n }) => Promise<RequestLogSnapshot | null>;\n finishResponse: (\n response: Response,\n opts?: { status?: number; overrides?: Record<string, unknown> },\n ) => Promise<Response>;\n skipped: boolean;\n}\n\nconst noopResult: MiddlewareLoggerResult = {\n logger: createNoopRequestLogger(),\n finish: () => Promise.resolve(null),\n finishResponse: (response) => Promise.resolve(response),\n skipped: true,\n};\n\nexport function mergeRequestLoggerOptions(\n base: RequestLoggerOptions | undefined,\n waitUntil?: (promise: Promise<unknown>) => void,\n): RequestLoggerOptions | undefined {\n if (!waitUntil) return base;\n\n const userOnEmit = base?.onEmit;\n return {\n ...base,\n onEmit: (snapshot) => {\n const drain = userOnEmit\n ? Promise.resolve(userOnEmit(snapshot))\n : Promise.resolve();\n extendDeferredDrain(drain, waitUntil);\n },\n };\n}\n\nasync function performFinish(\n logger: RequestLogger,\n options: MiddlewareLoggerOptions,\n startedAt: number,\n opts?: {\n status?: number;\n error?: Error;\n overrides?: Record<string, unknown>;\n },\n): Promise<RequestLogSnapshot | null> {\n const { status, error, overrides } = opts ?? {};\n\n if (error) {\n logger.error(error);\n logger.set({\n 'http.response.status_code': status ?? 500,\n error_message: error.message,\n });\n } else if (status !== undefined) {\n logger.set({ 'http.response.status_code': status });\n }\n\n const durationMs = Date.now() - startedAt;\n logger.set({ duration_ms: durationMs });\n\n const tailCtx: TailSamplingContext = {\n status:\n status ??\n (logger.getContext()['http.response.status_code'] as number | undefined),\n durationMs,\n path: options.path,\n method: options.method,\n context: logger.getContext(),\n shouldKeep: false,\n };\n\n if (options.keep) {\n await options.keep(tailCtx);\n }\n\n if (options.onFinish) {\n try {\n await options.onFinish({\n logger,\n method: options.method,\n path: options.path,\n status: tailCtx.status,\n durationMs,\n });\n } catch (err) {\n console.error('[autotel-adapters] onFinish failed:', err);\n }\n }\n\n const mergedOverrides = {\n ...(overrides ?? {}),\n ...(tailCtx.shouldKeep ? { 'autotel.sampling.tail.keep': true } : {}),\n };\n\n return logger.emitNow(\n Object.keys(mergedOverrides).length > 0 ? mergedOverrides : undefined,\n );\n}\n\n/**\n * Create a request logger handle for use inside an active autotel trace span.\n * Call `finish()` or `finishResponse()` when the request completes.\n */\nexport function createMiddlewareLogger(\n logger: RequestLogger,\n options: MiddlewareLoggerOptions,\n): MiddlewareLoggerResult {\n if (!shouldInstrumentPath(options.path, options)) {\n return noopResult;\n }\n\n const routeService = getServiceForPath(options.path, options.routes);\n if (routeService) {\n logger.set({ service: routeService });\n }\n\n if (options.requestId) {\n logger.set({ 'http.request.id': options.requestId });\n }\n\n const startedAt = Date.now();\n\n return {\n logger,\n skipped: false,\n finish: (opts) => performFinish(logger, options, startedAt, opts),\n finishResponse: async (response, opts) => {\n const status = opts?.status ?? response.status;\n if (!shouldDeferEmitForResponse(response)) {\n await performFinish(logger, options, startedAt, {\n status,\n overrides: opts?.overrides,\n });\n return response;\n }\n\n return bindStreamingResponseLifecycle(response, async (meta) => {\n await performFinish(logger, options, startedAt, {\n status: meta.status ?? status,\n error: meta.error,\n overrides: opts?.overrides,\n });\n });\n },\n };\n}\n\nexport type { ForkLifecycle };\n","import type { ForkLifecycle, RequestLogger } from 'autotel';\n\n/**\n * Wrap an existing request logger's `fork()` so adapter lifecycle hooks run\n * for background work spawned after the response returns.\n */\nexport function attachForkToLogger(\n logger: RequestLogger,\n lifecycle: ForkLifecycle,\n): void {\n const originalFork = logger.fork.bind(logger);\n logger.fork = (\n label: string,\n fn: () => void | Promise<void>,\n options?: { lifecycle?: ForkLifecycle },\n ) => {\n originalFork(label, fn, {\n lifecycle: {\n onChildEnter: (child) => {\n lifecycle.onChildEnter?.(child);\n options?.lifecycle?.onChildEnter?.(child);\n },\n onChildExit: (child) => {\n lifecycle.onChildExit?.(child);\n options?.lifecycle?.onChildExit?.(child);\n },\n },\n });\n };\n}\n","import type { AsyncLocalStorage } from 'node:async_hooks';\nimport type {\n ForkLifecycle,\n RequestLogger,\n RequestLoggerOptions,\n TraceContext,\n} from 'autotel';\nimport { createNoopRequestLogger, getRequestLogger, trace } from 'autotel';\nimport { attachForkToLogger } from './fork';\nimport { createStorageForkLifecycle } from './storage';\nimport {\n createMiddlewareLogger,\n mergeRequestLoggerOptions,\n shouldInstrumentPath,\n type MiddlewareLoggerOptions,\n type MiddlewareLoggerResult,\n type RouteAdapterOptions,\n} from './middleware';\n\nexport interface ExtractedRequest {\n method: string;\n path: string;\n headers?:\n | Headers\n | Record<string, string | string[] | undefined>\n | { get(name: string): string | null };\n requestId?: string;\n}\n\nexport interface IntegratedCompletionOptions {\n autoEmit?: boolean;\n}\n\nexport type TracedOptionInput = RouteAdapterOptions & {\n requestLoggerOptions?: RequestLoggerOptions;\n autoEmit?: boolean;\n};\n\nexport interface FrameworkHandlerOptions extends TracedOptionInput {\n spanName?: string;\n}\n\nexport interface FrameworkIntegrationSpec<TCtx> {\n name: string;\n extractRequest: (ctx: TCtx) => ExtractedRequest;\n attachLogger: (ctx: TCtx, logger: RequestLogger) => void;\n storage?: AsyncLocalStorage<RequestLogger>;\n forkLifecycle?: ForkLifecycle;\n extractWaitUntil?: (\n ctx: TCtx,\n ) => ((promise: Promise<unknown>) => void) | undefined;\n spanName?: string | ((ctx: TCtx, request: ExtractedRequest) => string);\n}\n\nexport interface FrameworkRequestHandle extends MiddlewareLoggerResult {\n middlewareOptions: MiddlewareLoggerOptions;\n runWith: <T>(fn: () => T | Promise<T>) => Promise<T>;\n}\n\nexport interface FrameworkIntegrationHelpers<TCtx> {\n begin: (\n traceCtx: TraceContext,\n ctx: TCtx,\n options?: FrameworkHandlerOptions,\n ) => FrameworkRequestHandle;\n runTraced: <T>(\n ctx: TCtx,\n options: FrameworkHandlerOptions | undefined,\n handler: (handle: FrameworkRequestHandle) => Promise<T>,\n ) => Promise<T>;\n}\n\nexport function applyLoggerEnrichment(\n logger: RequestLogger,\n ...attributeSets: Array<Record<string, unknown> | undefined | null>\n): void {\n for (const attrs of attributeSets) {\n if (attrs && Object.keys(attrs).length > 0) {\n logger.set(attrs);\n }\n }\n}\n\nexport async function completeIntegratedRequest<T>(\n handle: FrameworkRequestHandle,\n options: IntegratedCompletionOptions | undefined,\n result: T,\n): Promise<T> {\n if (handle.skipped || options?.autoEmit === false) {\n return result;\n }\n\n if (result instanceof Response) {\n return handle.finishResponse(result) as unknown as T;\n }\n\n await handle.finish({});\n return result;\n}\n\nexport async function runWithIntegratedHandle<T>(\n handle: FrameworkRequestHandle,\n options: IntegratedCompletionOptions | undefined,\n fn: () => T | Promise<T>,\n): Promise<T> {\n if (handle.skipped) {\n return handle.runWith(fn);\n }\n\n try {\n const result = await handle.runWith(fn);\n return completeIntegratedRequest(handle, options, result);\n } catch (error) {\n if (options?.autoEmit !== false) {\n await handle.finish({\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n throw error;\n }\n}\n\nexport function toRouteAdapterOptions(\n options?: Pick<\n FrameworkHandlerOptions,\n keyof RouteAdapterOptions | 'requestLoggerOptions'\n >,\n): RouteAdapterOptions {\n if (!options) return {};\n const { include, exclude, routes, waitUntil, keep, requestLoggerOptions } =\n options;\n return { include, exclude, routes, waitUntil, keep, requestLoggerOptions };\n}\n\nexport function buildTracedOptions(\n options: TracedOptionInput | undefined,\n spanName: string,\n): FrameworkHandlerOptions {\n return {\n ...toRouteAdapterOptions(options),\n requestLoggerOptions: options?.requestLoggerOptions,\n autoEmit: options?.autoEmit,\n spanName,\n };\n}\n\nfunction resolveSpanName<TCtx>(\n spec: FrameworkIntegrationSpec<TCtx>,\n ctx: TCtx,\n request: ExtractedRequest,\n): string {\n if (typeof spec.spanName === 'function') {\n return spec.spanName(ctx, request);\n }\n if (typeof spec.spanName === 'string') {\n return spec.spanName;\n }\n return `http.${request.method.toLowerCase() || 'request'}`;\n}\n\nfunction buildHandle<TCtx>(\n spec: FrameworkIntegrationSpec<TCtx>,\n ctx: TCtx,\n traceCtx: TraceContext,\n options: FrameworkHandlerOptions = {},\n): FrameworkRequestHandle {\n const extracted = spec.extractRequest(ctx);\n const waitUntil = options.waitUntil ?? spec.extractWaitUntil?.(ctx);\n const middlewareOptions: MiddlewareLoggerOptions = {\n method: extracted.method,\n path: extracted.path,\n requestId: extracted.requestId,\n ...toRouteAdapterOptions(options),\n waitUntil,\n requestLoggerOptions: mergeRequestLoggerOptions(\n options.requestLoggerOptions,\n waitUntil,\n ),\n };\n\n const log = getRequestLogger(\n traceCtx,\n middlewareOptions.requestLoggerOptions,\n );\n log.set({\n 'http.request.method': extracted.method,\n 'http.route': extracted.path,\n ...(extracted.requestId ? { 'http.request.id': extracted.requestId } : {}),\n });\n\n if (spec.storage) {\n attachForkToLogger(\n log,\n spec.forkLifecycle ?? createStorageForkLifecycle(spec.storage),\n );\n }\n\n spec.attachLogger(ctx, log);\n\n const result = createMiddlewareLogger(log, middlewareOptions);\n const storage = spec.storage;\n\n return {\n ...result,\n middlewareOptions,\n runWith: async (fn) => {\n if (!storage || result.skipped) return fn();\n return storage.run(log, fn);\n },\n };\n}\n\nfunction buildSkippedHandle<TCtx>(\n spec: FrameworkIntegrationSpec<TCtx>,\n ctx: TCtx,\n extracted: ExtractedRequest,\n options: FrameworkHandlerOptions = {},\n): FrameworkRequestHandle {\n const waitUntil = options.waitUntil ?? spec.extractWaitUntil?.(ctx);\n const middlewareOptions: MiddlewareLoggerOptions = {\n method: extracted.method,\n path: extracted.path,\n requestId: extracted.requestId,\n ...toRouteAdapterOptions(options),\n waitUntil,\n };\n\n const logger = createNoopRequestLogger();\n spec.attachLogger(ctx, logger);\n\n return {\n logger,\n middlewareOptions,\n skipped: true,\n finish: async () => null,\n finishResponse: async (response) => response,\n runWith: async (fn) => {\n if (!spec.storage) return fn();\n return spec.storage.run(logger, fn);\n },\n };\n}\n\nexport function defineFrameworkIntegration<TCtx>(\n spec: FrameworkIntegrationSpec<TCtx>,\n): FrameworkIntegrationHelpers<TCtx> {\n return {\n begin(traceCtx, ctx, options = {}) {\n const extracted = spec.extractRequest(ctx);\n if (\n !shouldInstrumentPath(extracted.path, toRouteAdapterOptions(options))\n ) {\n return buildSkippedHandle(spec, ctx, extracted, options);\n }\n return buildHandle(spec, ctx, traceCtx, options);\n },\n\n runTraced(ctx, options, handler) {\n const extracted = spec.extractRequest(ctx);\n if (\n !shouldInstrumentPath(extracted.path, toRouteAdapterOptions(options))\n ) {\n return handler(buildSkippedHandle(spec, ctx, extracted, options));\n }\n\n const spanName =\n options?.spanName ?? resolveSpanName(spec, ctx, extracted);\n\n return trace({ name: spanName }, (traceCtx) => async () => {\n const handle = buildHandle(spec, ctx, traceCtx, options ?? {});\n return handler(handle);\n })();\n },\n };\n}\n"],"mappings":"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"}