autotel-edge 3.16.13 → 3.16.15
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/config-0FktBGyj.js +290 -0
- package/dist/config-0FktBGyj.js.map +1 -0
- package/dist/events.d.ts +42 -43
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +144 -137
- package/dist/events.js.map +1 -1
- package/dist/execution-logger-BWlya70r.d.ts +137 -0
- package/dist/execution-logger-BWlya70r.d.ts.map +1 -0
- package/dist/execution-logger-CoxSsBmU.js +247 -0
- package/dist/execution-logger-CoxSsBmU.js.map +1 -0
- package/dist/index.d.ts +192 -276
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +930 -1060
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +122 -136
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +783 -774
- package/dist/logger.js.map +1 -1
- package/dist/parse-error.d.ts +12 -10
- package/dist/parse-error.d.ts.map +1 -0
- package/dist/parse-error.js +55 -2
- package/dist/parse-error.js.map +1 -1
- package/dist/sampling.d.ts +51 -76
- package/dist/sampling.d.ts.map +1 -0
- package/dist/sampling.js +155 -90
- package/dist/sampling.js.map +1 -1
- package/dist/testing.d.ts +1 -2
- package/dist/testing.js +1 -3
- package/dist/types-HCbsjZzp.d.ts +214 -0
- package/dist/types-HCbsjZzp.d.ts.map +1 -0
- package/package.json +6 -6
- package/src/core/buffer.ts +4 -3
- package/src/core/provider.context.test.ts +55 -0
- package/src/core/provider.ts +18 -1
- package/binding.gyp +0 -9
- package/dist/chunk-AL7ZD64M.js +0 -291
- package/dist/chunk-AL7ZD64M.js.map +0 -1
- package/dist/chunk-INQQQVXN.js +0 -310
- package/dist/chunk-INQQQVXN.js.map +0 -1
- package/dist/chunk-M7Z4P5MC.js +0 -64
- package/dist/chunk-M7Z4P5MC.js.map +0 -1
- package/dist/execution-logger-77TRRoWn.d.ts +0 -84
- package/dist/testing.js.map +0 -1
- package/dist/types-uulICZo7.d.ts +0 -216
- package/index.js +0 -1
package/dist/events.js
CHANGED
|
@@ -1,157 +1,164 @@
|
|
|
1
|
-
import { getActiveConfig } from
|
|
2
|
-
import { trace } from
|
|
1
|
+
import { n as getActiveConfig } from "./config-0FktBGyj.js";
|
|
2
|
+
import { trace } from "@opentelemetry/api";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
//#region src/events/index.ts
|
|
5
|
+
const DEFAULT_SERVICE_NAME = "edge-service";
|
|
6
|
+
/**
|
|
7
|
+
* Extract a normalized event name from any EdgeEvent.
|
|
8
|
+
* Useful for subscribers that need to send events to events platforms.
|
|
9
|
+
*
|
|
10
|
+
* @deprecated Use `event.name` directly instead - it's now a property on all events.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const subscriber: EdgeSubscribersAdapter = async (event) => {
|
|
15
|
+
* await sendToEvents(event.name, event.attributes) // Use event.name directly
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
5
19
|
function getEventName(event) {
|
|
6
|
-
|
|
20
|
+
return event.name;
|
|
7
21
|
}
|
|
8
22
|
function isPromiseLike(value) {
|
|
9
|
-
|
|
23
|
+
return typeof value === "object" && value !== null && "then" in value;
|
|
10
24
|
}
|
|
11
25
|
function createBaseEvent(attributes, options) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return baseEvent;
|
|
26
|
+
const config = getActiveConfig();
|
|
27
|
+
const serviceName = options.service ?? config?.service.name ?? DEFAULT_SERVICE_NAME;
|
|
28
|
+
const baseAttributes = attributes ? { ...attributes } : {};
|
|
29
|
+
const baseEvent = {
|
|
30
|
+
service: serviceName,
|
|
31
|
+
timestamp: Date.now(),
|
|
32
|
+
attributes: baseAttributes
|
|
33
|
+
};
|
|
34
|
+
if (options.includeTraceContext ?? true) {
|
|
35
|
+
const spanContext = trace.getActiveSpan()?.spanContext();
|
|
36
|
+
if (spanContext) {
|
|
37
|
+
baseEvent.traceId = spanContext.traceId;
|
|
38
|
+
baseEvent.spanId = spanContext.spanId;
|
|
39
|
+
baseEvent.correlationId = spanContext.traceId.slice(0, 16);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return baseEvent;
|
|
30
43
|
}
|
|
31
44
|
function handleError(error, event, options) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
console.error("[autotel-edge] Subscribers transport failed", error, { event });
|
|
45
|
+
if (options.onError) try {
|
|
46
|
+
options.onError(error, event);
|
|
47
|
+
return;
|
|
48
|
+
} catch (handlerError) {
|
|
49
|
+
console.error("[autotel-edge] Subscribers onError handler failed", handlerError);
|
|
50
|
+
}
|
|
51
|
+
console.error("[autotel-edge] Subscribers transport failed", error, { event });
|
|
41
52
|
}
|
|
42
53
|
function deliverResult(result, event, delivery, waitUntil, createOptions) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const background = Promise.resolve(result).catch((error) => {
|
|
53
|
-
handleError(error, event, createOptions);
|
|
54
|
-
});
|
|
55
|
-
if (waitUntil) {
|
|
56
|
-
waitUntil(background);
|
|
57
|
-
}
|
|
58
|
-
return void 0;
|
|
54
|
+
if (!isPromiseLike(result)) return delivery === "await" ? Promise.resolve() : void 0;
|
|
55
|
+
if (delivery === "await") return Promise.resolve(result).catch((error) => {
|
|
56
|
+
handleError(error, event, createOptions);
|
|
57
|
+
throw error;
|
|
58
|
+
});
|
|
59
|
+
const background = Promise.resolve(result).catch((error) => {
|
|
60
|
+
handleError(error, event, createOptions);
|
|
61
|
+
});
|
|
62
|
+
if (waitUntil) waitUntil(background);
|
|
59
63
|
}
|
|
60
64
|
function createSubscribersInstance(options, bindings = {}) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
trackFunnelStep,
|
|
113
|
-
trackOutcome,
|
|
114
|
-
trackValue,
|
|
115
|
-
dispatch,
|
|
116
|
-
bind: (nextBindings) => createSubscribersInstance(options, { ...bindings, ...nextBindings })
|
|
117
|
-
};
|
|
65
|
+
const dispatch = (event, callOptions) => {
|
|
66
|
+
const delivery = callOptions?.delivery ?? bindings.delivery ?? options.delivery ?? "fire-and-forget";
|
|
67
|
+
const waitUntil = callOptions?.waitUntil ?? bindings.waitUntil ?? options.waitUntil;
|
|
68
|
+
return deliverResult(options.transport(event), event, delivery, waitUntil, options);
|
|
69
|
+
};
|
|
70
|
+
const trackEvent = (eventName, attributes, callOptions) => {
|
|
71
|
+
return dispatch({
|
|
72
|
+
...createBaseEvent(attributes, options),
|
|
73
|
+
type: "event",
|
|
74
|
+
event: eventName,
|
|
75
|
+
name: eventName
|
|
76
|
+
}, callOptions);
|
|
77
|
+
};
|
|
78
|
+
const trackFunnelStep = (funnel, status, attributes, callOptions) => {
|
|
79
|
+
return dispatch({
|
|
80
|
+
...createBaseEvent(attributes, options),
|
|
81
|
+
type: "funnel-step",
|
|
82
|
+
funnel,
|
|
83
|
+
status,
|
|
84
|
+
name: `funnel-step.${status}`
|
|
85
|
+
}, callOptions);
|
|
86
|
+
};
|
|
87
|
+
const trackOutcome = (operation, outcome, attributes, callOptions) => {
|
|
88
|
+
return dispatch({
|
|
89
|
+
...createBaseEvent(attributes, options),
|
|
90
|
+
type: "outcome",
|
|
91
|
+
operation,
|
|
92
|
+
outcome,
|
|
93
|
+
name: `outcome.${outcome}`
|
|
94
|
+
}, callOptions);
|
|
95
|
+
};
|
|
96
|
+
const trackValue = (metric, value, attributes, callOptions) => {
|
|
97
|
+
return dispatch({
|
|
98
|
+
...createBaseEvent(attributes, options),
|
|
99
|
+
type: "value",
|
|
100
|
+
metric,
|
|
101
|
+
value,
|
|
102
|
+
name: `value.${metric}`
|
|
103
|
+
}, callOptions);
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
trackEvent,
|
|
107
|
+
trackFunnelStep,
|
|
108
|
+
trackOutcome,
|
|
109
|
+
trackValue,
|
|
110
|
+
dispatch,
|
|
111
|
+
bind: (nextBindings) => createSubscribersInstance(options, {
|
|
112
|
+
...bindings,
|
|
113
|
+
...nextBindings
|
|
114
|
+
})
|
|
115
|
+
};
|
|
118
116
|
}
|
|
119
117
|
function createEdgeSubscribers(options) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
return createSubscribersInstance(options);
|
|
118
|
+
if (typeof options.transport !== "function") throw new TypeError("createEdgeSubscribers: options.transport is required");
|
|
119
|
+
return createSubscribersInstance(options);
|
|
124
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Get Subscribers instance from active config, bound to the current ExecutionContext.
|
|
123
|
+
* Returns null if Subscribers is not configured.
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* export default {
|
|
128
|
+
* async fetch(request, env, ctx) {
|
|
129
|
+
* const Subscribers = getEdgeSubscribers(ctx);
|
|
130
|
+
* if (Subscribers) {
|
|
131
|
+
* Subscribers.trackEvent('user.signup', { plan: 'pro' });
|
|
132
|
+
* }
|
|
133
|
+
* return new Response('ok');
|
|
134
|
+
* }
|
|
135
|
+
* }
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
125
138
|
function getEdgeSubscribers(ctx) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
};
|
|
148
|
-
return createEdgeSubscribers({
|
|
149
|
-
transport: combinedTransport,
|
|
150
|
-
service: config.service.name,
|
|
151
|
-
waitUntil: ctx ? (promise) => ctx.waitUntil(promise) : void 0
|
|
152
|
-
});
|
|
139
|
+
const config = getActiveConfig();
|
|
140
|
+
if (!config) return null;
|
|
141
|
+
const subscribers = config.subscribers ?? [];
|
|
142
|
+
if (subscribers.length === 0) return null;
|
|
143
|
+
const combinedTransport = async (event) => {
|
|
144
|
+
await Promise.all(subscribers.map(async (subscriber, index) => {
|
|
145
|
+
try {
|
|
146
|
+
await subscriber(event);
|
|
147
|
+
} catch (error) {
|
|
148
|
+
console.error("[autotel-edge] Subscribers subscriber failed", error, {
|
|
149
|
+
subscriberIndex: index,
|
|
150
|
+
eventType: event.type
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}));
|
|
154
|
+
};
|
|
155
|
+
return createEdgeSubscribers({
|
|
156
|
+
transport: combinedTransport,
|
|
157
|
+
service: config.service.name,
|
|
158
|
+
waitUntil: ctx ? (promise) => ctx.waitUntil(promise) : void 0
|
|
159
|
+
});
|
|
153
160
|
}
|
|
154
161
|
|
|
162
|
+
//#endregion
|
|
155
163
|
export { createEdgeSubscribers, getEdgeSubscribers, getEventName };
|
|
156
|
-
//# sourceMappingURL=events.js.map
|
|
157
164
|
//# sourceMappingURL=events.js.map
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/events/index.ts"],"names":[],"mappings":"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","file":"events.js","sourcesContent":["import { trace } from '@opentelemetry/api';\nimport { getActiveConfig } from '../core/config';\nimport type {\n OrPromise,\n EdgeEvent,\n FunnelStepStatus,\n OutcomeStatus,\n EdgeTrackEvent,\n EdgeFunnelStepEvent,\n EdgeOutcomeEvent,\n EdgeValueEvent,\n EdgeEventBase,\n} from '../types';\n\nexport type SubscriberDeliveryMode = 'fire-and-forget' | 'await';\n\n// Re-export event types for convenience\n\n\nexport type EdgeTransport = (event: EdgeEvent) => OrPromise<void>;\n\nexport interface EdgeDispatchOptions {\n delivery?: SubscriberDeliveryMode;\n waitUntil?: (promise: Promise<void>) => void;\n}\n\nexport interface CreateEdgeSubscribersOptions {\n /**\n * User-supplied transport invoked for every Subscribers event.\n * Implementations can call PostHog, Stripe, Zapier, Durable Objects, etc.\n */\n transport: EdgeTransport;\n /**\n * Optional service name used when no request config is active.\n * Defaults to the active instrumentation config's service name or \"edge-service\".\n */\n service?: string;\n /**\n * Default delivery behaviour for transport promises.\n * \"fire-and-forget\" (default) will not block the calling code.\n */\n delivery?: SubscriberDeliveryMode;\n /**\n * Default waitUntil handler (Cloudflare Workers, Vercel waitUntil).\n * Used when delivery === \"fire-and-forget\".\n */\n waitUntil?: (promise: Promise<void>) => void;\n /**\n * Optional error handler invoked when the transport rejects.\n */\n onError?: (error: unknown, event: EdgeEvent) => void;\n /**\n * Include OpenTelemetry trace/span identifiers in the payload. Default true.\n */\n includeTraceContext?: boolean;\n}\n\nexport interface EdgeSubscribers {\n trackEvent(\n event: string,\n attributes?: Record<string, unknown>,\n options?: EdgeDispatchOptions,\n ): OrPromise<void>;\n trackFunnelStep(\n funnel: string,\n status: FunnelStepStatus,\n attributes?: Record<string, unknown>,\n options?: EdgeDispatchOptions,\n ): OrPromise<void>;\n trackOutcome(\n operation: string,\n outcome: OutcomeStatus,\n attributes?: Record<string, unknown>,\n options?: EdgeDispatchOptions,\n ): OrPromise<void>;\n trackValue(\n metric: string,\n value: number,\n attributes?: Record<string, unknown>,\n options?: EdgeDispatchOptions,\n ): OrPromise<void>;\n dispatch(event: EdgeEvent, options?: EdgeDispatchOptions): OrPromise<void>;\n bind(options: EdgeDispatchOptions): EdgeSubscribers;\n}\n\nconst DEFAULT_SERVICE_NAME = 'edge-service';\n\n/**\n * Extract a normalized event name from any EdgeEvent.\n * Useful for subscribers that need to send events to events platforms.\n * \n * @deprecated Use `event.name` directly instead - it's now a property on all events.\n * \n * @example\n * ```typescript\n * const subscriber: EdgeSubscribersAdapter = async (event) => {\n * await sendToEvents(event.name, event.attributes) // Use event.name directly\n * }\n * ```\n */\nexport function getEventName(event: EdgeEvent): string {\n return event.name;\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<unknown> {\n return typeof value === 'object' && value !== null && 'then' in value;\n}\n\nfunction createBaseEvent(\n attributes: Record<string, unknown> | undefined,\n options: CreateEdgeSubscribersOptions,\n): Omit<EdgeEventBase, 'name'> {\n const config = getActiveConfig();\n // Prioritize explicit service override, then config service name, then default\n const serviceName = options.service ?? config?.service.name ?? DEFAULT_SERVICE_NAME;\n const baseAttributes = attributes ? { ...attributes } : {};\n\n const baseEvent: Omit<EdgeEventBase, 'name'> = {\n service: serviceName,\n timestamp: Date.now(),\n attributes: baseAttributes,\n };\n\n if (options.includeTraceContext ?? true) {\n const span = trace.getActiveSpan();\n const spanContext = span?.spanContext();\n if (spanContext) {\n baseEvent.traceId = spanContext.traceId;\n baseEvent.spanId = spanContext.spanId;\n baseEvent.correlationId = spanContext.traceId.slice(0, 16);\n }\n }\n\n return baseEvent;\n}\n\nfunction handleError(\n error: unknown,\n event: EdgeEvent,\n options: CreateEdgeSubscribersOptions,\n): void {\n if (options.onError) {\n try {\n options.onError(error, event);\n return;\n } catch (handlerError) {\n console.error('[autotel-edge] Subscribers onError handler failed', handlerError);\n }\n }\n\n console.error('[autotel-edge] Subscribers transport failed', error, { event });\n}\n\nfunction deliverResult(\n result: OrPromise<void>,\n event: EdgeEvent,\n delivery: SubscriberDeliveryMode,\n waitUntil: EdgeDispatchOptions['waitUntil'],\n createOptions: CreateEdgeSubscribersOptions,\n): OrPromise<void> {\n if (!isPromiseLike(result)) {\n return delivery === 'await' ? Promise.resolve() : undefined;\n }\n\n if (delivery === 'await') {\n return Promise.resolve(result).catch((error) => {\n handleError(error, event, createOptions);\n throw error;\n });\n }\n\n const background = Promise.resolve(result).catch((error) => {\n handleError(error, event, createOptions);\n });\n\n if (waitUntil) {\n waitUntil(background);\n } else {\n void background;\n }\n\n return undefined;\n}\n\nfunction createSubscribersInstance(\n options: CreateEdgeSubscribersOptions,\n bindings: EdgeDispatchOptions = {},\n): EdgeSubscribers {\n const dispatch = (\n event: EdgeEvent,\n callOptions?: EdgeDispatchOptions,\n ): OrPromise<void> => {\n const delivery =\n callOptions?.delivery ??\n bindings.delivery ??\n options.delivery ??\n ('fire-and-forget' as SubscriberDeliveryMode);\n const waitUntil = callOptions?.waitUntil ?? bindings.waitUntil ?? options.waitUntil;\n const result = options.transport(event);\n return deliverResult(result, event, delivery, waitUntil, options);\n };\n\n const trackEvent: EdgeSubscribers['trackEvent'] = (eventName, attributes, callOptions) => {\n const baseEvent = createBaseEvent(attributes, options);\n const event: EdgeTrackEvent = {\n ...baseEvent,\n type: 'event',\n event: eventName,\n name: eventName,\n } as EdgeTrackEvent;\n return dispatch(event, callOptions);\n };\n\n const trackFunnelStep: EdgeSubscribers['trackFunnelStep'] = (\n funnel,\n status,\n attributes,\n callOptions,\n ) => {\n const baseEvent = createBaseEvent(attributes, options);\n const event: EdgeFunnelStepEvent = {\n ...baseEvent,\n type: 'funnel-step',\n funnel,\n status,\n name: `funnel-step.${status}`,\n } as EdgeFunnelStepEvent;\n return dispatch(event, callOptions);\n };\n\n const trackOutcome: EdgeSubscribers['trackOutcome'] = (\n operation,\n outcome,\n attributes,\n callOptions,\n ) => {\n const baseEvent = createBaseEvent(attributes, options);\n const event: EdgeOutcomeEvent = {\n ...baseEvent,\n type: 'outcome',\n operation,\n outcome,\n name: `outcome.${outcome}`,\n } as EdgeOutcomeEvent;\n return dispatch(event, callOptions);\n };\n\n const trackValue: EdgeSubscribers['trackValue'] = (\n metric,\n value,\n attributes,\n callOptions,\n ) => {\n const baseEvent = createBaseEvent(attributes, options);\n const event: EdgeValueEvent = {\n ...baseEvent,\n type: 'value',\n metric,\n value,\n name: `value.${metric}`,\n } as EdgeValueEvent;\n return dispatch(event, callOptions);\n };\n\n return {\n trackEvent,\n trackFunnelStep,\n trackOutcome,\n trackValue,\n dispatch,\n bind: (nextBindings: EdgeDispatchOptions) =>\n createSubscribersInstance(options, { ...bindings, ...nextBindings }),\n };\n}\n\nexport function createEdgeSubscribers(options: CreateEdgeSubscribersOptions): EdgeSubscribers {\n if (typeof options.transport !== 'function') {\n throw new TypeError('createEdgeSubscribers: options.transport is required');\n }\n\n return createSubscribersInstance(options);\n}\n\n/**\n * Get Subscribers instance from active config, bound to the current ExecutionContext.\n * Returns null if Subscribers is not configured.\n *\n * @example\n * ```typescript\n * export default {\n * async fetch(request, env, ctx) {\n * const Subscribers = getEdgeSubscribers(ctx);\n * if (Subscribers) {\n * Subscribers.trackEvent('user.signup', { plan: 'pro' });\n * }\n * return new Response('ok');\n * }\n * }\n * ```\n */\nexport function getEdgeSubscribers(\n ctx?: { waitUntil(promise: Promise<any>): void },\n): EdgeSubscribers | null {\n const config = getActiveConfig();\n if (!config) {\n return null;\n }\n\n const subscribers = config.subscribers ?? [];\n if (subscribers.length === 0) {\n return null;\n }\n\n // Combine all subscribers into a single transport function\n const combinedTransport: EdgeTransport = async (event) => {\n await Promise.all(\n subscribers.map(async (subscriber, index) => {\n try {\n await subscriber(event);\n } catch (error) {\n console.error('[autotel-edge] Subscribers subscriber failed', error, {\n subscriberIndex: index,\n eventType: event.type,\n });\n }\n }),\n );\n };\n\n return createEdgeSubscribers({\n transport: combinedTransport,\n service: config.service.name,\n waitUntil: ctx ? (promise) => ctx.waitUntil(promise) : undefined,\n });\n}\n\n\nexport {type FunnelStepStatus, type OutcomeStatus, type EdgeEvent, type EdgeTrackEvent, type EdgeFunnelStepEvent, type EdgeOutcomeEvent, type EdgeValueEvent} from '../types';"]}
|
|
1
|
+
{"version":3,"file":"events.js","names":[],"sources":["../src/events/index.ts"],"sourcesContent":["import { trace } from '@opentelemetry/api';\nimport { getActiveConfig } from '../core/config';\nimport type {\n OrPromise,\n EdgeEvent,\n FunnelStepStatus,\n OutcomeStatus,\n EdgeTrackEvent,\n EdgeFunnelStepEvent,\n EdgeOutcomeEvent,\n EdgeValueEvent,\n EdgeEventBase,\n} from '../types';\n\nexport type SubscriberDeliveryMode = 'fire-and-forget' | 'await';\n\n// Re-export event types for convenience\n\n\nexport type EdgeTransport = (event: EdgeEvent) => OrPromise<void>;\n\nexport interface EdgeDispatchOptions {\n delivery?: SubscriberDeliveryMode;\n waitUntil?: (promise: Promise<void>) => void;\n}\n\nexport interface CreateEdgeSubscribersOptions {\n /**\n * User-supplied transport invoked for every Subscribers event.\n * Implementations can call PostHog, Stripe, Zapier, Durable Objects, etc.\n */\n transport: EdgeTransport;\n /**\n * Optional service name used when no request config is active.\n * Defaults to the active instrumentation config's service name or \"edge-service\".\n */\n service?: string;\n /**\n * Default delivery behaviour for transport promises.\n * \"fire-and-forget\" (default) will not block the calling code.\n */\n delivery?: SubscriberDeliveryMode;\n /**\n * Default waitUntil handler (Cloudflare Workers, Vercel waitUntil).\n * Used when delivery === \"fire-and-forget\".\n */\n waitUntil?: (promise: Promise<void>) => void;\n /**\n * Optional error handler invoked when the transport rejects.\n */\n onError?: (error: unknown, event: EdgeEvent) => void;\n /**\n * Include OpenTelemetry trace/span identifiers in the payload. Default true.\n */\n includeTraceContext?: boolean;\n}\n\nexport interface EdgeSubscribers {\n trackEvent(\n event: string,\n attributes?: Record<string, unknown>,\n options?: EdgeDispatchOptions,\n ): OrPromise<void>;\n trackFunnelStep(\n funnel: string,\n status: FunnelStepStatus,\n attributes?: Record<string, unknown>,\n options?: EdgeDispatchOptions,\n ): OrPromise<void>;\n trackOutcome(\n operation: string,\n outcome: OutcomeStatus,\n attributes?: Record<string, unknown>,\n options?: EdgeDispatchOptions,\n ): OrPromise<void>;\n trackValue(\n metric: string,\n value: number,\n attributes?: Record<string, unknown>,\n options?: EdgeDispatchOptions,\n ): OrPromise<void>;\n dispatch(event: EdgeEvent, options?: EdgeDispatchOptions): OrPromise<void>;\n bind(options: EdgeDispatchOptions): EdgeSubscribers;\n}\n\nconst DEFAULT_SERVICE_NAME = 'edge-service';\n\n/**\n * Extract a normalized event name from any EdgeEvent.\n * Useful for subscribers that need to send events to events platforms.\n * \n * @deprecated Use `event.name` directly instead - it's now a property on all events.\n * \n * @example\n * ```typescript\n * const subscriber: EdgeSubscribersAdapter = async (event) => {\n * await sendToEvents(event.name, event.attributes) // Use event.name directly\n * }\n * ```\n */\nexport function getEventName(event: EdgeEvent): string {\n return event.name;\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<unknown> {\n return typeof value === 'object' && value !== null && 'then' in value;\n}\n\nfunction createBaseEvent(\n attributes: Record<string, unknown> | undefined,\n options: CreateEdgeSubscribersOptions,\n): Omit<EdgeEventBase, 'name'> {\n const config = getActiveConfig();\n // Prioritize explicit service override, then config service name, then default\n const serviceName = options.service ?? config?.service.name ?? DEFAULT_SERVICE_NAME;\n const baseAttributes = attributes ? { ...attributes } : {};\n\n const baseEvent: Omit<EdgeEventBase, 'name'> = {\n service: serviceName,\n timestamp: Date.now(),\n attributes: baseAttributes,\n };\n\n if (options.includeTraceContext ?? true) {\n const span = trace.getActiveSpan();\n const spanContext = span?.spanContext();\n if (spanContext) {\n baseEvent.traceId = spanContext.traceId;\n baseEvent.spanId = spanContext.spanId;\n baseEvent.correlationId = spanContext.traceId.slice(0, 16);\n }\n }\n\n return baseEvent;\n}\n\nfunction handleError(\n error: unknown,\n event: EdgeEvent,\n options: CreateEdgeSubscribersOptions,\n): void {\n if (options.onError) {\n try {\n options.onError(error, event);\n return;\n } catch (handlerError) {\n console.error('[autotel-edge] Subscribers onError handler failed', handlerError);\n }\n }\n\n console.error('[autotel-edge] Subscribers transport failed', error, { event });\n}\n\nfunction deliverResult(\n result: OrPromise<void>,\n event: EdgeEvent,\n delivery: SubscriberDeliveryMode,\n waitUntil: EdgeDispatchOptions['waitUntil'],\n createOptions: CreateEdgeSubscribersOptions,\n): OrPromise<void> {\n if (!isPromiseLike(result)) {\n return delivery === 'await' ? Promise.resolve() : undefined;\n }\n\n if (delivery === 'await') {\n return Promise.resolve(result).catch((error) => {\n handleError(error, event, createOptions);\n throw error;\n });\n }\n\n const background = Promise.resolve(result).catch((error) => {\n handleError(error, event, createOptions);\n });\n\n if (waitUntil) {\n waitUntil(background);\n } else {\n void background;\n }\n\n return undefined;\n}\n\nfunction createSubscribersInstance(\n options: CreateEdgeSubscribersOptions,\n bindings: EdgeDispatchOptions = {},\n): EdgeSubscribers {\n const dispatch = (\n event: EdgeEvent,\n callOptions?: EdgeDispatchOptions,\n ): OrPromise<void> => {\n const delivery =\n callOptions?.delivery ??\n bindings.delivery ??\n options.delivery ??\n ('fire-and-forget' as SubscriberDeliveryMode);\n const waitUntil = callOptions?.waitUntil ?? bindings.waitUntil ?? options.waitUntil;\n const result = options.transport(event);\n return deliverResult(result, event, delivery, waitUntil, options);\n };\n\n const trackEvent: EdgeSubscribers['trackEvent'] = (eventName, attributes, callOptions) => {\n const baseEvent = createBaseEvent(attributes, options);\n const event: EdgeTrackEvent = {\n ...baseEvent,\n type: 'event',\n event: eventName,\n name: eventName,\n } as EdgeTrackEvent;\n return dispatch(event, callOptions);\n };\n\n const trackFunnelStep: EdgeSubscribers['trackFunnelStep'] = (\n funnel,\n status,\n attributes,\n callOptions,\n ) => {\n const baseEvent = createBaseEvent(attributes, options);\n const event: EdgeFunnelStepEvent = {\n ...baseEvent,\n type: 'funnel-step',\n funnel,\n status,\n name: `funnel-step.${status}`,\n } as EdgeFunnelStepEvent;\n return dispatch(event, callOptions);\n };\n\n const trackOutcome: EdgeSubscribers['trackOutcome'] = (\n operation,\n outcome,\n attributes,\n callOptions,\n ) => {\n const baseEvent = createBaseEvent(attributes, options);\n const event: EdgeOutcomeEvent = {\n ...baseEvent,\n type: 'outcome',\n operation,\n outcome,\n name: `outcome.${outcome}`,\n } as EdgeOutcomeEvent;\n return dispatch(event, callOptions);\n };\n\n const trackValue: EdgeSubscribers['trackValue'] = (\n metric,\n value,\n attributes,\n callOptions,\n ) => {\n const baseEvent = createBaseEvent(attributes, options);\n const event: EdgeValueEvent = {\n ...baseEvent,\n type: 'value',\n metric,\n value,\n name: `value.${metric}`,\n } as EdgeValueEvent;\n return dispatch(event, callOptions);\n };\n\n return {\n trackEvent,\n trackFunnelStep,\n trackOutcome,\n trackValue,\n dispatch,\n bind: (nextBindings: EdgeDispatchOptions) =>\n createSubscribersInstance(options, { ...bindings, ...nextBindings }),\n };\n}\n\nexport function createEdgeSubscribers(options: CreateEdgeSubscribersOptions): EdgeSubscribers {\n if (typeof options.transport !== 'function') {\n throw new TypeError('createEdgeSubscribers: options.transport is required');\n }\n\n return createSubscribersInstance(options);\n}\n\n/**\n * Get Subscribers instance from active config, bound to the current ExecutionContext.\n * Returns null if Subscribers is not configured.\n *\n * @example\n * ```typescript\n * export default {\n * async fetch(request, env, ctx) {\n * const Subscribers = getEdgeSubscribers(ctx);\n * if (Subscribers) {\n * Subscribers.trackEvent('user.signup', { plan: 'pro' });\n * }\n * return new Response('ok');\n * }\n * }\n * ```\n */\nexport function getEdgeSubscribers(\n ctx?: { waitUntil(promise: Promise<any>): void },\n): EdgeSubscribers | null {\n const config = getActiveConfig();\n if (!config) {\n return null;\n }\n\n const subscribers = config.subscribers ?? [];\n if (subscribers.length === 0) {\n return null;\n }\n\n // Combine all subscribers into a single transport function\n const combinedTransport: EdgeTransport = async (event) => {\n await Promise.all(\n subscribers.map(async (subscriber, index) => {\n try {\n await subscriber(event);\n } catch (error) {\n console.error('[autotel-edge] Subscribers subscriber failed', error, {\n subscriberIndex: index,\n eventType: event.type,\n });\n }\n }),\n );\n };\n\n return createEdgeSubscribers({\n transport: combinedTransport,\n service: config.service.name,\n waitUntil: ctx ? (promise) => ctx.waitUntil(promise) : undefined,\n });\n}\n\n\nexport {type FunnelStepStatus, type OutcomeStatus, type EdgeEvent, type EdgeTrackEvent, type EdgeFunnelStepEvent, type EdgeOutcomeEvent, type EdgeValueEvent} from '../types';"],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { AttributeValue, Link, Span, SpanStatusCode, TimeInput } from "@opentelemetry/api";
|
|
2
|
+
import { Sampler } from "@opentelemetry/sdk-trace-base";
|
|
3
|
+
|
|
4
|
+
//#region src/core/trace-context.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Base trace context containing trace identifiers
|
|
7
|
+
*/
|
|
8
|
+
interface TraceContextBase {
|
|
9
|
+
traceId: string;
|
|
10
|
+
spanId: string;
|
|
11
|
+
correlationId: string;
|
|
12
|
+
'code.function'?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Span methods available on trace context
|
|
16
|
+
*/
|
|
17
|
+
interface SpanMethods {
|
|
18
|
+
/** Set a single attribute on the span */
|
|
19
|
+
setAttribute(key: string, value: AttributeValue): void;
|
|
20
|
+
/** Set multiple attributes on the span */
|
|
21
|
+
setAttributes(attrs: Record<string, AttributeValue>): void;
|
|
22
|
+
/** Set the status of the span */
|
|
23
|
+
setStatus(status: {
|
|
24
|
+
code: SpanStatusCode;
|
|
25
|
+
message?: string;
|
|
26
|
+
}): void;
|
|
27
|
+
/** Record an exception on the span */
|
|
28
|
+
recordException(exception: Error, time?: TimeInput): void;
|
|
29
|
+
/** Add an event to the span (for logging milestones/checkpoints) */
|
|
30
|
+
addEvent(name: string, attributesOrStartTime?: Record<string, AttributeValue> | TimeInput, startTime?: TimeInput): void;
|
|
31
|
+
/** Add a link to another span */
|
|
32
|
+
addLink(link: Link): void;
|
|
33
|
+
/** Add multiple links to other spans */
|
|
34
|
+
addLinks(links: Link[]): void;
|
|
35
|
+
/** Update the span name dynamically */
|
|
36
|
+
updateName(name: string): void;
|
|
37
|
+
/** Check if the span is recording */
|
|
38
|
+
isRecording(): boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Complete trace context that merges base context and span methods
|
|
42
|
+
*
|
|
43
|
+
* This is the ctx parameter passed to factory functions in trace().
|
|
44
|
+
* It provides access to trace IDs and span manipulation methods.
|
|
45
|
+
*/
|
|
46
|
+
type TraceContext = TraceContextBase & SpanMethods;
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/functional.d.ts
|
|
49
|
+
type ExtractFunctionSignature<T> = T extends ((ctx: TraceContext) => infer F) ? F extends ((...args: infer Args) => infer Return) ? (...args: Args) => Return : never : never;
|
|
50
|
+
type WrappedFunction<TArgs extends any[], TReturn> = (...args: TArgs) => TReturn | Promise<TReturn>;
|
|
51
|
+
/**
|
|
52
|
+
* trace function options
|
|
53
|
+
*/
|
|
54
|
+
interface traceOptions<TArgs extends any[] = any[], TReturn = any> {
|
|
55
|
+
name?: string;
|
|
56
|
+
serviceName?: string;
|
|
57
|
+
sampler?: Sampler;
|
|
58
|
+
attributesFromArgs?: (args: TArgs) => Record<string, unknown>;
|
|
59
|
+
attributesFromResult?: (result: TReturn) => Record<string, unknown>;
|
|
60
|
+
attributes?: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
declare function trace$1<TReturn = any>(fn: () => TReturn): () => TReturn;
|
|
63
|
+
declare function trace$1<TArgs extends any[], TReturn = any>(fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
|
|
64
|
+
declare function trace$1<TReturn = any>(fnFactory: (ctx: TraceContext) => () => TReturn): () => TReturn;
|
|
65
|
+
declare function trace$1<TReturn = any>(fn: (ctx: TraceContext) => TReturn): TReturn;
|
|
66
|
+
declare function trace$1<TFactory extends (ctx: TraceContext) => (...args: any[]) => any>(fnFactory: TFactory): ExtractFunctionSignature<TFactory>;
|
|
67
|
+
declare function trace$1<TArgs extends any[], TReturn = any>(fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
|
|
68
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(name: string, fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
|
|
69
|
+
declare function trace$1<TReturn = any>(name: string, fn: (ctx: TraceContext) => TReturn): TReturn;
|
|
70
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(name: string, fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
|
|
71
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(options: traceOptions<TArgs, TReturn>, fn: (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
|
|
72
|
+
declare function trace$1<TReturn = any>(options: traceOptions<[], TReturn>, fn: (ctx: TraceContext) => TReturn): TReturn;
|
|
73
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(options: traceOptions<TArgs, TReturn>, fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn): (...args: TArgs) => TReturn;
|
|
74
|
+
declare function trace$1<TReturn = any>(fn: () => Promise<TReturn>): () => Promise<TReturn>;
|
|
75
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(fn: (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
|
|
76
|
+
declare function trace$1<TReturn = any>(fn: (ctx: TraceContext) => Promise<TReturn>): Promise<TReturn>;
|
|
77
|
+
declare function trace$1<TReturn = any>(fnFactory: (ctx: TraceContext) => () => Promise<TReturn>): () => Promise<TReturn>;
|
|
78
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
|
|
79
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(name: string, fn: (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
|
|
80
|
+
declare function trace$1<TReturn = any>(name: string, fn: (ctx: TraceContext) => Promise<TReturn>): Promise<TReturn>;
|
|
81
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(name: string, fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
|
|
82
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(options: traceOptions<TArgs, TReturn>, fn: (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
|
|
83
|
+
declare function trace$1<TReturn = any>(options: traceOptions<[], TReturn>, fn: (ctx: TraceContext) => Promise<TReturn>): Promise<TReturn>;
|
|
84
|
+
declare function trace$1<TArgs extends any[] = any[], TReturn = any>(options: traceOptions<TArgs, TReturn>, fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>): (...args: TArgs) => Promise<TReturn>;
|
|
85
|
+
declare function withTracing<TArgs extends any[] = any[], TReturn = any>(options: Omit<traceOptions<TArgs, TReturn>, 'name'>): (fnOrFactory: ((...args: TArgs) => TReturn | Promise<TReturn>) | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>)) => WrappedFunction<TArgs, TReturn>;
|
|
86
|
+
interface InstrumentOptions extends traceOptions {
|
|
87
|
+
functions: Record<string, any>;
|
|
88
|
+
overrides?: Record<string, Partial<traceOptions>>;
|
|
89
|
+
skip?: (string | RegExp | ((key: string, fn: Function) => boolean))[];
|
|
90
|
+
}
|
|
91
|
+
declare function instrument<T extends Record<string, any>>(options: InstrumentOptions): T;
|
|
92
|
+
interface SpanOptions$1 {
|
|
93
|
+
name: string;
|
|
94
|
+
attributes?: Record<string, string | number | boolean>;
|
|
95
|
+
}
|
|
96
|
+
declare function span<T = unknown>(name: string, fn: (span: Span) => T): T;
|
|
97
|
+
declare function span<T = unknown>(name: string, fn: (span: Span) => Promise<T>): Promise<T>;
|
|
98
|
+
declare function span<T = unknown>(options: SpanOptions$1, fn: (span: Span) => T): T;
|
|
99
|
+
declare function span<T = unknown>(options: SpanOptions$1, fn: (span: Span) => Promise<T>): Promise<T>;
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/execution-logger.d.ts
|
|
102
|
+
/**
|
|
103
|
+
* Optional lifecycle hooks for adapters that need to track child loggers
|
|
104
|
+
* spawned by `log.fork()` (e.g. activeLoggers maps in framework integrations).
|
|
105
|
+
*/
|
|
106
|
+
interface ForkLifecycle {
|
|
107
|
+
/** Called after the child logger is created, before `fn` runs. */
|
|
108
|
+
onChildEnter?: (child: ExecutionLogger) => void;
|
|
109
|
+
/** Called after the child has finished (emit + drain), success or failure. */
|
|
110
|
+
onChildExit?: (child: ExecutionLogger) => void;
|
|
111
|
+
}
|
|
112
|
+
interface ForkOptions {
|
|
113
|
+
lifecycle?: ForkLifecycle;
|
|
114
|
+
}
|
|
115
|
+
interface ExecutionLogger {
|
|
116
|
+
set(fields: Record<string, unknown>): void;
|
|
117
|
+
info(message: string, fields?: Record<string, unknown>): void;
|
|
118
|
+
warn(message: string, fields?: Record<string, unknown>): void;
|
|
119
|
+
error(error: Error | string, fields?: Record<string, unknown>): void;
|
|
120
|
+
getContext(): Record<string, unknown>;
|
|
121
|
+
emitNow(overrides?: Record<string, unknown>): ExecutionLogSnapshot;
|
|
122
|
+
fork(label: string, fn: () => void | Promise<void>, options?: ForkOptions): void;
|
|
123
|
+
}
|
|
124
|
+
interface ExecutionLogSnapshot {
|
|
125
|
+
timestamp: string;
|
|
126
|
+
traceId: string;
|
|
127
|
+
spanId: string;
|
|
128
|
+
correlationId: string;
|
|
129
|
+
context: Record<string, unknown>;
|
|
130
|
+
}
|
|
131
|
+
interface ExecutionLoggerOptions {
|
|
132
|
+
onEmit?: (snapshot: ExecutionLogSnapshot) => void | Promise<void>;
|
|
133
|
+
}
|
|
134
|
+
declare function getExecutionLogger(ctx?: TraceContext, options?: ExecutionLoggerOptions): ExecutionLogger;
|
|
135
|
+
//#endregion
|
|
136
|
+
export { ForkOptions as a, instrument as c, traceOptions as d, withTracing as f, ForkLifecycle as i, span as l, ExecutionLogger as n, getExecutionLogger as o, TraceContext as p, ExecutionLoggerOptions as r, InstrumentOptions as s, ExecutionLogSnapshot as t, trace$1 as u };
|
|
137
|
+
//# sourceMappingURL=execution-logger-BWlya70r.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-logger-BWlya70r.d.ts","names":[],"sources":["../src/core/trace-context.ts","../src/functional.ts","../src/execution-logger.ts"],"mappings":"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"}
|