Created
April 20, 2021 19:02
-
-
Save pwfisher/e550c8a58b052c12dd503a6f30eb8bc4 to your computer and use it in GitHub Desktop.
Optimizely Client Side Types
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @see https://docs.developers.optimizely.com/web/docs | |
* | |
* globalThis.optimizely?.get('state').getVariationMap() | |
* { | |
* 20015858428: { id: "20020533131", name: null, index: null }, | |
* 20104572923: { id: "20121934640", name: "v1", index: 0 }, | |
* } | |
*/ | |
/** | |
* Dictionary: Record replacement, handle undefined values. | |
* @see https://fnune.com/typescript/2019/01/30/typescript-series-1-record-is-usually-not-the-best-choice/ | |
*/ | |
type DictionaryKey = string | number | symbol | |
export type Dictionary<K extends DictionaryKey, T> = { [P in K]?: T } | |
type Option = { id: string; name: string } | |
// ------ | |
type CampaignState = { | |
allExperiments: Option[] | |
audiences: Option[] | |
campaignName: string | null | |
experiment: Option | null | |
id: string | |
isActive: boolean | |
isInCampaignHoldback: boolean | |
reason: undefined | string // 'force' | |
variation: Option | |
visitorRedirected: boolean | |
} | |
type Command = { type: string; eventName: string; tags: Object } | |
type ConditionOperator = 'or' | 'and' | |
type ConditionValue = { type: string; value: string; match: string } | |
type Condition = ConditionOperator | ConditionValue | Condition[] | |
type Decision = { campaign?: string; experiment: string; variation: string; holdback?: boolean } | |
type DecisionConfig = { campaignId: string; shouldCleanString: boolean; maxLength: number } | |
type EventBase = { c: string; hash_: string; n: string; y: string } | |
type Event = { eventBase: EventBase; s: number; si: number; t: number } | |
type ExperimentState = { | |
audiences: Option[] | |
experimentName: string | |
id: string | |
isActive: boolean | |
isInExperimentHoldback: boolean | |
reason?: string | unknown | |
variation: Option | |
visitorRedirected: boolean | |
} | |
type FilterObject = { isActive?: boolean } | |
type FilterFunction = (campaignState: CampaignState) => boolean | |
type Filter = FilterObject | FilterFunction | |
type GetKey = | |
| 'behavior' | |
| 'data' | |
| 'dcp' | |
| 'jquery' | |
| 'session' | |
| 'state' | |
| 'utils' | |
| 'visitor' | |
| 'visitor_id' | |
type Location = { city: string; continent: string; country: string; region: string } | |
type PageTag = { | |
apiName: string | |
category: string | |
locator: string | |
locatorType: string | |
valueType: string | |
} | |
type PageState = { | |
apiName: string | |
category: string | |
id: string | |
isActive: boolean | |
metadata: Object | |
name: string | |
staticConditions: Condition[] | |
tags: PageTag[] | |
} | |
type RedirectInfo = { experimentId: string; variationId: string; referrer: string } | |
type Variation = { id: string; name: string | null; index: number | null } | |
type VariationMap = Dictionary<string, Variation> | |
type Visitor = { | |
browserId: string // 'gc' | |
browserVersion: string | |
currentTimestamp: number | |
customBehavior: unknown | |
device: string // 'desktop' | |
device_type: string // 'desktop_laptop' | |
events: Event[] | |
first_session: boolean | |
location: Location | |
offset: number | |
referrer: null | unknown | |
source_type: string | |
visitorId: string | |
} | |
type VisitorId = { randomId: string } | |
// ------ | |
export interface OptimizelyState { | |
getActivationId: () => string | |
getActiveExperimentIds: () => string[] | |
getCampaignStateLists: () => Dictionary<string, CampaignState[]> | |
getCampaignStates: (filter?: Filter) => Dictionary<string, CampaignState> | |
getDecisionObject: (config: DecisionConfig) => Decision | null | |
getDecisionString: (config: DecisionConfig) => string | null | |
getExperimentStates: (filter?: Filter) => Dictionary<string, ExperimentState> | |
getPageStates: (filter?: Filter) => Dictionary<string, PageState> | |
getRedirectInfo: () => RedirectInfo | null | |
getVariationMap: () => VariationMap | |
isGlobalHoldback: () => boolean | |
} | |
export interface Optimizely { | |
get: (key: GetKey) => OptimizelyState | Visitor | VisitorId | unknown // others omitted | |
push: (command: Command) => void | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment