@interfere/react 0.1.0-alpha.5 → 0.2.0-alpha.1
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/README.md +90 -0
- package/dist/error-boundary.d.mts +27 -0
- package/dist/error-boundary.d.mts.map +1 -0
- package/dist/error-boundary.mjs +42 -0
- package/dist/error-boundary.mjs.map +1 -0
- package/dist/internal/client.d.mts +13 -0
- package/dist/internal/client.d.mts.map +1 -0
- package/dist/internal/client.mjs +80 -0
- package/dist/internal/client.mjs.map +1 -0
- package/dist/internal/config.d.mts +9 -0
- package/dist/internal/config.d.mts.map +1 -0
- package/dist/internal/config.mjs +27 -0
- package/dist/internal/config.mjs.map +1 -0
- package/dist/internal/context.d.mts +6 -0
- package/dist/internal/context.d.mts.map +1 -0
- package/dist/internal/context.mjs +32 -0
- package/dist/internal/context.mjs.map +1 -0
- package/dist/internal/envelope.d.mts +14 -0
- package/dist/internal/envelope.d.mts.map +1 -0
- package/dist/internal/envelope.mjs +20 -0
- package/dist/internal/envelope.mjs.map +1 -0
- package/dist/internal/errors.d.mts +4 -0
- package/dist/internal/errors.d.mts.map +1 -0
- package/dist/internal/errors.mjs +4 -0
- package/dist/internal/errors.mjs.map +1 -0
- package/dist/internal/sw.d.mts +4 -0
- package/dist/internal/sw.d.mts.map +1 -0
- package/dist/internal/sw.mjs +10 -0
- package/dist/internal/sw.mjs.map +1 -0
- package/dist/plugins/errors.d.mts +6 -0
- package/dist/plugins/errors.d.mts.map +1 -0
- package/dist/plugins/errors.mjs +59 -0
- package/dist/plugins/errors.mjs.map +1 -0
- package/dist/plugins/lib/loader.d.mts +9 -0
- package/dist/plugins/lib/loader.d.mts.map +1 -0
- package/dist/plugins/lib/loader.mjs +47 -0
- package/dist/plugins/lib/loader.mjs.map +1 -0
- package/dist/plugins/lib/types.d.mts +14 -0
- package/dist/plugins/lib/types.d.mts.map +1 -0
- package/dist/plugins/lib/types.mjs +1 -0
- package/dist/plugins/pages.d.mts +6 -0
- package/dist/plugins/pages.d.mts.map +1 -0
- package/dist/plugins/pages.mjs +102 -0
- package/dist/plugins/pages.mjs.map +1 -0
- package/dist/plugins/rage-clicks.d.mts +6 -0
- package/dist/plugins/rage-clicks.d.mts.map +1 -0
- package/dist/plugins/rage-clicks.mjs +53 -0
- package/dist/plugins/rage-clicks.mjs.map +1 -0
- package/dist/plugins/replay.d.mts +6 -0
- package/dist/plugins/replay.d.mts.map +1 -0
- package/dist/plugins/replay.mjs +62 -0
- package/dist/plugins/replay.mjs.map +1 -0
- package/dist/provider.d.mts +17 -11
- package/dist/provider.d.mts.map +1 -1
- package/dist/provider.mjs +18 -17
- package/dist/provider.mjs.map +1 -1
- package/dist/tracking/api.d.mts +22 -0
- package/dist/tracking/api.d.mts.map +1 -0
- package/dist/tracking/api.mjs +88 -0
- package/dist/tracking/api.mjs.map +1 -0
- package/dist/tracking/session.d.mts +19 -0
- package/dist/tracking/session.d.mts.map +1 -0
- package/dist/tracking/session.mjs +92 -0
- package/dist/tracking/session.mjs.map +1 -0
- package/dist/tracking/visitor.d.mts +6 -0
- package/dist/tracking/visitor.d.mts.map +1 -0
- package/dist/tracking/visitor.mjs +35 -0
- package/dist/tracking/visitor.mjs.map +1 -0
- package/dist/transport/http.d.mts +15 -0
- package/dist/transport/http.d.mts.map +1 -0
- package/dist/transport/http.mjs +56 -0
- package/dist/transport/http.mjs.map +1 -0
- package/dist/transport/queue.d.mts +25 -0
- package/dist/transport/queue.d.mts.map +1 -0
- package/dist/transport/queue.mjs +60 -0
- package/dist/transport/queue.mjs.map +1 -0
- package/dist/util/log.d.mts +13 -0
- package/dist/util/log.d.mts.map +1 -0
- package/dist/util/log.mjs +37 -0
- package/dist/util/log.mjs.map +1 -0
- package/package.json +43 -66
- package/dist/client.d.mts +0 -15
- package/dist/client.d.mts.map +0 -1
- package/dist/client.mjs +0 -75
- package/dist/client.mjs.map +0 -1
- package/dist/core/events/event-registry.d.mts +0 -23
- package/dist/core/events/event-registry.d.mts.map +0 -1
- package/dist/core/events/event-registry.mjs +0 -32
- package/dist/core/events/event-registry.mjs.map +0 -1
- package/dist/core/events/plugin-event-types.d.mts +0 -92
- package/dist/core/events/plugin-event-types.d.mts.map +0 -1
- package/dist/core/events/plugin-event-types.mjs +0 -25
- package/dist/core/events/plugin-event-types.mjs.map +0 -1
- package/dist/core/plugins/dom-utils.d.mts +0 -9
- package/dist/core/plugins/dom-utils.d.mts.map +0 -1
- package/dist/core/plugins/dom-utils.mjs +0 -25
- package/dist/core/plugins/dom-utils.mjs.map +0 -1
- package/dist/core/plugins/impl/ai-summary.d.mts +0 -6
- package/dist/core/plugins/impl/ai-summary.d.mts.map +0 -1
- package/dist/core/plugins/impl/ai-summary.mjs +0 -122
- package/dist/core/plugins/impl/ai-summary.mjs.map +0 -1
- package/dist/core/plugins/impl/errors.d.mts +0 -9
- package/dist/core/plugins/impl/errors.d.mts.map +0 -1
- package/dist/core/plugins/impl/errors.mjs +0 -160
- package/dist/core/plugins/impl/errors.mjs.map +0 -1
- package/dist/core/plugins/impl/page-events.d.mts +0 -15
- package/dist/core/plugins/impl/page-events.d.mts.map +0 -1
- package/dist/core/plugins/impl/page-events.mjs +0 -131
- package/dist/core/plugins/impl/page-events.mjs.map +0 -1
- package/dist/core/plugins/impl/rage-click.d.mts +0 -6
- package/dist/core/plugins/impl/rage-click.d.mts.map +0 -1
- package/dist/core/plugins/impl/rage-click.mjs +0 -53
- package/dist/core/plugins/impl/rage-click.mjs.map +0 -1
- package/dist/core/plugins/impl/replay.d.mts +0 -9
- package/dist/core/plugins/impl/replay.d.mts.map +0 -1
- package/dist/core/plugins/impl/replay.mjs +0 -144
- package/dist/core/plugins/impl/replay.mjs.map +0 -1
- package/dist/core/plugins/impl/server-tracing.d.mts +0 -7
- package/dist/core/plugins/impl/server-tracing.d.mts.map +0 -1
- package/dist/core/plugins/impl/server-tracing.mjs +0 -160
- package/dist/core/plugins/impl/server-tracing.mjs.map +0 -1
- package/dist/core/plugins/plugin-event-system.d.mts +0 -47
- package/dist/core/plugins/plugin-event-system.d.mts.map +0 -1
- package/dist/core/plugins/plugin-event-system.mjs +0 -75
- package/dist/core/plugins/plugin-event-system.mjs.map +0 -1
- package/dist/core/plugins/plugin-loader.d.mts +0 -22
- package/dist/core/plugins/plugin-loader.d.mts.map +0 -1
- package/dist/core/plugins/plugin-loader.mjs +0 -142
- package/dist/core/plugins/plugin-loader.mjs.map +0 -1
- package/dist/core/runtime/config.d.mts +0 -14
- package/dist/core/runtime/config.d.mts.map +0 -1
- package/dist/core/runtime/config.mjs +0 -39
- package/dist/core/runtime/config.mjs.map +0 -1
- package/dist/core/runtime/context.d.mts +0 -25
- package/dist/core/runtime/context.d.mts.map +0 -1
- package/dist/core/runtime/context.mjs +0 -48
- package/dist/core/runtime/context.mjs.map +0 -1
- package/dist/core/runtime/ingest-target.d.mts +0 -10
- package/dist/core/runtime/ingest-target.d.mts.map +0 -1
- package/dist/core/runtime/ingest-target.mjs +0 -15
- package/dist/core/runtime/ingest-target.mjs.map +0 -1
- package/dist/core/runtime/native-fetch.d.mts +0 -32
- package/dist/core/runtime/native-fetch.d.mts.map +0 -1
- package/dist/core/runtime/native-fetch.mjs +0 -49
- package/dist/core/runtime/native-fetch.mjs.map +0 -1
- package/dist/core/schemas.d.mts +0 -85
- package/dist/core/schemas.d.mts.map +0 -1
- package/dist/core/schemas.mjs +0 -1
- package/dist/effect/build-envelope.d.mts +0 -9
- package/dist/effect/build-envelope.d.mts.map +0 -1
- package/dist/effect/build-envelope.mjs +0 -29
- package/dist/effect/build-envelope.mjs.map +0 -1
- package/dist/effect/errors.d.mts +0 -36
- package/dist/effect/errors.d.mts.map +0 -1
- package/dist/effect/errors.mjs +0 -10
- package/dist/effect/errors.mjs.map +0 -1
- package/dist/effect/layers/config.layer.d.mts +0 -13
- package/dist/effect/layers/config.layer.d.mts.map +0 -1
- package/dist/effect/layers/config.layer.mjs +0 -21
- package/dist/effect/layers/config.layer.mjs.map +0 -1
- package/dist/effect/layers/context.layer.d.mts +0 -12
- package/dist/effect/layers/context.layer.d.mts.map +0 -1
- package/dist/effect/layers/context.layer.mjs +0 -14
- package/dist/effect/layers/context.layer.mjs.map +0 -1
- package/dist/effect/layers/http.layer.d.mts +0 -21
- package/dist/effect/layers/http.layer.d.mts.map +0 -1
- package/dist/effect/layers/http.layer.mjs +0 -114
- package/dist/effect/layers/http.layer.mjs.map +0 -1
- package/dist/effect/layers/queue.layer.d.mts +0 -30
- package/dist/effect/layers/queue.layer.d.mts.map +0 -1
- package/dist/effect/layers/queue.layer.mjs +0 -258
- package/dist/effect/layers/queue.layer.mjs.map +0 -1
- package/dist/effect/layers/session.layer.d.mts +0 -26
- package/dist/effect/layers/session.layer.d.mts.map +0 -1
- package/dist/effect/layers/session.layer.mjs +0 -126
- package/dist/effect/layers/session.layer.mjs.map +0 -1
- package/dist/effect/layers/storage.layer.d.mts +0 -50
- package/dist/effect/layers/storage.layer.d.mts.map +0 -1
- package/dist/effect/layers/storage.layer.mjs +0 -180
- package/dist/effect/layers/storage.layer.mjs.map +0 -1
- package/dist/effect/layers/tracer.layer.d.mts +0 -9
- package/dist/effect/layers/tracer.layer.d.mts.map +0 -1
- package/dist/effect/layers/tracer.layer.mjs +0 -11
- package/dist/effect/layers/tracer.layer.mjs.map +0 -1
- package/dist/effect/runtime-services.d.mts +0 -22
- package/dist/effect/runtime-services.d.mts.map +0 -1
- package/dist/effect/runtime-services.mjs +0 -76
- package/dist/effect/runtime-services.mjs.map +0 -1
- package/dist/effect/tags.d.mts +0 -58
- package/dist/effect/tags.d.mts.map +0 -1
- package/dist/effect/tags.mjs +0 -7
- package/dist/effect/tags.mjs.map +0 -1
- package/dist/hooks/use-runtime-and-plugins.d.mts +0 -7
- package/dist/hooks/use-runtime-and-plugins.d.mts.map +0 -1
- package/dist/hooks/use-runtime-and-plugins.mjs +0 -153
- package/dist/hooks/use-runtime-and-plugins.mjs.map +0 -1
- package/dist/hooks/use-session.d.mts +0 -40
- package/dist/hooks/use-session.d.mts.map +0 -1
- package/dist/hooks/use-session.mjs +0 -96
- package/dist/hooks/use-session.mjs.map +0 -1
- package/dist/package.mjs +0 -100
- package/dist/package.mjs.map +0 -1
- package/dist/server/auth.d.mts +0 -11
- package/dist/server/auth.d.mts.map +0 -1
- package/dist/server/auth.mjs +0 -36
- package/dist/server/auth.mjs.map +0 -1
- package/dist/server/capture.d.mts +0 -18
- package/dist/server/capture.d.mts.map +0 -1
- package/dist/server/capture.mjs +0 -105
- package/dist/server/capture.mjs.map +0 -1
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { eventConfigs, eventSchemas } from "../events/plugin-event-types.mjs";
|
|
2
|
-
import { dynamicRegistry } from "../events/event-registry.mjs";
|
|
3
|
-
import { runWithSDK } from "../../effect/runtime-services.mjs";
|
|
4
|
-
|
|
5
|
-
//#region src/core/plugins/plugin-event-system.ts
|
|
6
|
-
function createPlugin(key, config) {
|
|
7
|
-
return {
|
|
8
|
-
name: config.name,
|
|
9
|
-
events: config.events,
|
|
10
|
-
async setup(ctx) {
|
|
11
|
-
if (config.events) for (const eventDef of config.events) dynamicRegistry.registerDefinition(eventDef);
|
|
12
|
-
const result = await Promise.resolve(config.setup(ctx));
|
|
13
|
-
if (!result) return {
|
|
14
|
-
key,
|
|
15
|
-
api: void 0,
|
|
16
|
-
cleanup: void 0
|
|
17
|
-
};
|
|
18
|
-
return {
|
|
19
|
-
key,
|
|
20
|
-
api: result.api,
|
|
21
|
-
cleanup: result.cleanup
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
function createEffectPlugin(key, config) {
|
|
27
|
-
return createPlugin(key, {
|
|
28
|
-
name: config.name,
|
|
29
|
-
events: config.events,
|
|
30
|
-
setup: (ctx) => {
|
|
31
|
-
if ("config" in config && config.config !== void 0) {
|
|
32
|
-
const setupFnWithConfig = config.setup;
|
|
33
|
-
return runWithSDK(setupFnWithConfig(ctx, config.config));
|
|
34
|
-
}
|
|
35
|
-
const setupFnWithoutConfig = config.setup;
|
|
36
|
-
return runWithSDK(setupFnWithoutConfig(ctx));
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
var FinalEventDefBuilder = class {
|
|
41
|
-
def;
|
|
42
|
-
constructor(type) {
|
|
43
|
-
this.def = {
|
|
44
|
-
type,
|
|
45
|
-
schema: eventSchemas[type],
|
|
46
|
-
enrich: eventConfigs[type].enrich
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
enrich(value = true) {
|
|
50
|
-
return {
|
|
51
|
-
...this.def,
|
|
52
|
-
enrich: value
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
transform(fn) {
|
|
56
|
-
return {
|
|
57
|
-
...this.def,
|
|
58
|
-
transform: fn
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
value() {
|
|
62
|
-
return { ...this.def };
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
function defineEvent(type) {
|
|
66
|
-
const builder = new FinalEventDefBuilder(type);
|
|
67
|
-
return {
|
|
68
|
-
enrich: (v) => builder.enrich(v ?? true),
|
|
69
|
-
transform: (fn) => builder.transform(fn),
|
|
70
|
-
value: () => builder.value()
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
//#endregion
|
|
75
|
-
export { createEffectPlugin, createPlugin, defineEvent };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-event-system.mjs","names":[],"sources":["../../../src/core/plugins/plugin-event-system.ts"],"sourcesContent":["import type { PluginKey } from \"@interfere/types/sdk/plugins/lib/types\";\n\nimport type { Effect as EffectType } from \"effect\";\nimport type { z } from \"zod\";\n\nimport { runWithSDK } from \"../../effect/runtime-services.js\";\nimport { dynamicRegistry } from \"../events/event-registry.js\";\nimport {\n type AnyEventDefinition,\n type EventDefinitionFor,\n type EventSchemas,\n type EventsForPlugin,\n eventConfigs,\n eventSchemas,\n} from \"../events/plugin-event-types.js\";\nimport type { Plugin, PluginContext } from \"../schemas.js\";\n\ntype SetupResult =\n | {\n api?: object;\n cleanup?: () => void;\n }\n | undefined;\n\nexport function createPlugin<TKey extends PluginKey>(\n key: TKey,\n config: {\n name: string;\n events?: readonly Extract<\n AnyEventDefinition,\n { type: EventsForPlugin<TKey> }\n >[];\n setup: (ctx: PluginContext) => SetupResult | Promise<SetupResult>;\n }\n): Plugin<TKey, unknown> {\n return {\n name: config.name,\n events: config.events,\n async setup(ctx: PluginContext) {\n // Register event handlers if provided\n if (config.events) {\n for (const eventDef of config.events) {\n dynamicRegistry.registerDefinition(eventDef);\n }\n }\n\n // Run the plugin's setup\n const result = await Promise.resolve(config.setup(ctx));\n\n if (!result) {\n return { key, api: undefined, cleanup: undefined };\n }\n\n return {\n key,\n api: result.api,\n cleanup: result.cleanup,\n };\n },\n };\n}\n\nexport function createEffectPlugin<TKey extends PluginKey>(\n key: TKey,\n config: {\n name: string;\n events?: readonly Extract<\n AnyEventDefinition,\n { type: EventsForPlugin<TKey> }\n >[];\n setup: (ctx: PluginContext) => EffectType.Effect<\n | {\n api?: object;\n cleanup?: () => void;\n }\n | undefined,\n never\n >;\n }\n): Plugin<TKey, unknown>;\n\nexport function createEffectPlugin<TKey extends PluginKey, TConfig>(\n key: TKey,\n config: {\n name: string;\n events?: readonly Extract<\n AnyEventDefinition,\n { type: EventsForPlugin<TKey> }\n >[];\n config: TConfig;\n setup: (\n ctx: PluginContext,\n config: TConfig\n ) => EffectType.Effect<\n | {\n api?: object;\n cleanup?: () => void;\n }\n | undefined,\n never\n >;\n }\n): Plugin<TKey, unknown>;\n\nexport function createEffectPlugin<TKey extends PluginKey, TConfig = undefined>(\n key: TKey,\n config: {\n name: string;\n events?: readonly Extract<\n AnyEventDefinition,\n { type: EventsForPlugin<TKey> }\n >[];\n config?: TConfig;\n setup: (\n ctx: PluginContext,\n config?: TConfig\n ) => EffectType.Effect<\n | {\n api?: object;\n cleanup?: () => void;\n }\n | undefined,\n never\n >;\n }\n): Plugin<TKey, unknown> {\n return createPlugin(key, {\n name: config.name,\n events: config.events,\n setup: (ctx) => {\n if (\"config\" in config && config.config !== undefined) {\n const setupFnWithConfig = config.setup as (\n context: PluginContext,\n cfg: TConfig\n ) => EffectType.Effect<SetupResult, never>;\n return runWithSDK(setupFnWithConfig(ctx, config.config));\n }\n const setupFnWithoutConfig = config.setup as (\n context: PluginContext\n ) => EffectType.Effect<SetupResult, never>;\n return runWithSDK(setupFnWithoutConfig(ctx));\n },\n });\n}\n\nexport type FinalEventDefinition<T extends keyof EventSchemas> =\n EventDefinitionFor<T>;\n\nclass FinalEventDefBuilder<T extends keyof EventSchemas> {\n private readonly def: FinalEventDefinition<T>;\n\n constructor(type: T) {\n this.def = {\n type,\n schema: eventSchemas[type],\n enrich: eventConfigs[type].enrich,\n } as FinalEventDefinition<T>;\n }\n\n enrich(value = true): FinalEventDefinition<T> {\n return { ...this.def, enrich: value } as FinalEventDefinition<T>;\n }\n\n transform<TOut>(\n fn: (input: z.infer<EventSchemas[T]>) => TOut\n ): FinalEventDefinition<T> {\n return {\n ...this.def,\n transform: fn as (i: unknown) => unknown,\n } as FinalEventDefinition<T>;\n }\n\n value(): FinalEventDefinition<T> {\n return { ...this.def } as FinalEventDefinition<T>;\n }\n}\n\nexport function defineEvent<T extends keyof EventSchemas>(type: T) {\n const builder = new FinalEventDefBuilder(type);\n\n return {\n enrich: (v?: boolean) => builder.enrich(v ?? true),\n transform: <TOut>(fn: (input: z.infer<EventSchemas[T]>) => TOut) =>\n builder.transform(fn),\n value: () => builder.value(),\n };\n}\n"],"mappings":";;;;;AAwBA,SAAgB,aACd,KACA,QAQuB;AACvB,QAAO;EACL,MAAM,OAAO;EACb,QAAQ,OAAO;EACf,MAAM,MAAM,KAAoB;AAE9B,OAAI,OAAO,OACT,MAAK,MAAM,YAAY,OAAO,OAC5B,iBAAgB,mBAAmB,SAAS;GAKhD,MAAM,SAAS,MAAM,QAAQ,QAAQ,OAAO,MAAM,IAAI,CAAC;AAEvD,OAAI,CAAC,OACH,QAAO;IAAE;IAAK,KAAK;IAAW,SAAS;IAAW;AAGpD,UAAO;IACL;IACA,KAAK,OAAO;IACZ,SAAS,OAAO;IACjB;;EAEJ;;AA6CH,SAAgB,mBACd,KACA,QAmBuB;AACvB,QAAO,aAAa,KAAK;EACvB,MAAM,OAAO;EACb,QAAQ,OAAO;EACf,QAAQ,QAAQ;AACd,OAAI,YAAY,UAAU,OAAO,WAAW,QAAW;IACrD,MAAM,oBAAoB,OAAO;AAIjC,WAAO,WAAW,kBAAkB,KAAK,OAAO,OAAO,CAAC;;GAE1D,MAAM,uBAAuB,OAAO;AAGpC,UAAO,WAAW,qBAAqB,IAAI,CAAC;;EAE/C,CAAC;;AAMJ,IAAM,uBAAN,MAAyD;CACvD,AAAiB;CAEjB,YAAY,MAAS;AACnB,OAAK,MAAM;GACT;GACA,QAAQ,aAAa;GACrB,QAAQ,aAAa,MAAM;GAC5B;;CAGH,OAAO,QAAQ,MAA+B;AAC5C,SAAO;GAAE,GAAG,KAAK;GAAK,QAAQ;GAAO;;CAGvC,UACE,IACyB;AACzB,SAAO;GACL,GAAG,KAAK;GACR,WAAW;GACZ;;CAGH,QAAiC;AAC/B,SAAO,EAAE,GAAG,KAAK,KAAK;;;AAI1B,SAAgB,YAA0C,MAAS;CACjE,MAAM,UAAU,IAAI,qBAAqB,KAAK;AAE9C,QAAO;EACL,SAAS,MAAgB,QAAQ,OAAO,KAAK,KAAK;EAClD,YAAkB,OAChB,QAAQ,UAAU,GAAG;EACvB,aAAa,QAAQ,OAAO;EAC7B"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { InferredApis, KnownPluginApis, Plugin, PluginContext } from "../schemas.mjs";
|
|
2
|
-
import { Effect } from "effect";
|
|
3
|
-
import { Config } from "@interfere/types/sdk/config";
|
|
4
|
-
import { PluginKey } from "@interfere/types/sdk/plugins/lib/types";
|
|
5
|
-
|
|
6
|
-
//#region src/core/plugins/plugin-loader.d.ts
|
|
7
|
-
type PluginCleanup = () => void;
|
|
8
|
-
interface PluginLoader {
|
|
9
|
-
loadAndSetupPlugins<P extends readonly Plugin<string, unknown>[] | undefined>(config: Config, pluginContext: PluginContext, userPlugins?: P): Promise<{
|
|
10
|
-
cleanups: PluginCleanup[];
|
|
11
|
-
apis: Partial<KnownPluginApis & (P extends undefined ? Record<never, never> : InferredApis<NonNullable<P>>)>;
|
|
12
|
-
keys: Set<PluginKey | (P extends undefined ? never : InferredPluginKey<P>)>;
|
|
13
|
-
}>;
|
|
14
|
-
}
|
|
15
|
-
type InferredPluginKey<P> = P extends readonly Plugin<string, unknown>[] ? P[number] extends Plugin<infer K, unknown> ? K : never : never;
|
|
16
|
-
declare function loadAndSetupPluginsEffect<P extends readonly Plugin<string, unknown>[] | undefined>(config: Config, pluginContext: PluginContext, userPlugins?: P): Effect.Effect<{
|
|
17
|
-
cleanups: PluginCleanup[];
|
|
18
|
-
apis: Readonly<Partial<KnownPluginApis & (P extends undefined ? Record<never, never> : InferredApis<NonNullable<P>>)>>;
|
|
19
|
-
keys: Set<PluginKey | (P extends undefined ? never : InferredPluginKey<P>)>;
|
|
20
|
-
}, never, never>;
|
|
21
|
-
//#endregion
|
|
22
|
-
export { PluginCleanup, PluginLoader, loadAndSetupPluginsEffect };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.d.mts","names":[],"sources":["../../../src/core/plugins/plugin-loader.ts"],"sourcesContent":[],"mappings":";;;;;;KAkBY,aAAA;UAEK,YAAA;EAFL,mBAAa,CAAA,UAAA,SAGgB,MAHhB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,SAAA,CAAA,CAAA,MAAA,EAIb,MAJa,EAAA,aAAA,EAKN,aALM,EAAA,WAAA,CAAA,EAMP,CANO,CAAA,EAOpB,OAPoB,CAAA;IAER,QAAA,EAMH,aANe,EAAA;IACY,IAAA,EAM/B,OAN+B,CAOnC,eAPmC,GAAA,CAQhC,CARgC,SAAA,SAAA,GAS7B,MAT6B,CAAA,KAAA,EAAA,KAAA,CAAA,GAU7B,YAV6B,CAUhB,WAVgB,CAUJ,CAVI,CAAA,CAAA,CAAA,CAAA;IAC7B,IAAA,EAWF,GAXE,CAWE,SAXF,GAAA,CAWe,CAXf,SAAA,SAAA,GAAA,KAAA,GAW6C,iBAX7C,CAW+D,CAX/D,CAAA,CAAA,CAAA;EACO,CAAA,CAAA;;KAcd,iBAXS,CAAA,CAAA,CAAA,GAWc,CAXd,SAAA,SAWiC,MAXjC,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAYV,CAZU,CAAA,MAAA,CAAA,SAYQ,MAZR,CAAA,KAAA,EAAA,EAAA,OAAA,CAAA,GAAA,CAAA,GAAA,KAAA,GAAA,KAAA;AAER,iBAoBU,yBApBV,CAAA,UAAA,SAqBe,MArBf,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,SAAA,CAAA,CAAA,MAAA,EAsBI,MAtBJ,EAAA,aAAA,EAsB2B,aAtB3B,EAAA,WAAA,CAAA,EAsBwD,CAtBxD,CAAA,EAsByD,MAAA,CAAA,MAtBzD,CAAA;EACG,QAAA,eAAA,EAAA;EACG,IAAA,UAAA,QAAA,gBAAA,GAAA,EAAA,SAAA,SAAA,SAAA,CAAA,KAAA,EAAA,KAAA,CAAA,eAAA,YAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EACyB,IAAA,EAmQjB,GAnQiB,CAoQ7B,SApQ6B,GAAA,CAoQhB,CApQgB,SAAA,SAAA,GAAA,KAAA,GAoQc,iBApQd,CAoQgC,CApQhC,CAAA,CAAA,CAAA;CAAZ,EAAA,KAAA,EAAA,KAAA,CAAA"}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { dynamicRegistry } from "../events/event-registry.mjs";
|
|
2
|
-
import { withSpan } from "../../effect/layers/tracer.layer.mjs";
|
|
3
|
-
import { Effect } from "effect";
|
|
4
|
-
import { PLUGIN_MANIFEST } from "@interfere/types/sdk/plugins/manifest";
|
|
5
|
-
|
|
6
|
-
//#region src/core/plugins/plugin-loader.ts
|
|
7
|
-
function loadAndSetupPluginsEffect(config, pluginContext, userPlugins) {
|
|
8
|
-
const handlers = [];
|
|
9
|
-
const apis = {};
|
|
10
|
-
const keys = /* @__PURE__ */ new Set();
|
|
11
|
-
const registerPluginEvents = (plugin) => Effect.gen(function* () {
|
|
12
|
-
const withEvents = plugin;
|
|
13
|
-
if (withEvents.events && withEvents.events.length > 0) {
|
|
14
|
-
yield* Effect.logTrace(`Registering ${withEvents.events.length} events for plugin '${plugin.name}'`).pipe(Effect.annotateLogs({
|
|
15
|
-
plugin: plugin.name,
|
|
16
|
-
eventCount: withEvents.events.length
|
|
17
|
-
}));
|
|
18
|
-
for (const eventDef of withEvents.events) dynamicRegistry.registerDefinition(eventDef);
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
const registerExposeKey = (expose) => Effect.gen(function* () {
|
|
22
|
-
if (expose.key && isPluginKey(expose.key)) {
|
|
23
|
-
keys.add(expose.key);
|
|
24
|
-
yield* Effect.logTrace(`Plugin '${expose.key}' registered`).pipe(Effect.annotateLogs({ expose }));
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
const registerExposeCleanup = (expose) => Effect.gen(function* () {
|
|
28
|
-
if (typeof expose.cleanup === "function") {
|
|
29
|
-
handlers.push(expose.cleanup);
|
|
30
|
-
yield* Effect.logTrace(`Plugin '${expose.key}' registered expose cleanup`).pipe(Effect.annotateLogs({ expose }));
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
const registerExposeApi = (expose) => Effect.gen(function* () {
|
|
34
|
-
if (expose.api && expose.key) {
|
|
35
|
-
apis[expose.key] = expose.api;
|
|
36
|
-
yield* Effect.logTrace(`Plugin '${expose.key}' exposed API`).pipe(Effect.annotateLogs({
|
|
37
|
-
key: expose.key,
|
|
38
|
-
api: expose.api
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
const processSetupResult = (result) => Effect.gen(function* () {
|
|
43
|
-
if (!result) {
|
|
44
|
-
yield* Effect.logTrace("Plugin returned no expose (skipped)");
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (typeof result === "function") {
|
|
48
|
-
handlers.push(result);
|
|
49
|
-
yield* Effect.logTrace(`Registered cleanup handler - ${handlers.length} total`).pipe(Effect.annotateLogs({ result }));
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
yield* registerExposeKey(result);
|
|
53
|
-
yield* registerExposeCleanup(result);
|
|
54
|
-
yield* registerExposeApi(result);
|
|
55
|
-
});
|
|
56
|
-
const setupPlugin = (plugin) => Effect.gen(function* () {
|
|
57
|
-
try {
|
|
58
|
-
yield* Effect.logTrace(`Setting up plugin '${plugin.name}'`).pipe(Effect.annotateLogs({ plugin: plugin.name }));
|
|
59
|
-
yield* registerPluginEvents(plugin);
|
|
60
|
-
yield* processSetupResult(yield* withSpan("plugin.setup", Effect.promise(() => Promise.resolve(plugin.setup(pluginContext))), { attributes: { pluginName: plugin.name } }));
|
|
61
|
-
yield* Effect.logTrace(`Plugin '${plugin.name}' setup complete`).pipe(Effect.annotateLogs({ plugin: plugin.name }));
|
|
62
|
-
} catch (error) {
|
|
63
|
-
yield* Effect.logError("Failed to setup plugin").pipe(Effect.annotateLogs({
|
|
64
|
-
plugin: plugin.name,
|
|
65
|
-
error: error instanceof Error ? error.message : String(error)
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
const loadPluginModule = (key) => {
|
|
70
|
-
switch (key) {
|
|
71
|
-
case "errors": return import("./impl/errors.mjs");
|
|
72
|
-
case "replay": return import("./impl/replay.mjs");
|
|
73
|
-
case "rageClick": return import("./impl/rage-click.mjs");
|
|
74
|
-
case "aiSummary": return import("./impl/ai-summary.mjs");
|
|
75
|
-
case "pageEvents": return import("./impl/page-events.mjs");
|
|
76
|
-
case "serverTracing": return import("./impl/server-tracing.mjs");
|
|
77
|
-
default: return Promise.reject(/* @__PURE__ */ new Error(`Unknown plugin key: ${key}`));
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
const isPluginKey = (key) => typeof key === "string" && PLUGIN_MANIFEST.some(({ name }) => name === key);
|
|
81
|
-
const createLoadPluginEffect = (key) => Effect.gen(function* () {
|
|
82
|
-
try {
|
|
83
|
-
yield* Effect.logTrace("Importing plugin module").pipe(Effect.annotateLogs({ key }));
|
|
84
|
-
const mod = yield* Effect.promise(() => loadPluginModule(key));
|
|
85
|
-
yield* Effect.logTrace("Imported plugin module").pipe(Effect.annotateLogs({ key }));
|
|
86
|
-
const plugin = mod.default;
|
|
87
|
-
if (plugin && typeof plugin === "object") yield* setupPlugin(plugin);
|
|
88
|
-
else yield* Effect.logError("Plugin missing default export").pipe(Effect.annotateLogs({ key }));
|
|
89
|
-
} catch (error) {
|
|
90
|
-
yield* Effect.logError("Failed to import plugin").pipe(Effect.annotateLogs({
|
|
91
|
-
key,
|
|
92
|
-
error: String(error)
|
|
93
|
-
}));
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
const loadBuiltinPlugins = Effect.gen(function* () {
|
|
97
|
-
const loadPromises = [];
|
|
98
|
-
const entries = Object.entries(config.features);
|
|
99
|
-
const enabled = entries.filter(([_, v]) => v).map(([k]) => k);
|
|
100
|
-
const disabled = entries.filter(([_, v]) => !v).map(([k]) => k);
|
|
101
|
-
yield* Effect.logDebug(`Loading ${enabled.length} plugins (${disabled.length ?? "Nothing"} disabled)`).pipe(Effect.annotateLogs({
|
|
102
|
-
total: entries.length,
|
|
103
|
-
enabled,
|
|
104
|
-
disabled
|
|
105
|
-
}));
|
|
106
|
-
for (const [key, value] of entries) {
|
|
107
|
-
if (!value) {
|
|
108
|
-
yield* Effect.logTrace(`Plugin '${key}' disabled`).pipe(Effect.annotateLogs({ key }));
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
if (!isPluginKey(key)) {
|
|
112
|
-
yield* Effect.logError("Invalid plugin key", { key });
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
const loadPlugin = createLoadPluginEffect(key);
|
|
116
|
-
loadPromises.push(loadPlugin);
|
|
117
|
-
}
|
|
118
|
-
yield* Effect.all(loadPromises, { concurrency: "unbounded" });
|
|
119
|
-
});
|
|
120
|
-
const loadUserPlugins = Effect.gen(function* () {
|
|
121
|
-
if (userPlugins) {
|
|
122
|
-
const setupPromises = userPlugins.map((plugin) => setupPlugin(plugin));
|
|
123
|
-
yield* Effect.all(setupPromises, { concurrency: "unbounded" });
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
const warnIfNoPluginsLoaded = Effect.gen(function* () {
|
|
127
|
-
if (Object.keys(apis).length === 0) yield* Effect.logWarning("No plugins were loaded. Check your config.features to enable plugins.");
|
|
128
|
-
});
|
|
129
|
-
return Effect.gen(function* () {
|
|
130
|
-
yield* Effect.logTrace("Starting plugin loading process").pipe(Effect.annotateLogs({ config }));
|
|
131
|
-
yield* Effect.all([loadBuiltinPlugins, loadUserPlugins], { concurrency: "unbounded" });
|
|
132
|
-
yield* warnIfNoPluginsLoaded;
|
|
133
|
-
return {
|
|
134
|
-
cleanups: handlers,
|
|
135
|
-
apis: Object.freeze({ ...apis }),
|
|
136
|
-
keys
|
|
137
|
-
};
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
//#endregion
|
|
142
|
-
export { loadAndSetupPluginsEffect };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.mjs","names":["handlers: PluginCleanup[]","apis: Apis<P>","loadPromises: Effect.Effect<void, never, never>[]"],"sources":["../../../src/core/plugins/plugin-loader.ts"],"sourcesContent":["import type { Config } from \"@interfere/types/sdk/config\";\nimport type { PluginKey } from \"@interfere/types/sdk/plugins/lib/types\";\nimport { PLUGIN_MANIFEST } from \"@interfere/types/sdk/plugins/manifest\";\n\nimport { Effect } from \"effect\";\n\nimport { withSpan } from \"../../effect/layers/tracer.layer.js\";\nimport { dynamicRegistry } from \"../events/event-registry.js\";\nimport type { AnyEventDefinition } from \"../events/plugin-event-types.js\";\nimport type {\n InferredApis,\n KnownPluginApis,\n Plugin,\n PluginContext,\n PluginExpose,\n} from \"../schemas.js\";\n// Unified Plugin type; enhanced variants removed\n\nexport type PluginCleanup = () => void;\n\nexport interface PluginLoader {\n loadAndSetupPlugins<P extends readonly Plugin<string, unknown>[] | undefined>(\n config: Config,\n pluginContext: PluginContext,\n userPlugins?: P\n ): Promise<{\n cleanups: PluginCleanup[];\n apis: Partial<\n KnownPluginApis &\n (P extends undefined\n ? Record<never, never>\n : InferredApis<NonNullable<P>>)\n >;\n keys: Set<PluginKey | (P extends undefined ? never : InferredPluginKey<P>)>;\n }>;\n}\n\ntype InferredPluginKey<P> = P extends readonly Plugin<string, unknown>[]\n ? P[number] extends Plugin<infer K, unknown>\n ? K\n : never\n : never;\n\ntype Apis<P extends readonly Plugin<string, unknown>[] | undefined> = Partial<\n KnownPluginApis &\n (P extends undefined ? Record<never, never> : InferredApis<NonNullable<P>>)\n>;\n\nexport function loadAndSetupPluginsEffect<\n P extends readonly Plugin<string, unknown>[] | undefined,\n>(config: Config, pluginContext: PluginContext, userPlugins?: P) {\n const handlers: PluginCleanup[] = [];\n const apis: Apis<P> = {};\n\n const keys = new Set<\n PluginKey | (P extends undefined ? never : InferredPluginKey<P>)\n >();\n\n // Register event handlers declared on the plugin\n const registerPluginEvents = (plugin: Plugin) =>\n Effect.gen(function* () {\n const withEvents = plugin as { events?: readonly AnyEventDefinition[] };\n\n if (withEvents.events && withEvents.events.length > 0) {\n yield* Effect.logTrace(\n `Registering ${withEvents.events.length} events for plugin '${plugin.name}'`\n ).pipe(\n Effect.annotateLogs({\n plugin: plugin.name,\n eventCount: withEvents.events.length,\n })\n );\n\n for (const eventDef of withEvents.events) {\n dynamicRegistry.registerDefinition(eventDef);\n }\n }\n });\n\n // Helpers to keep processSetupResult complexity low\n const registerExposeKey = (expose: PluginExpose<string, unknown>) =>\n Effect.gen(function* () {\n if (expose.key && isPluginKey(expose.key)) {\n keys.add(expose.key);\n\n yield* Effect.logTrace(`Plugin '${expose.key}' registered`).pipe(\n Effect.annotateLogs({ expose })\n );\n }\n });\n\n const registerExposeCleanup = (expose: PluginExpose<string, unknown>) =>\n Effect.gen(function* () {\n if (typeof expose.cleanup === \"function\") {\n handlers.push(expose.cleanup);\n\n yield* Effect.logTrace(\n `Plugin '${expose.key}' registered expose cleanup`\n ).pipe(Effect.annotateLogs({ expose }));\n }\n });\n\n const registerExposeApi = (expose: PluginExpose<string, unknown>) =>\n Effect.gen(function* () {\n if (expose.api && expose.key) {\n (apis as Record<string, unknown>)[expose.key] = expose.api;\n\n yield* Effect.logTrace(`Plugin '${expose.key}' exposed API`).pipe(\n Effect.annotateLogs({ key: expose.key, api: expose.api })\n );\n }\n });\n\n const processSetupResult = (\n result: PluginExpose<string, unknown> | (() => void) | undefined\n ) =>\n Effect.gen(function* () {\n if (!result) {\n yield* Effect.logTrace(\"Plugin returned no expose (skipped)\");\n return;\n }\n\n if (typeof result === \"function\") {\n handlers.push(result);\n\n yield* Effect.logTrace(\n `Registered cleanup handler - ${handlers.length} total`\n ).pipe(Effect.annotateLogs({ result }));\n\n return;\n }\n\n yield* registerExposeKey(result);\n yield* registerExposeCleanup(result);\n yield* registerExposeApi(result);\n });\n\n const setupPlugin = (plugin: Plugin) =>\n Effect.gen(function* () {\n try {\n yield* Effect.logTrace(`Setting up plugin '${plugin.name}'`).pipe(\n Effect.annotateLogs({ plugin: plugin.name })\n );\n\n yield* registerPluginEvents(plugin);\n\n const result = yield* withSpan(\n \"plugin.setup\",\n Effect.promise(() => Promise.resolve(plugin.setup(pluginContext))),\n { attributes: { pluginName: plugin.name } }\n );\n\n yield* processSetupResult(result);\n\n yield* Effect.logTrace(`Plugin '${plugin.name}' setup complete`).pipe(\n Effect.annotateLogs({ plugin: plugin.name })\n );\n } catch (error) {\n yield* Effect.logError(\"Failed to setup plugin\").pipe(\n Effect.annotateLogs({\n plugin: plugin.name,\n error: error instanceof Error ? error.message : String(error),\n })\n );\n }\n });\n\n // Helper to load a plugin module - all plugins export Plugin objects directly\n // TODO: Replace with a dynamic import\n const loadPluginModule = (key: PluginKey): Promise<{ default: Plugin }> => {\n switch (key) {\n case \"errors\":\n return import(\"./impl/errors.js\");\n case \"replay\":\n return import(\"./impl/replay.js\");\n case \"rageClick\":\n return import(\"./impl/rage-click.js\");\n case \"aiSummary\":\n return import(\"./impl/ai-summary.js\");\n case \"pageEvents\":\n return import(\"./impl/page-events.js\");\n case \"serverTracing\":\n return import(\"./impl/server-tracing.js\");\n default:\n return Promise.reject(new Error(`Unknown plugin key: ${key}`));\n }\n };\n\n // Check if a value is a valid plugin key\n const isPluginKey = (key: unknown): key is PluginKey =>\n typeof key === \"string\" && PLUGIN_MANIFEST.some(({ name }) => name === key);\n\n const createLoadPluginEffect = (key: PluginKey) =>\n Effect.gen(function* () {\n try {\n yield* Effect.logTrace(\"Importing plugin module\").pipe(\n Effect.annotateLogs({ key })\n );\n\n const mod = yield* Effect.promise(() => loadPluginModule(key));\n\n yield* Effect.logTrace(\"Imported plugin module\").pipe(\n Effect.annotateLogs({ key })\n );\n\n const plugin = mod.default;\n\n if (plugin && typeof plugin === \"object\") {\n yield* setupPlugin(plugin);\n } else {\n yield* Effect.logError(\"Plugin missing default export\").pipe(\n Effect.annotateLogs({ key })\n );\n }\n } catch (error) {\n yield* Effect.logError(\"Failed to import plugin\").pipe(\n Effect.annotateLogs({ key, error: String(error) })\n );\n }\n });\n\n // Load built-in plugins based on config\n const loadBuiltinPlugins = Effect.gen(function* () {\n const loadPromises: Effect.Effect<void, never, never>[] = [];\n\n const entries = Object.entries(config.features);\n const enabled = entries.filter(([_, v]) => v).map(([k]) => k);\n const disabled = entries.filter(([_, v]) => !v).map(([k]) => k);\n\n yield* Effect.logDebug(\n `Loading ${enabled.length} plugins (${disabled.length ?? \"Nothing\"} disabled)`\n ).pipe(Effect.annotateLogs({ total: entries.length, enabled, disabled }));\n\n for (const [key, value] of entries) {\n if (!value) {\n yield* Effect.logTrace(`Plugin '${key}' disabled`).pipe(\n Effect.annotateLogs({ key })\n );\n\n continue;\n }\n\n if (!isPluginKey(key)) {\n yield* Effect.logError(\"Invalid plugin key\", {\n key,\n });\n\n continue;\n }\n\n const loadPlugin = createLoadPluginEffect(key);\n\n loadPromises.push(loadPlugin);\n }\n\n // Run all plugin loads in parallel\n yield* Effect.all(loadPromises, { concurrency: \"unbounded\" });\n });\n\n // Load user-provided plugins\n const loadUserPlugins = Effect.gen(function* () {\n if (userPlugins) {\n const setupPromises = userPlugins.map((plugin) => setupPlugin(plugin));\n yield* Effect.all(setupPromises, { concurrency: \"unbounded\" });\n }\n });\n\n const warnIfNoPluginsLoaded = Effect.gen(function* () {\n if (Object.keys(apis).length === 0) {\n yield* Effect.logWarning(\n \"No plugins were loaded. Check your config.features to enable plugins.\"\n );\n }\n });\n\n // Run everything: load first (in parallel), then warn if nothing loaded\n return Effect.gen(function* () {\n yield* Effect.logTrace(\"Starting plugin loading process\").pipe(\n Effect.annotateLogs({ config })\n );\n\n yield* Effect.all([loadBuiltinPlugins, loadUserPlugins], {\n concurrency: \"unbounded\",\n });\n\n yield* warnIfNoPluginsLoaded;\n\n return {\n cleanups: handlers,\n apis: Object.freeze({ ...apis }),\n keys: keys as Set<\n PluginKey | (P extends undefined ? never : InferredPluginKey<P>)\n >,\n };\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Config } from "@interfere/types/sdk/config";
|
|
2
|
-
import { Runtime } from "@interfere/types/sdk/runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/core/runtime/config.d.ts
|
|
5
|
-
declare function getRuntime(): Runtime;
|
|
6
|
-
declare function initConfig(input: unknown): void;
|
|
7
|
-
declare function getConfig(): Config;
|
|
8
|
-
interface IngestTarget {
|
|
9
|
-
url: string;
|
|
10
|
-
headers: Headers;
|
|
11
|
-
}
|
|
12
|
-
declare function resolveIngestTarget(): IngestTarget;
|
|
13
|
-
//#endregion
|
|
14
|
-
export { IngestTarget, getConfig, getRuntime, initConfig, resolveIngestTarget };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.mts","names":[],"sources":["../../../src/core/runtime/config.ts"],"sourcesContent":[],"mappings":";;;;iBAKgB,UAAA,CAAA,GAAc;iBAkBd,UAAA;AAlBA,iBAwBA,SAAA,CAAA,CAxBc,EAwBD,MAxBQ;AAkBrB,UAcC,YAAA,CAdS;EAMV,GAAA,EAAA,MAAA;EAQC,OAAA,EAEN,OAFkB;AAK7B;iBAAgB,mBAAA,CAAA,GAAuB"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { configSchema } from "@interfere/types/sdk/config";
|
|
2
|
-
|
|
3
|
-
//#region src/core/runtime/config.ts
|
|
4
|
-
let currentConfig;
|
|
5
|
-
function getRuntime() {
|
|
6
|
-
if (typeof window !== "undefined") return "browser";
|
|
7
|
-
try {
|
|
8
|
-
if (process.env.NEXT_RUNTIME === "edge") return "edge";
|
|
9
|
-
return "node";
|
|
10
|
-
} catch (error) {
|
|
11
|
-
console.error("Error getting runtime: ", error);
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function initConfig(input) {
|
|
16
|
-
currentConfig = {
|
|
17
|
-
...configSchema.parse(input),
|
|
18
|
-
runtime: getRuntime()
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
function getConfig() {
|
|
22
|
-
if (!currentConfig) throw new Error("Config not initialized");
|
|
23
|
-
return currentConfig;
|
|
24
|
-
}
|
|
25
|
-
function resolveIngestTarget() {
|
|
26
|
-
const cfg = getConfig();
|
|
27
|
-
if ("proxyUrl" in cfg) return {
|
|
28
|
-
url: cfg.proxyUrl,
|
|
29
|
-
headers: new Headers([["Content-Type", "application/json"]])
|
|
30
|
-
};
|
|
31
|
-
if ("ingestUrl" in cfg && "surfaceToken" in cfg) return {
|
|
32
|
-
url: cfg.ingestUrl,
|
|
33
|
-
headers: new Headers([["Content-Type", "application/json"], ["x-interfere-surface", cfg.surfaceToken]])
|
|
34
|
-
};
|
|
35
|
-
throw new Error("Invalid SDK config: must provide proxyUrl or (ingestUrl + surfaceToken)");
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
//#endregion
|
|
39
|
-
export { getConfig, getRuntime, initConfig, resolveIngestTarget };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.mjs","names":["currentConfig: (Config & { runtime: Runtime }) | undefined"],"sources":["../../../src/core/runtime/config.ts"],"sourcesContent":["import { type Config, configSchema } from \"@interfere/types/sdk/config\";\nimport type { Runtime } from \"@interfere/types/sdk/runtime\";\n\nlet currentConfig: (Config & { runtime: Runtime }) | undefined;\n\nexport function getRuntime(): Runtime {\n if (typeof window !== \"undefined\") {\n return \"browser\";\n }\n\n try {\n if (process.env.NEXT_RUNTIME === \"edge\") {\n return \"edge\";\n }\n\n return \"node\";\n } catch (error) {\n console.error(\"Error getting runtime: \", error);\n\n return null;\n }\n}\n\nexport function initConfig(input: unknown) {\n const parsed = configSchema.parse(input);\n\n currentConfig = { ...parsed, runtime: getRuntime() };\n}\n\nexport function getConfig(): Config {\n if (!currentConfig) {\n throw new Error(\"Config not initialized\");\n }\n\n return currentConfig;\n}\n\nexport interface IngestTarget {\n url: string;\n headers: Headers;\n}\n\nexport function resolveIngestTarget(): IngestTarget {\n const cfg = getConfig();\n\n if (\"proxyUrl\" in cfg) {\n return {\n url: cfg.proxyUrl,\n headers: new Headers([[\"Content-Type\", \"application/json\"]]),\n };\n }\n\n if (\"ingestUrl\" in cfg && \"surfaceToken\" in cfg) {\n return {\n url: cfg.ingestUrl,\n headers: new Headers([\n [\"Content-Type\", \"application/json\"],\n [\"x-interfere-surface\", cfg.surfaceToken],\n ]),\n };\n }\n\n throw new Error(\n \"Invalid SDK config: must provide proxyUrl or (ingestUrl + surfaceToken)\"\n );\n}\n"],"mappings":";;;AAGA,IAAIA;AAEJ,SAAgB,aAAsB;AACpC,KAAI,OAAO,WAAW,YACpB,QAAO;AAGT,KAAI;AACF,MAAI,QAAQ,IAAI,iBAAiB,OAC/B,QAAO;AAGT,SAAO;UACA,OAAO;AACd,UAAQ,MAAM,2BAA2B,MAAM;AAE/C,SAAO;;;AAIX,SAAgB,WAAW,OAAgB;AAGzC,iBAAgB;EAAE,GAFH,aAAa,MAAM,MAAM;EAEX,SAAS,YAAY;EAAE;;AAGtD,SAAgB,YAAoB;AAClC,KAAI,CAAC,cACH,OAAM,IAAI,MAAM,yBAAyB;AAG3C,QAAO;;AAQT,SAAgB,sBAAoC;CAClD,MAAM,MAAM,WAAW;AAEvB,KAAI,cAAc,IAChB,QAAO;EACL,KAAK,IAAI;EACT,SAAS,IAAI,QAAQ,CAAC,CAAC,gBAAgB,mBAAmB,CAAC,CAAC;EAC7D;AAGH,KAAI,eAAe,OAAO,kBAAkB,IAC1C,QAAO;EACL,KAAK,IAAI;EACT,SAAS,IAAI,QAAQ,CACnB,CAAC,gBAAgB,mBAAmB,EACpC,CAAC,uBAAuB,IAAI,aAAa,CAC1C,CAAC;EACH;AAGH,OAAM,IAAI,MACR,0EACD"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Effect } from "effect";
|
|
2
|
-
import { IResult } from "@ua-parser-js/pro-enterprise";
|
|
3
|
-
|
|
4
|
-
//#region src/core/runtime/context.d.ts
|
|
5
|
-
interface ScreenProperties {
|
|
6
|
-
viewport: {
|
|
7
|
-
viewport_width: number;
|
|
8
|
-
viewport_height: number;
|
|
9
|
-
};
|
|
10
|
-
screen: {
|
|
11
|
-
screen_height: number;
|
|
12
|
-
screen_width: number;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
interface CaptureSourceProperties {
|
|
16
|
-
sdk: {
|
|
17
|
-
name: string;
|
|
18
|
-
version: string;
|
|
19
|
-
language: string;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
type ContextProperties = ScreenProperties & CaptureSourceProperties & IResult & Record<string, unknown>;
|
|
23
|
-
declare function getContextProperties(): Effect.Effect<ContextProperties>;
|
|
24
|
-
//#endregion
|
|
25
|
-
export { ContextProperties, getContextProperties };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.mts","names":[],"sources":["../../../src/core/runtime/context.ts"],"sourcesContent":[],"mappings":";;;;UAKU,gBAAA;;IAAA,cAAA,EAAgB,MAAA;IAWhB,eAAA,EAAA,MAAuB;EAQrB,CAAA;EAAoB,MAAA,EAAA;IAC9B,aAAA,EAAA,MAAA;IACA,YAAA,EAAA,MAAA;EACA,CAAA;;AAEF,UAbU,uBAAA,CAa0B;;;;;;;KALxB,iBAAA,GAAoB,mBAC9B,0BACA,UACA;iBAEc,oBAAA,CAAA,GAAwB,MAAA,CAAO,OAAO"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import package_default from "../../package.mjs";
|
|
2
|
-
import { Effect } from "effect";
|
|
3
|
-
import { UAParser } from "@ua-parser-js/pro-enterprise";
|
|
4
|
-
|
|
5
|
-
//#region src/core/runtime/context.ts
|
|
6
|
-
function getContextProperties() {
|
|
7
|
-
return Effect.gen(function* () {
|
|
8
|
-
if (typeof window === "undefined") throw new Error("getContextProperties can only be called in the browser environment");
|
|
9
|
-
const userAgent = window.navigator.userAgent;
|
|
10
|
-
const parser = UAParser(userAgent);
|
|
11
|
-
const result = yield* Effect.sync(() => parser.withClientHints());
|
|
12
|
-
const browser = yield* Effect.sync(() => {
|
|
13
|
-
if (!result.browser) return null;
|
|
14
|
-
return result.browser.withFeatureCheck();
|
|
15
|
-
});
|
|
16
|
-
return {
|
|
17
|
-
...result,
|
|
18
|
-
...browser ? { browser } : {},
|
|
19
|
-
...getScreenProperties(),
|
|
20
|
-
...getCaptureSourceProperties()
|
|
21
|
-
};
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
function getScreenProperties() {
|
|
25
|
-
if (typeof window === "undefined") throw new Error("getScreenProperties can only be called in the browser environment");
|
|
26
|
-
return {
|
|
27
|
-
viewport: {
|
|
28
|
-
viewport_width: window.innerWidth,
|
|
29
|
-
viewport_height: window.innerHeight
|
|
30
|
-
},
|
|
31
|
-
screen: {
|
|
32
|
-
screen_height: window.screen.height,
|
|
33
|
-
screen_width: window.screen.width
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
function getCaptureSourceProperties() {
|
|
38
|
-
if (typeof window === "undefined") throw new Error("getCaptureSourceProperties can only be called in the browser environment");
|
|
39
|
-
const { name, version } = package_default;
|
|
40
|
-
return { sdk: {
|
|
41
|
-
name,
|
|
42
|
-
version,
|
|
43
|
-
language: "javascript"
|
|
44
|
-
} };
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
//#endregion
|
|
48
|
-
export { getContextProperties };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.mjs","names":["packageJson"],"sources":["../../../src/core/runtime/context.ts"],"sourcesContent":["import { type IResult, UAParser } from \"@ua-parser-js/pro-enterprise\";\nimport { Effect } from \"effect\";\n\nimport packageJson from \"../../../package.json\" with { type: \"json\" };\n\ninterface ScreenProperties {\n viewport: {\n viewport_width: number;\n viewport_height: number;\n };\n screen: {\n screen_height: number;\n screen_width: number;\n };\n}\n\ninterface CaptureSourceProperties {\n sdk: {\n name: string;\n version: string;\n language: string;\n };\n}\n\nexport type ContextProperties = ScreenProperties &\n CaptureSourceProperties &\n IResult &\n Record<string, unknown>;\n\nexport function getContextProperties(): Effect.Effect<ContextProperties> {\n return Effect.gen(function* () {\n if (typeof window === \"undefined\") {\n throw new Error(\n \"getContextProperties can only be called in the browser environment\"\n );\n }\n\n const userAgent = window.navigator.userAgent;\n const parser = UAParser(userAgent);\n\n const result = (yield* Effect.sync(() =>\n parser.withClientHints()\n )) as IResult;\n\n const browser = (yield* Effect.sync(() => {\n if (!result.browser) {\n return null;\n }\n return result.browser.withFeatureCheck();\n })) as IResult[\"browser\"] | null;\n\n return {\n ...result,\n ...(browser ? { browser } : {}),\n ...getScreenProperties(),\n ...getCaptureSourceProperties(),\n } satisfies ContextProperties;\n });\n}\n\nfunction getScreenProperties(): ScreenProperties {\n if (typeof window === \"undefined\") {\n throw new Error(\n \"getScreenProperties can only be called in the browser environment\"\n );\n }\n\n return {\n viewport: {\n viewport_width: window.innerWidth,\n viewport_height: window.innerHeight,\n },\n screen: {\n screen_height: window.screen.height,\n screen_width: window.screen.width,\n },\n };\n}\n\nfunction getCaptureSourceProperties(): CaptureSourceProperties {\n if (typeof window === \"undefined\") {\n throw new Error(\n \"getCaptureSourceProperties can only be called in the browser environment\"\n );\n }\n\n const { name, version } = packageJson;\n\n return {\n sdk: {\n name,\n version,\n language: \"javascript\",\n },\n };\n}\n"],"mappings":";;;;;AA6BA,SAAgB,uBAAyD;AACvE,QAAO,OAAO,IAAI,aAAa;AAC7B,MAAI,OAAO,WAAW,YACpB,OAAM,IAAI,MACR,qEACD;EAGH,MAAM,YAAY,OAAO,UAAU;EACnC,MAAM,SAAS,SAAS,UAAU;EAElC,MAAM,SAAU,OAAO,OAAO,WAC5B,OAAO,iBAAiB,CACzB;EAED,MAAM,UAAW,OAAO,OAAO,WAAW;AACxC,OAAI,CAAC,OAAO,QACV,QAAO;AAET,UAAO,OAAO,QAAQ,kBAAkB;IACxC;AAEF,SAAO;GACL,GAAG;GACH,GAAI,UAAU,EAAE,SAAS,GAAG,EAAE;GAC9B,GAAG,qBAAqB;GACxB,GAAG,4BAA4B;GAChC;GACD;;AAGJ,SAAS,sBAAwC;AAC/C,KAAI,OAAO,WAAW,YACpB,OAAM,IAAI,MACR,oEACD;AAGH,QAAO;EACL,UAAU;GACR,gBAAgB,OAAO;GACvB,iBAAiB,OAAO;GACzB;EACD,QAAQ;GACN,eAAe,OAAO,OAAO;GAC7B,cAAc,OAAO,OAAO;GAC7B;EACF;;AAGH,SAAS,6BAAsD;AAC7D,KAAI,OAAO,WAAW,YACpB,OAAM,IAAI,MACR,2EACD;CAGH,MAAM,EAAE,MAAM,YAAYA;AAE1B,QAAO,EACL,KAAK;EACH;EACA;EACA,UAAU;EACX,EACF"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Config } from "@interfere/types/sdk/config";
|
|
2
|
-
|
|
3
|
-
//#region src/core/runtime/ingest-target.d.ts
|
|
4
|
-
interface IngestTarget {
|
|
5
|
-
url: string;
|
|
6
|
-
headers: Headers;
|
|
7
|
-
}
|
|
8
|
-
declare function deriveIngestTarget(config: Config): IngestTarget;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { IngestTarget, deriveIngestTarget };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-target.d.mts","names":[],"sources":["../../../src/core/runtime/ingest-target.ts"],"sourcesContent":[],"mappings":";;;UAEiB,YAAA;;EAAA,OAAA,EAEN,OAFkB;AAK7B;iBAAgB,kBAAA,SAA2B,SAAS"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
//#region src/core/runtime/ingest-target.ts
|
|
2
|
-
function deriveIngestTarget(config) {
|
|
3
|
-
if ("proxyUrl" in config) return {
|
|
4
|
-
url: config.proxyUrl,
|
|
5
|
-
headers: new Headers([["Content-Type", "application/json"]])
|
|
6
|
-
};
|
|
7
|
-
if ("ingestUrl" in config && "surfaceToken" in config) return {
|
|
8
|
-
url: config.ingestUrl,
|
|
9
|
-
headers: new Headers([["Content-Type", "application/json"], ["x-interfere-surface", config.surfaceToken]])
|
|
10
|
-
};
|
|
11
|
-
throw new Error("Invalid SDK config: must provide proxyUrl or (ingestUrl + surfaceToken)");
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
//#endregion
|
|
15
|
-
export { deriveIngestTarget };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-target.mjs","names":[],"sources":["../../../src/core/runtime/ingest-target.ts"],"sourcesContent":["import type { Config } from \"@interfere/types/sdk/config\";\n\nexport interface IngestTarget {\n url: string;\n headers: Headers;\n}\n\nexport function deriveIngestTarget(config: Config): IngestTarget {\n if (\"proxyUrl\" in config) {\n return {\n url: config.proxyUrl,\n headers: new Headers([[\"Content-Type\", \"application/json\"]]),\n };\n }\n\n if (\"ingestUrl\" in config && \"surfaceToken\" in config) {\n return {\n url: config.ingestUrl,\n headers: new Headers([\n [\"Content-Type\", \"application/json\"],\n [\"x-interfere-surface\", config.surfaceToken],\n ]),\n };\n }\n\n throw new Error(\n \"Invalid SDK config: must provide proxyUrl or (ingestUrl + surfaceToken)\"\n );\n}\n"],"mappings":";AAOA,SAAgB,mBAAmB,QAA8B;AAC/D,KAAI,cAAc,OAChB,QAAO;EACL,KAAK,OAAO;EACZ,SAAS,IAAI,QAAQ,CAAC,CAAC,gBAAgB,mBAAmB,CAAC,CAAC;EAC7D;AAGH,KAAI,eAAe,UAAU,kBAAkB,OAC7C,QAAO;EACL,KAAK,OAAO;EACZ,SAAS,IAAI,QAAQ,CACnB,CAAC,gBAAgB,mBAAmB,EACpC,CAAC,uBAAuB,OAAO,aAAa,CAC7C,CAAC;EACH;AAGH,OAAM,IAAI,MACR,0EACD"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
//#region src/core/runtime/native-fetch.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Native Fetch Store
|
|
4
|
-
*
|
|
5
|
-
* Captures the pristine `fetch` API before any plugins patch it.
|
|
6
|
-
* This prevents infinite loops when the SDK's own requests fail:
|
|
7
|
-
*
|
|
8
|
-
* 1. Errors plugin patches window.fetch to capture failed requests
|
|
9
|
-
* 2. If SDK uses patched fetch and it fails → captured as error → tries to send → loop
|
|
10
|
-
* 3. By using native fetch for SDK requests, we avoid this recursion
|
|
11
|
-
*
|
|
12
|
-
* This module MUST be imported early, before any plugins initialize.
|
|
13
|
-
*
|
|
14
|
-
* @see https://fetch.spec.whatwg.org/#http-network-or-cache-fetch
|
|
15
|
-
*/
|
|
16
|
-
declare const nativeFetch: typeof fetch;
|
|
17
|
-
/**
|
|
18
|
-
* Symbol used to mark SDK-internal errors.
|
|
19
|
-
* When an error has this property set to true, the errors plugin should NOT
|
|
20
|
-
* capture it to avoid infinite recursion.
|
|
21
|
-
*/
|
|
22
|
-
declare const INTERFERE_INTERNAL_SYMBOL: unique symbol;
|
|
23
|
-
/**
|
|
24
|
-
* Checks if an error is marked as an SDK-internal error.
|
|
25
|
-
*/
|
|
26
|
-
declare function isInterfereInternalError(error: unknown): boolean;
|
|
27
|
-
/**
|
|
28
|
-
* Marks an error as SDK-internal to prevent recursive capture.
|
|
29
|
-
*/
|
|
30
|
-
declare function markAsInterfereInternal<T extends Error>(error: T): T;
|
|
31
|
-
//#endregion
|
|
32
|
-
export { INTERFERE_INTERNAL_SYMBOL, isInterfereInternalError, markAsInterfereInternal, nativeFetch };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"native-fetch.d.mts","names":[],"sources":["../../../src/core/runtime/native-fetch.ts"],"sourcesContent":[],"mappings":";;AAkCA;AAOA;AAKA;AAYA;;;;;;;;;;cAxBa,oBAAW;;;;;;cAOX;;;;iBAKG,wBAAA;;;;iBAYA,kCAAkC,cAAc,IAAI"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
//#region src/core/runtime/native-fetch.ts
|
|
2
|
-
/**
|
|
3
|
-
* Native Fetch Store
|
|
4
|
-
*
|
|
5
|
-
* Captures the pristine `fetch` API before any plugins patch it.
|
|
6
|
-
* This prevents infinite loops when the SDK's own requests fail:
|
|
7
|
-
*
|
|
8
|
-
* 1. Errors plugin patches window.fetch to capture failed requests
|
|
9
|
-
* 2. If SDK uses patched fetch and it fails → captured as error → tries to send → loop
|
|
10
|
-
* 3. By using native fetch for SDK requests, we avoid this recursion
|
|
11
|
-
*
|
|
12
|
-
* This module MUST be imported early, before any plugins initialize.
|
|
13
|
-
*
|
|
14
|
-
* @see https://fetch.spec.whatwg.org/#http-network-or-cache-fetch
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* The pristine, un-patched fetch function.
|
|
18
|
-
* Captured at module load time, before any plugins can patch window.fetch.
|
|
19
|
-
*/
|
|
20
|
-
function getPristineFetch() {
|
|
21
|
-
if (typeof window !== "undefined") return window.fetch.bind(window);
|
|
22
|
-
if (typeof globalThis.fetch === "function") return globalThis.fetch.bind(globalThis);
|
|
23
|
-
return (() => {
|
|
24
|
-
throw new Error("fetch is not available in this environment");
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
const nativeFetch = getPristineFetch();
|
|
28
|
-
/**
|
|
29
|
-
* Symbol used to mark SDK-internal errors.
|
|
30
|
-
* When an error has this property set to true, the errors plugin should NOT
|
|
31
|
-
* capture it to avoid infinite recursion.
|
|
32
|
-
*/
|
|
33
|
-
const INTERFERE_INTERNAL_SYMBOL = Symbol.for("__interfere__");
|
|
34
|
-
/**
|
|
35
|
-
* Checks if an error is marked as an SDK-internal error.
|
|
36
|
-
*/
|
|
37
|
-
function isInterfereInternalError(error) {
|
|
38
|
-
return error !== null && typeof error === "object" && INTERFERE_INTERNAL_SYMBOL in error && error[INTERFERE_INTERNAL_SYMBOL] === true;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Marks an error as SDK-internal to prevent recursive capture.
|
|
42
|
-
*/
|
|
43
|
-
function markAsInterfereInternal(error) {
|
|
44
|
-
error[INTERFERE_INTERNAL_SYMBOL] = true;
|
|
45
|
-
return error;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
//#endregion
|
|
49
|
-
export { INTERFERE_INTERNAL_SYMBOL, isInterfereInternalError, markAsInterfereInternal, nativeFetch };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"native-fetch.mjs","names":[],"sources":["../../../src/core/runtime/native-fetch.ts"],"sourcesContent":["/**\n * Native Fetch Store\n *\n * Captures the pristine `fetch` API before any plugins patch it.\n * This prevents infinite loops when the SDK's own requests fail:\n *\n * 1. Errors plugin patches window.fetch to capture failed requests\n * 2. If SDK uses patched fetch and it fails → captured as error → tries to send → loop\n * 3. By using native fetch for SDK requests, we avoid this recursion\n *\n * This module MUST be imported early, before any plugins initialize.\n *\n * @see https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\n */\n\n/**\n * The pristine, un-patched fetch function.\n * Captured at module load time, before any plugins can patch window.fetch.\n */\nfunction getPristineFetch(): typeof globalThis.fetch {\n if (typeof window !== \"undefined\") {\n return window.fetch.bind(window);\n }\n\n if (typeof globalThis.fetch === \"function\") {\n return globalThis.fetch.bind(globalThis);\n }\n\n // Fallback for environments without fetch (will fail at runtime if used)\n return (() => {\n throw new Error(\"fetch is not available in this environment\");\n }) as typeof globalThis.fetch;\n}\n\nexport const nativeFetch = getPristineFetch();\n\n/**\n * Symbol used to mark SDK-internal errors.\n * When an error has this property set to true, the errors plugin should NOT\n * capture it to avoid infinite recursion.\n */\nexport const INTERFERE_INTERNAL_SYMBOL = Symbol.for(\"__interfere__\");\n\n/**\n * Checks if an error is marked as an SDK-internal error.\n */\nexport function isInterfereInternalError(error: unknown): boolean {\n return (\n error !== null &&\n typeof error === \"object\" &&\n INTERFERE_INTERNAL_SYMBOL in error &&\n (error as Record<symbol, unknown>)[INTERFERE_INTERNAL_SYMBOL] === true\n );\n}\n\n/**\n * Marks an error as SDK-internal to prevent recursive capture.\n */\nexport function markAsInterfereInternal<T extends Error>(error: T): T {\n (error as T & { [INTERFERE_INTERNAL_SYMBOL]: boolean })[\n INTERFERE_INTERNAL_SYMBOL\n ] = true;\n return error;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,SAAS,mBAA4C;AACnD,KAAI,OAAO,WAAW,YACpB,QAAO,OAAO,MAAM,KAAK,OAAO;AAGlC,KAAI,OAAO,WAAW,UAAU,WAC9B,QAAO,WAAW,MAAM,KAAK,WAAW;AAI1C,eAAc;AACZ,QAAM,IAAI,MAAM,6CAA6C;;;AAIjE,MAAa,cAAc,kBAAkB;;;;;;AAO7C,MAAa,4BAA4B,OAAO,IAAI,gBAAgB;;;;AAKpE,SAAgB,yBAAyB,OAAyB;AAChE,QACE,UAAU,QACV,OAAO,UAAU,YACjB,6BAA6B,SAC5B,MAAkC,+BAA+B;;;;;AAOtE,SAAgB,wBAAyC,OAAa;AACpE,CAAC,MACC,6BACE;AACJ,QAAO"}
|