Add four stub analytics adapters (metrica, ctm, variocube, dynatrace)

This commit is contained in:
2026-04-15 00:13:49 +03:00
parent e95781a069
commit fe31bbfb65
4 changed files with 72 additions and 0 deletions
@@ -0,0 +1,18 @@
import type { AnalyticsAdapter, AnalyticsProps } from "../types.js";
import { emitEvent } from "../sink.js";
export class CtmAdapter implements AnalyticsAdapter {
readonly name = "ctm" as const;
async load(): Promise<void> {
// Stub: real CTM script loads in Phase 2A
}
track(event: string, props: AnalyticsProps = {}): void {
emitEvent({ kind: "track", name: event, props, provider: this.name, ts: new Date().toISOString() });
}
page(url: string, props: AnalyticsProps = {}): void {
emitEvent({ kind: "page", name: url, props, provider: this.name, ts: new Date().toISOString() });
}
}
@@ -0,0 +1,18 @@
import type { AnalyticsAdapter, AnalyticsProps } from "../types.js";
import { emitEvent } from "../sink.js";
export class DynatraceAdapter implements AnalyticsAdapter {
readonly name = "dynatrace" as const;
async load(): Promise<void> {
// Stub: real Dynatrace (Key-Astrom) script loads in Phase 2A
}
track(event: string, props: AnalyticsProps = {}): void {
emitEvent({ kind: "track", name: event, props, provider: this.name, ts: new Date().toISOString() });
}
page(url: string, props: AnalyticsProps = {}): void {
emitEvent({ kind: "page", name: url, props, provider: this.name, ts: new Date().toISOString() });
}
}
@@ -0,0 +1,18 @@
import type { AnalyticsAdapter, AnalyticsProps } from "../types.js";
import { emitEvent } from "../sink.js";
export class MetricaAdapter implements AnalyticsAdapter {
readonly name = "metrica" as const;
async load(): Promise<void> {
// Stub: real Yandex.Metrica script loads in Phase 2A (after A7 resolves)
}
track(event: string, props: AnalyticsProps = {}): void {
emitEvent({ kind: "track", name: event, props, provider: this.name, ts: new Date().toISOString() });
}
page(url: string, props: AnalyticsProps = {}): void {
emitEvent({ kind: "page", name: url, props, provider: this.name, ts: new Date().toISOString() });
}
}
@@ -0,0 +1,18 @@
import type { AnalyticsAdapter, AnalyticsProps } from "../types.js";
import { emitEvent } from "../sink.js";
export class VariocubeAdapter implements AnalyticsAdapter {
readonly name = "variocube" as const;
async load(): Promise<void> {
// Stub: real Variocube script loads in Phase 2A
}
track(event: string, props: AnalyticsProps = {}): void {
emitEvent({ kind: "track", name: event, props, provider: this.name, ts: new Date().toISOString() });
}
page(url: string, props: AnalyticsProps = {}): void {
emitEvent({ kind: "page", name: url, props, provider: this.name, ts: new Date().toISOString() });
}
}