@interfere/react 0.1.0-alpha.6 → 0.2.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +38 -64
- package/dist/client.d.mts +0 -8
- package/dist/client.d.mts.map +0 -1
- package/dist/client.mjs +0 -14
- package/dist/client.mjs.map +0 -1
- package/dist/core/events/define-event.d.mts +0 -12
- package/dist/core/events/define-event.d.mts.map +0 -1
- package/dist/core/events/define-event.mjs +0 -39
- package/dist/core/events/define-event.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 -130
- 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/define-plugin.d.mts +0 -43
- package/dist/core/plugins/define-plugin.d.mts.map +0 -1
- package/dist/core/plugins/define-plugin.mjs +0 -23
- package/dist/core/plugins/define-plugin.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/ai-summary-plugin-api.d.mts +0 -18
- package/dist/core/plugins/impl/ai-summary/ai-summary-plugin-api.d.mts.map +0 -1
- package/dist/core/plugins/impl/ai-summary/ai-summary-plugin-api.mjs +0 -17
- package/dist/core/plugins/impl/ai-summary/ai-summary-plugin-api.mjs.map +0 -1
- package/dist/core/plugins/impl/ai-summary/plugin.d.mts +0 -6
- package/dist/core/plugins/impl/ai-summary/plugin.d.mts.map +0 -1
- package/dist/core/plugins/impl/ai-summary/plugin.mjs +0 -151
- package/dist/core/plugins/impl/ai-summary/plugin.mjs.map +0 -1
- package/dist/core/plugins/impl/errors/errors-plugin-api.d.mts +0 -17
- package/dist/core/plugins/impl/errors/errors-plugin-api.d.mts.map +0 -1
- package/dist/core/plugins/impl/errors/errors-plugin-api.mjs +0 -58
- package/dist/core/plugins/impl/errors/errors-plugin-api.mjs.map +0 -1
- package/dist/core/plugins/impl/errors/logic.d.mts +0 -15
- package/dist/core/plugins/impl/errors/logic.d.mts.map +0 -1
- package/dist/core/plugins/impl/errors/logic.mjs +0 -48
- package/dist/core/plugins/impl/errors/logic.mjs.map +0 -1
- package/dist/core/plugins/impl/errors/patches.d.mts +0 -13
- package/dist/core/plugins/impl/errors/patches.d.mts.map +0 -1
- package/dist/core/plugins/impl/errors/patches.mjs +0 -43
- package/dist/core/plugins/impl/errors/patches.mjs.map +0 -1
- package/dist/core/plugins/impl/errors/plugin.d.mts +0 -9
- package/dist/core/plugins/impl/errors/plugin.d.mts.map +0 -1
- package/dist/core/plugins/impl/errors/plugin.mjs +0 -91
- package/dist/core/plugins/impl/errors/plugin.mjs.map +0 -1
- package/dist/core/plugins/impl/page-events/page-events-plugin-api.d.mts +0 -19
- package/dist/core/plugins/impl/page-events/page-events-plugin-api.d.mts.map +0 -1
- package/dist/core/plugins/impl/page-events/page-events-plugin-api.mjs +0 -38
- package/dist/core/plugins/impl/page-events/page-events-plugin-api.mjs.map +0 -1
- package/dist/core/plugins/impl/page-events/plugin.d.mts +0 -6
- package/dist/core/plugins/impl/page-events/plugin.d.mts.map +0 -1
- package/dist/core/plugins/impl/page-events/plugin.mjs +0 -95
- package/dist/core/plugins/impl/page-events/plugin.mjs.map +0 -1
- package/dist/core/plugins/impl/rage-click/plugin.d.mts +0 -6
- package/dist/core/plugins/impl/rage-click/plugin.d.mts.map +0 -1
- package/dist/core/plugins/impl/rage-click/plugin.mjs +0 -38
- package/dist/core/plugins/impl/rage-click/plugin.mjs.map +0 -1
- package/dist/core/plugins/impl/rage-click/rage-click.layer.d.mts +0 -9
- package/dist/core/plugins/impl/rage-click/rage-click.layer.d.mts.map +0 -1
- package/dist/core/plugins/impl/rage-click/rage-click.layer.mjs +0 -35
- package/dist/core/plugins/impl/rage-click/rage-click.layer.mjs.map +0 -1
- package/dist/core/plugins/impl/rage-click/rage-click.service.d.mts +0 -16
- package/dist/core/plugins/impl/rage-click/rage-click.service.d.mts.map +0 -1
- package/dist/core/plugins/impl/rage-click/rage-click.service.mjs +0 -7
- package/dist/core/plugins/impl/rage-click/rage-click.service.mjs.map +0 -1
- package/dist/core/plugins/impl/rage-click/rage-click.test-layer.d.mts +0 -16
- package/dist/core/plugins/impl/rage-click/rage-click.test-layer.d.mts.map +0 -1
- package/dist/core/plugins/impl/rage-click/rage-click.test-layer.mjs +0 -18
- package/dist/core/plugins/impl/rage-click/rage-click.test-layer.mjs.map +0 -1
- package/dist/core/plugins/impl/replay/plugin.d.mts +0 -9
- package/dist/core/plugins/impl/replay/plugin.d.mts.map +0 -1
- package/dist/core/plugins/impl/replay/plugin.mjs +0 -83
- package/dist/core/plugins/impl/replay/plugin.mjs.map +0 -1
- package/dist/core/plugins/impl/replay/replay-plugin-api.d.mts +0 -18
- package/dist/core/plugins/impl/replay/replay-plugin-api.d.mts.map +0 -1
- package/dist/core/plugins/impl/replay/replay-plugin-api.mjs +0 -50
- package/dist/core/plugins/impl/replay/replay-plugin-api.mjs.map +0 -1
- package/dist/core/plugins/impl/server-tracing/plugin.d.mts +0 -13
- package/dist/core/plugins/impl/server-tracing/plugin.d.mts.map +0 -1
- package/dist/core/plugins/impl/server-tracing/plugin.mjs +0 -75
- package/dist/core/plugins/impl/server-tracing/plugin.mjs.map +0 -1
- package/dist/core/plugins/impl/server-tracing/server-tracing-plugin-api.d.mts +0 -16
- package/dist/core/plugins/impl/server-tracing/server-tracing-plugin-api.d.mts.map +0 -1
- package/dist/core/plugins/impl/server-tracing/server-tracing-plugin-api.mjs +0 -17
- package/dist/core/plugins/impl/server-tracing/server-tracing-plugin-api.mjs.map +0 -1
- package/dist/core/plugins/impl/server-tracing/tracing-logic.d.mts +0 -29
- package/dist/core/plugins/impl/server-tracing/tracing-logic.d.mts.map +0 -1
- package/dist/core/plugins/impl/server-tracing/tracing-logic.mjs +0 -55
- package/dist/core/plugins/impl/server-tracing/tracing-logic.mjs.map +0 -1
- package/dist/core/plugins/plugin-loader.d.mts +0 -75
- package/dist/core/plugins/plugin-loader.d.mts.map +0 -1
- package/dist/core/plugins/plugin-loader.mjs +0 -79
- package/dist/core/plugins/plugin-loader.mjs.map +0 -1
- package/dist/core/plugins/services/event-capture.d.mts +0 -12
- package/dist/core/plugins/services/event-capture.d.mts.map +0 -1
- package/dist/core/plugins/services/event-capture.layer.d.mts +0 -11
- package/dist/core/plugins/services/event-capture.layer.d.mts.map +0 -1
- package/dist/core/plugins/services/event-capture.layer.mjs +0 -79
- package/dist/core/plugins/services/event-capture.layer.mjs.map +0 -1
- package/dist/core/plugins/services/event-capture.mjs +0 -7
- package/dist/core/plugins/services/event-capture.mjs.map +0 -1
- package/dist/core/plugins/services/event-capture.test-layer.d.mts +0 -17
- package/dist/core/plugins/services/event-capture.test-layer.d.mts.map +0 -1
- package/dist/core/plugins/services/event-capture.test-layer.mjs +0 -21
- package/dist/core/plugins/services/event-capture.test-layer.mjs.map +0 -1
- package/dist/core/plugins/services/plugin-config.d.mts +0 -11
- package/dist/core/plugins/services/plugin-config.d.mts.map +0 -1
- package/dist/core/plugins/services/plugin-config.mjs +0 -7
- package/dist/core/plugins/services/plugin-config.mjs.map +0 -1
- package/dist/core/plugins/services/plugin-config.test-layer.d.mts +0 -60
- package/dist/core/plugins/services/plugin-config.test-layer.d.mts.map +0 -1
- package/dist/core/plugins/services/plugin-config.test-layer.mjs +0 -8
- package/dist/core/plugins/services/plugin-config.test-layer.mjs.map +0 -1
- package/dist/core/plugins/services/plugin-logger.d.mts +0 -14
- package/dist/core/plugins/services/plugin-logger.d.mts.map +0 -1
- package/dist/core/plugins/services/plugin-logger.mjs +0 -7
- package/dist/core/plugins/services/plugin-logger.mjs.map +0 -1
- package/dist/core/plugins/services/plugin-logger.test-layer.d.mts +0 -18
- package/dist/core/plugins/services/plugin-logger.test-layer.d.mts.map +0 -1
- package/dist/core/plugins/services/plugin-logger.test-layer.mjs +0 -28
- package/dist/core/plugins/services/plugin-logger.test-layer.mjs.map +0 -1
- package/dist/core/plugins/services/plugin-runtime.d.mts +0 -10
- package/dist/core/plugins/services/plugin-runtime.d.mts.map +0 -1
- package/dist/core/plugins/services/plugin-runtime.mjs +0 -7
- package/dist/core/plugins/services/plugin-runtime.mjs.map +0 -1
- package/dist/core/plugins/services/plugin-runtime.test-layer.d.mts +0 -16
- package/dist/core/plugins/services/plugin-runtime.test-layer.d.mts.map +0 -1
- package/dist/core/plugins/services/plugin-runtime.test-layer.mjs +0 -21
- package/dist/core/plugins/services/plugin-runtime.test-layer.mjs.map +0 -1
- package/dist/core/plugins/services/session-info.d.mts +0 -11
- package/dist/core/plugins/services/session-info.d.mts.map +0 -1
- package/dist/core/plugins/services/session-info.mjs +0 -7
- package/dist/core/plugins/services/session-info.mjs.map +0 -1
- package/dist/core/plugins/services/session-info.test-layer.d.mts +0 -18
- package/dist/core/plugins/services/session-info.test-layer.d.mts.map +0 -1
- package/dist/core/plugins/services/session-info.test-layer.mjs +0 -20
- package/dist/core/plugins/services/session-info.test-layer.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 -33
- package/dist/core/runtime/config.mjs.map +0 -1
- package/dist/core/runtime/context.d.mts +0 -50
- package/dist/core/runtime/context.d.mts.map +0 -1
- package/dist/core/runtime/context.mjs +0 -46
- 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 -26
- package/dist/core/schemas.d.mts.map +0 -1
- package/dist/core/schemas.mjs +0 -1
- package/dist/effect/errors.d.mts +0 -22
- package/dist/effect/errors.d.mts.map +0 -1
- package/dist/effect/errors.mjs +0 -17
- package/dist/effect/errors.mjs.map +0 -1
- package/dist/effect/layers/circuit-breaker.layer.d.mts +0 -9
- package/dist/effect/layers/circuit-breaker.layer.d.mts.map +0 -1
- package/dist/effect/layers/circuit-breaker.layer.mjs +0 -9
- package/dist/effect/layers/circuit-breaker.layer.mjs.map +0 -1
- package/dist/effect/layers/circuit-breaker.layer.test-layer.d.mts +0 -18
- package/dist/effect/layers/circuit-breaker.layer.test-layer.d.mts.map +0 -1
- package/dist/effect/layers/circuit-breaker.layer.test-layer.mjs +0 -43
- package/dist/effect/layers/circuit-breaker.layer.test-layer.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 -118
- package/dist/effect/layers/http.layer.mjs.map +0 -1
- package/dist/effect/layers/queue.layer.d.mts +0 -31
- package/dist/effect/layers/queue.layer.d.mts.map +0 -1
- package/dist/effect/layers/queue.layer.mjs +0 -257
- package/dist/effect/layers/queue.layer.mjs.map +0 -1
- package/dist/effect/layers/queue.layer.test-layer.d.mts +0 -19
- package/dist/effect/layers/queue.layer.test-layer.d.mts.map +0 -1
- package/dist/effect/layers/queue.layer.test-layer.mjs +0 -44
- package/dist/effect/layers/queue.layer.test-layer.mjs.map +0 -1
- package/dist/effect/layers/session.layer.d.mts +0 -34
- package/dist/effect/layers/session.layer.d.mts.map +0 -1
- package/dist/effect/layers/session.layer.mjs +0 -127
- 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/test-utils.d.mts +0 -19
- package/dist/effect/layers/test-utils.d.mts.map +0 -1
- package/dist/effect/layers/test-utils.mjs +0 -32
- package/dist/effect/layers/test-utils.mjs.map +0 -1
- package/dist/effect/runtime-services.d.mts +0 -23
- package/dist/effect/runtime-services.d.mts.map +0 -1
- package/dist/effect/runtime-services.mjs +0 -79
- 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 -121
- 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 -103
- package/dist/package.mjs.map +0 -1
- package/dist/server/auth.d.mts +0 -15
- package/dist/server/auth.d.mts.map +0 -1
- package/dist/server/auth.mjs +0 -45
- package/dist/server/auth.mjs.map +0 -1
- package/dist/server/capture.d.mts +0 -34
- package/dist/server/capture.d.mts.map +0 -1
- package/dist/server/capture.mjs +0 -172
- package/dist/server/capture.mjs.map +0 -1
package/dist/effect/tags.d.mts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { Context } from "effect";
|
|
2
|
-
|
|
3
|
-
//#region src/effect/tags.d.ts
|
|
4
|
-
declare const ConfigTag_base: Context.TagClass<ConfigTag, "@interfere/react/Config", ({
|
|
5
|
-
features: {
|
|
6
|
-
errors?: boolean | undefined;
|
|
7
|
-
replay?: boolean | undefined;
|
|
8
|
-
rageClick?: boolean | undefined;
|
|
9
|
-
aiSummary?: boolean | undefined;
|
|
10
|
-
pageEvents?: boolean | undefined;
|
|
11
|
-
serverTracing?: boolean | undefined;
|
|
12
|
-
};
|
|
13
|
-
metadata: {
|
|
14
|
-
buildId: string | null;
|
|
15
|
-
releaseId: string | null;
|
|
16
|
-
environment: "development" | "preview" | "production" | null;
|
|
17
|
-
runtime: "edge" | "browser" | "node" | null;
|
|
18
|
-
};
|
|
19
|
-
batch: {
|
|
20
|
-
size: number;
|
|
21
|
-
ms: number;
|
|
22
|
-
};
|
|
23
|
-
offline: {
|
|
24
|
-
enabled: boolean;
|
|
25
|
-
maxQueueSize: number;
|
|
26
|
-
};
|
|
27
|
-
} & {
|
|
28
|
-
proxyUrl: string;
|
|
29
|
-
}) | ({
|
|
30
|
-
features: {
|
|
31
|
-
errors?: boolean | undefined;
|
|
32
|
-
replay?: boolean | undefined;
|
|
33
|
-
rageClick?: boolean | undefined;
|
|
34
|
-
aiSummary?: boolean | undefined;
|
|
35
|
-
pageEvents?: boolean | undefined;
|
|
36
|
-
serverTracing?: boolean | undefined;
|
|
37
|
-
};
|
|
38
|
-
metadata: {
|
|
39
|
-
buildId: string | null;
|
|
40
|
-
releaseId: string | null;
|
|
41
|
-
environment: "development" | "preview" | "production" | null;
|
|
42
|
-
runtime: "edge" | "browser" | "node" | null;
|
|
43
|
-
};
|
|
44
|
-
batch: {
|
|
45
|
-
size: number;
|
|
46
|
-
ms: number;
|
|
47
|
-
};
|
|
48
|
-
offline: {
|
|
49
|
-
enabled: boolean;
|
|
50
|
-
maxQueueSize: number;
|
|
51
|
-
};
|
|
52
|
-
} & {
|
|
53
|
-
ingestUrl: string;
|
|
54
|
-
surfaceToken: string;
|
|
55
|
-
})>;
|
|
56
|
-
declare class ConfigTag extends ConfigTag_base {}
|
|
57
|
-
//#endregion
|
|
58
|
-
export { ConfigTag };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tags.d.mts","names":[],"sources":["../../src/effect/tags.ts"],"mappings":";;;cAEiC,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEpB,SAAA,SAAkB,cAAA"}
|
package/dist/effect/tags.mjs
DELETED
package/dist/effect/tags.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tags.mjs","names":[],"sources":["../../src/effect/tags.ts"],"sourcesContent":["import type { Config } from \"@interfere/types/sdk/config\";\n\nimport { Context } from \"effect\";\n\nexport class ConfigTag extends Context.Tag(\"@interfere/react/Config\")<\n ConfigTag,\n Config\n>() {}\n"],"mappings":";;;AAIA,IAAa,YAAb,cAA+B,QAAQ,IAAI,0BAA0B,EAGlE,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { PluginDef } from "../core/plugins/define-plugin.mjs";
|
|
2
|
-
import { Config } from "@interfere/types/sdk/config";
|
|
3
|
-
|
|
4
|
-
//#region src/hooks/use-runtime-and-plugins.d.ts
|
|
5
|
-
declare function useRuntimeAndPlugins(config: Config, plugins?: readonly PluginDef[]): Readonly<Record<string, unknown>>;
|
|
6
|
-
//#endregion
|
|
7
|
-
export { useRuntimeAndPlugins };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-runtime-and-plugins.d.mts","names":[],"sources":["../../src/hooks/use-runtime-and-plugins.ts"],"mappings":";;;;iBAiGgB,oBAAA,CACd,MAAA,EAAQ,MAAA,EACR,OAAA,YAAmB,SAAA,KAClB,QAAA,CAAS,MAAA"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { ContextServiceLive } from "../effect/layers/context.layer.mjs";
|
|
4
|
-
import { ConfigTag } from "../effect/tags.mjs";
|
|
5
|
-
import { CircuitBreakerLive } from "../effect/layers/circuit-breaker.layer.mjs";
|
|
6
|
-
import { deriveIngestTarget } from "../core/runtime/ingest-target.mjs";
|
|
7
|
-
import { HttpServiceLive } from "../effect/layers/http.layer.mjs";
|
|
8
|
-
import { QueueServiceLive, QueueServiceTag } from "../effect/layers/queue.layer.mjs";
|
|
9
|
-
import { SessionServiceLive } from "../effect/layers/session.layer.mjs";
|
|
10
|
-
import { EventCaptureLive } from "../core/plugins/services/event-capture.layer.mjs";
|
|
11
|
-
import { getRuntime, initConfig } from "../core/runtime/config.mjs";
|
|
12
|
-
import { closeSDK, flushQueue, isSDKInitialized, runWithSDK, setSDKRuntime } from "../effect/runtime-services.mjs";
|
|
13
|
-
import { loadAndSetupPluginsEffect } from "../core/plugins/plugin-loader.mjs";
|
|
14
|
-
import { Cause, Effect, Exit, Layer, Runtime, Scope } from "effect";
|
|
15
|
-
import { configSchema } from "@interfere/types/sdk/config";
|
|
16
|
-
import { useEffect, useRef, useState } from "react";
|
|
17
|
-
|
|
18
|
-
//#region src/hooks/use-runtime-and-plugins.ts
|
|
19
|
-
const createSDKLayer = (config) => {
|
|
20
|
-
const configWithRuntime = {
|
|
21
|
-
...config,
|
|
22
|
-
runtime: getRuntime()
|
|
23
|
-
};
|
|
24
|
-
const configLayer = Layer.succeed(ConfigTag, configWithRuntime);
|
|
25
|
-
const contextLayer = ContextServiceLive;
|
|
26
|
-
const httpLayer = HttpServiceLive(configWithRuntime);
|
|
27
|
-
const sessionLayer = SessionServiceLive;
|
|
28
|
-
const queueLayer = QueueServiceLive.pipe(Layer.provide(configLayer), Layer.provide(httpLayer), Layer.provide(CircuitBreakerLive));
|
|
29
|
-
const baseLayer = Layer.mergeAll(configLayer, contextLayer, httpLayer, sessionLayer, queueLayer);
|
|
30
|
-
return EventCaptureLive.pipe(Layer.provideMerge(baseLayer));
|
|
31
|
-
};
|
|
32
|
-
const initRuntimeServices = async (input) => {
|
|
33
|
-
if (isSDKInitialized()) return;
|
|
34
|
-
const config = configSchema.parse(input);
|
|
35
|
-
initConfig(config);
|
|
36
|
-
const scope = await Effect.runPromise(Scope.make());
|
|
37
|
-
const runtime = await Effect.runPromise(Layer.toRuntime(createSDKLayer(config)).pipe(Effect.provideService(Scope.Scope, scope)));
|
|
38
|
-
setSDKRuntime(scope, runtime);
|
|
39
|
-
await Runtime.runPromise(runtime)(Effect.gen(function* () {
|
|
40
|
-
yield* Effect.logDebug("Runtime initialized successfully");
|
|
41
|
-
yield* Effect.forkDaemon(Effect.gen(function* () {
|
|
42
|
-
yield* (yield* QueueServiceTag).startBatchProcessor().pipe(Effect.provideService(Scope.Scope, scope));
|
|
43
|
-
}));
|
|
44
|
-
}));
|
|
45
|
-
};
|
|
46
|
-
function useRuntimeAndPlugins(config, plugins) {
|
|
47
|
-
const [pluginApis, setPluginApis] = useState({});
|
|
48
|
-
const pluginHandlersRef = useRef([]);
|
|
49
|
-
const initRef = useRef(false);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
if (typeof window === "undefined" || initRef.current) return;
|
|
52
|
-
initRef.current = true;
|
|
53
|
-
const runCleanup = Effect.fn("useRuntimeAndPlugins.runCleanup")(function* (cleanups) {
|
|
54
|
-
const TIMEOUT_MS = 1500;
|
|
55
|
-
yield* Effect.tryPromise({
|
|
56
|
-
try: () => flushQueue(TIMEOUT_MS),
|
|
57
|
-
catch: (error) => Effect.logDebug("Bounded flush timed out during cleanup", {
|
|
58
|
-
timeoutMs: TIMEOUT_MS,
|
|
59
|
-
error: String(error)
|
|
60
|
-
})
|
|
61
|
-
}).pipe(Effect.ignore);
|
|
62
|
-
for (const dispose of cleanups) {
|
|
63
|
-
yield* Effect.logTrace(`Running cleanup for plugin ${dispose.name}`);
|
|
64
|
-
yield* Effect.try({
|
|
65
|
-
try: () => dispose(),
|
|
66
|
-
catch: (error) => Effect.logDebug("Plugin cleanup failed", { error: String(error) })
|
|
67
|
-
}).pipe(Effect.ignore);
|
|
68
|
-
}
|
|
69
|
-
yield* Effect.logTrace("Closing SDK");
|
|
70
|
-
yield* Effect.promise(() => closeSDK());
|
|
71
|
-
});
|
|
72
|
-
const initialize = async () => {
|
|
73
|
-
try {
|
|
74
|
-
await initRuntimeServices(config);
|
|
75
|
-
deriveIngestTarget(config);
|
|
76
|
-
} catch (error) {
|
|
77
|
-
console.error("[Interfere SDK] Failed to initialize:", error);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const result = await runWithSDK(Effect.gen(function* () {
|
|
81
|
-
const exit = yield* Effect.exit(loadAndSetupPluginsEffect(config, plugins));
|
|
82
|
-
if (Exit.isFailure(exit)) {
|
|
83
|
-
const cause = exit.cause;
|
|
84
|
-
yield* Effect.logFatal("Failed to load plugins", {
|
|
85
|
-
cause: Cause.pretty(cause),
|
|
86
|
-
features: config.features,
|
|
87
|
-
userPluginCount: Array.isArray(plugins) ? plugins.length : 0
|
|
88
|
-
});
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const { cleanups, apis, keys } = exit.value;
|
|
92
|
-
yield* Effect.logDebug(`${keys.size} plugins loaded, ${Object.keys(apis).length} APIs exposed`, {
|
|
93
|
-
plugins: Array.from(keys),
|
|
94
|
-
apis: Object.keys(apis)
|
|
95
|
-
});
|
|
96
|
-
yield* (yield* QueueServiceTag).setReady(true);
|
|
97
|
-
return {
|
|
98
|
-
cleanups,
|
|
99
|
-
apis
|
|
100
|
-
};
|
|
101
|
-
}));
|
|
102
|
-
if (result) {
|
|
103
|
-
pluginHandlersRef.current = [...result.cleanups];
|
|
104
|
-
setPluginApis(result.apis);
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
initialize();
|
|
108
|
-
return () => {
|
|
109
|
-
if (isSDKInitialized()) runWithSDK(runCleanup(pluginHandlersRef.current)).catch((error) => {
|
|
110
|
-
console.error("[Interfere SDK] Provider cleanup failed:", error);
|
|
111
|
-
});
|
|
112
|
-
else Effect.runPromise(runCleanup(pluginHandlersRef.current)).catch((error) => {
|
|
113
|
-
console.error("[Interfere SDK] Provider cleanup failed:", error);
|
|
114
|
-
});
|
|
115
|
-
};
|
|
116
|
-
}, [config, plugins]);
|
|
117
|
-
return pluginApis;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
//#endregion
|
|
121
|
-
export { useRuntimeAndPlugins };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-runtime-and-plugins.mjs","names":[],"sources":["../../src/hooks/use-runtime-and-plugins.ts"],"sourcesContent":["\"use client\";\n\nimport type { Config } from \"@interfere/types/sdk/config\";\nimport { configSchema } from \"@interfere/types/sdk/config\";\n\nimport { Cause, Effect, Exit, Layer, Runtime, Scope } from \"effect\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport type { PluginDef } from \"../core/plugins/define-plugin.js\";\nimport { loadAndSetupPluginsEffect } from \"../core/plugins/plugin-loader.js\";\nimport { EventCaptureLive } from \"../core/plugins/services/event-capture.layer.js\";\nimport { getRuntime, initConfig } from \"../core/runtime/config.js\";\nimport { deriveIngestTarget } from \"../core/runtime/ingest-target.js\";\nimport { CircuitBreakerLive } from \"../effect/layers/circuit-breaker.layer.js\";\nimport { ContextServiceLive } from \"../effect/layers/context.layer.js\";\nimport { HttpServiceLive } from \"../effect/layers/http.layer.js\";\nimport {\n QueueServiceLive,\n QueueServiceTag,\n} from \"../effect/layers/queue.layer.js\";\nimport { SessionServiceLive } from \"../effect/layers/session.layer.js\";\nimport {\n closeSDK,\n flushQueue,\n isSDKInitialized,\n runWithSDK,\n setSDKRuntime,\n} from \"../effect/runtime-services.js\";\nimport { ConfigTag } from \"../effect/tags.js\";\n\nconst createSDKLayer = (config: Config) => {\n const configWithRuntime = {\n ...config,\n runtime: getRuntime(),\n };\n\n const configLayer = Layer.succeed(ConfigTag, configWithRuntime);\n const contextLayer = ContextServiceLive;\n const httpLayer = HttpServiceLive(configWithRuntime);\n const sessionLayer = SessionServiceLive;\n\n const queueLayer = QueueServiceLive.pipe(\n Layer.provide(configLayer),\n Layer.provide(httpLayer),\n Layer.provide(CircuitBreakerLive)\n );\n\n const baseLayer = Layer.mergeAll(\n configLayer,\n contextLayer,\n httpLayer,\n sessionLayer,\n queueLayer\n );\n\n return EventCaptureLive.pipe(Layer.provideMerge(baseLayer));\n};\n\nconst initRuntimeServices = async (input: unknown): Promise<void> => {\n if (isSDKInitialized()) {\n return;\n }\n\n const config = configSchema.parse(input);\n\n // Seed config for runtime consumers that don't use Effect tags\n initConfig(config);\n\n const scope = await Effect.runPromise(Scope.make());\n\n const runtime = await Effect.runPromise(\n Layer.toRuntime(createSDKLayer(config)).pipe(\n Effect.provideService(Scope.Scope, scope)\n )\n );\n\n setSDKRuntime(scope, runtime);\n\n await Runtime.runPromise(runtime)(\n Effect.gen(function* () {\n yield* Effect.logDebug(\"Runtime initialized successfully\");\n\n // Start batch processor\n yield* Effect.forkDaemon(\n Effect.gen(function* () {\n const queue = yield* QueueServiceTag;\n yield* queue\n .startBatchProcessor()\n .pipe(Effect.provideService(Scope.Scope, scope));\n })\n );\n })\n );\n};\n\n// removed Effect wrapper; plugin loading now handled with runPromise + try/catch in initialize\n\nexport function useRuntimeAndPlugins(\n config: Config,\n plugins?: readonly PluginDef[]\n): Readonly<Record<string, unknown>> {\n const [pluginApis, setPluginApis] = useState<\n Readonly<Record<string, unknown>>\n >({});\n const pluginHandlersRef = useRef<Array<() => void>>([]);\n const initRef = useRef(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || initRef.current) {\n return;\n }\n\n initRef.current = true;\n\n const runCleanup = Effect.fn(\"useRuntimeAndPlugins.runCleanup\")(function* (\n cleanups: Array<() => void>\n ) {\n const TIMEOUT_MS = 1500;\n\n yield* Effect.tryPromise({\n try: () => flushQueue(TIMEOUT_MS),\n catch: (error) =>\n Effect.logDebug(\"Bounded flush timed out during cleanup\", {\n timeoutMs: TIMEOUT_MS,\n error: String(error),\n }),\n }).pipe(Effect.ignore);\n\n for (const dispose of cleanups) {\n yield* Effect.logTrace(`Running cleanup for plugin ${dispose.name}`);\n\n yield* Effect.try({\n try: () => dispose(),\n catch: (error) =>\n Effect.logDebug(\"Plugin cleanup failed\", {\n error: String(error),\n }),\n }).pipe(Effect.ignore);\n }\n\n yield* Effect.logTrace(\"Closing SDK\");\n\n yield* Effect.promise(() => closeSDK());\n });\n\n const initialize = async () => {\n try {\n await initRuntimeServices(config);\n // Early ingest target validation (fail fast) without singleton reliance\n deriveIngestTarget(config);\n } catch (error) {\n console.error(\"[Interfere SDK] Failed to initialize:\", error);\n return;\n }\n\n const result = await runWithSDK(\n Effect.gen(function* () {\n const exit = yield* Effect.exit(\n loadAndSetupPluginsEffect(config, plugins)\n );\n\n if (Exit.isFailure(exit)) {\n const cause = exit.cause;\n\n yield* Effect.logFatal(\"Failed to load plugins\", {\n cause: Cause.pretty(cause),\n features: config.features,\n userPluginCount: Array.isArray(plugins) ? plugins.length : 0,\n });\n\n return;\n }\n\n const { cleanups, apis, keys } = exit.value;\n\n yield* Effect.logDebug(\n `${keys.size} plugins loaded, ${Object.keys(apis).length} APIs exposed`,\n {\n plugins: Array.from(keys),\n apis: Object.keys(apis),\n }\n );\n\n // Signal queue readiness now that plugins have loaded\n const queue = yield* QueueServiceTag;\n yield* queue.setReady(true);\n\n return { cleanups, apis };\n })\n );\n\n if (result) {\n pluginHandlersRef.current = [...result.cleanups];\n\n setPluginApis(result.apis);\n }\n };\n\n // biome-ignore lint/complexity/noVoid: fire-and-forget initialization\n void initialize();\n\n return () => {\n if (isSDKInitialized()) {\n runWithSDK(runCleanup(pluginHandlersRef.current)).catch((error) => {\n console.error(\"[Interfere SDK] Provider cleanup failed:\", error);\n });\n } else {\n // If SDK never initialized, run cleanup directly\n Effect.runPromise(runCleanup(pluginHandlersRef.current)).catch(\n (error) => {\n console.error(\"[Interfere SDK] Provider cleanup failed:\", error);\n }\n );\n }\n };\n }, [config, plugins]);\n\n return pluginApis;\n}\n"],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
//#region src/hooks/use-session.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* React hook to get the current session ID.
|
|
4
|
-
* Automatically handles cleanup on unmount.
|
|
5
|
-
*
|
|
6
|
-
* @returns Object with sessionId (string | null) and loading state
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* function MyComponent() {
|
|
10
|
-
* const { sessionId, loading, error } = useSession();
|
|
11
|
-
*
|
|
12
|
-
* if (loading) return <div>Loading session...</div>;
|
|
13
|
-
* if (error) return <div>Error: {error.message}</div>;
|
|
14
|
-
*
|
|
15
|
-
* return <div>Session ID: {sessionId}</div>;
|
|
16
|
-
* }
|
|
17
|
-
*/
|
|
18
|
-
declare function useSession(): {
|
|
19
|
-
sessionId: string | null;
|
|
20
|
-
loading: boolean;
|
|
21
|
-
error: Error | null;
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* React hook to execute a callback when the session is ready.
|
|
25
|
-
* Automatically handles cleanup on unmount.
|
|
26
|
-
*
|
|
27
|
-
* @param callback Function to call with the session ID
|
|
28
|
-
* @param deps Dependency array for the callback
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* function MyComponent() {
|
|
32
|
-
* useSessionReady((sessionId) => {
|
|
33
|
-
* console.log('Session is ready:', sessionId);
|
|
34
|
-
* // Send analytics event, initialize tracking, etc.
|
|
35
|
-
* }, []);
|
|
36
|
-
* }
|
|
37
|
-
*/
|
|
38
|
-
declare function useSessionReady(callback: (sessionId: string) => void, deps?: React.DependencyList): void;
|
|
39
|
-
//#endregion
|
|
40
|
-
export { useSession, useSessionReady };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-session.d.mts","names":[],"sources":["../../src/hooks/use-session.ts"],"mappings":";;AAsBA;;;;;;;;;;AA2EA;;;;;iBA3EgB,UAAA,CAAA;;;SAAU,KAAA;AAAA;;;;;;;;;;;;;;;;iBA2EV,eAAA,CACd,QAAA,GAAW,SAAA,mBACX,IAAA,GAAM,KAAA,CAAM,cAAA"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { SessionServiceTag } from "../effect/layers/session.layer.mjs";
|
|
2
|
-
import { runWithSDK } from "../effect/runtime-services.mjs";
|
|
3
|
-
import { Effect, Option } from "effect";
|
|
4
|
-
import { useEffect, useState } from "react";
|
|
5
|
-
|
|
6
|
-
//#region src/hooks/use-session.ts
|
|
7
|
-
/**
|
|
8
|
-
* React hook to get the current session ID.
|
|
9
|
-
* Automatically handles cleanup on unmount.
|
|
10
|
-
*
|
|
11
|
-
* @returns Object with sessionId (string | null) and loading state
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* function MyComponent() {
|
|
15
|
-
* const { sessionId, loading, error } = useSession();
|
|
16
|
-
*
|
|
17
|
-
* if (loading) return <div>Loading session...</div>;
|
|
18
|
-
* if (error) return <div>Error: {error.message}</div>;
|
|
19
|
-
*
|
|
20
|
-
* return <div>Session ID: {sessionId}</div>;
|
|
21
|
-
* }
|
|
22
|
-
*/
|
|
23
|
-
function useSession() {
|
|
24
|
-
const [sessionId, setSessionId] = useState(null);
|
|
25
|
-
const [loading, setLoading] = useState(true);
|
|
26
|
-
const [error, setError] = useState(null);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
runWithSDK(Effect.gen(function* () {
|
|
29
|
-
const sidOpt = yield* (yield* SessionServiceTag).getSessionId();
|
|
30
|
-
if (Option.isSome(sidOpt)) {
|
|
31
|
-
setSessionId(sidOpt.value);
|
|
32
|
-
setLoading(false);
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
return false;
|
|
36
|
-
})).then((has) => {
|
|
37
|
-
if (has) return;
|
|
38
|
-
});
|
|
39
|
-
const controller = new AbortController();
|
|
40
|
-
runWithSDK(Effect.gen(function* () {
|
|
41
|
-
return yield* (yield* SessionServiceTag).whenSessionReady({
|
|
42
|
-
signal: controller.signal,
|
|
43
|
-
timeout: 3e4
|
|
44
|
-
});
|
|
45
|
-
})).then((id) => {
|
|
46
|
-
setSessionId(id);
|
|
47
|
-
setLoading(false);
|
|
48
|
-
}).catch((err) => {
|
|
49
|
-
if (!controller.signal.aborted) {
|
|
50
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
51
|
-
setLoading(false);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
return () => {
|
|
55
|
-
controller.abort();
|
|
56
|
-
};
|
|
57
|
-
}, []);
|
|
58
|
-
return {
|
|
59
|
-
sessionId,
|
|
60
|
-
loading,
|
|
61
|
-
error
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* React hook to execute a callback when the session is ready.
|
|
66
|
-
* Automatically handles cleanup on unmount.
|
|
67
|
-
*
|
|
68
|
-
* @param callback Function to call with the session ID
|
|
69
|
-
* @param deps Dependency array for the callback
|
|
70
|
-
*
|
|
71
|
-
* @example
|
|
72
|
-
* function MyComponent() {
|
|
73
|
-
* useSessionReady((sessionId) => {
|
|
74
|
-
* console.log('Session is ready:', sessionId);
|
|
75
|
-
* // Send analytics event, initialize tracking, etc.
|
|
76
|
-
* }, []);
|
|
77
|
-
* }
|
|
78
|
-
*/
|
|
79
|
-
function useSessionReady(callback, deps = []) {
|
|
80
|
-
useEffect(() => {
|
|
81
|
-
const controller = new AbortController();
|
|
82
|
-
runWithSDK(Effect.gen(function* () {
|
|
83
|
-
return yield* (yield* SessionServiceTag).whenSessionReady({ signal: controller.signal });
|
|
84
|
-
})).then((sessionId) => {
|
|
85
|
-
if (!controller.signal.aborted) callback(sessionId);
|
|
86
|
-
}).catch((err) => {
|
|
87
|
-
if (!controller.signal.aborted) runWithSDK(Effect.logError("Failed to get session", { error: String(err) }));
|
|
88
|
-
});
|
|
89
|
-
return () => {
|
|
90
|
-
controller.abort();
|
|
91
|
-
};
|
|
92
|
-
}, deps);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
//#endregion
|
|
96
|
-
export { useSession, useSessionReady };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-session.mjs","names":[],"sources":["../../src/hooks/use-session.ts"],"sourcesContent":["import { Effect, Option } from \"effect\";\nimport { useEffect, useState } from \"react\";\n\nimport { SessionServiceTag } from \"../effect/layers/session.layer.js\";\nimport { runWithSDK } from \"../effect/runtime-services.js\";\n\n/**\n * React hook to get the current session ID.\n * Automatically handles cleanup on unmount.\n *\n * @returns Object with sessionId (string | null) and loading state\n *\n * @example\n * function MyComponent() {\n * const { sessionId, loading, error } = useSession();\n *\n * if (loading) return <div>Loading session...</div>;\n * if (error) return <div>Error: {error.message}</div>;\n *\n * return <div>Session ID: {sessionId}</div>;\n * }\n */\nexport function useSession() {\n const [sessionId, setSessionId] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n // Check if session already exists\n // Try to read session id from SessionService\n runWithSDK(\n Effect.gen(function* () {\n const session = yield* SessionServiceTag;\n const sidOpt = yield* session.getSessionId();\n if (Option.isSome(sidOpt)) {\n setSessionId(sidOpt.value);\n setLoading(false);\n return true as const;\n }\n return false as const;\n })\n ).then((has) => {\n if (has) {\n return;\n }\n });\n\n // Create AbortController for cleanup\n const controller = new AbortController();\n\n // Wait for session to be ready\n runWithSDK(\n Effect.gen(function* () {\n const session = yield* SessionServiceTag;\n const sid = yield* session.whenSessionReady({\n signal: controller.signal,\n timeout: 30_000,\n });\n return sid;\n })\n )\n .then((id) => {\n setSessionId(id);\n setLoading(false);\n })\n .catch((err) => {\n // Only set error if not aborted (aborted = component unmounted)\n if (!controller.signal.aborted) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setLoading(false);\n }\n });\n\n // Cleanup function - abort the polling on unmount\n return () => {\n controller.abort();\n };\n }, []);\n\n return { sessionId, loading, error };\n}\n\n/**\n * React hook to execute a callback when the session is ready.\n * Automatically handles cleanup on unmount.\n *\n * @param callback Function to call with the session ID\n * @param deps Dependency array for the callback\n *\n * @example\n * function MyComponent() {\n * useSessionReady((sessionId) => {\n * console.log('Session is ready:', sessionId);\n * // Send analytics event, initialize tracking, etc.\n * }, []);\n * }\n */\nexport function useSessionReady(\n callback: (sessionId: string) => void,\n deps: React.DependencyList = []\n) {\n useEffect(() => {\n const controller = new AbortController();\n\n runWithSDK(\n Effect.gen(function* () {\n const session = yield* SessionServiceTag;\n const sid = yield* session.whenSessionReady({\n signal: controller.signal,\n });\n return sid;\n })\n )\n .then((sessionId: string) => {\n if (!controller.signal.aborted) {\n callback(sessionId);\n }\n })\n .catch((err: unknown) => {\n // Silently ignore abort errors (component unmounted)\n if (!controller.signal.aborted) {\n // biome-ignore lint/complexity/noVoid: necessary to avoid blocking\n void runWithSDK(\n Effect.logError(\"Failed to get session\", {\n error: String(err),\n })\n );\n }\n });\n\n return () => {\n controller.abort();\n };\n // biome-ignore lint/correctness/useExhaustiveDependencies: we want to pass the deps to the effect\n }, deps);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,aAAa;CAC3B,MAAM,CAAC,WAAW,gBAAgB,SAAwB,KAAK;CAC/D,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,OAAO,YAAY,SAAuB,KAAK;AAEtD,iBAAgB;AAGd,aACE,OAAO,IAAI,aAAa;GAEtB,MAAM,SAAS,QADC,OAAO,mBACO,cAAc;AAC5C,OAAI,OAAO,OAAO,OAAO,EAAE;AACzB,iBAAa,OAAO,MAAM;AAC1B,eAAW,MAAM;AACjB,WAAO;;AAET,UAAO;IACP,CACH,CAAC,MAAM,QAAQ;AACd,OAAI,IACF;IAEF;EAGF,MAAM,aAAa,IAAI,iBAAiB;AAGxC,aACE,OAAO,IAAI,aAAa;AAMtB,UAJY,QADI,OAAO,mBACI,iBAAiB;IAC1C,QAAQ,WAAW;IACnB,SAAS;IACV,CAAC;IAEF,CACH,CACE,MAAM,OAAO;AACZ,gBAAa,GAAG;AAChB,cAAW,MAAM;IACjB,CACD,OAAO,QAAQ;AAEd,OAAI,CAAC,WAAW,OAAO,SAAS;AAC9B,aAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,CAAC;AAC7D,eAAW,MAAM;;IAEnB;AAGJ,eAAa;AACX,cAAW,OAAO;;IAEnB,EAAE,CAAC;AAEN,QAAO;EAAE;EAAW;EAAS;EAAO;;;;;;;;;;;;;;;;;AAkBtC,SAAgB,gBACd,UACA,OAA6B,EAAE,EAC/B;AACA,iBAAgB;EACd,MAAM,aAAa,IAAI,iBAAiB;AAExC,aACE,OAAO,IAAI,aAAa;AAKtB,UAHY,QADI,OAAO,mBACI,iBAAiB,EAC1C,QAAQ,WAAW,QACpB,CAAC;IAEF,CACH,CACE,MAAM,cAAsB;AAC3B,OAAI,CAAC,WAAW,OAAO,QACrB,UAAS,UAAU;IAErB,CACD,OAAO,QAAiB;AAEvB,OAAI,CAAC,WAAW,OAAO,QAErB,CAAK,WACH,OAAO,SAAS,yBAAyB,EACvC,OAAO,OAAO,IAAI,EACnB,CAAC,CACH;IAEH;AAEJ,eAAa;AACX,cAAW,OAAO;;IAGnB,KAAK"}
|
package/dist/package.mjs
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
//#region package.json
|
|
2
|
-
var name = "@interfere/react";
|
|
3
|
-
var version = "0.1.0-alpha.6";
|
|
4
|
-
var package_default = {
|
|
5
|
-
name,
|
|
6
|
-
version,
|
|
7
|
-
license: "MIT",
|
|
8
|
-
description: "Build apps that never break.",
|
|
9
|
-
keywords: [
|
|
10
|
-
"observability",
|
|
11
|
-
"typescript",
|
|
12
|
-
"react",
|
|
13
|
-
"logging",
|
|
14
|
-
"error-tracking",
|
|
15
|
-
"session-replay"
|
|
16
|
-
],
|
|
17
|
-
homepage: "https://interfere.com",
|
|
18
|
-
bugs: { "url": "mailto:support@interfere.com" },
|
|
19
|
-
author: "Interfere <support@interfere.com> (https://interfere.com)",
|
|
20
|
-
repository: {
|
|
21
|
-
"type": "git",
|
|
22
|
-
"url": "git+https://github.com/interfere-inc/interfere.git",
|
|
23
|
-
"directory": "src/packages/public/react"
|
|
24
|
-
},
|
|
25
|
-
files: ["dist"],
|
|
26
|
-
type: "module",
|
|
27
|
-
main: "./dist/index.mjs",
|
|
28
|
-
types: "./dist/index.d.mts",
|
|
29
|
-
typesVersions: { "*": {
|
|
30
|
-
"server/*": ["dist/server/*.d.mts"],
|
|
31
|
-
"*": ["dist/*.d.mts"]
|
|
32
|
-
} },
|
|
33
|
-
exports: {
|
|
34
|
-
"./provider": {
|
|
35
|
-
"@source": "./src/provider.tsx",
|
|
36
|
-
"types": "./dist/provider.d.mts",
|
|
37
|
-
"default": "./dist/provider.mjs"
|
|
38
|
-
},
|
|
39
|
-
"./server/*": {
|
|
40
|
-
"@source": "./src/server/*.ts",
|
|
41
|
-
"types": "./dist/server/*.d.mts",
|
|
42
|
-
"default": "./dist/server/*.mjs"
|
|
43
|
-
},
|
|
44
|
-
"./core/runtime/*": {
|
|
45
|
-
"@source": "./src/core/runtime/*.ts",
|
|
46
|
-
"types": "./dist/core/runtime/*.d.mts",
|
|
47
|
-
"default": "./dist/core/runtime/*.mjs"
|
|
48
|
-
},
|
|
49
|
-
"./core/*": {
|
|
50
|
-
"@source": "./src/core/*.ts",
|
|
51
|
-
"types": "./dist/core/*.d.mts",
|
|
52
|
-
"default": "./dist/core/*.mjs"
|
|
53
|
-
},
|
|
54
|
-
"./*": {
|
|
55
|
-
"@source": "./src/*.ts",
|
|
56
|
-
"types": "./dist/*.d.mts",
|
|
57
|
-
"default": "./dist/*.mjs"
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
sideEffects: false,
|
|
61
|
-
publishConfig: { "access": "public" },
|
|
62
|
-
scripts: {
|
|
63
|
-
"build": "tsdown",
|
|
64
|
-
"dev": "tsdown --watch",
|
|
65
|
-
"typecheck": "tsc --noEmit --incremental"
|
|
66
|
-
},
|
|
67
|
-
dependencies: {
|
|
68
|
-
"@effect/platform": "catalog:",
|
|
69
|
-
"@interfere/constants": "workspace:*",
|
|
70
|
-
"@interfere/effect-utils": "workspace:*",
|
|
71
|
-
"@interfere/types": "workspace:*",
|
|
72
|
-
"@rrweb/packer": "catalog:",
|
|
73
|
-
"@ua-parser-js/pro-enterprise": "catalog:",
|
|
74
|
-
"effect": "catalog:",
|
|
75
|
-
"nanoid": "catalog:",
|
|
76
|
-
"rrweb": "catalog:",
|
|
77
|
-
"uuid": "catalog:",
|
|
78
|
-
"zod": "catalog:"
|
|
79
|
-
},
|
|
80
|
-
peerDependencies: {
|
|
81
|
-
"react": ">=18",
|
|
82
|
-
"react-dom": ">=18"
|
|
83
|
-
},
|
|
84
|
-
devDependencies: {
|
|
85
|
-
"@effect/vitest": "catalog:",
|
|
86
|
-
"@interfere/typescript-config": "workspace:*",
|
|
87
|
-
"@interfere/vitest-config": "workspace:*",
|
|
88
|
-
"@rrweb/types": "catalog:",
|
|
89
|
-
"@types/node": "catalog:",
|
|
90
|
-
"@types/react": "catalog:",
|
|
91
|
-
"@types/react-dom": "catalog:",
|
|
92
|
-
"@vitest/coverage-v8": "catalog:",
|
|
93
|
-
"jsdom": "catalog:",
|
|
94
|
-
"react": "catalog:",
|
|
95
|
-
"react-dom": "catalog:",
|
|
96
|
-
"tsdown": "catalog:",
|
|
97
|
-
"typescript": "catalog:",
|
|
98
|
-
"vitest": "catalog:"
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
//#endregion
|
|
103
|
-
export { package_default as default, name, version };
|
package/dist/package.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package.mjs","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
|
package/dist/server/auth.d.mts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
//#region src/server/auth.d.ts
|
|
2
|
-
type FetchImpl = typeof fetch;
|
|
3
|
-
declare function exchangeSecretForPublicToken(apiUrl: string, apiKey: string, surfaceSlug: string | undefined, fetchImpl?: FetchImpl): Promise<{
|
|
4
|
-
token: string;
|
|
5
|
-
surfaceSlug: string;
|
|
6
|
-
} | null>;
|
|
7
|
-
declare function getPublicToken(params: {
|
|
8
|
-
apiUrl: string;
|
|
9
|
-
apiKey: string;
|
|
10
|
-
surfaceSlug?: string;
|
|
11
|
-
cacheTtlMs?: number;
|
|
12
|
-
fetchImpl?: FetchImpl;
|
|
13
|
-
}): Promise<string | null>;
|
|
14
|
-
//#endregion
|
|
15
|
-
export { exchangeSecretForPublicToken, getPublicToken };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.mts","names":[],"sources":["../../src/server/auth.ts"],"mappings":";KAAK,SAAA,UAAmB,KAAA;AAAA,iBAOF,4BAAA,CACpB,MAAA,UACA,MAAA,UACA,WAAA,sBACA,SAAA,GAAW,SAAA,GACV,OAAA;EAAU,KAAA;EAAe,WAAA;AAAA;AAAA,iBAuCN,cAAA,CAAe,MAAA;EACnC,MAAA;EACA,MAAA;EACA,WAAA;EACA,UAAA;EACA,SAAA,GAAY,SAAA;AAAA,IACV,OAAA"}
|
package/dist/server/auth.mjs
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
//#region src/server/auth.ts
|
|
2
|
-
async function exchangeSecretForPublicToken(apiUrl, apiKey, surfaceSlug, fetchImpl = fetch) {
|
|
3
|
-
const body = surfaceSlug !== void 0 && surfaceSlug !== "" ? { surfaceSlug } : {};
|
|
4
|
-
const res = await fetchImpl(`${apiUrl}/auth/exchange`, {
|
|
5
|
-
method: "POST",
|
|
6
|
-
headers: {
|
|
7
|
-
"x-api-key": apiKey,
|
|
8
|
-
"Content-Type": "application/json"
|
|
9
|
-
},
|
|
10
|
-
body: JSON.stringify(body)
|
|
11
|
-
});
|
|
12
|
-
if (!res.ok) return null;
|
|
13
|
-
const data = await res.json();
|
|
14
|
-
if (typeof data.publicToken === "string" && data.publicToken.length > 0) {
|
|
15
|
-
const slug = typeof data.surfaceSlug === "string" && data.surfaceSlug.length > 0 ? data.surfaceSlug : surfaceSlug ?? "";
|
|
16
|
-
return {
|
|
17
|
-
token: data.publicToken,
|
|
18
|
-
surfaceSlug: slug
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
const tokenCache = /* @__PURE__ */ new Map();
|
|
24
|
-
function getCacheKey(apiUrl, apiKey, surfaceSlug) {
|
|
25
|
-
return `${apiUrl}::${apiKey}::${surfaceSlug}`;
|
|
26
|
-
}
|
|
27
|
-
async function getPublicToken(params) {
|
|
28
|
-
const { apiUrl, apiKey, surfaceSlug, cacheTtlMs = 36e5, fetchImpl = fetch } = params;
|
|
29
|
-
const now = Date.now();
|
|
30
|
-
const cacheKey = getCacheKey(apiUrl, apiKey, surfaceSlug ?? "");
|
|
31
|
-
const cached = tokenCache.get(cacheKey);
|
|
32
|
-
if (cached && cached.expiresAt > now) return cached.token;
|
|
33
|
-
const result = await exchangeSecretForPublicToken(apiUrl, apiKey, surfaceSlug, fetchImpl);
|
|
34
|
-
if (!result) return null;
|
|
35
|
-
const keyForCache = getCacheKey(apiUrl, apiKey, result.surfaceSlug.length > 0 ? result.surfaceSlug : surfaceSlug ?? "");
|
|
36
|
-
tokenCache.set(keyForCache, {
|
|
37
|
-
token: result.token,
|
|
38
|
-
expiresAt: now + cacheTtlMs
|
|
39
|
-
});
|
|
40
|
-
for (const [key, value] of tokenCache.entries()) if (value.expiresAt <= now) tokenCache.delete(key);
|
|
41
|
-
return result.token;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
//#endregion
|
|
45
|
-
export { exchangeSecretForPublicToken, getPublicToken };
|
package/dist/server/auth.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.mjs","names":[],"sources":["../../src/server/auth.ts"],"sourcesContent":["type FetchImpl = typeof fetch;\n\ninterface ExchangeResponse {\n publicToken: string;\n surfaceSlug?: string;\n}\n\nexport async function exchangeSecretForPublicToken(\n apiUrl: string,\n apiKey: string,\n surfaceSlug: string | undefined,\n fetchImpl: FetchImpl = fetch\n): Promise<{ token: string; surfaceSlug: string } | null> {\n const body =\n surfaceSlug !== undefined && surfaceSlug !== \"\" ? { surfaceSlug } : {};\n\n const res = await fetchImpl(`${apiUrl}/auth/exchange`, {\n method: \"POST\",\n headers: {\n \"x-api-key\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n return null;\n }\n\n const data = (await res.json()) as Partial<ExchangeResponse>;\n if (typeof data.publicToken === \"string\" && data.publicToken.length > 0) {\n const slug =\n typeof data.surfaceSlug === \"string\" && data.surfaceSlug.length > 0\n ? data.surfaceSlug\n : (surfaceSlug ?? \"\");\n return { token: data.publicToken, surfaceSlug: slug };\n }\n\n return null;\n}\n\nconst tokenCache = new Map<string, { token: string; expiresAt: number }>();\n\nfunction getCacheKey(\n apiUrl: string,\n apiKey: string,\n surfaceSlug: string\n): string {\n return `${apiUrl}::${apiKey}::${surfaceSlug}`;\n}\n\nexport async function getPublicToken(params: {\n apiUrl: string;\n apiKey: string;\n surfaceSlug?: string;\n cacheTtlMs?: number;\n fetchImpl?: FetchImpl;\n}): Promise<string | null> {\n const {\n apiUrl,\n apiKey,\n surfaceSlug,\n cacheTtlMs = 3_600_000,\n fetchImpl = fetch,\n } = params;\n\n const now = Date.now();\n const cacheKey = getCacheKey(apiUrl, apiKey, surfaceSlug ?? \"\");\n\n const cached = tokenCache.get(cacheKey);\n if (cached && cached.expiresAt > now) {\n return cached.token;\n }\n\n const result = await exchangeSecretForPublicToken(\n apiUrl,\n apiKey,\n surfaceSlug,\n fetchImpl\n );\n\n if (!result) {\n return null;\n }\n\n const effectiveSlug =\n result.surfaceSlug.length > 0 ? result.surfaceSlug : (surfaceSlug ?? \"\");\n const keyForCache = getCacheKey(apiUrl, apiKey, effectiveSlug);\n tokenCache.set(keyForCache, {\n token: result.token,\n expiresAt: now + cacheTtlMs,\n });\n\n for (const [key, value] of tokenCache.entries()) {\n if (value.expiresAt <= now) {\n tokenCache.delete(key);\n }\n }\n\n return result.token;\n}\n"],"mappings":";AAOA,eAAsB,6BACpB,QACA,QACA,aACA,YAAuB,OACiC;CACxD,MAAM,OACJ,gBAAgB,UAAa,gBAAgB,KAAK,EAAE,aAAa,GAAG,EAAE;CAExE,MAAM,MAAM,MAAM,UAAU,GAAG,OAAO,iBAAiB;EACrD,QAAQ;EACR,SAAS;GACP,aAAa;GACb,gBAAgB;GACjB;EACD,MAAM,KAAK,UAAU,KAAK;EAC3B,CAAC;AAEF,KAAI,CAAC,IAAI,GACP,QAAO;CAGT,MAAM,OAAQ,MAAM,IAAI,MAAM;AAC9B,KAAI,OAAO,KAAK,gBAAgB,YAAY,KAAK,YAAY,SAAS,GAAG;EACvE,MAAM,OACJ,OAAO,KAAK,gBAAgB,YAAY,KAAK,YAAY,SAAS,IAC9D,KAAK,cACJ,eAAe;AACtB,SAAO;GAAE,OAAO,KAAK;GAAa,aAAa;GAAM;;AAGvD,QAAO;;AAGT,MAAM,6BAAa,IAAI,KAAmD;AAE1E,SAAS,YACP,QACA,QACA,aACQ;AACR,QAAO,GAAG,OAAO,IAAI,OAAO,IAAI;;AAGlC,eAAsB,eAAe,QAMV;CACzB,MAAM,EACJ,QACA,QACA,aACA,aAAa,MACb,YAAY,UACV;CAEJ,MAAM,MAAM,KAAK,KAAK;CACtB,MAAM,WAAW,YAAY,QAAQ,QAAQ,eAAe,GAAG;CAE/D,MAAM,SAAS,WAAW,IAAI,SAAS;AACvC,KAAI,UAAU,OAAO,YAAY,IAC/B,QAAO,OAAO;CAGhB,MAAM,SAAS,MAAM,6BACnB,QACA,QACA,aACA,UACD;AAED,KAAI,CAAC,OACH,QAAO;CAKT,MAAM,cAAc,YAAY,QAAQ,QADtC,OAAO,YAAY,SAAS,IAAI,OAAO,cAAe,eAAe,GACT;AAC9D,YAAW,IAAI,aAAa;EAC1B,OAAO,OAAO;EACd,WAAW,MAAM;EAClB,CAAC;AAEF,MAAK,MAAM,CAAC,KAAK,UAAU,WAAW,SAAS,CAC7C,KAAI,MAAM,aAAa,IACrB,YAAW,OAAO,IAAI;AAI1B,QAAO,OAAO"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Config } from "@interfere/types/sdk/config";
|
|
2
|
-
import { Env, Runtime } from "@interfere/types/sdk/runtime";
|
|
3
|
-
import { Envelope } from "@interfere/types/sdk/envelope";
|
|
4
|
-
|
|
5
|
-
//#region src/server/capture.d.ts
|
|
6
|
-
declare function toJsonBytes(obj: unknown): number[];
|
|
7
|
-
/**
|
|
8
|
-
* Session resolution strategy.
|
|
9
|
-
*
|
|
10
|
-
* Attempts to resolve session ID in order of preference:
|
|
11
|
-
* 1. Header: Parse x-interfere-request header (ideal case)
|
|
12
|
-
* 2. AsyncContext: Check AsyncLocalStorage context (for async code paths)
|
|
13
|
-
* 3. Fallback: Generate server-side session ID (breaks continuity - tracked for monitoring)
|
|
14
|
-
*/
|
|
15
|
-
interface SessionResolverDeps {
|
|
16
|
-
/** Get session context from AsyncLocalStorage */
|
|
17
|
-
getAsyncContext?: () => {
|
|
18
|
-
sessionId: string | null;
|
|
19
|
-
requestId: string | null;
|
|
20
|
-
} | undefined;
|
|
21
|
-
}
|
|
22
|
-
type ServerErrorMeta = Pick<Config["metadata"], "buildId" | "releaseId">;
|
|
23
|
-
type ServerErrorEnvelopeInput = ServerErrorMeta & {
|
|
24
|
-
error: unknown;
|
|
25
|
-
request?: Request;
|
|
26
|
-
context?: Record<string, unknown>;
|
|
27
|
-
environment: string | Env;
|
|
28
|
-
runtime?: string | Runtime; /** Optional dependency injection for session resolution */
|
|
29
|
-
sessionResolverDeps?: SessionResolverDeps;
|
|
30
|
-
};
|
|
31
|
-
declare function buildServerErrorEnvelope(input: ServerErrorEnvelopeInput): Envelope;
|
|
32
|
-
declare function sendEnvelopesToIngest(envelopes: Envelope[], ingestUrl: string, surfaceToken: string): Promise<void>;
|
|
33
|
-
//#endregion
|
|
34
|
-
export { ServerErrorEnvelopeInput, SessionResolverDeps, buildServerErrorEnvelope, sendEnvelopesToIngest, toJsonBytes };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.mts","names":[],"sources":["../../src/server/capture.ts"],"mappings":";;;;;iBAmBgB,WAAA,CAAY,GAAA;;AAA5B;;;;;AA8CA;;UAAiB,mBAAA;EAAmB;EAElC,eAAA;IACM,SAAA;IAA0B,SAAA;EAAA;AAAA;AAAA,KAkF7B,eAAA,GAAkB,IAAA,CAAK,MAAA;AAAA,KAEhB,wBAAA,GAA2B,eAAA;EACrC,KAAA;EACA,OAAA,GAAU,OAAA;EACV,OAAA,GAAU,MAAA;EACV,WAAA,WAAsB,GAAA;EACtB,OAAA,YAAmB,OAAA;EAEnB,mBAAA,GAAsB,mBAAA;AAAA;AAAA,iBA6FR,wBAAA,CACd,KAAA,EAAO,wBAAA,GACN,QAAA;AAAA,iBAsDmB,qBAAA,CACpB,SAAA,EAAW,QAAA,IACX,SAAA,UACA,YAAA,WACC,OAAA"}
|