autotel-tanstack 1.13.30 → 1.13.32
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 +8 -35
- package/dist/auto.d.ts.map +1 -0
- package/dist/auto.js +41 -22
- package/dist/auto.js.map +1 -1
- package/dist/browser/context.d.ts +50 -0
- package/dist/browser/context.d.ts.map +1 -0
- package/dist/browser/context.js +54 -2
- package/dist/browser/context.js.map +1 -1
- package/dist/browser/debug-headers.d.ts +10 -0
- package/dist/browser/debug-headers.d.ts.map +1 -0
- package/dist/browser/debug-headers.js +12 -2
- package/dist/browser/debug-headers.js.map +1 -1
- package/dist/browser/error-reporting.d.ts +39 -0
- package/dist/browser/error-reporting.d.ts.map +1 -0
- package/dist/browser/error-reporting.js +35 -2
- package/dist/browser/error-reporting.js.map +1 -1
- package/dist/browser/handlers.d.ts +14 -0
- package/dist/browser/handlers.d.ts.map +1 -0
- package/dist/browser/handlers.js +10 -2
- package/dist/browser/handlers.js.map +1 -1
- package/dist/browser/index.d.ts +11 -0
- package/dist/browser/index.js +12 -12
- package/dist/browser/loaders.d.ts +31 -0
- package/dist/browser/loaders.d.ts.map +1 -0
- package/dist/browser/loaders.js +29 -2
- package/dist/browser/loaders.js.map +1 -1
- package/dist/browser/metrics.d.ts +56 -0
- package/dist/browser/metrics.d.ts.map +1 -0
- package/dist/browser/metrics.js +48 -2
- package/dist/browser/metrics.js.map +1 -1
- package/dist/browser/middleware.d.ts +42 -0
- package/dist/browser/middleware.d.ts.map +1 -0
- package/dist/browser/middleware.js +36 -2
- package/dist/browser/middleware.js.map +1 -1
- package/dist/browser/server-functions.d.ts +14 -0
- package/dist/browser/server-functions.d.ts.map +1 -0
- package/dist/browser/server-functions.js +16 -2
- package/dist/browser/server-functions.js.map +1 -1
- package/dist/browser/testing.d.ts +85 -0
- package/dist/browser/testing.d.ts.map +1 -0
- package/dist/browser/testing.js +43 -2
- package/dist/browser/testing.js.map +1 -1
- package/dist/browser/types.d.ts +2 -0
- package/dist/browser/types.js +37 -2
- package/dist/browser/types.js.map +1 -1
- package/dist/context.d.ts +5 -3
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +112 -3
- package/dist/context.js.map +1 -1
- package/dist/debug-headers.d.ts +14 -14
- package/dist/debug-headers.d.ts.map +1 -0
- package/dist/debug-headers.js +62 -4
- package/dist/debug-headers.js.map +1 -1
- package/dist/env-BpFWNnpL.js +30 -0
- package/dist/env-BpFWNnpL.js.map +1 -0
- package/dist/error-reporting.d.ts +37 -37
- package/dist/error-reporting.d.ts.map +1 -0
- package/dist/error-reporting.js +154 -3
- package/dist/error-reporting.js.map +1 -1
- package/dist/handlers.d.ts +5 -4
- package/dist/handlers.d.ts.map +1 -0
- package/dist/handlers.js +192 -6
- package/dist/handlers.js.map +1 -1
- package/dist/index.d.ts +15 -16
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -16
- package/dist/instrument-DS7YCE1R.d.ts +10 -0
- package/dist/instrument-DS7YCE1R.d.ts.map +1 -0
- package/dist/instrument-DdLlMfRi.js +80 -0
- package/dist/instrument-DdLlMfRi.js.map +1 -0
- package/dist/loaders-DrVVY25K.d.ts +2402 -0
- package/dist/loaders-DrVVY25K.d.ts.map +1 -0
- package/dist/loaders.d.ts +2 -116
- package/dist/loaders.js +234 -5
- package/dist/loaders.js.map +1 -1
- package/dist/metrics.d.ts +39 -39
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +144 -3
- package/dist/metrics.js.map +1 -1
- package/dist/middleware.d.ts +16 -15
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +290 -7
- package/dist/middleware.js.map +1 -1
- package/dist/route-filter-dLg-j3jR.js +33 -0
- package/dist/route-filter-dLg-j3jR.js.map +1 -0
- package/dist/server-functions.d.ts +4 -3
- package/dist/server-functions.d.ts.map +1 -0
- package/dist/server-functions.js +133 -5
- package/dist/server-functions.js.map +1 -1
- package/dist/testing.d.ts +164 -65
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +212 -147
- package/dist/testing.js.map +1 -1
- package/dist/types-BJ7FyVoX.d.ts +87 -0
- package/dist/types-BJ7FyVoX.d.ts.map +1 -0
- package/dist/types-BrccP0yX.js +38 -0
- package/dist/types-BrccP0yX.js.map +1 -0
- package/dist/types-pQgmQa4j.d.ts +154 -0
- package/dist/types-pQgmQa4j.d.ts.map +1 -0
- package/package.json +7 -7
- package/dist/browser/index.js.map +0 -1
- package/dist/chunk-7OXOAS64.js +0 -41
- package/dist/chunk-7OXOAS64.js.map +0 -1
- package/dist/chunk-A7WMQ2BC.js +0 -25
- package/dist/chunk-A7WMQ2BC.js.map +0 -1
- package/dist/chunk-CCME55EK.js +0 -28
- package/dist/chunk-CCME55EK.js.map +0 -1
- package/dist/chunk-CSFIPJC2.js +0 -11
- package/dist/chunk-CSFIPJC2.js.map +0 -1
- package/dist/chunk-DTZCOB4W.js +0 -32
- package/dist/chunk-DTZCOB4W.js.map +0 -1
- package/dist/chunk-EFSKEYDJ.js +0 -20
- package/dist/chunk-EFSKEYDJ.js.map +0 -1
- package/dist/chunk-EGRHWZRV.js +0 -3
- package/dist/chunk-EGRHWZRV.js.map +0 -1
- package/dist/chunk-ESU66L3L.js +0 -92
- package/dist/chunk-ESU66L3L.js.map +0 -1
- package/dist/chunk-EUYFVNYE.js +0 -16
- package/dist/chunk-EUYFVNYE.js.map +0 -1
- package/dist/chunk-FFQ4FJKE.js +0 -185
- package/dist/chunk-FFQ4FJKE.js.map +0 -1
- package/dist/chunk-G526TOMY.js +0 -96
- package/dist/chunk-G526TOMY.js.map +0 -1
- package/dist/chunk-I4LX3LOG.js +0 -35
- package/dist/chunk-I4LX3LOG.js.map +0 -1
- package/dist/chunk-JXO7H6KO.js +0 -10
- package/dist/chunk-JXO7H6KO.js.map +0 -1
- package/dist/chunk-KPXGFKPU.js +0 -193
- package/dist/chunk-KPXGFKPU.js.map +0 -1
- package/dist/chunk-LRA2UVVS.js +0 -210
- package/dist/chunk-LRA2UVVS.js.map +0 -1
- package/dist/chunk-MFYOV2SF.js +0 -32
- package/dist/chunk-MFYOV2SF.js.map +0 -1
- package/dist/chunk-MNP65ZX7.js +0 -21
- package/dist/chunk-MNP65ZX7.js.map +0 -1
- package/dist/chunk-NTY64BKS.js +0 -38
- package/dist/chunk-NTY64BKS.js.map +0 -1
- package/dist/chunk-UMEJU65Q.js +0 -34
- package/dist/chunk-UMEJU65Q.js.map +0 -1
- package/dist/chunk-UTPW3QRT.js +0 -52
- package/dist/chunk-UTPW3QRT.js.map +0 -1
- package/dist/chunk-V3RO5N2M.js +0 -8
- package/dist/chunk-V3RO5N2M.js.map +0 -1
- package/dist/chunk-XXBHZR3M.js +0 -99
- package/dist/chunk-XXBHZR3M.js.map +0 -1
- package/dist/chunk-YQYYPJCK.js +0 -37
- package/dist/chunk-YQYYPJCK.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/instrument-DRR7VL63.d.ts +0 -46
- package/dist/types-m5OjZJ-4.d.ts +0 -152
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Attributes } from "@opentelemetry/api";
|
|
2
|
+
|
|
3
|
+
//#region src/types.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Configuration options for TanStack Start instrumentation
|
|
6
|
+
*/
|
|
7
|
+
interface TanStackInstrumentationConfig {
|
|
8
|
+
/**
|
|
9
|
+
* Service name for spans
|
|
10
|
+
* @default process.env.OTEL_SERVICE_NAME || 'tanstack-start'
|
|
11
|
+
*/
|
|
12
|
+
service?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Whether to capture function arguments as span attributes
|
|
15
|
+
* Warning: May contain PII, review before enabling in production
|
|
16
|
+
* @default true
|
|
17
|
+
*/
|
|
18
|
+
captureArgs?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Whether to capture function results as span attributes
|
|
21
|
+
* Warning: May contain PII, disable in production
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
captureResults?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Whether to capture errors and record exceptions
|
|
27
|
+
* @default true
|
|
28
|
+
*/
|
|
29
|
+
captureErrors?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* HTTP headers to capture as span attributes
|
|
32
|
+
* @default ['x-request-id']
|
|
33
|
+
*/
|
|
34
|
+
captureHeaders?: string[];
|
|
35
|
+
/**
|
|
36
|
+
* URL paths to exclude from tracing (glob patterns)
|
|
37
|
+
* @default []
|
|
38
|
+
*/
|
|
39
|
+
excludePaths?: (string | RegExp)[];
|
|
40
|
+
/**
|
|
41
|
+
* Sampling strategy
|
|
42
|
+
* - 'always': Sample all requests (100%)
|
|
43
|
+
* - 'adaptive': Use autotel's adaptive sampling (errors + slow = 100%, baseline 10%)
|
|
44
|
+
* - 'never': Disable sampling (for testing/debugging)
|
|
45
|
+
* @default 'adaptive'
|
|
46
|
+
*/
|
|
47
|
+
sampling?: 'always' | 'adaptive' | 'never';
|
|
48
|
+
/**
|
|
49
|
+
* Custom function to extract additional span attributes
|
|
50
|
+
*/
|
|
51
|
+
customAttributes?: (context: {
|
|
52
|
+
type: 'request' | 'serverFn' | 'loader' | 'beforeLoad' | 'middleware';
|
|
53
|
+
name: string;
|
|
54
|
+
request?: Request;
|
|
55
|
+
args?: unknown;
|
|
56
|
+
result?: unknown;
|
|
57
|
+
}) => Attributes;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Configuration specific to tracing middleware
|
|
61
|
+
*/
|
|
62
|
+
interface TracingMiddlewareConfig extends TanStackInstrumentationConfig {
|
|
63
|
+
/**
|
|
64
|
+
* Type of middleware
|
|
65
|
+
* - 'request': For global request middleware (routes, SSR)
|
|
66
|
+
* - 'function': For server function middleware
|
|
67
|
+
* @default 'request'
|
|
68
|
+
*/
|
|
69
|
+
type?: 'request' | 'function';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Configuration for server function tracing
|
|
73
|
+
*/
|
|
74
|
+
interface TraceServerFnConfig {
|
|
75
|
+
/**
|
|
76
|
+
* Explicit name for the span
|
|
77
|
+
* If not provided, will attempt to infer from function name
|
|
78
|
+
*/
|
|
79
|
+
name?: string;
|
|
80
|
+
/**
|
|
81
|
+
* Whether to capture function arguments
|
|
82
|
+
* @default true
|
|
83
|
+
*/
|
|
84
|
+
captureArgs?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Whether to capture function results
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
captureResults?: boolean;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Configuration for loader tracing
|
|
93
|
+
*/
|
|
94
|
+
interface TraceLoaderConfig {
|
|
95
|
+
/**
|
|
96
|
+
* Explicit name for the span
|
|
97
|
+
* If not provided, will use route ID
|
|
98
|
+
*/
|
|
99
|
+
name?: string;
|
|
100
|
+
/**
|
|
101
|
+
* Whether to capture route params
|
|
102
|
+
* @default true
|
|
103
|
+
*/
|
|
104
|
+
captureParams?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Whether to capture loader result
|
|
107
|
+
* @default false
|
|
108
|
+
*/
|
|
109
|
+
captureResult?: boolean;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Configuration for handler wrapper
|
|
113
|
+
*/
|
|
114
|
+
interface WrapStartHandlerConfig extends TanStackInstrumentationConfig {
|
|
115
|
+
/**
|
|
116
|
+
* OTLP endpoint URL
|
|
117
|
+
* @default process.env.OTEL_EXPORTER_OTLP_ENDPOINT
|
|
118
|
+
*/
|
|
119
|
+
endpoint?: string;
|
|
120
|
+
/**
|
|
121
|
+
* OTLP headers (e.g., for authentication)
|
|
122
|
+
* @default parsed from process.env.OTEL_EXPORTER_OTLP_HEADERS
|
|
123
|
+
*/
|
|
124
|
+
headers?: Record<string, string>;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Default configuration values
|
|
128
|
+
*/
|
|
129
|
+
declare const DEFAULT_CONFIG: Required<Omit<TanStackInstrumentationConfig, 'customAttributes' | 'service'>>;
|
|
130
|
+
/**
|
|
131
|
+
* Span attribute keys following OpenTelemetry semantic conventions
|
|
132
|
+
*/
|
|
133
|
+
declare const SPAN_ATTRIBUTES: {
|
|
134
|
+
readonly HTTP_REQUEST_METHOD: "http.request.method";
|
|
135
|
+
readonly HTTP_RESPONSE_STATUS_CODE: "http.response.status_code";
|
|
136
|
+
readonly URL_PATH: "url.path";
|
|
137
|
+
readonly URL_QUERY: "url.query";
|
|
138
|
+
readonly URL_FULL: "url.full";
|
|
139
|
+
readonly RPC_SYSTEM: "rpc.system";
|
|
140
|
+
readonly RPC_METHOD: "rpc.method";
|
|
141
|
+
readonly TANSTACK_TYPE: "tanstack.type";
|
|
142
|
+
readonly TANSTACK_SERVER_FN_NAME: "tanstack.server_function.name";
|
|
143
|
+
readonly TANSTACK_SERVER_FN_METHOD: "tanstack.server_function.method";
|
|
144
|
+
readonly TANSTACK_SERVER_FN_ARGS: "tanstack.server_function.args";
|
|
145
|
+
readonly TANSTACK_SERVER_FN_RESULT: "tanstack.server_function.result";
|
|
146
|
+
readonly TANSTACK_LOADER_ROUTE_ID: "tanstack.loader.route_id";
|
|
147
|
+
readonly TANSTACK_LOADER_TYPE: "tanstack.loader.type";
|
|
148
|
+
readonly TANSTACK_LOADER_PARAMS: "tanstack.loader.params";
|
|
149
|
+
readonly TANSTACK_MIDDLEWARE_NAME: "tanstack.middleware.name";
|
|
150
|
+
readonly TANSTACK_REQUEST_DURATION_MS: "tanstack.request.duration_ms";
|
|
151
|
+
};
|
|
152
|
+
//#endregion
|
|
153
|
+
export { TraceServerFnConfig as a, TraceLoaderConfig as i, SPAN_ATTRIBUTES as n, TracingMiddlewareConfig as o, TanStackInstrumentationConfig as r, WrapStartHandlerConfig as s, DEFAULT_CONFIG as t };
|
|
154
|
+
//# sourceMappingURL=types-pQgmQa4j.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-pQgmQa4j.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;AAKA;UAAiB,6BAAA;;;;;EAKf,OAAA;EAoDgB;;;;;EA7ChB,WAAA;EAyBA;;;;;EAlBA,cAAA;EAmCE;;;;EA7BF,aAAA;EAgCM;;AAAU;AAMlB;EAhCE,cAAA;;;AAuCI;AAMN;EAvCE,YAAA,aAAyB,MAAA;;;;;;;AAwDX;EA/Cd,QAAA;EAqDgC;;;EAhDhC,gBAAA,IAAoB,OAAA;IAClB,IAAA;IACA,IAAA;IACA,OAAA,GAAU,OAAA;IACV,IAAA;IACA,MAAA;EAAA,MACI,UAAA;AAAA;;;;UAMS,uBAAA,SAAgC,6BAA6B;EAsElE;;AAAM;AAMlB;;;EArEE,IAAI;AAAA;;;;UAMW,mBAAA;EAgEf;;;AAAkC;EA3DlC,IAAA;EA+FQ;;;;EAzFR,WAAA;;;;;EAMA,cAAA;AAAA;;;;UAMe,iBAAA;;;;;EAKf,IAAA;;;;;EAMA,aAAA;;;;;EAMA,aAAA;AAAA;;;;UAMe,sBAAA,SAA+B,6BAA6B;;;;;EAK3E,QAAA;;;;;EAMA,OAAA,GAAU,MAAA;AAAA;;;;cAMC,cAAA,EAAgB,QAAA,CAC3B,IAAA,CAAK,6BAAA;;;;cAaM,eAAA;EAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "autotel-tanstack",
|
|
3
|
-
"version": "1.13.
|
|
3
|
+
"version": "1.13.32",
|
|
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",
|
|
@@ -120,9 +120,9 @@
|
|
|
120
120
|
"license": "MIT",
|
|
121
121
|
"dependencies": {
|
|
122
122
|
"@opentelemetry/api": "^1.9.1",
|
|
123
|
-
"autotel": "
|
|
124
|
-
"autotel-adapters": "0.3.
|
|
125
|
-
"autotel-edge": "3.16.
|
|
123
|
+
"autotel": "4.0.0",
|
|
124
|
+
"autotel-adapters": "0.3.10",
|
|
125
|
+
"autotel-edge": "3.16.15"
|
|
126
126
|
},
|
|
127
127
|
"peerDependencies": {
|
|
128
128
|
"@tanstack/react-start": "^1.168.25",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"@tanstack/react-router": "^1.170.15",
|
|
142
142
|
"@types/node": "^25.9.2",
|
|
143
143
|
"rimraf": "^6.1.3",
|
|
144
|
-
"
|
|
144
|
+
"tsdown": "^0.22.2",
|
|
145
145
|
"typescript": "^6.0.3",
|
|
146
146
|
"vitest": "^4.1.8",
|
|
147
147
|
"vitest-mock-extended": "^4.0.0"
|
|
@@ -156,8 +156,8 @@
|
|
|
156
156
|
},
|
|
157
157
|
"homepage": "https://github.com/jagreehal/autotel/tree/main/packages/autotel-tanstack#readme",
|
|
158
158
|
"scripts": {
|
|
159
|
-
"build": "
|
|
160
|
-
"dev": "
|
|
159
|
+
"build": "tsdown",
|
|
160
|
+
"dev": "tsdown --watch",
|
|
161
161
|
"lint": "eslint src/**/*.ts",
|
|
162
162
|
"lint:fix": "eslint src/**/*.ts --fix",
|
|
163
163
|
"format": "prettier --write .",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/chunk-7OXOAS64.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { isInitialized, init } from 'autotel';
|
|
2
|
-
import { InMemorySpanExporter } from 'autotel/exporters';
|
|
3
|
-
import { SimpleSpanProcessor } from 'autotel/processors';
|
|
4
|
-
|
|
5
|
-
// src/instrument.ts
|
|
6
|
-
var DEFAULT_SERVICE = "tanstack-start";
|
|
7
|
-
function resolveDebug(explicit, endpoint) {
|
|
8
|
-
if (explicit !== void 0) return explicit;
|
|
9
|
-
const env = process.env.AUTOTEL_DEBUG;
|
|
10
|
-
if (env === "pretty") return "pretty";
|
|
11
|
-
if (env === "true" || env === "1") return true;
|
|
12
|
-
if (env === "false" || env === "0") return false;
|
|
13
|
-
if (!endpoint && process.env.NODE_ENV === "development") return "pretty";
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
function instrument(options = {}) {
|
|
17
|
-
if (isInitialized()) return;
|
|
18
|
-
const service = options.service ?? process.env.OTEL_SERVICE_NAME ?? DEFAULT_SERVICE;
|
|
19
|
-
if (process.env.E2E === "1") {
|
|
20
|
-
const exporter = new InMemorySpanExporter();
|
|
21
|
-
globalThis.__testSpanExporter = exporter;
|
|
22
|
-
init({
|
|
23
|
-
service,
|
|
24
|
-
subscribers: options.subscribers,
|
|
25
|
-
spanProcessors: [
|
|
26
|
-
new SimpleSpanProcessor(exporter),
|
|
27
|
-
...options.spanProcessors ?? []
|
|
28
|
-
]
|
|
29
|
-
});
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
init({
|
|
33
|
-
...options,
|
|
34
|
-
service,
|
|
35
|
-
debug: resolveDebug(options.debug, options.endpoint)
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { instrument };
|
|
40
|
-
//# sourceMappingURL=chunk-7OXOAS64.js.map
|
|
41
|
-
//# sourceMappingURL=chunk-7OXOAS64.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/instrument.ts"],"names":[],"mappings":";;;;;AAgDA,IAAM,eAAA,GAAkB,gBAAA;AAOxB,SAAS,YAAA,CACP,UACA,QAAA,EACoB;AACpB,EAAA,IAAI,QAAA,KAAa,QAAW,OAAO,QAAA;AACnC,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,CAAI,aAAA;AACxB,EAAA,IAAI,GAAA,KAAQ,UAAU,OAAO,QAAA;AAC7B,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,GAAA,EAAK,OAAO,IAAA;AAC1C,EAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,GAAA,EAAK,OAAO,KAAA;AAC3C,EAAA,IAAI,CAAC,QAAA,IAAY,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,eAAe,OAAO,QAAA;AAChE,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,UAAA,CAAW,OAAA,GAA6B,EAAC,EAAS;AAGhE,EAAA,IAAI,eAAc,EAAG;AAErB,EAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,IAAI,iBAAA,IAAqB,eAAA;AAEtD,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAA,KAAQ,GAAA,EAAK;AAE3B,IAAA,MAAM,QAAA,GAAW,IAAI,oBAAA,EAAqB;AAC1C,IAAC,WAAuC,kBAAA,GAAqB,QAAA;AAC7D,IAAA,IAAA,CAAK;AAAA,MACH,OAAA;AAAA,MACA,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,cAAA,EAAgB;AAAA,QACd,IAAI,oBAAoB,QAAQ,CAAA;AAAA,QAChC,GAAI,OAAA,CAAQ,cAAA,IAAkB;AAAC;AACjC,KACD,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,IAAA,CAAK;AAAA,IACH,GAAG,OAAA;AAAA,IACH,OAAA;AAAA,IACA,KAAA,EAAO,YAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,QAAQ,QAAQ;AAAA,GACpD,CAAA;AACH","file":"chunk-7OXOAS64.js","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"]}
|
package/dist/chunk-A7WMQ2BC.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// src/browser/middleware.ts
|
|
2
|
-
function createTracingMiddleware(config) {
|
|
3
|
-
return async function noopMiddleware(opts) {
|
|
4
|
-
return opts.next();
|
|
5
|
-
};
|
|
6
|
-
}
|
|
7
|
-
function tracingMiddleware(config) {
|
|
8
|
-
return async function noopMiddleware(opts) {
|
|
9
|
-
return opts.next();
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
function functionTracingMiddleware(config) {
|
|
13
|
-
return async function noopMiddleware(opts) {
|
|
14
|
-
return opts.next();
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
function createTracingServerHandler(config) {
|
|
18
|
-
return async function noopHandler(opts) {
|
|
19
|
-
return opts.next();
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export { createTracingMiddleware, createTracingServerHandler, functionTracingMiddleware, tracingMiddleware };
|
|
24
|
-
//# sourceMappingURL=chunk-A7WMQ2BC.js.map
|
|
25
|
-
//# sourceMappingURL=chunk-A7WMQ2BC.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/browser/middleware.ts"],"names":[],"mappings":";AA6BO,SAAS,wBACd,MAAA,EAC6B;AAE7B,EAAA,OAAO,eAAe,eAAe,IAAA,EAAM;AACzC,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB,CAAA;AACF;AAKO,SAAS,kBACd,MAAA,EAC6B;AAE7B,EAAA,OAAO,eAAe,eAAe,IAAA,EAAM;AACzC,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB,CAAA;AACF;AAKO,SAAS,0BACd,MAAA,EAC6B;AAE7B,EAAA,OAAO,eAAe,eAAe,IAAA,EAAM;AACzC,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB,CAAA;AACF;AAKO,SAAS,2BACd,MAAA,EAKsB;AAEtB,EAAA,OAAO,eAAe,YAAY,IAAA,EAAM;AACtC,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB,CAAA;AACF","file":"chunk-A7WMQ2BC.js","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"]}
|
package/dist/chunk-CCME55EK.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { shouldInstrumentPath } from 'autotel-edge';
|
|
2
|
-
|
|
3
|
-
// src/route-filter.ts
|
|
4
|
-
function isExcludedPath(pathname, excludePaths) {
|
|
5
|
-
for (const pattern of excludePaths) {
|
|
6
|
-
if (pattern instanceof RegExp) {
|
|
7
|
-
if (pattern.test(pathname)) return true;
|
|
8
|
-
continue;
|
|
9
|
-
}
|
|
10
|
-
if (pattern.includes("*") || pattern.includes("?")) {
|
|
11
|
-
if (!shouldInstrumentPath(pathname, {
|
|
12
|
-
include: void 0,
|
|
13
|
-
exclude: [pattern]
|
|
14
|
-
})) {
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
continue;
|
|
18
|
-
}
|
|
19
|
-
if (pathname === pattern || pathname.startsWith(pattern)) {
|
|
20
|
-
return true;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export { isExcludedPath };
|
|
27
|
-
//# sourceMappingURL=chunk-CCME55EK.js.map
|
|
28
|
-
//# sourceMappingURL=chunk-CCME55EK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/route-filter.ts"],"names":[],"mappings":";;;AAWO,SAAS,cAAA,CACd,UACA,YAAA,EACS;AACT,EAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,IAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG,OAAO,IAAA;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,QAAA,CAAS,GAAG,KAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AAClD,MAAA,IACE,CAAC,qBAAqB,QAAA,EAAU;AAAA,QAC9B,OAAA,EAAS,MAAA;AAAA,QACT,OAAA,EAAS,CAAC,OAAO;AAAA,OAClB,CAAA,EACD;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,KAAa,OAAA,IAAW,QAAA,CAAS,UAAA,CAAW,OAAO,CAAA,EAAG;AACxD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT","file":"chunk-CCME55EK.js","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"]}
|
package/dist/chunk-CSFIPJC2.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// src/browser/server-functions.ts
|
|
2
|
-
function traceServerFn(serverFn, config) {
|
|
3
|
-
return serverFn;
|
|
4
|
-
}
|
|
5
|
-
function createTracedServerFnFactory(createServerFnOriginal, defaultConfig) {
|
|
6
|
-
return createServerFnOriginal;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export { createTracedServerFnFactory, traceServerFn };
|
|
10
|
-
//# sourceMappingURL=chunk-CSFIPJC2.js.map
|
|
11
|
-
//# sourceMappingURL=chunk-CSFIPJC2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/browser/server-functions.ts"],"names":[],"mappings":";AAYO,SAAS,aAAA,CAEd,UAAa,MAAA,EAAiC;AAE9C,EAAA,OAAO,QAAA;AACT;AAKO,SAAS,2BAAA,CAGd,wBACA,aAAA,EACiB;AAEjB,EAAA,OAAO,sBAAA;AACT","file":"chunk-CSFIPJC2.js","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"]}
|
package/dist/chunk-DTZCOB4W.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
// src/browser/context.ts
|
|
2
|
-
function extractContextFromRequest(_request) {
|
|
3
|
-
return {};
|
|
4
|
-
}
|
|
5
|
-
function injectContextToHeaders(headers, ctx) {
|
|
6
|
-
return headers;
|
|
7
|
-
}
|
|
8
|
-
function createTracedHeaders(existingHeaders, ctx) {
|
|
9
|
-
return new Headers(existingHeaders);
|
|
10
|
-
}
|
|
11
|
-
function runInContext(parentContext, fn) {
|
|
12
|
-
return fn();
|
|
13
|
-
}
|
|
14
|
-
function getActiveContext() {
|
|
15
|
-
return {};
|
|
16
|
-
}
|
|
17
|
-
function getTraceParent() {
|
|
18
|
-
return "";
|
|
19
|
-
}
|
|
20
|
-
function getTraceState() {
|
|
21
|
-
return "";
|
|
22
|
-
}
|
|
23
|
-
function getCurrentTraceId() {
|
|
24
|
-
return void 0;
|
|
25
|
-
}
|
|
26
|
-
function getCurrentSpanId() {
|
|
27
|
-
return void 0;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export { createTracedHeaders, extractContextFromRequest, getActiveContext, getCurrentSpanId, getCurrentTraceId, getTraceParent, getTraceState, injectContextToHeaders, runInContext };
|
|
31
|
-
//# sourceMappingURL=chunk-DTZCOB4W.js.map
|
|
32
|
-
//# sourceMappingURL=chunk-DTZCOB4W.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/browser/context.ts"],"names":[],"mappings":";AAkBO,SAAS,0BAA0B,QAAA,EAA4B;AAGpE,EAAA,OAAO,EAAC;AACV;AAKO,SAAS,sBAAA,CACd,SACA,GAAA,EACS;AAET,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,mBAAA,CACd,iBACA,GAAA,EACS;AAET,EAAA,OAAO,IAAI,QAAQ,eAAe,CAAA;AACpC;AAKO,SAAS,YAAA,CAAgB,eAAwB,EAAA,EAAgB;AAEtE,EAAA,OAAO,EAAA,EAAG;AACZ;AAKO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,OAAO,EAAC;AACV;AAKO,SAAS,cAAA,GAAyB;AACvC,EAAA,OAAO,EAAA;AACT;AAKO,SAAS,aAAA,GAAwB;AACtC,EAAA,OAAO,EAAA;AACT;AAKO,SAAS,iBAAA,GAAwC;AACtD,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,gBAAA,GAAuC;AACrD,EAAA,OAAO,MAAA;AACT","file":"chunk-DTZCOB4W.js","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\n | Record<string, string>\n | [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"]}
|
package/dist/chunk-EFSKEYDJ.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// src/browser/error-reporting.ts
|
|
2
|
-
function reportError(error, context) {
|
|
3
|
-
}
|
|
4
|
-
function getRecentErrors(limit) {
|
|
5
|
-
return [];
|
|
6
|
-
}
|
|
7
|
-
function clearErrors() {
|
|
8
|
-
}
|
|
9
|
-
function createErrorReportingHandler() {
|
|
10
|
-
return () => {
|
|
11
|
-
return Response.json({ errors: [], count: 0 });
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
function withErrorReporting(fn, context) {
|
|
15
|
-
return fn;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export { clearErrors, createErrorReportingHandler, getRecentErrors, reportError, withErrorReporting };
|
|
19
|
-
//# sourceMappingURL=chunk-EFSKEYDJ.js.map
|
|
20
|
-
//# sourceMappingURL=chunk-EFSKEYDJ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/browser/error-reporting.ts"],"names":[],"mappings":";AAoBO,SAAS,WAAA,CACd,OACA,OAAA,EACM;AAIR;AAKO,SAAS,gBAAgB,KAAA,EAA8B;AAE5D,EAAA,OAAO,EAAC;AACV;AAKO,SAAS,WAAA,GAAoB;AAEpC;AAKO,SAAS,2BAAA,GAA8C;AAC5D,EAAA,OAAO,MAAM;AACX,IAAA,OAAO,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,EAAC,EAAG,KAAA,EAAO,GAAG,CAAA;AAAA,EAC/C,CAAA;AACF;AAMO,SAAS,kBAAA,CACd,IACA,OAAA,EACG;AAEH,EAAA,OAAO,EAAA;AACT","file":"chunk-EFSKEYDJ.js","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"]}
|
package/dist/chunk-EGRHWZRV.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-EGRHWZRV.js"}
|
package/dist/chunk-ESU66L3L.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { isServerSide } from './chunk-EUYFVNYE.js';
|
|
2
|
-
import { SPAN_ATTRIBUTES } from './chunk-I4LX3LOG.js';
|
|
3
|
-
import { SpanStatusCode } from '@opentelemetry/api';
|
|
4
|
-
import { trace } from 'autotel';
|
|
5
|
-
|
|
6
|
-
function traceServerFn(serverFn, config = {}) {
|
|
7
|
-
const fnName = config.name || serverFn.name || "serverFn";
|
|
8
|
-
const captureArgs = config.captureArgs ?? true;
|
|
9
|
-
const captureResults = config.captureResults ?? false;
|
|
10
|
-
return new Proxy(serverFn, {
|
|
11
|
-
apply(target, thisArg, argArray) {
|
|
12
|
-
if (!isServerSide()) {
|
|
13
|
-
return target.apply(thisArg, argArray);
|
|
14
|
-
}
|
|
15
|
-
return trace(`tanstack.serverFn.${fnName}`, async (ctx) => {
|
|
16
|
-
ctx.setAttributes({
|
|
17
|
-
[SPAN_ATTRIBUTES.RPC_SYSTEM]: "tanstack-start",
|
|
18
|
-
[SPAN_ATTRIBUTES.RPC_METHOD]: fnName,
|
|
19
|
-
[SPAN_ATTRIBUTES.TANSTACK_TYPE]: "serverFn",
|
|
20
|
-
[SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_NAME]: fnName
|
|
21
|
-
});
|
|
22
|
-
if (captureArgs && argArray.length > 0) {
|
|
23
|
-
const args = argArray[0];
|
|
24
|
-
if (args !== void 0) {
|
|
25
|
-
try {
|
|
26
|
-
ctx.setAttribute(
|
|
27
|
-
SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS,
|
|
28
|
-
JSON.stringify(args)
|
|
29
|
-
);
|
|
30
|
-
} catch {
|
|
31
|
-
ctx.setAttribute(
|
|
32
|
-
SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS,
|
|
33
|
-
"[non-serializable]"
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
const result = await Reflect.apply(target, thisArg, argArray);
|
|
40
|
-
if (captureResults && result !== void 0) {
|
|
41
|
-
try {
|
|
42
|
-
ctx.setAttribute(
|
|
43
|
-
SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,
|
|
44
|
-
JSON.stringify(result)
|
|
45
|
-
);
|
|
46
|
-
} catch {
|
|
47
|
-
ctx.setAttribute(
|
|
48
|
-
SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,
|
|
49
|
-
"[non-serializable]"
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
ctx.setStatus({ code: SpanStatusCode.OK });
|
|
54
|
-
return result;
|
|
55
|
-
} catch (error) {
|
|
56
|
-
if ("recordError" in ctx && typeof ctx.recordError === "function") {
|
|
57
|
-
ctx.recordError(error);
|
|
58
|
-
} else if ("recordException" in ctx && typeof ctx.recordException === "function") {
|
|
59
|
-
ctx.recordException(error);
|
|
60
|
-
}
|
|
61
|
-
throw error;
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
},
|
|
65
|
-
get(target, prop, receiver) {
|
|
66
|
-
return Reflect.get(target, prop, receiver);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
function createTracedServerFnFactory(createServerFnOriginal, defaultConfig = {}) {
|
|
71
|
-
return new Proxy(createServerFnOriginal, {
|
|
72
|
-
apply(target, thisArg, argArray) {
|
|
73
|
-
const result = Reflect.apply(target, thisArg, argArray);
|
|
74
|
-
if (result && typeof result === "object" && "handler" in result && typeof result.handler === "function") {
|
|
75
|
-
const originalHandler = result.handler.bind(result);
|
|
76
|
-
result.handler = function tracedHandler(handlerFn) {
|
|
77
|
-
const wrappedHandler = originalHandler(handlerFn);
|
|
78
|
-
const fnName = handlerFn?.name || "serverFn";
|
|
79
|
-
return traceServerFn(wrappedHandler, {
|
|
80
|
-
...defaultConfig,
|
|
81
|
-
name: fnName
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export { createTracedServerFnFactory, traceServerFn };
|
|
91
|
-
//# sourceMappingURL=chunk-ESU66L3L.js.map
|
|
92
|
-
//# sourceMappingURL=chunk-ESU66L3L.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server-functions.ts"],"names":[],"mappings":"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","file":"chunk-ESU66L3L.js","sourcesContent":["import { SpanStatusCode } from '@opentelemetry/api';\nimport { trace, type TraceContext } from 'autotel';\nimport { isServerSide } from './env';\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(`tanstack.serverFn.${fnName}`, async (ctx: TraceContext) => {\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 ('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 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"]}
|
package/dist/chunk-EUYFVNYE.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// src/env.ts
|
|
2
|
-
function isBrowser() {
|
|
3
|
-
return typeof globalThis !== "undefined" && // @ts-expect-error - window may not exist in Node.js, that's the point
|
|
4
|
-
typeof globalThis.window !== "undefined" && // @ts-expect-error - document may not exist in Node.js, that's the point
|
|
5
|
-
typeof globalThis.document !== "undefined";
|
|
6
|
-
}
|
|
7
|
-
function isNode() {
|
|
8
|
-
return typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined";
|
|
9
|
-
}
|
|
10
|
-
function isServerSide() {
|
|
11
|
-
return isNode() && !isBrowser();
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export { isBrowser, isNode, isServerSide };
|
|
15
|
-
//# sourceMappingURL=chunk-EUYFVNYE.js.map
|
|
16
|
-
//# sourceMappingURL=chunk-EUYFVNYE.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/env.ts"],"names":[],"mappings":";AASO,SAAS,SAAA,GAAqB;AACnC,EAAA,OACE,OAAO,UAAA,KAAe,WAAA;AAAA,EAEtB,OAAO,WAAW,MAAA,KAAW,WAAA;AAAA,EAE7B,OAAO,WAAW,QAAA,KAAa,WAAA;AAEnC;AAKO,SAAS,MAAA,GAAkB;AAChC,EAAA,OACE,OAAO,OAAA,KAAY,WAAA,IACnB,OAAO,OAAA,CAAQ,aAAa,WAAA,IAC5B,OAAO,OAAA,CAAQ,QAAA,CAAS,IAAA,KAAS,WAAA;AAErC;AAOO,SAAS,YAAA,GAAwB;AAGtC,EAAA,OAAO,MAAA,EAAO,IAAK,CAAC,SAAA,EAAU;AAChC","file":"chunk-EUYFVNYE.js","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"]}
|