autotel-adapters 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cloudflare.cjs +1 -2
- package/dist/cloudflare.d.cts +1 -2
- package/dist/cloudflare.d.ts +1 -2
- package/dist/cloudflare.js +1 -2
- package/dist/core.cjs +1 -2
- package/dist/core.d.cts +1 -2
- package/dist/core.d.ts +1 -2
- package/dist/core.js +1 -2
- package/dist/elysia.cjs +1 -2
- package/dist/elysia.d.cts +1 -2
- package/dist/elysia.d.ts +1 -2
- package/dist/elysia.js +1 -2
- package/dist/express.cjs +1 -2
- package/dist/express.d.cts +1 -2
- package/dist/express.d.ts +1 -2
- package/dist/express.js +1 -2
- package/dist/fastify.cjs +1 -2
- package/dist/fastify.d.cts +1 -2
- package/dist/fastify.d.ts +1 -2
- package/dist/fastify.js +1 -2
- package/dist/hono.cjs +1 -2
- package/dist/hono.d.cts +1 -2
- package/dist/hono.d.ts +1 -2
- package/dist/hono.js +1 -2
- package/dist/integration-BAs5uTiD.d.ts +1 -2
- package/dist/integration-Cc8bXel_.cjs +1 -2
- package/dist/integration-D_rlU8Nx.d.cts +1 -2
- package/dist/integration-DvibHRzI.js +1 -2
- package/dist/nestjs.cjs +1 -2
- package/dist/nestjs.d.cts +1 -2
- package/dist/nestjs.d.ts +1 -2
- package/dist/nestjs.js +1 -2
- package/dist/next.cjs +1 -2
- package/dist/next.d.cts +1 -2
- package/dist/next.d.ts +1 -2
- package/dist/next.js +1 -2
- package/dist/nitro.cjs +1 -2
- package/dist/nitro.d.cts +1 -2
- package/dist/nitro.d.ts +1 -2
- package/dist/nitro.js +1 -2
- package/dist/sveltekit.cjs +1 -2
- package/dist/sveltekit.d.cts +1 -2
- package/dist/sveltekit.d.ts +1 -2
- package/dist/sveltekit.js +1 -2
- package/dist/tanstack.cjs +1 -2
- package/dist/tanstack.d.cts +1 -2
- package/dist/tanstack.d.ts +1 -2
- package/dist/tanstack.js +1 -2
- package/dist/toolkit/index.d.cts +1 -2
- package/dist/toolkit/index.d.ts +1 -2
- package/dist/toolkit/storage.cjs +1 -2
- package/dist/toolkit/storage.d.cts +1 -2
- package/dist/toolkit/storage.d.ts +1 -2
- package/dist/toolkit/storage.js +1 -2
- package/package.json +6 -6
- package/dist/cloudflare.cjs.map +0 -1
- package/dist/cloudflare.d.cts.map +0 -1
- package/dist/cloudflare.d.ts.map +0 -1
- package/dist/cloudflare.js.map +0 -1
- package/dist/core.cjs.map +0 -1
- package/dist/core.d.cts.map +0 -1
- package/dist/core.d.ts.map +0 -1
- package/dist/core.js.map +0 -1
- package/dist/elysia.cjs.map +0 -1
- package/dist/elysia.d.cts.map +0 -1
- package/dist/elysia.d.ts.map +0 -1
- package/dist/elysia.js.map +0 -1
- package/dist/express.cjs.map +0 -1
- package/dist/express.d.cts.map +0 -1
- package/dist/express.d.ts.map +0 -1
- package/dist/express.js.map +0 -1
- package/dist/fastify.cjs.map +0 -1
- package/dist/fastify.d.cts.map +0 -1
- package/dist/fastify.d.ts.map +0 -1
- package/dist/fastify.js.map +0 -1
- package/dist/hono.cjs.map +0 -1
- package/dist/hono.d.cts.map +0 -1
- package/dist/hono.d.ts.map +0 -1
- package/dist/hono.js.map +0 -1
- package/dist/integration-BAs5uTiD.d.ts.map +0 -1
- package/dist/integration-Cc8bXel_.cjs.map +0 -1
- package/dist/integration-D_rlU8Nx.d.cts.map +0 -1
- package/dist/integration-DvibHRzI.js.map +0 -1
- package/dist/nestjs.cjs.map +0 -1
- package/dist/nestjs.d.cts.map +0 -1
- package/dist/nestjs.d.ts.map +0 -1
- package/dist/nestjs.js.map +0 -1
- package/dist/next.cjs.map +0 -1
- package/dist/next.d.cts.map +0 -1
- package/dist/next.d.ts.map +0 -1
- package/dist/next.js.map +0 -1
- package/dist/nitro.cjs.map +0 -1
- package/dist/nitro.d.cts.map +0 -1
- package/dist/nitro.d.ts.map +0 -1
- package/dist/nitro.js.map +0 -1
- package/dist/sveltekit.cjs.map +0 -1
- package/dist/sveltekit.d.cts.map +0 -1
- package/dist/sveltekit.d.ts.map +0 -1
- package/dist/sveltekit.js.map +0 -1
- package/dist/tanstack.cjs.map +0 -1
- package/dist/tanstack.d.cts.map +0 -1
- package/dist/tanstack.d.ts.map +0 -1
- package/dist/tanstack.js.map +0 -1
- package/dist/toolkit/index.d.cts.map +0 -1
- package/dist/toolkit/index.d.ts.map +0 -1
- package/dist/toolkit/storage.cjs.map +0 -1
- package/dist/toolkit/storage.d.cts.map +0 -1
- package/dist/toolkit/storage.d.ts.map +0 -1
- package/dist/toolkit/storage.js.map +0 -1
package/dist/core.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n getRequestLogger,\n type ParsedError,\n type RequestLogger,\n type RequestLoggerOptions,\n type RequestLogSnapshot,\n type DrainPipelineOptions,\n type PipelineDrainFn,\n type StructuredError,\n type StructuredErrorInput,\n withTracing,\n} from 'autotel';\nimport {\n mergeRequestLoggerOptions,\n shouldInstrumentPath,\n type RouteAdapterOptions,\n} from './toolkit/middleware';\nimport {\n toRouteAdapterOptions,\n type FrameworkHandlerOptions,\n type IntegratedCompletionOptions,\n} from './toolkit/integration';\n\nexport { toRouteAdapterOptions };\nexport type {\n RouteAdapterOptions,\n FrameworkHandlerOptions,\n IntegratedCompletionOptions,\n};\nexport type BaseAdapterOptions = RouteAdapterOptions;\n\nexport interface AdapterUseLoggerOptions<TContext> {\n adapterName: string;\n enrich?: (context: TContext) => Record<string, unknown> | undefined;\n}\n\nexport function createUseLogger<TContext = unknown>(\n options: AdapterUseLoggerOptions<TContext>,\n) {\n return function useLogger(\n context?: TContext,\n requestLoggerOptions?: RequestLoggerOptions,\n ): RequestLogger {\n let logger: RequestLogger;\n try {\n logger = getRequestLogger(undefined, requestLoggerOptions);\n } catch {\n throw new Error(\n `[autotel-adapters/${options.adapterName}] No active trace context. ` +\n `Wrap your handler with autotel trace instrumentation before calling useLogger().`,\n );\n }\n\n if (context && options.enrich) {\n const extra = options.enrich(context);\n if (extra && Object.keys(extra).length > 0) {\n logger.set(extra);\n }\n }\n\n return logger;\n };\n}\n\nexport interface RequestRunnerOptions extends RouteAdapterOptions {\n requestLoggerOptions?: RequestLoggerOptions;\n /** HTTP route used for include/exclude filtering. */\n path?: string;\n /** Emit one wide event automatically when the handler settles. Default `true`. */\n autoEmit?: boolean;\n /** Fields merged into the wide event at emit time (e.g. response status). */\n finalize?: () => Record<string, unknown> | undefined;\n}\n\n/**\n * Build a request runner bound to one framework's logger storage. The returned\n * function opens a span, creates a request logger, runs `handler` inside the\n * storage so `useLogger()` resolves it, records thrown errors, and emits one\n * wide event when the handler settles (unless `autoEmit` is `false`).\n */\nexport function createRequestRunner(storage: AsyncLocalStorage<RequestLogger>) {\n return function runRequest<T>(\n spanName: string,\n enrich: (log: RequestLogger) => void,\n handler: () => T | Promise<T>,\n options?: RequestRunnerOptions,\n ): Promise<T> {\n if (options?.path && !shouldInstrumentPath(options.path, options)) {\n return Promise.resolve(handler());\n }\n\n const loggerOptions = mergeRequestLoggerOptions(\n options?.requestLoggerOptions,\n options?.waitUntil,\n );\n\n const wrapped = withTracing({ name: spanName })(\n (ctx) => async (): Promise<T> => {\n const log = getRequestLogger(ctx, loggerOptions);\n enrich(log);\n try {\n return await storage.run(log, () => handler());\n } catch (error) {\n log.error(error instanceof Error ? error : new Error(String(error)));\n throw error;\n } finally {\n if (options?.autoEmit !== false) {\n log.emitNow(options?.finalize?.());\n }\n }\n },\n );\n // The wrapped factory is async, so the call always yields a Promise.\n return wrapped() as Promise<T>;\n };\n}\n\n/**\n * Description of a single adapter config field. `env` is the ordered list of\n * environment variables to fall back to.\n */\nexport interface ConfigField<T> {\n key: keyof T & string;\n env?: string[];\n}\n\nfunction resolveEnv(envKeys?: string[]): string | undefined {\n if (!envKeys) return undefined;\n for (const key of envKeys) {\n const value = process.env[key];\n if (value) return value;\n }\n return undefined;\n}\n\n/**\n * Returns true when at least one env-backed field is not provided via\n * `overrides`, meaning runtime config may still contribute and should be\n * probed to preserve precedence (`overrides > runtime > env`).\n *\n * @example\n * ```ts\n * const FIELDS: ConfigField<MyAdapterConfig>[] = [\n * { key: 'token', env: ['MY_ADAPTER_TOKEN'] },\n * { key: 'endpoint', env: ['MY_ADAPTER_URL'] },\n * ]\n *\n * if (shouldProbeRuntime(FIELDS, overrides)) {\n * runtimeConfig = await loadRuntimeConfig()\n * }\n * ```\n */\nexport function shouldProbeRuntime<T>(\n fields: ConfigField<T>[],\n overrides?: Partial<T>,\n): boolean {\n return fields.some(({ key, env }) => {\n if (!env || env.length === 0) return false;\n if (overrides?.[key] !== undefined) return false;\n return true;\n });\n}\n\n/**\n * Resolve adapter configuration with the standard priority chain:\n *\n * 1. `overrides` passed to the adapter factory\n * 2. `runtimeConfig.autotel.{namespace}.{key}` (if a probe was performed)\n * 3. `runtimeConfig.{namespace}.{key}` (if a probe was performed)\n * 4. `process.env[envKey]` for each env in `field.env`\n *\n * Pass an async `probe` to defer the runtime config lookup so it is only\n * invoked when runtime resolution is needed (i.e. at least one env-backed\n * field is not set by overrides). Adapters that have no probe target may pass\n * `() => Promise.resolve(undefined)`.\n */\nexport async function resolveAdapterConfig<T>(\n namespace: string,\n fields: ConfigField<T>[],\n overrides: Partial<T> | undefined,\n probe: () => Promise<Record<string, any> | undefined>,\n): Promise<Partial<T>> {\n const runtimeConfig = shouldProbeRuntime(fields, overrides)\n ? await probe()\n : undefined;\n const autotelNs = runtimeConfig?.autotel?.[namespace];\n const rootNs = runtimeConfig?.[namespace];\n\n const config: Record<string, unknown> = {};\n for (const { key, env } of fields) {\n config[key] =\n overrides?.[key] ?? autotelNs?.[key] ?? rootNs?.[key] ?? resolveEnv(env);\n }\n\n return config as Partial<T>;\n}\n\nexport type HeadersLike =\n { get(name: string): string | null } | Record<string, string | undefined>;\n\nexport function getHeader(\n headers: HeadersLike | undefined,\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n if ('get' in headers && typeof headers.get === 'function') {\n return headers.get(name) ?? undefined;\n }\n const dictionary = headers as Record<string, string | undefined>;\n const value = dictionary[name] ?? dictionary[name.toLowerCase()];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport type {\n RequestLogger,\n RequestLoggerOptions,\n RequestLogSnapshot,\n ParsedError,\n StructuredError,\n StructuredErrorInput,\n DrainPipelineOptions,\n PipelineDrainFn,\n};\n"],"mappings":";;;;AAqCA,SAAgB,gBACd,SACA;CACA,OAAO,SAAS,UACd,SACA,sBACe;EACf,IAAI;EACJ,IAAI;GACF,SAAS,iBAAiB,QAAW,oBAAoB;EAC3D,QAAQ;GACN,MAAM,IAAI,MACR,qBAAqB,QAAQ,YAAY,4GAE3C;EACF;EAEA,IAAI,WAAW,QAAQ,QAAQ;GAC7B,MAAM,QAAQ,QAAQ,OAAO,OAAO;GACpC,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,GACvC,OAAO,IAAI,KAAK;EAEpB;EAEA,OAAO;CACT;AACF;;;;;;;AAkBA,SAAgB,oBAAoB,SAA2C;CAC7E,OAAO,SAAS,WACd,UACA,QACA,SACA,SACY;EACZ,IAAI,SAAS,QAAQ,CAAC,qBAAqB,QAAQ,MAAM,OAAO,GAC9D,OAAO,QAAQ,QAAQ,QAAQ,CAAC;EAGlC,MAAM,gBAAgB,0BACpB,SAAS,sBACT,SAAS,SACX;EAmBA,OAjBgB,YAAY,EAAE,MAAM,SAAS,CAAC,CAAC,EAC5C,QAAQ,YAAwB;GAC/B,MAAM,MAAM,iBAAiB,KAAK,aAAa;GAC/C,OAAO,GAAG;GACV,IAAI;IACF,OAAO,MAAM,QAAQ,IAAI,WAAW,QAAQ,CAAC;GAC/C,SAAS,OAAO;IACd,IAAI,MAAM,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,CAAC;IACnE,MAAM;GACR,UAAU;IACR,IAAI,SAAS,aAAa,OACxB,IAAI,QAAQ,SAAS,WAAW,CAAC;GAErC;EACF,CAGW,CAAC,CAAC;CACjB;AACF;AAWA,SAAS,WAAW,SAAwC;CAC1D,IAAI,CAAC,SAAS,OAAO;CACrB,KAAK,MAAM,OAAO,SAAS;EACzB,MAAM,QAAQ,QAAQ,IAAI;EAC1B,IAAI,OAAO,OAAO;CACpB;AAEF;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBACd,QACA,WACS;CACT,OAAO,OAAO,MAAM,EAAE,KAAK,UAAU;EACnC,IAAI,CAAC,OAAO,IAAI,WAAW,GAAG,OAAO;EACrC,IAAI,YAAY,SAAS,QAAW,OAAO;EAC3C,OAAO;CACT,CAAC;AACH;;;;;;;;;;;;;;AAeA,eAAsB,qBACpB,WACA,QACA,WACA,OACqB;CACrB,MAAM,gBAAgB,mBAAmB,QAAQ,SAAS,IACtD,MAAM,MAAM,IACZ;CACJ,MAAM,YAAY,eAAe,UAAU;CAC3C,MAAM,SAAS,gBAAgB;CAE/B,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,EAAE,KAAK,SAAS,QACzB,OAAO,OACL,YAAY,QAAQ,YAAY,QAAQ,SAAS,QAAQ,WAAW,GAAG;CAG3E,OAAO;AACT;AAKA,SAAgB,UACd,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,IAAI,SAAS,WAAW,OAAO,QAAQ,QAAQ,YAC7C,OAAO,QAAQ,IAAI,IAAI,KAAK;CAE9B,MAAM,aAAa;CACnB,MAAM,QAAQ,WAAW,SAAS,WAAW,KAAK,YAAY;CAC9D,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C"}
|
package/dist/elysia.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"elysia.cjs","names":["createLoggerStorage","getHeader","defineFrameworkIntegration","runWithIntegratedHandle","autotel"],"sources":["../src/elysia.ts"],"sourcesContent":["import {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport { getHeader, type FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n} from './toolkit/integration';\n\nexport interface ElysiaContextLike {\n request: Request;\n path: string;\n}\n\nexport interface ElysiaWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n ctx: ElysiaContextLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: elysiaLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Wrap handlers with withAutotelHandler() first.',\n );\n\nfunction enrichFromContext(\n ctx?: ElysiaContextLike,\n): Record<string, unknown> | undefined {\n if (!ctx) return undefined;\n\n const requestId = getHeader(ctx.request.headers, 'x-request-id');\n\n return {\n 'http.request.method': ctx.request.method,\n 'url.full': ctx.request.url,\n 'http.route': ctx.path,\n ...(requestId ? { 'http.request.id': requestId } : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<ElysiaContextLike>({\n name: 'elysia',\n storage: elysiaLoggerStorage,\n extractRequest: (ctx) => ({\n method: ctx.request.method,\n path: ctx.path,\n headers: ctx.request.headers,\n requestId: getHeader(ctx.request.headers, 'x-request-id'),\n }),\n attachLogger: () => {},\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport function withAutotelHandler<T>(\n handler: (ctx: ElysiaContextLike) => T | Promise<T>,\n options: ElysiaWithAutotelOptions = {},\n) {\n return (ctx: ElysiaContextLike) =>\n integration.runTraced(ctx, options, async (handle) => {\n if (handle.skipped) {\n return handle.runWith(() => handler(ctx));\n }\n\n applyLoggerEnrichment(\n handle.logger,\n enrichFromContext(ctx),\n options.enrichRequest?.(ctx),\n );\n\n return runWithIntegratedHandle(handle, options, () => handler(ctx));\n });\n}\n\n/** @deprecated Use {@link withAutotelHandler}. */\nexport const autotel = withAutotelHandler;\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;AAyBA,MAAM,EAAE,SAAS,qBAAqB,WAAW,qBAC/CA,4CACE,iEACF;AAEF,SAAS,kBACP,KACqC;CACrC,IAAI,CAAC,KAAK,OAAO;CAEjB,MAAM,YAAYC,uBAAU,IAAI,QAAQ,SAAS,cAAc;CAE/D,OAAO;EACL,uBAAuB,IAAI,QAAQ;EACnC,YAAY,IAAI,QAAQ;EACxB,cAAc,IAAI;EAClB,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,cAAcC,+CAA8C;CAChE,MAAM;CACN,SAAS;CACT,iBAAiB,SAAS;EACxB,QAAQ,IAAI,QAAQ;EACpB,MAAM,IAAI;EACV,SAAS,IAAI,QAAQ;EACrB,WAAWD,uBAAU,IAAI,QAAQ,SAAS,cAAc;CAC1D;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAgB,YAA2B;CACzC,OAAO,iBAAiB;AAC1B;AAEA,SAAgB,mBACd,SACA,UAAoC,CAAC,GACrC;CACA,QAAQ,QACN,YAAY,UAAU,KAAK,SAAS,OAAO,WAAW;EACpD,IAAI,OAAO,SACT,OAAO,OAAO,cAAc,QAAQ,GAAG,CAAC;EAG1C,0CACE,OAAO,QACP,kBAAkB,GAAG,GACrB,QAAQ,gBAAgB,GAAG,CAC7B;EAEA,OAAOE,4CAAwB,QAAQ,eAAe,QAAQ,GAAG,CAAC;CACpE,CAAC;AACL;;AAGA,MAAaC,YAAU"}
|
package/dist/elysia.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"elysia.d.cts","names":[],"sources":["../src/elysia.ts"],"mappings":";;;;UAciB;EACf,SAAS;EACT;;UAGe,iCAAiC;EAChD,iBACE,KAAK,sBACF;;iBAmCS,aAAa;iBAIb,mBAAmB,GACjC,UAAU,KAAK,sBAAsB,IAAI,QAAQ,IACjD,UAAS,4BAED,KAAK,sBAAiB,QAAA;;cAiBnB,gBAAO"}
|
package/dist/elysia.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"elysia.d.ts","names":[],"sources":["../src/elysia.ts"],"mappings":";;;;UAciB;EACf,SAAS;EACT;;UAGe,iCAAiC;EAChD,iBACE,KAAK,sBACF;;iBAmCS,aAAa;iBAIb,mBAAmB,GACjC,UAAU,KAAK,sBAAsB,IAAI,QAAQ,IACjD,UAAS,4BAED,KAAK,sBAAiB,QAAA;;cAiBnB,gBAAO"}
|
package/dist/elysia.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"elysia.js","names":[],"sources":["../src/elysia.ts"],"sourcesContent":["import {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport { getHeader, type FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n runWithIntegratedHandle,\n} from './toolkit/integration';\n\nexport interface ElysiaContextLike {\n request: Request;\n path: string;\n}\n\nexport interface ElysiaWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n ctx: ElysiaContextLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: elysiaLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Wrap handlers with withAutotelHandler() first.',\n );\n\nfunction enrichFromContext(\n ctx?: ElysiaContextLike,\n): Record<string, unknown> | undefined {\n if (!ctx) return undefined;\n\n const requestId = getHeader(ctx.request.headers, 'x-request-id');\n\n return {\n 'http.request.method': ctx.request.method,\n 'url.full': ctx.request.url,\n 'http.route': ctx.path,\n ...(requestId ? { 'http.request.id': requestId } : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<ElysiaContextLike>({\n name: 'elysia',\n storage: elysiaLoggerStorage,\n extractRequest: (ctx) => ({\n method: ctx.request.method,\n path: ctx.path,\n headers: ctx.request.headers,\n requestId: getHeader(ctx.request.headers, 'x-request-id'),\n }),\n attachLogger: () => {},\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport function withAutotelHandler<T>(\n handler: (ctx: ElysiaContextLike) => T | Promise<T>,\n options: ElysiaWithAutotelOptions = {},\n) {\n return (ctx: ElysiaContextLike) =>\n integration.runTraced(ctx, options, async (handle) => {\n if (handle.skipped) {\n return handle.runWith(() => handler(ctx));\n }\n\n applyLoggerEnrichment(\n handle.logger,\n enrichFromContext(ctx),\n options.enrichRequest?.(ctx),\n );\n\n return runWithIntegratedHandle(handle, options, () => handler(ctx));\n });\n}\n\n/** @deprecated Use {@link withAutotelHandler}. */\nexport const autotel = withAutotelHandler;\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAyBA,MAAM,EAAE,SAAS,qBAAqB,WAAW,qBAC/C,oBACE,iEACF;AAEF,SAAS,kBACP,KACqC;CACrC,IAAI,CAAC,KAAK,OAAO;CAEjB,MAAM,YAAY,UAAU,IAAI,QAAQ,SAAS,cAAc;CAE/D,OAAO;EACL,uBAAuB,IAAI,QAAQ;EACnC,YAAY,IAAI,QAAQ;EACxB,cAAc,IAAI;EAClB,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,cAAc,2BAA8C;CAChE,MAAM;CACN,SAAS;CACT,iBAAiB,SAAS;EACxB,QAAQ,IAAI,QAAQ;EACpB,MAAM,IAAI;EACV,SAAS,IAAI,QAAQ;EACrB,WAAW,UAAU,IAAI,QAAQ,SAAS,cAAc;CAC1D;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAgB,YAA2B;CACzC,OAAO,iBAAiB;AAC1B;AAEA,SAAgB,mBACd,SACA,UAAoC,CAAC,GACrC;CACA,QAAQ,QACN,YAAY,UAAU,KAAK,SAAS,OAAO,WAAW;EACpD,IAAI,OAAO,SACT,OAAO,OAAO,cAAc,QAAQ,GAAG,CAAC;EAG1C,sBACE,OAAO,QACP,kBAAkB,GAAG,GACrB,QAAQ,gBAAgB,GAAG,CAC7B;EAEA,OAAO,wBAAwB,QAAQ,eAAe,QAAQ,GAAG,CAAC;CACpE,CAAC;AACL;;AAGA,MAAa,UAAU"}
|
package/dist/express.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"express.cjs","names":["AsyncLocalStorage","createUseLogger","createRequestRunner","toRouteAdapterOptions"],"sources":["../src/express.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createRequestRunner,\n createUseLogger,\n toRouteAdapterOptions,\n type RouteAdapterOptions,\n} from './core';\n\nexport interface ExpressRequestLike {\n method?: string;\n originalUrl?: string;\n url?: string;\n path?: string;\n route?: { path?: string };\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface ExpressResponseLike {\n statusCode?: number;\n}\n\nexport type ExpressNext = (err?: unknown) => void;\n\nexport interface ExpressWithAutotelOptions extends RouteAdapterOptions {\n spanName?: string | ((request: ExpressRequestLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrichRequest?: (\n request: ExpressRequestLike,\n ) => Record<string, unknown> | undefined;\n autoEmit?: boolean;\n}\n\nconst expressLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nfunction headerValue(\n headers: ExpressRequestLike['headers'],\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n const value = headers[name] ?? headers[name.toLowerCase()];\n if (Array.isArray(value)) return value[0];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction enrichFromRequest(\n request?: ExpressRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const url = request.originalUrl ?? request.url;\n const route = request.route?.path ?? request.path ?? url;\n const requestId = headerValue(request.headers, 'x-request-id');\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(url ? { 'url.full': url } : {}),\n ...(route ? { 'http.route': route } : {}),\n ...(requestId ? { 'http.request.id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<ExpressRequestLike>({\n adapterName: 'express',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: ExpressRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n const stored = expressLoggerStorage.getStore();\n if (stored) return stored;\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nconst runRequest = createRequestRunner(expressLoggerStorage);\n\n/**\n * Wrap an Express route handler. Each request opens a span, gets a\n * request-scoped logger (via `useLogger(req)`), and emits one wide event when\n * the handler settles. Thrown errors are recorded and forwarded to `next`.\n */\nexport function withAutotel<\n TReq extends ExpressRequestLike,\n TRes extends ExpressResponseLike,\n TReturn,\n>(\n handler: (\n req: TReq,\n res: TRes,\n next?: ExpressNext,\n ) => TReturn | Promise<TReturn>,\n options?: ExpressWithAutotelOptions,\n): (req: TReq, res: TRes, next?: ExpressNext) => Promise<TReturn | undefined> {\n return async (\n req: TReq,\n res: TRes,\n next?: ExpressNext,\n ): Promise<TReturn | undefined> => {\n const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(req)\n : (options?.spanName ?? `express.${req.method ?? 'request'}`);\n\n const route =\n req.route?.path ?? req.path ?? req.originalUrl ?? req.url ?? '/';\n\n try {\n return await runRequest<TReturn>(\n spanName,\n (log) => {\n const auto = enrichFromRequest(req);\n if (auto && Object.keys(auto).length > 0) log.set(auto);\n const custom = options?.enrichRequest?.(req);\n if (custom && Object.keys(custom).length > 0) log.set(custom);\n },\n () => handler(req, res, next),\n {\n ...toRouteAdapterOptions(options),\n path: route,\n requestLoggerOptions: options?.requestLoggerOptions,\n autoEmit: options?.autoEmit,\n finalize: () =>\n res.statusCode\n ? { 'http.response.status_code': res.statusCode }\n : undefined,\n },\n );\n } catch (error) {\n if (typeof next === 'function') {\n next(error);\n return undefined;\n }\n throw error;\n }\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;AAuCA,MAAM,uBAAuB,IAAIA,mCAAiC;AAElE,SAAS,YACP,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,MAAM,QAAQ,QAAQ,SAAS,QAAQ,KAAK,YAAY;CACxD,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM;CACvC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,MAAM,MAAM,QAAQ,eAAe,QAAQ;CAC3C,MAAM,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;CACrD,MAAM,YAAY,YAAY,QAAQ,SAAS,cAAc;CAE7D,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;EACjC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,gBAAgBC,6BAAoC;CACxD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,MAAM,SAAS,qBAAqB,SAAS;CAC7C,IAAI,QAAQ,OAAO;CACnB,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,MAAM,aAAaC,iCAAoB,oBAAoB;;;;;;AAO3D,SAAgB,YAKd,SAKA,SAC4E;CAC5E,OAAO,OACL,KACA,KACA,SACiC;EACjC,MAAM,WACJ,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,GAAG,IACnB,SAAS,YAAY,WAAW,IAAI,UAAU;EAErD,MAAM,QACJ,IAAI,OAAO,QAAQ,IAAI,QAAQ,IAAI,eAAe,IAAI,OAAO;EAE/D,IAAI;GACF,OAAO,MAAM,WACX,WACC,QAAQ;IACP,MAAM,OAAO,kBAAkB,GAAG;IAClC,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,IAAI;IACtD,MAAM,SAAS,SAAS,gBAAgB,GAAG;IAC3C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,MAAM;GAC9D,SACM,QAAQ,KAAK,KAAK,IAAI,GAC5B;IACE,GAAGC,0CAAsB,OAAO;IAChC,MAAM;IACN,sBAAsB,SAAS;IAC/B,UAAU,SAAS;IACnB,gBACE,IAAI,aACA,EAAE,6BAA6B,IAAI,WAAW,IAC9C;GACR,CACF;EACF,SAAS,OAAO;GACd,IAAI,OAAO,SAAS,YAAY;IAC9B,KAAK,KAAK;IACV;GACF;GACA,MAAM;EACR;CACF;AACF"}
|
package/dist/express.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"express.d.cts","names":[],"sources":["../src/express.ts"],"mappings":";;;;UAeiB;EACf;EACA;EACA;EACA;EACA;IAAU;;EACV,UAAU;;UAGK;EACf;;KAGU,eAAe;UAEV,kCAAkC;EACjD,sBAAsB,SAAS;EAC/B,uBAAuB;EACvB,iBACE,SAAS,uBACN;EACL;;iBAqCc,UACd,UAAU,oBACV,uBAAuB,uBACtB;;;;;;iBAaa,YACd,aAAa,oBACb,aAAa,qBACb,SAEA,UACE,KAAK,MACL,KAAK,MACL,OAAO,gBACJ,UAAU,QAAQ,UACvB,UAAU,6BACR,KAAK,MAAM,KAAK,MAAM,OAAO,gBAAgB,QAAQ"}
|
package/dist/express.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"express.d.ts","names":[],"sources":["../src/express.ts"],"mappings":";;;;UAeiB;EACf;EACA;EACA;EACA;EACA;IAAU;;EACV,UAAU;;UAGK;EACf;;KAGU,eAAe;UAEV,kCAAkC;EACjD,sBAAsB,SAAS;EAC/B,uBAAuB;EACvB,iBACE,SAAS,uBACN;EACL;;iBAqCc,UACd,UAAU,oBACV,uBAAuB,uBACtB;;;;;;iBAaa,YACd,aAAa,oBACb,aAAa,qBACb,SAEA,UACE,KAAK,MACL,KAAK,MACL,OAAO,gBACJ,UAAU,QAAQ,UACvB,UAAU,6BACR,KAAK,MAAM,KAAK,MAAM,OAAO,gBAAgB,QAAQ"}
|
package/dist/express.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","names":[],"sources":["../src/express.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createRequestRunner,\n createUseLogger,\n toRouteAdapterOptions,\n type RouteAdapterOptions,\n} from './core';\n\nexport interface ExpressRequestLike {\n method?: string;\n originalUrl?: string;\n url?: string;\n path?: string;\n route?: { path?: string };\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface ExpressResponseLike {\n statusCode?: number;\n}\n\nexport type ExpressNext = (err?: unknown) => void;\n\nexport interface ExpressWithAutotelOptions extends RouteAdapterOptions {\n spanName?: string | ((request: ExpressRequestLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrichRequest?: (\n request: ExpressRequestLike,\n ) => Record<string, unknown> | undefined;\n autoEmit?: boolean;\n}\n\nconst expressLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nfunction headerValue(\n headers: ExpressRequestLike['headers'],\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n const value = headers[name] ?? headers[name.toLowerCase()];\n if (Array.isArray(value)) return value[0];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction enrichFromRequest(\n request?: ExpressRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const url = request.originalUrl ?? request.url;\n const route = request.route?.path ?? request.path ?? url;\n const requestId = headerValue(request.headers, 'x-request-id');\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(url ? { 'url.full': url } : {}),\n ...(route ? { 'http.route': route } : {}),\n ...(requestId ? { 'http.request.id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<ExpressRequestLike>({\n adapterName: 'express',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: ExpressRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n const stored = expressLoggerStorage.getStore();\n if (stored) return stored;\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nconst runRequest = createRequestRunner(expressLoggerStorage);\n\n/**\n * Wrap an Express route handler. Each request opens a span, gets a\n * request-scoped logger (via `useLogger(req)`), and emits one wide event when\n * the handler settles. Thrown errors are recorded and forwarded to `next`.\n */\nexport function withAutotel<\n TReq extends ExpressRequestLike,\n TRes extends ExpressResponseLike,\n TReturn,\n>(\n handler: (\n req: TReq,\n res: TRes,\n next?: ExpressNext,\n ) => TReturn | Promise<TReturn>,\n options?: ExpressWithAutotelOptions,\n): (req: TReq, res: TRes, next?: ExpressNext) => Promise<TReturn | undefined> {\n return async (\n req: TReq,\n res: TRes,\n next?: ExpressNext,\n ): Promise<TReturn | undefined> => {\n const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(req)\n : (options?.spanName ?? `express.${req.method ?? 'request'}`);\n\n const route =\n req.route?.path ?? req.path ?? req.originalUrl ?? req.url ?? '/';\n\n try {\n return await runRequest<TReturn>(\n spanName,\n (log) => {\n const auto = enrichFromRequest(req);\n if (auto && Object.keys(auto).length > 0) log.set(auto);\n const custom = options?.enrichRequest?.(req);\n if (custom && Object.keys(custom).length > 0) log.set(custom);\n },\n () => handler(req, res, next),\n {\n ...toRouteAdapterOptions(options),\n path: route,\n requestLoggerOptions: options?.requestLoggerOptions,\n autoEmit: options?.autoEmit,\n finalize: () =>\n res.statusCode\n ? { 'http.response.status_code': res.statusCode }\n : undefined,\n },\n );\n } catch (error) {\n if (typeof next === 'function') {\n next(error);\n return undefined;\n }\n throw error;\n }\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAuCA,MAAM,uBAAuB,IAAI,kBAAiC;AAElE,SAAS,YACP,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,MAAM,QAAQ,QAAQ,SAAS,QAAQ,KAAK,YAAY;CACxD,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM;CACvC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,MAAM,MAAM,QAAQ,eAAe,QAAQ;CAC3C,MAAM,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;CACrD,MAAM,YAAY,YAAY,QAAQ,SAAS,cAAc;CAE7D,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;EACjC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,gBAAgB,gBAAoC;CACxD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,MAAM,SAAS,qBAAqB,SAAS;CAC7C,IAAI,QAAQ,OAAO;CACnB,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,MAAM,aAAa,oBAAoB,oBAAoB;;;;;;AAO3D,SAAgB,YAKd,SAKA,SAC4E;CAC5E,OAAO,OACL,KACA,KACA,SACiC;EACjC,MAAM,WACJ,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,GAAG,IACnB,SAAS,YAAY,WAAW,IAAI,UAAU;EAErD,MAAM,QACJ,IAAI,OAAO,QAAQ,IAAI,QAAQ,IAAI,eAAe,IAAI,OAAO;EAE/D,IAAI;GACF,OAAO,MAAM,WACX,WACC,QAAQ;IACP,MAAM,OAAO,kBAAkB,GAAG;IAClC,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,IAAI;IACtD,MAAM,SAAS,SAAS,gBAAgB,GAAG;IAC3C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,MAAM;GAC9D,SACM,QAAQ,KAAK,KAAK,IAAI,GAC5B;IACE,GAAG,sBAAsB,OAAO;IAChC,MAAM;IACN,sBAAsB,SAAS;IAC/B,UAAU,SAAS;IACnB,gBACE,IAAI,aACA,EAAE,6BAA6B,IAAI,WAAW,IAC9C;GACR,CACF;EACF,SAAS,OAAO;GACd,IAAI,OAAO,SAAS,YAAY;IAC9B,KAAK,KAAK;IACV;GACF;GACA,MAAM;EACR;CACF;AACF"}
|
package/dist/fastify.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fastify.cjs","names":["AsyncLocalStorage","createUseLogger","createRequestRunner","toRouteAdapterOptions"],"sources":["../src/fastify.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createRequestRunner,\n createUseLogger,\n toRouteAdapterOptions,\n type RouteAdapterOptions,\n} from './core';\n\nexport interface FastifyRequestLike {\n method?: string;\n url?: string;\n routeOptions?: { url?: string };\n routerPath?: string;\n id?: string;\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface FastifyReplyLike {\n statusCode?: number;\n}\n\nexport interface FastifyWithAutotelOptions extends RouteAdapterOptions {\n spanName?: string | ((request: FastifyRequestLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrichRequest?: (\n request: FastifyRequestLike,\n ) => Record<string, unknown> | undefined;\n autoEmit?: boolean;\n}\n\nconst fastifyLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nfunction headerValue(\n headers: FastifyRequestLike['headers'],\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n const value = headers[name] ?? headers[name.toLowerCase()];\n if (Array.isArray(value)) return value[0];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction enrichFromRequest(\n request?: FastifyRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const route = request.routeOptions?.url ?? request.routerPath ?? request.url;\n const requestId = request.id ?? headerValue(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.id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<FastifyRequestLike>({\n adapterName: 'fastify',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: FastifyRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n const stored = fastifyLoggerStorage.getStore();\n if (stored) return stored;\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nconst runRequest = createRequestRunner(fastifyLoggerStorage);\n\n/**\n * Wrap a Fastify route handler. Each request opens a span, gets a\n * request-scoped logger (via `useLogger(request)`), and emits one wide event\n * when the handler settles. Thrown errors are recorded, then rethrown for\n * Fastify's error handling.\n */\nexport function withAutotel<\n TReq extends FastifyRequestLike,\n TRes extends FastifyReplyLike,\n TReturn,\n>(\n handler: (request: TReq, reply: TRes) => TReturn | Promise<TReturn>,\n options?: FastifyWithAutotelOptions,\n): (request: TReq, reply: TRes) => Promise<TReturn> {\n return (request: TReq, reply: TRes): Promise<TReturn> => {\n const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(request)\n : (options?.spanName ?? `fastify.${request.method ?? 'request'}`);\n\n const route =\n request.routeOptions?.url ?? request.routerPath ?? request.url ?? '/';\n\n return runRequest<TReturn>(\n spanName,\n (log) => {\n const auto = enrichFromRequest(request);\n if (auto && Object.keys(auto).length > 0) log.set(auto);\n const custom = options?.enrichRequest?.(request);\n if (custom && Object.keys(custom).length > 0) log.set(custom);\n },\n () => handler(request, reply),\n {\n ...toRouteAdapterOptions(options),\n path: route,\n requestLoggerOptions: options?.requestLoggerOptions,\n autoEmit: options?.autoEmit,\n finalize: () =>\n reply.statusCode\n ? { 'http.response.status_code': reply.statusCode }\n : undefined,\n },\n );\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;AAqCA,MAAM,uBAAuB,IAAIA,mCAAiC;AAElE,SAAS,YACP,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,MAAM,QAAQ,QAAQ,SAAS,QAAQ,KAAK,YAAY;CACxD,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM;CACvC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,MAAM,QAAQ,QAAQ,cAAc,OAAO,QAAQ,cAAc,QAAQ;CACzE,MAAM,YAAY,QAAQ,MAAM,YAAY,QAAQ,SAAS,cAAc;CAE3E,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,QAAQ,MAAM,EAAE,YAAY,QAAQ,IAAI,IAAI,CAAC;EACjD,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,gBAAgBC,6BAAoC;CACxD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,MAAM,SAAS,qBAAqB,SAAS;CAC7C,IAAI,QAAQ,OAAO;CACnB,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,MAAM,aAAaC,iCAAoB,oBAAoB;;;;;;;AAQ3D,SAAgB,YAKd,SACA,SACkD;CAClD,QAAQ,SAAe,UAAkC;EACvD,MAAM,WACJ,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,OAAO,IACvB,SAAS,YAAY,WAAW,QAAQ,UAAU;EAEzD,MAAM,QACJ,QAAQ,cAAc,OAAO,QAAQ,cAAc,QAAQ,OAAO;EAEpE,OAAO,WACL,WACC,QAAQ;GACP,MAAM,OAAO,kBAAkB,OAAO;GACtC,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,IAAI;GACtD,MAAM,SAAS,SAAS,gBAAgB,OAAO;GAC/C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,MAAM;EAC9D,SACM,QAAQ,SAAS,KAAK,GAC5B;GACE,GAAGC,0CAAsB,OAAO;GAChC,MAAM;GACN,sBAAsB,SAAS;GAC/B,UAAU,SAAS;GACnB,gBACE,MAAM,aACF,EAAE,6BAA6B,MAAM,WAAW,IAChD;EACR,CACF;CACF;AACF"}
|
package/dist/fastify.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fastify.d.cts","names":[],"sources":["../src/fastify.ts"],"mappings":";;;;UAeiB;EACf;EACA;EACA;IAAiB;;EACjB;EACA;EACA,UAAU;;UAGK;EACf;;UAGe,kCAAkC;EACjD,sBAAsB,SAAS;EAC/B,uBAAuB;EACvB,iBACE,SAAS,uBACN;EACL;;iBAoCc,UACd,UAAU,oBACV,uBAAuB,uBACtB;;;;;;;iBAca,YACd,aAAa,oBACb,aAAa,kBACb,SAEA,UAAU,SAAS,MAAM,OAAO,SAAS,UAAU,QAAQ,UAC3D,UAAU,6BACR,SAAS,MAAM,OAAO,SAAS,QAAQ"}
|
package/dist/fastify.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fastify.d.ts","names":[],"sources":["../src/fastify.ts"],"mappings":";;;;UAeiB;EACf;EACA;EACA;IAAiB;;EACjB;EACA;EACA,UAAU;;UAGK;EACf;;UAGe,kCAAkC;EACjD,sBAAsB,SAAS;EAC/B,uBAAuB;EACvB,iBACE,SAAS,uBACN;EACL;;iBAoCc,UACd,UAAU,oBACV,uBAAuB,uBACtB;;;;;;;iBAca,YACd,aAAa,oBACb,aAAa,kBACb,SAEA,UAAU,SAAS,MAAM,OAAO,SAAS,UAAU,QAAQ,UAC3D,UAAU,6BACR,SAAS,MAAM,OAAO,SAAS,QAAQ"}
|
package/dist/fastify.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fastify.js","names":[],"sources":["../src/fastify.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport {\n createRequestRunner,\n createUseLogger,\n toRouteAdapterOptions,\n type RouteAdapterOptions,\n} from './core';\n\nexport interface FastifyRequestLike {\n method?: string;\n url?: string;\n routeOptions?: { url?: string };\n routerPath?: string;\n id?: string;\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface FastifyReplyLike {\n statusCode?: number;\n}\n\nexport interface FastifyWithAutotelOptions extends RouteAdapterOptions {\n spanName?: string | ((request: FastifyRequestLike) => string);\n requestLoggerOptions?: RequestLoggerOptions;\n enrichRequest?: (\n request: FastifyRequestLike,\n ) => Record<string, unknown> | undefined;\n autoEmit?: boolean;\n}\n\nconst fastifyLoggerStorage = new AsyncLocalStorage<RequestLogger>();\n\nfunction headerValue(\n headers: FastifyRequestLike['headers'],\n name: string,\n): string | undefined {\n if (!headers) return undefined;\n const value = headers[name] ?? headers[name.toLowerCase()];\n if (Array.isArray(value)) return value[0];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction enrichFromRequest(\n request?: FastifyRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const route = request.routeOptions?.url ?? request.routerPath ?? request.url;\n const requestId = request.id ?? headerValue(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.id': requestId } : {}),\n };\n}\n\nconst baseUseLogger = createUseLogger<FastifyRequestLike>({\n adapterName: 'fastify',\n enrich: enrichFromRequest,\n});\n\nexport function useLogger(\n request?: FastifyRequestLike,\n requestLoggerOptions?: RequestLoggerOptions,\n): RequestLogger {\n const stored = fastifyLoggerStorage.getStore();\n if (stored) return stored;\n return baseUseLogger(request, requestLoggerOptions);\n}\n\nconst runRequest = createRequestRunner(fastifyLoggerStorage);\n\n/**\n * Wrap a Fastify route handler. Each request opens a span, gets a\n * request-scoped logger (via `useLogger(request)`), and emits one wide event\n * when the handler settles. Thrown errors are recorded, then rethrown for\n * Fastify's error handling.\n */\nexport function withAutotel<\n TReq extends FastifyRequestLike,\n TRes extends FastifyReplyLike,\n TReturn,\n>(\n handler: (request: TReq, reply: TRes) => TReturn | Promise<TReturn>,\n options?: FastifyWithAutotelOptions,\n): (request: TReq, reply: TRes) => Promise<TReturn> {\n return (request: TReq, reply: TRes): Promise<TReturn> => {\n const spanName =\n typeof options?.spanName === 'function'\n ? options.spanName(request)\n : (options?.spanName ?? `fastify.${request.method ?? 'request'}`);\n\n const route =\n request.routeOptions?.url ?? request.routerPath ?? request.url ?? '/';\n\n return runRequest<TReturn>(\n spanName,\n (log) => {\n const auto = enrichFromRequest(request);\n if (auto && Object.keys(auto).length > 0) log.set(auto);\n const custom = options?.enrichRequest?.(request);\n if (custom && Object.keys(custom).length > 0) log.set(custom);\n },\n () => handler(request, reply),\n {\n ...toRouteAdapterOptions(options),\n path: route,\n requestLoggerOptions: options?.requestLoggerOptions,\n autoEmit: options?.autoEmit,\n finalize: () =>\n reply.statusCode\n ? { 'http.response.status_code': reply.statusCode }\n : undefined,\n },\n );\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAqCA,MAAM,uBAAuB,IAAI,kBAAiC;AAElE,SAAS,YACP,SACA,MACoB;CACpB,IAAI,CAAC,SAAS,OAAO;CACrB,MAAM,QAAQ,QAAQ,SAAS,QAAQ,KAAK,YAAY;CACxD,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM;CACvC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,MAAM,QAAQ,QAAQ,cAAc,OAAO,QAAQ,cAAc,QAAQ;CACzE,MAAM,YAAY,QAAQ,MAAM,YAAY,QAAQ,SAAS,cAAc;CAE3E,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,QAAQ,MAAM,EAAE,YAAY,QAAQ,IAAI,IAAI,CAAC;EACjD,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,mBAAmB,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,gBAAgB,gBAAoC;CACxD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,MAAM,SAAS,qBAAqB,SAAS;CAC7C,IAAI,QAAQ,OAAO;CACnB,OAAO,cAAc,SAAS,oBAAoB;AACpD;AAEA,MAAM,aAAa,oBAAoB,oBAAoB;;;;;;;AAQ3D,SAAgB,YAKd,SACA,SACkD;CAClD,QAAQ,SAAe,UAAkC;EACvD,MAAM,WACJ,OAAO,SAAS,aAAa,aACzB,QAAQ,SAAS,OAAO,IACvB,SAAS,YAAY,WAAW,QAAQ,UAAU;EAEzD,MAAM,QACJ,QAAQ,cAAc,OAAO,QAAQ,cAAc,QAAQ,OAAO;EAEpE,OAAO,WACL,WACC,QAAQ;GACP,MAAM,OAAO,kBAAkB,OAAO;GACtC,IAAI,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,IAAI;GACtD,MAAM,SAAS,SAAS,gBAAgB,OAAO;GAC/C,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,MAAM;EAC9D,SACM,QAAQ,SAAS,KAAK,GAC5B;GACE,GAAG,sBAAsB,OAAO;GAChC,MAAM;GACN,sBAAsB,SAAS;GAC/B,UAAU,SAAS;GACnB,gBACE,MAAM,aACF,EAAE,6BAA6B,MAAM,WAAW,IAChD;EACR,CACF;CACF;AACF"}
|
package/dist/hono.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hono.cjs","names":["createLoggerStorage","createUseLogger","defineFrameworkIntegration"],"sources":["../src/hono.ts"],"sourcesContent":["import type { Context } from 'hono';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport type { FrameworkHandlerOptions } from './core';\nimport { createUseLogger } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n} from './toolkit/integration';\n\nexport interface HonoWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (c: Context) => Record<string, unknown> | undefined;\n}\n\nconst { storage: honoLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'middleware context. Register autotelMiddleware() before your routes.',\n );\n\nconst baseUseLogger = createUseLogger<Context>({\n adapterName: 'hono',\n enrich: enrichFromContext,\n});\n\nfunction enrichFromContext(c: Context): Record<string, unknown> {\n return {\n 'http.request.method': c.req.method,\n 'url.full': c.req.url,\n 'http.route': c.req.path,\n };\n}\n\nconst integration = defineFrameworkIntegration<Context>({\n name: 'hono',\n storage: honoLoggerStorage,\n extractRequest: (c) => ({\n method: c.req.method,\n path: c.req.path,\n headers: c.req.raw.headers,\n requestId: c.req.header('x-request-id') ?? undefined,\n }),\n attachLogger: (c, logger) => {\n c.set('autotelLogger', logger);\n },\n});\n\n/** Request logger inside autotelMiddleware / traced handlers. */\nexport function useLogger(c?: Context): RequestLogger {\n if (honoLoggerStorage.getStore()) {\n return storageUseLogger();\n }\n return baseUseLogger(c);\n}\n\nexport function autotelMiddleware(options: HonoWithAutotelOptions = {}) {\n return async (c: Context, next: () => Promise<void>) => {\n return integration.runTraced(c, options, async (handle) => {\n if (handle.skipped) {\n await handle.runWith(() => next());\n return;\n }\n\n applyLoggerEnrichment(\n handle.logger,\n enrichFromContext(c),\n options.enrichRequest?.(c),\n );\n\n try {\n await handle.runWith(() => next());\n if (options.autoEmit !== false) {\n /* Hono finalizes `c.res` after middleware returns. Assign the observed\n response here so stream completion, cancellation, and failure\n drive the request snapshot without locking the original body. */\n c.res = await handle.finishResponse(c.res);\n }\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 };\n}\n\n/** Alias for {@link useLogger} inside autotelMiddleware. */\nexport const useLoggerFromContext = useLogger;\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;AAmBA,MAAM,EAAE,SAAS,mBAAmB,WAAW,qBAC7CA,4CACE,sEACF;AAEF,MAAM,gBAAgBC,6BAAyB;CAC7C,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAS,kBAAkB,GAAqC;CAC9D,OAAO;EACL,uBAAuB,EAAE,IAAI;EAC7B,YAAY,EAAE,IAAI;EAClB,cAAc,EAAE,IAAI;CACtB;AACF;AAEA,MAAM,cAAcC,+CAAoC;CACtD,MAAM;CACN,SAAS;CACT,iBAAiB,OAAO;EACtB,QAAQ,EAAE,IAAI;EACd,MAAM,EAAE,IAAI;EACZ,SAAS,EAAE,IAAI,IAAI;EACnB,WAAW,EAAE,IAAI,OAAO,cAAc,KAAK;CAC7C;CACA,eAAe,GAAG,WAAW;EAC3B,EAAE,IAAI,iBAAiB,MAAM;CAC/B;AACF,CAAC;;AAGD,SAAgB,UAAU,GAA4B;CACpD,IAAI,kBAAkB,SAAS,GAC7B,OAAO,iBAAiB;CAE1B,OAAO,cAAc,CAAC;AACxB;AAEA,SAAgB,kBAAkB,UAAkC,CAAC,GAAG;CACtE,OAAO,OAAO,GAAY,SAA8B;EACtD,OAAO,YAAY,UAAU,GAAG,SAAS,OAAO,WAAW;GACzD,IAAI,OAAO,SAAS;IAClB,MAAM,OAAO,cAAc,KAAK,CAAC;IACjC;GACF;GAEA,0CACE,OAAO,QACP,kBAAkB,CAAC,GACnB,QAAQ,gBAAgB,CAAC,CAC3B;GAEA,IAAI;IACF,MAAM,OAAO,cAAc,KAAK,CAAC;IACjC,IAAI,QAAQ,aAAa,OAIvB,EAAE,MAAM,MAAM,OAAO,eAAe,EAAE,GAAG;GAE7C,SAAS,OAAO;IACd,IAAI,QAAQ,aAAa,OACvB,MAAM,OAAO,OAAO,EAClB,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,EACjE,CAAC;IAEH,MAAM;GACR;EACF,CAAC;CACH;AACF;;AAGA,MAAa,uBAAuB"}
|
package/dist/hono.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hono.d.cts","names":[],"sources":["../src/hono.ts"],"mappings":";;;;;UAeiB,+BAA+B;EAC9C,iBAAiB,GAAG,YAAY;;;iBAoClB,UAAU,IAAI,UAAU;iBAOxB,kBAAkB,UAAS,0BAC3B,GAAG,SAAS,YAAY,kBAAa;;cAkCxC,6BAAoB"}
|
package/dist/hono.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hono.d.ts","names":[],"sources":["../src/hono.ts"],"mappings":";;;;;UAeiB,+BAA+B;EAC9C,iBAAiB,GAAG,YAAY;;;iBAoClB,UAAU,IAAI,UAAU;iBAOxB,kBAAkB,UAAS,0BAC3B,GAAG,SAAS,YAAY,kBAAa;;cAkCxC,6BAAoB"}
|
package/dist/hono.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hono.js","names":[],"sources":["../src/hono.ts"],"sourcesContent":["import type { Context } from 'hono';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport type { FrameworkHandlerOptions } from './core';\nimport { createUseLogger } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n} from './toolkit/integration';\n\nexport interface HonoWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (c: Context) => Record<string, unknown> | undefined;\n}\n\nconst { storage: honoLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'middleware context. Register autotelMiddleware() before your routes.',\n );\n\nconst baseUseLogger = createUseLogger<Context>({\n adapterName: 'hono',\n enrich: enrichFromContext,\n});\n\nfunction enrichFromContext(c: Context): Record<string, unknown> {\n return {\n 'http.request.method': c.req.method,\n 'url.full': c.req.url,\n 'http.route': c.req.path,\n };\n}\n\nconst integration = defineFrameworkIntegration<Context>({\n name: 'hono',\n storage: honoLoggerStorage,\n extractRequest: (c) => ({\n method: c.req.method,\n path: c.req.path,\n headers: c.req.raw.headers,\n requestId: c.req.header('x-request-id') ?? undefined,\n }),\n attachLogger: (c, logger) => {\n c.set('autotelLogger', logger);\n },\n});\n\n/** Request logger inside autotelMiddleware / traced handlers. */\nexport function useLogger(c?: Context): RequestLogger {\n if (honoLoggerStorage.getStore()) {\n return storageUseLogger();\n }\n return baseUseLogger(c);\n}\n\nexport function autotelMiddleware(options: HonoWithAutotelOptions = {}) {\n return async (c: Context, next: () => Promise<void>) => {\n return integration.runTraced(c, options, async (handle) => {\n if (handle.skipped) {\n await handle.runWith(() => next());\n return;\n }\n\n applyLoggerEnrichment(\n handle.logger,\n enrichFromContext(c),\n options.enrichRequest?.(c),\n );\n\n try {\n await handle.runWith(() => next());\n if (options.autoEmit !== false) {\n /* Hono finalizes `c.res` after middleware returns. Assign the observed\n response here so stream completion, cancellation, and failure\n drive the request snapshot without locking the original body. */\n c.res = await handle.finishResponse(c.res);\n }\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 };\n}\n\n/** Alias for {@link useLogger} inside autotelMiddleware. */\nexport const useLoggerFromContext = useLogger;\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AAmBA,MAAM,EAAE,SAAS,mBAAmB,WAAW,qBAC7C,oBACE,sEACF;AAEF,MAAM,gBAAgB,gBAAyB;CAC7C,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAS,kBAAkB,GAAqC;CAC9D,OAAO;EACL,uBAAuB,EAAE,IAAI;EAC7B,YAAY,EAAE,IAAI;EAClB,cAAc,EAAE,IAAI;CACtB;AACF;AAEA,MAAM,cAAc,2BAAoC;CACtD,MAAM;CACN,SAAS;CACT,iBAAiB,OAAO;EACtB,QAAQ,EAAE,IAAI;EACd,MAAM,EAAE,IAAI;EACZ,SAAS,EAAE,IAAI,IAAI;EACnB,WAAW,EAAE,IAAI,OAAO,cAAc,KAAK;CAC7C;CACA,eAAe,GAAG,WAAW;EAC3B,EAAE,IAAI,iBAAiB,MAAM;CAC/B;AACF,CAAC;;AAGD,SAAgB,UAAU,GAA4B;CACpD,IAAI,kBAAkB,SAAS,GAC7B,OAAO,iBAAiB;CAE1B,OAAO,cAAc,CAAC;AACxB;AAEA,SAAgB,kBAAkB,UAAkC,CAAC,GAAG;CACtE,OAAO,OAAO,GAAY,SAA8B;EACtD,OAAO,YAAY,UAAU,GAAG,SAAS,OAAO,WAAW;GACzD,IAAI,OAAO,SAAS;IAClB,MAAM,OAAO,cAAc,KAAK,CAAC;IACjC;GACF;GAEA,sBACE,OAAO,QACP,kBAAkB,CAAC,GACnB,QAAQ,gBAAgB,CAAC,CAC3B;GAEA,IAAI;IACF,MAAM,OAAO,cAAc,KAAK,CAAC;IACjC,IAAI,QAAQ,aAAa,OAIvB,EAAE,MAAM,MAAM,OAAO,eAAe,EAAE,GAAG;GAE7C,SAAS,OAAO;IACd,IAAI,QAAQ,aAAa,OACvB,MAAM,OAAO,OAAO,EAClB,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,EACjE,CAAC;IAEH,MAAM;GACR;EACF,CAAC;CACH;AACF;;AAGA,MAAa,uBAAuB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration-BAs5uTiD.d.ts","names":[],"sources":["../src/toolkit/middleware.ts","../src/toolkit/integration.ts"],"mappings":";;;;KAmBY,UAAU,KAAK,IAAI,QAAQ;UAKtB;EACf;EACA;EACA,SAAS,eAAe;EACxB,aAAa,SAAS;EACtB,QAAQ,KAAK,wBAAwB;EACrC,uBAAuB;;;KAIb,qBAAqB;UAEhB;EACf;EACA;EACA;EACA;EACA,SAAS;EACT;;UAGe,gCAAgC;EAC/C,YAAY;IACV,QAAQ;IACR;IACA;IACA;IACA;QACI;EACN;EACA;EACA;;UAGe;EACf,QAAQ;EACR,SAAS;IACP;IACA,QAAQ;IACR,YAAY;QACR,QAAQ;EACd,iBACE,UAAU,UACV;IAAS;IAAiB,YAAY;QACnC,QAAQ;EACb;;iBAUc,0BACd,MAAM,kCACN,aAAa,SAAS,4BACrB;;;;;iBAmFa,uBACd,QAAQ,eACR,SAAS,0BACR;;;UCjJc;EACf;EACA;EACA,UACI,UACA;IACE,IAAI;;EACV;;UAGe;EACf;;EAEA,WAAW;;KAGD,oBAAoB;EAC9B,uBAAuB;EACvB;;UAGe,gCAAgC;EAC/C;;UAGe,yBAAyB;EACxC;EACA,iBAAiB,KAAK,SAAS;EAC/B,eAAe,KAAK,MAAM,QAAQ;EAClC,UAAU,kBAAkB;EAC5B,gBAAgB;EAChB,oBACE,KAAK,WACA,SAAS;EAChB,sBAAsB,KAAK,MAAM,SAAS;;UAG3B,+BAA+B;EAC9C,mBAAmB;EACnB,UAAU,GAAG,UAAU,IAAI,QAAQ,OAAO,QAAQ;;UAGnC,4BAA4B;EAC3C,QACE,UAAU,cACV,KAAK,MACL,UAAU,4BACP;EACL,YAAY,GACV,KAAK,MACL,SAAS,qCACT,UAAU,QAAQ,2BAA2B,QAAQ,IACrD,aAAa,KAAK,4CACf,QAAQ;;iBAGC,sBACd,QAAQ,kBACL,eAAe,MAAM;iBASJ,0BAA0B,GAC9C,QAAQ,wBACR,SAAS,yCACT,QAAQ,IACP,QAAQ;iBAaW,wBAAwB,GAC5C,QAAQ,wBACR,SAAS,yCACT,UAAU,IAAI,QAAQ,KACrB,QAAQ;iBAsBK,sBACd,UAAU,KACR,+BACM,gDAEP;iBAOa,mBACd,SAAS,+BACT,mBACC;iBA0Ga,2BAA2B,MACzC,MAAM,yBAAyB,QAC9B,4BAA4B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration-Cc8bXel_.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 = (\n response.headers.get('content-type') ?? ''\n ).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 (\n response.headers.get('transfer-encoding')?.toLowerCase().includes('chunked')\n ) {\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(\n onError(new TypeError('stream is already locked')),\n ).catch((err: unknown) => {\n console.error('[autotel-adapters] stream error handling failed:', err);\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(\n '[autotel-adapters] stream completion handling failed:',\n err,\n );\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(\n '[autotel-adapters] stream completion handling failed:',\n err,\n );\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 {\n createNoopRequestLogger,\n getRequestLogger,\n withTracing,\n} 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 /** Return false for framework control-flow throws that are not failures. */\n isError?: (error: unknown) => 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 completion?: Pick<IntegratedCompletionOptions, 'isError'>,\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 if (options?.isError?.(error) === false) {\n await handle.finish({});\n } else {\n await handle.finish({\n error: error instanceof Error ? error : new Error(String(error)),\n });\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, completion) {\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 // The wrapped factory is async, so the call always yields a Promise.\n return withTracing({ name: spanName, isError: completion?.isError })(\n (traceCtx) => async () => {\n const handle = buildHandle(spec, ctx, traceCtx, options ?? {});\n return handler(handle);\n },\n )() as ReturnType<typeof handler>;\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration-D_rlU8Nx.d.cts","names":[],"sources":["../src/toolkit/middleware.ts","../src/toolkit/integration.ts"],"mappings":";;;;KAmBY,UAAU,KAAK,IAAI,QAAQ;UAKtB;EACf;EACA;EACA,SAAS,eAAe;EACxB,aAAa,SAAS;EACtB,QAAQ,KAAK,wBAAwB;EACrC,uBAAuB;;;KAIb,qBAAqB;UAEhB;EACf;EACA;EACA;EACA;EACA,SAAS;EACT;;UAGe,gCAAgC;EAC/C,YAAY;IACV,QAAQ;IACR;IACA;IACA;IACA;QACI;EACN;EACA;EACA;;UAGe;EACf,QAAQ;EACR,SAAS;IACP;IACA,QAAQ;IACR,YAAY;QACR,QAAQ;EACd,iBACE,UAAU,UACV;IAAS;IAAiB,YAAY;QACnC,QAAQ;EACb;;iBAUc,0BACd,MAAM,kCACN,aAAa,SAAS,4BACrB;;;;;iBAmFa,uBACd,QAAQ,eACR,SAAS,0BACR;;;UCjJc;EACf;EACA;EACA,UACI,UACA;IACE,IAAI;;EACV;;UAGe;EACf;;EAEA,WAAW;;KAGD,oBAAoB;EAC9B,uBAAuB;EACvB;;UAGe,gCAAgC;EAC/C;;UAGe,yBAAyB;EACxC;EACA,iBAAiB,KAAK,SAAS;EAC/B,eAAe,KAAK,MAAM,QAAQ;EAClC,UAAU,kBAAkB;EAC5B,gBAAgB;EAChB,oBACE,KAAK,WACA,SAAS;EAChB,sBAAsB,KAAK,MAAM,SAAS;;UAG3B,+BAA+B;EAC9C,mBAAmB;EACnB,UAAU,GAAG,UAAU,IAAI,QAAQ,OAAO,QAAQ;;UAGnC,4BAA4B;EAC3C,QACE,UAAU,cACV,KAAK,MACL,UAAU,4BACP;EACL,YAAY,GACV,KAAK,MACL,SAAS,qCACT,UAAU,QAAQ,2BAA2B,QAAQ,IACrD,aAAa,KAAK,4CACf,QAAQ;;iBAGC,sBACd,QAAQ,kBACL,eAAe,MAAM;iBASJ,0BAA0B,GAC9C,QAAQ,wBACR,SAAS,yCACT,QAAQ,IACP,QAAQ;iBAaW,wBAAwB,GAC5C,QAAQ,wBACR,SAAS,yCACT,UAAU,IAAI,QAAQ,KACrB,QAAQ;iBAsBK,sBACd,UAAU,KACR,+BACM,gDAEP;iBAOa,mBACd,SAAS,+BACT,mBACC;iBA0Ga,2BAA2B,MACzC,MAAM,yBAAyB,QAC9B,4BAA4B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration-DvibHRzI.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 = (\n response.headers.get('content-type') ?? ''\n ).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 (\n response.headers.get('transfer-encoding')?.toLowerCase().includes('chunked')\n ) {\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(\n onError(new TypeError('stream is already locked')),\n ).catch((err: unknown) => {\n console.error('[autotel-adapters] stream error handling failed:', err);\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(\n '[autotel-adapters] stream completion handling failed:',\n err,\n );\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(\n '[autotel-adapters] stream completion handling failed:',\n err,\n );\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 {\n createNoopRequestLogger,\n getRequestLogger,\n withTracing,\n} 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 /** Return false for framework control-flow throws that are not failures. */\n isError?: (error: unknown) => 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 completion?: Pick<IntegratedCompletionOptions, 'isError'>,\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 if (options?.isError?.(error) === false) {\n await handle.finish({});\n } else {\n await handle.finish({\n error: error instanceof Error ? error : new Error(String(error)),\n });\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, completion) {\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 // The wrapped factory is async, so the call always yields a Promise.\n return withTracing({ name: spanName, isError: completion?.isError })(\n (traceCtx) => async () => {\n const handle = buildHandle(spec, ctx, traceCtx, options ?? {});\n return handler(handle);\n },\n )() as ReturnType<typeof handler>;\n },\n };\n}\n"],"mappings":"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"}
|
package/dist/nestjs.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nestjs.cjs","names":["createLoggerStorage","defineFrameworkIntegration","Observable"],"sources":["../src/nestjs.ts"],"sourcesContent":["import { from, isObservable, Observable, type Subscription } from 'rxjs';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport type { FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n type ExtractedRequest,\n} from './toolkit/integration';\n\nexport interface NestExecutionContextLike {\n getClass: () => { name: string };\n getHandler: () => { name: string };\n getType: () => string;\n switchToHttp: () => {\n getRequest: () => NestRequestLike;\n getResponse: () => NestResponseLike;\n };\n}\n\nexport interface NestRequestLike {\n method?: string;\n url?: string;\n originalUrl?: string;\n path?: string;\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface NestResponseLike {\n statusCode?: number;\n}\n\nexport interface NestWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n request: NestRequestLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: nestLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Register AutotelInterceptor globally or on controllers.',\n );\n\nfunction enrichFromRequest(\n request?: NestRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const url = request.originalUrl ?? request.url;\n const route = request.path ?? url;\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(url ? { 'url.full': url } : {}),\n ...(route ? { 'http.route': route } : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<NestExecutionContextLike>({\n name: 'nestjs',\n storage: nestLoggerStorage,\n extractRequest: (executionCtx) => {\n const request = executionCtx.switchToHttp().getRequest();\n const path = request.path ?? request.originalUrl ?? request.url ?? '/';\n return {\n method: request.method ?? 'GET',\n path,\n headers: request.headers,\n } satisfies ExtractedRequest;\n },\n attachLogger: () => {},\n spanName: (executionCtx) => {\n const handler = executionCtx.getHandler().name;\n const controller = executionCtx.getClass().name;\n return `nestjs.${controller}.${handler}`;\n },\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport class AutotelInterceptor {\n constructor(public readonly options: NestWithAutotelOptions = {}) {}\n\n intercept(\n executionCtx: NestExecutionContextLike,\n next: { handle: () => unknown },\n ): Observable<unknown> {\n // Nest handlers are lazy Observables. Subscribe inside the trace + ALS\n // scope, but proxy values as they arrive so multi-value and streaming\n // handlers retain their normal semantics.\n return new Observable((subscriber) => {\n let sourceSubscription: Subscription | undefined;\n let cancelled = false;\n let cancelRun: (() => void) | undefined;\n\n const run = integration.runTraced(\n executionCtx,\n this.options,\n async (handle) => {\n if (!handle.skipped) {\n const request = executionCtx.switchToHttp().getRequest();\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n this.options.enrichRequest?.(request),\n );\n }\n\n await handle.runWith(\n () =>\n new Promise<void>((resolve, reject) => {\n let settled = false;\n\n const settle = async (error?: unknown) => {\n if (settled) return;\n settled = true;\n\n try {\n if (!handle.skipped && this.options.autoEmit !== false) {\n if (error !== undefined) {\n await handle.finish({\n error:\n error instanceof Error\n ? error\n : new Error(String(error)),\n });\n } else {\n const response = executionCtx\n .switchToHttp()\n .getResponse();\n await handle.finish({ status: response.statusCode });\n }\n }\n } catch (finishError) {\n reject(finishError);\n return;\n }\n\n if (error !== undefined) reject(error);\n else resolve();\n };\n\n cancelRun = () => {\n void settle();\n };\n\n let source: unknown;\n try {\n source = next.handle();\n } catch (error) {\n void settle(error);\n return;\n }\n\n const observable = isObservable(source)\n ? source\n : from(Promise.resolve(source));\n sourceSubscription = observable.subscribe({\n next: (value) => {\n if (!cancelled) subscriber.next(value);\n },\n error: (error) => {\n void settle(error);\n },\n complete: () => {\n void settle();\n },\n });\n\n if (cancelled) {\n sourceSubscription.unsubscribe();\n cancelRun();\n }\n }),\n );\n },\n );\n\n void run.then(\n () => {\n if (!cancelled) subscriber.complete();\n },\n (error: unknown) => {\n if (!cancelled) subscriber.error(error);\n },\n );\n\n return () => {\n cancelled = true;\n sourceSubscription?.unsubscribe();\n cancelRun?.();\n };\n });\n }\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":"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"}
|
package/dist/nestjs.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nestjs.d.cts","names":[],"sources":["../src/nestjs.ts"],"mappings":";;;;;UAeiB;EACf;IAAkB;;EAClB;IAAoB;;EACpB;EACA;IACE,kBAAkB;IAClB,mBAAmB;;;UAIN;EACf;EACA;EACA;EACA;EACA,UAAU;;UAGK;EACf;;UAGe,+BAA+B;EAC9C,iBACE,SAAS,oBACN;;iBA2CS,aAAa;cAIhB;WACiB,SAAS;EAAT,YAAA,UAAS;EAErC,UACE,cAAc,0BACd;IAAQ;MACP"}
|
package/dist/nestjs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nestjs.d.ts","names":[],"sources":["../src/nestjs.ts"],"mappings":";;;;;UAeiB;EACf;IAAkB;;EAClB;IAAoB;;EACpB;EACA;IACE,kBAAkB;IAClB,mBAAmB;;;UAIN;EACf;EACA;EACA;EACA;EACA,UAAU;;UAGK;EACf;;UAGe,+BAA+B;EAC9C,iBACE,SAAS,oBACN;;iBA2CS,aAAa;cAIhB;WACiB,SAAS;EAAT,YAAA,UAAS;EAErC,UACE,cAAc,0BACd;IAAQ;MACP"}
|
package/dist/nestjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nestjs.js","names":[],"sources":["../src/nestjs.ts"],"sourcesContent":["import { from, isObservable, Observable, type Subscription } from 'rxjs';\nimport {\n createDrainPipeline,\n createStructuredError,\n parseError,\n type RequestLogger,\n} from 'autotel';\nimport type { FrameworkHandlerOptions } from './core';\nimport { createLoggerStorage } from './toolkit/storage';\nimport {\n applyLoggerEnrichment,\n defineFrameworkIntegration,\n type ExtractedRequest,\n} from './toolkit/integration';\n\nexport interface NestExecutionContextLike {\n getClass: () => { name: string };\n getHandler: () => { name: string };\n getType: () => string;\n switchToHttp: () => {\n getRequest: () => NestRequestLike;\n getResponse: () => NestResponseLike;\n };\n}\n\nexport interface NestRequestLike {\n method?: string;\n url?: string;\n originalUrl?: string;\n path?: string;\n headers?: Record<string, string | string[] | undefined>;\n}\n\nexport interface NestResponseLike {\n statusCode?: number;\n}\n\nexport interface NestWithAutotelOptions extends FrameworkHandlerOptions {\n enrichRequest?: (\n request: NestRequestLike,\n ) => Record<string, unknown> | undefined;\n}\n\nconst { storage: nestLoggerStorage, useLogger: storageUseLogger } =\n createLoggerStorage(\n 'request context. Register AutotelInterceptor globally or on controllers.',\n );\n\nfunction enrichFromRequest(\n request?: NestRequestLike,\n): Record<string, unknown> | undefined {\n if (!request) return undefined;\n\n const url = request.originalUrl ?? request.url;\n const route = request.path ?? url;\n\n return {\n ...(request.method ? { 'http.request.method': request.method } : {}),\n ...(url ? { 'url.full': url } : {}),\n ...(route ? { 'http.route': route } : {}),\n };\n}\n\nconst integration = defineFrameworkIntegration<NestExecutionContextLike>({\n name: 'nestjs',\n storage: nestLoggerStorage,\n extractRequest: (executionCtx) => {\n const request = executionCtx.switchToHttp().getRequest();\n const path = request.path ?? request.originalUrl ?? request.url ?? '/';\n return {\n method: request.method ?? 'GET',\n path,\n headers: request.headers,\n } satisfies ExtractedRequest;\n },\n attachLogger: () => {},\n spanName: (executionCtx) => {\n const handler = executionCtx.getHandler().name;\n const controller = executionCtx.getClass().name;\n return `nestjs.${controller}.${handler}`;\n },\n});\n\nexport function useLogger(): RequestLogger {\n return storageUseLogger();\n}\n\nexport class AutotelInterceptor {\n constructor(public readonly options: NestWithAutotelOptions = {}) {}\n\n intercept(\n executionCtx: NestExecutionContextLike,\n next: { handle: () => unknown },\n ): Observable<unknown> {\n // Nest handlers are lazy Observables. Subscribe inside the trace + ALS\n // scope, but proxy values as they arrive so multi-value and streaming\n // handlers retain their normal semantics.\n return new Observable((subscriber) => {\n let sourceSubscription: Subscription | undefined;\n let cancelled = false;\n let cancelRun: (() => void) | undefined;\n\n const run = integration.runTraced(\n executionCtx,\n this.options,\n async (handle) => {\n if (!handle.skipped) {\n const request = executionCtx.switchToHttp().getRequest();\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n this.options.enrichRequest?.(request),\n );\n }\n\n await handle.runWith(\n () =>\n new Promise<void>((resolve, reject) => {\n let settled = false;\n\n const settle = async (error?: unknown) => {\n if (settled) return;\n settled = true;\n\n try {\n if (!handle.skipped && this.options.autoEmit !== false) {\n if (error !== undefined) {\n await handle.finish({\n error:\n error instanceof Error\n ? error\n : new Error(String(error)),\n });\n } else {\n const response = executionCtx\n .switchToHttp()\n .getResponse();\n await handle.finish({ status: response.statusCode });\n }\n }\n } catch (finishError) {\n reject(finishError);\n return;\n }\n\n if (error !== undefined) reject(error);\n else resolve();\n };\n\n cancelRun = () => {\n void settle();\n };\n\n let source: unknown;\n try {\n source = next.handle();\n } catch (error) {\n void settle(error);\n return;\n }\n\n const observable = isObservable(source)\n ? source\n : from(Promise.resolve(source));\n sourceSubscription = observable.subscribe({\n next: (value) => {\n if (!cancelled) subscriber.next(value);\n },\n error: (error) => {\n void settle(error);\n },\n complete: () => {\n void settle();\n },\n });\n\n if (cancelled) {\n sourceSubscription.unsubscribe();\n cancelRun();\n }\n }),\n );\n },\n );\n\n void run.then(\n () => {\n if (!cancelled) subscriber.complete();\n },\n (error: unknown) => {\n if (!cancelled) subscriber.error(error);\n },\n );\n\n return () => {\n cancelled = true;\n sourceSubscription?.unsubscribe();\n cancelRun?.();\n };\n });\n }\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;AA2CA,MAAM,EAAE,SAAS,mBAAmB,WAAW,qBAC7C,oBACE,0EACF;AAEF,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,MAAM,MAAM,QAAQ,eAAe,QAAQ;CAC3C,MAAM,QAAQ,QAAQ,QAAQ;CAE9B,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;EACjC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;CACzC;AACF;AAEA,MAAM,cAAc,2BAAqD;CACvE,MAAM;CACN,SAAS;CACT,iBAAiB,iBAAiB;EAChC,MAAM,UAAU,aAAa,aAAa,CAAC,CAAC,WAAW;EACvD,MAAM,OAAO,QAAQ,QAAQ,QAAQ,eAAe,QAAQ,OAAO;EACnE,OAAO;GACL,QAAQ,QAAQ,UAAU;GAC1B;GACA,SAAS,QAAQ;EACnB;CACF;CACA,oBAAoB,CAAC;CACrB,WAAW,iBAAiB;EAC1B,MAAM,UAAU,aAAa,WAAW,CAAC,CAAC;EAE1C,OAAO,UADY,aAAa,SAAS,CAAC,CAAC,KACf,GAAG;CACjC;AACF,CAAC;AAED,SAAgB,YAA2B;CACzC,OAAO,iBAAiB;AAC1B;AAEA,IAAa,qBAAb,MAAgC;CACF;CAA5B,YAAY,AAAgB,UAAkC,CAAC,GAAG;EAAtC;CAAuC;CAEnE,UACE,cACA,MACqB;EAIrB,OAAO,IAAI,YAAY,eAAe;GACpC,IAAI;GACJ,IAAI,YAAY;GAChB,IAAI;GAqFJ,AAnFY,YAAY,UACtB,cACA,KAAK,SACL,OAAO,WAAW;IAChB,IAAI,CAAC,OAAO,SAAS;KACnB,MAAM,UAAU,aAAa,aAAa,CAAC,CAAC,WAAW;KACvD,sBACE,OAAO,QACP,kBAAkB,OAAO,GACzB,KAAK,QAAQ,gBAAgB,OAAO,CACtC;IACF;IAEA,MAAM,OAAO,cAET,IAAI,SAAe,SAAS,WAAW;KACrC,IAAI,UAAU;KAEd,MAAM,SAAS,OAAO,UAAoB;MACxC,IAAI,SAAS;MACb,UAAU;MAEV,IAAI;OACF,IAAI,CAAC,OAAO,WAAW,KAAK,QAAQ,aAAa,OAC/C,IAAI,UAAU,QACZ,MAAM,OAAO,OAAO,EAClB,OACE,iBAAiB,QACb,QACA,IAAI,MAAM,OAAO,KAAK,CAAC,EAC/B,CAAC;YACI;QACL,MAAM,WAAW,aACd,aAAa,CAAC,CACd,YAAY;QACf,MAAM,OAAO,OAAO,EAAE,QAAQ,SAAS,WAAW,CAAC;OACrD;MAEJ,SAAS,aAAa;OACpB,OAAO,WAAW;OAClB;MACF;MAEA,IAAI,UAAU,QAAW,OAAO,KAAK;WAChC,QAAQ;KACf;KAEA,kBAAkB;MAChB,AAAK,OAAO;KACd;KAEA,IAAI;KACJ,IAAI;MACF,SAAS,KAAK,OAAO;KACvB,SAAS,OAAO;MACd,AAAK,OAAO,KAAK;MACjB;KACF;KAKA,sBAHmB,aAAa,MAAM,IAClC,SACA,KAAK,QAAQ,QAAQ,MAAM,CAAC,EACD,CAAC,UAAU;MACxC,OAAO,UAAU;OACf,IAAI,CAAC,WAAW,WAAW,KAAK,KAAK;MACvC;MACA,QAAQ,UAAU;OAChB,AAAK,OAAO,KAAK;MACnB;MACA,gBAAgB;OACd,AAAK,OAAO;MACd;KACF,CAAC;KAED,IAAI,WAAW;MACb,mBAAmB,YAAY;MAC/B,UAAU;KACZ;IACF,CAAC,CACL;GACF,CAGK,CAAC,CAAC,WACD;IACJ,IAAI,CAAC,WAAW,WAAW,SAAS;GACtC,IACC,UAAmB;IAClB,IAAI,CAAC,WAAW,WAAW,MAAM,KAAK;GACxC,CACF;GAEA,aAAa;IACX,YAAY;IACZ,oBAAoB,YAAY;IAChC,YAAY;GACd;EACF,CAAC;CACH;AACF"}
|
package/dist/next.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"next.cjs","names":["createLoggerStorage","getHeader","createUseLogger","defineFrameworkIntegration","buildTracedOptions","runWithIntegratedHandle"],"sources":["../src/next.ts"],"sourcesContent":["import {\n createDrainPipeline,\n parseError,\n createStructuredError,\n type RequestLogger,\n type RequestLoggerOptions,\n} from 'autotel';\nimport { unstable_rethrow as unstableRethrow } from 'next/navigation.js';\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\n/**\n * Next navigation helpers throw internal values that the framework converts\n * into responses. Delegate classification to Next itself so new signal types\n * and signals wrapped in `cause` stay covered without duplicating its internals.\n */\nfunction findNextControlFlowSignal(error: unknown): unknown | null {\n try {\n unstableRethrow(error);\n return null;\n } catch (signal) {\n return signal;\n }\n}\n\nfunction isRealNextError(error: unknown): boolean {\n return findNextControlFlowSignal(error) === null;\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 const tracedOptions = buildTracedOptions(\n options,\n resolveSpanName(request, options),\n );\n\n return integration.runTraced(\n request,\n tracedOptions,\n async (handle) =>\n runWithIntegratedHandle(\n handle,\n { autoEmit: tracedOptions.autoEmit, isError: isRealNextError },\n async () => {\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n options?.enrichRequest?.(request),\n );\n try {\n return await handler(...args);\n } catch (error) {\n const signal = findNextControlFlowSignal(error);\n throw signal ?? error;\n }\n },\n ),\n { isError: isRealNextError },\n );\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;;;;;;;AA2CA,SAAS,0BAA0B,OAAgC;CACjE,IAAI;EACF,yCAAgB,KAAK;EACrB,OAAO;CACT,SAAS,QAAQ;EACf,OAAO;CACT;AACF;AAEA,SAAS,gBAAgB,OAAyB;CAChD,OAAO,0BAA0B,KAAK,MAAM;AAC9C;AAEA,MAAM,EAAE,SAAS,mBAAmB,WAAW,qBAC7CA,4CACE,0DACF;AAEF,SAAS,kBACP,SACqC;CACrC,IAAI,CAAC,SAAS,OAAO;CAErB,IAAI,QAAQ;CACZ,IAAI,QAAQ,KACV,IAAI;EACF,QAAQ,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC/B,QAAQ;EACN,QAAQ,QAAQ;CAClB;CAEF,MAAM,YAAYC,uBAAU,QAAQ,SAAS,cAAc;CAE3D,OAAO;EACL,GAAI,QAAQ,SAAS,EAAE,uBAAuB,QAAQ,OAAO,IAAI,CAAC;EAClE,GAAI,QAAQ,MAAM,EAAE,YAAY,QAAQ,IAAI,IAAI,CAAC;EACjD,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;EACvC,GAAI,YAAY,EAAE,oCAAoC,UAAU,IAAI,CAAC;CACvE;AACF;AAEA,MAAM,gBAAgBC,6BAAiC;CACrD,aAAa;CACb,QAAQ;AACV,CAAC;AAED,SAAgB,UACd,SACA,sBACe;CACf,IAAI;EACF,OAAO,iBAAiB;CAC1B,QAAQ;EACN,OAAO,cAAc,SAAS,oBAAoB;CACpD;AACF;AAEA,SAAS,YAAY,SAAmC;CACtD,IAAI,CAAC,SAAS,KAAK,OAAO;CAC1B,IAAI;EACF,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;CAC9B,QAAQ;EACN,OAAO,QAAQ;CACjB;AACF;AAEA,MAAM,cAAcC,+CAAwD;CAC1E,MAAM;CACN,SAAS;CACT,iBAAiB,aAAa;EAC5B,QAAQ,SAAS,UAAU;EAC3B,MAAM,YAAY,OAAO;EACzB,SAAS,SAAS;EAClB,WAAWF,uBAAU,SAAS,SAAS,cAAc;CACvD;CACA,oBAAoB,CAAC;AACvB,CAAC;AAED,SAAS,gBACP,SACA,SACQ;CACR,IAAI,OAAO,SAAS,aAAa,YAC/B,OAAO,QAAQ,SAAS,OAAO;CAEjC,OAAO,SAAS,YAAY;AAC9B;AAEA,SAAgB,YACd,SACA,SACsC;CACtC,OAAO,OAAO,GAAG,SAAkC;EACjD,MAAM,UAAU,KAAK;EACrB,MAAM,gBAAgBG,uCACpB,SACA,gBAAgB,SAAS,OAAO,CAClC;EAEA,OAAO,YAAY,UACjB,SACA,eACA,OAAO,WACLC,4CACE,QACA;GAAE,UAAU,cAAc;GAAU,SAAS;EAAgB,GAC7D,YAAY;GACV,0CACE,OAAO,QACP,kBAAkB,OAAO,GACzB,SAAS,gBAAgB,OAAO,CAClC;GACA,IAAI;IACF,OAAO,MAAM,QAAQ,GAAG,IAAI;GAC9B,SAAS,OAAO;IAEd,MADe,0BAA0B,KAC9B,KAAK;GAClB;EACF,CACF,GACF,EAAE,SAAS,gBAAgB,CAC7B;CACF;AACF"}
|
package/dist/next.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.cts","names":[],"sources":["../src/next.ts"],"mappings":";;;;UAqBiB;EACf;EACA;EACA;IACI,IAAI;MAAiC;;UAG1B,+BAA+B,KAC9C;EAGA,sBAAsB,UAAU;EAChC,iBACE,UAAU,oBACP;;iBAsDS,UACd,UAAU,iBACV,uBAAuB,uBACtB;iBAuCa,YAAY,yBAAyB,SACnD,aAAa,MAAM,UAAU,UAAU,QAAQ,UAC/C,UAAU,6BACL,MAAM,UAAU,QAAQ"}
|
package/dist/next.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","names":[],"sources":["../src/next.ts"],"mappings":";;;;UAqBiB;EACf;EACA;EACA;IACI,IAAI;MAAiC;;UAG1B,+BAA+B,KAC9C;EAGA,sBAAsB,UAAU;EAChC,iBACE,UAAU,oBACP;;iBAsDS,UACd,UAAU,iBACV,uBAAuB,uBACtB;iBAuCa,YAAY,yBAAyB,SACnD,aAAa,MAAM,UAAU,UAAU,QAAQ,UAC/C,UAAU,6BACL,MAAM,UAAU,QAAQ"}
|
package/dist/next.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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 { unstable_rethrow as unstableRethrow } from 'next/navigation.js';\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\n/**\n * Next navigation helpers throw internal values that the framework converts\n * into responses. Delegate classification to Next itself so new signal types\n * and signals wrapped in `cause` stay covered without duplicating its internals.\n */\nfunction findNextControlFlowSignal(error: unknown): unknown | null {\n try {\n unstableRethrow(error);\n return null;\n } catch (signal) {\n return signal;\n }\n}\n\nfunction isRealNextError(error: unknown): boolean {\n return findNextControlFlowSignal(error) === null;\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 const tracedOptions = buildTracedOptions(\n options,\n resolveSpanName(request, options),\n );\n\n return integration.runTraced(\n request,\n tracedOptions,\n async (handle) =>\n runWithIntegratedHandle(\n handle,\n { autoEmit: tracedOptions.autoEmit, isError: isRealNextError },\n async () => {\n applyLoggerEnrichment(\n handle.logger,\n enrichFromRequest(request),\n options?.enrichRequest?.(request),\n );\n try {\n return await handler(...args);\n } catch (error) {\n const signal = findNextControlFlowSignal(error);\n throw signal ?? error;\n }\n },\n ),\n { isError: isRealNextError },\n );\n };\n}\n\nexport { parseError, createDrainPipeline, createStructuredError };\n"],"mappings":";;;;;;;;;;;;AA2CA,SAAS,0BAA0B,OAAgC;CACjE,IAAI;EACF,iBAAgB,KAAK;EACrB,OAAO;CACT,SAAS,QAAQ;EACf,OAAO;CACT;AACF;AAEA,SAAS,gBAAgB,OAAyB;CAChD,OAAO,0BAA0B,KAAK,MAAM;AAC9C;AAEA,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;EACrB,MAAM,gBAAgB,mBACpB,SACA,gBAAgB,SAAS,OAAO,CAClC;EAEA,OAAO,YAAY,UACjB,SACA,eACA,OAAO,WACL,wBACE,QACA;GAAE,UAAU,cAAc;GAAU,SAAS;EAAgB,GAC7D,YAAY;GACV,sBACE,OAAO,QACP,kBAAkB,OAAO,GACzB,SAAS,gBAAgB,OAAO,CAClC;GACA,IAAI;IACF,OAAO,MAAM,QAAQ,GAAG,IAAI;GAC9B,SAAS,OAAO;IAEd,MADe,0BAA0B,KAC9B,KAAK;GAClB;EACF,CACF,GACF,EAAE,SAAS,gBAAgB,CAC7B;CACF;AACF"}
|
package/dist/nitro.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/sveltekit.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/sveltekit.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/sveltekit.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sveltekit.js","names":[],"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,qBAClD,oBACE,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,cAAc,2BAA+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,sBACE,OAAO,QACP,gBAAgB,KAAK,GACrB,QAAQ,gBAAgB,KAAK,CAC/B;EAEA,OAAO,wBAAwB,QAAQ,eAAe,QAAQ,KAAK,CAAC;CACtE,CAAC;AACL"}
|
package/dist/tanstack.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack.cjs","names":["createUseLogger"],"sources":["../src/tanstack.ts"],"sourcesContent":["import { createUseLogger } from './core';\n\nexport const useLogger = createUseLogger<{\n pathname?: string;\n method?: string;\n}>({\n adapterName: 'tanstack',\n enrich: (ctx) => ({\n ...(ctx.method ? { 'http.request.method': ctx.method } : {}),\n ...(ctx.pathname ? { 'http.route': ctx.pathname } : {}),\n }),\n});\n"],"mappings":";;;;AAEA,MAAa,YAAYA,6BAGtB;CACD,aAAa;CACb,SAAS,SAAS;EAChB,GAAI,IAAI,SAAS,EAAE,uBAAuB,IAAI,OAAO,IAAI,CAAC;EAC1D,GAAI,IAAI,WAAW,EAAE,cAAc,IAAI,SAAS,IAAI,CAAC;CACvD;AACF,CAAC"}
|
package/dist/tanstack.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack.d.cts","names":[],"sources":["../src/tanstack.ts"],"mappings":";cAEa,YAAS;EACT;EACF;eAOT,yCAAA,2CAAA"}
|
package/dist/tanstack.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack.d.ts","names":[],"sources":["../src/tanstack.ts"],"mappings":";cAEa,YAAS;EACT;EACF;eAOT,yCAAA,2CAAA"}
|
package/dist/tanstack.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack.js","names":[],"sources":["../src/tanstack.ts"],"sourcesContent":["import { createUseLogger } from './core';\n\nexport const useLogger = createUseLogger<{\n pathname?: string;\n method?: string;\n}>({\n adapterName: 'tanstack',\n enrich: (ctx) => ({\n ...(ctx.method ? { 'http.request.method': ctx.method } : {}),\n ...(ctx.pathname ? { 'http.route': ctx.pathname } : {}),\n }),\n});\n"],"mappings":";;;AAEA,MAAa,YAAY,gBAGtB;CACD,aAAa;CACb,SAAS,SAAS;EAChB,GAAI,IAAI,SAAS,EAAE,uBAAuB,IAAI,OAAO,IAAI,CAAC;EAC1D,GAAI,IAAI,WAAW,EAAE,cAAc,IAAI,SAAS,IAAI,CAAC;CACvD;AACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.cjs","names":["AsyncLocalStorage"],"sources":["../../src/toolkit/storage.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport type { ForkLifecycle, RequestLogger } from 'autotel';\n\n/**\n * Create a request-scoped `AsyncLocalStorage` and matching `useLogger`\n * accessor. Framework adapters call this once at module level.\n *\n * Prefer `import { createLoggerStorage } from 'autotel-adapters/toolkit/storage'`\n * on Cloudflare Workers / edge so `node:async_hooks` is not pulled through the\n * main `autotel-adapters/toolkit` barrel.\n */\nexport function createLoggerStorage(contextHint: string) {\n const storage = new AsyncLocalStorage<RequestLogger>();\n\n function useLogger(): RequestLogger {\n const logger = storage.getStore();\n if (!logger) {\n throw new Error(\n `[autotel-adapters] useLogger() was called outside of an autotel ${contextHint}`,\n );\n }\n return logger;\n }\n\n return { storage, useLogger };\n}\n\n/** Bind forked loggers into the adapter's request-scoped storage. */\nexport function createStorageForkLifecycle(\n storage: AsyncLocalStorage<RequestLogger>,\n): ForkLifecycle {\n return {\n onChildEnter: (child) => {\n storage.enterWith(child);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,oBAAoB,aAAqB;CACvD,MAAM,UAAU,IAAIA,mCAAiC;CAErD,SAAS,YAA2B;EAClC,MAAM,SAAS,QAAQ,SAAS;EAChC,IAAI,CAAC,QACH,MAAM,IAAI,MACR,mEAAmE,aACrE;EAEF,OAAO;CACT;CAEA,OAAO;EAAE;EAAS;CAAU;AAC9B;;AAGA,SAAgB,2BACd,SACe;CACf,OAAO,EACL,eAAe,UAAU;EACvB,QAAQ,UAAU,KAAK;CACzB,EACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.cts","names":[],"sources":["../../src/toolkit/storage.ts"],"mappings":";;;;;;;;;;;iBAWgB,oBAAoB;;EAGZ,iBAAA;;;iBAcR,2BACd,SAAS,kBAAkB,iBAC1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","names":[],"sources":["../../src/toolkit/storage.ts"],"mappings":";;;;;;;;;;;iBAWgB,oBAAoB;;EAGZ,iBAAA;;;iBAcR,2BACd,SAAS,kBAAkB,iBAC1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","names":[],"sources":["../../src/toolkit/storage.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport type { ForkLifecycle, RequestLogger } from 'autotel';\n\n/**\n * Create a request-scoped `AsyncLocalStorage` and matching `useLogger`\n * accessor. Framework adapters call this once at module level.\n *\n * Prefer `import { createLoggerStorage } from 'autotel-adapters/toolkit/storage'`\n * on Cloudflare Workers / edge so `node:async_hooks` is not pulled through the\n * main `autotel-adapters/toolkit` barrel.\n */\nexport function createLoggerStorage(contextHint: string) {\n const storage = new AsyncLocalStorage<RequestLogger>();\n\n function useLogger(): RequestLogger {\n const logger = storage.getStore();\n if (!logger) {\n throw new Error(\n `[autotel-adapters] useLogger() was called outside of an autotel ${contextHint}`,\n );\n }\n return logger;\n }\n\n return { storage, useLogger };\n}\n\n/** Bind forked loggers into the adapter's request-scoped storage. */\nexport function createStorageForkLifecycle(\n storage: AsyncLocalStorage<RequestLogger>,\n): ForkLifecycle {\n return {\n onChildEnter: (child) => {\n storage.enterWith(child);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,oBAAoB,aAAqB;CACvD,MAAM,UAAU,IAAI,kBAAiC;CAErD,SAAS,YAA2B;EAClC,MAAM,SAAS,QAAQ,SAAS;EAChC,IAAI,CAAC,QACH,MAAM,IAAI,MACR,mEAAmE,aACrE;EAEF,OAAO;CACT;CAEA,OAAO;EAAE;EAAS;CAAU;AAC9B;;AAGA,SAAgB,2BACd,SACe;CACf,OAAO,EACL,eAAe,UAAU;EACvB,QAAQ,UAAU,KAAK;CACzB,EACF;AACF"}
|