@syntrologie/runtime-sdk 2.0.1-canary.1 → 2.0.1-canary.3
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/dist/smart-canvas.esm.js +11 -11
- package/dist/smart-canvas.esm.js.map +3 -3
- package/dist/smart-canvas.js +33 -9
- package/dist/smart-canvas.js.map +3 -3
- package/dist/smart-canvas.min.js +11 -11
- package/dist/smart-canvas.min.js.map +3 -3
- package/dist/telemetry/adapters/noop.d.ts +18 -1
- package/dist/telemetry/adapters/noop.js +38 -5
- package/dist/telemetry/adapters/noop.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -0
- package/dist/telemetry/registry.js +1 -1
- package/dist/telemetry/registry.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,9 +4,26 @@
|
|
|
4
4
|
* Used when telemetry is disabled (e.g. demo mode with t="noop").
|
|
5
5
|
* All tracking methods silently do nothing. Session/distinct IDs
|
|
6
6
|
* return stable values so downstream code that reads them still works.
|
|
7
|
+
*
|
|
8
|
+
* When `onFeatureFlagsLoaded` is provided, the adapter fires it on the
|
|
9
|
+
* next microtick with cached segment attributes (all set to `true`).
|
|
10
|
+
* This ensures GrowthBook gets segment attributes even without a real
|
|
11
|
+
* PostHog instance, so canvas configs with segment targeting still resolve.
|
|
7
12
|
*/
|
|
8
13
|
import type { TelemetryClient } from '../types';
|
|
14
|
+
export interface NoopAdapterOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Callback when "feature flags" are ready.
|
|
17
|
+
* Fired on next microtick with cached segment flags set to true.
|
|
18
|
+
*/
|
|
19
|
+
onFeatureFlagsLoaded?: (flags: Record<string, boolean | string>) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Callback when an event is "captured". Never called (noop).
|
|
22
|
+
*/
|
|
23
|
+
onCapture?: (eventName: string, properties?: Record<string, unknown>) => void;
|
|
24
|
+
}
|
|
9
25
|
/**
|
|
10
26
|
* Create a TelemetryClient that silently discards all events.
|
|
27
|
+
* Accepts optional callbacks to maintain bootstrap compatibility.
|
|
11
28
|
*/
|
|
12
|
-
export declare function createNoopClient(): TelemetryClient;
|
|
29
|
+
export declare function createNoopClient(options?: NoopAdapterOptions): TelemetryClient;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const SEGMENT_CACHE_KEY = 'syntro_segment_attributes';
|
|
1
2
|
function randomId() {
|
|
2
3
|
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
3
4
|
let id = '';
|
|
@@ -6,10 +7,41 @@ function randomId() {
|
|
|
6
7
|
}
|
|
7
8
|
return id;
|
|
8
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Read cached segment attributes from localStorage and return them
|
|
12
|
+
* as feature flags with all values set to `true`.
|
|
13
|
+
*/
|
|
14
|
+
function getMockSegmentFlags() {
|
|
15
|
+
if (typeof window === 'undefined')
|
|
16
|
+
return {};
|
|
17
|
+
try {
|
|
18
|
+
const cached = localStorage.getItem(SEGMENT_CACHE_KEY);
|
|
19
|
+
if (cached) {
|
|
20
|
+
const attrs = JSON.parse(cached);
|
|
21
|
+
const flags = {};
|
|
22
|
+
for (const key of Object.keys(attrs)) {
|
|
23
|
+
flags[key] = true;
|
|
24
|
+
}
|
|
25
|
+
return flags;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// ignore
|
|
30
|
+
}
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
9
33
|
class NoopAdapter {
|
|
10
|
-
constructor() {
|
|
34
|
+
constructor(options = {}) {
|
|
11
35
|
this.sessionId = randomId();
|
|
36
|
+
this.mockFlags = getMockSegmentFlags();
|
|
12
37
|
console.log(`[Syntro Telemetry] Using noop adapter (no telemetry configured). sessionId=${this.sessionId}`);
|
|
38
|
+
// Fire feature flags callback on next microtick so the bootstrap
|
|
39
|
+
// Phase 2 flow runs (updates GrowthBook with segment attributes).
|
|
40
|
+
if (options.onFeatureFlagsLoaded) {
|
|
41
|
+
const cb = options.onFeatureFlagsLoaded;
|
|
42
|
+
const flags = this.mockFlags;
|
|
43
|
+
Promise.resolve().then(() => cb(flags));
|
|
44
|
+
}
|
|
13
45
|
}
|
|
14
46
|
trackCanvasOpened(_surface) { }
|
|
15
47
|
trackCanvasClosed(_surface) { }
|
|
@@ -27,16 +59,17 @@ class NoopAdapter {
|
|
|
27
59
|
return 'demo-user';
|
|
28
60
|
}
|
|
29
61
|
getAllFeatureFlags() {
|
|
30
|
-
return {};
|
|
62
|
+
return { ...this.mockFlags };
|
|
31
63
|
}
|
|
32
64
|
getSegmentFlags() {
|
|
33
|
-
return {};
|
|
65
|
+
return { ...this.mockFlags };
|
|
34
66
|
}
|
|
35
67
|
}
|
|
36
68
|
/**
|
|
37
69
|
* Create a TelemetryClient that silently discards all events.
|
|
70
|
+
* Accepts optional callbacks to maintain bootstrap compatibility.
|
|
38
71
|
*/
|
|
39
|
-
export function createNoopClient() {
|
|
40
|
-
return new NoopAdapter();
|
|
72
|
+
export function createNoopClient(options) {
|
|
73
|
+
return new NoopAdapter(options);
|
|
41
74
|
}
|
|
42
75
|
//# sourceMappingURL=noop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../src/telemetry/adapters/noop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../src/telemetry/adapters/noop.ts"],"names":[],"mappings":"AAcA,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AAetD,SAAS,QAAQ;IACf,MAAM,KAAK,GAAG,gEAAgE,CAAC;IAC/E,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACvD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,KAAK,GAA4B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,KAAK,GAA4B,EAAE,CAAC;YAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,WAAW;IAIf,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,mBAAmB,EAAE,CAAC;QAEvC,OAAO,CAAC,GAAG,CACT,8EAA8E,IAAI,CAAC,SAAS,EAAE,CAC/F,CAAC;QAEF,iEAAiE;QACjE,kEAAkE;QAClE,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,QAAuB,IAAS,CAAC;IACnD,iBAAiB,CAAC,QAAuB,IAAS,CAAC;IACnD,oBAAoB,CAAC,YAAoB,EAAE,QAAuB,IAAS,CAAC;IAC5E,WAAW,CAAC,OAAe,EAAE,YAAoB,EAAE,QAAuB,IAAS,CAAC;IAEpF,QAAQ,CAAC,WAAoC,IAAS,CAAC;IACvD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,qBAAqB,KAAU,CAAC;IAChC,eAAe,CAAC,IAAY,EAAE,YAAoB,EAAE,cAAuB,IAAS,CAAC;IACrF,mBAAmB,CAAC,WAAoC,IAAS,CAAC;IAClE,uBAAuB,CAAC,WAAoC,IAAS,CAAC;IAEtE,aAAa;QACX,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,kBAAkB;QAChB,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,eAAe;QACb,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA4B;IAC3D,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -2,3 +2,4 @@ export type { TelemetryClient, CanvasSurface } from './types';
|
|
|
2
2
|
export { createPostHogClient } from './adapters/posthog';
|
|
3
3
|
export type { PostHogAdapterOptions } from './adapters/posthog';
|
|
4
4
|
export { createNoopClient } from './adapters/noop';
|
|
5
|
+
export type { NoopAdapterOptions } from './adapters/noop';
|
|
@@ -9,7 +9,7 @@ import { createPostHogClient } from './adapters/posthog';
|
|
|
9
9
|
import { createNoopClient } from './adapters/noop';
|
|
10
10
|
const adapters = {
|
|
11
11
|
posthog: (config) => createPostHogClient(config),
|
|
12
|
-
noop: () => createNoopClient(),
|
|
12
|
+
noop: (config) => createNoopClient(config),
|
|
13
13
|
};
|
|
14
14
|
/**
|
|
15
15
|
* Create a telemetry client for the specified provider.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/telemetry/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,mBAAmB,EAAyB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnD,MAAM,QAAQ,GAAmC;IAC/C,OAAO,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;IACvE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/telemetry/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,mBAAmB,EAAyB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnD,MAAM,QAAQ,GAAmC;IAC/C,OAAO,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;IACvE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;CAC3C,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,MAA6B;IAE7B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,+BAA+B,QAAQ,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC"}
|