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.
Files changed (45) hide show
  1. package/dist/config-0FktBGyj.js +290 -0
  2. package/dist/config-0FktBGyj.js.map +1 -0
  3. package/dist/events.d.ts +42 -43
  4. package/dist/events.d.ts.map +1 -0
  5. package/dist/events.js +144 -137
  6. package/dist/events.js.map +1 -1
  7. package/dist/execution-logger-BWlya70r.d.ts +137 -0
  8. package/dist/execution-logger-BWlya70r.d.ts.map +1 -0
  9. package/dist/execution-logger-CoxSsBmU.js +247 -0
  10. package/dist/execution-logger-CoxSsBmU.js.map +1 -0
  11. package/dist/index.d.ts +192 -276
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +930 -1060
  14. package/dist/index.js.map +1 -1
  15. package/dist/logger.d.ts +122 -136
  16. package/dist/logger.d.ts.map +1 -0
  17. package/dist/logger.js +783 -774
  18. package/dist/logger.js.map +1 -1
  19. package/dist/parse-error.d.ts +12 -10
  20. package/dist/parse-error.d.ts.map +1 -0
  21. package/dist/parse-error.js +55 -2
  22. package/dist/parse-error.js.map +1 -1
  23. package/dist/sampling.d.ts +51 -76
  24. package/dist/sampling.d.ts.map +1 -0
  25. package/dist/sampling.js +155 -90
  26. package/dist/sampling.js.map +1 -1
  27. package/dist/testing.d.ts +1 -2
  28. package/dist/testing.js +1 -3
  29. package/dist/types-HCbsjZzp.d.ts +214 -0
  30. package/dist/types-HCbsjZzp.d.ts.map +1 -0
  31. package/package.json +6 -6
  32. package/src/core/buffer.ts +4 -3
  33. package/src/core/provider.context.test.ts +55 -0
  34. package/src/core/provider.ts +18 -1
  35. package/binding.gyp +0 -9
  36. package/dist/chunk-AL7ZD64M.js +0 -291
  37. package/dist/chunk-AL7ZD64M.js.map +0 -1
  38. package/dist/chunk-INQQQVXN.js +0 -310
  39. package/dist/chunk-INQQQVXN.js.map +0 -1
  40. package/dist/chunk-M7Z4P5MC.js +0 -64
  41. package/dist/chunk-M7Z4P5MC.js.map +0 -1
  42. package/dist/execution-logger-77TRRoWn.d.ts +0 -84
  43. package/dist/testing.js.map +0 -1
  44. package/dist/types-uulICZo7.d.ts +0 -216
  45. package/index.js +0 -1
package/dist/events.js CHANGED
@@ -1,157 +1,164 @@
1
- import { getActiveConfig } from './chunk-INQQQVXN.js';
2
- import { trace } from '@opentelemetry/api';
1
+ import { n as getActiveConfig } from "./config-0FktBGyj.js";
2
+ import { trace } from "@opentelemetry/api";
3
3
 
4
- var DEFAULT_SERVICE_NAME = "edge-service";
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
- return event.name;
20
+ return event.name;
7
21
  }
8
22
  function isPromiseLike(value) {
9
- return typeof value === "object" && value !== null && "then" in value;
23
+ return typeof value === "object" && value !== null && "then" in value;
10
24
  }
11
25
  function createBaseEvent(attributes, options) {
12
- const config = getActiveConfig();
13
- const serviceName = options.service ?? config?.service.name ?? DEFAULT_SERVICE_NAME;
14
- const baseAttributes = attributes ? { ...attributes } : {};
15
- const baseEvent = {
16
- service: serviceName,
17
- timestamp: Date.now(),
18
- attributes: baseAttributes
19
- };
20
- if (options.includeTraceContext ?? true) {
21
- const span = trace.getActiveSpan();
22
- const spanContext = span?.spanContext();
23
- if (spanContext) {
24
- baseEvent.traceId = spanContext.traceId;
25
- baseEvent.spanId = spanContext.spanId;
26
- baseEvent.correlationId = spanContext.traceId.slice(0, 16);
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
- if (options.onError) {
33
- try {
34
- options.onError(error, event);
35
- return;
36
- } catch (handlerError) {
37
- console.error("[autotel-edge] Subscribers onError handler failed", handlerError);
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
- if (!isPromiseLike(result)) {
44
- return delivery === "await" ? Promise.resolve() : void 0;
45
- }
46
- if (delivery === "await") {
47
- return Promise.resolve(result).catch((error) => {
48
- handleError(error, event, createOptions);
49
- throw error;
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
- const dispatch = (event, callOptions) => {
62
- const delivery = callOptions?.delivery ?? bindings.delivery ?? options.delivery ?? "fire-and-forget";
63
- const waitUntil = callOptions?.waitUntil ?? bindings.waitUntil ?? options.waitUntil;
64
- const result = options.transport(event);
65
- return deliverResult(result, event, delivery, waitUntil, options);
66
- };
67
- const trackEvent = (eventName, attributes, callOptions) => {
68
- const baseEvent = createBaseEvent(attributes, options);
69
- const event = {
70
- ...baseEvent,
71
- type: "event",
72
- event: eventName,
73
- name: eventName
74
- };
75
- return dispatch(event, callOptions);
76
- };
77
- const trackFunnelStep = (funnel, status, attributes, callOptions) => {
78
- const baseEvent = createBaseEvent(attributes, options);
79
- const event = {
80
- ...baseEvent,
81
- type: "funnel-step",
82
- funnel,
83
- status,
84
- name: `funnel-step.${status}`
85
- };
86
- return dispatch(event, callOptions);
87
- };
88
- const trackOutcome = (operation, outcome, attributes, callOptions) => {
89
- const baseEvent = createBaseEvent(attributes, options);
90
- const event = {
91
- ...baseEvent,
92
- type: "outcome",
93
- operation,
94
- outcome,
95
- name: `outcome.${outcome}`
96
- };
97
- return dispatch(event, callOptions);
98
- };
99
- const trackValue = (metric, value, attributes, callOptions) => {
100
- const baseEvent = createBaseEvent(attributes, options);
101
- const event = {
102
- ...baseEvent,
103
- type: "value",
104
- metric,
105
- value,
106
- name: `value.${metric}`
107
- };
108
- return dispatch(event, callOptions);
109
- };
110
- return {
111
- trackEvent,
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
- if (typeof options.transport !== "function") {
121
- throw new TypeError("createEdgeSubscribers: options.transport is required");
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
- const config = getActiveConfig();
127
- if (!config) {
128
- return null;
129
- }
130
- const subscribers = config.subscribers ?? [];
131
- if (subscribers.length === 0) {
132
- return null;
133
- }
134
- const combinedTransport = async (event) => {
135
- await Promise.all(
136
- subscribers.map(async (subscriber, index) => {
137
- try {
138
- await subscriber(event);
139
- } catch (error) {
140
- console.error("[autotel-edge] Subscribers subscriber failed", error, {
141
- subscriberIndex: index,
142
- eventType: event.type
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
@@ -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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"}