@revturbine/sdk 0.2.13
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/headless.js +131 -0
- package/dist/headless.js.map +1 -0
- package/dist/index.js +131 -0
- package/dist/index.js.map +1 -0
- package/dist/types/server-node/client.d.ts +75 -0
- package/dist/types/server-node/client.d.ts.map +1 -0
- package/dist/types/server-node/index.d.ts +37 -0
- package/dist/types/server-node/index.d.ts.map +1 -0
- package/dist/types/server-node/local-server.d.ts +60 -0
- package/dist/types/server-node/local-server.d.ts.map +1 -0
- package/dist/types/server-node/types.d.ts +68 -0
- package/dist/types/server-node/types.d.ts.map +1 -0
- package/dist/types/web-sdk/adapters/api.d.ts +24 -0
- package/dist/types/web-sdk/adapters/api.d.ts.map +1 -0
- package/dist/types/web-sdk/analytics.d.ts +111 -0
- package/dist/types/web-sdk/analytics.d.ts.map +1 -0
- package/dist/types/web-sdk/api-client.d.ts +44 -0
- package/dist/types/web-sdk/api-client.d.ts.map +1 -0
- package/dist/types/web-sdk/browser-runtime.d.ts +62 -0
- package/dist/types/web-sdk/browser-runtime.d.ts.map +1 -0
- package/dist/types/web-sdk/controllers.d.ts +363 -0
- package/dist/types/web-sdk/controllers.d.ts.map +1 -0
- package/dist/types/web-sdk/customer-side.d.ts +1367 -0
- package/dist/types/web-sdk/customer-side.d.ts.map +1 -0
- package/dist/types/web-sdk/env.d.ts +5 -0
- package/dist/types/web-sdk/env.d.ts.map +1 -0
- package/dist/types/web-sdk/generated.d.ts +8 -0
- package/dist/types/web-sdk/generated.d.ts.map +1 -0
- package/dist/types/web-sdk/headless.d.ts +69 -0
- package/dist/types/web-sdk/headless.d.ts.map +1 -0
- package/dist/types/web-sdk/index.d.ts +51 -0
- package/dist/types/web-sdk/index.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/AccessGateSurfaceSlot.d.ts +88 -0
- package/dist/types/web-sdk/placements/AccessGateSurfaceSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/FixedSurfaceSlot.d.ts +56 -0
- package/dist/types/web-sdk/placements/FixedSurfaceSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/MessageSurfaceSlot.d.ts +87 -0
- package/dist/types/web-sdk/placements/MessageSurfaceSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/PlacementRenderer.d.ts +57 -0
- package/dist/types/web-sdk/placements/PlacementRenderer.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/SurfaceSlotComponent.d.ts +70 -0
- package/dist/types/web-sdk/placements/SurfaceSlotComponent.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/abstract/BannerFrame.d.ts +53 -0
- package/dist/types/web-sdk/placements/abstract/BannerFrame.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/abstract/InlineCardPlacement.d.ts +52 -0
- package/dist/types/web-sdk/placements/abstract/InlineCardPlacement.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/abstract/ModalFrame.d.ts +68 -0
- package/dist/types/web-sdk/placements/abstract/ModalFrame.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/abstract/QuotaMeterFrame.d.ts +76 -0
- package/dist/types/web-sdk/placements/abstract/QuotaMeterFrame.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/abstract/index.d.ts +9 -0
- package/dist/types/web-sdk/placements/abstract/index.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/builtin.d.ts +18 -0
- package/dist/types/web-sdk/placements/builtin.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/cta-resolvers.d.ts +67 -0
- package/dist/types/web-sdk/placements/cta-resolvers.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/index.d.ts +28 -0
- package/dist/types/web-sdk/placements/index.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/local-resolver.d.ts +8 -0
- package/dist/types/web-sdk/placements/local-resolver.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/payload-resolution.d.ts +8 -0
- package/dist/types/web-sdk/placements/payload-resolution.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/recommendation.d.ts +35 -0
- package/dist/types/web-sdk/placements/recommendation.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/registry.d.ts +84 -0
- package/dist/types/web-sdk/placements/registry.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/AgentConnectorSlot.d.ts +11 -0
- package/dist/types/web-sdk/placements/slots/AgentConnectorSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/BannerSlot.d.ts +35 -0
- package/dist/types/web-sdk/placements/slots/BannerSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/ButtonSlot.d.ts +23 -0
- package/dist/types/web-sdk/placements/slots/ButtonSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/ChannelPreviewSlots.d.ts +48 -0
- package/dist/types/web-sdk/placements/slots/ChannelPreviewSlots.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/CliSlot.d.ts +11 -0
- package/dist/types/web-sdk/placements/slots/CliSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/CreditBalanceSlot.d.ts +19 -0
- package/dist/types/web-sdk/placements/slots/CreditBalanceSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/FullPageSlot.d.ts +14 -0
- package/dist/types/web-sdk/placements/slots/FullPageSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/InPageSlot.d.ts +13 -0
- package/dist/types/web-sdk/placements/slots/InPageSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/InlineEmbedSlot.d.ts +16 -0
- package/dist/types/web-sdk/placements/slots/InlineEmbedSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/ModalSlot.d.ts +30 -0
- package/dist/types/web-sdk/placements/slots/ModalSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/QuotaMeterSlot.d.ts +19 -0
- package/dist/types/web-sdk/placements/slots/QuotaMeterSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/ToastSlot.d.ts +17 -0
- package/dist/types/web-sdk/placements/slots/ToastSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/TooltipSlot.d.ts +15 -0
- package/dist/types/web-sdk/placements/slots/TooltipSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/slots/index.d.ts +14 -0
- package/dist/types/web-sdk/placements/slots/index.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/surface-slot-constants.d.ts +13 -0
- package/dist/types/web-sdk/placements/surface-slot-constants.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/surface-template-defaults.d.ts +16 -0
- package/dist/types/web-sdk/placements/surface-template-defaults.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/token-derivation.d.ts +7 -0
- package/dist/types/web-sdk/placements/token-derivation.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/types.d.ts +226 -0
- package/dist/types/web-sdk/placements/types.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/usePlacementPersonalization.d.ts +20 -0
- package/dist/types/web-sdk/placements/usePlacementPersonalization.d.ts.map +1 -0
- package/dist/types/web-sdk/placements/useSurfaceSlot.d.ts +60 -0
- package/dist/types/web-sdk/placements/useSurfaceSlot.d.ts.map +1 -0
- package/dist/types/web-sdk/providers/index.d.ts +3 -0
- package/dist/types/web-sdk/providers/index.d.ts.map +1 -0
- package/dist/types/web-sdk/providers/registry.d.ts +8 -0
- package/dist/types/web-sdk/providers/registry.d.ts.map +1 -0
- package/dist/types/web-sdk/providers/types.d.ts +8 -0
- package/dist/types/web-sdk/providers/types.d.ts.map +1 -0
- package/dist/types/web-sdk/react/Placement.d.ts +50 -0
- package/dist/types/web-sdk/react/Placement.d.ts.map +1 -0
- package/dist/types/web-sdk/react/PlacementDecisionInspector.d.ts +40 -0
- package/dist/types/web-sdk/react/PlacementDecisionInspector.d.ts.map +1 -0
- package/dist/types/web-sdk/react/RevTurbineProvider.d.ts +31 -0
- package/dist/types/web-sdk/react/RevTurbineProvider.d.ts.map +1 -0
- package/dist/types/web-sdk/react/SurfaceTypes.d.ts +19 -0
- package/dist/types/web-sdk/react/SurfaceTypes.d.ts.map +1 -0
- package/dist/types/web-sdk/react/UserProfile.d.ts +23 -0
- package/dist/types/web-sdk/react/UserProfile.d.ts.map +1 -0
- package/dist/types/web-sdk/react/index.d.ts +11 -0
- package/dist/types/web-sdk/react/index.d.ts.map +1 -0
- package/dist/types/web-sdk/react/useEntitlement.d.ts +53 -0
- package/dist/types/web-sdk/react/useEntitlement.d.ts.map +1 -0
- package/dist/types/web-sdk/react/usePlacement.d.ts +63 -0
- package/dist/types/web-sdk/react/usePlacement.d.ts.map +1 -0
- package/dist/types/web-sdk/react/useRevTurbine.d.ts +17 -0
- package/dist/types/web-sdk/react/useRevTurbine.d.ts.map +1 -0
- package/dist/types/web-sdk/react/useUsageSnapshot.d.ts +7 -0
- package/dist/types/web-sdk/react/useUsageSnapshot.d.ts.map +1 -0
- package/dist/types/web-sdk/segments.d.ts +9 -0
- package/dist/types/web-sdk/segments.d.ts.map +1 -0
- package/dist/types/web-sdk/storage.d.ts +38 -0
- package/dist/types/web-sdk/storage.d.ts.map +1 -0
- package/dist/types/web-sdk/theme/ThemeContext.d.ts +18 -0
- package/dist/types/web-sdk/theme/ThemeContext.d.ts.map +1 -0
- package/dist/types/web-sdk/theme/defaults.d.ts +13 -0
- package/dist/types/web-sdk/theme/defaults.d.ts.map +1 -0
- package/dist/types/web-sdk/theme/index.d.ts +6 -0
- package/dist/types/web-sdk/theme/index.d.ts.map +1 -0
- package/dist/types/web-sdk/theme/theme-loader.d.ts +26 -0
- package/dist/types/web-sdk/theme/theme-loader.d.ts.map +1 -0
- package/dist/types/web-sdk/theme/types.d.ts +121 -0
- package/dist/types/web-sdk/theme/types.d.ts.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless SDK controllers — framework-agnostic orchestration.
|
|
3
|
+
*
|
|
4
|
+
* These classes encapsulate the register → decide → track → interact lifecycle
|
|
5
|
+
* that the React hooks implement via `useState`/`useEffect`. Use them from
|
|
6
|
+
* Vue, Svelte, Angular, vanilla JS, or server-side code.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { initRevTurbine, PlacementController, EntitlementGate } from '@revt-eng/web-sdk/headless';
|
|
11
|
+
*
|
|
12
|
+
* const session = await initRevTurbine({
|
|
13
|
+
* tenantId: 'tenant_abc',
|
|
14
|
+
* apiKey: 'rt_live_xxx',
|
|
15
|
+
* endpoint: 'https://api.revturbine.io',
|
|
16
|
+
* user: { id: 'user_123', plan: { id: 'pro' } },
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const banner = session.placement({ surfaceSlot: { id: 'upsell_banner' } });
|
|
20
|
+
* await banner.load();
|
|
21
|
+
* if (banner.visible) { ... }
|
|
22
|
+
* await banner.dismiss();
|
|
23
|
+
*
|
|
24
|
+
* const gate = session.entitlement({ handle: 'brand_kit', autoGate: true });
|
|
25
|
+
* await gate.check();
|
|
26
|
+
* if (gate.denied) { // show gate.gatedPlacement }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
import type { RevTurbineCustomerSdk, RevTurbineInitInputOptions, RevTurbinePlacementConfig, RevTurbineSurfaceSlotConfig, RevTurbinePlacementDecision, RevTurbinePlacementContent, RevTurbinePlacementDecisionOverrides, RevTurbinePlacementRequestConfig, RevTurbineContextMode, RevTurbineEntitlementContext, RevTurbineUserContext, EntitlementResult, PlacementOutput, UserTargetingContext, RevTurbineUsageSnapshot, RevTurbineTrialContext, UsageBalances, JsonObject } from './customer-side';
|
|
30
|
+
import type { RevTurbineTheme } from './theme/types';
|
|
31
|
+
/** Callback used to subscribe to state changes in controllers. */
|
|
32
|
+
export type ChangeListener = () => void;
|
|
33
|
+
/**
|
|
34
|
+
* Options for creating a {@link PlacementController}.
|
|
35
|
+
*/
|
|
36
|
+
export interface PlacementControllerOptions {
|
|
37
|
+
/** Placement configuration (name, scope key, metadata). */
|
|
38
|
+
placement?: RevTurbinePlacementConfig;
|
|
39
|
+
/** Canonical surface slot configuration (preferred over `placement`). */
|
|
40
|
+
surfaceSlot?: RevTurbineSurfaceSlotConfig;
|
|
41
|
+
/** Target user ID. Falls back to the SDK's current user context. */
|
|
42
|
+
userId?: string;
|
|
43
|
+
/** Context resolution mode. Default `'auto'`. */
|
|
44
|
+
contextMode?: RevTurbineContextMode;
|
|
45
|
+
/** Override segment, plan, or usage for testing. */
|
|
46
|
+
overrides?: RevTurbinePlacementDecisionOverrides;
|
|
47
|
+
/** Custom traits to include in the decision request. */
|
|
48
|
+
traits?: Record<string, string | number | boolean>;
|
|
49
|
+
/** Decision cache TTL in milliseconds. */
|
|
50
|
+
ttlMs?: number;
|
|
51
|
+
/** Whether to track an impression automatically when the decision is visible. Default `true`. */
|
|
52
|
+
autoTrackImpression?: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Read-only snapshot of a {@link PlacementController}'s state.
|
|
56
|
+
*/
|
|
57
|
+
export interface PlacementControllerState {
|
|
58
|
+
readonly isLoading: boolean;
|
|
59
|
+
readonly error: string;
|
|
60
|
+
readonly placementId: string;
|
|
61
|
+
readonly visible: boolean;
|
|
62
|
+
readonly decision: RevTurbinePlacementDecision | null;
|
|
63
|
+
readonly content: RevTurbinePlacementContent['content'] | null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Framework-agnostic placement lifecycle controller.
|
|
67
|
+
*
|
|
68
|
+
* Encapsulates the same register → decide → impression-track → interact flow
|
|
69
|
+
* that the React `usePlacement()` hook provides, but without any framework dependency.
|
|
70
|
+
*
|
|
71
|
+
* Subscribe to state changes with {@link onChange} and read the current state
|
|
72
|
+
* with {@link state}, or just `await load()` for a one-shot pattern.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* const ctrl = new PlacementController(sdk, { surfaceSlot: { id: 'upsell_banner' } });
|
|
77
|
+
* ctrl.onChange(() => updateUI(ctrl.state));
|
|
78
|
+
* await ctrl.load();
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare class PlacementController {
|
|
82
|
+
private readonly sdk;
|
|
83
|
+
private readonly options;
|
|
84
|
+
private readonly listeners;
|
|
85
|
+
private _placementId;
|
|
86
|
+
private _decision;
|
|
87
|
+
private _isLoading;
|
|
88
|
+
private _error;
|
|
89
|
+
private _impressionTracked;
|
|
90
|
+
private _loadSeq;
|
|
91
|
+
constructor(sdk: RevTurbineCustomerSdk, options: PlacementControllerOptions);
|
|
92
|
+
/** Current state snapshot. */
|
|
93
|
+
get state(): PlacementControllerState;
|
|
94
|
+
/** Convenience: `true` when the current decision says the placement is visible. */
|
|
95
|
+
get visible(): boolean;
|
|
96
|
+
/** Current resolved content, or `null` if no decision has been loaded. */
|
|
97
|
+
get content(): RevTurbinePlacementContent['content'] | null;
|
|
98
|
+
/** Current decision, or `null` if not yet loaded. */
|
|
99
|
+
get decision(): RevTurbinePlacementDecision | null;
|
|
100
|
+
/** Registered placement ID, or empty string before first `load()`. */
|
|
101
|
+
get placementId(): string;
|
|
102
|
+
/**
|
|
103
|
+
* Register the placement (if needed) and fetch a decision.
|
|
104
|
+
*
|
|
105
|
+
* When `autoTrackImpression` is true (default), a visible decision
|
|
106
|
+
* automatically records an impression event.
|
|
107
|
+
*/
|
|
108
|
+
load(): Promise<RevTurbinePlacementDecision | null>;
|
|
109
|
+
/** Re-fetch the placement decision (clears impression tracking). */
|
|
110
|
+
refresh(): Promise<RevTurbinePlacementDecision | null>;
|
|
111
|
+
/** Record a dismiss interaction and hide the placement. */
|
|
112
|
+
dismiss(cooldownMs?: number): Promise<void>;
|
|
113
|
+
/** Record a snooze/remind-me-later interaction and hide the placement. */
|
|
114
|
+
snooze(seconds?: number): Promise<void>;
|
|
115
|
+
/** Alias for {@link snooze}. */
|
|
116
|
+
remindMeLater(seconds?: number): Promise<void>;
|
|
117
|
+
/** Record a CTA click interaction. */
|
|
118
|
+
ctaClick(ctaTarget?: string): Promise<void>;
|
|
119
|
+
/** Record a CTA completion interaction and hide the placement. */
|
|
120
|
+
ctaComplete(ctaTarget?: string): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Subscribe to state changes. Returns an unsubscribe function.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* const unsub = ctrl.onChange(() => console.log(ctrl.state));
|
|
127
|
+
* // later...
|
|
128
|
+
* unsub();
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
onChange(listener: ChangeListener): () => void;
|
|
132
|
+
/** Reset the controller state (clears decision, placement ID, etc.). */
|
|
133
|
+
reset(): void;
|
|
134
|
+
private trackInteraction;
|
|
135
|
+
private notify;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Options for creating an {@link EntitlementGate}.
|
|
139
|
+
*/
|
|
140
|
+
export interface EntitlementGateOptions {
|
|
141
|
+
/** The entitlement handle to check (e.g. `'brand_kit'`, `'mp4_download'`). */
|
|
142
|
+
handle: string;
|
|
143
|
+
/** Optional context (usage, required tier, etc.). */
|
|
144
|
+
context?: RevTurbineEntitlementContext;
|
|
145
|
+
/**
|
|
146
|
+
* When true, automatically resolve a gated placement for denied entitlements.
|
|
147
|
+
* Default `false`.
|
|
148
|
+
*/
|
|
149
|
+
autoGate?: boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Optional placement request fields used when auto-gating needs to fetch
|
|
152
|
+
* a placement and one is not attached to the entitlement response.
|
|
153
|
+
*/
|
|
154
|
+
gatePlacementRequest?: Omit<RevTurbinePlacementRequestConfig, 'entitlementHandle'>;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Read-only snapshot of an {@link EntitlementGate}'s state.
|
|
158
|
+
*/
|
|
159
|
+
export interface EntitlementGateState {
|
|
160
|
+
readonly isLoading: boolean;
|
|
161
|
+
readonly error: string | null;
|
|
162
|
+
readonly result: EntitlementResult | null;
|
|
163
|
+
readonly allowed: boolean;
|
|
164
|
+
readonly limited: boolean;
|
|
165
|
+
readonly denied: boolean;
|
|
166
|
+
readonly gatedPlacement: PlacementOutput | null;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Framework-agnostic entitlement check + auto-gate controller.
|
|
170
|
+
*
|
|
171
|
+
* Encapsulates the same check → gate-resolve flow that the React
|
|
172
|
+
* `useEntitlement()` hook provides.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```ts
|
|
176
|
+
* const gate = new EntitlementGate(sdk, { handle: 'brand_kit', autoGate: true });
|
|
177
|
+
* gate.onChange(() => updateUI(gate.state));
|
|
178
|
+
* await gate.check();
|
|
179
|
+
* if (gate.denied && gate.gatedPlacement) { showUpgradeModal(gate.gatedPlacement); }
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
export declare class EntitlementGate {
|
|
183
|
+
private readonly sdk;
|
|
184
|
+
private readonly options;
|
|
185
|
+
private readonly listeners;
|
|
186
|
+
private _isLoading;
|
|
187
|
+
private _error;
|
|
188
|
+
private _result;
|
|
189
|
+
private _gatedPlacement;
|
|
190
|
+
constructor(sdk: RevTurbineCustomerSdk, options: EntitlementGateOptions);
|
|
191
|
+
/** Current state snapshot. */
|
|
192
|
+
get state(): EntitlementGateState;
|
|
193
|
+
/** Convenience: `true` when the entitlement is allowed. */
|
|
194
|
+
get allowed(): boolean;
|
|
195
|
+
/** Convenience: `true` when usage is limited (partially exhausted). */
|
|
196
|
+
get limited(): boolean;
|
|
197
|
+
/** Convenience: `true` when the entitlement is denied. */
|
|
198
|
+
get denied(): boolean;
|
|
199
|
+
/** The raw entitlement result, or `null` before first check. */
|
|
200
|
+
get result(): EntitlementResult | null;
|
|
201
|
+
/** Resolved gated placement when `denied` and `autoGate` are active. */
|
|
202
|
+
get gatedPlacement(): PlacementOutput | null;
|
|
203
|
+
/**
|
|
204
|
+
* Run the entitlement check. If denied and `autoGate` is true,
|
|
205
|
+
* also resolves a gated placement.
|
|
206
|
+
*/
|
|
207
|
+
check(): Promise<EntitlementResult | null>;
|
|
208
|
+
/** Re-run the entitlement check (alias of {@link check}). */
|
|
209
|
+
recheck(): Promise<EntitlementResult | null>;
|
|
210
|
+
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
211
|
+
onChange(listener: ChangeListener): () => void;
|
|
212
|
+
private notify;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Options for {@link initRevTurbine}, extending the standard init options
|
|
216
|
+
* with optional bootstrap placements.
|
|
217
|
+
*/
|
|
218
|
+
export type SdkSessionOptions = RevTurbineInitInputOptions & {
|
|
219
|
+
/** Placements to bootstrap (preload decisions) on creation. */
|
|
220
|
+
bootstrapPlacements?: Array<{
|
|
221
|
+
placement: RevTurbinePlacementConfig;
|
|
222
|
+
userId?: string;
|
|
223
|
+
contextMode?: RevTurbineContextMode;
|
|
224
|
+
overrides?: RevTurbinePlacementDecisionOverrides;
|
|
225
|
+
traits?: Record<string, string | number | boolean>;
|
|
226
|
+
ttlMs?: number;
|
|
227
|
+
}>;
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* A fully-initialized SDK session with convenience methods for creating
|
|
231
|
+
* placement and entitlement controllers, updating user context,
|
|
232
|
+
* and accessing the underlying SDK instance.
|
|
233
|
+
*
|
|
234
|
+
* This is the recommended entry point for headless (non-React) consumers.
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```ts
|
|
238
|
+
* const session = await initRevTurbine({
|
|
239
|
+
* tenantId: 'tenant_abc',
|
|
240
|
+
* apiKey: 'rt_live_xxx',
|
|
241
|
+
* endpoint: 'https://api.revturbine.io',
|
|
242
|
+
* user: { id: 'user_123', plan: { id: 'pro' } },
|
|
243
|
+
* });
|
|
244
|
+
*
|
|
245
|
+
* // Get a placement by slot ID
|
|
246
|
+
* const banner = session.placement({ surfaceSlot: { id: 'upsell_banner' } });
|
|
247
|
+
* const decision = await banner.load();
|
|
248
|
+
*
|
|
249
|
+
* // Check an entitlement with auto-gate
|
|
250
|
+
* const gate = session.entitlement({ handle: 'brand_kit', autoGate: true });
|
|
251
|
+
* await gate.check();
|
|
252
|
+
*
|
|
253
|
+
* // Update user context (works in any runtime mode)
|
|
254
|
+
* session.identify('user_456', { plan: { id: 'enterprise' } });
|
|
255
|
+
* session.setUserContext({ personalization: { company: 'Acme' } });
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
export declare class SdkSession {
|
|
259
|
+
/** The underlying SDK instance. Use for advanced/direct operations. */
|
|
260
|
+
readonly sdk: RevTurbineCustomerSdk;
|
|
261
|
+
/** Resolved theme. */
|
|
262
|
+
readonly theme: RevTurbineTheme;
|
|
263
|
+
constructor(sdk: RevTurbineCustomerSdk, theme: RevTurbineTheme);
|
|
264
|
+
/**
|
|
265
|
+
* Identify a user and optionally set traits/context.
|
|
266
|
+
* Triggers segment re-evaluation and clears decision cache.
|
|
267
|
+
*/
|
|
268
|
+
identify(userId: string, contextOrTraits?: Parameters<RevTurbineCustomerSdk['identify']>[1]): void;
|
|
269
|
+
/** Reset to anonymous user state. */
|
|
270
|
+
resetIdentity(): void;
|
|
271
|
+
/**
|
|
272
|
+
* Hard-reset the user context to a blank slate (no anonymous inference) —
|
|
273
|
+
* removes every user-context value plus usage balances and clears the
|
|
274
|
+
* decision cache, interaction state, and impression history. Mostly for
|
|
275
|
+
* demo / fixture flows. See {@link RevTurbineCustomerSdk.resetUserContext}.
|
|
276
|
+
*/
|
|
277
|
+
resetUserContext(): void;
|
|
278
|
+
/**
|
|
279
|
+
* Merge fields into the current user context.
|
|
280
|
+
* Triggers segment re-evaluation.
|
|
281
|
+
*/
|
|
282
|
+
setUserContext(context: RevTurbineUserContext): void;
|
|
283
|
+
/** Get the current resolved user context (includes `tenant_id`, `user_id`). */
|
|
284
|
+
getUserContext(): ReturnType<RevTurbineCustomerSdk['getUserContext']>;
|
|
285
|
+
/** Update usage balances (e.g. after a meter event). */
|
|
286
|
+
updateUsage(balances: UsageBalances): void;
|
|
287
|
+
/** Fetch full user context from the server (server runtime mode). */
|
|
288
|
+
fetchUserContext(userId: string): Promise<UserTargetingContext>;
|
|
289
|
+
/** Get the current trial status. */
|
|
290
|
+
getTrialStatus(): Promise<RevTurbineTrialContext>;
|
|
291
|
+
/** Get a snapshot of current usage balances. */
|
|
292
|
+
getUsage(): RevTurbineUsageSnapshot;
|
|
293
|
+
/**
|
|
294
|
+
* Create a {@link PlacementController} bound to this session's SDK.
|
|
295
|
+
*
|
|
296
|
+
* @example
|
|
297
|
+
* ```ts
|
|
298
|
+
* const banner = session.placement({ surfaceSlot: { id: 'upsell_banner' } });
|
|
299
|
+
* await banner.load();
|
|
300
|
+
* if (banner.visible) { renderBanner(banner.content); }
|
|
301
|
+
* ```
|
|
302
|
+
*/
|
|
303
|
+
placement(options: PlacementControllerOptions): PlacementController;
|
|
304
|
+
/**
|
|
305
|
+
* One-shot: register a surface slot, fetch a decision, and return it.
|
|
306
|
+
*
|
|
307
|
+
* For repeated use or interaction tracking, prefer {@link placement} which
|
|
308
|
+
* returns a full controller.
|
|
309
|
+
*/
|
|
310
|
+
getPlacementBySlotId(slotId: string, options?: Omit<PlacementControllerOptions, 'surfaceSlot' | 'placement'>): Promise<RevTurbinePlacementDecision | null>;
|
|
311
|
+
/**
|
|
312
|
+
* Get a raw placement output by request config (slot, entitlement, plan, or chained).
|
|
313
|
+
* Returns the full {@link PlacementOutput} or `null`.
|
|
314
|
+
*/
|
|
315
|
+
getPlacement(config: RevTurbinePlacementRequestConfig): Promise<PlacementOutput | null>;
|
|
316
|
+
/**
|
|
317
|
+
* Create an {@link EntitlementGate} bound to this session's SDK.
|
|
318
|
+
*
|
|
319
|
+
* @example
|
|
320
|
+
* ```ts
|
|
321
|
+
* const gate = session.entitlement({ handle: 'brand_kit', autoGate: true });
|
|
322
|
+
* await gate.check();
|
|
323
|
+
* if (gate.denied) { showGate(gate.gatedPlacement); }
|
|
324
|
+
* ```
|
|
325
|
+
*/
|
|
326
|
+
entitlement(options: EntitlementGateOptions): EntitlementGate;
|
|
327
|
+
/**
|
|
328
|
+
* One-shot entitlement check. For auto-gating or reactive updates,
|
|
329
|
+
* prefer {@link entitlement} which returns a full controller.
|
|
330
|
+
*/
|
|
331
|
+
checkEntitlement(handle: string, context?: RevTurbineEntitlementContext): Promise<EntitlementResult>;
|
|
332
|
+
/** Track a custom event. */
|
|
333
|
+
trackEvent(name: string, data?: Record<string, JsonObject[string]>): Promise<void>;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Create a fully-initialized SDK session.
|
|
337
|
+
*
|
|
338
|
+
* This is the recommended entry point for headless (non-React) consumers.
|
|
339
|
+
* It handles:
|
|
340
|
+
* 1. SDK initialization via `initRevTurbine()`
|
|
341
|
+
* 2. User identification (if `options.user.id` is provided)
|
|
342
|
+
* 3. Theme resolution (from ExportedConfig or API)
|
|
343
|
+
* 4. Placement bootstrapping (preloading decisions)
|
|
344
|
+
*
|
|
345
|
+
* The returned {@link SdkSession} exposes the full imperative API:
|
|
346
|
+
* user context management, placement controllers, entitlement gates,
|
|
347
|
+
* and event tracking.
|
|
348
|
+
*
|
|
349
|
+
* @example
|
|
350
|
+
* ```ts
|
|
351
|
+
* const session = await initRevTurbine({
|
|
352
|
+
* tenantId: 'tenant_abc',
|
|
353
|
+
* apiKey: 'rt_live_xxx',
|
|
354
|
+
* endpoint: 'https://api.revturbine.io',
|
|
355
|
+
* user: { id: 'user_123', plan: { id: 'pro' } },
|
|
356
|
+
* bootstrapPlacements: [
|
|
357
|
+
* { placement: { name: 'pricing_banner' } },
|
|
358
|
+
* ],
|
|
359
|
+
* });
|
|
360
|
+
* ```
|
|
361
|
+
*/
|
|
362
|
+
export declare function initRevTurbine(options: SdkSessionOptions): Promise<SdkSession>;
|
|
363
|
+
//# sourceMappingURL=controllers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controllers.d.ts","sourceRoot":"","sources":["../../../controllers.ts"],"names":[],"mappings":"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"}
|