@ops-ai/react-router-toggly 1.0.1 → 1.2.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/dist/client.d.ts CHANGED
@@ -27,6 +27,10 @@ type EvaluationMode = 'local' | 'remote';
27
27
  * Configuration options for Toggly
28
28
  */
29
29
  interface TogglyConfig {
30
+ /** Enable compact browser telemetry (default: true with an app key). */
31
+ enableTelemetry?: boolean;
32
+ /** Browser telemetry interval, 30000–60000 ms (default: 45000). */
33
+ telemetryFlushIntervalMs?: number;
30
34
  /** Toggly application key */
31
35
  appKey?: string;
32
36
  /** Environment name (e.g., 'Production', 'Staging') */
@@ -61,6 +65,16 @@ interface TogglyConfig {
61
65
  localGates?: LocalGate[];
62
66
  /** Optional SDK error callback for reporting fetch/evaluation failures. */
63
67
  onError?: (message: string, error?: unknown) => void;
68
+ /**
69
+ * Use `/evaluated-variants-signed` and expose {@link TogglyContextValue.getVariant} /
70
+ * `getVariantValue` (client) or the equivalent {@link TogglyServerClient} methods
71
+ * (server). Only applies in `remote` evaluationMode client-side; the server
72
+ * package forces `remote` when this is set (mirrors the Nuxt/Astro OPS-825
73
+ * override — server otherwise defaults to `definitions-signed` + local eval).
74
+ */
75
+ enableVariants?: boolean;
76
+ /** Host-minted browser capability; takes precedence over client identity targeting. */
77
+ instanceId?: string;
64
78
  /** Initial browser identity; hydrated server identity takes precedence. */
65
79
  identity?: string;
66
80
  /** User groups for targeting */
@@ -117,6 +131,8 @@ interface TogglyConfig {
117
131
  * User identity context for feature targeting
118
132
  */
119
133
  interface IdentityContext {
134
+ /** Browser capability. An empty value clears the token; omitted identity updates use client targeting. */
135
+ instanceId?: string;
120
136
  /** Unique user identifier */
121
137
  identity?: string;
122
138
  /** User groups for targeting */
@@ -136,6 +152,13 @@ interface IdentityContext {
136
152
  * Feature flags state (boolean or entity gate per flag)
137
153
  */
138
154
  type FeatureFlags = EvaluatedDefinitions;
155
+ /**
156
+ * Assigned variant for a feature (aligned with @ops-ai/feature-flags-toggly).
157
+ */
158
+ interface VariantResult {
159
+ name: string;
160
+ configurationValue?: unknown;
161
+ }
139
162
  /**
140
163
  * Feature evaluation result
141
164
  */
@@ -242,10 +265,18 @@ declare const HEADERS: {
242
265
  /** Meta key for loader data */
243
266
  declare const TOGGLY_LOADER_KEY: "__toggly";
244
267
 
268
+ interface FrontendTelemetry {
269
+ recordUsage(featureKey: string, variant?: string): void;
270
+ recordView(featureKey: string, variant?: string): void;
271
+ incrementCounter(metricKey: string, value?: number): void;
272
+ setGauge(metricKey: string, value: number): void;
273
+ flushTelemetry(): Promise<void>;
274
+ }
275
+
245
276
  /**
246
277
  * Toggly context value
247
278
  */
248
- interface TogglyContextValue {
279
+ interface TogglyContextValue extends FrontendTelemetry {
249
280
  /** Current feature flags */
250
281
  flags: FeatureFlags;
251
282
  /** Whether the client is initialized */
@@ -260,6 +291,17 @@ interface TogglyContextValue {
260
291
  evaluateGate: (featureKeys: string[], requirement?: 'all' | 'any', negate?: boolean, entity?: TogglyEntityContext | Record<string, unknown> | null, kind?: string) => boolean;
261
292
  /** Register a domain-object mapper for entity-context evaluation */
262
293
  registerContext: <T>(kind: string, mapper: (entity: T) => TogglyEntityContext) => void;
294
+ /**
295
+ * Current variant assignment for a feature (requires `enableVariants` in the
296
+ * provider config). Soft-null when variants are disabled, unassigned, or the
297
+ * effective flag is off — never throws.
298
+ */
299
+ getVariant: (featureKey: string) => VariantResult | null;
300
+ /**
301
+ * Configuration payload for the assigned variant, if any.
302
+ * Optional `isT` type guard soft-fails to null on mismatch.
303
+ */
304
+ getVariantValue: <T = unknown>(featureKey: string, isT?: (v: unknown) => v is T) => T | null;
263
305
  /** Set user identity */
264
306
  identify: (identity: string, context?: IdentityContext) => Promise<void>;
265
307
  /** Clear user identity */
@@ -298,7 +340,7 @@ declare const TogglyContext: react.Context<TogglyContextValue | undefined>;
298
340
  /**
299
341
  * Toggly Provider component
300
342
  */
301
- declare function TogglyProvider({ children, serverContext, config, enableRefresh, refreshInterval, onFlagsChange, }: TogglyProviderProps): ReactElement;
343
+ declare function TogglyProvider(props: Readonly<TogglyProviderProps>): ReactElement;
302
344
  /**
303
345
  * Hook to access Toggly context
304
346
  */
@@ -600,4 +642,4 @@ declare function TogglyScript({ serverContext, nonce, }: {
600
642
  */
601
643
  declare function getWindowTogglyData(): ServerFeatureContext | undefined;
602
644
 
603
- export { type EvaluationResult, type EvaluationSeriesData, Feature, FeatureDisabled, type FeatureDisabledProps, FeatureEnabled, type FeatureEnabledProps, type FeatureFlags, FeatureGate, type FeatureGateProps, type FeatureProps, type FeatureRequirement, FeatureSwitch, type FeatureSwitchProps, HEADERS, type HookMetadata, type IdentityContext, type IdentitySeriesData, type LoaderDataWithToggly, RouterTogglyProvider, type RouterTogglyProviderProps, STORAGE_KEYS, type ServerFeatureContext, TOGGLY_LOADER_KEY, type TogglyConfig, TogglyConfigError, TogglyContext, type TogglyContextValue, TogglyError, type TogglyHook, TogglyNetworkError, TogglyProvider, type TogglyProviderProps, TogglyScript, TogglyTimeoutError, extractServerContext, getWindowTogglyData, hasTogglyContext, useABTest, useFeature, useFeatureCallback, useFeatureChange, useFeatureDisabled, useFeatureFlags, useFeatureGate, useFeatureRender, useFeatureValue, useFeatureWithLoading, useFeatures, useIdentity, useRefreshFlags, useToggly, useTogglyContext, useTogglyLoaderData, useTogglyReady, useTogglyRouteLoaderData };
645
+ export { type EvaluationResult, type EvaluationSeriesData, Feature, FeatureDisabled, type FeatureDisabledProps, FeatureEnabled, type FeatureEnabledProps, type FeatureFlags, FeatureGate, type FeatureGateProps, type FeatureProps, type FeatureRequirement, FeatureSwitch, type FeatureSwitchProps, type FrontendTelemetry, HEADERS, type HookMetadata, type IdentityContext, type IdentitySeriesData, type LoaderDataWithToggly, RouterTogglyProvider, type RouterTogglyProviderProps, STORAGE_KEYS, type ServerFeatureContext, TOGGLY_LOADER_KEY, type TogglyConfig, TogglyConfigError, TogglyContext, type TogglyContextValue, TogglyError, type TogglyHook, TogglyNetworkError, TogglyProvider, type TogglyProviderProps, TogglyScript, TogglyTimeoutError, extractServerContext, getWindowTogglyData, hasTogglyContext, useABTest, useFeature, useFeatureCallback, useFeatureChange, useFeatureDisabled, useFeatureFlags, useFeatureGate, useFeatureRender, useFeatureValue, useFeatureWithLoading, useFeatures, useIdentity, useRefreshFlags, useToggly, useTogglyContext, useTogglyLoaderData, useTogglyReady, useTogglyRouteLoaderData };