convex-tracer 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/client/_generated/_ignore.d.ts +1 -0
  2. package/dist/client/_generated/_ignore.d.ts.map +1 -0
  3. package/dist/client/_generated/_ignore.js +3 -0
  4. package/dist/client/_generated/_ignore.js.map +1 -0
  5. package/dist/client/helpers.d.ts +31 -0
  6. package/dist/client/helpers.js +186 -0
  7. package/dist/client/helpers.js.map +1 -0
  8. package/dist/client/tracer-api/index.d.ts +27 -0
  9. package/dist/client/tracer-api/index.js +177 -0
  10. package/dist/client/tracer-api/index.js.map +1 -0
  11. package/dist/client/tracer-api/types.d.ts +143 -0
  12. package/dist/client/tracer-api/types.js +2 -0
  13. package/dist/client/tracer-api/types.js.map +1 -0
  14. package/dist/client/types.d.ts +168 -0
  15. package/dist/client/types.js +2 -0
  16. package/dist/client/types.js.map +1 -0
  17. package/dist/component/_generated/api.d.ts +36 -0
  18. package/dist/component/_generated/api.js +31 -0
  19. package/dist/component/_generated/api.js.map +1 -0
  20. package/dist/component/_generated/dataModel.d.ts +46 -0
  21. package/dist/component/_generated/dataModel.js +11 -0
  22. package/dist/component/_generated/dataModel.js.map +1 -0
  23. package/dist/component/_generated/server.d.ts +121 -0
  24. package/dist/component/_generated/server.js +78 -0
  25. package/dist/component/_generated/server.js.map +1 -0
  26. package/dist/component/convex.config.d.ts +3 -0
  27. package/dist/component/convex.config.d.ts.map +1 -0
  28. package/dist/component/convex.config.js +3 -0
  29. package/dist/component/convex.config.js.map +1 -0
  30. package/dist/component/lib.d.ts +29 -29
  31. package/dist/component/schema.d.ts +17 -17
  32. package/dist/component/types.d.ts +93 -93
  33. package/dist/react/index.d.ts +6 -0
  34. package/dist/react/index.js +11 -0
  35. package/dist/react/index.js.map +1 -0
  36. package/dist/react/types.d.ts +8 -0
  37. package/dist/react/types.js +2 -0
  38. package/dist/react/types.js.map +1 -0
  39. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=_ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_ignore.d.ts","sourceRoot":"","sources":["../../../src/client/_generated/_ignore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // This is only here so convex-test can detect a _generated folder
