@syntrologie/runtime-sdk 2.0.1-canary.3 → 2.1.0-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CAPABILITIES.md +13 -21
  2. package/dist/actions/executors/index.d.ts +2 -3
  3. package/dist/actions/executors/index.js +4 -9
  4. package/dist/actions/executors/index.js.map +1 -1
  5. package/dist/apps/AppLoader.d.ts +1 -0
  6. package/dist/apps/AppLoader.js +19 -7
  7. package/dist/apps/AppLoader.js.map +1 -1
  8. package/dist/apps/index.d.ts +2 -3
  9. package/dist/apps/index.js +2 -3
  10. package/dist/apps/index.js.map +1 -1
  11. package/dist/apps/nav/index.js +6 -6
  12. package/dist/apps/nav/index.js.map +3 -3
  13. package/dist/bootstrap.d.ts +1 -1
  14. package/dist/bootstrap.js +1 -1
  15. package/dist/bootstrap.js.map +1 -1
  16. package/dist/config-validator.d.ts +49 -0
  17. package/dist/config-validator.js +173 -0
  18. package/dist/config-validator.js.map +1 -0
  19. package/dist/configFetcher.js +9 -1
  20. package/dist/configFetcher.js.map +1 -1
  21. package/dist/events/schema.d.ts +4 -4
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/smart-canvas.esm.js +23 -23
  26. package/dist/smart-canvas.esm.js.map +4 -4
  27. package/dist/smart-canvas.js +393 -926
  28. package/dist/smart-canvas.js.map +4 -4
  29. package/dist/smart-canvas.min.js +23 -23
  30. package/dist/smart-canvas.min.js.map +4 -4
  31. package/dist/telemetry/adapters/noop.d.ts +1 -18
  32. package/dist/telemetry/adapters/noop.js +5 -38
  33. package/dist/telemetry/adapters/noop.js.map +1 -1
  34. package/dist/telemetry/index.d.ts +0 -1
  35. package/dist/telemetry/registry.js +1 -1
  36. package/dist/telemetry/registry.js.map +1 -1
  37. package/dist/types.d.ts +21 -0
  38. package/dist/types.js +15 -2
  39. package/dist/types.js.map +1 -1
  40. package/dist/version.d.ts +13 -0
  41. package/dist/version.js +14 -0
  42. package/dist/version.js.map +1 -0
  43. package/package.json +8 -5
@@ -4,26 +4,9 @@
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.
12
7
  */
13
8
  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
- }
25
9
  /**
26
10
  * Create a TelemetryClient that silently discards all events.
27
- * Accepts optional callbacks to maintain bootstrap compatibility.
28
11
  */
29
- export declare function createNoopClient(options?: NoopAdapterOptions): TelemetryClient;
12
+ export declare function createNoopClient(): TelemetryClient;
@@ -1,4 +1,3 @@
1
- const SEGMENT_CACHE_KEY = 'syntro_segment_attributes';
2
1
  function randomId() {
3
2
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
4
3
  let id = '';
@@ -7,41 +6,10 @@ function randomId() {
7
6
  }
8
7
  return id;
9
8
  }
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
- }
33
9
  class NoopAdapter {
34
- constructor(options = {}) {
10
+ constructor() {
35
11
  this.sessionId = randomId();
36
- this.mockFlags = getMockSegmentFlags();
37
12
  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
- }
45
13
  }
46
14
  trackCanvasOpened(_surface) { }
47
15
  trackCanvasClosed(_surface) { }
@@ -59,17 +27,16 @@ class NoopAdapter {
59
27
  return 'demo-user';
60
28
  }
61
29
  getAllFeatureFlags() {
62
- return { ...this.mockFlags };
30
+ return {};
63
31
  }
64
32
  getSegmentFlags() {
65
- return { ...this.mockFlags };
33
+ return {};
66
34
  }
67
35
  }
68
36
  /**
69
37
  * Create a TelemetryClient that silently discards all events.
70
- * Accepts optional callbacks to maintain bootstrap compatibility.
71
38
  */
