autotel-adapters 0.3.19 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +13 -0
  2. package/dist/cloudflare.cjs +44 -29
  3. package/dist/cloudflare.cjs.map +1 -1
  4. package/dist/cloudflare.d.cts +11 -17
  5. package/dist/cloudflare.d.cts.map +1 -1
  6. package/dist/cloudflare.d.ts +11 -17
  7. package/dist/cloudflare.d.ts.map +1 -1
  8. package/dist/cloudflare.js +47 -30
  9. package/dist/cloudflare.js.map +1 -1
  10. package/dist/core.cjs +7 -11
  11. package/dist/core.cjs.map +1 -1
  12. package/dist/core.d.cts +7 -11
  13. package/dist/core.d.cts.map +1 -1
  14. package/dist/core.d.ts +6 -10
  15. package/dist/core.d.ts.map +1 -1
  16. package/dist/core.js +7 -12
  17. package/dist/core.js.map +1 -1
  18. package/dist/elysia.cjs +50 -0
  19. package/dist/elysia.cjs.map +1 -0
  20. package/dist/elysia.d.cts +18 -0
  21. package/dist/elysia.d.cts.map +1 -0
  22. package/dist/elysia.d.ts +18 -0
  23. package/dist/elysia.d.ts.map +1 -0
  24. package/dist/elysia.js +44 -0
  25. package/dist/elysia.js.map +1 -0
  26. package/dist/express.cjs +5 -16
  27. package/dist/express.cjs.map +1 -1
  28. package/dist/express.d.cts +6 -15
  29. package/dist/express.d.cts.map +1 -1
  30. package/dist/express.d.ts +6 -15
  31. package/dist/express.d.ts.map +1 -1
  32. package/dist/express.js +7 -16
  33. package/dist/express.js.map +1 -1
  34. package/dist/fastify.cjs +5 -16
  35. package/dist/fastify.cjs.map +1 -1
  36. package/dist/fastify.d.cts +6 -15
  37. package/dist/fastify.d.cts.map +1 -1
  38. package/dist/fastify.d.ts +6 -15
  39. package/dist/fastify.d.ts.map +1 -1
  40. package/dist/fastify.js +7 -16
  41. package/dist/fastify.js.map +1 -1
  42. package/dist/hono.cjs +52 -11
  43. package/dist/hono.cjs.map +1 -1
  44. package/dist/hono.d.cts +12 -5
  45. package/dist/hono.d.cts.map +1 -1
  46. package/dist/hono.d.ts +12 -5
  47. package/dist/hono.d.ts.map +1 -1
  48. package/dist/hono.js +49 -12
  49. package/dist/hono.js.map +1 -1
  50. package/dist/index.cjs +14 -9
  51. package/dist/index.d.cts +12 -9
  52. package/dist/index.d.ts +12 -9
  53. package/dist/index.js +12 -9
  54. package/dist/integration-DI-1RuTh.d.cts +100 -0
  55. package/dist/integration-DI-1RuTh.d.cts.map +1 -0
  56. package/dist/integration-IUpfttGT.js +335 -0
  57. package/dist/integration-IUpfttGT.js.map +1 -0
  58. package/dist/integration-guh7BHTF.cjs +412 -0
  59. package/dist/integration-guh7BHTF.cjs.map +1 -0
  60. package/dist/integration-rYoX8QLk.d.ts +100 -0
  61. package/dist/integration-rYoX8QLk.d.ts.map +1 -0
  62. package/dist/nestjs.cjs +119 -0
  63. package/dist/nestjs.cjs.map +1 -0
  64. package/dist/nestjs.d.cts +42 -0
  65. package/dist/nestjs.d.cts.map +1 -0
  66. package/dist/nestjs.d.ts +42 -0
  67. package/dist/nestjs.d.ts.map +1 -0
  68. package/dist/nestjs.js +114 -0
  69. package/dist/nestjs.js.map +1 -0
  70. package/dist/next.cjs +35 -33
  71. package/dist/next.cjs.map +1 -1
  72. package/dist/next.d.cts +6 -17
  73. package/dist/next.d.cts.map +1 -1
  74. package/dist/next.d.ts +6 -17
  75. package/dist/next.d.ts.map +1 -1
  76. package/dist/next.js +38 -34
  77. package/dist/next.js.map +1 -1
  78. package/dist/nitro.cjs +33 -41
  79. package/dist/nitro.cjs.map +1 -1
  80. package/dist/nitro.d.cts +6 -17
  81. package/dist/nitro.d.cts.map +1 -1
  82. package/dist/nitro.d.ts +6 -17
  83. package/dist/nitro.d.ts.map +1 -1
  84. package/dist/nitro.js +33 -42
  85. package/dist/nitro.js.map +1 -1
  86. package/dist/sveltekit.cjs +48 -0
  87. package/dist/sveltekit.cjs.map +1 -0
  88. package/dist/sveltekit.d.cts +24 -0
  89. package/dist/sveltekit.d.cts.map +1 -0
  90. package/dist/sveltekit.d.ts +24 -0
  91. package/dist/sveltekit.d.ts.map +1 -0
  92. package/dist/sveltekit.js +43 -0
  93. package/dist/sveltekit.js.map +1 -0
  94. package/dist/tanstack.cjs +0 -8
  95. package/dist/tanstack.cjs.map +1 -1
  96. package/dist/tanstack.d.cts +1 -7
  97. package/dist/tanstack.d.cts.map +1 -1
  98. package/dist/tanstack.d.ts +1 -7
  99. package/dist/tanstack.d.ts.map +1 -1
  100. package/dist/tanstack.js +2 -9
  101. package/dist/tanstack.js.map +1 -1
  102. package/dist/toolkit/index.cjs +23 -0
  103. package/dist/toolkit/index.d.cts +42 -0
  104. package/dist/toolkit/index.d.cts.map +1 -0
  105. package/dist/toolkit/index.d.ts +42 -0
  106. package/dist/toolkit/index.d.ts.map +1 -0
  107. package/dist/toolkit/index.js +4 -0
  108. package/dist/toolkit/storage.cjs +35 -0
  109. package/dist/toolkit/storage.cjs.map +1 -0
  110. package/dist/toolkit/storage.d.cts +20 -0
  111. package/dist/toolkit/storage.d.cts.map +1 -0
  112. package/dist/toolkit/storage.d.ts +20 -0
  113. package/dist/toolkit/storage.d.ts.map +1 -0
  114. package/dist/toolkit/storage.js +33 -0
  115. package/dist/toolkit/storage.js.map +1 -0
  116. package/package.json +39 -8
  117. package/skills/autotel-adapters/SKILL.md +42 -34
package/dist/next.js CHANGED
@@ -1,9 +1,10 @@
1
- import { createAdapterToolkit, createUseLogger, getHeader } from "./core.js";
2
- import { createDrainPipeline, createStructuredError, getRequestLogger, parseError, trace } from "autotel";
3
- import { AsyncLocalStorage } from "node:async_hooks";
1
+ import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, n as buildTracedOptions, t as applyLoggerEnrichment } from "./integration-IUpfttGT.js";
2
+ import { createLoggerStorage } from "./toolkit/storage.js";
3
+ import { createUseLogger, getHeader } from "./core.js";
4
+ import { createDrainPipeline, createStructuredError, parseError } from "autotel";
4
5
 
5
6
  //#region src/next.ts
