@contentful/optimization-core 0.1.0-alpha

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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +408 -0
  3. package/dist/Consent.d.ts +44 -0
  4. package/dist/Consent.d.ts.map +1 -0
  5. package/dist/Consent.js +2 -0
  6. package/dist/Consent.js.map +1 -0
  7. package/dist/CoreBase.d.ts +161 -0
  8. package/dist/CoreBase.d.ts.map +1 -0
  9. package/dist/CoreBase.js +151 -0
  10. package/dist/CoreBase.js.map +1 -0
  11. package/dist/CoreStateful.d.ts +142 -0
  12. package/dist/CoreStateful.d.ts.map +1 -0
  13. package/dist/CoreStateful.js +137 -0
  14. package/dist/CoreStateful.js.map +1 -0
  15. package/dist/CoreStateless.d.ts +53 -0
  16. package/dist/CoreStateless.d.ts.map +1 -0
  17. package/dist/CoreStateless.js +43 -0
  18. package/dist/CoreStateless.js.map +1 -0
  19. package/dist/ProductBase.d.ts +83 -0
  20. package/dist/ProductBase.d.ts.map +1 -0
  21. package/dist/ProductBase.js +50 -0
  22. package/dist/ProductBase.js.map +1 -0
  23. package/dist/analytics/AnalyticsBase.d.ts +35 -0
  24. package/dist/analytics/AnalyticsBase.d.ts.map +1 -0
  25. package/dist/analytics/AnalyticsBase.js +13 -0
  26. package/dist/analytics/AnalyticsBase.js.map +1 -0
  27. package/dist/analytics/AnalyticsStateful.d.ts +138 -0
  28. package/dist/analytics/AnalyticsStateful.d.ts.map +1 -0
  29. package/dist/analytics/AnalyticsStateful.js +179 -0
  30. package/dist/analytics/AnalyticsStateful.js.map +1 -0
  31. package/dist/analytics/AnalyticsStateless.d.ts +48 -0
  32. package/dist/analytics/AnalyticsStateless.d.ts.map +1 -0
  33. package/dist/analytics/AnalyticsStateless.js +61 -0
  34. package/dist/analytics/AnalyticsStateless.js.map +1 -0
  35. package/dist/analytics/index.d.ts +5 -0
  36. package/dist/analytics/index.d.ts.map +1 -0
  37. package/dist/analytics/index.js +5 -0
  38. package/dist/analytics/index.js.map +1 -0
  39. package/dist/global-constants.d.ts +18 -0
  40. package/dist/global-constants.d.ts.map +1 -0
  41. package/dist/global-constants.js +18 -0
  42. package/dist/global-constants.js.map +1 -0
  43. package/dist/index.cjs +1808 -0
  44. package/dist/index.cjs.map +1 -0
  45. package/dist/index.d.ts +15 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +15 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/index.mjs +1535 -0
  50. package/dist/index.mjs.map +1 -0
  51. package/dist/lib/decorators/guardedBy.d.ts +113 -0
  52. package/dist/lib/decorators/guardedBy.d.ts.map +1 -0
  53. package/dist/lib/decorators/guardedBy.js +143 -0
  54. package/dist/lib/decorators/guardedBy.js.map +1 -0
  55. package/dist/lib/decorators/index.d.ts +2 -0
  56. package/dist/lib/decorators/index.d.ts.map +1 -0
  57. package/dist/lib/decorators/index.js +2 -0
  58. package/dist/lib/decorators/index.js.map +1 -0
  59. package/dist/lib/interceptor/InterceptorManager.d.ts +127 -0
  60. package/dist/lib/interceptor/InterceptorManager.d.ts.map +1 -0
  61. package/dist/lib/interceptor/InterceptorManager.js +125 -0
  62. package/dist/lib/interceptor/InterceptorManager.js.map +1 -0
  63. package/dist/lib/interceptor/index.d.ts +2 -0
  64. package/dist/lib/interceptor/index.d.ts.map +1 -0
  65. package/dist/lib/interceptor/index.js +2 -0
  66. package/dist/lib/interceptor/index.js.map +1 -0
  67. package/dist/lib/value-presence/ValuePresence.d.ts +123 -0
  68. package/dist/lib/value-presence/ValuePresence.d.ts.map +1 -0
  69. package/dist/lib/value-presence/ValuePresence.js +141 -0
  70. package/dist/lib/value-presence/ValuePresence.js.map +1 -0
  71. package/dist/lib/value-presence/index.d.ts +2 -0
  72. package/dist/lib/value-presence/index.d.ts.map +1 -0
  73. package/dist/lib/value-presence/index.js +2 -0
  74. package/dist/lib/value-presence/index.js.map +1 -0
  75. package/dist/personalization/PersonalizationBase.d.ts +184 -0
  76. package/dist/personalization/PersonalizationBase.d.ts.map +1 -0
  77. package/dist/personalization/PersonalizationBase.js +76 -0
  78. package/dist/personalization/PersonalizationBase.js.map +1 -0
  79. package/dist/personalization/PersonalizationStateful.d.ts +226 -0
  80. package/dist/personalization/PersonalizationStateful.d.ts.map +1 -0
  81. package/dist/personalization/PersonalizationStateful.js +297 -0
  82. package/dist/personalization/PersonalizationStateful.js.map +1 -0
  83. package/dist/personalization/PersonalizationStateless.d.ts +74 -0
  84. package/dist/personalization/PersonalizationStateless.d.ts.map +1 -0
  85. package/dist/personalization/PersonalizationStateless.js +98 -0
  86. package/dist/personalization/PersonalizationStateless.js.map +1 -0
  87. package/dist/personalization/index.d.ts +6 -0
  88. package/dist/personalization/index.d.ts.map +1 -0
  89. package/dist/personalization/index.js +6 -0
  90. package/dist/personalization/index.js.map +1 -0
  91. package/dist/personalization/resolvers/FlagsResolver.d.ts +35 -0
  92. package/dist/personalization/resolvers/FlagsResolver.d.ts.map +1 -0
  93. package/dist/personalization/resolvers/FlagsResolver.js +47 -0
  94. package/dist/personalization/resolvers/FlagsResolver.js.map +1 -0
  95. package/dist/personalization/resolvers/MergeTagValueResolver.d.ts +74 -0
  96. package/dist/personalization/resolvers/MergeTagValueResolver.d.ts.map +1 -0
  97. package/dist/personalization/resolvers/MergeTagValueResolver.js +109 -0
  98. package/dist/personalization/resolvers/MergeTagValueResolver.js.map +1 -0
  99. package/dist/personalization/resolvers/PersonalizedEntryResolver.d.ts +142 -0
  100. package/dist/personalization/resolvers/PersonalizedEntryResolver.d.ts.map +1 -0
  101. package/dist/personalization/resolvers/PersonalizedEntryResolver.js +196 -0
  102. package/dist/personalization/resolvers/PersonalizedEntryResolver.js.map +1 -0
  103. package/dist/personalization/resolvers/index.d.ts +7 -0
  104. package/dist/personalization/resolvers/index.d.ts.map +1 -0
  105. package/dist/personalization/resolvers/index.js +7 -0
  106. package/dist/personalization/resolvers/index.js.map +1 -0
  107. package/dist/signals.d.ts +35 -0
  108. package/dist/signals.d.ts.map +1 -0
  109. package/dist/signals.js +30 -0
  110. package/dist/signals.js.map +1 -0
  111. package/package.json +29 -0