72
- export function createNoopClient(options) {
73
- return new NoopAdapter(options);
39
+ export function createNoopClient() {
40
+ return new NoopAdapter();
74
41
  }
75
42
  //# sourceMappingURL=noop.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../src/telemetry/adapters/noop.ts"],"names":[],"mappings":"AASA,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,MAAM,WAAW;IAGf;QACE,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT,8EAA8E,IAAI,CAAC,SAAS,EAAE,CAC/F,CAAC;IACJ,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,CAAC;IACZ,CAAC;IAED,eAAe;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,WAAW,EAAE,CAAC;AAC3B,CAAC"}
@@ -2,4 +2,3 @@ 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: (config) => createNoopClient(config),
12
+ noop: () => createNoopClient(),
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,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"}
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,GAAG,EAAE,CAAC,gBAAgB,EAAE;CAC/B,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"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,16 @@
1
+ export { SDK_VERSION } from './version';
2
+ /**
3
+ * SDK schema version in Major.Minor format (e.g., "2.0", "2.1").
4
+ * Used for compatibility checking between SDK and backend configs.
5
+ * Sent in X-SDK-Schema-Version header.
6
+ *
7
+ * Bump rules:
8
+ * - Major: Breaking changes (field removal, type changes)
9
+ * - Minor: Backwards-compatible additions (new optional fields)
10
+ *
11
+ * @since 2.0.0
12
+ */
13
+ export declare const SDK_SCHEMA_VERSION = "2.0";
1
14
  export type { ActionStep } from './actions/types';
2
15
  /**
3
16
  * Props passed to every tile component when mounted
@@ -332,6 +345,14 @@ export interface RoutesConfig {
332
345
  * for all interventions: DOM modifications, tooltips, highlights, modals.
333
346
  */
334
347
  export interface CanvasConfigResponse {
348
+ /**
349
+ * Schema version this config conforms to (e.g., "2.0", "2.1").
350
+ * Used for compatibility checking and automatic migration between versions.
351
+ * If omitted, defaults to "1.0" for backwards compatibility.
352
+ *
353
+ * @since 2.0.0
354
+ */
355
+ schemaVersion?: string;
335
356
  /** Tiles to display in the canvas drawer */
336
357
  tiles: TileConfig[];
337
358
  /**
package/dist/types.js CHANGED
@@ -1,5 +1,18 @@
1
1
  // =============================================================================
2
- // RE-EXPORT ACTION TYPES
2
+ // SDK VERSION CONSTANTS
3
3
  // =============================================================================
4
- export {};
4
+ // Re-export SDK_VERSION from the auto-generated version file
5
+ export { SDK_VERSION } from './version';
6
+ /**
7
+ * SDK schema version in Major.Minor format (e.g., "2.0", "2.1").
8
+ * Used for compatibility checking between SDK and backend configs.
9
+ * Sent in X-SDK-Schema-Version header.
10
+ *
11
+ * Bump rules:
12
+ * - Major: Breaking changes (field removal, type changes)
13
+ * - Minor: Backwards-compatible additions (new optional fields)
14
+ *
15
+ * @since 2.0.0
16
+ */
17
+ export const SDK_SCHEMA_VERSION = '2.0';
5
18
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,6DAA6D;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * SDK package version.
3
+ *
4
+ * This file is auto-generated at release time by `scripts/prepare-release.mjs`.
5
+ * The sentinel value below is overwritten with the real semver version
6
+ * during the semantic-release prepare phase.
7
+ *
8
+ * DO NOT import version from package.json — this constant is the single
9
+ * source of truth for the runtime bundle.
10
+ *
11
+ * @since 2.0.0
12
+ */
13
+ export declare const SDK_VERSION = "2.1.0-canary.1";
@@ -0,0 +1,14 @@
1
+ /**
2
+ * SDK package version.
3
+ *
4
+ * This file is auto-generated at release time by `scripts/prepare-release.mjs`.
5
+ * The sentinel value below is overwritten with the real semver version
6
+ * during the semantic-release prepare phase.
7
+ *
8
+ * DO NOT import version from package.json — this constant is the single
9
+ * source of truth for the runtime bundle.
10
+ *
11
+ * @since 2.0.0
12
+ */
13
+ export const SDK_VERSION = '2.1.0-canary.1';
14
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syntrologie/runtime-sdk",
3
- "version": "2.0.1-canary.3",
3
+ "version": "2.1.0-canary.1",
4
4
  "description": "Syntrologie Runtime SDK for web experimentation and analytics",
5
5
  "license": "Proprietary",
6
6
  "private": false,
@@ -57,9 +57,8 @@
57
57
  "@floating-ui/dom": "~1.6.13",
58
58
  "@growthbook/growthbook": "~1.6.2",
59
59
  "@growthbook/growthbook-react": "~1.6.2",
60
- "@syntrologie/app-content": "^2.0.0",
61
- "@syntrologie/app-navigation": "^2.0.0",
62
- "@syntrologie/app-overlays": "^2.0.0",
60
+ "@syntrologie/adapt-content": "2.1.0-canary.1",
61
+ "@syntrologie/adapt-overlays": "2.1.0-canary.1",
63
62
  "posthog-js": "~1.302.2",
64
63
  "zod": "~3.25.0"
65
64
  },
@@ -75,6 +74,10 @@
75
74
  "react": "^18.3.1",
76
75
  "react-dom": "^18.3.1",
77
76
  "typescript": "~5.7.0",
78
- "vitest": "^4.0.18"
77
+ "vitest": "^4.0.18",
78
+ "semantic-release": "~25.0.3",
79
+ "@semantic-release/npm": "~13.1.3",
80
+ "@semantic-release/exec": "~7.1.0",
81
+ "@semantic-release/github": "~12.0.3"
79
82
  }
80
83
  }