6
- const nextLoggerStorage = new AsyncLocalStorage();
7
+ const { storage: nextLoggerStorage, useLogger: storageUseLogger } = createLoggerStorage("request context. Wrap handlers with withAutotel() first.");
7
8
  function enrichFromRequest(request) {
8
9
  if (!request) return void 0;
9
10
  let route = "/";
@@ -25,42 +26,45 @@ const baseUseLogger = createUseLogger({
25
26
  enrich: enrichFromRequest
26
27
  });
27
28
  function useLogger(request, requestLoggerOptions) {
28
- const logger = nextLoggerStorage.getStore();
29
- if (logger) return logger;
30
- return baseUseLogger(request, requestLoggerOptions);
29
+ try {
30
+ return storageUseLogger();
31
+ } catch {
32
+ return baseUseLogger(request, requestLoggerOptions);
33
+ }
34
+ }
35
+ function resolvePath(request) {
36
+ if (!request?.url) return "/";
37
+ try {
38
+ return new URL(request.url).pathname;
39
+ } catch {
40
+ return request.url;
41
+ }
42
+ }
43
+ const integration = defineFrameworkIntegration({
44
+ name: "next",
45
+ storage: nextLoggerStorage,
46
+ extractRequest: (request) => ({
47
+ method: request?.method ?? "GET",
48
+ path: resolvePath(request),
49
+ headers: request?.headers,
50
+ requestId: getHeader(request?.headers, "x-request-id")
51
+ }),
52
+ attachLogger: () => {}
53
+ });
54
+ function resolveSpanName(request, options) {
55
+ if (typeof options?.spanName === "function") return options.spanName(request);
56
+ return options?.spanName ?? "next.request";
31
57
  }
32
58
  function withAutotel(handler, options) {
33
59
  return async (...args) => {
34
60
  const request = args[0];
35
- return await trace({ name: typeof options?.spanName === "function" ? options.spanName(request) : options?.spanName ?? "next.request" }, (ctx) => async (...innerArgs) => {
36
- const innerRequest = innerArgs[0];
37
- const log = getRequestLogger(ctx, options?.requestLoggerOptions);
38
- const auto = enrichFromRequest(innerRequest);
39
- if (auto && Object.keys(auto).length > 0) log.set(auto);
40
- const custom = options?.enrich?.(innerRequest);
41
- if (custom && Object.keys(custom).length > 0) log.set(custom);
42
- try {
43
- return await nextLoggerStorage.run(log, async () => handler(...innerArgs));
44
- } finally {
45
- if (options?.autoEmit !== false) log.emitNow();
46
- }
47
- })(...args);
61
+ return integration.runTraced(request, buildTracedOptions(options, resolveSpanName(request, options)), async (handle) => runWithIntegratedHandle(handle, options, async () => {
62
+ applyLoggerEnrichment(handle.logger, enrichFromRequest(request), options?.enrichRequest?.(request));
63
+ return handler(...args);
64
+ }));
48
65
  };
49
66
  }
50
- function createNextAdapter(options) {
51
- return {
52
- withAutotel: (handler) => withAutotel(handler, options),
53
- useLogger: (request, requestLoggerOptions) => useLogger(request, requestLoggerOptions),
54
- parseError: (error) => parseError(error),
55
- createStructuredError: (input) => createStructuredError(input),
56
- createDrainPipeline: (drainOptions) => createDrainPipeline(drainOptions)
57
- };
58
- }
59
- const nextToolkit = createAdapterToolkit({
60
- adapterName: "next",
61
- enrich: enrichFromRequest
62
- });
63
67
 
64
68
  //#endregion
65
- export { createDrainPipeline, createNextAdapter, createStructuredError, nextToolkit, parseError, useLogger, withAutotel };
69
+ export { createDrainPipeline, createStructuredError, parseError, useLogger, withAutotel };
66
70
  //# sourceMappingURL=next.js.map
package/dist/next.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","names":[],"sources":["../src/next.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n createDrainPipeline,\n getRequestLogger,\n parseError,\n trace,\n createStructuredError,\n type RequestLogger,\n type RequestLoggerOptions,\n type ParsedError,\n type DrainPipelineOptions,\n type PipelineDrainFn,\n type StructuredError,\n type StructuredErrorInput,\n} from 'autotel';\nimport { createAdapterToolkit, createUseLogger, getHeader } from './core';\n\nexport interface NextRequestLike {\n method?: string;\n url?: string;\n headers?:\n | { get(name: string): string | null }\n | Record<string, string | undefined>;\n}\n\nexport interface NextWithAutotelOptions {\n spanName?: string | ((request?: NextRequestLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrich?: (request?: NextRequestLike) => Record<string, unknown> | undefined;\n /** Emit one wide event automatically when the handler settles. Default `true`. */\n autoEmit?: boolean;\n}\n\nconst nextLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nfunction enrichFromRequest(\n request?: NextRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n let route = '/';\n if (request.url) {\n try {\n route = new URL(request.url).pathname;\n } catch {\n route = request.url;\n }\n }\n const requestId = getHeader(request.headers, 'x-request-id');\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(request.url ? { 'url.full': request.url } : {}),\n ...(route ? { 'http.route': route } : {}),\n ...(requestId ? { 'http.request.header.x-request-id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<NextRequestLike>({\n adapterName: 'next',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: NextRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n const logger = nextLoggerStorage.getStore();\n if (logger) return logger;\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nexport function withAutotel<TArgs extends unknown[], TReturn>(\n handler: (...args: TArgs) => TReturn | Promise<TReturn>,\n options?: NextWithAutotelOptions,\n): (...args: TArgs) => Promise<TReturn> {\n return async (...args: TArgs): Promise<TReturn> => {\n const request = args[0] as NextRequestLike | undefined;\n const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(request)\n : (options?.spanName ?? 'next.request');\n\n const wrapped = trace(\n { name: spanName },\n (ctx) => async (...innerArgs: TArgs) => {\n const innerRequest = innerArgs[0] as NextRequestLike | undefined;\n const log = getRequestLogger(ctx, options?.requestLoggerOptions);\n const auto = enrichFromRequest(innerRequest);\n if (auto && Object.keys(auto).length > 0) {\n log.set(auto);\n }\n const custom = options?.enrich?.(innerRequest);\n if (custom && Object.keys(custom).length > 0) {\n log.set(custom);\n }\n try {\n return await nextLoggerStorage.run(log, async () =>\n handler(...innerArgs),\n );\n } finally {\n if (options?.autoEmit !== false) {\n log.emitNow();\n }\n }\n },\n );\n return await wrapped(...args);\n };\n}\n\nexport function createNextAdapter(options?: NextWithAutotelOptions) {\n return {\n withAutotel: <TArgs extends unknown[], TReturn>(\n handler: (...args: TArgs) => TReturn | Promise<TReturn>,\n ) => withAutotel(handler, options),\n useLogger: (\n request?: NextRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n ): RequestLogger => useLogger(request, requestLoggerOptions),\n parseError: (error: unknown): ParsedError => parseError(error),\n createStructuredError: (\n input: StructuredErrorInput,\n ): StructuredError => createStructuredError(input),\n createDrainPipeline: <T = unknown>(\n drainOptions?: DrainPipelineOptions<T>,\n ): ((batchDrain: (batch: T[]) => void | Promise<void>) => PipelineDrainFn<T>) =>\n createDrainPipeline(drainOptions),\n };\n}\n\nexport const nextToolkit = createAdapterToolkit<NextRequestLike>({\n adapterName: 'next',\n enrich: enrichFromRequest,\n});\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;AAiCA,MAAM,oBAAoB,IAAI,kBAAiC;AAE/D,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,IAAI,QAAQ;CACZ,IAAI,QAAQ,KACV,IAAI;EACF,QAAQ,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC/B,QAAQ;EACN,QAAQ,QAAQ;CAClB;CAEF,MAAM,YAAY,UAAU,QAAQ,SAAS,cAAc;CAE3D,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,QAAQ,MAAM,EAAE,YAAY,QAAQ,IAAI,IAAI,CAAC;EACjD,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,oCAAoC,UAAU,IAAI,CAAC;CACvE;AACF;AAEA,MAAM,gBAAgB,gBAAiC;CACrD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,MAAM,SAAS,kBAAkB,SAAS;CAC1C,IAAI,QAAQ,OAAO;CACnB,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,SAAgB,YACd,SACA,SACsC;CACtC,OAAO,OAAO,GAAG,SAAkC;EACjD,MAAM,UAAU,KAAK;EA8BrB,OAAO,MAxBS,MACd,EAAE,MALF,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,OAAO,IACvB,SAAS,YAAY,eAGT,IAChB,QAAQ,OAAO,GAAG,cAAqB;GACtC,MAAM,eAAe,UAAU;GAC/B,MAAM,MAAM,iBAAiB,KAAK,SAAS,oBAAoB;GAC/D,MAAM,OAAO,kBAAkB,YAAY;GAC3C,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GACrC,IAAI,IAAI,IAAI;GAEd,MAAM,SAAS,SAAS,SAAS,YAAY;GAC7C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GACzC,IAAI,IAAI,MAAM;GAEhB,IAAI;IACF,OAAO,MAAM,kBAAkB,IAAI,KAAK,YACtC,QAAQ,GAAG,SAAS,CACtB;GACF,UAAU;IACR,IAAI,SAAS,aAAa,OACxB,IAAI,QAAQ;GAEhB;EACF,CAEiB,CAAC,CAAC,GAAG,IAAI;CAC9B;AACF;AAEA,SAAgB,kBAAkB,SAAkC;CAClE,OAAO;EACL,cACE,YACG,YAAY,SAAS,OAAO;EACjC,YACE,SACA,yBACkB,UAAU,SAAS,oBAAoB;EAC3D,aAAa,UAAgC,WAAW,KAAK;EAC7D,wBACE,UACoB,sBAAsB,KAAK;EACjD,sBACE,iBAEA,oBAAoB,YAAY;CACpC;AACF;AAEA,MAAa,cAAc,qBAAsC;CAC/D,aAAa;CACb,QAAQ;AACV,CAAC"}
1
+ {"version":3,"file":"next.js","names":[],"sources":["../src/next.ts"],"sourcesContent":["import {\n createDrainPipeline,\n parseError,\n createStructuredError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createUseLogger,\n getHeader,\n type FrameworkHandlerOptions,\n} from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n buildTracedOptions,\n} from './toolkit/integration';\n\nexport interface NextRequestLike {\n method?: string;\n url?: string;\n headers?:\n { get(name: string): string | null } | Record<string, string | undefined>;\n}\n\nexport interface NextWithAutotelOptions extends Omit<\n FrameworkHandlerOptions,\n 'spanName'\n> {\n spanName?: string | ((request?: NextRequestLike) => string);\n enrichRequest?: (\n request?: NextRequestLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: nextLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Wrap handlers with withAutotel() first.',\n );\n\nfunction enrichFromRequest(\n request?: NextRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n let route = '/';\n if (request.url) {\n try {\n route = new URL(request.url).pathname;\n } catch {\n route = request.url;\n }\n }\n const requestId = getHeader(request.headers, 'x-request-id');\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(request.url ? { 'url.full': request.url } : {}),\n ...(route ? { 'http.route': route } : {}),\n ...(requestId ? { 'http.request.header.x-request-id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<NextRequestLike>({\n adapterName: 'next',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: NextRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n try {\n return storageUseLogger();\n } catch {\n return baseUseLogger(request, requestLoggerOptions);\n }\n}\n\nfunction resolvePath(request?: NextRequestLike): string {\n if (!request?.url) return '/';\n try {\n return new URL(request.url).pathname;\n } catch {\n return request.url;\n }\n}\n\nconst integration = defineFrameworkIntegration<NextRequestLike | undefined>({\n name: 'next',\n storage: nextLoggerStorage,\n extractRequest: (request) => ({\n method: request?.method ?? 'GET',\n path: resolvePath(request),\n headers: request?.headers,\n requestId: getHeader(request?.headers, 'x-request-id'),\n }),\n attachLogger: () => {},\n});\n\nfunction resolveSpanName(\n request: NextRequestLike | undefined,\n options?: NextWithAutotelOptions,\n): string {\n if (typeof options?.spanName === 'function') {\n return options.spanName(request);\n }\n return options?.spanName ?? 'next.request';\n}\n\nexport function withAutotel<TArgs extends unknown[], TReturn>(\n handler: (...args: TArgs) => TReturn | Promise<TReturn>,\n options?: NextWithAutotelOptions,\n): (...args: TArgs) => Promise<TReturn> {\n return async (...args: TArgs): Promise<TReturn> => {\n const request = args[0] as NextRequestLike | undefined;\n\n return integration.runTraced(\n request,\n buildTracedOptions(options, resolveSpanName(request, options)),\n async (handle) =>\n runWithIntegratedHandle(handle, options, async () => {\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n options?.enrichRequest?.(request),\n );\n return handler(...args);\n }),\n );\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAqCA,MAAM,EAAE,SAAS,mBAAmB,WAAW,qBAC7C,oBACE,0DACF;AAEF,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,IAAI,QAAQ;CACZ,IAAI,QAAQ,KACV,IAAI;EACF,QAAQ,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC/B,QAAQ;EACN,QAAQ,QAAQ;CAClB;CAEF,MAAM,YAAY,UAAU,QAAQ,SAAS,cAAc;CAE3D,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,QAAQ,MAAM,EAAE,YAAY,QAAQ,IAAI,IAAI,CAAC;EACjD,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,oCAAoC,UAAU,IAAI,CAAC;CACvE;AACF;AAEA,MAAM,gBAAgB,gBAAiC;CACrD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,IAAI;EACF,OAAO,iBAAiB;CAC1B,QAAQ;EACN,OAAO,cAAc,SAAS,oBAAoB;CACpD;AACF;AAEA,SAAS,YAAY,SAAmC;CACtD,IAAI,CAAC,SAAS,KAAK,OAAO;CAC1B,IAAI;EACF,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC9B,QAAQ;EACN,OAAO,QAAQ;CACjB;AACF;AAEA,MAAM,cAAc,2BAAwD;CAC1E,MAAM;CACN,SAAS;CACT,iBAAiB,aAAa;EAC5B,QAAQ,SAAS,UAAU;EAC3B,MAAM,YAAY,OAAO;EACzB,SAAS,SAAS;EAClB,WAAW,UAAU,SAAS,SAAS,cAAc;CACvD;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAS,gBACP,SACA,SACQ;CACR,IAAI,OAAO,SAAS,aAAa,YAC/B,OAAO,QAAQ,SAAS,OAAO;CAEjC,OAAO,SAAS,YAAY;AAC9B;AAEA,SAAgB,YACd,SACA,SACsC;CACtC,OAAO,OAAO,GAAG,SAAkC;EACjD,MAAM,UAAU,KAAK;EAErB,OAAO,YAAY,UACjB,SACA,mBAAmB,SAAS,gBAAgB,SAAS,OAAO,CAAC,GAC7D,OAAO,WACL,wBAAwB,QAAQ,SAAS,YAAY;GACnD,sBACE,OAAO,QACP,kBAAkB,OAAO,GACzB,SAAS,gBAAgB,OAAO,CAClC;GACA,OAAO,QAAQ,GAAG,IAAI;EACxB,CAAC,CACL;CACF;AACF"}
package/dist/nitro.cjs CHANGED
@@ -1,7 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_integration = require('./integration-guh7BHTF.cjs');
3
+ const require_toolkit_storage = require('./toolkit/storage.cjs');
2
4
  const require_core = require('./core.cjs');
3
5
  let autotel = require("autotel");
4
- let node_async_hooks = require("node:async_hooks");
5
6
 
6
7
  //#region src/nitro.ts
7
8
  function enrichFromEvent(event) {
@@ -12,56 +13,47 @@ function enrichFromEvent(event) {
12
13
  ...typeof event.context?.requestId === "string" ? { "http.request.id": event.context.requestId } : {}
13
14
  };
14
15
  }
16
+ const { storage: nitroLoggerStorage, useLogger: storageUseLogger } = require_toolkit_storage.createLoggerStorage("request context. Wrap handlers with withAutotelEventHandler() first.");
15
17
  const baseUseLogger = require_core.createUseLogger({
16
18
  adapterName: "nitro",
17
19
  enrich: enrichFromEvent
18
20
  });
19
- const nitroLoggerStorage = new node_async_hooks.AsyncLocalStorage();
20
21
  function useLogger(event, serviceOrOptions) {
21
- const logger = nitroLoggerStorage.getStore() ?? (typeof serviceOrOptions === "string" ? baseUseLogger(event) : baseUseLogger(event, serviceOrOptions));
22
- if (typeof serviceOrOptions === "string" && serviceOrOptions.length > 0) logger.set({ service: serviceOrOptions });
23
- return logger;
22
+ try {
23
+ const logger = storageUseLogger();
24
+ if (typeof serviceOrOptions === "string" && serviceOrOptions.length > 0) logger.set({ service: serviceOrOptions });
25
+ return logger;
26
+ } catch {
27
+ const logger = typeof serviceOrOptions === "string" ? baseUseLogger(event) : baseUseLogger(event, serviceOrOptions);
28
+ if (typeof serviceOrOptions === "string" && serviceOrOptions.length > 0) logger.set({ service: serviceOrOptions });
29
+ return logger;
30
+ }
24
31
  }
25
- function withAutotelEventHandler(handler, options) {
26
- return async (event) => {
27
- return await (0, autotel.trace)({ name: typeof options?.spanName === "function" ? options.spanName(event) : options?.spanName ?? `nitro.${event.method ?? "request"}` }, (ctx) => async (innerEvent) => {
28
- const log = (0, autotel.getRequestLogger)(ctx, options?.requestLoggerOptions);
29
- const auto = enrichFromEvent(innerEvent);
30
- if (auto && Object.keys(auto).length > 0) log.set(auto);
31
- const custom = options?.enrich?.(innerEvent);
32
- if (custom && Object.keys(custom).length > 0) log.set(custom);
33
- try {
34
- return await nitroLoggerStorage.run(log, async () => handler(innerEvent));
35
- } finally {
36
- if (options?.autoEmit !== false) log.emitNow();
37
- }
38
- })(event);
39
- };
32
+ const integration = require_integration.defineFrameworkIntegration({
33
+ name: "nitro",
34
+ storage: nitroLoggerStorage,
35
+ extractRequest: (event) => ({
36
+ method: event.method ?? "GET",
37
+ path: event.path ?? "/",
38
+ requestId: typeof event.context?.requestId === "string" ? event.context.requestId : void 0
39
+ }),
40
+ attachLogger: () => {}
41
+ });
42
+ function resolveSpanName(event, options) {
43
+ if (typeof options?.spanName === "function") return options.spanName(event);
44
+ return options?.spanName ?? `nitro.${event.method ?? "request"}`;
40
45
  }
41
- function createNitroAdapter(options) {
42
- const toolkit = require_core.createAdapterToolkit({
43
- adapterName: "nitro",
44
- enrich: (event) => ({
45
- ...enrichFromEvent(event),
46
- ...options?.enrich?.(event) ?? {}
47
- })
48
- });
49
- return {
50
- withAutotelEventHandler: (handler) => withAutotelEventHandler(handler, options),
51
- useLogger,
52
- parseError: toolkit.parseError,
53
- createStructuredError: toolkit.createStructuredError,
54
- createDrainPipeline: toolkit.createDrainPipeline
55
- };
46
+ function withAutotelEventHandler(handler, options) {
47
+ return async (event) => integration.runTraced(event, require_integration.buildTracedOptions(options, resolveSpanName(event, options)), async (handle) => require_integration.runWithIntegratedHandle(handle, options, async () => {
48
+ require_integration.applyLoggerEnrichment(handle.logger, enrichFromEvent(event), options?.enrichRequest?.(event));
49
+ return handler(event);
50
+ }));
56
51
  }
57
- const nitroToolkit = require_core.createAdapterToolkit({
58
- adapterName: "nitro",
59
- enrich: enrichFromEvent
60
- });
61
52
 
62
53
  //#endregion
63
- exports.createNitroAdapter = createNitroAdapter;
64
- exports.nitroToolkit = nitroToolkit;
54
+ exports.createDrainPipeline = autotel.createDrainPipeline;
55
+ exports.createStructuredError = autotel.createStructuredError;
56
+ exports.parseError = autotel.parseError;
65
57
  exports.useLogger = useLogger;
66
58
  exports.withAutotelEventHandler = withAutotelEventHandler;
67
59
  //# sourceMappingURL=nitro.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.cjs","names":["createUseLogger","AsyncLocalStorage","createAdapterToolkit"],"sources":["../src/nitro.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n getRequestLogger,\n trace,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport { createAdapterToolkit, createUseLogger } from './core';\n\nexport interface NitroEventLike {\n method?: string;\n path?: string;\n context?: Record<string, unknown>;\n}\n\nexport interface NitroWithAutotelOptions {\n spanName?: string | ((event: NitroEventLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrich?: (event: NitroEventLike) => Record<string, unknown> | undefined;\n /** Emit one wide event automatically when the handler settles. Default `true`. */\n autoEmit?: boolean;\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 baseUseLogger = createUseLogger<NitroEventLike>({\n adapterName: 'nitro',\n enrich: enrichFromEvent,\n});\nconst nitroLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nexport function useLogger(\n event?: NitroEventLike,\n serviceOrOptions?: string | RequestLoggerOptions,\n): RequestLogger {\n const stored = nitroLoggerStorage.getStore();\n const logger = stored ??\n (\n typeof serviceOrOptions === 'string'\n ? baseUseLogger(event)\n : baseUseLogger(event, serviceOrOptions)\n );\n\n if (typeof serviceOrOptions === 'string' && serviceOrOptions.length > 0) {\n logger.set({ service: serviceOrOptions });\n }\n\n return logger;\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 const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(event)\n : (options?.spanName ?? `nitro.${event.method ?? 'request'}`);\n\n const wrapped = trace({ name: spanName }, (ctx) => async (innerEvent: TEvent) => {\n const log = getRequestLogger(ctx, options?.requestLoggerOptions);\n const auto = enrichFromEvent(innerEvent);\n if (auto && Object.keys(auto).length > 0) {\n log.set(auto);\n }\n const custom = options?.enrich?.(innerEvent);\n if (custom && Object.keys(custom).length > 0) {\n log.set(custom);\n }\n try {\n return await nitroLoggerStorage.run(log, async () =>\n handler(innerEvent),\n );\n } finally {\n if (options?.autoEmit !== false) {\n log.emitNow();\n }\n }\n });\n\n return await wrapped(event);\n };\n}\n\nexport function createNitroAdapter(options?: NitroWithAutotelOptions) {\n const toolkit = createAdapterToolkit<NitroEventLike>({\n adapterName: 'nitro',\n enrich: (event) => ({\n ...enrichFromEvent(event),\n ...(options?.enrich?.(event) ?? {}),\n }),\n });\n\n return {\n withAutotelEventHandler: <TEvent extends NitroEventLike, TReturn>(\n handler: (event: TEvent) => TReturn | Promise<TReturn>,\n ) => withAutotelEventHandler(handler, options),\n useLogger,\n parseError: toolkit.parseError,\n createStructuredError: toolkit.createStructuredError,\n createDrainPipeline: toolkit.createDrainPipeline,\n };\n}\n\nexport const nitroToolkit = createAdapterToolkit<NitroEventLike>({\n adapterName: 'nitro',\n enrich: enrichFromEvent,\n});\n"],"mappings":";;;;;;AAuBA,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,gBAAgBA,6BAAgC;CACpD,aAAa;CACb,QAAQ;AACV,CAAC;AACD,MAAM,qBAAqB,IAAIC,mCAAiC;AAEhE,SAAgB,UACd,OACA,kBACe;CAEf,MAAM,SADS,mBAAmB,SACd,MAElB,OAAO,qBAAqB,WACxB,cAAc,KAAK,IACnB,cAAc,OAAO,gBAAgB;CAG3C,IAAI,OAAO,qBAAqB,YAAY,iBAAiB,SAAS,GACpE,OAAO,IAAI,EAAE,SAAS,iBAAiB,CAAC;CAG1C,OAAO;AACT;AAEA,SAAgB,wBACd,SACA,SACqC;CACrC,OAAO,OAAO,UAAoC;EA2BhD,OAAO,yBArBe,EAAE,MAJtB,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,KAAK,IACrB,SAAS,YAAY,SAAS,MAAM,UAAU,YAEd,IAAI,QAAQ,OAAO,eAAuB;GAC/E,MAAM,oCAAuB,KAAK,SAAS,oBAAoB;GAC/D,MAAM,OAAO,gBAAgB,UAAU;GACvC,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GACrC,IAAI,IAAI,IAAI;GAEd,MAAM,SAAS,SAAS,SAAS,UAAU;GAC3C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GACzC,IAAI,IAAI,MAAM;GAEhB,IAAI;IACF,OAAO,MAAM,mBAAmB,IAAI,KAAK,YACvC,QAAQ,UAAU,CACpB;GACF,UAAU;IACR,IAAI,SAAS,aAAa,OACxB,IAAI,QAAQ;GAEhB;EACF,CAEmB,CAAC,CAAC,KAAK;CAC5B;AACF;AAEA,SAAgB,mBAAmB,SAAmC;CACpE,MAAM,UAAUC,kCAAqC;EACnD,aAAa;EACb,SAAS,WAAW;GAClB,GAAG,gBAAgB,KAAK;GACxB,GAAI,SAAS,SAAS,KAAK,KAAK,CAAC;EACnC;CACF,CAAC;CAED,OAAO;EACL,0BACE,YACG,wBAAwB,SAAS,OAAO;EAC7C;EACA,YAAY,QAAQ;EACpB,uBAAuB,QAAQ;EAC/B,qBAAqB,QAAQ;CAC/B;AACF;AAEA,MAAa,eAAeA,kCAAqC;CAC/D,aAAa;CACb,QAAQ;AACV,CAAC"}
1
+ {"version":3,"file":"nitro.cjs","names":["createLoggerStorage","createUseLogger","defineFrameworkIntegration","buildTracedOptions","runWithIntegratedHandle"],"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,qBAC9CA,4CACE,sEACF;AAEF,MAAM,gBAAgBC,6BAAgC;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,cAAcC,+CAA2C;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,OACAC,uCAAmB,SAAS,gBAAgB,OAAO,OAAO,CAAC,GAC3D,OAAO,WACLC,4CAAwB,QAAQ,SAAS,YAAY;EACnD,0CACE,OAAO,QACP,gBAAgB,KAAK,GACrB,SAAS,gBAAgB,KAAK,CAChC;EACA,OAAO,QAAQ,KAAK;CACtB,CAAC,CACL;AACJ"}
package/dist/nitro.d.cts CHANGED
@@ -1,29 +1,18 @@
1
- import { AdapterToolkit } from "./core.cjs";
2
- import { RequestLogger, RequestLoggerOptions } from "autotel";
3
-
1
+ import { n as FrameworkHandlerOptions } from "./integration-DI-1RuTh.cjs";
2
+ import "./core.cjs";
3
+ import { RequestLogger, RequestLoggerOptions, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
  //#region src/nitro.d.ts
5
5
  interface NitroEventLike {
6
6
  method?: string;
7
7
  path?: string;
8
8
  context?: Record<string, unknown>;
9
9
  }
10
- interface NitroWithAutotelOptions {
10
+ interface NitroWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanName'> {
11
11
  spanName?: string | ((event: NitroEventLike) => string);
12
- requestLoggerOptions?: RequestLoggerOptions;
13
- enrich?: (event: NitroEventLike) => Record<string, unknown> | undefined;
14
- /** Emit one wide event automatically when the handler settles. Default `true`. */
15
- autoEmit?: boolean;
12
+ enrichRequest?: (event: NitroEventLike) => Record<string, unknown> | undefined;
16
13
  }
17
14
  declare function useLogger(event?: NitroEventLike, serviceOrOptions?: string | RequestLoggerOptions): RequestLogger;
18
15
  declare function withAutotelEventHandler<TEvent extends NitroEventLike, TReturn>(handler: (event: TEvent) => TReturn | Promise<TReturn>, options?: NitroWithAutotelOptions): (event: TEvent) => Promise<TReturn>;
19
- declare function createNitroAdapter(options?: NitroWithAutotelOptions): {
20
- withAutotelEventHandler: <TEvent extends NitroEventLike, TReturn>(handler: (event: TEvent) => TReturn | Promise<TReturn>) => (event: TEvent) => Promise<TReturn>;
21
- useLogger: typeof useLogger;
22
- parseError: (error: unknown) => import("autotel").ParsedError;
23
- createStructuredError: (input: import("autotel").StructuredErrorInput) => import("autotel").StructuredError;
24
- createDrainPipeline: <T = unknown>(options?: import("autotel").DrainPipelineOptions<T>) => (drain: (batch: T[]) => void | Promise<void>) => import("autotel").PipelineDrainFn<T>;
25
- };
26
- declare const nitroToolkit: AdapterToolkit<NitroEventLike>;
27
16
  //#endregion
28
- export { NitroEventLike, NitroWithAutotelOptions, createNitroAdapter, nitroToolkit, useLogger, withAutotelEventHandler };
17
+ export { NitroEventLike, NitroWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
29
18
  //# sourceMappingURL=nitro.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.d.cts","names":[],"sources":["../src/nitro.ts"],"mappings":";;;;UASiB,cAAA;EACf,MAAA;EACA,IAAA;EACA,OAAA,GAAU,MAAM;AAAA;AAAA,UAGD,uBAAA;EACf,QAAA,cAAsB,KAAA,EAAO,cAAA;EAC7B,oBAAA,GAAuB,oBAAA;EACvB,MAAA,IAAU,KAAA,EAAO,cAAA,KAAmB,MAAA;EANpC;EAQA,QAAA;AAAA;AAAA,iBAuBc,SAAA,CACd,KAAA,GAAQ,cAAA,EACR,gBAAA,YAA4B,oBAAA,GAC3B,aAAA;AAAA,iBAgBa,uBAAA,gBAAuC,cAAA,WACrD,OAAA,GAAU,KAAA,EAAO,MAAA,KAAW,OAAA,GAAU,OAAA,CAAQ,OAAA,GAC9C,OAAA,GAAU,uBAAA,IACR,KAAA,EAAO,MAAA,KAAW,OAAA,CAAQ,OAAA;AAAA,iBAgCd,kBAAA,CAAmB,OAAA,GAAU,uBAAA;2CAUA,cAAA,WAAuB,OAAA,GACpD,KAAA,EAAO,MAAA,KAAW,OAAA,GAAU,OAAA,CAAQ,OAAA,OAAQ,KAAA,EAAA,MAAA,KAAA,OAAA,CAAA,OAAA;;;;;;cAS/C,YAAA,EAAY,cAAA,CAAA,cAAA"}
1
+ {"version":3,"file":"nitro.d.cts","names":[],"sources":["../src/nitro.ts"],"mappings":";;;;UAgBiB;EACf;EACA;EACA,UAAU;;UAGK,gCAAgC,KAC/C;EAGA,sBAAsB,OAAO;EAC7B,iBACE,OAAO,mBACJ;;iBA2BS,UACd,QAAQ,gBACR,4BAA4B,uBAC3B;iBA6Ca,wBAAwB,eAAe,gBAAgB,SACrE,UAAU,OAAO,WAAW,UAAU,QAAQ,UAC9C,UAAU,2BACR,OAAO,WAAW,QAAQ"}
package/dist/nitro.d.ts CHANGED
@@ -1,29 +1,18 @@
1
- import { AdapterToolkit } from "./core.js";
2
- import { RequestLogger, RequestLoggerOptions } from "autotel";
3
-
1
+ import { n as FrameworkHandlerOptions } from "./integration-rYoX8QLk.js";
2
+ import "./core.js";
3
+ import { RequestLogger, RequestLoggerOptions, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
4
  //#region src/nitro.d.ts
5
5
  interface NitroEventLike {
6
6
  method?: string;
7
7
  path?: string;
8
8
  context?: Record<string, unknown>;
9
9
  }
10
- interface NitroWithAutotelOptions {
10
+ interface NitroWithAutotelOptions extends Omit<FrameworkHandlerOptions, 'spanName'> {
11
11
  spanName?: string | ((event: NitroEventLike) => string);
12
- requestLoggerOptions?: RequestLoggerOptions;
13
- enrich?: (event: NitroEventLike) => Record<string, unknown> | undefined;
14
- /** Emit one wide event automatically when the handler settles. Default `true`. */
15
- autoEmit?: boolean;
12
+ enrichRequest?: (event: NitroEventLike) => Record<string, unknown> | undefined;
16
13
  }
17
14
  declare function useLogger(event?: NitroEventLike, serviceOrOptions?: string | RequestLoggerOptions): RequestLogger;
18
15
  declare function withAutotelEventHandler<TEvent extends NitroEventLike, TReturn>(handler: (event: TEvent) => TReturn | Promise<TReturn>, options?: NitroWithAutotelOptions): (event: TEvent) => Promise<TReturn>;
19
- declare function createNitroAdapter(options?: NitroWithAutotelOptions): {
20
- withAutotelEventHandler: <TEvent extends NitroEventLike, TReturn>(handler: (event: TEvent) => TReturn | Promise<TReturn>) => (event: TEvent) => Promise<TReturn>;
21
- useLogger: typeof useLogger;
22
- parseError: (error: unknown) => import("autotel").ParsedError;
23
- createStructuredError: (input: import("autotel").StructuredErrorInput) => import("autotel").StructuredError;
24
- createDrainPipeline: <T = unknown>(options?: import("autotel").DrainPipelineOptions<T>) => (drain: (batch: T[]) => void | Promise<void>) => import("autotel").PipelineDrainFn<T>;
25
- };
26
- declare const nitroToolkit: AdapterToolkit<NitroEventLike>;
27
16
  //#endregion
28
- export { NitroEventLike, NitroWithAutotelOptions, createNitroAdapter, nitroToolkit, useLogger, withAutotelEventHandler };
17
+ export { NitroEventLike, NitroWithAutotelOptions, createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
29
18
  //# sourceMappingURL=nitro.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.d.ts","names":[],"sources":["../src/nitro.ts"],"mappings":";;;;UASiB,cAAA;EACf,MAAA;EACA,IAAA;EACA,OAAA,GAAU,MAAM;AAAA;AAAA,UAGD,uBAAA;EACf,QAAA,cAAsB,KAAA,EAAO,cAAA;EAC7B,oBAAA,GAAuB,oBAAA;EACvB,MAAA,IAAU,KAAA,EAAO,cAAA,KAAmB,MAAA;EANpC;EAQA,QAAA;AAAA;AAAA,iBAuBc,SAAA,CACd,KAAA,GAAQ,cAAA,EACR,gBAAA,YAA4B,oBAAA,GAC3B,aAAA;AAAA,iBAgBa,uBAAA,gBAAuC,cAAA,WACrD,OAAA,GAAU,KAAA,EAAO,MAAA,KAAW,OAAA,GAAU,OAAA,CAAQ,OAAA,GAC9C,OAAA,GAAU,uBAAA,IACR,KAAA,EAAO,MAAA,KAAW,OAAA,CAAQ,OAAA;AAAA,iBAgCd,kBAAA,CAAmB,OAAA,GAAU,uBAAA;2CAUA,cAAA,WAAuB,OAAA,GACpD,KAAA,EAAO,MAAA,KAAW,OAAA,GAAU,OAAA,CAAQ,OAAA,OAAQ,KAAA,EAAA,MAAA,KAAA,OAAA,CAAA,OAAA;;;;;;cAS/C,YAAA,EAAY,cAAA,CAAA,cAAA"}
1
+ {"version":3,"file":"nitro.d.ts","names":[],"sources":["../src/nitro.ts"],"mappings":";;;;UAgBiB;EACf;EACA;EACA,UAAU;;UAGK,gCAAgC,KAC/C;EAGA,sBAAsB,OAAO;EAC7B,iBACE,OAAO,mBACJ;;iBA2BS,UACd,QAAQ,gBACR,4BAA4B,uBAC3B;iBA6Ca,wBAAwB,eAAe,gBAAgB,SACrE,UAAU,OAAO,WAAW,UAAU,QAAQ,UAC9C,UAAU,2BACR,OAAO,WAAW,QAAQ"}
package/dist/nitro.js CHANGED
@@ -1,6 +1,7 @@
1
- import { createAdapterToolkit, createUseLogger } from "./core.js";
2
- import { getRequestLogger, trace } from "autotel";
3
- import { AsyncLocalStorage } from "node:async_hooks";
1
+ import { a as runWithIntegratedHandle, i as defineFrameworkIntegration, n as buildTracedOptions, t as applyLoggerEnrichment } from "./integration-IUpfttGT.js";
2
+ import { createLoggerStorage } from "./toolkit/storage.js";
3
+ import { createUseLogger } from "./core.js";
4
+ import { createDrainPipeline, createStructuredError, parseError } from "autotel";
4
5
 
5
6
  //#region src/nitro.ts
6
7
  function enrichFromEvent(event) {
@@ -11,53 +12,43 @@ function enrichFromEvent(event) {
11
12
  ...typeof event.context?.requestId === "string" ? { "http.request.id": event.context.requestId } : {}
12
13
  };
13
14
  }
15
+ const { storage: nitroLoggerStorage, useLogger: storageUseLogger } = createLoggerStorage("request context. Wrap handlers with withAutotelEventHandler() first.");
14
16
  const baseUseLogger = createUseLogger({
15
17
  adapterName: "nitro",
16
18
  enrich: enrichFromEvent
17
19
  });
18
- const nitroLoggerStorage = new AsyncLocalStorage();
19
20
  function useLogger(event, serviceOrOptions) {
20
- const logger = nitroLoggerStorage.getStore() ?? (typeof serviceOrOptions === "string" ? baseUseLogger(event) : baseUseLogger(event, serviceOrOptions));
21
- if (typeof serviceOrOptions === "string" && serviceOrOptions.length > 0) logger.set({ service: serviceOrOptions });
22
- return logger;
21
+ try {
22
+ const logger = storageUseLogger();
23
+ if (typeof serviceOrOptions === "string" && serviceOrOptions.length > 0) logger.set({ service: serviceOrOptions });
24
+ return logger;
25
+ } catch {
26
+ const logger = typeof serviceOrOptions === "string" ? baseUseLogger(event) : baseUseLogger(event, serviceOrOptions);
27
+ if (typeof serviceOrOptions === "string" && serviceOrOptions.length > 0) logger.set({ service: serviceOrOptions });
28
+ return logger;
29
+ }
23
30
  }
24
- function withAutotelEventHandler(handler, options) {
25
- return async (event) => {
26
- return await trace({ name: typeof options?.spanName === "function" ? options.spanName(event) : options?.spanName ?? `nitro.${event.method ?? "request"}` }, (ctx) => async (innerEvent) => {
27
- const log = getRequestLogger(ctx, options?.requestLoggerOptions);
28
- const auto = enrichFromEvent(innerEvent);
29
- if (auto && Object.keys(auto).length > 0) log.set(auto);
30
- const custom = options?.enrich?.(innerEvent);
31
- if (custom && Object.keys(custom).length > 0) log.set(custom);
32
- try {
33
- return await nitroLoggerStorage.run(log, async () => handler(innerEvent));
34
- } finally {
35
- if (options?.autoEmit !== false) log.emitNow();
36
- }
37
- })(event);
38
- };
31
+ const integration = defineFrameworkIntegration({
32
+ name: "nitro",
33
+ storage: nitroLoggerStorage,
34
+ extractRequest: (event) => ({
35
+ method: event.method ?? "GET",
36
+ path: event.path ?? "/",
37
+ requestId: typeof event.context?.requestId === "string" ? event.context.requestId : void 0
38
+ }),
39
+ attachLogger: () => {}
40
+ });
41
+ function resolveSpanName(event, options) {
42
+ if (typeof options?.spanName === "function") return options.spanName(event);
43
+ return options?.spanName ?? `nitro.${event.method ?? "request"}`;
39
44
  }
40
- function createNitroAdapter(options) {
41
- const toolkit = createAdapterToolkit({
42
- adapterName: "nitro",
43
- enrich: (event) => ({
44
- ...enrichFromEvent(event),
45
- ...options?.enrich?.(event) ?? {}
46
- })
47
- });
48
- return {
49
- withAutotelEventHandler: (handler) => withAutotelEventHandler(handler, options),
50
- useLogger,
51
- parseError: toolkit.parseError,
52
- createStructuredError: toolkit.createStructuredError,
53
- createDrainPipeline: toolkit.createDrainPipeline
54
- };
45
+ function withAutotelEventHandler(handler, options) {
46
+ return async (event) => integration.runTraced(event, buildTracedOptions(options, resolveSpanName(event, options)), async (handle) => runWithIntegratedHandle(handle, options, async () => {
47
+ applyLoggerEnrichment(handle.logger, enrichFromEvent(event), options?.enrichRequest?.(event));
48
+ return handler(event);
49
+ }));
55
50
  }
56
- const nitroToolkit = createAdapterToolkit({
57
- adapterName: "nitro",
58
- enrich: enrichFromEvent
59
- });
60
51
 
61
52
  //#endregion
62
- export { createNitroAdapter, nitroToolkit, useLogger, withAutotelEventHandler };
53
+ export { createDrainPipeline, createStructuredError, parseError, useLogger, withAutotelEventHandler };
63
54
  //# sourceMappingURL=nitro.js.map
package/dist/nitro.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.js","names":[],"sources":["../src/nitro.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n getRequestLogger,\n trace,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport { createAdapterToolkit, createUseLogger } from './core';\n\nexport interface NitroEventLike {\n method?: string;\n path?: string;\n context?: Record<string, unknown>;\n}\n\nexport interface NitroWithAutotelOptions {\n spanName?: string | ((event: NitroEventLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrich?: (event: NitroEventLike) => Record<string, unknown> | undefined;\n /** Emit one wide event automatically when the handler settles. Default `true`. */\n autoEmit?: boolean;\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 baseUseLogger = createUseLogger<NitroEventLike>({\n adapterName: 'nitro',\n enrich: enrichFromEvent,\n});\nconst nitroLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nexport function useLogger(\n event?: NitroEventLike,\n serviceOrOptions?: string | RequestLoggerOptions,\n): RequestLogger {\n const stored = nitroLoggerStorage.getStore();\n const logger = stored ??\n (\n typeof serviceOrOptions === 'string'\n ? baseUseLogger(event)\n : baseUseLogger(event, serviceOrOptions)\n );\n\n if (typeof serviceOrOptions === 'string' && serviceOrOptions.length > 0) {\n logger.set({ service: serviceOrOptions });\n }\n\n return logger;\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 const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(event)\n : (options?.spanName ?? `nitro.${event.method ?? 'request'}`);\n\n const wrapped = trace({ name: spanName }, (ctx) => async (innerEvent: TEvent) => {\n const log = getRequestLogger(ctx, options?.requestLoggerOptions);\n const auto = enrichFromEvent(innerEvent);\n if (auto && Object.keys(auto).length > 0) {\n log.set(auto);\n }\n const custom = options?.enrich?.(innerEvent);\n if (custom && Object.keys(custom).length > 0) {\n log.set(custom);\n }\n try {\n return await nitroLoggerStorage.run(log, async () =>\n handler(innerEvent),\n );\n } finally {\n if (options?.autoEmit !== false) {\n log.emitNow();\n }\n }\n });\n\n return await wrapped(event);\n };\n}\n\nexport function createNitroAdapter(options?: NitroWithAutotelOptions) {\n const toolkit = createAdapterToolkit<NitroEventLike>({\n adapterName: 'nitro',\n enrich: (event) => ({\n ...enrichFromEvent(event),\n ...(options?.enrich?.(event) ?? {}),\n }),\n });\n\n return {\n withAutotelEventHandler: <TEvent extends NitroEventLike, TReturn>(\n handler: (event: TEvent) => TReturn | Promise<TReturn>,\n ) => withAutotelEventHandler(handler, options),\n useLogger,\n parseError: toolkit.parseError,\n createStructuredError: toolkit.createStructuredError,\n createDrainPipeline: toolkit.createDrainPipeline,\n };\n}\n\nexport const nitroToolkit = createAdapterToolkit<NitroEventLike>({\n adapterName: 'nitro',\n enrich: enrichFromEvent,\n});\n"],"mappings":";;;;;AAuBA,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,gBAAgB,gBAAgC;CACpD,aAAa;CACb,QAAQ;AACV,CAAC;AACD,MAAM,qBAAqB,IAAI,kBAAiC;AAEhE,SAAgB,UACd,OACA,kBACe;CAEf,MAAM,SADS,mBAAmB,SACd,MAElB,OAAO,qBAAqB,WACxB,cAAc,KAAK,IACnB,cAAc,OAAO,gBAAgB;CAG3C,IAAI,OAAO,qBAAqB,YAAY,iBAAiB,SAAS,GACpE,OAAO,IAAI,EAAE,SAAS,iBAAiB,CAAC;CAG1C,OAAO;AACT;AAEA,SAAgB,wBACd,SACA,SACqC;CACrC,OAAO,OAAO,UAAoC;EA2BhD,OAAO,MArBS,MAAM,EAAE,MAJtB,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,KAAK,IACrB,SAAS,YAAY,SAAS,MAAM,UAAU,YAEd,IAAI,QAAQ,OAAO,eAAuB;GAC/E,MAAM,MAAM,iBAAiB,KAAK,SAAS,oBAAoB;GAC/D,MAAM,OAAO,gBAAgB,UAAU;GACvC,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GACrC,IAAI,IAAI,IAAI;GAEd,MAAM,SAAS,SAAS,SAAS,UAAU;GAC3C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GACzC,IAAI,IAAI,MAAM;GAEhB,IAAI;IACF,OAAO,MAAM,mBAAmB,IAAI,KAAK,YACvC,QAAQ,UAAU,CACpB;GACF,UAAU;IACR,IAAI,SAAS,aAAa,OACxB,IAAI,QAAQ;GAEhB;EACF,CAEmB,CAAC,CAAC,KAAK;CAC5B;AACF;AAEA,SAAgB,mBAAmB,SAAmC;CACpE,MAAM,UAAU,qBAAqC;EACnD,aAAa;EACb,SAAS,WAAW;GAClB,GAAG,gBAAgB,KAAK;GACxB,GAAI,SAAS,SAAS,KAAK,KAAK,CAAC;EACnC;CACF,CAAC;CAED,OAAO;EACL,0BACE,YACG,wBAAwB,SAAS,OAAO;EAC7C;EACA,YAAY,QAAQ;EACpB,uBAAuB,QAAQ;EAC/B,qBAAqB,QAAQ;CAC/B;AACF;AAEA,MAAa,eAAe,qBAAqC;CAC/D,aAAa;CACb,QAAQ;AACV,CAAC"}
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"}
@@ -0,0 +1,48 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_integration = require('./integration-guh7BHTF.cjs');
3
+ const require_toolkit_storage = require('./toolkit/storage.cjs');
4
+ let autotel = require("autotel");
5
+
6
+ //#region src/sveltekit.ts
7
+ const { storage: svelteKitLoggerStorage, useLogger: storageUseLogger } = require_toolkit_storage.createLoggerStorage("request context. Register autotelHandle() in hooks.server.ts first.");
8
+ function enrichFromEvent(event) {
9
+ if (!event) return void 0;
10
+ return {
11
+ "http.request.method": event.request.method,
12
+ "url.full": event.url.toString(),
13
+ "http.route": event.route?.id ?? event.url.pathname,
14
+ ...event.request.headers.get("x-request-id") ? { "http.request.id": event.request.headers.get("x-request-id") } : {}
15
+ };
16
+ }
17
+ const integration = require_integration.defineFrameworkIntegration({
18
+ name: "sveltekit",
19
+ storage: svelteKitLoggerStorage,
20
+ extractRequest: (event) => ({
21
+ method: event.request.method,
22
+ path: event.url.pathname,
23
+ headers: event.request.headers,
24
+ requestId: event.request.headers.get("x-request-id") ?? void 0
25
+ }),
26
+ attachLogger: (event, logger) => {
27
+ event.locals ??= {};
28
+ event.locals.autotelLogger = logger;
29
+ }
30
+ });
31
+ function useLogger() {
32
+ return storageUseLogger();
33
+ }
34
+ function autotelHandle(options = {}) {
35
+ return async ({ event, resolve }) => integration.runTraced(event, options, async (handle) => {
36
+ if (handle.skipped) return handle.runWith(() => resolve(event));
37
+ require_integration.applyLoggerEnrichment(handle.logger, enrichFromEvent(event), options.enrichRequest?.(event));
38
+ return require_integration.runWithIntegratedHandle(handle, options, () => resolve(event));
39
+ });
40
+ }
41
+
42
+ //#endregion
43
+ exports.autotelHandle = autotelHandle;
44
+ exports.createDrainPipeline = autotel.createDrainPipeline;
45
+ exports.createStructuredError = autotel.createStructuredError;
46
+ exports.parseError = autotel.parseError;
47
+ exports.useLogger = useLogger;
48
+ //# sourceMappingURL=sveltekit.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sveltekit.cjs","names":["createLoggerStorage","defineFrameworkIntegration","runWithIntegratedHandle"],"sources":["../src/sveltekit.ts"],"sourcesContent":["import {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport type { FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n} from './toolkit/integration';\n\nexport interface SvelteKitEventLike {\n request: Request;\n url: URL;\n route?: { id?: string };\n locals?: Record<string, unknown>;\n}\n\nexport interface SvelteKitHandleInput {\n event: SvelteKitEventLike;\n resolve: (event: SvelteKitEventLike) => Response | Promise<Response>;\n}\n\nexport interface SvelteKitWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n event: SvelteKitEventLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: svelteKitLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Register autotelHandle() in hooks.server.ts first.',\n );\n\nfunction enrichFromEvent(\n event?: SvelteKitEventLike,\n): Record<string, unknown> | undefined {\n if (!event) return undefined;\n\n return {\n 'http.request.method': event.request.method,\n 'url.full': event.url.toString(),\n 'http.route': event.route?.id ?? event.url.pathname,\n ...(event.request.headers.get('x-request-id')\n ? { 'http.request.id': event.request.headers.get('x-request-id')! }\n : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<SvelteKitEventLike>({\n name: 'sveltekit',\n storage: svelteKitLoggerStorage,\n extractRequest: (event) => ({\n method: event.request.method,\n path: event.url.pathname,\n headers: event.request.headers,\n requestId: event.request.headers.get('x-request-id') ?? undefined,\n }),\n attachLogger: (event, logger) => {\n event.locals ??= {};\n event.locals.autotelLogger = logger;\n },\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport function autotelHandle(options: SvelteKitWithAutotelOptions = {}) {\n return async ({ event, resolve }: SvelteKitHandleInput): Promise<Response> =>\n integration.runTraced(event, options, async (handle) => {\n if (handle.skipped) {\n return handle.runWith(() => resolve(event));\n }\n\n applyLoggerEnrichment(\n handle.logger,\n enrichFromEvent(event),\n options.enrichRequest?.(event),\n );\n\n return runWithIntegratedHandle(handle, options, () => resolve(event));\n });\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAgCA,MAAM,EAAE,SAAS,wBAAwB,WAAW,qBAClDA,4CACE,qEACF;AAEF,SAAS,gBACP,OACqC;CACrC,IAAI,CAAC,OAAO,OAAO;CAEnB,OAAO;EACL,uBAAuB,MAAM,QAAQ;EACrC,YAAY,MAAM,IAAI,SAAS;EAC/B,cAAc,MAAM,OAAO,MAAM,MAAM,IAAI;EAC3C,GAAI,MAAM,QAAQ,QAAQ,IAAI,cAAc,IACxC,EAAE,mBAAmB,MAAM,QAAQ,QAAQ,IAAI,cAAc,EAAG,IAChE,CAAC;CACP;AACF;AAEA,MAAM,cAAcC,+CAA+C;CACjE,MAAM;CACN,SAAS;CACT,iBAAiB,WAAW;EAC1B,QAAQ,MAAM,QAAQ;EACtB,MAAM,MAAM,IAAI;EAChB,SAAS,MAAM,QAAQ;EACvB,WAAW,MAAM,QAAQ,QAAQ,IAAI,cAAc,KAAK;CAC1D;CACA,eAAe,OAAO,WAAW;EAC/B,MAAM,WAAW,CAAC;EAClB,MAAM,OAAO,gBAAgB;CAC/B;AACF,CAAC;AAED,SAAgB,YAA2B;CACzC,OAAO,iBAAiB;AAC1B;AAEA,SAAgB,cAAc,UAAuC,CAAC,GAAG;CACvE,OAAO,OAAO,EAAE,OAAO,cACrB,YAAY,UAAU,OAAO,SAAS,OAAO,WAAW;EACtD,IAAI,OAAO,SACT,OAAO,OAAO,cAAc,QAAQ,KAAK,CAAC;EAG5C,0CACE,OAAO,QACP,gBAAgB,KAAK,GACrB,QAAQ,gBAAgB,KAAK,CAC/B;EAEA,OAAOC,4CAAwB,QAAQ,eAAe,QAAQ,KAAK,CAAC;CACtE,CAAC;AACL"}
@@ -0,0 +1,24 @@
1
+ import { n as FrameworkHandlerOptions } from "./integration-DI-1RuTh.cjs";
2
+ import "./core.cjs";
3
+ import { RequestLogger, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
+ //#region src/sveltekit.d.ts
5
+ interface SvelteKitEventLike {
6
+ request: Request;
7
+ url: URL;
8
+ route?: {
9
+ id?: string;
10
+ };
11
+ locals?: Record<string, unknown>;
12
+ }
13
+ interface SvelteKitHandleInput {
14
+ event: SvelteKitEventLike;
15
+ resolve: (event: SvelteKitEventLike) => Response | Promise<Response>;
16
+ }
17
+ interface SvelteKitWithAutotelOptions extends FrameworkHandlerOptions {
18
+ enrichRequest?: (event: SvelteKitEventLike) => Record<string, unknown> | undefined;
19
+ }
20
+ declare function useLogger(): RequestLogger;
21
+ declare function autotelHandle(options?: SvelteKitWithAutotelOptions): ({ event, resolve }: SvelteKitHandleInput) => Promise<Response>;
22
+ //#endregion
23
+ export { SvelteKitEventLike, SvelteKitHandleInput, SvelteKitWithAutotelOptions, autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
24
+ //# sourceMappingURL=sveltekit.d.cts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,24 @@
1
+ import { n as FrameworkHandlerOptions } from "./integration-rYoX8QLk.js";
2
+ import "./core.js";
3
+ import { RequestLogger, createDrainPipeline, createStructuredError, parseError } from "autotel";
4
+ //#region src/sveltekit.d.ts
5
+ interface SvelteKitEventLike {
6
+ request: Request;
7
+ url: URL;
8
+ route?: {
9
+ id?: string;
10
+ };
11
+ locals?: Record<string, unknown>;
12
+ }
13
+ interface SvelteKitHandleInput {
14
+ event: SvelteKitEventLike;
15
+ resolve: (event: SvelteKitEventLike) => Response | Promise<Response>;
16
+ }
17
+ interface SvelteKitWithAutotelOptions extends FrameworkHandlerOptions {
18
+ enrichRequest?: (event: SvelteKitEventLike) => Record<string, unknown> | undefined;
19
+ }
20
+ declare function useLogger(): RequestLogger;
21
+ declare function autotelHandle(options?: SvelteKitWithAutotelOptions): ({ event, resolve }: SvelteKitHandleInput) => Promise<Response>;
22
+ //#endregion
23
+ export { SvelteKitEventLike, SvelteKitHandleInput, SvelteKitWithAutotelOptions, autotelHandle, createDrainPipeline, createStructuredError, parseError, useLogger };
24
+ //# sourceMappingURL=sveltekit.d.ts.map
@@ -0,0 +1 @@
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"}