3
+ //# sourceMappingURL=_ignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_ignore.js","sourceRoot":"","sources":["../../../src/client/_generated/_ignore.ts"],"names":[],"mappings":";AAAA,kEAAkE"}
@@ -0,0 +1,31 @@
1
+ import type { GenericDataModel } from "convex/server";
2
+ import type { ObjectType, PropertyValidators } from "convex/values";
3
+ import type { ComponentApi } from "../component/_generated/component";
4
+ import type { ArgsWithTraceContext, LogArgs, OptionalArgsObject, StrippedGenericFunctionContext, TraceContext, TracedFunctionOptions, TracedResult, TracerConfig, TracerHandler } from "./types";
5
+ export declare function extractTraceContext<Args extends Record<string, unknown>>(allArgs: ArgsWithTraceContext<Args>): {
6
+ existingContext?: TraceContext;
7
+ args: Args;
8
+ };
9
+ export declare function prepareLogArgs<Args extends PropertyValidators>(args: ObjectType<Args>, logArgs: LogArgs<Args>): unknown | undefined;
10
+ export declare function setupTraceContext(ctx: StrippedGenericFunctionContext<GenericDataModel>, component: ComponentApi, existingContext: TraceContext | undefined, startTime: number, functionName: string, sampleRate: number, retentionMinutes: number, preserveErrors: boolean, spanData: {
11
+ functionName?: string;
12
+ args?: unknown;
13
+ }): Promise<{
14
+ traceId: string;
15
+ spanId: string;
16
+ traceContext: TraceContext;
17
+ isRoot: boolean;
18
+ }>;
19
+ export declare function executeTracedHandler<Args extends PropertyValidators, Output, EnhancedCtx>(params: {
20
+ ctx: StrippedGenericFunctionContext<GenericDataModel>;
21
+ component: ComponentApi;
22
+ traceId: string;
23
+ spanId: string;
24
+ startTime: number;
25
+ config: TracedFunctionOptions<EnhancedCtx, Args, Output> & TracerConfig;
26
+ args: OptionalArgsObject<Args>;
27
+ handler: TracerHandler<EnhancedCtx, Args>;
28
+ enhancedCtx: EnhancedCtx;
29
+ isRoot: boolean;
30
+ }): Promise<TracedResult<Output>>;
31
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1,186 @@
1
+ import TracerAPI from "./tracer-api/index";
2
+ function pick(obj, keys) {
3
+ return Object.fromEntries(Object.entries(obj).filter(([k]) => keys.includes(k)));
4
+ }
5
+ async function getAuthUserId(ctx) {
6
+ const identity = await ctx.auth.getUserIdentity();
7
+ if (identity === null)
8
+ return "anonymous";
9
+ const [userId] = identity.subject.split("|");
10
+ return userId;
11
+ }
12
+ export function extractTraceContext(allArgs) {
13
+ const existingContext = allArgs.__traceContext;
14
+ const args = { ...allArgs };
15
+ delete args.__traceContext;
16
+ return { existingContext, args };
17
+ }
18
+ export function prepareLogArgs(args, logArgs) {
19
+ if (!logArgs)
20
+ return undefined;
21
+ if (logArgs === true)
22
+ return args;
23
+ if (Array.isArray(logArgs)) {
24
+ return pick(args, logArgs);
25
+ }
26
+ return undefined;
27
+ }
28
+ export async function setupTraceContext(ctx, component, existingContext, startTime, functionName, sampleRate, retentionMinutes, preserveErrors, spanData) {
29
+ if (existingContext?.traceId) {
30
+ const spanId = await ctx.runMutation(component.lib.createSpan, {
31
+ traceId: existingContext.traceId,
32
+ span: {
33
+ parentSpanId: existingContext.spanId,
34
+ spanName: functionName,
35
+ source: "backend",
36
+ startTime,
37
+ status: "pending",
38
+ functionName: spanData.functionName,
39
+ args: spanData.args,
40
+ },
41
+ });
42
+ return {
43
+ traceId: existingContext.traceId,
44
+ spanId,
45
+ traceContext: {
46
+ traceId: existingContext.traceId,
47
+ spanId,
48
+ sampleRate: existingContext.sampleRate,
49
+ retentionMinutes: existingContext.retentionMinutes,
50
+ preserveErrors: existingContext.preserveErrors,
51
+ },
52
+ isRoot: false,
53
+ };
54
+ }
55
+ const userId = await getAuthUserId(ctx);
56
+ const traceId = await ctx.runMutation(component.lib.createTrace, {
57
+ status: "pending",
58
+ sampleRate,
59
+ metadata: {},
60
+ source: "backend",
61
+ userId,
62
+ });
63
+ const spanId = await ctx.runMutation(component.lib.createSpan, {
64
+ traceId,
65
+ span: {
66
+ spanName: functionName,
67
+ source: "backend",
68
+ startTime: Date.now(),
69
+ status: "pending",
70
+ functionName: spanData.functionName,
71
+ args: spanData.args,
72
+ },
73
+ });
74
+ return {
75
+ traceId,
76
+ spanId,
77
+ traceContext: {
78
+ traceId,
79
+ spanId,
80
+ sampleRate,
81
+ retentionMinutes,
82
+ preserveErrors,
83
+ },
84
+ isRoot: true,
85
+ };
86
+ }
87
+ export async function executeTracedHandler(params) {
88
+ const { ctx, component, traceId, spanId, startTime, config, args, handler, enhancedCtx, isRoot, } = params;
89
+ const defaultConfig = enhancedCtx.tracer
90
+ .config;
91
+ try {
92
+ // Reject any functions that pass a traceId that doesn't exist
93
+ // These params can be passed from the frontend to break tracing
94
+ // Running a tracedFunction without passing ids will create a new trace
95
+ if (traceId) {
96
+ const traceExists = await ctx.runQuery(component.lib.verifyTrace, {
97
+ traceId,
98
+ });
99
+ if (!traceExists)
100
+ throw new Error("Cannot pass a traceId for a trace that doesn't exist");
101
+ }
102
+ // Reject any functions that pass a spanId that doesn't exist
103
+ // These params can be passed from the frontend to break tracing
104
+ if (spanId) {
105
+ const spanExists = await ctx.runQuery(component.lib.verifySpan, {
106
+ spanId,
107
+ });
108
+ if (!spanExists)
109
+ throw new Error("Cannot pass a spanId for a span that doesn't exist");
110
+ }
111
+ if (config.onStart) {
112
+ await config.onStart(enhancedCtx, args);
113
+ }
114
+ const result = await handler(enhancedCtx, args);
115
+ if (config.onSuccess) {
116
+ await config.onSuccess(enhancedCtx, args, result);
117
+ }
118
+ const now = Date.now();
119
+ await ctx
120
+ .runMutation(component.lib.completeSpan, {
121
+ spanId,
122
+ endTime: now,
123
+ duration: now - startTime,
124
+ status: "success",
125
+ result: config.logReturn ? result : undefined,
126
+ })
127
+ .catch((err) => console.error("[Tracer] Failed to complete span with success:", err));
128
+ if (isRoot) {
129
+ await ctx
130
+ .runMutation(component.lib.updateTraceStatus, {
131
+ traceId,
132
+ status: "success",
133
+ })
134
+ .catch((err) => console.error("[Tracer] Failed to update trace status:", err));
135
+ }
136
+ return { success: true, data: result, error: undefined };
137
+ }
138
+ catch (e) {
139
+ const error = e;
140
+ if (config.onError) {
141
+ await config.onError(enhancedCtx, args, error);
142
+ }
143
+ const preserveErrors = config.preserveErrors ?? defaultConfig.preserveErrors;
144
+ if (preserveErrors) {
145
+ const tracerAPI = new TracerAPI(ctx, component, traceId, spanId, config);
146
+ await tracerAPI.preserve();
147
+ }
148
+ await ctx
149
+ .runMutation(component.lib.completeSpan, {
150
+ spanId,
151
+ endTime: Date.now(),
152
+ duration: Date.now() - startTime,
153
+ status: "error",
154
+ error: error.message,
155
+ })
156
+ .catch((err) => console.error("[Tracer] Failed to complete span with error:", err));
157
+ if (isRoot) {
158
+ await ctx
159
+ .runMutation(component.lib.updateTraceStatus, {
160
+ traceId,
161
+ status: "error",
162
+ })
163
+ .catch((err) => console.error("[Tracer] Failed to update trace status:", err));
164
+ }
165
+ return { success: false, data: undefined, error: error.message };
166
+ }
167
+ finally {
168
+ const retMins = config.retentionMinutes ?? defaultConfig.retentionMinutes;
169
+ if (!retMins) {
170
+ console.error("[Tracer] retentionMinutes is not defined");
171
+ }
172
+ const sampleRate = config.sampleRate ?? defaultConfig.sampleRate;
173
+ if (!sampleRate) {
174
+ console.error("[Tracer] sampleRate is not defined");
175
+ }
176
+ else if (sampleRate && sampleRate < 1) {
177
+ const MINUTE = 60 * 1000;
178
+ const delayMins = retMins ?? 120;
179
+ const delay = delayMins * MINUTE;
180
+ await ctx.scheduler.runAfter(delay, component.lib.cleanupTrace, {
181
+ traceId,
182
+ });
183
+ }
184
+ }
185
+ }
186
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/client/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { GenericActionCtx, GenericDataModel, GenericMutationCtx } from "convex/server";
2
+ import type { ComponentApi } from "../../component/_generated/component";
3
+ import type { TracerConfig } from "../types";
4
+ import type { SpanAPI, TraceAPI } from "./types";
5
+ export default class TracingAPI implements TraceAPI {
6
+ private ctx;
7
+ private component;
8
+ private traceId;
9
+ private spanId;
10
+ private config;
11
+ constructor(ctx: GenericMutationCtx<GenericDataModel> | GenericActionCtx<GenericDataModel>, component: ComponentApi, traceId: string, spanId: string, config: TracerConfig);
12
+ private addLog;
13
+ getTraceId(): string;
14
+ getSpanId(): string;
15
+ info(message: string, metadata?: Record<string, any>): Promise<void>;
16
+ warn(message: string, metadata?: Record<string, any>): Promise<void>;
17
+ error(message: string, metadata?: Record<string, any>): Promise<void>;
18
+ preserve(): Promise<void>;
19
+ discard(): Promise<void>;
20
+ sample(sampleRate?: number): Promise<void>;
21
+ withSpan<T>(spanName: string, fn: (span: SpanAPI) => Promise<T>): Promise<T>;
22
+ updateMetadata(metadata: Record<string, any>): Promise<void>;
23
+ private createSpanAPI;
24
+ private createAndRunSpan;
25
+ private createNoOpSpanAPI;
26
+ }
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,177 @@
1
+ export default class TracingAPI {
2
+ ctx;
3
+ component;
4
+ traceId;
5
+ spanId;
6
+ config;
7
+ constructor(ctx, component, traceId, spanId, config) {
8
+ this.ctx = ctx;
9
+ this.component = component;
10
+ this.traceId = traceId;
11
+ this.spanId = spanId;
12
+ this.config = config;
13
+ }
14
+ async addLog(severity, message, metadata) {
15
+ await this.ctx
16
+ .runMutation(this.component.lib.addLog, {
17
+ spanId: this.spanId,
18
+ log: { timestamp: Date.now(), severity, message, metadata },
19
+ })
20
+ .catch((err) => console.error(`[Tracer] Failed to add ${severity} log:`, err));
21
+ }
22
+ getTraceId() {
23
+ return this.traceId;
24
+ }
25
+ getSpanId() {
26
+ return this.spanId;
27
+ }
28
+ async info(message, metadata) {
29
+ await this.addLog("info", message, metadata);
30
+ }
31
+ async warn(message, metadata) {
32
+ await this.addLog("warn", message, metadata);
33
+ }
34
+ async error(message, metadata) {
35
+ await this.addLog("error", message, metadata);
36
+ }
37
+ async preserve() {
38
+ await this.ctx
39
+ .runMutation(this.component.lib.updateTracePreserve, {
40
+ traceId: this.traceId,
41
+ preserve: true,
42
+ })
43
+ .catch((err) => console.error("[Tracer] Failed to preserve trace:", err));
44
+ }
45
+ async discard() {
46
+ await this.ctx
47
+ .runMutation(this.component.lib.updateTracePreserve, {
48
+ traceId: this.traceId,
49
+ preserve: false,
50
+ })
51
+ .catch((err) => console.error("[Tracer] Failed to discard trace:", err));
52
+ }
53
+ async sample(sampleRate) {
54
+ await this.ctx
55
+ .runMutation(this.component.lib.updateTracePreserve, {
56
+ traceId: this.traceId,
57
+ preserve: undefined,
58
+ sampleRate,
59
+ })
60
+ .catch((err) => console.error("[Tracer] Failed to reset trace sampling:", err));
61
+ }
62
+ async withSpan(spanName, fn) {
63
+ return await this.createAndRunSpan(this.spanId, spanName, fn);
64
+ }
65
+ async updateMetadata(metadata) {
66
+ await this.ctx
67
+ .runMutation(this.component.lib.updateSpanMetadata, {
68
+ spanId: this.spanId,
69
+ metadata,
70
+ })
71
+ .catch((err) => console.error("[Tracer] Failed to set metadata:", err));
72
+ }
73
+ createSpanAPI(spanId) {
74
+ return {
75
+ info: async (message, metadata) => {
76
+ await this.ctx
77
+ .runMutation(this.component.lib.addLog, {
78
+ spanId,
79
+ log: { timestamp: Date.now(), severity: "info", message, metadata },
80
+ })
81
+ .catch((err) => console.error("[Tracer] Failed to add info log to child span:", err));
82
+ },
83
+ warn: async (message, metadata) => {
84
+ await this.ctx
85
+ .runMutation(this.component.lib.addLog, {
86
+ spanId,
87
+ log: { timestamp: Date.now(), severity: "warn", message, metadata },
88
+ })
89
+ .catch((err) => console.error("[Tracer] Failed to add warn log to child span:", err));
90
+ },
91
+ error: async (message, metadata) => {
92
+ await this.ctx
93
+ .runMutation(this.component.lib.addLog, {
94
+ spanId,
95
+ log: {
96
+ timestamp: Date.now(),
97
+ severity: "error",
98
+ message,
99
+ metadata,
100
+ },
101
+ })
102
+ .catch((err) => console.error("[Tracer] Failed to add error log to child span:", err));
103
+ },
104
+ updateMetadata: async (metadata) => {
105
+ await this.ctx
106
+ .runMutation(this.component.lib.updateSpanMetadata, {
107
+ spanId,
108
+ metadata,
109
+ })
110
+ .catch((err) => console.error("[Tracer] Failed to set child span metadata:", err));
111
+ },
112
+ withSpan: async (spanName, fn) => {
113
+ return await this.createAndRunSpan(spanId, spanName, fn);
114
+ },
115
+ };
116
+ }
117
+ async createAndRunSpan(parentSpanId, spanName, fn) {
118
+ let childSpanId;
119
+ try {
120
+ childSpanId = await this.ctx.runMutation(this.component.lib.createSpan, {
121
+ traceId: this.traceId,
122
+ span: {
123
+ parentSpanId,
124
+ spanName,
125
+ source: "backend",
126
+ startTime: Date.now(),
127
+ status: "pending",
128
+ },
129
+ });
130
+ }
131
+ catch (err) {
132
+ console.error("[Tracer] Failed to create child span:", err);
133
+ return await fn(this.createNoOpSpanAPI());
134
+ }
135
+ const spanAPI = this.createSpanAPI(childSpanId);
136
+ const startTime = Date.now();
137
+ try {
138
+ const result = await fn(spanAPI);
139
+ await this.ctx
140
+ .runMutation(this.component.lib.completeSpan, {
141
+ spanId: childSpanId,
142
+ endTime: Date.now(),
143
+ duration: Date.now() - startTime,
144
+ status: "success",
145
+ })
146
+ .catch((err) => console.error("[Tracer] Failed to complete span:", err));
147
+ return result;
148
+ }
149
+ catch (error) {
150
+ await this.ctx
151
+ .runMutation(this.component.lib.completeSpan, {
152
+ spanId: childSpanId,
153
+ endTime: Date.now(),
154
+ duration: Date.now() - startTime,
155
+ status: "error",
156
+ error: error instanceof Error ? error.message : String(error),
157
+ })
158
+ .catch((err) => console.error("[Tracer] Failed to complete span with error:", err));
159
+ if (this.config.preserveErrors) {
160
+ await this.preserve();
161
+ }
162
+ throw error;
163
+ }
164
+ }
165
+ createNoOpSpanAPI() {
166
+ return {
167
+ info: async () => { },
168
+ warn: async () => { },
169
+ error: async () => { },
170
+ updateMetadata: async () => { },
171
+ withSpan: async () => {
172
+ return undefined;
173
+ },
174
+ };
175
+ }
176
+ }
177
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/tracer-api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ import { sourceValidator, statusValidator } from "../../component/schema";
2
+ export interface SpanAPI {
3
+ /**
4
+ * Adds an info log to the current span.
5
+ * @param {string} message - The message to log.
6
+ * @param {Record<string, any>} metadata - Optional metadata to include with the log.
7
+ * @returns {Promise<void>}
8
+ * @example
9
+ * ```ts
10
+ * ctx.tracer.info("User created", { userId: user._id });
11
+ * ```
12
+ */
13
+ info(message: string, metadata?: Record<string, any>): Promise<void>;
14
+ /**
15
+ * Adds a warning log to the current span.
16
+ * @param {string} message - The message to log.
17
+ * @param {Record<string, any>} metadata - Optional metadata to include with the log.
18
+ * @returns {Promise<void>}
19
+ * @example
20
+ * ```ts
21
+ * ctx.tracer.warn("User not found", { userId: user._id });
22
+ * ```
23
+ */
24
+ warn(message: string, metadata?: Record<string, any>): Promise<void>;
25
+ /**
26
+ * Adds an error log to the current span.
27
+ * @param {string} message - The message to log.
28
+ * @param {Record<string, any>} metadata - Optional metadata to include with the log.
29
+ * @returns {Promise<void>}
30
+ * @example
31
+ * ```ts
32
+ * ctx.tracer.error("User not found", { userId: user._id });
33
+ * ```
34
+ */
35
+ error(message: string, metadata?: Record<string, any>): Promise<void>;
36
+ /**
37
+ * Sets the metadata for the current span.
38
+ * @param {Record<string, any>} metadata - The metadata to set.
39
+ * @returns {Promise<void>}
40
+ * @example
41
+ * ```ts
42
+ * ctx.tracer.updateMetadata({ userId: user._id });
43
+ * ```
44
+ */
45
+ updateMetadata(metadata: Record<string, any>): Promise<void>;
46
+ /**
47
+ * Creates a new span within the current trace.
48
+ * @param {string} name - The name of the span.
49
+ * @param {(span: SpanAPI) => Promise<T>} fn - The function to run within the span.
50
+ * @returns {Promise<T>} The result of the function.
51
+ * @example
52
+ * ```ts
53
+ * const result = await span.withSpan("createPost", async (span) => {
54
+ * await span.info("Creating post");
55
+ * return await ctx.db.insert("posts", args);
56
+ * });
57
+ * ```
58
+ */
59
+ withSpan<T>(name: string, fn: (span: SpanAPI) => Promise<T>): Promise<T>;
60
+ }
61
+ export interface TraceAPI extends SpanAPI {
62
+ /**
63
+ * Preserves the current trace.
64
+ * This will prevent the trace from being discarded or sampled.
65
+ * @returns {Promise<void>}
66
+ * @example
67
+ * ```ts
68
+ * await ctx.tracer.preserve();
69
+ * ```
70
+ */
71
+ preserve(): Promise<void>;
72
+ /**
73
+ * Discards the current trace.
74
+ * This will prevent the trace from being preserved.
75
+ * @returns {Promise<void>}
76
+ * @example
77
+ * ```ts
78
+ * await ctx.tracer.discard();
79
+ * ```
80
+ */
81
+ discard(): Promise<void>;
82
+ /**
83
+ * Makes sure the current trace will get sampled.
84
+ * This will undo any preserve() or discard() calls.
85
+ * @param {number} sampleRate - The sample rate to use. (optional)
86
+ * @returns {Promise<void>}
87
+ * @example
88
+ * ```ts
89
+ * await ctx.tracer.sample();
90
+ * ```
91
+ */
92
+ sample(sampleRate?: number): Promise<void>;
93
+ /**
94
+ * Creates a new span within the current trace.
95
+ * @param {string} name - The name of the span.
96
+ * @param {(span: SpanAPI) => Promise<T>} fn - The function to run within the span.
97
+ * @returns {Promise<T>} The result of the function.
98
+ * @example
99
+ * ```ts
100
+ * const result = await ctx.tracer.withSpan("createPost", async (span) => {
101
+ * await span.info("Creating post");
102
+ * return await ctx.db.insert("posts", args);
103
+ * });
104
+ * ```
105
+ */
106
+ withSpan<T>(name: string, fn: (span: SpanAPI) => Promise<T>): Promise<T>;
107
+ /**
108
+ * The Trace ID of the current trace.
109
+ */
110
+ getTraceId(): string;
111
+ /**
112
+ * The Span ID of the current span.
113
+ */
114
+ getSpanId(): string;
115
+ }
116
+ export interface TracerAPI {
117
+ /**
118
+ * Creates a new trace in the database.
119
+ * @param {string} traceId - The ID of the trace to create.
120
+ * @param {"pending" | "success" | "error"} status - The status of the trace.
121
+ * @param {number} sampleRate - The sample rate for the trace.
122
+ * @param {any} metadata - The metadata for the trace.
123
+ * @param {typeof statusValidator.type} source - The source of the trace.
124
+ * @returns {Promise<string>} A promise that resolves to the ID of the created trace.
125
+ */
126
+ createTrace: (traceId: string, status: typeof statusValidator.type, sampleRate: number, metadata: any, source: typeof sourceValidator.type) => Promise<string>;
127
+ /**
128
+ * Updates the status of a trace.
129
+ * @param {string} traceId - The ID of the trace to update.
130
+ * @param {typeof statusValidator.type} status - The new status of the trace.
131
+ * @returns {Promise<void>} A promise that resolves when the trace is updated.
132
+ */
133
+ updateTraceStatus: (traceId: string, status: typeof statusValidator.type) => Promise<void>;
134
+ /**
135
+ * Updates the preserve flag of a trace.
136
+ * @param {string} traceId - The ID of the trace to update.
137
+ * @param {boolean | undefined} preserve - The new preserve flag of the trace.
138
+ * @returns {Promise<void>} A promise that resolves when the trace is updated.
139
+ */
140
+ updateTracePreserve: (traceId: string, preserve: boolean | undefined) => Promise<void>;
141
+ updateTraceMetadata: (traceId: string, metadata: any) => Promise<void>;
142
+ }
143
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ import { sourceValidator, statusValidator } from "../../component/schema";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/client/tracer-api/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}