autotel-tanstack 1.13.45 → 1.13.47
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/auto.d.ts +2 -3
- package/dist/auto.js +1 -2
- package/dist/browser/context.d.ts +1 -2
- package/dist/browser/context.js +1 -2
- package/dist/browser/debug-headers.d.ts +1 -2
- package/dist/browser/debug-headers.js +1 -2
- package/dist/browser/error-reporting.d.ts +1 -2
- package/dist/browser/error-reporting.js +1 -2
- package/dist/browser/handlers.d.ts +1 -2
- package/dist/browser/handlers.js +1 -2
- package/dist/browser/loaders.d.ts +1 -2
- package/dist/browser/loaders.js +1 -2
- package/dist/browser/metrics.d.ts +1 -2
- package/dist/browser/metrics.js +1 -2
- package/dist/browser/middleware.d.ts +1 -2
- package/dist/browser/middleware.js +1 -2
- package/dist/browser/server-functions.d.ts +1 -2
- package/dist/browser/server-functions.js +1 -2
- package/dist/browser/testing.d.ts +1 -2
- package/dist/browser/testing.js +1 -2
- package/dist/browser/types.js +1 -2
- package/dist/context.d.ts +1 -2
- package/dist/context.js +1 -2
- package/dist/control-flow-p-dnko0G.js +1 -2
- package/dist/debug-headers.d.ts +1 -2
- package/dist/debug-headers.js +1 -2
- package/dist/env-BpFWNnpL.js +1 -2
- package/dist/error-reporting.d.ts +1 -2
- package/dist/error-reporting.js +1 -2
- package/dist/handlers.d.ts +1 -2
- package/dist/handlers.js +1 -2
- package/dist/index.d.ts +2 -3
- package/dist/instrument-B4bfWksz.d.ts +1 -2
- package/dist/instrument-DdLlMfRi.js +1 -2
- package/dist/{loaders-DMUCHc32.d.ts → loaders-v21GtI_c.d.ts} +15 -16
- package/dist/loaders.d.ts +1 -1
- package/dist/loaders.js +1 -2
- package/dist/metrics.d.ts +1 -2
- package/dist/metrics.js +1 -2
- package/dist/middleware.d.ts +1 -2
- package/dist/middleware.js +1 -2
- package/dist/route-filter-dLg-j3jR.js +1 -2
- package/dist/server-functions.d.ts +1 -2
- package/dist/server-functions.js +1 -2
- package/dist/testing.d.ts +6 -7
- package/dist/testing.js +1 -2
- package/dist/types-BJ7FyVoX.d.ts +1 -2
- package/dist/types-zkKShSiK.d.ts +1 -2
- package/package.json +7 -7
- package/dist/auto.d.ts.map +0 -1
- package/dist/auto.js.map +0 -1
- package/dist/browser/context.d.ts.map +0 -1
- package/dist/browser/context.js.map +0 -1
- package/dist/browser/debug-headers.d.ts.map +0 -1
- package/dist/browser/debug-headers.js.map +0 -1
- package/dist/browser/error-reporting.d.ts.map +0 -1
- package/dist/browser/error-reporting.js.map +0 -1
- package/dist/browser/handlers.d.ts.map +0 -1
- package/dist/browser/handlers.js.map +0 -1
- package/dist/browser/loaders.d.ts.map +0 -1
- package/dist/browser/loaders.js.map +0 -1
- package/dist/browser/metrics.d.ts.map +0 -1
- package/dist/browser/metrics.js.map +0 -1
- package/dist/browser/middleware.d.ts.map +0 -1
- package/dist/browser/middleware.js.map +0 -1
- package/dist/browser/server-functions.d.ts.map +0 -1
- package/dist/browser/server-functions.js.map +0 -1
- package/dist/browser/testing.d.ts.map +0 -1
- package/dist/browser/testing.js.map +0 -1
- package/dist/browser/types.js.map +0 -1
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js.map +0 -1
- package/dist/control-flow-p-dnko0G.js.map +0 -1
- package/dist/debug-headers.d.ts.map +0 -1
- package/dist/debug-headers.js.map +0 -1
- package/dist/env-BpFWNnpL.js.map +0 -1
- package/dist/error-reporting.d.ts.map +0 -1
- package/dist/error-reporting.js.map +0 -1
- package/dist/handlers.d.ts.map +0 -1
- package/dist/handlers.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/instrument-B4bfWksz.d.ts.map +0 -1
- package/dist/instrument-DdLlMfRi.js.map +0 -1
- package/dist/loaders-DMUCHc32.d.ts.map +0 -1
- package/dist/loaders.js.map +0 -1
- package/dist/metrics.d.ts.map +0 -1
- package/dist/metrics.js.map +0 -1
- package/dist/middleware.d.ts.map +0 -1
- package/dist/middleware.js.map +0 -1
- package/dist/route-filter-dLg-j3jR.js.map +0 -1
- package/dist/server-functions.d.ts.map +0 -1
- package/dist/server-functions.js.map +0 -1
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js.map +0 -1
- package/dist/types-BJ7FyVoX.d.ts.map +0 -1
- package/dist/types-zkKShSiK.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "autotel-tanstack",
|
|
3
|
-
"version": "1.13.
|
|
3
|
+
"version": "1.13.47",
|
|
4
4
|
"description": "OpenTelemetry instrumentation for TanStack Start - automatic tracing for server functions, middleware, and route loaders",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -118,9 +118,9 @@
|
|
|
118
118
|
"license": "Apache-2.0",
|
|
119
119
|
"dependencies": {
|
|
120
120
|
"@opentelemetry/api": "^1.9.1",
|
|
121
|
-
"autotel": "6.
|
|
122
|
-
"autotel-
|
|
123
|
-
"autotel-
|
|
121
|
+
"autotel": "6.2.0",
|
|
122
|
+
"autotel-edge": "4.0.2",
|
|
123
|
+
"autotel-adapters": "2.0.3"
|
|
124
124
|
},
|
|
125
125
|
"peerDependencies": {
|
|
126
126
|
"@tanstack/react-start": "^1.168.32",
|
|
@@ -135,11 +135,11 @@
|
|
|
135
135
|
}
|
|
136
136
|
},
|
|
137
137
|
"devDependencies": {
|
|
138
|
-
"@opentelemetry/sdk-trace-base": "^2.
|
|
138
|
+
"@opentelemetry/sdk-trace-base": "^2.10.0",
|
|
139
139
|
"@tanstack/react-router": "^1.170.18",
|
|
140
|
-
"@types/node": "^26.1.
|
|
140
|
+
"@types/node": "^26.1.2",
|
|
141
141
|
"rimraf": "^6.1.3",
|
|
142
|
-
"tsdown": "^0.22.
|
|
142
|
+
"tsdown": "^0.22.14",
|
|
143
143
|
"typescript": "^6.0.3",
|
|
144
144
|
"vitest": "^4.1.10",
|
|
145
145
|
"vitest-mock-extended": "^5.1.0"
|
package/dist/auto.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto.d.ts","names":[],"sources":["../src/auto.ts"],"mappings":";;;;;;iBA+CgB;;iBAKA;;iBAKA"}
|
package/dist/auto.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto.js","names":[],"sources":["../src/auto.ts"],"sourcesContent":["/**\n * Zero-config auto-instrumentation for TanStack Start.\n *\n * Importing this module configures OpenTelemetry tracing from environment\n * variables — it is simply `instrument()` with no options. For subscribers,\n * structured logs, canonical log lines, or an explicit endpoint, call\n * `instrument(options)` from `autotel-tanstack` directly (see ./instrument).\n *\n * Environment Variables (resolved by autotel core):\n * - OTEL_SERVICE_NAME: Service name (default: 'tanstack-start')\n * - OTEL_EXPORTER_OTLP_ENDPOINT: OTLP collector URL\n * - OTEL_EXPORTER_OTLP_HEADERS: Auth headers (key=value,key=value)\n * - AUTOTEL_DEBUG: 'true' | 'pretty' to log spans to the server console\n *\n * @example\n * ```typescript\n * // app/start.ts\n * import 'autotel-tanstack/auto';\n * import { createStart } from '@tanstack/react-start';\n * export const startInstance = createStart(() => ({}));\n * ```\n *\n * @module\n */\n\nimport { instrument } from './instrument';\n\ninstrument();\n\n// Surface what happened, in development only.\nif (process.env.NODE_ENV === 'development' || process.env.AUTOTEL_DEBUG) {\n console.log('[autotel-tanstack] Auto-initialized', {\n service: process.env.OTEL_SERVICE_NAME || 'tanstack-start',\n endpoint:\n process.env.E2E === '1'\n ? '(E2E: in-memory)'\n : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || '(not configured)',\n });\n}\n\n// Re-export the configurable form + middleware/helpers for convenience.\nexport { instrument } from './instrument';\nexport { tracingMiddleware, functionTracingMiddleware } from './middleware';\nexport { traceServerFn } from './server-functions';\nexport { traceLoader, traceBeforeLoad } from './loaders';\n\n/** Check if auto-instrumentation is active. */\nexport function isAutoInstrumentationActive(): boolean {\n return true;\n}\n\n/** The configured service name. */\nexport function getServiceName(): string {\n return process.env.OTEL_SERVICE_NAME || 'tanstack-start';\n}\n\n/** The configured OTLP endpoint, if any. */\nexport function getEndpoint(): string | undefined {\n return process.env.OTEL_EXPORTER_OTLP_ENDPOINT;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,WAAW;AAGX,IAAI,QAAQ,IAAI,aAAa,iBAAiB,QAAQ,IAAI,eACxD,QAAQ,IAAI,uCAAuC;CACjD,SAAS,QAAQ,IAAI,qBAAqB;CAC1C,UACE,QAAQ,IAAI,QAAQ,MAChB,qBACA,QAAQ,IAAI,+BAA+B;AACnD,CAAC;;AAUH,SAAgB,8BAAuC;CACrD,OAAO;AACT;;AAGA,SAAgB,iBAAyB;CACvC,OAAO,QAAQ,IAAI,qBAAqB;AAC1C;;AAGA,SAAgB,cAAkC;CAChD,OAAO,QAAQ,IAAI;AACrB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","names":[],"sources":["../../src/browser/context.ts"],"mappings":";;;;;;;;;;KAUY,kBACV,UAAU;;;;iBAKI,0BAA0B,UAAU;;;;iBASpC,uBACd,SAAS,SACT,gBACC;;;;iBAQa,oBACd,kBAAkB,iBAClB,gBACC;;;;iBAQa,aAAa,GAAG,wBAAwB,UAAU,IAAI;;;;iBAQtD;;;;iBAOA;;;;iBAOA;;;;iBAOA;;;;iBAOA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../src/browser/context.ts"],"sourcesContent":["/**\n * Browser stub for context module\n *\n * In browser environments, context propagation is not needed.\n * These functions return empty/default values.\n */\n\n/**\n * Type representing values that can be used to initialize Headers\n */\nexport type HeadersInitType =\n Headers | Record<string, string> | [string, string][];\n\n/**\n * Browser stub: Returns root context (no parent)\n */\nexport function extractContextFromRequest(_request: Request): unknown {\n void _request;\n // Return an empty context-like object\n return {};\n}\n\n/**\n * Browser stub: Returns headers unchanged\n */\nexport function injectContextToHeaders(\n headers: Headers,\n ctx?: unknown,\n): Headers {\n void ctx;\n return headers;\n}\n\n/**\n * Browser stub: Create headers with optional initial values\n */\nexport function createTracedHeaders(\n existingHeaders?: HeadersInitType,\n ctx?: unknown,\n): Headers {\n void ctx;\n return new Headers(existingHeaders);\n}\n\n/**\n * Browser stub: Run function and return result\n */\nexport function runInContext<T>(parentContext: unknown, fn: () => T): T {\n void parentContext;\n return fn();\n}\n\n/**\n * Browser stub: Returns empty context object\n */\nexport function getActiveContext(): unknown {\n return {};\n}\n\n/**\n * Browser stub: Returns empty string\n */\nexport function getTraceParent(): string {\n return '';\n}\n\n/**\n * Browser stub: Returns empty string\n */\nexport function getTraceState(): string {\n return '';\n}\n\n/**\n * Browser stub: Returns undefined\n */\nexport function getCurrentTraceId(): string | undefined {\n return undefined;\n}\n\n/**\n * Browser stub: Returns undefined\n */\nexport function getCurrentSpanId(): string | undefined {\n return undefined;\n}\n"],"mappings":";;;;AAgBA,SAAgB,0BAA0B,UAA4B;CAGpE,OAAO,CAAC;AACV;;;;AAKA,SAAgB,uBACd,SACA,KACS;CAET,OAAO;AACT;;;;AAKA,SAAgB,oBACd,iBACA,KACS;CAET,OAAO,IAAI,QAAQ,eAAe;AACpC;;;;AAKA,SAAgB,aAAgB,eAAwB,IAAgB;CAEtE,OAAO,GAAG;AACZ;;;;AAKA,SAAgB,mBAA4B;CAC1C,OAAO,CAAC;AACV;;;;AAKA,SAAgB,iBAAyB;CACvC,OAAO;AACT;;;;AAKA,SAAgB,gBAAwB;CACtC,OAAO;AACT;;;;AAKA,SAAgB,oBAAwC,CAExD;;;;AAKA,SAAgB,mBAAuC,CAEvD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-headers.d.ts","names":[],"sources":["../../src/browser/debug-headers.ts"],"mappings":";;;;;iBAYgB,uBACd,uBACG,kBAAkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-headers.js","names":[],"sources":["../../src/browser/debug-headers.ts"],"sourcesContent":["/**\n * Browser stub for debug-headers module\n *\n * Debug headers are server-side only.\n * In browser, this returns pass-through middleware.\n */\n\nimport type { MiddlewareHandler } from './middleware';\n\n/**\n * Browser stub: Returns pass-through middleware\n */\nexport function debugHeadersMiddleware<\n TContext = unknown,\n>(): MiddlewareHandler<TContext> {\n return async function noopMiddleware(opts) {\n return opts.next();\n };\n}\n"],"mappings":";;;;AAYA,SAAgB,yBAEiB;CAC/B,OAAO,eAAe,eAAe,MAAM;EACzC,OAAO,KAAK,KAAK;CACnB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-reporting.d.ts","names":[],"sources":["../../src/browser/error-reporting.ts"],"mappings":";;;;;;;;;;UAUiB;EACf;EACA;EACA;EACA,UAAU;;;;;iBAMI,YACd,OAAO,OACP,UAAU;;;;iBAUI,gBAAgB,iBAAiB;;;;iBAQjC;;;;iBAOA,qCAAqC;;;;iBAUrC,mBAAmB,cAAc,qBAC/C,IAAI,GACJ,UAAU,0BACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-reporting.js","names":[],"sources":["../../src/browser/error-reporting.ts"],"sourcesContent":["/**\n * Browser stub for error-reporting module\n *\n * Error reporting/collection only happens on the server.\n * In browser, these are no-op functions.\n */\n\n/**\n * Error entry structure (stub)\n */\nexport interface ErrorEntry {\n timestamp: string;\n message: string;\n stack?: string;\n context?: Record<string, unknown>;\n}\n\n/**\n * Browser stub: No-op\n */\nexport function reportError(\n error: Error,\n context?: Record<string, unknown>,\n): void {\n void error;\n void context;\n // No-op in browser\n}\n\n/**\n * Browser stub: Returns empty array\n */\nexport function getRecentErrors(limit?: number): ErrorEntry[] {\n void limit;\n return [];\n}\n\n/**\n * Browser stub: No-op\n */\nexport function clearErrors(): void {\n // No-op in browser\n}\n\n/**\n * Browser stub: Returns JSON Response with empty errors\n */\nexport function createErrorReportingHandler(): () => Response {\n return () => {\n return Response.json({ errors: [], count: 0 });\n };\n}\n\n/**\n * Browser stub: Returns function unchanged\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Intentional for type passthrough\nexport function withErrorReporting<T extends (...args: any[]) => any>(\n fn: T,\n context?: Record<string, unknown>,\n): T {\n void context;\n return fn;\n}\n"],"mappings":";;;;AAoBA,SAAgB,YACd,OACA,SACM,CAIR;;;;AAKA,SAAgB,gBAAgB,OAA8B;CAE5D,OAAO,CAAC;AACV;;;;AAKA,SAAgB,cAAoB,CAEpC;;;;AAKA,SAAgB,8BAA8C;CAC5D,aAAa;EACX,OAAO,SAAS,KAAK;GAAE,QAAQ,CAAC;GAAG,OAAO;EAAE,CAAC;CAC/C;AACF;;;;AAMA,SAAgB,mBACd,IACA,SACG;CAEH,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","names":[],"sources":["../../src/browser/handlers.ts"],"mappings":";;;;;KAYY,aAAa,gBAAgB,SAAS,YAAY,QAAQ;;;;iBAKtD,iBAAiB,GAC/B,SAAS,0BACP,SAAS,aAAa,OAAO,aAAa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","names":[],"sources":["../../src/browser/handlers.ts"],"sourcesContent":["/**\n * Browser stub for handlers module\n *\n * Handler wrapping only applies on the server side.\n * In browser, we just return the handler unchanged.\n */\n\nimport type { WrapStartHandlerConfig } from './types';\n\n/**\n * Handler type\n */\nexport type StartHandler<T = unknown> = (request: Request) => Promise<T>;\n\n/**\n * Browser stub: Returns the handler unchanged\n */\nexport function wrapStartHandler<T>(\n config?: WrapStartHandlerConfig,\n): (handler: StartHandler<T>) => StartHandler<T> {\n void config;\n return (handler) => handler;\n}\n"],"mappings":";;;;AAiBA,SAAgB,iBACd,QAC+C;CAE/C,QAAQ,YAAY;AACtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loaders.d.ts","names":[],"sources":["../../src/browser/loaders.ts"],"mappings":";;;;;UAYU;EACR,SAAS;EACT;IACE;;GAED;;;;;iBAMa,YACd,WAAW,SAAS,kBAAkB,kBACtC,UAAU,GAAG,SAAS,oBAAoB;;;;iBAQ5B,gBACd,WAAW,SAAS,kBAAkB,kBACtC,cAAc,GAAG,SAAS,oBAAoB;;;;iBAQhC,kBACd,iBACA,SAAS,KAAK;EAKL,OAAA,WAAW,SAAS,kBAAkB,kBAAgB,UACjD,IACT;EAGQ,WAAA,WAAW,SAAS,kBAAkB,kBAAgB,cACjD,IACb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loaders.js","names":[],"sources":["../../src/browser/loaders.ts"],"sourcesContent":["/**\n * Browser stub for loaders module\n *\n * In browser environments, these functions are no-ops that just call the\n * original functions without any tracing overhead.\n */\n\nimport type { TraceLoaderConfig } from './types';\n\n/**\n * Loader context type (compatible with TanStack router loader context)\n */\ninterface LoaderContext {\n params?: Record<string, string>;\n route?: {\n id?: string;\n };\n [key: string]: unknown;\n}\n\n/**\n * Browser stub: Returns the loader function unchanged\n */\nexport function traceLoader<\n T extends (context: LoaderContext) => Promise<unknown>,\n>(loaderFn: T, config?: TraceLoaderConfig): T {\n void config;\n return loaderFn;\n}\n\n/**\n * Browser stub: Returns the beforeLoad function unchanged\n */\nexport function traceBeforeLoad<\n T extends (context: LoaderContext) => Promise<unknown>,\n>(beforeLoadFn: T, config?: TraceLoaderConfig): T {\n void config;\n return beforeLoadFn;\n}\n\n/**\n * Browser stub: Returns object with pass-through wrappers\n */\nexport function createTracedRoute(\n routeId: string,\n config?: Omit<TraceLoaderConfig, 'name'>,\n) {\n void routeId;\n void config;\n return {\n loader<T extends (context: LoaderContext) => Promise<unknown>>(\n loaderFn: T,\n ): T {\n return loaderFn;\n },\n beforeLoad<T extends (context: LoaderContext) => Promise<unknown>>(\n beforeLoadFn: T,\n ): T {\n return beforeLoadFn;\n },\n };\n}\n"],"mappings":";;;;AAuBA,SAAgB,YAEd,UAAa,QAA+B;CAE5C,OAAO;AACT;;;;AAKA,SAAgB,gBAEd,cAAiB,QAA+B;CAEhD,OAAO;AACT;;;;AAKA,SAAgB,kBACd,SACA,QACA;CAGA,OAAO;EACL,OACE,UACG;GACH,OAAO;EACT;EACA,WACE,cACG;GACH,OAAO;EACT;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","names":[],"sources":["../../src/browser/metrics.ts"],"mappings":";;;;;;;;;;UAUiB;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;IAGP;IACA;IACA;;;;;;iBAQU,cAAc;;;;iBAgBd,aAAa,cAAc;;;;iBAS3B,YAAY;;;;iBAQZ;;;;cAOH;;;;;;;;;iBAUG,8BAA8B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","names":[],"sources":["../../src/browser/metrics.ts"],"sourcesContent":["/**\n * Browser stub for metrics module\n *\n * Metrics collection only happens on the server.\n * In browser, these are no-op functions.\n */\n\n/**\n * Metrics data structure (stub)\n */\nexport interface MetricsData {\n requestCount: number;\n errorCount: number;\n avgLatency: number;\n p50Latency: number;\n p95Latency: number;\n p99Latency: number;\n requestsPerSecond: number;\n endpoints: Record<\n string,\n {\n count: number;\n errors: number;\n avgLatency: number;\n }\n >;\n}\n\n/**\n * Browser stub: Returns empty metrics\n */\nexport function getMetrics(): MetricsData {\n return {\n requestCount: 0,\n errorCount: 0,\n avgLatency: 0,\n p50Latency: 0,\n p95Latency: 0,\n p99Latency: 0,\n requestsPerSecond: 0,\n endpoints: {},\n };\n}\n\n/**\n * Browser stub: No-op\n */\nexport function recordTiming(name: string, durationMs: number): void {\n void name;\n void durationMs;\n // No-op in browser\n}\n\n/**\n * Browser stub: No-op\n */\nexport function recordError(name: string): void {\n void name;\n // No-op in browser\n}\n\n/**\n * Browser stub: No-op\n */\nexport function resetMetrics(): void {\n // No-op in browser\n}\n\n/**\n * Browser stub: No-op metrics collector\n */\nexport const metricsCollector = {\n recordTiming: recordTiming,\n recordError: recordError,\n getMetrics: getMetrics,\n reset: resetMetrics,\n};\n\n/**\n * Browser stub: Returns JSON Response with empty metrics\n */\nexport function createMetricsHandler(): () => Response {\n return () => {\n return Response.json(getMetrics());\n };\n}\n"],"mappings":";;;;AA+BA,SAAgB,aAA0B;CACxC,OAAO;EACL,cAAc;EACd,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,mBAAmB;EACnB,WAAW,CAAC;CACd;AACF;;;;AAKA,SAAgB,aAAa,MAAc,YAA0B,CAIrE;;;;AAKA,SAAgB,YAAY,MAAoB,CAGhD;;;;AAKA,SAAgB,eAAqB,CAErC;;;;AAKA,MAAa,mBAAmB;CAChB;CACD;CACD;CACZ,OAAO;AACT;;;;AAKA,SAAgB,uBAAuC;CACrD,aAAa;EACX,OAAO,SAAS,KAAK,WAAW,CAAC;CACnC;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","names":[],"sources":["../../src/browser/middleware.ts"],"mappings":";;;;;UAYiB,kBAAkB;GAChC;IACC,OAAO,MAAM,QAAQ,cAAc,QAAQ;IAC3C,SAAS;IACT,UAAU;IACV;IACA;IACA;IACA;IACA;IACA,SAAS;MACP,QAAQ;;;;;iBAME,wBAAwB,oBACtC,SAAS,0BACR,kBAAkB;;;;iBAUL,kBAAkB,oBAChC,SAAS,0BACR,kBAAkB;;;;iBAUL,0BAA0B,oBACxC,SAAS,KAAK,mCACb,kBAAkB;;;;iBAUL,2BAA2B,oBACzC,SAAS,2BACP;EACF,OAAO,MAAM,QAAQ,cAAc,QAAQ;EAC3C,SAAS;EACT,UAAU;MACN,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","names":[],"sources":["../../src/browser/middleware.ts"],"sourcesContent":["/**\n * Browser stub for middleware module\n *\n * In browser environments, these functions return pass-through middleware\n * that just calls next() without any tracing overhead.\n */\n\nimport type { TracingMiddlewareConfig } from './types';\n\n/**\n * Generic middleware handler type\n */\nexport interface MiddlewareHandler<TContext = unknown> {\n (opts: {\n next: (ctx?: Partial<TContext>) => Promise<TContext>;\n context: TContext;\n request?: Request;\n pathname?: string;\n data?: unknown;\n method?: string;\n filename?: string;\n functionId?: string;\n signal?: AbortSignal;\n }): Promise<TContext>;\n}\n\n/**\n * Browser stub: Returns pass-through middleware\n */\nexport function createTracingMiddleware<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): MiddlewareHandler<TContext> {\n void config;\n return async function noopMiddleware(opts) {\n return opts.next();\n };\n}\n\n/**\n * Browser stub: Returns pass-through middleware\n */\nexport function tracingMiddleware<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): MiddlewareHandler<TContext> {\n void config;\n return async function noopMiddleware(opts) {\n return opts.next();\n };\n}\n\n/**\n * Browser stub: Returns pass-through middleware\n */\nexport function functionTracingMiddleware<TContext = unknown>(\n config?: Omit<TracingMiddlewareConfig, 'type'>,\n): MiddlewareHandler<TContext> {\n void config;\n return async function noopMiddleware(opts) {\n return opts.next();\n };\n}\n\n/**\n * Browser stub: Returns pass-through handler for createMiddleware().server()\n */\nexport function createTracingServerHandler<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): (opts: {\n next: (ctx?: Partial<TContext>) => Promise<TContext>;\n context: TContext;\n request?: Request;\n}) => Promise<TContext> {\n void config;\n return async function noopHandler(opts) {\n return opts.next();\n };\n}\n"],"mappings":";;;;AA6BA,SAAgB,wBACd,QAC6B;CAE7B,OAAO,eAAe,eAAe,MAAM;EACzC,OAAO,KAAK,KAAK;CACnB;AACF;;;;AAKA,SAAgB,kBACd,QAC6B;CAE7B,OAAO,eAAe,eAAe,MAAM;EACzC,OAAO,KAAK,KAAK;CACnB;AACF;;;;AAKA,SAAgB,0BACd,QAC6B;CAE7B,OAAO,eAAe,eAAe,MAAM;EACzC,OAAO,KAAK,KAAK;CACnB;AACF;;;;AAKA,SAAgB,2BACd,QAKsB;CAEtB,OAAO,eAAe,YAAY,MAAM;EACtC,OAAO,KAAK,KAAK;CACnB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-functions.d.ts","names":[],"sources":["../../src/browser/server-functions.ts"],"mappings":";;;;;iBAYgB,cACd,cAAc,oBAAoB,kBAClC,UAAU,GAAG,SAAS,sBAAsB;;;;iBAQ9B,4BACd,4BAA4B,6BAE5B,wBAAwB,iBACxB,gBAAgB,KAAK,+BACpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-functions.js","names":[],"sources":["../../src/browser/server-functions.ts"],"sourcesContent":["/**\n * Browser stub for server-functions module\n *\n * In browser environments, these functions are no-ops that just return\n * the original functions without any tracing overhead.\n */\n\nimport type { TraceServerFnConfig } from './types';\n\n/**\n * Browser stub: Returns the server function unchanged\n */\nexport function traceServerFn<\n T extends (...args: unknown[]) => Promise<unknown>,\n>(serverFn: T, config?: TraceServerFnConfig): T {\n void config;\n return serverFn;\n}\n\n/**\n * Browser stub: Returns the createServerFn unchanged\n */\nexport function createTracedServerFnFactory<\n TCreateServerFn extends (...args: unknown[]) => unknown,\n>(\n createServerFnOriginal: TCreateServerFn,\n defaultConfig?: Omit<TraceServerFnConfig, 'name'>,\n): TCreateServerFn {\n void defaultConfig;\n return createServerFnOriginal;\n}\n"],"mappings":";;;;AAYA,SAAgB,cAEd,UAAa,QAAiC;CAE9C,OAAO;AACT;;;;AAKA,SAAgB,4BAGd,wBACA,eACiB;CAEjB,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","names":[],"sources":["../../src/browser/testing.ts"],"mappings":";;;;;;;;;;UAUiB;EACf;EACA,YAAY;EACZ;IAAU;IAAc;;EACxB,QAAQ;IAAQ;IAAc,aAAa;;EAC3C;;;;;UAMe;EACf,YAAY;EACZ,eAAe,eAAe;EAC9B;EACA,aAAa,eAAe,mBAAmB,QAAQ;;;;;iBAMzC,uBAAuB;;;;iBAYvB,kBACd,WAAW,eACX;;;;iBAUc,uBACd,WAAW,eACX,cACA,aACA;;;;;;;KAeU;EACV;EACA;EACA;EACA;EACA,aAAa;EACb;IAAU;IAAc;;EACxB;;;;;;KAOG,eAAe;EAAY,SAAS;;KAGpC,mBAAmB,kBAAkB;;;;iBAK1B,qBACd,iBAAiB,iBACjB;;;;;iBAWc;EACd,MAAM,OAAO,iBAAiB;EAC9B,SAAS,OAAO,iBAAiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","names":[],"sources":["../../src/browser/testing.ts"],"sourcesContent":["/**\n * Browser stub for testing module\n *\n * Testing utilities are server-side only.\n * In browser, these return no-op implementations.\n */\n\n/**\n * Test span structure (stub)\n */\nexport interface TestSpan {\n name: string;\n attributes: Record<string, unknown>;\n status: { code: number; message?: string };\n events: Array<{ name: string; attributes?: Record<string, unknown> }>;\n duration: number;\n}\n\n/**\n * Test collector structure (stub)\n */\nexport interface TestCollector {\n getSpans(): TestSpan[];\n getSpansByName(name: string): TestSpan[];\n clear(): void;\n waitForSpans(count: number, timeout?: number): Promise<TestSpan[]>;\n}\n\n/**\n * Browser stub: Returns empty collector\n */\nexport function createTestCollector(): TestCollector {\n return {\n getSpans: () => [],\n getSpansByName: () => [],\n clear: () => {},\n waitForSpans: async () => [],\n };\n}\n\n/**\n * Browser stub: No-op\n */\nexport function assertSpanCreated(\n collector: TestCollector,\n name: string,\n): void {\n void collector;\n void name;\n // No-op in browser\n}\n\n/**\n * Browser stub: No-op\n */\nexport function assertSpanHasAttribute(\n collector: TestCollector,\n name: string,\n key: string,\n value?: unknown,\n): void {\n void collector;\n void name;\n void key;\n void value;\n // No-op in browser\n}\n\n/**\n * Serialized span type (browser stub - mirrors server SerializedSpan).\n *\n * Defined as a `type` (not `interface`) so it is assignable to\n * `Record<string, unknown>` in TypeScript 6+ strict mode.\n */\nexport type SerializedSpan = {\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId?: string;\n attributes?: Record<string, unknown>;\n status: { code: number; message?: string };\n durationMs: number;\n};\n\n/**\n * Accepts either a raw `Request` (legacy) or a TanStack Router context\n * object containing `{ request: Request }` (Router 1.168+).\n */\ntype HandlerInput = Request | { request: Request };\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype CreateFileRoute = (path: string) => (options: any) => any;\n\n/**\n * Browser stub: createTestSpansRoute is server-only.\n */\nexport function createTestSpansRoute(\n createFileRoute: CreateFileRoute,\n path?: string,\n): unknown {\n void createFileRoute;\n void path;\n throw new Error('createTestSpansRoute is server-only');\n}\n\n/**\n * Browser stub: test-spans handlers are server-only.\n * Returns no-op handlers that always return 404.\n */\nexport function createTestSpansHandlers(): {\n GET: (input: HandlerInput) => Response;\n DELETE: (input: HandlerInput) => Response;\n} {\n return {\n GET(input: HandlerInput): Response {\n void input;\n return Response.json(\n { error: 'createTestSpansHandlers is server-only' },\n { status: 404 },\n );\n },\n DELETE(input: HandlerInput): Response {\n void input;\n return Response.json(\n { error: 'createTestSpansHandlers is server-only' },\n { status: 404 },\n );\n },\n };\n}\n"],"mappings":";;;;AA+BA,SAAgB,sBAAqC;CACnD,OAAO;EACL,gBAAgB,CAAC;EACjB,sBAAsB,CAAC;EACvB,aAAa,CAAC;EACd,cAAc,YAAY,CAAC;CAC7B;AACF;;;;AAKA,SAAgB,kBACd,WACA,MACM,CAIR;;;;AAKA,SAAgB,uBACd,WACA,MACA,KACA,OACM,CAMR;;;;AA8BA,SAAgB,qBACd,iBACA,MACS;CAGT,MAAM,IAAI,MAAM,qCAAqC;AACvD;;;;;AAMA,SAAgB,0BAGd;CACA,OAAO;EACL,IAAI,OAA+B;GAEjC,OAAO,SAAS,KACd,EAAE,OAAO,yCAAyC,GAClD,EAAE,QAAQ,IAAI,CAChB;EACF;EACA,OAAO,OAA+B;GAEpC,OAAO,SAAS,KACd,EAAE,OAAO,yCAAyC,GAClD,EAAE,QAAQ,IAAI,CAChB;EACF;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/browser/types.ts"],"sourcesContent":["/**\n * Browser stub for types module\n *\n * Provides type definitions without importing from @opentelemetry/api\n */\n\n/**\n * OpenTelemetry-compatible Attributes type (browser stub)\n */\nexport type Attributes = Record<string, string | number | boolean | undefined>;\n\n/**\n * Configuration options for TanStack Start instrumentation\n */\nexport interface TanStackInstrumentationConfig {\n service?: string;\n captureArgs?: boolean;\n captureResults?: boolean;\n captureErrors?: boolean;\n captureHeaders?: string[];\n excludePaths?: (string | RegExp)[];\n sampling?: 'always' | 'adaptive' | 'never';\n customAttributes?: (context: {\n type: 'request' | 'serverFn' | 'loader' | 'beforeLoad' | 'middleware';\n name: string;\n request?: Request;\n args?: unknown;\n result?: unknown;\n }) => Attributes;\n}\n\n/**\n * Configuration specific to tracing middleware\n */\nexport interface TracingMiddlewareConfig extends TanStackInstrumentationConfig {\n type?: 'request' | 'function';\n}\n\n/**\n * Configuration for server function tracing\n */\nexport interface TraceServerFnConfig {\n name?: string;\n captureArgs?: boolean;\n captureResults?: boolean;\n}\n\n/**\n * Configuration for loader tracing\n */\nexport interface TraceLoaderConfig {\n name?: string;\n captureParams?: boolean;\n captureResult?: boolean;\n}\n\n/**\n * Configuration for handler wrapper\n */\nexport interface WrapStartHandlerConfig extends TanStackInstrumentationConfig {\n endpoint?: string;\n headers?: Record<string, string>;\n}\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG: Required<\n Omit<TanStackInstrumentationConfig, 'customAttributes' | 'service'>\n> = {\n captureArgs: true,\n captureResults: false,\n captureErrors: true,\n captureHeaders: ['x-request-id'],\n excludePaths: [],\n sampling: 'adaptive',\n};\n\n/**\n * Span attribute keys (stub - values are strings)\n */\nexport const SPAN_ATTRIBUTES = {\n HTTP_REQUEST_METHOD: 'http.request.method',\n HTTP_RESPONSE_STATUS_CODE: 'http.response.status_code',\n URL_PATH: 'url.path',\n URL_QUERY: 'url.query',\n URL_FULL: 'url.full',\n RPC_SYSTEM: 'rpc.system',\n RPC_METHOD: 'rpc.method',\n TANSTACK_TYPE: 'tanstack.type',\n TANSTACK_SERVER_FN_NAME: 'tanstack.server_function.name',\n TANSTACK_SERVER_FN_METHOD: 'tanstack.server_function.method',\n TANSTACK_SERVER_FN_ARGS: 'tanstack.server_function.args',\n TANSTACK_SERVER_FN_RESULT: 'tanstack.server_function.result',\n TANSTACK_LOADER_ROUTE_ID: 'tanstack.loader.route_id',\n TANSTACK_LOADER_TYPE: 'tanstack.loader.type',\n TANSTACK_LOADER_PARAMS: 'tanstack.loader.params',\n TANSTACK_MIDDLEWARE_NAME: 'tanstack.middleware.name',\n TANSTACK_REQUEST_DURATION_MS: 'tanstack.request.duration_ms',\n} as const;\n"],"mappings":";;;;AAmEA,MAAa,iBAET;CACF,aAAa;CACb,gBAAgB;CAChB,eAAe;CACf,gBAAgB,CAAC,cAAc;CAC/B,cAAc,CAAC;CACf,UAAU;AACZ;;;;AAKA,MAAa,kBAAkB;CAC7B,qBAAqB;CACrB,2BAA2B;CAC3B,UAAU;CACV,WAAW;CACX,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,eAAe;CACf,yBAAyB;CACzB,2BAA2B;CAC3B,yBAAyB;CACzB,2BAA2B;CAC3B,0BAA0B;CAC1B,sBAAsB;CACtB,wBAAwB;CACxB,0BAA0B;CAC1B,8BAA8B;AAChC"}
|
package/dist/context.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","names":[],"sources":["../src/context.ts"],"mappings":";;;;;;KAYY,kBACV,UAAU;;;;;;;;;;;;;;;;;;;;iBAqBI,0BAA0B,SAAS,UAAU;;;;;;;;;;;;;;;;;;;;iBAuC7C,uBACd,SAAS,SACT,MAAM,UACL;;;;;;;;;;;;;;;;;;;;;iBA+Ba,oBACd,kBAAkB,iBAClB,MAAM,UACL;;;;;;;;;;;;;;;;;;;iBAuBa,aAAa,GAAG,eAAe,SAAS,UAAU,IAAI;;;;;;iBAStD,oBAAoB;;;;;iBAQpB,eAAe,MAAM;;;;iBASrB,cAAc,MAAM;;iBAOpB,kBAAkB,MAAM;;iBAKxB,iBAAiB,MAAM"}
|
package/dist/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":["otelTrace"],"sources":["../src/context.ts"],"sourcesContent":["import {\n context,\n propagation,\n trace as otelTrace,\n type Context,\n ROOT_CONTEXT,\n} from '@opentelemetry/api';\n\n/**\n * Type representing values that can be used to initialize Headers\n * This is equivalent to the DOM's HeadersInit type but works in Node.js\n */\nexport type HeadersInitType =\n Headers | Record<string, string> | [string, string][];\n\n/**\n * Extract OpenTelemetry context from HTTP request headers\n *\n * This function extracts W3C Trace Context (traceparent, tracestate)\n * and Baggage from request headers to enable distributed tracing.\n *\n * @param request - The incoming HTTP request\n * @returns OpenTelemetry context with extracted trace information\n *\n * @example\n * ```typescript\n * const parentContext = extractContextFromRequest(request);\n * context.with(parentContext, async () => {\n * // Spans created here will be children of the extracted context\n * await trace('my-operation', async ()=> {\n const ctx = getActiveTraceContext()!; ... })();\n * });\n * ```\n */\nexport function extractContextFromRequest(request: Request): Context {\n const carrier: Record<string, string> = {};\n\n // Extract W3C Trace Context headers\n const traceparent = request.headers.get('traceparent');\n const tracestate = request.headers.get('tracestate');\n const baggage = request.headers.get('baggage');\n\n if (traceparent) carrier.traceparent = traceparent;\n if (tracestate) carrier.tracestate = tracestate;\n if (baggage) carrier.baggage = baggage;\n\n // Return ROOT_CONTEXT if no trace headers present\n if (Object.keys(carrier).length === 0) {\n return ROOT_CONTEXT;\n }\n\n return propagation.extract(context.active(), carrier);\n}\n\n/**\n * Inject OpenTelemetry context into HTTP headers\n *\n * This function injects W3C Trace Context (traceparent, tracestate)\n * and Baggage into headers for outgoing requests.\n *\n * @param headers - Headers object to inject context into\n * @param ctx - Optional context to inject (defaults to active context)\n * @returns The headers object with injected trace context\n *\n * @example\n * ```typescript\n * const headers = new Headers();\n * injectContextToHeaders(headers);\n *\n * // Now use headers in outgoing fetch\n * await fetch('https://api.example.com', { headers });\n * ```\n */\nexport function injectContextToHeaders(\n headers: Headers,\n ctx?: Context,\n): Headers {\n const carrier: Record<string, string> = {};\n propagation.inject(ctx ?? context.active(), carrier);\n\n for (const [key, value] of Object.entries(carrier)) {\n headers.set(key, value);\n }\n\n return headers;\n}\n\n/**\n * Create a new Headers object with injected trace context\n *\n * Convenience function that creates a new Headers object\n * with the current trace context already injected.\n *\n * @param existingHeaders - Optional existing headers to include\n * @param ctx - Optional context to inject (defaults to active context)\n * @returns New Headers object with trace context\n *\n * @example\n * ```typescript\n * const headers = createTracedHeaders({ 'Content-Type': 'application/json' });\n * await fetch('https://api.example.com', {\n * method: 'POST',\n * headers,\n * body: JSON.stringify(data),\n * });\n * ```\n */\nexport function createTracedHeaders(\n existingHeaders?: HeadersInitType,\n ctx?: Context,\n): Headers {\n const headers = new Headers(existingHeaders);\n return injectContextToHeaders(headers, ctx);\n}\n\n/**\n * Run a function within a specific OpenTelemetry context\n *\n * This is a convenience wrapper around context.with() that\n * provides better TypeScript inference.\n *\n * @param parentContext - The context to run within\n * @param fn - The function to execute\n * @returns The result of the function\n *\n * @example\n * ```typescript\n * const parentContext = extractContextFromRequest(request);\n * const result = await runInContext(parentContext, async () => {\n * return await processRequest();\n * });\n * ```\n */\nexport function runInContext<T>(parentContext: Context, fn: () => T): T {\n return context.with(parentContext, fn);\n}\n\n/**\n * Get the current active context\n *\n * @returns The current active OpenTelemetry context\n */\nexport function getActiveContext(): Context {\n return context.active();\n}\n\n/**\n * The `traceparent` header value for the active context, or `''` when there is\n * no active span. Use it to log the id you send downstream.\n */\nexport function getTraceParent(ctx?: Context): string {\n const carrier: Record<string, string> = {};\n propagation.inject(ctx ?? context.active(), carrier);\n return carrier.traceparent ?? '';\n}\n\n/**\n * The `tracestate` header value for the active context, or `''` when unset.\n */\nexport function getTraceState(ctx?: Context): string {\n const carrier: Record<string, string> = {};\n propagation.inject(ctx ?? context.active(), carrier);\n return carrier.tracestate ?? '';\n}\n\n/** Trace id of the active span, or `undefined` outside a span. */\nexport function getCurrentTraceId(ctx?: Context): string | undefined {\n return otelTrace.getSpanContext(ctx ?? context.active())?.traceId;\n}\n\n/** Span id of the active span, or `undefined` outside a span. */\nexport function getCurrentSpanId(ctx?: Context): string | undefined {\n return otelTrace.getSpanContext(ctx ?? context.active())?.spanId;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAkCA,SAAgB,0BAA0B,SAA2B;CACnE,MAAM,UAAkC,CAAC;CAGzC,MAAM,cAAc,QAAQ,QAAQ,IAAI,aAAa;CACrD,MAAM,aAAa,QAAQ,QAAQ,IAAI,YAAY;CACnD,MAAM,UAAU,QAAQ,QAAQ,IAAI,SAAS;CAE7C,IAAI,aAAa,QAAQ,cAAc;CACvC,IAAI,YAAY,QAAQ,aAAa;CACrC,IAAI,SAAS,QAAQ,UAAU;CAG/B,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,WAAW,GAClC,OAAO;CAGT,OAAO,YAAY,QAAQ,QAAQ,OAAO,GAAG,OAAO;AACtD;;;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,uBACd,SACA,KACS;CACT,MAAM,UAAkC,CAAC;CACzC,YAAY,OAAO,OAAO,QAAQ,OAAO,GAAG,OAAO;CAEnD,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAC/C,QAAQ,IAAI,KAAK,KAAK;CAGxB,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,oBACd,iBACA,KACS;CAET,OAAO,uBAAuB,IADV,QAAQ,eACQ,GAAG,GAAG;AAC5C;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,aAAgB,eAAwB,IAAgB;CACtE,OAAO,QAAQ,KAAK,eAAe,EAAE;AACvC;;;;;;AAOA,SAAgB,mBAA4B;CAC1C,OAAO,QAAQ,OAAO;AACxB;;;;;AAMA,SAAgB,eAAe,KAAuB;CACpD,MAAM,UAAkC,CAAC;CACzC,YAAY,OAAO,OAAO,QAAQ,OAAO,GAAG,OAAO;CACnD,OAAO,QAAQ,eAAe;AAChC;;;;AAKA,SAAgB,cAAc,KAAuB;CACnD,MAAM,UAAkC,CAAC;CACzC,YAAY,OAAO,OAAO,QAAQ,OAAO,GAAG,OAAO;CACnD,OAAO,QAAQ,cAAc;AAC/B;;AAGA,SAAgB,kBAAkB,KAAmC;CACnE,OAAOA,MAAU,eAAe,OAAO,QAAQ,OAAO,CAAC,CAAC,EAAE;AAC5D;;AAGA,SAAgB,iBAAiB,KAAmC;CAClE,OAAOA,MAAU,eAAe,OAAO,QAAQ,OAAO,CAAC,CAAC,EAAE;AAC5D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control-flow-p-dnko0G.js","names":[],"sources":["../src/types.ts","../src/control-flow.ts"],"sourcesContent":["import type { Attributes } from '@opentelemetry/api';\n\n/**\n * Configuration options for TanStack Start instrumentation\n */\nexport interface TanStackInstrumentationConfig {\n /**\n * Service name for spans\n * @default process.env.OTEL_SERVICE_NAME || 'tanstack-start'\n */\n service?: string;\n\n /**\n * Whether to capture function arguments as span attributes\n * Warning: May contain PII, review before enabling in production\n * @default true\n */\n captureArgs?: boolean;\n\n /**\n * Whether to capture function results as span attributes\n * Warning: May contain PII, disable in production\n * @default false\n */\n captureResults?: boolean;\n\n /**\n * Whether to capture errors and record exceptions\n * @default true\n */\n captureErrors?: boolean;\n\n /**\n * HTTP headers to capture as span attributes\n * @default ['x-request-id']\n */\n captureHeaders?: string[];\n\n /**\n * URL paths to exclude from tracing (glob patterns)\n * @default []\n */\n excludePaths?: (string | RegExp)[];\n\n /**\n * Sampling strategy\n * - 'always': Sample all requests (100%)\n * - 'adaptive': Use autotel's adaptive sampling (errors + slow = 100%, baseline 10%)\n * - 'never': Disable sampling (for testing/debugging)\n * @default 'adaptive'\n */\n sampling?: 'always' | 'adaptive' | 'never';\n\n /**\n * Custom function to extract additional span attributes\n */\n customAttributes?: (context: {\n type: 'request' | 'serverFn' | 'loader' | 'beforeLoad' | 'middleware';\n name: string;\n request?: Request;\n args?: unknown;\n result?: unknown;\n }) => Attributes;\n}\n\n/**\n * Configuration specific to tracing middleware\n */\nexport interface TracingMiddlewareConfig extends TanStackInstrumentationConfig {\n /**\n * Type of middleware\n * - 'request': For global request middleware (routes, SSR)\n * - 'function': For server function middleware\n * @default 'request'\n */\n type?: 'request' | 'function';\n}\n\n/**\n * Configuration for server function tracing\n */\nexport interface TraceServerFnConfig {\n /**\n * Explicit name for the span\n * If not provided, will attempt to infer from function name\n */\n name?: string;\n\n /**\n * Whether to capture function arguments\n * @default true\n */\n captureArgs?: boolean;\n\n /**\n * Whether to capture function results\n * @default false\n */\n captureResults?: boolean;\n}\n\n/**\n * Configuration for loader tracing\n */\nexport interface TraceLoaderConfig {\n /**\n * Explicit name for the span\n * If not provided, will use route ID\n */\n name?: string;\n\n /**\n * Whether to capture route params\n * @default true\n */\n captureParams?: boolean;\n\n /**\n * Whether to capture loader result\n * @default false\n */\n captureResult?: boolean;\n}\n\n/**\n * Configuration for handler wrapper\n */\nexport interface WrapStartHandlerConfig extends TanStackInstrumentationConfig {\n /**\n * OTLP endpoint URL\n * @default process.env.OTEL_EXPORTER_OTLP_ENDPOINT\n */\n endpoint?: string;\n\n /**\n * OTLP headers (e.g., for authentication)\n * @default parsed from process.env.OTEL_EXPORTER_OTLP_HEADERS\n */\n headers?: Record<string, string>;\n}\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG: Required<\n Omit<TanStackInstrumentationConfig, 'customAttributes' | 'service'>\n> = {\n captureArgs: true,\n captureResults: false,\n captureErrors: true,\n captureHeaders: ['x-request-id'],\n excludePaths: [],\n sampling: 'adaptive',\n};\n\n/**\n * Span attribute keys following OpenTelemetry semantic conventions\n */\nexport const SPAN_ATTRIBUTES = {\n // HTTP semantic conventions\n HTTP_REQUEST_METHOD: 'http.request.method',\n HTTP_RESPONSE_STATUS_CODE: 'http.response.status_code',\n URL_PATH: 'url.path',\n URL_QUERY: 'url.query',\n URL_FULL: 'url.full',\n\n // RPC semantic conventions (for server functions)\n RPC_SYSTEM: 'rpc.system',\n RPC_METHOD: 'rpc.method',\n\n // TanStack-specific attributes\n TANSTACK_TYPE: 'tanstack.type',\n TANSTACK_SERVER_FN_NAME: 'tanstack.server_function.name',\n TANSTACK_SERVER_FN_METHOD: 'tanstack.server_function.method',\n TANSTACK_SERVER_FN_ARGS: 'tanstack.server_function.args',\n TANSTACK_SERVER_FN_RESULT: 'tanstack.server_function.result',\n TANSTACK_LOADER_ROUTE_ID: 'tanstack.loader.route_id',\n TANSTACK_LOADER_TYPE: 'tanstack.loader.type',\n TANSTACK_LOADER_PARAMS: 'tanstack.loader.params',\n TANSTACK_MIDDLEWARE_NAME: 'tanstack.middleware.name',\n TANSTACK_REQUEST_DURATION_MS: 'tanstack.request.duration_ms',\n} as const;\n","/**\n * TanStack Router control-flow signal detection.\n *\n * `redirect()` and `notFound()` are throw-based navigation signals: the\n * framework catches them and turns them into a real response. They are not\n * application errors, so instrumentation must not record them on a span or\n * report them to the error store.\n *\n * We match TanStack's own public predicate shapes rather than importing\n * `isRedirect`/`isNotFound`, so the check works for both React Start and Solid\n * Start without a hard dependency on a specific `@tanstack` package:\n *\n * - `redirect()` throws a `Response` carrying an `.options` bag\n * (`@tanstack/router-core` `isRedirect`).\n * - `notFound()` throws a plain object with `isNotFound === true`\n * (`@tanstack/router-core` `isNotFound`).\n *\n * The `name`-based branch keeps older TanStack versions covered, which threw\n * `RedirectError` / `NotFoundError` instances instead.\n */\nexport function isControlFlowSignal(error: unknown): boolean {\n if (\n typeof Response !== 'undefined' &&\n error instanceof Response &&\n (error as { options?: unknown }).options != null\n ) {\n return true;\n }\n\n if (typeof error === 'object' && error !== null) {\n if ((error as { isNotFound?: unknown }).isNotFound === true) {\n return true;\n }\n const name = (error as { name?: unknown }).name;\n if (name === 'RedirectError' || name === 'NotFoundError') {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Negation of {@link isControlFlowSignal}, shaped for autotel `trace()`'s\n * `isError` option: returns `false` for control-flow signals so the span is\n * marked OK and no exception is recorded, `true` for real errors.\n */\nexport function isRealError(error: unknown): boolean {\n return !isControlFlowSignal(error);\n}\n"],"mappings":";;;;AAgJA,MAAa,iBAET;CACF,aAAa;CACb,gBAAgB;CAChB,eAAe;CACf,gBAAgB,CAAC,cAAc;CAC/B,cAAc,CAAC;CACf,UAAU;AACZ;;;;AAKA,MAAa,kBAAkB;CAE7B,qBAAqB;CACrB,2BAA2B;CAC3B,UAAU;CACV,WAAW;CACX,UAAU;CAGV,YAAY;CACZ,YAAY;CAGZ,eAAe;CACf,yBAAyB;CACzB,2BAA2B;CAC3B,yBAAyB;CACzB,2BAA2B;CAC3B,0BAA0B;CAC1B,sBAAsB;CACtB,wBAAwB;CACxB,0BAA0B;CAC1B,8BAA8B;AAChC;;;;;;;;;;;;;;;;;;;;;;;;ACjKA,SAAgB,oBAAoB,OAAyB;CAC3D,IACE,OAAO,aAAa,eACpB,iBAAiB,YAChB,MAAgC,WAAW,MAE5C,OAAO;CAGT,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;EAC/C,IAAK,MAAmC,eAAe,MACrD,OAAO;EAET,MAAM,OAAQ,MAA6B;EAC3C,IAAI,SAAS,mBAAmB,SAAS,iBACvC,OAAO;CAEX;CAEA,OAAO;AACT;;;;;;AAOA,SAAgB,YAAY,OAAyB;CACnD,OAAO,CAAC,oBAAoB,KAAK;AACnC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-headers.d.ts","names":[],"sources":["../src/debug-headers.ts"],"mappings":";;;;;UAMiB;;;;;EAKf;;;;EAKA,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;iBAyBF,uBACd,SAAQ,qBACP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-headers.js","names":[],"sources":["../src/debug-headers.ts"],"sourcesContent":["import { isServerSide } from './env';\nimport type { MiddlewareHandler } from './middleware';\n\n/**\n * Configuration for debug headers middleware\n */\nexport interface DebugHeadersConfig {\n /**\n * Whether to enable debug headers\n * @default process.env.NODE_ENV === 'development'\n */\n enabled?: boolean;\n\n /**\n * Custom headers to add\n */\n customHeaders?: Record<string, string | (() => string)>;\n}\n\n/**\n * Create middleware that adds debug headers to responses in development\n *\n * Adds helpful debug information to response headers:\n * - X-Debug-Timestamp: Request timestamp\n * - X-Debug-Node-Version: Node.js version\n * - X-Debug-Uptime: Process uptime in seconds\n * - X-Debug-Trace-Id: Current trace ID (if available)\n *\n * @param config - Configuration options\n * @returns Middleware handler\n *\n * @example\n * ```typescript\n * import { createStart } from '@tanstack/react-start';\n * import { debugHeadersMiddleware } from 'autotel-tanstack/debug-headers';\n *\n * export const startInstance = createStart(() => ({\n * requestMiddleware: [debugHeadersMiddleware()],\n * }));\n * ```\n */\nexport function debugHeadersMiddleware(\n config: DebugHeadersConfig = {},\n): MiddlewareHandler {\n // If we're in the browser, return a no-op middleware\n if (!isServerSide()) {\n return async function debugHeadersHandler(opts) {\n return opts.next();\n };\n }\n\n const enabled =\n config.enabled ??\n (typeof process !== 'undefined' && process.env.NODE_ENV === 'development');\n\n return async function debugHeadersHandler(opts) {\n const { next, request } = opts;\n\n if (!enabled || !request) {\n return next();\n }\n\n const result = await next();\n\n // Check if result is a Response\n if (!(result instanceof Response)) {\n return result;\n }\n\n const response = result;\n\n // Clone response to add headers (responses are immutable)\n const newHeaders = new Headers(response.headers);\n\n // Add standard debug headers\n newHeaders.set('X-Debug-Timestamp', new Date().toISOString());\n newHeaders.set('X-Debug-Node-Version', process.version);\n newHeaders.set('X-Debug-Uptime', Math.floor(process.uptime()).toString());\n\n // Add trace ID if available\n try {\n const { trace } = await import('@opentelemetry/api');\n const activeSpan = trace.getActiveSpan();\n if (activeSpan) {\n const spanContext = activeSpan.spanContext();\n if (spanContext.traceId) {\n newHeaders.set('X-Debug-Trace-Id', spanContext.traceId);\n }\n }\n } catch {\n // OpenTelemetry not available, skip trace ID\n }\n\n // Add custom headers\n if (config.customHeaders) {\n for (const [key, value] of Object.entries(config.customHeaders)) {\n const headerValue = typeof value === 'function' ? value() : value;\n newHeaders.set(`X-Debug-${key}`, headerValue);\n }\n }\n\n // Return new response with debug headers\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: newHeaders,\n });\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,SAAgB,uBACd,SAA6B,CAAC,GACX;CAEnB,IAAI,CAAC,aAAa,GAChB,OAAO,eAAe,oBAAoB,MAAM;EAC9C,OAAO,KAAK,KAAK;CACnB;CAGF,MAAM,UACJ,OAAO,YACN,OAAO,YAAY,eAAe,QAAQ,IAAI,aAAa;CAE9D,OAAO,eAAe,oBAAoB,MAAM;EAC9C,MAAM,EAAE,MAAM,YAAY;EAE1B,IAAI,CAAC,WAAW,CAAC,SACf,OAAO,KAAK;EAGd,MAAM,SAAS,MAAM,KAAK;EAG1B,IAAI,EAAE,kBAAkB,WACtB,OAAO;EAGT,MAAM,WAAW;EAGjB,MAAM,aAAa,IAAI,QAAQ,SAAS,OAAO;EAG/C,WAAW,IAAI,sCAAqB,IAAI,KAAK,EAAC,CAAC,YAAY,CAAC;EAC5D,WAAW,IAAI,wBAAwB,QAAQ,OAAO;EACtD,WAAW,IAAI,kBAAkB,KAAK,MAAM,QAAQ,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;EAGxE,IAAI;GACF,MAAM,EAAE,UAAU,MAAM,OAAO;GAC/B,MAAM,aAAa,MAAM,cAAc;GACvC,IAAI,YAAY;IACd,MAAM,cAAc,WAAW,YAAY;IAC3C,IAAI,YAAY,SACd,WAAW,IAAI,oBAAoB,YAAY,OAAO;GAE1D;EACF,QAAQ,CAER;EAGA,IAAI,OAAO,eACT,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,aAAa,GAAG;GAC/D,MAAM,cAAc,OAAO,UAAU,aAAa,MAAM,IAAI;GAC5D,WAAW,IAAI,WAAW,OAAO,WAAW;EAC9C;EAIF,OAAO,IAAI,SAAS,SAAS,MAAM;GACjC,QAAQ,SAAS;GACjB,YAAY,SAAS;GACrB,SAAS;EACX,CAAC;CACH;AACF"}
|
package/dist/env-BpFWNnpL.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env-BpFWNnpL.js","names":[],"sources":["../src/env.ts"],"sourcesContent":["/**\n * Environment detection utilities\n * Prevents server-only code from running in the browser\n */\n\n/**\n * Check if we're running in a browser environment\n * Uses typeof checks to avoid TypeScript DOM type requirements\n */\nexport function isBrowser(): boolean {\n return (\n typeof globalThis !== 'undefined' &&\n // @ts-expect-error - window may not exist in Node.js, that's the point\n typeof globalThis.window !== 'undefined' &&\n // @ts-expect-error - document may not exist in Node.js, that's the point\n typeof globalThis.document !== 'undefined'\n );\n}\n\n/**\n * Check if we're running in a Node.js environment\n */\nexport function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n typeof process.versions !== 'undefined' &&\n typeof process.versions.node !== 'undefined'\n );\n}\n\n/**\n * Check if we're in a server-side context\n * In TanStack Start, middleware runs on the server, but router config\n * might be evaluated on both sides during SSR\n */\nexport function isServerSide(): boolean {\n // In TanStack Start, if we're in a request handler context, we're on the server\n // Check for Node.js environment (server) and not browser\n return isNode() && !isBrowser();\n}\n\n/**\n * Safely check if a module is available (for optional dependencies)\n */\nexport function isModuleAvailable(moduleName: string): boolean {\n try {\n // This will only work in Node.js, not browser\n if (typeof require !== 'undefined') {\n require.resolve(moduleName);\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,YAAqB;CACnC,OACE,OAAO,eAAe,eAEtB,OAAO,WAAW,WAAW,eAE7B,OAAO,WAAW,aAAa;AAEnC;;;;AAKA,SAAgB,SAAkB;CAChC,OACE,OAAO,YAAY,eACnB,OAAO,QAAQ,aAAa,eAC5B,OAAO,QAAQ,SAAS,SAAS;AAErC;;;;;;AAOA,SAAgB,eAAwB;CAGtC,OAAO,OAAO,KAAK,CAAC,UAAU;AAChC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-reporting.d.ts","names":[],"sources":["../src/error-reporting.ts"],"mappings":";;;;;;;;;;UAUiB;EACf;EACA;EACA,UAAU;EACV;IACE;IACA;IACA;IACA;;;;;;;;;cAUE;UACI;mBACS;;;;EAKjB,YAAY,OAAO,OAAO;;;;EAwD1B,gBAAgB;;;;EAOhB,SAAS,aAAa;;;;EAOtB;;;;EAOA,WAAW;;;;;cAQA,YAAU;;;;;;;;;;;;;;;;;;;iBAoBP,YAAY,OAAO,OAAO;;;;;;;;;;;;;;;;;;;;;;;iBA0B1B,qCAA2B,wCAAA;UAA3B;;;;;;;;;;;;;;;;;iBAyBA,mBAAmB,yBAAyB,SAC1D,QAAQ,MAAM,UAAU,QAAQ,UAChC,UAAU,8BACL,MAAM,UAAU,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-reporting.js","names":[],"sources":["../src/error-reporting.ts"],"sourcesContent":["/**\n * Error reporting utilities for TanStack Start\n *\n * Provides basic error reporting without external dependencies,\n * following the patterns from TanStack Start observability guide.\n */\n\n/**\n * Error report data structure\n */\nexport interface ErrorReport {\n id: string;\n count: number;\n lastSeen: Date;\n error: {\n name: string;\n message: string;\n stack?: string;\n context?: unknown;\n };\n}\n\n/**\n * Error store for in-memory error tracking\n *\n * Stores error reports with deduplication by error name + message.\n * Thread-safe for concurrent access.\n */\nclass ErrorStore {\n private errors = new Map<string, ErrorReport>();\n private readonly maxErrors = 100; // Limit memory usage\n\n /**\n * Report an error\n */\n reportError(error: Error, context?: unknown): string {\n const key = `${error.name}:${error.message}`;\n const existing = this.errors.get(key);\n\n if (existing) {\n existing.count++;\n existing.lastSeen = new Date();\n if (context) {\n // Merge context\n existing.error.context = {\n ...(existing.error.context as Record<string, unknown>),\n ...(context as Record<string, unknown>),\n };\n }\n return key;\n }\n\n // Add new error\n const report: ErrorReport = {\n id: key,\n count: 1,\n lastSeen: new Date(),\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack,\n context,\n },\n };\n\n this.errors.set(key, report);\n\n // Limit stored errors\n if (this.errors.size > this.maxErrors) {\n // Remove oldest error\n const entries = [...this.errors.entries()];\n const oldest = entries.toSorted(\n (a: [string, ErrorReport], b: [string, ErrorReport]) =>\n a[1].lastSeen.getTime() - b[1].lastSeen.getTime(),\n )[0];\n this.errors.delete(oldest[0]);\n }\n\n // Log immediately\n console.error('[ERROR REPORTED]:', {\n error: error.message,\n count: 1,\n context,\n });\n\n return key;\n }\n\n /**\n * Get all error reports\n */\n getAllErrors(): ErrorReport[] {\n return [...this.errors.values()];\n }\n\n /**\n * Get a specific error by ID\n */\n getError(id: string): ErrorReport | undefined {\n return this.errors.get(id);\n }\n\n /**\n * Clear all errors\n */\n clear(): void {\n this.errors.clear();\n }\n\n /**\n * Clear a specific error\n */\n clearError(id: string): void {\n this.errors.delete(id);\n }\n}\n\n/**\n * Global error store instance\n */\nexport const errorStore = new ErrorStore();\n\n/**\n * Report an error to the error store\n *\n * @example\n * ```typescript\n * import { reportError } from 'autotel-tanstack/error-reporting';\n *\n * try {\n * await riskyOperation();\n * } catch (error) {\n * reportError(error as Error, {\n * userId: context.userId,\n * operation: 'riskyOperation',\n * });\n * throw error;\n * }\n * ```\n */\nexport function reportError(error: Error, context?: unknown): string {\n return errorStore.reportError(error, context);\n}\n\n/**\n * Create an error reporting endpoint handler\n *\n * Returns a handler that exposes error reports in JSON format.\n * Use this to create an `/admin/errors` endpoint.\n *\n * @example\n * ```typescript\n * // routes/admin/errors.ts\n * import { createFileRoute } from '@tanstack/react-router';\n * import { json } from '@tanstack/react-start';\n * import { createErrorReportingHandler } from 'autotel-tanstack/error-reporting';\n *\n * export const Route = createFileRoute('/admin/errors')({\n * server: {\n * handlers: {\n * GET: createErrorReportingHandler(),\n * },\n * },\n * });\n * ```\n */\nexport function createErrorReportingHandler() {\n return async () => {\n const { json } = await import('@tanstack/react-start');\n\n return json({\n errors: errorStore.getAllErrors(),\n });\n };\n}\n\n/**\n * Wrap a function with automatic error reporting\n *\n * Automatically reports errors to the error store.\n *\n * @example\n * ```typescript\n * import { withErrorReporting } from 'autotel-tanstack/error-reporting';\n *\n * const riskyOperation = createServerFn()\n * .handler(withErrorReporting(async () => {\n * return await performOperation();\n * }, { operation: 'riskyOperation' }));\n * ```\n */\nexport function withErrorReporting<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => Promise<TReturn>,\n context?: Record<string, unknown>,\n): (...args: TArgs) => Promise<TReturn> {\n return async (...args: TArgs): Promise<TReturn> => {\n try {\n return await fn(...args);\n } catch (error) {\n reportError(error as Error, context);\n throw error;\n }\n };\n}\n"],"mappings":";;;;;;;AA4BA,IAAM,aAAN,MAAiB;CACf,AAAQ,yBAAS,IAAI,IAAyB;CAC9C,AAAiB,YAAY;;;;CAK7B,YAAY,OAAc,SAA2B;EACnD,MAAM,MAAM,GAAG,MAAM,KAAK,GAAG,MAAM;EACnC,MAAM,WAAW,KAAK,OAAO,IAAI,GAAG;EAEpC,IAAI,UAAU;GACZ,SAAS;GACT,SAAS,2BAAW,IAAI,KAAK;GAC7B,IAAI,SAEF,SAAS,MAAM,UAAU;IACvB,GAAI,SAAS,MAAM;IACnB,GAAI;GACN;GAEF,OAAO;EACT;EAGA,MAAM,SAAsB;GAC1B,IAAI;GACJ,OAAO;GACP,0BAAU,IAAI,KAAK;GACnB,OAAO;IACL,MAAM,MAAM;IACZ,SAAS,MAAM;IACf,OAAO,MAAM;IACb;GACF;EACF;EAEA,KAAK,OAAO,IAAI,KAAK,MAAM;EAG3B,IAAI,KAAK,OAAO,OAAO,KAAK,WAAW;GAGrC,MAAM,SAAS,CADE,GAAG,KAAK,OAAO,QAAQ,CACnB,CAAC,CAAC,UACpB,GAA0B,MACzB,EAAE,EAAE,CAAC,SAAS,QAAQ,IAAI,EAAE,EAAE,CAAC,SAAS,QAAQ,CACpD,CAAC,CAAC;GACF,KAAK,OAAO,OAAO,OAAO,EAAE;EAC9B;EAGA,QAAQ,MAAM,qBAAqB;GACjC,OAAO,MAAM;GACb,OAAO;GACP;EACF,CAAC;EAED,OAAO;CACT;;;;CAKA,eAA8B;EAC5B,OAAO,CAAC,GAAG,KAAK,OAAO,OAAO,CAAC;CACjC;;;;CAKA,SAAS,IAAqC;EAC5C,OAAO,KAAK,OAAO,IAAI,EAAE;CAC3B;;;;CAKA,QAAc;EACZ,KAAK,OAAO,MAAM;CACpB;;;;CAKA,WAAW,IAAkB;EAC3B,KAAK,OAAO,OAAO,EAAE;CACvB;AACF;;;;AAKA,MAAa,aAAa,IAAI,WAAW;;;;;;;;;;;;;;;;;;;AAoBzC,SAAgB,YAAY,OAAc,SAA2B;CACnE,OAAO,WAAW,YAAY,OAAO,OAAO;AAC9C;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAgB,8BAA8B;CAC5C,OAAO,YAAY;EACjB,MAAM,EAAE,SAAS,MAAM,OAAO;EAE9B,OAAO,KAAK,EACV,QAAQ,WAAW,aAAa,EAClC,CAAC;CACH;AACF;;;;;;;;;;;;;;;;AAiBA,SAAgB,mBACd,IACA,SACsC;CACtC,OAAO,OAAO,GAAG,SAAkC;EACjD,IAAI;GACF,OAAO,MAAM,GAAG,GAAG,IAAI;EACzB,SAAS,OAAO;GACd,YAAY,OAAgB,OAAO;GACnC,MAAM;EACR;CACF;AACF"}
|
package/dist/handlers.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","names":[],"sources":["../src/handlers.ts"],"mappings":";;;;;KAcK,kBACH,SAAS,SACT;EAAS,UAAU;MAChB,QAAQ,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgCT,iBACd,SAAQ,0BACN,SAAS,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmKhB,oBACd,SAAQ,KAAK,+DACX,SAAS,mBAAmB"}
|
package/dist/handlers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","names":["trace"],"sources":["../src/handlers.ts"],"sourcesContent":["import { context, SpanStatusCode } from '@opentelemetry/api';\nimport { trace, init, getActiveTraceContext } from 'autotel';\nimport { extractContextFromRequest } from './context';\nimport { isControlFlowSignal, isRealError } from './control-flow';\nimport { isExcludedPath } from './route-filter';\nimport {\n type WrapStartHandlerConfig,\n DEFAULT_CONFIG,\n SPAN_ATTRIBUTES,\n} from './types';\n\n/**\n * Request handler type (compatible with TanStack Start handlers)\n */\ntype RequestHandler = (\n request: Request,\n opts?: { context?: Record<string, unknown> },\n) => Promise<Response> | Response;\n\n/**\n * Wrap a TanStack Start handler with OpenTelemetry tracing\n *\n * This function wraps the entire request handler to automatically create\n * spans for all incoming requests. It initializes OpenTelemetry and\n * provides comprehensive request tracing.\n *\n * @param config - Configuration options including OTLP endpoint and headers\n * @returns Function that wraps a request handler\n *\n * @example\n * ```typescript\n * // server.ts\n * import { createStartHandler, defaultStreamHandler } from '@tanstack/react-start/server';\n * import { wrapStartHandler } from 'autotel-tanstack/handlers';\n *\n * export default wrapStartHandler({\n * service: 'my-app',\n * endpoint: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,\n * headers: { 'x-honeycomb-team': process.env.HONEYCOMB_API_KEY },\n * })(createStartHandler(defaultStreamHandler));\n * ```\n *\n * @example\n * ```typescript\n * // With env var configuration (recommended for production)\n * // Set OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_HEADERS\n * export default wrapStartHandler()(createStartHandler(defaultStreamHandler));\n * ```\n */\nexport function wrapStartHandler(\n config: WrapStartHandlerConfig = {},\n): (handler: RequestHandler) => RequestHandler {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config };\n\n // Initialize autotel with provided configuration\n const service =\n config.service || process.env.OTEL_SERVICE_NAME || 'tanstack-start';\n const endpoint = config.endpoint || process.env.OTEL_EXPORTER_OTLP_ENDPOINT;\n\n // Parse headers from env if not provided\n let headers = config.headers;\n if (!headers && process.env.OTEL_EXPORTER_OTLP_HEADERS) {\n headers = {};\n const pairs = process.env.OTEL_EXPORTER_OTLP_HEADERS.split(',');\n for (const pair of pairs) {\n const [key, value] = pair.split('=');\n if (key && value) {\n headers[key.trim()] = value.trim();\n }\n }\n }\n\n // Initialize OpenTelemetry\n init({\n service,\n endpoint,\n headers,\n });\n\n return function wrapHandler(handler: RequestHandler): RequestHandler {\n return async function tracedHandler(\n request: Request,\n opts?: { context?: Record<string, unknown> },\n ): Promise<Response> {\n const url = new URL(request.url);\n\n // Check if path should be excluded\n if (isExcludedPath(url.pathname, mergedConfig.excludePaths)) {\n return handler(request, opts);\n }\n\n // Extract parent context from request headers\n const parentContext = extractContextFromRequest(request);\n\n // Run within parent context\n return context.with(parentContext, async () => {\n const spanName = `${request.method} ${url.pathname}`;\n\n return trace({ name: spanName, isError: isRealError }, async () => {\n const ctx = getActiveTraceContext()!;\n // Set HTTP semantic attributes\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.HTTP_REQUEST_METHOD]: request.method,\n [SPAN_ATTRIBUTES.URL_PATH]: url.pathname,\n [SPAN_ATTRIBUTES.URL_FULL]: request.url,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'request',\n });\n\n if (url.search) {\n ctx.setAttribute(SPAN_ATTRIBUTES.URL_QUERY, url.search);\n }\n\n // Capture configured headers\n if (mergedConfig.captureHeaders) {\n for (const header of mergedConfig.captureHeaders) {\n const value = request.headers.get(header);\n if (value) {\n ctx.setAttribute(\n `http.request.header.${header.toLowerCase()}`,\n value,\n );\n }\n }\n }\n\n // Add custom attributes\n if (config.customAttributes) {\n const customAttrs = config.customAttributes({\n type: 'request',\n name: spanName,\n request,\n });\n ctx.setAttributes(\n customAttrs as Record<string, string | number | boolean>,\n );\n }\n\n const startTime = Date.now();\n\n try {\n const response = await handler(request, opts);\n const duration = Date.now() - startTime;\n\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n ctx.setAttribute(\n SPAN_ATTRIBUTES.HTTP_RESPONSE_STATUS_CODE,\n response.status,\n );\n\n // Set status based on HTTP status code\n if (response.status >= 400) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: `HTTP ${response.status}`,\n });\n } else {\n ctx.setStatus({ code: SpanStatusCode.OK });\n }\n\n return response;\n } catch (error) {\n const duration = Date.now() - startTime;\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n\n if (mergedConfig.captureErrors) {\n ctx.recordError(error);\n }\n\n throw error;\n }\n })();\n });\n };\n };\n}\n\n/**\n * Create a traced handler without auto-initialization\n *\n * Use this when you want to initialize autotel separately\n * (e.g., with more advanced configuration).\n *\n * @param config - Configuration options (excluding endpoint/headers)\n * @returns Function that wraps a request handler\n *\n * @example\n * ```typescript\n * import { init } from 'autotel';\n * import { createTracedHandler } from 'autotel-tanstack/handlers';\n *\n * // Initialize autotel with custom configuration\n * init({\n * service: 'my-app',\n * endpoint: 'https://api.honeycomb.io',\n * instrumentations: [/* custom instrumentations *\\/],\n * });\n *\n * // Wrap handler without re-initializing\n * export default createTracedHandler({\n * captureHeaders: ['x-request-id'],\n * })(createStartHandler(defaultStreamHandler));\n * ```\n */\nexport function createTracedHandler(\n config: Omit<WrapStartHandlerConfig, 'endpoint' | 'headers' | 'service'> = {},\n): (handler: RequestHandler) => RequestHandler {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config };\n\n return function wrapHandler(handler: RequestHandler): RequestHandler {\n return async function tracedHandler(\n request: Request,\n opts?: { context?: Record<string, unknown> },\n ): Promise<Response> {\n const url = new URL(request.url);\n\n // Check if path should be excluded\n if (isExcludedPath(url.pathname, mergedConfig.excludePaths)) {\n return handler(request, opts);\n }\n\n const parentContext = extractContextFromRequest(request);\n\n return context.with(parentContext, async () => {\n const spanName = `${request.method} ${url.pathname}`;\n\n return trace({ name: spanName, isError: isRealError }, async () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.HTTP_REQUEST_METHOD]: request.method,\n [SPAN_ATTRIBUTES.URL_PATH]: url.pathname,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'request',\n });\n\n if (url.search) {\n ctx.setAttribute(SPAN_ATTRIBUTES.URL_QUERY, url.search);\n }\n\n if (mergedConfig.captureHeaders) {\n for (const header of mergedConfig.captureHeaders) {\n const value = request.headers.get(header);\n if (value) {\n ctx.setAttribute(\n `http.request.header.${header.toLowerCase()}`,\n value,\n );\n }\n }\n }\n\n if (config.customAttributes) {\n const customAttrs = config.customAttributes({\n type: 'request',\n name: spanName,\n request,\n });\n ctx.setAttributes(\n customAttrs as Record<string, string | number | boolean>,\n );\n }\n\n const startTime = Date.now();\n\n try {\n const response = await handler(request, opts);\n const duration = Date.now() - startTime;\n\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n ctx.setAttribute(\n SPAN_ATTRIBUTES.HTTP_RESPONSE_STATUS_CODE,\n response.status,\n );\n\n if (response.status >= 400) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: `HTTP ${response.status}`,\n });\n } else {\n ctx.setStatus({ code: SpanStatusCode.OK });\n }\n\n return response;\n } catch (error) {\n const duration = Date.now() - startTime;\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n\n if (mergedConfig.captureErrors) {\n ctx.recordError(error);\n }\n\n throw error;\n }\n })();\n });\n };\n };\n}\n"],"mappings":"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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/env.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;iBASgB;;;;iBAaA;;;;;;iBAaA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-B4bfWksz.d.ts","names":[],"sources":["../src/instrument.ts"],"mappings":";;KA4CY,oBAAoB,KAAK;EACnC;;iBAuBc,WAAW,UAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-DdLlMfRi.js","names":[],"sources":["../src/instrument.ts"],"sourcesContent":["/**\n * Configurable tracing setup for TanStack Start.\n *\n * `instrument(options)` is a thin wrapper over autotel's `init` that adds the\n * TanStack defaults so apps don't hand-roll them:\n *\n * - service name defaults to `OTEL_SERVICE_NAME` or `'tanstack-start'`;\n * - `debug` resolves from `AUTOTEL_DEBUG` (`pretty` in dev when no endpoint set);\n * - when `E2E=1`, spans are captured by an `InMemorySpanExporter` exposed as\n * `globalThis.__testSpanExporter` (for span assertions) instead of shipping\n * over OTLP;\n * - it's idempotent — a second call is a no-op.\n *\n * Everything else — `endpoint`, `headers`, `subscribers`, `logs`,\n * `canonicalLogLines`, extra `spanProcessors`, … — passes straight through to\n * `init`, and the standard `OTEL_*` env vars are resolved by autotel core, so\n * apps never re-parse them.\n *\n * The zero-config `autotel-tanstack/auto` side-effect module is just\n * `instrument()` with no options.\n *\n * @example\n * ```ts\n * import { instrument } from 'autotel-tanstack';\n * import { PostHogSubscriber } from 'autotel-subscribers';\n *\n * instrument({\n * subscribers: process.env.POSTHOG_KEY\n * ? [new PostHogSubscriber({ apiKey: process.env.POSTHOG_KEY })]\n * : [],\n * logs: true,\n * canonicalLogLines: { enabled: true, rootSpansOnly: true },\n * });\n * ```\n *\n * @module\n */\n\nimport { init, isInitialized, type AutotelConfig } from 'autotel';\nimport { InMemorySpanExporter } from 'autotel/exporters';\nimport { SimpleSpanProcessor } from 'autotel/processors';\n\n// `service` is optional here — instrument() defaults it to OTEL_SERVICE_NAME or\n// 'tanstack-start'. Everything else matches autotel's init config.\nexport type InstrumentOptions = Omit<AutotelConfig, 'service'> & {\n service?: string;\n};\n\nconst DEFAULT_SERVICE = 'tanstack-start';\n\n/**\n * Resolve span-debug output: an explicit option wins; otherwise `AUTOTEL_DEBUG`\n * (`pretty` | `true`/`1` | `false`/`0`); otherwise pretty-print in development\n * when there's no OTLP endpoint, so spans are visible immediately.\n */\nfunction resolveDebug(\n explicit: AutotelConfig['debug'],\n endpoint: string | undefined,\n): boolean | 'pretty' {\n if (explicit !== undefined) return explicit;\n const env = process.env.AUTOTEL_DEBUG;\n if (env === 'pretty') return 'pretty';\n if (env === 'true' || env === '1') return true;\n if (env === 'false' || env === '0') return false;\n if (!endpoint && process.env.NODE_ENV === 'development') return 'pretty';\n return false;\n}\n\nexport function instrument(options: InstrumentOptions = {}): void {\n // Idempotent: tolerate the instrumentation module being evaluated more than\n // once (HMR, multiple entry points) without re-initializing.\n if (isInitialized()) return;\n\n const service =\n options.service ?? process.env.OTEL_SERVICE_NAME ?? DEFAULT_SERVICE;\n\n if (process.env.E2E === '1') {\n // Capture spans in memory for test assertions; skip OTLP/logs entirely.\n const exporter = new InMemorySpanExporter();\n (globalThis as Record<string, unknown>).__testSpanExporter = exporter;\n init({\n service,\n subscribers: options.subscribers,\n spanProcessors: [\n new SimpleSpanProcessor(exporter),\n ...(options.spanProcessors ?? []),\n ],\n });\n return;\n }\n\n init({\n ...options,\n service,\n debug: resolveDebug(options.debug, options.endpoint),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,MAAM,kBAAkB;;;;;;AAOxB,SAAS,aACP,UACA,UACoB;CACpB,IAAI,aAAa,QAAW,OAAO;CACnC,MAAM,MAAM,QAAQ,IAAI;CACxB,IAAI,QAAQ,UAAU,OAAO;CAC7B,IAAI,QAAQ,UAAU,QAAQ,KAAK,OAAO;CAC1C,IAAI,QAAQ,WAAW,QAAQ,KAAK,OAAO;CAC3C,IAAI,CAAC,YAAY,QAAQ,IAAI,aAAa,eAAe,OAAO;CAChE,OAAO;AACT;AAEA,SAAgB,WAAW,UAA6B,CAAC,GAAS;CAGhE,IAAI,cAAc,GAAG;CAErB,MAAM,UACJ,QAAQ,WAAW,QAAQ,IAAI,qBAAqB;CAEtD,IAAI,QAAQ,IAAI,QAAQ,KAAK;EAE3B,MAAM,WAAW,IAAI,qBAAqB;EAC1C,AAAC,WAAuC,qBAAqB;EAC7D,KAAK;GACH;GACA,aAAa,QAAQ;GACrB,gBAAgB,CACd,IAAI,oBAAoB,QAAQ,GAChC,GAAI,QAAQ,kBAAkB,CAAC,CACjC;EACF,CAAC;EACD;CACF;CAEA,KAAK;EACH,GAAG;EACH;EACA,OAAO,aAAa,QAAQ,OAAO,QAAQ,QAAQ;CACrD,CAAC;AACH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loaders-DMUCHc32.d.ts","names":[],"sources":["../../../node_modules/.pnpm/@tanstack+history@1.162.0/node_modules/@tanstack/history/dist/esm/index.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/utils.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/link.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/root.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/route.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/validators.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/location.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/stores.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/router.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/global.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/structuralSharing.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useLoaderData.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useMatch.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useLoaderDeps.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useParams.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useSearch.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useRouteContext.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/link.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/route.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/fileRoute.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/history.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/Matches.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/router.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/ssr/serializer.d.ts","../src/loaders.ts"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"mappings":"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"}
|
package/dist/loaders.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loaders.js","names":["trace"],"sources":["../src/loaders.ts"],"sourcesContent":["import { SpanStatusCode } from '@opentelemetry/api';\nimport { trace, getActiveTraceContext } from 'autotel';\nimport { isServerSide } from './env';\nimport { isControlFlowSignal, isRealError } from './control-flow';\nimport { type TraceLoaderConfig, SPAN_ATTRIBUTES } from './types';\n\n// Re-export types from @tanstack/react-router for consumers who need them\nexport type { LoaderFnContext } from '@tanstack/react-router';\n\n/**\n * Internal type for extracting route info from TanStack context.\n * This is a minimal interface used only for instrumentation - the actual\n * TanStack types flow through the generic parameter.\n */\ninterface TanStackContextInternal {\n route?: { id?: string };\n params?: Record<string, string>;\n}\n\n/**\n * Wrap a TanStack route loader with OpenTelemetry tracing\n *\n * This function wraps a loader function to automatically create spans\n * for each invocation. It captures route ID, params (optionally),\n * and errors.\n *\n * The generic type TLoaderFn preserves the full TanStack Router type inference,\n * including typed params, context, and return types.\n *\n * @param loaderFn - The loader function to wrap\n * @param config - Configuration options\n * @returns Wrapped loader function with tracing (preserves original types)\n *\n * @example\n * ```typescript\n * import { createFileRoute } from '@tanstack/react-router';\n * import { traceLoader } from 'autotel-tanstack/loaders';\n *\n * export const Route = createFileRoute('/users/$userId')({\n * // Types are fully preserved - params.userId is typed as string\n * loader: traceLoader(async ({ params }) => {\n * return await db.users.findUnique({ where: { id: params.userId } });\n * }),\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Sync loaders are also supported\n * export const Route = createFileRoute('/static')({\n * loader: traceLoader(({ context }) => ({\n * message: `Welcome, ${context.userId}!`,\n * })),\n * });\n * ```\n */\nexport function traceLoader<TLoaderFn extends (ctx: any) => any>(\n loaderFn: TLoaderFn,\n config: TraceLoaderConfig = {},\n): TLoaderFn {\n const captureParams = config.captureParams ?? true;\n const captureResult = config.captureResult ?? false;\n\n const wrapped = (context: TanStackContextInternal) => {\n // If we're in the browser, just call the loader without tracing\n // This prevents autotel (which uses Node.js APIs) from being executed in the browser\n if (!isServerSide()) {\n return loaderFn(context);\n }\n\n const routeId = context?.route?.id || 'unknown';\n const spanName = config.name || `tanstack.loader.${routeId}`;\n\n // Handle both sync and async loaders\n const result = loaderFn(context);\n const isPromise = result instanceof Promise;\n\n if (!isPromise) {\n // Sync loader - wrap in trace synchronously\n return trace({ name: spanName, isError: isRealError }, () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'loader',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'loader',\n });\n\n if (captureParams && context?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(context.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n if (captureResult && result !== undefined) {\n try {\n ctx.setAttribute('tanstack.loader.result', JSON.stringify(result));\n } catch {\n ctx.setAttribute('tanstack.loader.result', '[non-serializable]');\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n })();\n }\n\n // Async loader\n return trace({ name: spanName, isError: isRealError }, async () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'loader',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'loader',\n });\n\n if (captureParams && context?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(context.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n try {\n const asyncResult = await result;\n\n if (captureResult && asyncResult !== undefined) {\n try {\n ctx.setAttribute(\n 'tanstack.loader.result',\n JSON.stringify(asyncResult),\n );\n } catch {\n ctx.setAttribute('tanstack.loader.result', '[non-serializable]');\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return asyncResult;\n } catch (error) {\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n throw error;\n }\n })();\n };\n\n return wrapped as TLoaderFn;\n}\n\n/**\n * Wrap a TanStack route beforeLoad function with OpenTelemetry tracing\n *\n * This function wraps a beforeLoad function to automatically create spans.\n * beforeLoad runs before the route component renders and is typically\n * used for auth checks, redirects, or data prefetching.\n *\n * The generic type TBeforeLoadFn preserves the full TanStack Router type inference,\n * including typed params, context, search, and return types.\n *\n * @param beforeLoadFn - The beforeLoad function to wrap\n * @param config - Configuration options\n * @returns Wrapped beforeLoad function with tracing (preserves original types)\n *\n * @example\n * ```typescript\n * import { createFileRoute, redirect } from '@tanstack/react-router';\n * import { traceBeforeLoad } from 'autotel-tanstack/loaders';\n *\n * export const Route = createFileRoute('/dashboard')({\n * // Types are fully preserved - context, params, search are all typed\n * beforeLoad: traceBeforeLoad(async ({ context, params }) => {\n * if (!context.auth.isAuthenticated) {\n * throw redirect({ to: '/login' });\n * }\n * return { userId: params.userId }; // Return type flows to loader context\n * }),\n * loader: ({ context }) => {\n * // context.userId is typed from beforeLoad return\n * return { user: context.userId };\n * },\n * });\n * ```\n */\nexport function traceBeforeLoad<TBeforeLoadFn extends (opts: any) => any>(\n beforeLoadFn: TBeforeLoadFn,\n config: TraceLoaderConfig = {},\n): TBeforeLoadFn {\n const captureParams = config.captureParams ?? true;\n\n const wrapped = (input: TanStackContextInternal) => {\n // Skip tracing in browser\n if (!isServerSide()) {\n return beforeLoadFn(input);\n }\n\n const routeId = input?.route?.id || 'unknown';\n const spanName = config.name || `tanstack.beforeLoad.${routeId}`;\n\n // Handle both sync and async beforeLoad\n const result = beforeLoadFn(input);\n const isPromise = result instanceof Promise;\n\n if (!isPromise) {\n // Sync beforeLoad\n return trace({ name: spanName, isError: isRealError }, () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'beforeLoad',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'beforeLoad',\n });\n\n if (captureParams && input?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(input.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n })();\n }\n\n // Async beforeLoad\n return trace({ name: spanName, isError: isRealError }, async () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'beforeLoad',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'beforeLoad',\n });\n\n if (captureParams && input?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(input.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n try {\n const asyncResult = await result;\n ctx.setStatus({ code: SpanStatusCode.OK });\n return asyncResult;\n } catch (error) {\n // redirect()/notFound() are expected control flow, not errors.\n if (isControlFlowSignal(error)) {\n ctx.setAttribute('tanstack.beforeLoad.redirect', true);\n ctx.setStatus({ code: SpanStatusCode.OK });\n } else {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n }\n throw error;\n }\n })();\n };\n\n return wrapped as TBeforeLoadFn;\n}\n\n/**\n * Create a traced route configuration helper\n *\n * This higher-order function helps create route configurations\n * with automatic tracing for both loader and beforeLoad.\n *\n * @param routeId - The route identifier\n * @param config - Tracing configuration\n * @returns Object with traced loader and beforeLoad wrappers\n *\n * @example\n * ```typescript\n * import { createFileRoute } from '@tanstack/react-router';\n * import { createTracedRoute } from 'autotel-tanstack/loaders';\n *\n * const traced = createTracedRoute('/users/$userId');\n *\n * export const Route = createFileRoute('/users/$userId')({\n * beforeLoad: traced.beforeLoad(async ({ context }) => {\n * // Auth check\n * }),\n * loader: traced.loader(async ({ params }) => {\n * return await getUser(params.userId);\n * }),\n * });\n * ```\n */\nexport function createTracedRoute(\n routeId: string,\n config: Omit<TraceLoaderConfig, 'name'> = {},\n) {\n return {\n /**\n * Wrap a loader function with tracing\n */\n loader<TLoaderFn extends (ctx: any) => any>(\n loaderFn: TLoaderFn,\n ): TLoaderFn {\n return traceLoader(loaderFn, {\n ...config,\n name: `tanstack.loader.${routeId}`,\n });\n },\n\n /**\n * Wrap a beforeLoad function with tracing\n */\n beforeLoad<TBeforeLoadFn extends (opts: any) => any>(\n beforeLoadFn: TBeforeLoadFn,\n ): TBeforeLoadFn {\n return traceBeforeLoad(beforeLoadFn, {\n ...config,\n name: `tanstack.beforeLoad.${routeId}`,\n });\n },\n };\n}\n"],"mappings":"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"}
|
package/dist/metrics.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","names":[],"sources":["../src/metrics.ts"],"mappings":";;;;;;;;;;UAUiB;EACf;EACA;EACA;EACA;EACA;EACA;;;;;;;;;;;;;;;;;;;;cAqBI;UACI;mBACS;;;;EAKjB,aAAa,cAAc;;;;EAiB3B,SAAS,eAAe;;;;EAsBxB,eAAe,eAAe;;;;EAc9B;;;;EAOA,YAAY;;;;;cAQD,kBAAgB;;;;;;;;;;;;;;;;;;;;;;;iBAwBb,8BAAoB,wCAAA;;;;;;;;;;;;;;;;;;;;;;;iBA8BpB,aAAa,cAAc,qBACzC,oBACA,IAAI,IACH"}
|
package/dist/metrics.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","names":[],"sources":["../src/metrics.ts"],"sourcesContent":["/**\n * Performance metrics collection for TanStack Start\n *\n * Provides utilities to collect and expose performance metrics\n * following the patterns from TanStack Start observability guide.\n */\n\n/**\n * Performance timing data\n */\nexport interface TimingStats {\n count: number;\n avg: number;\n p50: number;\n p95: number;\n min: number;\n max: number;\n}\n\n/**\n * Metrics collector for performance data\n *\n * Collects timing metrics and provides statistical analysis.\n * Thread-safe for concurrent access.\n *\n * @example\n * ```typescript\n * import { metricsCollector } from 'autotel-tanstack/metrics';\n *\n * // Record a timing\n * metricsCollector.recordTiming('serverFn.getUser', 150);\n *\n * // Get stats\n * const stats = metricsCollector.getStats('serverFn.getUser');\n * console.log(`Average: ${stats.avg}ms, P95: ${stats.p95}ms`);\n * ```\n */\nclass MetricsCollector {\n private metrics = new Map<string, number[]>();\n private readonly maxSamples = 1000; // Limit memory usage\n\n /**\n * Record a timing measurement\n */\n recordTiming(name: string, duration: number): void {\n if (!this.metrics.has(name)) {\n this.metrics.set(name, []);\n }\n\n const timings = this.metrics.get(name)!;\n timings.push(duration);\n\n // Limit samples to prevent memory issues\n if (timings.length > this.maxSamples) {\n timings.shift(); // Remove oldest\n }\n }\n\n /**\n * Get statistics for a metric\n */\n getStats(name: string): TimingStats | null {\n const timings = this.metrics.get(name);\n if (!timings || timings.length === 0) {\n return null;\n }\n\n const sorted = [...timings].toSorted((a, b) => a - b);\n const sum = timings.reduce((a, b) => a + b, 0);\n\n return {\n count: timings.length,\n avg: sum / timings.length,\n p50: sorted.at(Math.floor(sorted.length * 0.5)) ?? 0,\n p95: sorted.at(Math.floor(sorted.length * 0.95)) ?? 0,\n min: sorted[0] ?? 0,\n max: sorted.at(-1) ?? 0,\n };\n }\n\n /**\n * Get all collected metrics\n */\n getAllStats(): Record<string, TimingStats> {\n const stats: Record<string, TimingStats> = {};\n for (const [name] of this.metrics) {\n const stat = this.getStats(name);\n if (stat) {\n stats[name] = stat;\n }\n }\n return stats;\n }\n\n /**\n * Reset all metrics\n */\n reset(): void {\n this.metrics.clear();\n }\n\n /**\n * Reset a specific metric\n */\n resetMetric(name: string): void {\n this.metrics.delete(name);\n }\n}\n\n/**\n * Global metrics collector instance\n */\nexport const metricsCollector = new MetricsCollector();\n\n/**\n * Helper to create a metrics endpoint handler\n *\n * Returns a handler that exposes metrics in JSON format.\n * Use this to create a `/metrics` endpoint.\n *\n * @example\n * ```typescript\n * // routes/metrics.ts\n * import { createFileRoute } from '@tanstack/react-router';\n * import { json } from '@tanstack/react-start';\n * import { createMetricsHandler } from 'autotel-tanstack/metrics';\n *\n * export const Route = createFileRoute('/metrics')({\n * server: {\n * handlers: {\n * GET: createMetricsHandler(),\n * },\n * },\n * });\n * ```\n */\nexport function createMetricsHandler() {\n return async () => {\n const { json } = await import('@tanstack/react-start');\n\n return json({\n system: {\n uptime: process.uptime(),\n memory: process.memoryUsage(),\n timestamp: new Date().toISOString(),\n },\n application: metricsCollector.getAllStats(),\n });\n };\n}\n\n/**\n * Auto-record timing from a function execution\n *\n * Wraps a function to automatically record its execution time.\n *\n * @example\n * ```typescript\n * import { recordTiming } from 'autotel-tanstack/metrics';\n *\n * const getUser = createServerFn({ method: 'GET' })\n * .handler(recordTiming('serverFn.getUser', async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * }));\n * ```\n */\nexport function recordTiming<T extends (...args: any[]) => any>(\n metricName: string,\n fn: T,\n): T {\n return (async (...args: Parameters<T>) => {\n const startTime = Date.now();\n try {\n const result = await fn(...args);\n const duration = Date.now() - startTime;\n metricsCollector.recordTiming(metricName, duration);\n return result as ReturnType<T>;\n } catch (error) {\n const duration = Date.now() - startTime;\n metricsCollector.recordTiming(`${metricName}.error`, duration);\n throw error;\n }\n }) as T;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqCA,IAAM,mBAAN,MAAuB;CACrB,AAAQ,0BAAU,IAAI,IAAsB;CAC5C,AAAiB,aAAa;;;;CAK9B,aAAa,MAAc,UAAwB;EACjD,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,GACxB,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC;EAG3B,MAAM,UAAU,KAAK,QAAQ,IAAI,IAAI;EACrC,QAAQ,KAAK,QAAQ;EAGrB,IAAI,QAAQ,SAAS,KAAK,YACxB,QAAQ,MAAM;CAElB;;;;CAKA,SAAS,MAAkC;EACzC,MAAM,UAAU,KAAK,QAAQ,IAAI,IAAI;EACrC,IAAI,CAAC,WAAW,QAAQ,WAAW,GACjC,OAAO;EAGT,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC;EACpD,MAAM,MAAM,QAAQ,QAAQ,GAAG,MAAM,IAAI,GAAG,CAAC;EAE7C,OAAO;GACL,OAAO,QAAQ;GACf,KAAK,MAAM,QAAQ;GACnB,KAAK,OAAO,GAAG,KAAK,MAAM,OAAO,SAAS,EAAG,CAAC,KAAK;GACnD,KAAK,OAAO,GAAG,KAAK,MAAM,OAAO,SAAS,GAAI,CAAC,KAAK;GACpD,KAAK,OAAO,MAAM;GAClB,KAAK,OAAO,GAAG,EAAE,KAAK;EACxB;CACF;;;;CAKA,cAA2C;EACzC,MAAM,QAAqC,CAAC;EAC5C,KAAK,MAAM,CAAC,SAAS,KAAK,SAAS;GACjC,MAAM,OAAO,KAAK,SAAS,IAAI;GAC/B,IAAI,MACF,MAAM,QAAQ;EAElB;EACA,OAAO;CACT;;;;CAKA,QAAc;EACZ,KAAK,QAAQ,MAAM;CACrB;;;;CAKA,YAAY,MAAoB;EAC9B,KAAK,QAAQ,OAAO,IAAI;CAC1B;AACF;;;;AAKA,MAAa,mBAAmB,IAAI,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;AAwBrD,SAAgB,uBAAuB;CACrC,OAAO,YAAY;EACjB,MAAM,EAAE,SAAS,MAAM,OAAO;EAE9B,OAAO,KAAK;GACV,QAAQ;IACN,QAAQ,QAAQ,OAAO;IACvB,QAAQ,QAAQ,YAAY;IAC5B,4BAAW,IAAI,KAAK,EAAC,CAAC,YAAY;GACpC;GACA,aAAa,iBAAiB,YAAY;EAC5C,CAAC;CACH;AACF;;;;;;;;;;;;;;;;AAiBA,SAAgB,aACd,YACA,IACG;CACH,QAAQ,OAAO,GAAG,SAAwB;EACxC,MAAM,YAAY,KAAK,IAAI;EAC3B,IAAI;GACF,MAAM,SAAS,MAAM,GAAG,GAAG,IAAI;GAC/B,MAAM,WAAW,KAAK,IAAI,IAAI;GAC9B,iBAAiB,aAAa,YAAY,QAAQ;GAClD,OAAO;EACT,SAAS,OAAO;GACd,MAAM,WAAW,KAAK,IAAI,IAAI;GAC9B,iBAAiB,aAAa,GAAG,WAAW,SAAS,QAAQ;GAC7D,MAAM;EACR;CACF;AACF"}
|
package/dist/middleware.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","names":[],"sources":["../src/middleware.ts"],"mappings":";;;;;;;;UAiFiB,kBAAkB;GAChC;IACC,OAAO,MAAM,QAAQ,cAAc,QAAQ;IAC3C,SAAS;IACT,UAAU;IACV;IACA;IACA;IACA;IACA;IACA,SAAS;MACP,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyCE,wBAAwB,oBACtC,SAAS,0BACR,kBAAkB;;;;;;;;;;;;;;;;;;;;iBAkOL,kBAAkB,oBAChC,SAAS,0BACR,kBAAkB;;;;;;;;;;;;;;;;;;;;;iBA6BL,0BAA0B,oBACxC,SAAS,KAAK,mCACb,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiDL,2BAA2B,oBACzC,SAAS,2BACP"}
|
package/dist/middleware.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","names":["trace"],"sources":["../src/middleware.ts"],"sourcesContent":["import { context, SpanStatusCode, type Attributes } from '@opentelemetry/api';\nimport { trace, getActiveTraceContext } from 'autotel';\nimport { extractContextFromRequest } from './context';\nimport { isServerSide } from './env';\nimport { isControlFlowSignal, isRealError } from './control-flow';\nimport { isExcludedPath } from './route-filter';\nimport {\n type TracingMiddlewareConfig,\n DEFAULT_CONFIG,\n SPAN_ATTRIBUTES,\n} from './types';\n\n/**\n * Build span attributes for HTTP requests\n */\nfunction buildRequestAttributes(\n request: Request,\n config: Required<\n Omit<TracingMiddlewareConfig, 'customAttributes' | 'service' | 'type'>\n >,\n): Attributes {\n const url = new URL(request.url);\n const attrs: Attributes = {\n [SPAN_ATTRIBUTES.HTTP_REQUEST_METHOD]: request.method,\n [SPAN_ATTRIBUTES.URL_PATH]: url.pathname,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'request',\n };\n\n if (url.search) {\n attrs[SPAN_ATTRIBUTES.URL_QUERY] = url.search;\n }\n\n // Capture configured headers\n if (config.captureHeaders) {\n for (const header of config.captureHeaders) {\n const value = request.headers.get(header);\n if (value) {\n attrs[`http.request.header.${header.toLowerCase()}`] = value;\n }\n }\n }\n\n return attrs;\n}\n\n/**\n * Build span attributes for server functions\n */\nfunction buildServerFnAttributes(\n functionName: string,\n method: string,\n args: unknown,\n config: Required<\n Omit<TracingMiddlewareConfig, 'customAttributes' | 'service' | 'type'>\n >,\n): Attributes {\n const attrs: Attributes = {\n [SPAN_ATTRIBUTES.RPC_SYSTEM]: 'tanstack-start',\n [SPAN_ATTRIBUTES.RPC_METHOD]: functionName,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'serverFn',\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_NAME]: functionName,\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_METHOD]: method,\n };\n\n if (config.captureArgs && args !== undefined) {\n try {\n attrs[SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS] = JSON.stringify(args);\n } catch {\n attrs[SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS] = '[non-serializable]';\n }\n }\n\n return attrs;\n}\n\n/**\n * Generic middleware handler type (compatible with TanStack's middleware pattern)\n *\n * This type represents the shape of TanStack middleware handlers.\n * We use a generic type to avoid direct dependency on TanStack packages.\n */\nexport interface MiddlewareHandler<TContext = unknown> {\n (opts: {\n next: (ctx?: Partial<TContext>) => Promise<TContext>;\n context: TContext;\n request?: Request;\n pathname?: string;\n data?: unknown;\n method?: string;\n filename?: string;\n functionId?: string;\n signal?: AbortSignal;\n }): Promise<TContext>;\n}\n\n/**\n * Create a TanStack-compatible tracing middleware\n *\n * This creates middleware that automatically traces all requests/server functions\n * with OpenTelemetry spans. Use with TanStack Start's middleware system.\n *\n * @param config - Configuration options\n * @returns Middleware handler compatible with TanStack Start\n *\n * @example\n * ```typescript\n * // Global request middleware in app/start.ts\n * import { createStart } from '@tanstack/react-start';\n * import { createTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const startInstance = createStart(() => ({\n * requestMiddleware: [\n * createTracingMiddleware({\n * captureHeaders: ['x-request-id', 'user-agent'],\n * excludePaths: ['/health', '/metrics'],\n * }),\n * ],\n * }));\n * ```\n *\n * @example\n * ```typescript\n * // Server function middleware\n * import { createServerFn } from '@tanstack/react-start';\n * import { createTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const getUser = createServerFn({ method: 'GET' })\n * .middleware([createTracingMiddleware({ type: 'function' })])\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function createTracingMiddleware<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): MiddlewareHandler<TContext> {\n const mergedConfig = {\n ...DEFAULT_CONFIG,\n ...config,\n type: config?.type ?? 'request',\n };\n\n return async function tracingMiddleware(opts) {\n // If we're in the browser, return a no-op middleware\n // This prevents autotel (which uses Node.js APIs) from being bundled/executed in the browser\n if (!isServerSide()) {\n return opts.next();\n }\n const { next, request, pathname, data, functionId } = opts;\n\n // For function middleware\n if (mergedConfig.type === 'function') {\n const fnName = functionId || 'unknown';\n const method = (opts as { method?: string }).method || 'POST';\n\n return trace(\n { name: `tanstack.serverFn.${fnName}`, isError: isRealError },\n async () => {\n const ctx = getActiveTraceContext()!;\n const attrs = buildServerFnAttributes(\n fnName,\n method,\n data,\n mergedConfig,\n );\n ctx.setAttributes(attrs as Record<string, string | number | boolean>);\n\n // Add custom attributes if provided\n if (config?.customAttributes) {\n const customAttrs = config.customAttributes({\n type: 'serverFn',\n name: fnName,\n args: data,\n });\n ctx.setAttributes(\n customAttrs as Record<string, string | number | boolean>,\n );\n }\n\n try {\n const result = await next();\n\n // Capture result if configured\n if (mergedConfig.captureResults && result !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n JSON.stringify(result),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n if (mergedConfig.captureErrors) {\n if (\n 'recordError' in ctx &&\n typeof ctx.recordError === 'function'\n ) {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n\n // Report error to error store\n try {\n const { reportError } = await import('./error-reporting');\n reportError(error as Error, {\n type: 'serverFn',\n name: fnName,\n method,\n });\n } catch {\n // Error reporting not available, skip\n }\n }\n throw error;\n }\n },\n )() as Promise<TContext>;\n }\n\n // For request middleware\n if (!request) {\n // No request available, just pass through\n return next();\n }\n\n const url = new URL(request.url);\n\n // Check if path should be excluded\n if (isExcludedPath(url.pathname, mergedConfig.excludePaths)) {\n return next();\n }\n\n // Extract parent context from request headers\n const parentContext = extractContextFromRequest(request);\n\n // Run within parent context for distributed tracing\n return context.with(parentContext, async () => {\n const spanName = `${request.method} ${pathname || url.pathname}`;\n\n return trace({ name: spanName, isError: isRealError }, async () => {\n const ctx = getActiveTraceContext()!;\n const attrs = buildRequestAttributes(request, mergedConfig);\n ctx.setAttributes(attrs as Record<string, string | number | boolean>);\n\n // Add custom attributes if provided\n if (config?.customAttributes) {\n const customAttrs = config.customAttributes({\n type: 'request',\n name: spanName,\n request,\n });\n ctx.setAttributes(\n customAttrs as Record<string, string | number | boolean>,\n );\n }\n\n const startTime = Date.now();\n\n try {\n const result = await next();\n\n const duration = Date.now() - startTime;\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n\n // Record timing in metrics collector\n try {\n const { metricsCollector } = await import('./metrics');\n metricsCollector.recordTiming(spanName, duration);\n } catch {\n // Metrics not available, skip\n }\n\n // Try to get response status from result if it's a Response\n if (result && typeof result === 'object' && 'status' in result) {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.HTTP_RESPONSE_STATUS_CODE,\n (result as { status: number }).status,\n );\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n const duration = Date.now() - startTime;\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n\n if (mergedConfig.captureErrors) {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n\n // Report error to error store\n try {\n const { reportError } = await import('./error-reporting');\n reportError(error as Error, {\n type: 'request',\n method: request.method,\n pathname: url.pathname,\n });\n } catch {\n // Error reporting not available, skip\n }\n }\n throw error;\n }\n })() as Promise<TContext>;\n });\n };\n}\n\n/**\n * Pre-configured tracing middleware with sensible defaults\n *\n * Convenience export for quick setup. Uses adaptive sampling,\n * captures x-request-id header, and excludes common health check paths.\n *\n * @param config - Optional configuration overrides\n * @returns Middleware handler\n *\n * @example\n * ```typescript\n * import { createStart } from '@tanstack/react-start';\n * import { tracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const startInstance = createStart(() => ({\n * requestMiddleware: [tracingMiddleware()],\n * }));\n * ```\n */\nexport function tracingMiddleware<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): MiddlewareHandler<TContext> {\n return createTracingMiddleware({\n sampling: 'adaptive',\n captureHeaders: ['x-request-id', 'user-agent'],\n excludePaths: ['/health', '/healthz', '/ready', '/metrics', '/_ping'],\n ...config,\n });\n}\n\n/**\n * Create function-specific tracing middleware\n *\n * Convenience wrapper for server function middleware.\n *\n * @param config - Optional configuration\n * @returns Middleware handler for server functions\n *\n * @example\n * ```typescript\n * import { createServerFn } from '@tanstack/react-start';\n * import { functionTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const getUser = createServerFn({ method: 'GET' })\n * .middleware([functionTracingMiddleware()])\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function functionTracingMiddleware<TContext = unknown>(\n config?: Omit<TracingMiddlewareConfig, 'type'>,\n): MiddlewareHandler<TContext> {\n return createTracingMiddleware({\n ...config,\n type: 'function',\n });\n}\n\n/**\n * Create a tracing handler for use with TanStack's native createMiddleware()\n *\n * This provides the raw tracing logic that you can pass to createMiddleware().server().\n * Use this when you want full control over the middleware builder pattern.\n *\n * The handler accepts TanStack's middleware signature `{ next, context, request }`\n * and internally adapts it to our more flexible MiddlewareHandler interface.\n *\n * @param config - Configuration options\n * @returns Server handler function compatible with createMiddleware().server()\n *\n * @example\n * ```typescript\n * import { createStart, createMiddleware } from '@tanstack/react-start';\n * import { createTracingServerHandler } from 'autotel-tanstack/middleware';\n *\n * // TanStack-native middleware creation\n * const requestTracingMiddleware = createMiddleware().server(\n * createTracingServerHandler({ captureHeaders: ['x-request-id'] })\n * );\n *\n * export const start = createStart(() => ({\n * requestMiddleware: [requestTracingMiddleware],\n * }));\n * ```\n *\n * @example\n * ```typescript\n * // For server functions - use createMiddleware({ type: 'function' })\n * import { createStart, createMiddleware } from '@tanstack/react-start';\n * import { createTracingServerHandler } from 'autotel-tanstack/middleware';\n *\n * const functionTracingMiddleware = createMiddleware({ type: 'function' }).server(\n * createTracingServerHandler({ type: 'function', captureArgs: true })\n * );\n *\n * export const start = createStart(() => ({\n * functionMiddleware: [functionTracingMiddleware],\n * }));\n * ```\n */\nexport function createTracingServerHandler<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): (opts: any) => any {\n const handler = createTracingMiddleware<TContext>(config);\n\n // Adapt TanStack's signature to our handler\n return async (opts: any) => {\n return handler(opts);\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-filter-dLg-j3jR.js","names":[],"sources":["../src/route-filter.ts"],"sourcesContent":["import { shouldInstrumentPath } from 'autotel-edge';\n\n/**\n * TanStack historically supported:\n * - glob strings (`/api/internal/*`)\n * - regex values\n * - plain-string prefix matching (`/health` matches `/healthz`)\n *\n * This helper keeps those semantics while delegating glob matching to\n * autotel-edge's shared middleware toolkit.\n */\nexport function isExcludedPath(\n pathname: string,\n excludePaths: Array<string | RegExp>,\n): boolean {\n for (const pattern of excludePaths) {\n if (pattern instanceof RegExp) {\n if (pattern.test(pathname)) return true;\n continue;\n }\n\n if (pattern.includes('*') || pattern.includes('?')) {\n if (\n !shouldInstrumentPath(pathname, {\n include: undefined,\n exclude: [pattern],\n })\n ) {\n return true;\n }\n continue;\n }\n\n if (pathname === pattern || pathname.startsWith(pattern)) {\n return true;\n }\n }\n\n return false;\n}\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,eACd,UACA,cACS;CACT,KAAK,MAAM,WAAW,cAAc;EAClC,IAAI,mBAAmB,QAAQ;GAC7B,IAAI,QAAQ,KAAK,QAAQ,GAAG,OAAO;GACnC;EACF;EAEA,IAAI,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;GAClD,IACE,CAAC,qBAAqB,UAAU;IAC9B,SAAS;IACT,SAAS,CAAC,OAAO;GACnB,CAAC,GAED,OAAO;GAET;EACF;EAEA,IAAI,aAAa,WAAW,SAAS,WAAW,OAAO,GACrD,OAAO;CAEX;CAEA,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-functions.d.ts","names":[],"sources":["../src/server-functions.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8CgB,cAAc,cAAc,qBAC1C,UAAU,GACV,SAAQ,sBACP;;;;;;;;;;;;;;;;;;;;;;;;;iBAgHa,4BACd,4BAA4B,qBAE5B,wBAAwB,iBACxB,gBAAe,KAAK,+BACnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-functions.js","names":["trace"],"sources":["../src/server-functions.ts"],"sourcesContent":["import { SpanStatusCode } from '@opentelemetry/api';\nimport { trace, getActiveTraceContext } from 'autotel';\nimport { isServerSide } from './env';\nimport { isControlFlowSignal, isRealError } from './control-flow';\nimport { type TraceServerFnConfig, SPAN_ATTRIBUTES } from './types';\n\n/**\n * Wrap a TanStack server function with OpenTelemetry tracing\n *\n * This function wraps a server function to automatically create spans\n * for each invocation. It captures function name, arguments (optionally),\n * results (optionally), and errors.\n *\n * @param serverFn - The server function to wrap\n * @param config - Configuration options\n * @returns Wrapped server function with tracing\n *\n * @example\n * ```typescript\n * import { createServerFn } from '@tanstack/react-start';\n * import { traceServerFn } from 'autotel-tanstack/server-functions';\n *\n * const getUserBase = createServerFn({ method: 'GET' })\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n *\n * export const getUser = traceServerFn(getUserBase, { name: 'getUser' });\n * ```\n *\n * @example\n * ```typescript\n * // With argument and result capture (careful with PII!)\n * export const createUser = traceServerFn(\n * createServerFn({ method: 'POST' })\n * .handler(async ({ data }) => {\n * return await db.users.create({ data });\n * }),\n * {\n * name: 'createUser',\n * captureArgs: true,\n * captureResults: false, // Don't capture for PII reasons\n * }\n * );\n * ```\n */\nexport function traceServerFn<T extends (...args: any[]) => any>(\n serverFn: T,\n config: TraceServerFnConfig = {},\n): T {\n const fnName = config.name || serverFn.name || 'serverFn';\n const captureArgs = config.captureArgs ?? true;\n const captureResults = config.captureResults ?? false;\n\n return new Proxy(serverFn, {\n apply(target, thisArg, argArray) {\n // If we're in the browser, just call the function without tracing\n // Server functions should never run in the browser, but this prevents\n // autotel (which uses Node.js APIs) from being executed if it somehow does\n if (!isServerSide()) {\n return target.apply(thisArg, argArray);\n }\n\n return trace(\n { name: `tanstack.serverFn.${fnName}`, isError: isRealError },\n async () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.RPC_SYSTEM]: 'tanstack-start',\n [SPAN_ATTRIBUTES.RPC_METHOD]: fnName,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'serverFn',\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_NAME]: fnName,\n });\n\n // Capture arguments if configured\n if (captureArgs && argArray.length > 0) {\n const args = argArray[0];\n if (args !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS,\n JSON.stringify(args),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS,\n '[non-serializable]',\n );\n }\n }\n }\n\n try {\n const result = await Reflect.apply(target, thisArg, argArray);\n\n // Capture result if configured\n if (captureResults && result !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n JSON.stringify(result),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n throw error;\n }\n },\n )();\n },\n\n get(target, prop, receiver) {\n return Reflect.get(target, prop, receiver);\n },\n }) as T;\n}\n\n/**\n * Create a traced version of createServerFn\n *\n * This higher-order function wraps TanStack's createServerFn to automatically\n * add tracing to all created server functions.\n *\n * @param createServerFnOriginal - The original createServerFn from TanStack\n * @param defaultConfig - Default configuration for all server functions\n * @returns Wrapped createServerFn that produces traced server functions\n *\n * @example\n * ```typescript\n * import { createServerFn as originalCreateServerFn } from '@tanstack/react-start';\n * import { createTracedServerFnFactory } from 'autotel-tanstack/server-functions';\n *\n * export const createServerFn = createTracedServerFnFactory(originalCreateServerFn);\n *\n * // Now all server functions created with createServerFn are automatically traced\n * export const getUser = createServerFn({ method: 'GET' })\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function createTracedServerFnFactory<\n TCreateServerFn extends (...args: any[]) => any,\n>(\n createServerFnOriginal: TCreateServerFn,\n defaultConfig: Omit<TraceServerFnConfig, 'name'> = {},\n): TCreateServerFn {\n return new Proxy(createServerFnOriginal, {\n apply(target, thisArg, argArray) {\n const result = Reflect.apply(target, thisArg, argArray);\n\n // If the result has a .handler method, wrap it\n if (\n result &&\n typeof result === 'object' &&\n 'handler' in result &&\n typeof result.handler === 'function'\n ) {\n const originalHandler = result.handler.bind(result);\n\n result.handler = function tracedHandler(handlerFn: unknown) {\n const wrappedHandler = originalHandler(handlerFn as never);\n\n // Try to infer function name from the handler\n const fnName = (handlerFn as { name?: string })?.name || 'serverFn';\n\n return traceServerFn(wrappedHandler, {\n ...defaultConfig,\n name: fnName,\n });\n };\n }\n\n return result;\n },\n }) as TCreateServerFn;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAgB,cACd,UACA,SAA8B,CAAC,GAC5B;CACH,MAAM,SAAS,OAAO,QAAQ,SAAS,QAAQ;CAC/C,MAAM,cAAc,OAAO,eAAe;CAC1C,MAAM,iBAAiB,OAAO,kBAAkB;CAEhD,OAAO,IAAI,MAAM,UAAU;EACzB,MAAM,QAAQ,SAAS,UAAU;GAI/B,IAAI,CAAC,aAAa,GAChB,OAAO,OAAO,MAAM,SAAS,QAAQ;GAGvC,OAAOA,QACL;IAAE,MAAM,qBAAqB;IAAU,SAAS;GAAY,GAC5D,YAAY;IACV,MAAM,MAAM,sBAAsB;IAClC,IAAI,cAAc;MACf,gBAAgB,aAAa;MAC7B,gBAAgB,aAAa;MAC7B,gBAAgB,gBAAgB;MAChC,gBAAgB,0BAA0B;IAC7C,CAAC;IAGD,IAAI,eAAe,SAAS,SAAS,GAAG;KACtC,MAAM,OAAO,SAAS;KACtB,IAAI,SAAS,QACX,IAAI;MACF,IAAI,aACF,gBAAgB,yBAChB,KAAK,UAAU,IAAI,CACrB;KACF,QAAQ;MACN,IAAI,aACF,gBAAgB,yBAChB,oBACF;KACF;IAEJ;IAEA,IAAI;KACF,MAAM,SAAS,MAAM,QAAQ,MAAM,QAAQ,SAAS,QAAQ;KAG5D,IAAI,kBAAkB,WAAW,QAC/B,IAAI;MACF,IAAI,aACF,gBAAgB,2BAChB,KAAK,UAAU,MAAM,CACvB;KACF,QAAQ;MACN,IAAI,aACF,gBAAgB,2BAChB,oBACF;KACF;KAGF,IAAI,UAAU,EAAE,MAAM,eAAe,GAAG,CAAC;KACzC,OAAO;IACT,SAAS,OAAO;KACd,IAAI,oBAAoB,KAAK,GAAG;MAC9B,IAAI,UAAU,EAAE,MAAM,eAAe,GAAG,CAAC;MACzC,MAAM;KACR;KACA,IAAI,iBAAiB,OAAO,OAAO,IAAI,gBAAgB,YACrD,IAAI,YAAY,KAAK;UAChB,IACL,qBAAqB,OACrB,OAAO,IAAI,oBAAoB,YAE/B,IAAI,gBAAgB,KAAK;KAE3B,MAAM;IACR;GACF,CACF,CAAC,CAAC;EACJ;EAEA,IAAI,QAAQ,MAAM,UAAU;GAC1B,OAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;EAC3C;CACF,CAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,4BAGd,wBACA,gBAAmD,CAAC,GACnC;CACjB,OAAO,IAAI,MAAM,wBAAwB,EACvC,MAAM,QAAQ,SAAS,UAAU;EAC/B,MAAM,SAAS,QAAQ,MAAM,QAAQ,SAAS,QAAQ;EAGtD,IACE,UACA,OAAO,WAAW,YAClB,aAAa,UACb,OAAO,OAAO,YAAY,YAC1B;GACA,MAAM,kBAAkB,OAAO,QAAQ,KAAK,MAAM;GAElD,OAAO,UAAU,SAAS,cAAc,WAAoB;IAC1D,MAAM,iBAAiB,gBAAgB,SAAkB;IAGzD,MAAM,SAAU,WAAiC,QAAQ;IAEzD,OAAO,cAAc,gBAAgB;KACnC,GAAG;KACH,MAAM;IACR,CAAC;GACH;EACF;EAEA,OAAO;CACT,EACF,CAAC;AACH"}
|
package/dist/testing.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","names":[],"sources":["../../../node_modules/.pnpm/@opentelemetry+resources@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/build/src/types.d.ts","../../../node_modules/.pnpm/@opentelemetry+resources@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/build/src/Resource.d.ts","../../../node_modules/.pnpm/@opentelemetry+core@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/build/src/common/types.d.ts","../../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/TimedEvent.d.ts","../../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/export/ReadableSpan.d.ts","../src/testing.ts"],"x_google_ignoreList":[0,1,2,3,4],"mappings":";;KA+BY,aAAa,KAAK,IAAI,QAAQ;KAC9B,gCAER,aAAa;;;;;;;;;;;;;UCtBA;;;;;;;WAOJ;;;;WAIA,YAAY;;;;WAIZ;;;;;;EAMT,2BAA2B;;;;;;;;;EAS3B,MAAM,OAAO,kBAAkB;EAC/B,oBAAoB;;;;;;;;;UC5BP;WACJ;WACA;WACA;;;;;;;;UCbI;EACb,MAAM;;EAEN;;EAEA,aAAa;;EAEb;;;;UCRa;WACJ;WACA,MAAM;WACN,mBAAmB;WACnB,oBAAoB;WACpB,WAAW;WACX,SAAS;WACT,QAAQ;WACR,YAAY;WACZ,OAAO;WACP,QAAQ;WACR,UAAU;WACV;WACA,UAAU;WACV,sBAAsB;WACtB;WACA;WACA;;;;;;;;;;UCVI;;;;EAIf;IACE,oBAAoB;IACpB;;;;;EAMF,YAAY;;;;EAKZ,eAAe,eAAe,SAAS;;;;EAKvC,eACE,yDACC;;;;EAKH;;;;EAKA,iBAAiB,eAAe;;;;EAKhC,uBACE,eAAe,QACf,cACA;;;;EAMF,qBAAqB;;;;EAKrB,mBAAmB;;;;EAKnB,uBAAuB;;;;EAKvB,oBAAoB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCtB,qBAAqB;;;;;;;;;;;;;iBA8GrB,kBACd,gBACA,cACA;EACE,UAAU;EACV;EACA;IAED;;;;;;;;;;;;;;iBA2Ba,oBAAoB,kBAAkB;;;;;;;;KAyB1C;EACV;EACA;EACA;EACA;EACA,aAAa;EACb;IAAU;IAAc;;EACxB;;;;;;KA4CG,eAAe;EAAY,SAAS;;KAGpC,mBAAmB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyC1B,qBACd,iBAAiB,iBACjB;iBAUc;EACd,MAAM,OAAO,iBAAiB;EAC9B,SAAS,OAAO,iBAAiB"}
|