@syntrologie/runtime-sdk 0.2.20 → 1.0.1-canary.0
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/CAPABILITIES.md +211 -0
- package/dist/SmartCanvasElement.js +11 -1
- package/dist/SmartCanvasElement.js.map +1 -1
- package/dist/api.js +26 -12
- package/dist/api.js.map +1 -1
- package/dist/bootstrap.d.ts +16 -2
- package/dist/bootstrap.js +84 -30
- package/dist/bootstrap.js.map +1 -1
- package/dist/configFetcher.js +2 -1
- package/dist/configFetcher.js.map +1 -1
- package/dist/context/ContextManager.d.ts +66 -0
- package/dist/context/ContextManager.js +268 -0
- package/dist/context/ContextManager.js.map +1 -0
- package/dist/context/index.d.ts +7 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/schema.d.ts +360 -0
- package/dist/context/schema.js +50 -0
- package/dist/context/schema.js.map +1 -0
- package/dist/context/types.d.ts +101 -0
- package/dist/context/types.js +8 -0
- package/dist/context/types.js.map +1 -0
- package/dist/decisions/engine.d.ts +43 -0
- package/dist/decisions/engine.js +112 -0
- package/dist/decisions/engine.js.map +1 -0
- package/dist/decisions/index.d.ts +9 -0
- package/dist/decisions/index.js +10 -0
- package/dist/decisions/index.js.map +1 -0
- package/dist/decisions/schema.d.ts +2166 -0
- package/dist/decisions/schema.js +143 -0
- package/dist/decisions/schema.js.map +1 -0
- package/dist/decisions/strategies/rules.d.ts +24 -0
- package/dist/decisions/strategies/rules.js +152 -0
- package/dist/decisions/strategies/rules.js.map +1 -0
- package/dist/decisions/strategies/score.d.ts +10 -0
- package/dist/decisions/strategies/score.js +29 -0
- package/dist/decisions/strategies/score.js.map +1 -0
- package/dist/decisions/types.d.ts +242 -0
- package/dist/decisions/types.js +2 -0
- package/dist/decisions/types.js.map +1 -0
- package/dist/editorLoader.d.ts +10 -0
- package/dist/editorLoader.js +68 -29
- package/dist/editorLoader.js.map +1 -1
- package/dist/events/EventBus.d.ts +59 -0
- package/dist/events/EventBus.js +154 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.js +10 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/normalizers/canvas.d.ts +67 -0
- package/dist/events/normalizers/canvas.js +116 -0
- package/dist/events/normalizers/canvas.js.map +1 -0
- package/dist/events/normalizers/posthog.d.ts +29 -0
- package/dist/events/normalizers/posthog.js +155 -0
- package/dist/events/normalizers/posthog.js.map +1 -0
- package/dist/events/schema.d.ts +70 -0
- package/dist/events/schema.js +30 -0
- package/dist/events/schema.js.map +1 -0
- package/dist/events/types.d.ts +73 -0
- package/dist/events/types.js +41 -0
- package/dist/events/types.js.map +1 -0
- package/dist/hooks/useShadowCanvasConfig.d.ts +5 -1
- package/dist/hooks/useShadowCanvasConfig.js +17 -3
- package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +29 -0
- package/dist/logger.js +81 -0
- package/dist/logger.js.map +1 -0
- package/dist/overlays/schema.d.ts +55 -55
- package/dist/runtime.d.ts +86 -0
- package/dist/runtime.js +132 -0
- package/dist/runtime.js.map +1 -0
- package/dist/smart-canvas.esm.js +11 -11
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +1801 -249
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +12 -11
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +41 -0
- package/dist/state/StateStore.js +170 -0
- package/dist/state/StateStore.js.map +1 -0
- package/dist/state/helpers/cooldowns.d.ts +7 -0
- package/dist/state/helpers/cooldowns.js +31 -0
- package/dist/state/helpers/cooldowns.js.map +1 -0
- package/dist/state/helpers/dismissals.d.ts +7 -0
- package/dist/state/helpers/dismissals.js +34 -0
- package/dist/state/helpers/dismissals.js.map +1 -0
- package/dist/state/helpers/frequency.d.ts +8 -0
- package/dist/state/helpers/frequency.js +43 -0
- package/dist/state/helpers/frequency.js.map +1 -0
- package/dist/state/index.d.ts +7 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/schema.d.ts +49 -0
- package/dist/state/schema.js +25 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/types.d.ts +137 -0
- package/dist/state/types.js +9 -0
- package/dist/state/types.js.map +1 -0
- package/dist/telemetry/adapters/posthog.d.ts +1 -1
- package/dist/telemetry/adapters/posthog.js +1 -1
- package/dist/telemetry/adapters/posthog.js.map +1 -1
- package/dist/token.d.ts +2 -0
- package/dist/token.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/package.json +7 -4
- package/schema/canvas-config.schema.json +205 -0
- package/schema/runtime-context.schema.json +131 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/events/normalizers/canvas.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGhE;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAAY,EACZ,KAA+B;IAE/B,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,IAAI;QACJ,MAAM,EAAE,QAAuB;QAC/B,KAAK;QACL,aAAa,EAAE,oBAAoB;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,iBAAiB,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,iBAAiB,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,OAAsB;IAEtB,OAAO,iBAAiB,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,OAAsB;IAEtB,OAAO,iBAAiB,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,OAAsB;IAEtB,OAAO,iBAAiB,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,QAAgB,EAChB,OAAsB;IAEtB,OAAO,iBAAiB,CAAC,cAAc,CAAC,WAAW,EAAE;QACnD,MAAM;QACN,QAAQ;QACR,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,UAAmB;IAEnB,OAAO,iBAAiB,CAAC,cAAc,CAAC,eAAe,EAAE;QACvD,QAAQ;QACR,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,UAAmB;IAEnB,OAAO,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,EAAE;QACzD,QAAQ;QACR,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,UAAmB,EACnB,SAAkB;IAElB,OAAO,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,EAAE;QACzD,QAAQ;QACR,UAAU;QACV,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,SAAiB,EACjB,SAAkB;IAElB,OAAO,iBAAiB,CAAC,cAAc,CAAC,mBAAmB,EAAE;QAC3D,QAAQ;QACR,SAAS;QACT,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAA+B;IAE/B,8DAA8D;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;IACvE,OAAO,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,aAAa;IACb,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,MAAM,EAAE,iBAAiB;CAC1B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostHog Event Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Transforms PostHog autocapture events into normalized events for the EventBus.
|
|
5
|
+
*/
|
|
6
|
+
import type { NormalizedEvent } from "../types";
|
|
7
|
+
/**
|
|
8
|
+
* PostHog event structure (simplified).
|
|
9
|
+
*/
|
|
10
|
+
interface PostHogEvent {
|
|
11
|
+
event: string;
|
|
12
|
+
properties?: Record<string, unknown>;
|
|
13
|
+
timestamp?: string | number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Normalize a PostHog event into a NormalizedEvent.
|
|
17
|
+
*/
|
|
18
|
+
export declare function normalizePostHogEvent(phEvent: PostHogEvent): NormalizedEvent;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a PostHog event should be normalized.
|
|
21
|
+
* Filters out internal/system events that aren't useful for adaptives.
|
|
22
|
+
*/
|
|
23
|
+
export declare function shouldNormalizeEvent(phEvent: PostHogEvent): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Create a function that hooks into PostHog's onCapture callback
|
|
26
|
+
* and normalizes events into the EventBus.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createPostHogNormalizer(publishFn: (event: NormalizedEvent) => void): (eventName: string, properties?: Record<string, unknown>) => void;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { StandardEvents, EVENT_SCHEMA_VERSION } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Map PostHog event names to normalized event names.
|
|
4
|
+
*/
|
|
5
|
+
const POSTHOG_EVENT_MAP = {
|
|
6
|
+
// Autocapture events
|
|
7
|
+
$autocapture: "ui.click", // Default autocapture is usually clicks
|
|
8
|
+
$click: StandardEvents.UI_CLICK,
|
|
9
|
+
$scroll: StandardEvents.UI_SCROLL,
|
|
10
|
+
$input: StandardEvents.UI_INPUT,
|
|
11
|
+
$change: StandardEvents.UI_CHANGE,
|
|
12
|
+
$submit: StandardEvents.UI_SUBMIT,
|
|
13
|
+
// Navigation events
|
|
14
|
+
$pageview: StandardEvents.NAV_PAGE_VIEW,
|
|
15
|
+
$pageleave: StandardEvents.NAV_PAGE_LEAVE,
|
|
16
|
+
// Session events
|
|
17
|
+
$session_start: "session.start",
|
|
18
|
+
// Identify events
|
|
19
|
+
$identify: "user.identify",
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Extract the normalized event name from a PostHog event.
|
|
23
|
+
*/
|
|
24
|
+
function getEventName(phEvent) {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
const eventName = phEvent.event;
|
|
27
|
+
// Check mapped events
|
|
28
|
+
if (POSTHOG_EVENT_MAP[eventName]) {
|
|
29
|
+
return POSTHOG_EVENT_MAP[eventName];
|
|
30
|
+
}
|
|
31
|
+
// For autocapture, check the element type to determine the action
|
|
32
|
+
if (eventName === "$autocapture") {
|
|
33
|
+
const tagName = (_a = phEvent.properties) === null || _a === void 0 ? void 0 : _a.$tag_name;
|
|
34
|
+
const eventType = (_b = phEvent.properties) === null || _b === void 0 ? void 0 : _b.$event_type;
|
|
35
|
+
if (eventType === "submit")
|
|
36
|
+
return StandardEvents.UI_SUBMIT;
|
|
37
|
+
if (eventType === "change")
|
|
38
|
+
return StandardEvents.UI_CHANGE;
|
|
39
|
+
if (tagName === "input" || tagName === "textarea")
|
|
40
|
+
return StandardEvents.UI_INPUT;
|
|
41
|
+
return StandardEvents.UI_CLICK;
|
|
42
|
+
}
|
|
43
|
+
// For custom events, prefix with "posthog." to namespace them
|
|
44
|
+
if (!eventName.startsWith("$")) {
|
|
45
|
+
return `posthog.${eventName}`;
|
|
46
|
+
}
|
|
47
|
+
// Pass through other $ events as-is but normalized
|
|
48
|
+
return eventName.replace("$", "posthog.");
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extract relevant properties from a PostHog event.
|
|
52
|
+
*/
|
|
53
|
+
function extractProps(phEvent) {
|
|
54
|
+
const props = {};
|
|
55
|
+
const phProps = phEvent.properties || {};
|
|
56
|
+
// Element info
|
|
57
|
+
if (phProps.$tag_name)
|
|
58
|
+
props.tagName = phProps.$tag_name;
|
|
59
|
+
if (phProps.$el_text)
|
|
60
|
+
props.elementText = phProps.$el_text;
|
|
61
|
+
if (phProps.$elements)
|
|
62
|
+
props.elements = phProps.$elements;
|
|
63
|
+
// URL/page info
|
|
64
|
+
if (phProps.$current_url)
|
|
65
|
+
props.url = phProps.$current_url;
|
|
66
|
+
if (phProps.$pathname)
|
|
67
|
+
props.pathname = phProps.$pathname;
|
|
68
|
+
if (phProps.$host)
|
|
69
|
+
props.host = phProps.$host;
|
|
70
|
+
// Device/viewport info
|
|
71
|
+
if (phProps.$viewport_width)
|
|
72
|
+
props.viewportWidth = phProps.$viewport_width;
|
|
73
|
+
if (phProps.$viewport_height)
|
|
74
|
+
props.viewportHeight = phProps.$viewport_height;
|
|
75
|
+
// Session info
|
|
76
|
+
if (phProps.$session_id)
|
|
77
|
+
props.sessionId = phProps.$session_id;
|
|
78
|
+
// Scroll-specific properties
|
|
79
|
+
if (phProps.$scroll_depth)
|
|
80
|
+
props.scrollDepth = phProps.$scroll_depth;
|
|
81
|
+
if (phProps.$scroll_percentage)
|
|
82
|
+
props.scrollPercentage = phProps.$scroll_percentage;
|
|
83
|
+
// Original event name
|
|
84
|
+
props.originalEvent = phEvent.event;
|
|
85
|
+
return props;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Normalize a PostHog event into a NormalizedEvent.
|
|
89
|
+
*/
|
|
90
|
+
export function normalizePostHogEvent(phEvent) {
|
|
91
|
+
// Parse timestamp
|
|
92
|
+
let ts;
|
|
93
|
+
if (typeof phEvent.timestamp === "number") {
|
|
94
|
+
ts = phEvent.timestamp;
|
|
95
|
+
}
|
|
96
|
+
else if (typeof phEvent.timestamp === "string") {
|
|
97
|
+
ts = new Date(phEvent.timestamp).getTime();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
ts = Date.now();
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
ts,
|
|
104
|
+
name: getEventName(phEvent),
|
|
105
|
+
source: "posthog",
|
|
106
|
+
props: extractProps(phEvent),
|
|
107
|
+
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if a PostHog event should be normalized.
|
|
112
|
+
* Filters out internal/system events that aren't useful for adaptives.
|
|
113
|
+
*/
|
|
114
|
+
export function shouldNormalizeEvent(phEvent) {
|
|
115
|
+
const eventName = phEvent.event;
|
|
116
|
+
// Skip internal PostHog events
|
|
117
|
+
const skipEvents = [
|
|
118
|
+
"$feature_flag_called",
|
|
119
|
+
"$feature_flags",
|
|
120
|
+
"$groups",
|
|
121
|
+
"$groupidentify",
|
|
122
|
+
"$set",
|
|
123
|
+
"$set_once",
|
|
124
|
+
"$unset",
|
|
125
|
+
"$create_alias",
|
|
126
|
+
"$capture_metrics",
|
|
127
|
+
"$performance_event",
|
|
128
|
+
"$web_vitals",
|
|
129
|
+
"$exception",
|
|
130
|
+
"$dead_click",
|
|
131
|
+
"$heatmap",
|
|
132
|
+
];
|
|
133
|
+
if (skipEvents.includes(eventName)) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Create a function that hooks into PostHog's onCapture callback
|
|
140
|
+
* and normalizes events into the EventBus.
|
|
141
|
+
*/
|
|
142
|
+
export function createPostHogNormalizer(publishFn) {
|
|
143
|
+
return (eventName, properties) => {
|
|
144
|
+
const phEvent = {
|
|
145
|
+
event: eventName,
|
|
146
|
+
properties,
|
|
147
|
+
timestamp: Date.now(),
|
|
148
|
+
};
|
|
149
|
+
if (shouldNormalizeEvent(phEvent)) {
|
|
150
|
+
const normalizedEvent = normalizePostHogEvent(phEvent);
|
|
151
|
+
publishFn(normalizedEvent);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=posthog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/events/normalizers/posthog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for event validation.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
export declare const EventSourceZ: z.ZodEnum<["posthog", "canvas", "derived"]>;
|
|
6
|
+
export declare const NormalizedEventZ: z.ZodObject<{
|
|
7
|
+
ts: z.ZodNumber;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
source: z.ZodEnum<["posthog", "canvas", "derived"]>;
|
|
10
|
+
props: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
11
|
+
schemaVersion: z.ZodString;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
source: "canvas" | "posthog" | "derived";
|
|
14
|
+
name: string;
|
|
15
|
+
ts: number;
|
|
16
|
+
schemaVersion: string;
|
|
17
|
+
props?: Record<string, unknown> | undefined;
|
|
18
|
+
}, {
|
|
19
|
+
source: "canvas" | "posthog" | "derived";
|
|
20
|
+
name: string;
|
|
21
|
+
ts: number;
|
|
22
|
+
schemaVersion: string;
|
|
23
|
+
props?: Record<string, unknown> | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
export declare const EventFilterZ: z.ZodObject<{
|
|
26
|
+
names: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
27
|
+
patterns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
28
|
+
sources: z.ZodOptional<z.ZodArray<z.ZodEnum<["posthog", "canvas", "derived"]>, "many">>;
|
|
29
|
+
}, "strip", z.ZodTypeAny, {
|
|
30
|
+
names?: string[] | undefined;
|
|
31
|
+
patterns?: string[] | undefined;
|
|
32
|
+
sources?: ("canvas" | "posthog" | "derived")[] | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
names?: string[] | undefined;
|
|
35
|
+
patterns?: string[] | undefined;
|
|
36
|
+
sources?: ("canvas" | "posthog" | "derived")[] | undefined;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Validate a NormalizedEvent object.
|
|
40
|
+
*/
|
|
41
|
+
export declare function validateNormalizedEvent(data: unknown): z.SafeParseReturnType<{
|
|
42
|
+
source: "canvas" | "posthog" | "derived";
|
|
43
|
+
name: string;
|
|
44
|
+
ts: number;
|
|
45
|
+
schemaVersion: string;
|
|
46
|
+
props?: Record<string, unknown> | undefined;
|
|
47
|
+
}, {
|
|
48
|
+
source: "canvas" | "posthog" | "derived";
|
|
49
|
+
name: string;
|
|
50
|
+
ts: number;
|
|
51
|
+
schemaVersion: string;
|
|
52
|
+
props?: Record<string, unknown> | undefined;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Validate an EventFilter object.
|
|
56
|
+
*/
|
|
57
|
+
export declare function validateEventFilter(data: unknown): z.SafeParseReturnType<{
|
|
58
|
+
names?: string[] | undefined;
|
|
59
|
+
patterns?: string[] | undefined;
|
|
60
|
+
sources?: ("canvas" | "posthog" | "derived")[] | undefined;
|
|
61
|
+
}, {
|
|
62
|
+
names?: string[] | undefined;
|
|
63
|
+
patterns?: string[] | undefined;
|
|
64
|
+
sources?: ("canvas" | "posthog" | "derived")[] | undefined;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Type inference from Zod schema.
|
|
68
|
+
*/
|
|
69
|
+
export type NormalizedEventSchema = z.infer<typeof NormalizedEventZ>;
|
|
70
|
+
export type EventFilterSchema = z.infer<typeof EventFilterZ>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for event validation.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
export const EventSourceZ = z.enum(["posthog", "canvas", "derived"]);
|
|
6
|
+
export const NormalizedEventZ = z.object({
|
|
7
|
+
ts: z.number(),
|
|
8
|
+
name: z.string(),
|
|
9
|
+
source: EventSourceZ,
|
|
10
|
+
props: z.record(z.unknown()).optional(),
|
|
11
|
+
schemaVersion: z.string(),
|
|
12
|
+
});
|
|
13
|
+
export const EventFilterZ = z.object({
|
|
14
|
+
names: z.array(z.string()).optional(),
|
|
15
|
+
patterns: z.array(z.string()).optional(),
|
|
16
|
+
sources: z.array(EventSourceZ).optional(),
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Validate a NormalizedEvent object.
|
|
20
|
+
*/
|
|
21
|
+
export function validateNormalizedEvent(data) {
|
|
22
|
+
return NormalizedEventZ.safeParse(data);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validate an EventFilter object.
|
|
26
|
+
*/
|
|
27
|
+
export function validateEventFilter(data) {
|
|
28
|
+
return EventFilterZ.safeParse(data);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/events/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,OAAO,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Bus Types
|
|
3
|
+
*
|
|
4
|
+
* The EventBus provides a normalized event stream that unifies events from
|
|
5
|
+
* PostHog autocapture, Canvas events, and derived behavioral signals.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Event sources in the runtime.
|
|
9
|
+
*/
|
|
10
|
+
export type EventSource = "posthog" | "canvas" | "derived";
|
|
11
|
+
/**
|
|
12
|
+
* Normalized event structure for the event bus.
|
|
13
|
+
*/
|
|
14
|
+
export interface NormalizedEvent {
|
|
15
|
+
/** Event timestamp (milliseconds since epoch) */
|
|
16
|
+
ts: number;
|
|
17
|
+
/** Normalized event name (e.g., "ui.click", "canvas.opened") */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Event source */
|
|
20
|
+
source: EventSource;
|
|
21
|
+
/** Event properties/payload */
|
|
22
|
+
props?: Record<string, unknown>;
|
|
23
|
+
/** Schema version for forward compatibility */
|
|
24
|
+
schemaVersion: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Event filter for subscriptions.
|
|
28
|
+
*/
|
|
29
|
+
export interface EventFilter {
|
|
30
|
+
/** Filter by event names (exact match) */
|
|
31
|
+
names?: string[];
|
|
32
|
+
/** Filter by event name patterns (regex) */
|
|
33
|
+
patterns?: string[];
|
|
34
|
+
/** Filter by sources */
|
|
35
|
+
sources?: EventSource[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Callback for event subscriptions.
|
|
39
|
+
*/
|
|
40
|
+
export type EventCallback = (event: NormalizedEvent) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Unsubscribe function returned by subscribe().
|
|
43
|
+
*/
|
|
44
|
+
export type EventUnsubscribe = () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Standard event names used by the runtime.
|
|
47
|
+
*/
|
|
48
|
+
export declare const StandardEvents: {
|
|
49
|
+
readonly UI_CLICK: "ui.click";
|
|
50
|
+
readonly UI_SCROLL: "ui.scroll";
|
|
51
|
+
readonly UI_INPUT: "ui.input";
|
|
52
|
+
readonly UI_CHANGE: "ui.change";
|
|
53
|
+
readonly UI_SUBMIT: "ui.submit";
|
|
54
|
+
readonly NAV_PAGE_VIEW: "nav.page_view";
|
|
55
|
+
readonly NAV_PAGE_LEAVE: "nav.page_leave";
|
|
56
|
+
readonly CANVAS_OPENED: "canvas.opened";
|
|
57
|
+
readonly CANVAS_CLOSED: "canvas.closed";
|
|
58
|
+
readonly TILE_VIEWED: "tile.viewed";
|
|
59
|
+
readonly TILE_EXPANDED: "tile.expanded";
|
|
60
|
+
readonly TILE_COLLAPSED: "tile.collapsed";
|
|
61
|
+
readonly TILE_ACTION: "tile.action";
|
|
62
|
+
readonly OVERLAY_STARTED: "overlay.started";
|
|
63
|
+
readonly OVERLAY_COMPLETED: "overlay.completed";
|
|
64
|
+
readonly OVERLAY_DISMISSED: "overlay.dismissed";
|
|
65
|
+
readonly OVERLAY_STEP_VIEWED: "overlay.step_viewed";
|
|
66
|
+
readonly BEHAVIOR_RAGE_CLICK: "behavior.rage_click";
|
|
67
|
+
readonly BEHAVIOR_HESITATION: "behavior.hesitation";
|
|
68
|
+
readonly BEHAVIOR_CONFUSION: "behavior.confusion";
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Current schema version for normalized events.
|
|
72
|
+
*/
|
|
73
|
+
export declare const EVENT_SCHEMA_VERSION = "1.0.0";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Bus Types
|
|
3
|
+
*
|
|
4
|
+
* The EventBus provides a normalized event stream that unifies events from
|
|
5
|
+
* PostHog autocapture, Canvas events, and derived behavioral signals.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Standard event names used by the runtime.
|
|
9
|
+
*/
|
|
10
|
+
export const StandardEvents = {
|
|
11
|
+
// UI events (from PostHog autocapture)
|
|
12
|
+
UI_CLICK: "ui.click",
|
|
13
|
+
UI_SCROLL: "ui.scroll",
|
|
14
|
+
UI_INPUT: "ui.input",
|
|
15
|
+
UI_CHANGE: "ui.change",
|
|
16
|
+
UI_SUBMIT: "ui.submit",
|
|
17
|
+
// Navigation events
|
|
18
|
+
NAV_PAGE_VIEW: "nav.page_view",
|
|
19
|
+
NAV_PAGE_LEAVE: "nav.page_leave",
|
|
20
|
+
// Canvas events
|
|
21
|
+
CANVAS_OPENED: "canvas.opened",
|
|
22
|
+
CANVAS_CLOSED: "canvas.closed",
|
|
23
|
+
TILE_VIEWED: "tile.viewed",
|
|
24
|
+
TILE_EXPANDED: "tile.expanded",
|
|
25
|
+
TILE_COLLAPSED: "tile.collapsed",
|
|
26
|
+
TILE_ACTION: "tile.action",
|
|
27
|
+
// Overlay/tour events
|
|
28
|
+
OVERLAY_STARTED: "overlay.started",
|
|
29
|
+
OVERLAY_COMPLETED: "overlay.completed",
|
|
30
|
+
OVERLAY_DISMISSED: "overlay.dismissed",
|
|
31
|
+
OVERLAY_STEP_VIEWED: "overlay.step_viewed",
|
|
32
|
+
// Derived behavioral signals (Phase 3)
|
|
33
|
+
BEHAVIOR_RAGE_CLICK: "behavior.rage_click",
|
|
34
|
+
BEHAVIOR_HESITATION: "behavior.hesitation",
|
|
35
|
+
BEHAVIOR_CONFUSION: "behavior.confusion",
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Current schema version for normalized events.
|
|
39
|
+
*/
|
|
40
|
+
export const EVENT_SCHEMA_VERSION = "1.0.0";
|
|
41
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uCAAuC;IACvC,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IAEtB,oBAAoB;IACpB,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAEhC,gBAAgB;IAChB,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;IAE1B,sBAAsB;IACtB,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAE1C,uCAAuC;IACvC,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAC1C,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { CanvasConfigFetcher, TileConfig, CanvasThemeConfig, LauncherConfig, RoutesConfig } from "../types";
|
|
2
2
|
import type { Patch } from "../hostPatcher/core/types";
|
|
3
3
|
import type { ExperimentClient } from "../experiments/types";
|
|
4
|
+
import type { SmartCanvasRuntime } from "../runtime";
|
|
4
5
|
export interface UseShadowCanvasConfigOptions {
|
|
5
6
|
fetcher: CanvasConfigFetcher;
|
|
6
7
|
pollIntervalMs?: number;
|
|
8
|
+
/** @deprecated Use runtime instead */
|
|
7
9
|
experiments?: ExperimentClient;
|
|
10
|
+
/** v2 Runtime for activation-based filtering */
|
|
11
|
+
runtime?: SmartCanvasRuntime;
|
|
8
12
|
}
|
|
9
13
|
export interface ShadowCanvasConfigState {
|
|
10
14
|
tiles: TileConfig[];
|
|
@@ -26,4 +30,4 @@ export interface ShadowCanvasConfigState {
|
|
|
26
30
|
/** Route filtering configuration */
|
|
27
31
|
routes?: RoutesConfig;
|
|
28
32
|
}
|
|
29
|
-
export declare function useShadowCanvasConfig({ fetcher, pollIntervalMs, experiments, }: UseShadowCanvasConfigOptions): ShadowCanvasConfigState;
|
|
33
|
+
export declare function useShadowCanvasConfig({ fetcher, pollIntervalMs, experiments, runtime, }: UseShadowCanvasConfigOptions): ShadowCanvasConfigState;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
2
|
const sortTiles = (tiles) => [...tiles].sort((a, b) => { var _a, _b; return ((_a = a.order) !== null && _a !== void 0 ? _a : 0) - ((_b = b.order) !== null && _b !== void 0 ? _b : 0); });
|
|
3
|
-
export function useShadowCanvasConfig({ fetcher, pollIntervalMs = 30000, experiments, }) {
|
|
3
|
+
export function useShadowCanvasConfig({ fetcher, pollIntervalMs = 30000, experiments, runtime, }) {
|
|
4
4
|
const [state, setState] = useState({
|
|
5
5
|
tiles: [],
|
|
6
6
|
isLoading: true,
|
|
@@ -10,7 +10,21 @@ export function useShadowCanvasConfig({ fetcher, pollIntervalMs = 30000, experim
|
|
|
10
10
|
setState((prev) => ({ ...prev, isLoading: true, error: undefined }));
|
|
11
11
|
const response = await fetcher();
|
|
12
12
|
let tiles = response.tiles || [];
|
|
13
|
-
if
|
|
13
|
+
// Update runtime routes config if provided
|
|
14
|
+
if (runtime && response.routes) {
|
|
15
|
+
runtime.setRoutes(response.routes);
|
|
16
|
+
}
|
|
17
|
+
// Filter tiles based on activation config (v2) or experiments (v1)
|
|
18
|
+
if (runtime) {
|
|
19
|
+
// v2: Use runtime's filterTiles which handles both activation.strategy and legacy experiment
|
|
20
|
+
tiles = await runtime.filterTiles(tiles);
|
|
21
|
+
// Also apply legacy experiment filter for backward compatibility
|
|
22
|
+
if (experiments) {
|
|
23
|
+
tiles = tiles.filter((tile) => experiments.shouldRenderRectangle(tile));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else if (experiments) {
|
|
27
|
+
// v1: Use legacy experiment filtering only
|
|
14
28
|
tiles = tiles.filter((tile) => experiments.shouldRenderRectangle(tile));
|
|
15
29
|
}
|
|
16
30
|
setState({
|
|
@@ -34,7 +48,7 @@ export function useShadowCanvasConfig({ fetcher, pollIntervalMs = 30000, experim
|
|
|
34
48
|
error: err instanceof Error ? err.message : "Unknown error",
|
|
35
49
|
}));
|
|
36
50
|
}
|
|
37
|
-
}, [experiments, fetcher]);
|
|
51
|
+
}, [experiments, fetcher, runtime]);
|
|
38
52
|
useEffect(() => {
|
|
39
53
|
load();
|
|
40
54
|
if (!pollIntervalMs)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useShadowCanvasConfig.js","sourceRoot":"","sources":["../../src/hooks/useShadowCanvasConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useShadowCanvasConfig.js","sourceRoot":"","sources":["../../src/hooks/useShadowCanvasConfig.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,12 @@ export * from "./overlays/types";
|
|
|
15
15
|
export * from "./overlays/schema";
|
|
16
16
|
export * from "./overlays/fetcher";
|
|
17
17
|
export * from "./metrics";
|
|
18
|
+
export * from "./context";
|
|
19
|
+
export * from "./events";
|
|
20
|
+
export * from "./state";
|
|
21
|
+
export * from "./decisions";
|
|
22
|
+
export { createSmartCanvasRuntime, RUNTIME_VERSION, } from "./runtime";
|
|
23
|
+
export type { SmartCanvasRuntime, SmartCanvasRuntimeOptions, RuntimeMode, } from "./runtime";
|
|
18
24
|
export { Syntro } from "./bootstrap";
|
|
19
25
|
export type { SyntroInitOptions, SyntroInitResult } from "./bootstrap";
|
|
20
26
|
export { encodeToken, decodeToken } from "./token";
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,22 @@ export * from "./overlays/schema";
|
|
|
16
16
|
export * from "./overlays/fetcher";
|
|
17
17
|
// Metrics for session-based targeting
|
|
18
18
|
export * from "./metrics";
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// v2 Runtime Modules
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Context - Page/session/viewport state management
|
|
23
|
+
export * from "./context";
|
|
24
|
+
// Events - Normalized event stream
|
|
25
|
+
export * from "./events";
|
|
26
|
+
// State - Persistent state storage with helpers
|
|
27
|
+
export * from "./state";
|
|
28
|
+
// Decisions - Strategy-based conditional rendering
|
|
29
|
+
export * from "./decisions";
|
|
30
|
+
// Unified runtime
|
|
31
|
+
export { createSmartCanvasRuntime, RUNTIME_VERSION, } from "./runtime";
|
|
32
|
+
// ============================================================================
|
|
19
33
|
// Single-token initialization
|
|
34
|
+
// ============================================================================
|
|
20
35
|
export { Syntro } from "./bootstrap";
|
|
21
36
|
export { encodeToken, decodeToken } from "./token";
|
|
22
37
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAEnC,sCAAsC;AACtC,cAAc,WAAW,CAAC;AAE1B,8BAA8B;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAEnC,sCAAsC;AACtC,cAAc,WAAW,CAAC;AAE1B,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,mDAAmD;AACnD,cAAc,WAAW,CAAC;AAE1B,mCAAmC;AACnC,cAAc,UAAU,CAAC;AAEzB,gDAAgD;AAChD,cAAc,SAAS,CAAC;AAExB,mDAAmD;AACnD,cAAc,aAAa,CAAC;AAE5B,kBAAkB;AAClB,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,WAAW,CAAC;AAOnB,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug logger for Syntro SDK.
|
|
3
|
+
*
|
|
4
|
+
* Debug mode is enabled by:
|
|
5
|
+
* 1. URL param: ?syntro_debug=true (highest priority)
|
|
6
|
+
* 2. Token field: d: true
|
|
7
|
+
* 3. Default: false
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Initialize the logger with token debug flag.
|
|
11
|
+
* URL param always overrides token setting.
|
|
12
|
+
*/
|
|
13
|
+
export declare function initLogger(tokenDebug?: boolean): void;
|
|
14
|
+
/**
|
|
15
|
+
* Check if debug mode is currently enabled.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isDebugEnabled(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Log a debug message (only if debug mode enabled).
|
|
20
|
+
*/
|
|
21
|
+
export declare function debug(prefix: string, message: string, data?: any): void;
|
|
22
|
+
/**
|
|
23
|
+
* Log a warning (always shown).
|
|
24
|
+
*/
|
|
25
|
+
export declare function warn(prefix: string, message: string, data?: any): void;
|
|
26
|
+
/**
|
|
27
|
+
* Log an error (always shown).
|
|
28
|
+
*/
|
|
29
|
+
export declare function error(prefix: string, message: string, data?: any): void;
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug logger for Syntro SDK.
|
|
3
|
+
*
|
|
4
|
+
* Debug mode is enabled by:
|
|
5
|
+
* 1. URL param: ?syntro_debug=true (highest priority)
|
|
6
|
+
* 2. Token field: d: true
|
|
7
|
+
* 3. Default: false
|
|
8
|
+
*/
|
|
9
|
+
let debugEnabled = false;
|
|
10
|
+
/**
|
|
11
|
+
* Check if debug mode is enabled via URL param.
|
|
12
|
+
*/
|
|
13
|
+
function checkUrlParam() {
|
|
14
|
+
if (typeof window === 'undefined')
|
|
15
|
+
return false;
|
|
16
|
+
try {
|
|
17
|
+
const params = new URLSearchParams(window.location.search);
|
|
18
|
+
return params.get('syntro_debug') === 'true';
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the logger with token debug flag.
|
|
26
|
+
* URL param always overrides token setting.
|
|
27
|
+
*/
|
|
28
|
+
export function initLogger(tokenDebug) {
|
|
29
|
+
// URL param takes priority
|
|
30
|
+
if (checkUrlParam()) {
|
|
31
|
+
debugEnabled = true;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// Otherwise use token setting (default false)
|
|
35
|
+
debugEnabled = tokenDebug !== null && tokenDebug !== void 0 ? tokenDebug : false;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if debug mode is currently enabled.
|
|
39
|
+
*/
|
|
40
|
+
export function isDebugEnabled() {
|
|
41
|
+
// Always check URL param first (allows runtime override)
|
|
42
|
+
if (checkUrlParam())
|
|
43
|
+
return true;
|
|
44
|
+
return debugEnabled;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Log a debug message (only if debug mode enabled).
|
|
48
|
+
*/
|
|
49
|
+
export function debug(prefix, message, data) {
|
|
50
|
+
if (!isDebugEnabled())
|
|
51
|
+
return;
|
|
52
|
+
if (data !== undefined) {
|
|
53
|
+
console.log(`[${prefix}]`, message, data);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(`[${prefix}]`, message);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Log a warning (always shown).
|
|
61
|
+
*/
|
|
62
|
+
export function warn(prefix, message, data) {
|
|
63
|
+
if (data !== undefined) {
|
|
64
|
+
console.warn(`[${prefix}]`, message, data);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.warn(`[${prefix}]`, message);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Log an error (always shown).
|
|
72
|
+
*/
|
|
73
|
+
export function error(prefix, message, data) {
|
|
74
|
+
if (data !== undefined) {
|
|
75
|
+
console.error(`[${prefix}]`, message, data);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.error(`[${prefix}]`, message);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;GAEG;AACH,SAAS,aAAa;IACpB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,UAAoB;IAC7C,2BAA2B;IAC3B,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO;IACT,CAAC;IACD,8CAA8C;IAC9C,YAAY,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,KAAK,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,yDAAyD;IACzD,IAAI,aAAa,EAAE;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,MAAc,EAAE,OAAe,EAAE,IAAU;IAC/D,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,MAAc,EAAE,OAAe,EAAE,IAAU;IAC9D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,MAAc,EAAE,OAAe,EAAE,IAAU;IAC/D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
|