@@ -0,0 +1,151 @@
1
+ import { ApiClient, EventBuilder, } from '@contentful/optimization-api-client';
2
+ import { ConsoleLogSink, logger } from 'logger';
3
+ import { OPTIMIZATION_CORE_SDK_VERSION } from './global-constants';
4
+ import { InterceptorManager } from './lib/interceptor';
5
+ /**
6
+ * Internal base that wires the API client, event builder, and logging.
7
+ *
8
+ * @internal
9
+ */
10
+ class CoreBase {
11
+ /** Shared Optimization API client instance. */
12
+ api;
13
+ /** Shared event builder instance. */
14
+ eventBuilder;
15
+ /** Resolved core configuration (minus any name metadata). */
16
+ config;
17
+ interceptors = {
18
+ event: new InterceptorManager(),
19
+ state: new InterceptorManager(),
20
+ };
21
+ /**
22
+ * Create the core with API client and logging preconfigured.
23
+ *
24
+ * @param config - Core configuration including API and builder options.
25
+ * @example
26
+ * ```ts
27
+ * const sdk = new CoreStateless({ clientId: 'abc123', environment: 'prod' })
28
+ * ```
29
+ */
30
+ constructor(config) {
31
+ this.config = config;
32
+ const { analytics, personalization, eventBuilder, logLevel, environment, clientId } = config;
33
+ logger.addSink(new ConsoleLogSink(logLevel));
34
+ const apiConfig = {
35
+ ...analytics,
36
+ ...personalization,
37
+ clientId,
38
+ environment,
39
+ };
40
+ this.api = new ApiClient(apiConfig);
41
+ this.eventBuilder = new EventBuilder(eventBuilder ?? {
42
+ channel: 'server',
43
+ library: { name: 'Optimization Core', version: OPTIMIZATION_CORE_SDK_VERSION },
44
+ });
45
+ }
46
+ /**
47
+ * Get the value of a custom flag derived from a set of optimization changes.
48
+ *
49
+ * @param name - The flag key to resolve.
50
+ * @param changes - Optional change list to resolve from
51
+ * @returns The resolved JSON value for the flag if available.
52
+ * @remarks
53
+ * This is a convenience wrapper around personalization’s flag resolution.
54
+ */
55
+ getCustomFlag(name, changes) {
56
+ return this.personalization.getCustomFlag(name, changes);
57
+ }
58
+ /**
59
+ * Resolve a Contentful entry to the appropriate personalized variant (or
60
+ * return the baseline entry if no matching variant is selected).
61
+ *
62
+ * @typeParam S - Entry skeleton type.
63
+ * @typeParam M - Chain modifiers.
64
+ * @typeParam L - Locale code.
65
+ * @param entry - The baseline entry to resolve.
66
+ * @param personalizations - Optional selection array for the current profile.
67
+ * @returns {@link ResolvedData} containing the resolved entry and
68
+ * personalization metadata (if any).
69
+ */
70
+ personalizeEntry(entry, personalizations) {
71
+ return this.personalization.personalizeEntry(entry, personalizations);
72
+ }
73
+ /**
74
+ * Resolve a merge-tag value from the given entry node and profile.
75
+ *
76
+ * @param embeddedEntryNodeTarget - The merge-tag entry node to resolve.
77
+ * @param profile - Optional profile used for value lookup.
78
+ * @returns The resolved value (typically a string) or `undefined` if not found.
79
+ */
80
+ getMergeTagValue(embeddedEntryNodeTarget, profile) {
81
+ return this.personalization.getMergeTagValue(embeddedEntryNodeTarget, profile);
82
+ }
83
+ /**
84
+ * Convenience wrapper for sending an `identify` event via personalization.
85
+ *
86
+ * @param payload - Identify builder arguments.
87
+ * @returns The resulting {@link OptimizationData} for the identified user.
88
+ */
89
+ async identify(payload) {
90
+ return await this.personalization.identify(payload);
91
+ }
92
+ /**
93
+ * Convenience wrapper for sending a `page` event via personalization.
94
+ *
95
+ * @param payload - Page view builder arguments.
96
+ * @returns The evaluated {@link OptimizationData} for this page view.
97
+ */
98
+ async page(payload) {
99
+ return await this.personalization.page(payload);
100
+ }
101
+ /**
102
+ * Convenience wrapper for sending a `screen` event via personalization.
103
+ *
104
+ * @param payload - Screen view builder arguments.
105
+ * @returns The evaluated {@link OptimizationData} for this screen view.
106
+ */
107
+ async screen(payload) {
108
+ return await this.personalization.screen(payload);
109
+ }
110
+ /**
111
+ * Convenience wrapper for sending a custom `track` event via personalization.
112
+ *
113
+ * @param payload - Track builder arguments.
114
+ * @returns The evaluated {@link OptimizationData} for this event.
115
+ */
116
+ async track(payload) {
117
+ return await this.personalization.track(payload);
118
+ }
119
+ /**
120
+ * Track a component view in both personalization and analytics.
121
+ *
122
+ * @param payload - Component view builder arguments. When `payload.sticky` is
123
+ * `true`, the event will also be sent via personalization as a sticky
124
+ * component view.
125
+ * @param duplicationScope - Optional string used to scope duplication used in Stateful
126
+ * implementations
127
+ * @returns A promise that resolves when all delegated calls complete.
128
+ * @remarks
129
+ * The sticky behavior is delegated to personalization; analytics is always
130
+ * invoked regardless of `sticky`.
131
+ */
132
+ async trackComponentView(payload, duplicationScope) {
133
+ if (payload.sticky) {
134
+ return await this.personalization.trackComponentView(payload, duplicationScope);
135
+ }
136
+ await this.analytics.trackComponentView(payload, duplicationScope);
137
+ }
138
+ /**
139
+ * Track a feature flag view via analytics.
140
+ *
141
+ * @param payload - Component view builder arguments used to build the flag view event.
142
+ * @param duplicationScope - Optional string used to scope duplication used in Stateful
143
+ * implementations
144
+ * @returns A promise that resolves when processing completes.
145
+ */
146
+ async trackFlagView(payload, duplicationScope) {
147
+ await this.analytics.trackFlagView(payload, duplicationScope);
148
+ }
149
+ }
150
+ export default CoreBase;
151
+ //# sourceMappingURL=CoreBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoreBase.js","sourceRoot":"","sources":["../src/CoreBase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import type { InsightsEvent as AnalyticsEvent, ChangeArray, ExperienceEvent as PersonalizationEvent, Profile, SelectedPersonalizationArray } from '@contentful/optimization-api-client';
2
+ import { AnalyticsStateful, type AnalyticsStates } from './analytics';
3
+ import type { ConsentController } from './Consent';
4
+ import CoreBase, { type CoreConfig } from './CoreBase';
5
+ import { PersonalizationStateful, type PersonalizationProductConfig, type PersonalizationStates } from './personalization';
6
+ import type { ProductConfig } from './ProductBase';
7
+ import { type Observable, type Signals } from './signals';
8
+ /**
9
+ * Interface for objects that can be registered with the preview panel system.
10
+ * When registered, the object receives direct access to SDK signals for state manipulation.
11
+ *
12
+ * @public
13
+ */
14
+ export interface PreviewPanelSignalObject {
15
+ /** Signals instance that will be populated by registerPreviewPanel */
16
+ signals: Signals | null;
17
+ }
18
+ /**
19
+ * Combined observable state exposed by the stateful core.
20
+ *
21
+ * @public
22
+ * @see {@link AnalyticsStates}
23
+ * @see {@link PersonalizationStates}
24
+ */
25
+ export interface CoreStates extends AnalyticsStates, PersonalizationStates {
26
+ /** Current consent value (if any). */
27
+ consent: Observable<boolean | undefined>;
28
+ /** Stream of the most recent event emitted (analytics or personalization). */
29
+ eventStream: Observable<AnalyticsEvent | PersonalizationEvent | undefined>;
30
+ }
31
+ /**
32
+ * Default values used to preconfigure the stateful core and products.
33
+ *
34
+ * @public
35
+ */
36
+ export interface CoreConfigDefaults {
37
+ /** Global consent default applied at construction time. */
38
+ consent?: boolean;
39
+ /** Default active profile used for personalization and analytics. */
40
+ profile?: Profile;
41
+ /** Initial diff of changes produced by the service. */
42
+ changes?: ChangeArray;
43
+ /** Preselected personalization variants (e.g., winning treatments). */
44
+ personalizations?: SelectedPersonalizationArray;
45
+ }
46
+ /**
47
+ * Configuration for {@link CoreStateful}.
48
+ *
49
+ * @public
50
+ * @see {@link CoreConfig}
51
+ */
52
+ export interface CoreStatefulConfig extends CoreConfig {
53
+ /**
54
+ * Allow-listed event type strings permitted when consent is not set.
55
+ *
56
+ * @see {@link ProductConfig.allowedEventTypes}
57
+ */
58
+ allowedEventTypes?: ProductConfig['allowedEventTypes'];
59
+ /** Optional set of default values applied on initialization. */
60
+ defaults?: CoreConfigDefaults;
61
+ /** Function used to obtain an anonymous user identifier. */
62
+ getAnonymousId?: PersonalizationProductConfig['getAnonymousId'];
63
+ /**
64
+ * Initial duplication prevention configuration for component events.
65
+ *
66
+ * @see {@link ProductConfig.preventedComponentEvents}
67
+ */
68
+ preventedComponentEvents?: ProductConfig['preventedComponentEvents'];
69
+ }
70
+ /**
71
+ * Core runtime that constructs stateful product instances and exposes shared
72
+ * states, including consent and the event stream.
73
+ *
74
+ * @public
75
+ * @remarks
76
+ * @see {@link CoreBase}
77
+ * @see {@link ConsentController}
78
+ */
79
+ declare class CoreStateful extends CoreBase implements ConsentController {
80
+ /** Stateful analytics product. */
81
+ readonly analytics: AnalyticsStateful;
82
+ /** Stateful personalization product. */
83
+ readonly personalization: PersonalizationStateful;
84
+ /**
85
+ * Create a stateful core with optional default consent and product defaults.
86
+ *
87
+ * @param config - Core and defaults configuration.
88
+ * @example
89
+ * ```ts
90
+ * const core = new CoreStateful({
91
+ * clientId: 'app',
92
+ * environment: 'prod',
93
+ * defaults: { consent: true }
94
+ * })
95
+ * core.consent(true)
96
+ * ```
97
+ */
98
+ constructor(config: CoreStatefulConfig);
99
+ /**
100
+ * Expose merged observable state for consumers.
101
+ */
102
+ get states(): CoreStates;
103
+ /**
104
+ * Reset internal state. Consent is intentionally preserved.
105
+ *
106
+ * @remarks
107
+ * Resetting personalization also resets analytics dependencies as a
108
+ * consequence of the current shared-state design.
109
+ */
110
+ reset(): void;
111
+ /**
112
+ * Flush the queues for both the analytics and personalization products.
113
+ * @remarks
114
+ * The personalization queue is only populated if events have been triggered
115
+ * while a device is offline.
116
+ */
117
+ flush(): Promise<void>;
118
+ /**
119
+ * Update consent state
120
+ *
121
+ * @param accept - `true` if the user has granted consent; `false` otherwise.
122
+ */
123
+ consent(accept: boolean): void;
124
+ /**
125
+ * Update online state
126
+ *
127
+ * @param isOnline - `true` if the browser is online; `false` otherwise.
128
+ */
129
+ protected online(isOnline: boolean): void;
130
+ /**
131
+ * Register a preview panel compatible object to receive direct signal access.
132
+ * This enables the preview panel to modify SDK state for testing and simulation.
133
+ *
134
+ * @param previewPanel - An object implementing PreviewPanelSignalObject
135
+ * @remarks
136
+ * This method is intended for use by the Preview Panel component.
137
+ * Direct signal access allows immediate state updates without API calls.
138
+ */
139
+ registerPreviewPanel(previewPanel: PreviewPanelSignalObject): void;
140
+ }
141
+ export default CoreStateful;
142
+ //# sourceMappingURL=CoreStateful.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoreStateful.d.ts","sourceRoot":"","sources":["../src/CoreStateful.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,cAAc,EAC/B,WAAW,EACX,eAAe,IAAI,oBAAoB,EACvC,OAAO,EACP,4BAA4B,EAC7B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,QAAQ,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAWL,KAAK,UAAU,EACf,KAAK,OAAO,EACb,MAAM,WAAW,CAAA;AAElB;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,sEAAsE;IACtE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,UAAW,SAAQ,eAAe,EAAE,qBAAqB;IACxE,sCAAsC;IACtC,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IACxC,8EAA8E;IAC9E,WAAW,EAAE,UAAU,CAAC,cAAc,GAAG,oBAAoB,GAAG,SAAS,CAAC,CAAA;CAC3E;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,uDAAuD;IACvD,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,4BAA4B,CAAA;CAChD;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAEtD,gEAAgE;IAChE,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAE7B,4DAA4D;IAC5D,cAAc,CAAC,EAAE,4BAA4B,CAAC,gBAAgB,CAAC,CAAA;IAE/D;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAA;CACrE;AAED;;;;;;;;GAQG;AACH,cAAM,YAAa,SAAQ,QAAS,YAAW,iBAAiB;IAC9D,kCAAkC;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAA;IACrC,wCAAwC;IACxC,QAAQ,CAAC,eAAe,EAAE,uBAAuB,CAAA;IAEjD;;;;;;;;;;;;;OAaG;gBACS,MAAM,EAAE,kBAAkB;IA0CtC;;OAEG;IACH,IAAI,MAAM,IAAI,UAAU,CAQvB;IAED;;;;;;OAMG;IACH,KAAK,IAAI,IAAI;IASb;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAI9B;;;;OAIG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIzC;;;;;;;;OAQG;IACH,oBAAoB,CAAC,YAAY,EAAE,wBAAwB,GAAG,IAAI;CAGnE;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,137 @@
1
+ import { AnalyticsStateful } from './analytics';
2
+ import CoreBase from './CoreBase';
3
+ import { PersonalizationStateful, } from './personalization';
4
+ import { batch, changes, consent, event, flags, online, personalizations, profile, signals, toObservable, } from './signals';
5
+ /**
6
+ * Core runtime that constructs stateful product instances and exposes shared
7
+ * states, including consent and the event stream.
8
+ *
9
+ * @public
10
+ * @remarks
11
+ * @see {@link CoreBase}
12
+ * @see {@link ConsentController}
13
+ */
14
+ class CoreStateful extends CoreBase {
15
+ /** Stateful analytics product. */
16
+ analytics;
17
+ /** Stateful personalization product. */
18
+ personalization;
19
+ /**
20
+ * Create a stateful core with optional default consent and product defaults.
21
+ *
22
+ * @param config - Core and defaults configuration.
23
+ * @example
24
+ * ```ts
25
+ * const core = new CoreStateful({
26
+ * clientId: 'app',
27
+ * environment: 'prod',
28
+ * defaults: { consent: true }
29
+ * })
30
+ * core.consent(true)
31
+ * ```
32
+ */
33
+ constructor(config) {
34
+ super(config);
35
+ const { allowedEventTypes, defaults, getAnonymousId, preventedComponentEvents } = config;
36
+ if (defaults?.consent !== undefined) {
37
+ const { consent: defaultConsent } = defaults;
38
+ consent.value = defaultConsent;
39
+ }
40
+ this.analytics = new AnalyticsStateful({
41
+ api: this.api,
42
+ builder: this.eventBuilder,
43
+ config: {
44
+ allowedEventTypes,
45
+ preventedComponentEvents,
46
+ defaults: {
47
+ consent: defaults?.consent,
48
+ profile: defaults?.profile,
49
+ },
50
+ },
51
+ interceptors: this.interceptors,
52
+ });
53
+ this.personalization = new PersonalizationStateful({
54
+ api: this.api,
55
+ builder: this.eventBuilder,
56
+ config: {
57
+ allowedEventTypes,
58
+ getAnonymousId,
59
+ preventedComponentEvents,
60
+ defaults: {
61
+ consent: defaults?.consent,
62
+ changes: defaults?.changes,
63
+ profile: defaults?.profile,
64
+ personalizations: defaults?.personalizations,
65
+ },
66
+ },
67
+ interceptors: this.interceptors,
68
+ });
69
+ }
70
+ /**
71
+ * Expose merged observable state for consumers.
72
+ */
73
+ get states() {
74
+ return {
75
+ consent: toObservable(consent),
76
+ eventStream: toObservable(event),
77
+ flags: toObservable(flags),
78
+ personalizations: toObservable(personalizations),
79
+ profile: toObservable(profile),
80
+ };
81
+ }
82
+ /**
83
+ * Reset internal state. Consent is intentionally preserved.
84
+ *
85
+ * @remarks
86
+ * Resetting personalization also resets analytics dependencies as a
87
+ * consequence of the current shared-state design.
88
+ */
89
+ reset() {
90
+ batch(() => {
91
+ event.value = undefined;
92
+ changes.value = undefined;
93
+ profile.value = undefined;
94
+ personalizations.value = undefined;
95
+ });
96
+ }
97
+ /**
98
+ * Flush the queues for both the analytics and personalization products.
99
+ * @remarks
100
+ * The personalization queue is only populated if events have been triggered
101
+ * while a device is offline.
102
+ */
103
+ async flush() {
104
+ await this.analytics.flush();
105
+ await this.personalization.flush();
106
+ }
107
+ /**
108
+ * Update consent state
109
+ *
110
+ * @param accept - `true` if the user has granted consent; `false` otherwise.
111
+ */
112
+ consent(accept) {
113
+ consent.value = accept;
114
+ }
115
+ /**
116
+ * Update online state
117
+ *
118
+ * @param isOnline - `true` if the browser is online; `false` otherwise.
119
+ */
120
+ online(isOnline) {
121
+ online.value = isOnline;
122
+ }
123
+ /**
124
+ * Register a preview panel compatible object to receive direct signal access.
125
+ * This enables the preview panel to modify SDK state for testing and simulation.
126
+ *
127
+ * @param previewPanel - An object implementing PreviewPanelSignalObject
128
+ * @remarks
129
+ * This method is intended for use by the Preview Panel component.
130
+ * Direct signal access allows immediate state updates without API calls.
131
+ */
132
+ registerPreviewPanel(previewPanel) {
133
+ previewPanel.signals = signals;
134
+ }
135
+ }
136
+ export default CoreStateful;
137
+ //# sourceMappingURL=CoreStateful.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoreStateful.js","sourceRoot":"","sources":["../src/CoreStateful.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { EventBuilderConfig } from '@contentful/optimization-api-client';
2
+ import { AnalyticsStateless } from './analytics';
3
+ import CoreBase, { type CoreConfig } from './CoreBase';
4
+ import { PersonalizationStateless } from './personalization';
5
+ /**
6
+ * Configuration for the Node-specific Optimization SDK.
7
+ *
8
+ * @public
9
+ * @remarks
10
+ * This configuration extends {@link CoreConfig} but allows partial overrides
11
+ * of the event-builder configuration. SDKs commonly inject their own library
12
+ * metadata or channel definitions.
13
+ */
14
+ export interface CoreStatelessConfig extends CoreConfig {
15
+ /**
16
+ * Override configuration for the analytics (Insights) API client. Omits
17
+ * `beaconHandler`.
18
+ */
19
+ analytics?: Omit<CoreConfig['analytics'], 'beaconHandler'>;
20
+ /**
21
+ * Overrides for the event builder configuration. Omits methods that are only
22
+ * useful in stateful environments.
23
+ */
24
+ eventBuilder?: Omit<EventBuilderConfig, 'getLocale' | 'getPageProperties' | 'getUserAgent'>;
25
+ }
26
+ /**
27
+ * Core runtime that constructs product instances for stateless environments.
28
+ *
29
+ * @public
30
+ * @see {@link CoreBase}
31
+ */
32
+ declare class CoreStateless extends CoreBase {
33
+ /** Stateless analytics product. */
34
+ readonly analytics: AnalyticsStateless;
35
+ /** Stateless personalization product. */
36
+ readonly personalization: PersonalizationStateless;
37
+ /**
38
+ * Create a stateless core. Product instances share the same API client and
39
+ * event builder configured in {@link CoreBase}.
40
+ *
41
+ * @param config - Stateless Core configuration.
42
+ * @example
43
+ * ```ts
44
+ * const sdk = new CoreStateless({ clientId: 'app', environment: 'prod' })
45
+ * core.analytics.trackFlagView({ componentId: 'hero' })
46
+ * // or
47
+ * core.trackFlagView({ componentId: 'hero' })
48
+ * ```
49
+ */
50
+ constructor(config: CoreStatelessConfig);
51
+ }
52
+ export default CoreStateless;
53
+ //# sourceMappingURL=CoreStateless.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoreStateless.d.ts","sourceRoot":"","sources":["../src/CoreStateless.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,QAAQ,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAE5D;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD;;;OAGG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,CAAA;IAE1D;;;OAGG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,mBAAmB,GAAG,cAAc,CAAC,CAAA;CAC5F;AAED;;;;;GAKG;AACH,cAAM,aAAc,SAAQ,QAAQ;IAClC,mCAAmC;IACnC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAA;IACtC,yCAAyC;IACzC,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAA;IAElD;;;;;;;;;;;;OAYG;gBACS,MAAM,EAAE,mBAAmB;CAexC;AAED,eAAe,aAAa,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { AnalyticsStateless } from './analytics';
2
+ import CoreBase from './CoreBase';
3
+ import { PersonalizationStateless } from './personalization';
4
+ /**
5
+ * Core runtime that constructs product instances for stateless environments.
6
+ *
7
+ * @public
8
+ * @see {@link CoreBase}
9
+ */
10
+ class CoreStateless extends CoreBase {
11
+ /** Stateless analytics product. */
12
+ analytics;
13
+ /** Stateless personalization product. */
14
+ personalization;
15
+ /**
16
+ * Create a stateless core. Product instances share the same API client and
17
+ * event builder configured in {@link CoreBase}.
18
+ *
19
+ * @param config - Stateless Core configuration.
20
+ * @example
21
+ * ```ts
22
+ * const sdk = new CoreStateless({ clientId: 'app', environment: 'prod' })
23
+ * core.analytics.trackFlagView({ componentId: 'hero' })
24
+ * // or
25
+ * core.trackFlagView({ componentId: 'hero' })
26
+ * ```
27
+ */
28
+ constructor(config) {
29
+ super(config);
30
+ this.analytics = new AnalyticsStateless({
31
+ api: this.api,
32
+ builder: this.eventBuilder,
33
+ interceptors: this.interceptors,
34
+ });
35
+ this.personalization = new PersonalizationStateless({
36
+ api: this.api,
37
+ builder: this.eventBuilder,
38
+ interceptors: this.interceptors,
39
+ });
40
+ }
41
+ }
42
+ export default CoreStateless;
43
+ //# sourceMappingURL=CoreStateless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoreStateless.js","sourceRoot":"","sources":["../src/CoreStateless.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,QAA6B,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAyB5D;;;;;GAKG;AACH,MAAM,aAAc,SAAQ,QAAQ;IAClC,mCAAmC;IAC1B,SAAS,CAAoB;IACtC,yCAAyC;IAChC,eAAe,CAA0B;IAElD;;;;;;;;;;;;OAYG;IACH,YAAY,MAA2B;QACrC,KAAK,CAAC,MAAM,CAAC,CAAA;QAEb,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,YAAY;YAC1B,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAwB,CAAC;YAClD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,YAAY;YAC1B,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAA;IACJ,CAAC;CACF;AAED,eAAe,aAAa,CAAA"}
@@ -0,0 +1,83 @@
1
+ import type { InsightsEventType as AnalyticsEventType, ApiClient, EventBuilder, ExperienceEventType as PersonalizationEventType } from '@contentful/optimization-api-client';
2
+ import type { LifecycleInterceptors } from './CoreBase';
3
+ import ValuePresence from './lib/value-presence/ValuePresence';
4
+ /**
5
+ * Union of all event {@link AnalyticsEventType | type keys} that this package may emit.
6
+ *
7
+ * @public
8
+ */
9
+ export type EventType = AnalyticsEventType | PersonalizationEventType;
10
+ /**
11
+ * Common configuration for all product implementations.
12
+ *
13
+ * @public
14
+ */
15
+ export interface ProductConfig {
16
+ /**
17
+ * The set of event type strings that are allowed to be sent even if consent is
18
+ * not granted.
19
+ *
20
+ * @defaultValue `['page', 'identify']`
21
+ * @remarks These types are compared against the `type` property of events.
22
+ */
23
+ allowedEventTypes?: EventType[];
24
+ /**
25
+ * A map of duplication keys to a list of component IDs that should be
26
+ * considered duplicates and therefore suppressed.
27
+ *
28
+ * @remarks
29
+ * The actual duplication check is performed by {@link ValuePresence}. The
30
+ * keys of this record are used as duplication scopes. An empty string `''`
31
+ * is converted to an `indefined` scope when specific scopes are not required.
32
+ */
33
+ preventedComponentEvents?: Record<string, string[]>;
34
+ }
35
+ /**
36
+ * Options for configuring the common functionality of {@link ProductBase} descendents.
37
+ *
38
+ * @public
39
+ */
40
+ export interface ProductBaseOptions {
41
+ /** Optimization API client. */
42
+ api: ApiClient;
43
+ /** Event builder for constructing events. */
44
+ builder: EventBuilder;
45
+ /** Optional configuration for allow‑lists and duplication prevention. */
46
+ config?: ProductConfig;
47
+ /** Lifecycle container for event and state interceptors. */
48
+ interceptors: LifecycleInterceptors;
49
+ }
50
+ /**
51
+ * Shared base for all product implementations.
52
+ *
53
+ * @internal
54
+ * @remarks
55
+ * This abstract class is not exported as part of the public API surface.
56
+ * Concrete implementations (e.g., analytics) should extend this class and
57
+ * expose their own public methods.
58
+ */
59
+ declare abstract class ProductBase {
60
+ /**
61
+ * Allow‑list of event {@link AnalyticsEventType | type keys} permitted when consent is not present.
62
+ */
63
+ protected readonly allowedEventTypes?: string[];
64
+ /** Event builder used to construct strongly‑typed events. */
65
+ protected readonly builder: EventBuilder;
66
+ /** Optimization API client used to send events to the Experience and Insights APIs. */
67
+ protected readonly api: ApiClient;
68
+ /**
69
+ * Deduplication helper used to track previously seen values within optional
70
+ * scopes
71
+ */
72
+ readonly duplicationDetector: ValuePresence;
73
+ /** Interceptors that can mutate/augment outgoing events or optimization state. */
74
+ readonly interceptors: LifecycleInterceptors;
75
+ /**
76
+ * Creates a new product base instance.
77
+ *
78
+ * @param options - Options for configuring the functionality common among products.
79
+ */
80
+ constructor(options: ProductBaseOptions);
81
+ }
82
+ export default ProductBase;
83
+ //# sourceMappingURL=ProductBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductBase.d.ts","sourceRoot":"","sources":["../src/ProductBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,IAAI,kBAAkB,EACvC,SAAS,EACT,YAAY,EACZ,mBAAmB,IAAI,wBAAwB,EAChD,MAAM,qCAAqC,CAAA;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,aAAa,MAAM,oCAAoC,CAAA;AAE9D;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,kBAAkB,GAAG,wBAAwB,CAAA;AAWrE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAA;IAE/B;;;;;;;;OAQG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACpD;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,GAAG,EAAE,SAAS,CAAA;IACd,6CAA6C;IAC7C,OAAO,EAAE,YAAY,CAAA;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,4DAA4D;IAC5D,YAAY,EAAE,qBAAqB,CAAA;CACpC;AAED;;;;;;;;GAQG;AACH,uBAAe,WAAW;IACxB;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAE/C,6DAA6D;IAC7D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;IAExC,uFAAuF;IACvF,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;IAEjC;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAA;IAE3C,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAA;IAE5C;;;;OAIG;gBACS,OAAO,EAAE,kBAAkB;CAQxC;AAED,eAAe,WAAW,CAAA"}