@uniformdev/context 20.3.1 → 20.4.1-alpha.15

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.
@@ -859,6 +859,10 @@ type LogMessages = {
859
859
  }>;
860
860
  /** Final result for a personalized variation */
861
861
  303: MessageFunc<boolean>;
862
+ /** Personalization algorithm not found */
863
+ 304: MessageFunc<{
864
+ algorithm: string;
865
+ }>;
862
866
  /** A/B test placement executing */
863
867
  400: MessageFunc<string>;
864
868
  /** A/B Test definition did not exist */
@@ -898,23 +902,29 @@ type LogMessageSingle<TID extends keyof LogMessages = keyof LogMessages> = [
898
902
  type LogMessageGroup<TID extends keyof LogMessages = keyof LogMessages> = [severity: Severity, id: TID, group: 'GROUP', ...args: Parameters<LogMessages[TID]>] | [severity: Severity, id: TID, group: 'ENDGROUP'];
899
903
  type LogDrain = (message: LogMessage) => void;
900
904
 
901
- type VariantMatchCriteria = {
905
+ /** Data for a personalization variation using the top-down criteria selection algorithm */
906
+ interface VariantMatchCriteria extends VariantMatchMetadata {
902
907
  /**
903
908
  * Operation for match criteria
904
909
  *
905
910
  * @defaultValue `&`
906
911
  */
907
912
  op?: '&' | '|';
908
- crit: DimensionMatch[];
909
- /**
910
- * Name of the variant for analytics tracking.
911
- */
912
- name?: string;
913
+ crit: Array<DimensionMatch | QuirkMatch>;
913
914
  /**
914
915
  * Control group percentage for the variant.
915
916
  */
916
917
  control?: number;
917
- };
918
+ }
919
+ /** Data that must exist on a personalization variation regardless of selection algorithm */
920
+ interface VariantMatchMetadata {
921
+ /**
922
+ * Name of the variation for analytics tracking.
923
+ * NOTE: name is optional for backwards compatibility, but it is HIGHLY recommended to specify a name
924
+ * as the default fallback is not helpfully named and is reliant on the order of the variations array.
925
+ */
926
+ name?: string;
927
+ }
918
928
  type DimensionMatch = {
919
929
  /**
920
930
  * Left hand side of the match expression (name of dimension in score vector)
@@ -953,17 +963,48 @@ type DimensionMatch = {
953
963
  */
954
964
  rDim?: string;
955
965
  };
966
+ type QuirkMatch = {
967
+ /**
968
+ * Type of match expression; 'q' discriminates quirk matches from dimension matches
969
+ */
970
+ t: 'q';
971
+ /**
972
+ * Left hand side of the match expression (name of quirk)
973
+ * NOTE: if the quirk is not present
974
+ */
975
+ l: string;
976
+ /**
977
+ * Operator of the match expression
978
+ * Comparison operators:
979
+ * =: `l` is equal to the right hand side expression
980
+ * !=: `l` is not equal to the right hand side expression
981
+ */
982
+ op: '=' | '!=';
983
+ /**
984
+ * Right hand side of the match expression
985
+ * This value is treated as a constant value, if it is present. If it's a string, it is parsed to an integer.
986
+ * To reference another score dimension as the RHS, use the `rDim` property instead.
987
+ * `r` and `rDim` are mutually exclusive; if both are specified, then `rDim` wins.
988
+ */
989
+ r: string;
990
+ /**
991
+ * Only here to maintain object compatibility with DimensionMatch.
992
+ * Completely ignored.
993
+ * @deprecated this is not used with QuirkMatch.
994
+ */
995
+ rDim?: string;
996
+ };
956
997
 
957
998
  /** Content that is tagged for adding enrichment score when triggered by behavior (i.e. being shown that content) */
958
999
  type BehaviorTag = {
959
1000
  beh?: EnrichmentData[];
960
1001
  };
961
1002
  /** Defines the shape of a personalized content variant */
962
- type PersonalizedVariant = {
1003
+ type PersonalizedVariant<TCriteria = VariantMatchCriteria> = {
963
1004
  /** A unique identifier for this variation */
964
1005
  id: string;
965
1006
  /** Match criteria for this variation */
966
- pz?: VariantMatchCriteria;
1007
+ pz?: TCriteria;
967
1008
  };
968
1009
  /** The result of computing personalized content from variations */
969
1010
  type PersonalizedResult<TVariant> = {
@@ -971,6 +1012,7 @@ type PersonalizedResult<TVariant> = {
971
1012
  personalized: boolean;
972
1013
  /** Matching variations */
973
1014
  variations: Array<TVariant & {
1015
+ /** Whether the visitor is part of this variation's local control group (also true if part of global control group) */
974
1016
  control: boolean;
975
1017
  }>;
976
1018
  };
@@ -995,19 +1037,28 @@ type TestResult<TVariant> = {
995
1037
  */
996
1038
  variantAssigned: boolean;
997
1039
  };
998
-
999
- type PersonalizeOptions<TVariant> = {
1040
+ interface PersonalizeOptions<TVariant> {
1041
+ /** Name of placement (sent to analytics) */
1042
+ name: string;
1043
+ /** Possible variations to place */
1044
+ variations: Iterable<TVariant>;
1045
+ /** Maximum number of variants to place (default: 1) */
1046
+ take?: number;
1047
+ /** Name of the personalization selection algorithm to use. Defaults to top-down criteria when not specified. */
1048
+ algorithm?: string;
1049
+ }
1050
+ interface PersonalizationSelectionAlgorithmOptions<TCriteria, TVariant extends PersonalizedVariant<TCriteria> = PersonalizedVariant<TCriteria>> {
1000
1051
  /** Name of placement (sent to analytics) */
1001
1052
  name: string;
1002
- /** Possible variants to place */
1053
+ /** Possible variations to place */
1003
1054
  variations: Iterable<TVariant>;
1004
1055
  /** Maximum number of variants to place (default: 1) */
1005
1056
  take?: number;
1057
+ /** Callback for logging messages */
1006
1058
  onLogMessage?: (message: LogMessage) => void;
1007
- };
1008
- declare function personalizeVariations<TVariant extends PersonalizedVariant>({ name, context, variations, take, onLogMessage, }: PersonalizeOptions<TVariant> & {
1059
+ /** Context instance */
1009
1060
  context: Context;
1010
- }): PersonalizedResult<TVariant>;
1061
+ }
1011
1062
 
1012
1063
  type TestOptions<TVariant extends TestVariant> = {
1013
1064
  /** The name of the test that is being run, must be included in the manifest. */
@@ -1022,18 +1073,31 @@ declare const testVariations: <TVariant extends TestVariant>({ name, context, va
1022
1073
 
1023
1074
  declare const CONTEXTUAL_EDITING_TEST_NAME = "contextual_editing_test";
1024
1075
  declare const CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID = "contextual_editing_test_selected_variant";
1076
+ type PersonalizationSelectionAlgorithm<TCriteria = unknown> = (options: PersonalizationSelectionAlgorithmOptions<TCriteria>) => PersonalizedResult<PersonalizedVariant<TCriteria>>;
1077
+ type PersonalizationSelectionAlgorithms<TCriteria = unknown> = Record<string, PersonalizationSelectionAlgorithm<TCriteria>>;
1025
1078
  /**
1026
1079
  * Defines a plugin for Uniform Context.
1027
1080
  * The plugin should attach event handlers in its creation function.
1028
1081
  * @returns A function that detaches any event handlers when called
1029
1082
  */
1030
1083
  type ContextPlugin = {
1084
+ /** Defines a log drain for the plugin, which all log messages are sent to */
1031
1085
  logDrain?: LogDrain;
1086
+ /** Initializes the plugin (attach event handlers here if needed) */
1032
1087
  init?: (context: Context) => () => void;
1088
+ /** Plugin-specific actions to perform when a user is forgotten */
1033
1089
  forget?: () => Promise<void> | void;
1090
+ /** Plugin-specific actions to perform when the visitor context is updated */
1034
1091
  update?: (newData: Partial<ContextState>) => Promise<void> | void;
1092
+ /**
1093
+ * Allows the plugin to register named personalization selection algorithms
1094
+ *
1095
+ * Important: the `default` and `strongestMatch` algorithms are automatically registered.
1096
+ * We strongly advise against replacing these.
1097
+ */
1098
+ personalizationSelectionAlgorithms?: PersonalizationSelectionAlgorithms<any>;
1035
1099
  };
1036
- type ContextOptions = {
1100
+ interface ContextOptions extends Omit<VisitorDataStoreOptions, 'manifest' | 'onServerTransitionScoresReceived'> {
1037
1101
  /** The Context Manifest to load (from the Context API) */
1038
1102
  manifest: ManifestV2;
1039
1103
  /**
@@ -1050,16 +1114,19 @@ type ContextOptions = {
1050
1114
  * `true`: personalization is not run at all unless storage consent is given
1051
1115
  */
1052
1116
  requireConsentForPersonalization?: boolean;
1053
- } & Omit<VisitorDataStoreOptions, 'manifest' | 'onServerTransitionScoresReceived'>;
1117
+ }
1118
+ type PersonalizationEventVariantId = {
1119
+ /** The variant ID that was selected */
1120
+ id: string;
1121
+ /** Whether the visitor is part of this variant's local control group (also true if part of global control group) */
1122
+ control: boolean;
1123
+ };
1054
1124
  /** Emitted when a personalization runs */
1055
1125
  type PersonalizationEvent = {
1056
1126
  /** Name of the personalized placement */
1057
1127
  name: string;
1058
1128
  /** Selected variant ID(s) */
1059
- variantIds: {
1060
- id: string;
1061
- control: boolean;
1062
- }[];
1129
+ variantIds: PersonalizationEventVariantId[];
1063
1130
  /** Whether the user was part of the control group (and did not receive any personalization) */
1064
1131
  control: boolean | undefined;
1065
1132
  /**
@@ -1113,7 +1180,7 @@ interface ContextInstance {
1113
1180
  setTestVariantId(testName: string, variantId: string): void;
1114
1181
  log(...message: LogMessage): void;
1115
1182
  test<TVariant extends TestVariant>(options: TestOptions<TVariant>): TestResult<TVariant>;
1116
- personalize<TVariant extends PersonalizedVariant>(options: PersonalizeOptions<TVariant>): PersonalizedResult<TVariant>;
1183
+ personalize<TVariant extends PersonalizedVariant<any>>(options: PersonalizeOptions<TVariant>): PersonalizedResult<TVariant>;
1117
1184
  forget(fromAllDevices: boolean): Promise<void>;
1118
1185
  getServerToClientTransitionState(): ServerToClientTransitionState;
1119
1186
  readonly manifest: ManifestInstance;
@@ -1178,7 +1245,7 @@ declare class Context implements ContextInstance {
1178
1245
  /** Executes an A/B test with a given set of variants, showing the visitor's assigned variant (or selecting one to assign, if none is set yet) */
1179
1246
  test<TVariant extends TestVariant>(options: TestOptions<TVariant>): TestResult<TVariant>;
1180
1247
  /** Executes a personalized placement with a given set of variants */
1181
- personalize<TVariant extends PersonalizedVariant>(options: PersonalizeOptions<TVariant>): PersonalizedResult<TVariant>;
1248
+ personalize<TVariant extends PersonalizedVariant<any>>(options: PersonalizeOptions<TVariant>): PersonalizedResult<TVariant>;
1182
1249
  /**
1183
1250
  * Forgets the visitor's data and resets the Context to its initial state.
1184
1251
  * @param fromAllDevices for an identified user, whether to delete all their data (for the entire account) - true, or data for this device (sign out) - false
@@ -1265,4 +1332,4 @@ declare global {
1265
1332
  }
1266
1333
  }
1267
1334
 
1268
- export { type AggregateDimensionInput as $, type AggregateDimension as A, type MessageFunc as B, type ContextPlugin as C, type DecayFunction as D, type LogMessageSingle as E, type LogMessageGroup as F, ManifestInstance as G, GroupCriteriaEvaluator as H, type CriteriaEvaluatorResult as I, type CriteriaEvaluatorParameters as J, type SignalData as K, type LogDrain as L, type MessageCategory as M, type ManifestV2 as N, type OutputSeverity as O, type PersonalizationEvent as P, type Quirks as Q, type PersonalizationManifest as R, type ScoreVector as S, TransitionDataStore as T, type Signal as U, type VisitorData as V, type SignalCriteriaGroup as W, type SignalCriteria as X, type EnrichmentCategory as Y, type NumberMatch as Z, type TestDefinition as _, type StorageCommands as a, type TestOptions as a0, testVariations as a1, type DimensionMatch as a2, type PersonalizeOptions as a3, personalizeVariations as a4, type BehaviorTag as a5, type PersonalizedVariant as a6, type PersonalizedResult as a7, type TestVariant as a8, type TestResult as a9, type ContextStateUpdate as aA, type GoalStateUpdate as aB, type paths as aC, type StorageCommand as aa, type SetGoalCommand as ab, type ModifyScoreCommand as ac, type ModifySessionScoreCommand as ad, type SetConsentCommand as ae, type SetQuirkCommand as af, type SetTestCommand as ag, type IdentifyCommand as ah, type SetControlGroupCommand as ai, type SetPersonalizeVariantControlCommand as aj, areCommandsEqual as ak, type ServerToClientTransitionState as al, SERVER_STATE_ID as am, type TransitionDataStoreEvents as an, type DecayOptions as ao, type VisitorDataStoreOptions as ap, type VisitorDataStoreEvents as aq, VisitorDataStore as ar, type Tests as as, type Goals as at, type EnrichmentData as au, type PersonalizeControlVariant as av, type PersonalizeVariants as aw, type EventData as ax, emptyVisitorData as ay, type ContextState as az, type TransitionDataStoreOptions as b, type CriteriaEvaluator as c, type StringMatch as d, type VariantMatchCriteria as e, type LogMessage as f, type DevToolsEvents as g, CONTEXTUAL_EDITING_TEST_NAME as h, CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID as i, type ContextOptions as j, type TestEvent as k, type ContextEvents as l, type ContextInstance as m, Context as n, type DevToolsUiVersion as o, type DevToolsState as p, type DevToolsActions as q, type DevToolsEvent as r, type DevToolsLogEvent as s, type DevToolsDataEvent as t, type DevToolsHelloEvent as u, type DevToolsUpdateEvent as v, type DevToolsRawCommandsEvent as w, type DevToolsForgetEvent as x, type LogMessages as y, type Severity as z };
1335
+ export { type PersonalizationManifest as $, type AggregateDimension as A, type DevToolsDataEvent as B, type ContextPlugin as C, type DecayFunction as D, type DevToolsHelloEvent as E, type DevToolsUpdateEvent as F, type DevToolsRawCommandsEvent as G, type DevToolsForgetEvent as H, type LogMessages as I, type Severity as J, type MessageFunc as K, type LogDrain as L, type MessageCategory as M, type LogMessageSingle as N, type OutputSeverity as O, type PersonalizedVariant as P, type Quirks as Q, type LogMessageGroup as R, type ScoreVector as S, TransitionDataStore as T, ManifestInstance as U, type VisitorData as V, GroupCriteriaEvaluator as W, type CriteriaEvaluatorResult as X, type CriteriaEvaluatorParameters as Y, type SignalData as Z, type ManifestV2 as _, type StorageCommands as a, type Signal as a0, type SignalCriteriaGroup as a1, type SignalCriteria as a2, type EnrichmentCategory as a3, type NumberMatch as a4, type TestDefinition as a5, type AggregateDimensionInput as a6, type TestOptions as a7, testVariations as a8, type VariantMatchMetadata as a9, type PersonalizeControlVariant as aA, type PersonalizeVariants as aB, type EventData as aC, emptyVisitorData as aD, type ContextState as aE, type ContextStateUpdate as aF, type GoalStateUpdate as aG, type paths as aH, type DimensionMatch as aa, type QuirkMatch as ab, type BehaviorTag as ac, type TestVariant as ad, type TestResult as ae, type StorageCommand as af, type SetGoalCommand as ag, type ModifyScoreCommand as ah, type ModifySessionScoreCommand as ai, type SetConsentCommand as aj, type SetQuirkCommand as ak, type SetTestCommand as al, type IdentifyCommand as am, type SetControlGroupCommand as an, type SetPersonalizeVariantControlCommand as ao, areCommandsEqual as ap, type ServerToClientTransitionState as aq, SERVER_STATE_ID as ar, type TransitionDataStoreEvents as as, type DecayOptions as at, type VisitorDataStoreOptions as au, type VisitorDataStoreEvents as av, VisitorDataStore as aw, type Tests as ax, type Goals as ay, type EnrichmentData as az, type TransitionDataStoreOptions as b, type CriteriaEvaluator as c, type StringMatch as d, type VariantMatchCriteria as e, type LogMessage as f, type PersonalizeOptions as g, Context as h, type PersonalizedResult as i, type PersonalizationSelectionAlgorithmOptions as j, type DevToolsEvents as k, CONTEXTUAL_EDITING_TEST_NAME as l, CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID as m, type PersonalizationSelectionAlgorithm as n, type PersonalizationSelectionAlgorithms as o, type ContextOptions as p, type PersonalizationEventVariantId as q, type PersonalizationEvent as r, type TestEvent as s, type ContextEvents as t, type ContextInstance as u, type DevToolsUiVersion as v, type DevToolsState as w, type DevToolsActions as x, type DevToolsEvent as y, type DevToolsLogEvent as z };
@@ -859,6 +859,10 @@ type LogMessages = {
859
859
  }>;
860
860
  /** Final result for a personalized variation */
861
861
  303: MessageFunc<boolean>;
862
+ /** Personalization algorithm not found */
863
+ 304: MessageFunc<{
864
+ algorithm: string;
865
+ }>;
862
866
  /** A/B test placement executing */
863
867
  400: MessageFunc<string>;
864
868
  /** A/B Test definition did not exist */
@@ -898,23 +902,29 @@ type LogMessageSingle<TID extends keyof LogMessages = keyof LogMessages> = [
898
902
  type LogMessageGroup<TID extends keyof LogMessages = keyof LogMessages> = [severity: Severity, id: TID, group: 'GROUP', ...args: Parameters<LogMessages[TID]>] | [severity: Severity, id: TID, group: 'ENDGROUP'];
899
903
  type LogDrain = (message: LogMessage) => void;
900
904
 
901
- type VariantMatchCriteria = {
905
+ /** Data for a personalization variation using the top-down criteria selection algorithm */
906
+ interface VariantMatchCriteria extends VariantMatchMetadata {
902
907
  /**
903
908
  * Operation for match criteria
904
909
  *
905
910
  * @defaultValue `&`
906
911
  */
907
912
  op?: '&' | '|';
908
- crit: DimensionMatch[];
909
- /**
910
- * Name of the variant for analytics tracking.
911
- */
912
- name?: string;
913
+ crit: Array<DimensionMatch | QuirkMatch>;
913
914
  /**
914
915
  * Control group percentage for the variant.
915
916
  */
916
917
  control?: number;
917
- };
918
+ }
919
+ /** Data that must exist on a personalization variation regardless of selection algorithm */
920
+ interface VariantMatchMetadata {
921
+ /**
922
+ * Name of the variation for analytics tracking.
923
+ * NOTE: name is optional for backwards compatibility, but it is HIGHLY recommended to specify a name
924
+ * as the default fallback is not helpfully named and is reliant on the order of the variations array.
925
+ */
926
+ name?: string;
927
+ }
918
928
  type DimensionMatch = {
919
929
  /**
920
930
  * Left hand side of the match expression (name of dimension in score vector)
@@ -953,17 +963,48 @@ type DimensionMatch = {
953
963
  */
954
964
  rDim?: string;
955
965
  };
966
+ type QuirkMatch = {
967
+ /**
968
+ * Type of match expression; 'q' discriminates quirk matches from dimension matches
969
+ */
970
+ t: 'q';
971
+ /**
972
+ * Left hand side of the match expression (name of quirk)
973
+ * NOTE: if the quirk is not present
974
+ */
975
+ l: string;
976
+ /**
977
+ * Operator of the match expression
978
+ * Comparison operators:
979
+ * =: `l` is equal to the right hand side expression
980
+ * !=: `l` is not equal to the right hand side expression
981
+ */
982
+ op: '=' | '!=';
983
+ /**
984
+ * Right hand side of the match expression
985
+ * This value is treated as a constant value, if it is present. If it's a string, it is parsed to an integer.
986
+ * To reference another score dimension as the RHS, use the `rDim` property instead.
987
+ * `r` and `rDim` are mutually exclusive; if both are specified, then `rDim` wins.
988
+ */
989
+ r: string;
990
+ /**
991
+ * Only here to maintain object compatibility with DimensionMatch.
992
+ * Completely ignored.
993
+ * @deprecated this is not used with QuirkMatch.
994
+ */
995
+ rDim?: string;
996
+ };
956
997
 
957
998
  /** Content that is tagged for adding enrichment score when triggered by behavior (i.e. being shown that content) */
958
999
  type BehaviorTag = {
959
1000
  beh?: EnrichmentData[];
960
1001
  };
961
1002
  /** Defines the shape of a personalized content variant */
962
- type PersonalizedVariant = {
1003
+ type PersonalizedVariant<TCriteria = VariantMatchCriteria> = {
963
1004
  /** A unique identifier for this variation */
964
1005
  id: string;
965
1006
  /** Match criteria for this variation */
966
- pz?: VariantMatchCriteria;
1007
+ pz?: TCriteria;
967
1008
  };
968
1009
  /** The result of computing personalized content from variations */
969
1010
  type PersonalizedResult<TVariant> = {
@@ -971,6 +1012,7 @@ type PersonalizedResult<TVariant> = {
971
1012
  personalized: boolean;
972
1013
  /** Matching variations */
973
1014
  variations: Array<TVariant & {
1015
+ /** Whether the visitor is part of this variation's local control group (also true if part of global control group) */
974
1016
  control: boolean;
975
1017
  }>;
976
1018
  };
@@ -995,19 +1037,28 @@ type TestResult<TVariant> = {
995
1037
  */
996
1038
  variantAssigned: boolean;
997
1039
  };
998
-
999
- type PersonalizeOptions<TVariant> = {
1040
+ interface PersonalizeOptions<TVariant> {
1041
+ /** Name of placement (sent to analytics) */
1042
+ name: string;
1043
+ /** Possible variations to place */
1044
+ variations: Iterable<TVariant>;
1045
+ /** Maximum number of variants to place (default: 1) */
1046
+ take?: number;
1047
+ /** Name of the personalization selection algorithm to use. Defaults to top-down criteria when not specified. */
1048
+ algorithm?: string;
1049
+ }
1050
+ interface PersonalizationSelectionAlgorithmOptions<TCriteria, TVariant extends PersonalizedVariant<TCriteria> = PersonalizedVariant<TCriteria>> {
1000
1051
  /** Name of placement (sent to analytics) */
1001
1052
  name: string;
1002
- /** Possible variants to place */
1053
+ /** Possible variations to place */
1003
1054
  variations: Iterable<TVariant>;
1004
1055
  /** Maximum number of variants to place (default: 1) */
1005
1056
  take?: number;
1057
+ /** Callback for logging messages */
1006
1058
  onLogMessage?: (message: LogMessage) => void;
1007
- };
1008
- declare function personalizeVariations<TVariant extends PersonalizedVariant>({ name, context, variations, take, onLogMessage, }: PersonalizeOptions<TVariant> & {
1059
+ /** Context instance */
1009
1060
  context: Context;
1010
- }): PersonalizedResult<TVariant>;
1061
+ }
1011
1062
 
1012
1063
  type TestOptions<TVariant extends TestVariant> = {
1013
1064
  /** The name of the test that is being run, must be included in the manifest. */
@@ -1022,18 +1073,31 @@ declare const testVariations: <TVariant extends TestVariant>({ name, context, va
1022
1073
 
1023
1074
  declare const CONTEXTUAL_EDITING_TEST_NAME = "contextual_editing_test";
1024
1075
  declare const CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID = "contextual_editing_test_selected_variant";
1076
+ type PersonalizationSelectionAlgorithm<TCriteria = unknown> = (options: PersonalizationSelectionAlgorithmOptions<TCriteria>) => PersonalizedResult<PersonalizedVariant<TCriteria>>;
1077
+ type PersonalizationSelectionAlgorithms<TCriteria = unknown> = Record<string, PersonalizationSelectionAlgorithm<TCriteria>>;
1025
1078
  /**
1026
1079
  * Defines a plugin for Uniform Context.
1027
1080
  * The plugin should attach event handlers in its creation function.
1028
1081
  * @returns A function that detaches any event handlers when called
1029
1082
  */
1030
1083
  type ContextPlugin = {
1084
+ /** Defines a log drain for the plugin, which all log messages are sent to */
1031
1085
  logDrain?: LogDrain;
1086
+ /** Initializes the plugin (attach event handlers here if needed) */
1032
1087
  init?: (context: Context) => () => void;
1088
+ /** Plugin-specific actions to perform when a user is forgotten */
1033
1089
  forget?: () => Promise<void> | void;
1090
+ /** Plugin-specific actions to perform when the visitor context is updated */
1034
1091
  update?: (newData: Partial<ContextState>) => Promise<void> | void;
1092
+ /**
1093
+ * Allows the plugin to register named personalization selection algorithms
1094
+ *
1095
+ * Important: the `default` and `strongestMatch` algorithms are automatically registered.
1096
+ * We strongly advise against replacing these.
1097
+ */
1098
+ personalizationSelectionAlgorithms?: PersonalizationSelectionAlgorithms<any>;
1035
1099
  };
1036
- type ContextOptions = {
1100
+ interface ContextOptions extends Omit<VisitorDataStoreOptions, 'manifest' | 'onServerTransitionScoresReceived'> {
1037
1101
  /** The Context Manifest to load (from the Context API) */
1038
1102
  manifest: ManifestV2;
1039
1103
  /**
@@ -1050,16 +1114,19 @@ type ContextOptions = {
1050
1114
  * `true`: personalization is not run at all unless storage consent is given
1051
1115
  */
1052
1116
  requireConsentForPersonalization?: boolean;
1053
- } & Omit<VisitorDataStoreOptions, 'manifest' | 'onServerTransitionScoresReceived'>;
1117
+ }
1118
+ type PersonalizationEventVariantId = {
1119
+ /** The variant ID that was selected */
1120
+ id: string;
1121
+ /** Whether the visitor is part of this variant's local control group (also true if part of global control group) */
1122
+ control: boolean;
1123
+ };
1054
1124
  /** Emitted when a personalization runs */
1055
1125
  type PersonalizationEvent = {
1056
1126
  /** Name of the personalized placement */
1057
1127
  name: string;
1058
1128
  /** Selected variant ID(s) */
1059
- variantIds: {
1060
- id: string;
1061
- control: boolean;
1062
- }[];
1129
+ variantIds: PersonalizationEventVariantId[];
1063
1130
  /** Whether the user was part of the control group (and did not receive any personalization) */
1064
1131
  control: boolean | undefined;
1065
1132
  /**
@@ -1113,7 +1180,7 @@ interface ContextInstance {
1113
1180
  setTestVariantId(testName: string, variantId: string): void;
1114
1181
  log(...message: LogMessage): void;
1115
1182
  test<TVariant extends TestVariant>(options: TestOptions<TVariant>): TestResult<TVariant>;
1116
- personalize<TVariant extends PersonalizedVariant>(options: PersonalizeOptions<TVariant>): PersonalizedResult<TVariant>;
1183
+ personalize<TVariant extends PersonalizedVariant<any>>(options: PersonalizeOptions<TVariant>): PersonalizedResult<TVariant>;
1117
1184
  forget(fromAllDevices: boolean): Promise<void>;
1118
1185
  getServerToClientTransitionState(): ServerToClientTransitionState;
1119
1186
  readonly manifest: ManifestInstance;
@@ -1178,7 +1245,7 @@ declare class Context implements ContextInstance {
1178
1245
  /** Executes an A/B test with a given set of variants, showing the visitor's assigned variant (or selecting one to assign, if none is set yet) */
1179
1246
  test<TVariant extends TestVariant>(options: TestOptions<TVariant>): TestResult<TVariant>;
1180
1247
  /** Executes a personalized placement with a given set of variants */
1181
- personalize<TVariant extends PersonalizedVariant>(options: PersonalizeOptions<TVariant>): PersonalizedResult<TVariant>;
1248
+ personalize<TVariant extends PersonalizedVariant<any>>(options: PersonalizeOptions<TVariant>): PersonalizedResult<TVariant>;
1182
1249
  /**
1183
1250
  * Forgets the visitor's data and resets the Context to its initial state.
1184
1251
  * @param fromAllDevices for an identified user, whether to delete all their data (for the entire account) - true, or data for this device (sign out) - false
@@ -1265,4 +1332,4 @@ declare global {
1265
1332
  }
1266
1333
  }
1267
1334
 
1268
- export { type AggregateDimensionInput as $, type AggregateDimension as A, type MessageFunc as B, type ContextPlugin as C, type DecayFunction as D, type LogMessageSingle as E, type LogMessageGroup as F, ManifestInstance as G, GroupCriteriaEvaluator as H, type CriteriaEvaluatorResult as I, type CriteriaEvaluatorParameters as J, type SignalData as K, type LogDrain as L, type MessageCategory as M, type ManifestV2 as N, type OutputSeverity as O, type PersonalizationEvent as P, type Quirks as Q, type PersonalizationManifest as R, type ScoreVector as S, TransitionDataStore as T, type Signal as U, type VisitorData as V, type SignalCriteriaGroup as W, type SignalCriteria as X, type EnrichmentCategory as Y, type NumberMatch as Z, type TestDefinition as _, type StorageCommands as a, type TestOptions as a0, testVariations as a1, type DimensionMatch as a2, type PersonalizeOptions as a3, personalizeVariations as a4, type BehaviorTag as a5, type PersonalizedVariant as a6, type PersonalizedResult as a7, type TestVariant as a8, type TestResult as a9, type ContextStateUpdate as aA, type GoalStateUpdate as aB, type paths as aC, type StorageCommand as aa, type SetGoalCommand as ab, type ModifyScoreCommand as ac, type ModifySessionScoreCommand as ad, type SetConsentCommand as ae, type SetQuirkCommand as af, type SetTestCommand as ag, type IdentifyCommand as ah, type SetControlGroupCommand as ai, type SetPersonalizeVariantControlCommand as aj, areCommandsEqual as ak, type ServerToClientTransitionState as al, SERVER_STATE_ID as am, type TransitionDataStoreEvents as an, type DecayOptions as ao, type VisitorDataStoreOptions as ap, type VisitorDataStoreEvents as aq, VisitorDataStore as ar, type Tests as as, type Goals as at, type EnrichmentData as au, type PersonalizeControlVariant as av, type PersonalizeVariants as aw, type EventData as ax, emptyVisitorData as ay, type ContextState as az, type TransitionDataStoreOptions as b, type CriteriaEvaluator as c, type StringMatch as d, type VariantMatchCriteria as e, type LogMessage as f, type DevToolsEvents as g, CONTEXTUAL_EDITING_TEST_NAME as h, CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID as i, type ContextOptions as j, type TestEvent as k, type ContextEvents as l, type ContextInstance as m, Context as n, type DevToolsUiVersion as o, type DevToolsState as p, type DevToolsActions as q, type DevToolsEvent as r, type DevToolsLogEvent as s, type DevToolsDataEvent as t, type DevToolsHelloEvent as u, type DevToolsUpdateEvent as v, type DevToolsRawCommandsEvent as w, type DevToolsForgetEvent as x, type LogMessages as y, type Severity as z };
1335
+ export { type PersonalizationManifest as $, type AggregateDimension as A, type DevToolsDataEvent as B, type ContextPlugin as C, type DecayFunction as D, type DevToolsHelloEvent as E, type DevToolsUpdateEvent as F, type DevToolsRawCommandsEvent as G, type DevToolsForgetEvent as H, type LogMessages as I, type Severity as J, type MessageFunc as K, type LogDrain as L, type MessageCategory as M, type LogMessageSingle as N, type OutputSeverity as O, type PersonalizedVariant as P, type Quirks as Q, type LogMessageGroup as R, type ScoreVector as S, TransitionDataStore as T, ManifestInstance as U, type VisitorData as V, GroupCriteriaEvaluator as W, type CriteriaEvaluatorResult as X, type CriteriaEvaluatorParameters as Y, type SignalData as Z, type ManifestV2 as _, type StorageCommands as a, type Signal as a0, type SignalCriteriaGroup as a1, type SignalCriteria as a2, type EnrichmentCategory as a3, type NumberMatch as a4, type TestDefinition as a5, type AggregateDimensionInput as a6, type TestOptions as a7, testVariations as a8, type VariantMatchMetadata as a9, type PersonalizeControlVariant as aA, type PersonalizeVariants as aB, type EventData as aC, emptyVisitorData as aD, type ContextState as aE, type ContextStateUpdate as aF, type GoalStateUpdate as aG, type paths as aH, type DimensionMatch as aa, type QuirkMatch as ab, type BehaviorTag as ac, type TestVariant as ad, type TestResult as ae, type StorageCommand as af, type SetGoalCommand as ag, type ModifyScoreCommand as ah, type ModifySessionScoreCommand as ai, type SetConsentCommand as aj, type SetQuirkCommand as ak, type SetTestCommand as al, type IdentifyCommand as am, type SetControlGroupCommand as an, type SetPersonalizeVariantControlCommand as ao, areCommandsEqual as ap, type ServerToClientTransitionState as aq, SERVER_STATE_ID as ar, type TransitionDataStoreEvents as as, type DecayOptions as at, type VisitorDataStoreOptions as au, type VisitorDataStoreEvents as av, VisitorDataStore as aw, type Tests as ax, type Goals as ay, type EnrichmentData as az, type TransitionDataStoreOptions as b, type CriteriaEvaluator as c, type StringMatch as d, type VariantMatchCriteria as e, type LogMessage as f, type PersonalizeOptions as g, Context as h, type PersonalizedResult as i, type PersonalizationSelectionAlgorithmOptions as j, type DevToolsEvents as k, CONTEXTUAL_EDITING_TEST_NAME as l, CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID as m, type PersonalizationSelectionAlgorithm as n, type PersonalizationSelectionAlgorithms as o, type ContextOptions as p, type PersonalizationEventVariantId as q, type PersonalizationEvent as r, type TestEvent as s, type ContextEvents as t, type ContextInstance as u, type DevToolsUiVersion as v, type DevToolsState as w, type DevToolsActions as x, type DevToolsEvent as y, type DevToolsLogEvent as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/context",
3
- "version": "20.3.1",
3
+ "version": "20.4.1-alpha.15+73b27bfcce",
4
4
  "description": "Uniform Context core package",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "main": "./dist/index.js",
@@ -68,5 +68,5 @@
68
68
  "publishConfig": {
69
69
  "access": "public"
70
70
  },
71
- "gitHead": "4f5ad4dc937cd01f9f288d1d292bd4c7c226240b"
71
+ "gitHead": "73b27bfcce749c31e7ab50bdc9bb86ac1294903d"
72
72
  }