@runbandit/sdk 3.3.0 → 3.5.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/README.md +1 -1
- package/dist/{decision-cookie-Mb4G_lTe.d.ts → decision-cookie-DgVvhn7c.d.ts} +22 -1
- package/dist/index.d.ts +112 -4
- package/dist/index.js +500 -13
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ const client = new BanditsClient({
|
|
|
19
19
|
})
|
|
20
20
|
|
|
21
21
|
const assignment = await client.getAssignment('experiment-id', 'user-id')
|
|
22
|
-
showTreatment(assignment.
|
|
22
|
+
showTreatment(assignment.config)
|
|
23
23
|
|
|
24
24
|
// Track a conversion. Pass { immediate: true } for events right before navigation.
|
|
25
25
|
client.trackNamedEvent({ name: 'conversion', value: 29.99 })
|
|
@@ -159,6 +159,24 @@ declare function pickEnvelope<M extends PickerToPanel | PanelToPicker>(msg: M):
|
|
|
159
159
|
declare function parsePickerMessage(data: unknown): PickerToPanel | null;
|
|
160
160
|
declare function parsePanelMessage(data: unknown): PanelToPicker | null;
|
|
161
161
|
|
|
162
|
+
interface OrderLineItem {
|
|
163
|
+
id?: string;
|
|
164
|
+
quantity?: number;
|
|
165
|
+
price: number;
|
|
166
|
+
discount?: number;
|
|
167
|
+
unitCost?: number;
|
|
168
|
+
}
|
|
169
|
+
type OrderAmounts = {
|
|
170
|
+
lines: OrderLineItem[];
|
|
171
|
+
shipping?: number;
|
|
172
|
+
shippingCost?: number;
|
|
173
|
+
} | {
|
|
174
|
+
revenue: number;
|
|
175
|
+
cost?: number;
|
|
176
|
+
shipping?: number;
|
|
177
|
+
shippingCost?: number;
|
|
178
|
+
};
|
|
179
|
+
|
|
162
180
|
interface Company {
|
|
163
181
|
id: string;
|
|
164
182
|
name: string;
|
|
@@ -351,6 +369,8 @@ interface TrackNamedEventRequest {
|
|
|
351
369
|
name: string;
|
|
352
370
|
category?: string;
|
|
353
371
|
value?: number;
|
|
372
|
+
cost?: number;
|
|
373
|
+
lineItems?: OrderLineItem[];
|
|
354
374
|
metadata?: Record<string, any>;
|
|
355
375
|
sessionId: string;
|
|
356
376
|
userId?: string;
|
|
@@ -459,6 +479,7 @@ interface SnapshotExperiment {
|
|
|
459
479
|
treatments: SnapshotTreatment[];
|
|
460
480
|
target?: SiteTarget;
|
|
461
481
|
funnelId?: string;
|
|
482
|
+
trialOn?: 'served' | 'exposure';
|
|
462
483
|
}
|
|
463
484
|
interface CompanySnapshot {
|
|
464
485
|
ttl: number;
|
|
@@ -480,4 +501,4 @@ declare function readCookie(header: string | null | undefined, name: string): st
|
|
|
480
501
|
declare function parseDecisions(value: string | null | undefined, now: number): CookieDecisions;
|
|
481
502
|
declare function serializeDecisions(decisions: CookieDecisions): string;
|
|
482
503
|
|
|
483
|
-
export { type
|
|
504
|
+
export { type BundleMode as $, type Account as A, type BundleAssignmentResponse as B, type ContextualFeatures as C, DECISIONS_COOKIE as D, type Experiment as E, ForgettingMode as F, type TreatmentStats as G, type APIResponse as H, type CreateExperimentRequest as I, type AssignmentRequest as J, type TrackNamedEventRequest as K, FunnelStatus as L, type Funnel as M, type FunnelRewardRequest as N, type OrderLineItem as O, Posterior as P, type ApiKey as Q, type CreateApiKeyRequest as R, type SnapshotTreatment as S, type Treatment as T, type User as U, VISITOR_COOKIE as V, type CreateApiKeyResponse as W, type IdentifyMergeReason as X, type IdentifyUserRequest as Y, type IdentifyUserResponse as Z, type ResolvedIdentity as _, type CompanySnapshot as a, type Bundle as a0, type BundleAssignmentRequest as a1, type BundleSlotAssignment as a2, STOREFRONT_KINDS as a3, type StorefrontKind as a4, PLACEMENTS_BY_KIND as a5, type Placement as a6, PLACEMENTS as a7, isPlacement as a8, kindOfPlacement as a9, pickStep as aA, parseAlternative as aB, PICK_CHANNEL as aC, PICK_PROTOCOL_VERSION as aD, PICK_MODES as aE, type PickMode as aF, PICK_REJECTIONS as aG, type PickRejection as aH, type ClickFunnelGoal as aI, type PickerToPanel as aJ, type PanelToPicker as aK, PICK_TOKEN_PREFIX as aL, type PickEnvelope as aM, pickEnvelope as aN, parsePickerMessage as aO, parsePanelMessage as aP, type OrderAmounts as aQ, CONTENT_TYPE_BY_KIND as aa, MIN_ORDERING_ITEMS as ab, MAX_ORDERING_ITEMS as ac, type ImageContent as ad, type OfferContent as ae, type TreatmentContent as af, isShopifyCdnUrl as ag, parseTreatmentContent as ah, serializeTreatmentConfig as ai, SITE_TARGET_KINDS as aj, type SiteTargetKind as ak, type SiteTarget as al, type FunnelGoal as am, parseSiteContent as an, normalizeSiteTarget as ao, normalizeFunnelGoal as ap, targetMatchesPage as aq, goalMatchesPage as ar, MAX_ALTERNATIVES as as, MAX_TEXT_ALTERNATIVE_LENGTH as at, MAX_IMAGE_URL_LENGTH as au, type PickDraft as av, type PickState as aw, SUGGESTED_SITE_EXPERIMENTS as ax, moreExperimentsSentence as ay, type PickStep as az, type SnapshotExperiment as b, type CookieDecision as c, type CookieDecisions as d, type Company as e, type Session as f, type AlgorithmResult as g, type BanditResult as h, ExperimentStatus as i, type TreatmentMetadata as j, type VariantConfig as k, BanditAlgorithm as l, type ForgettingConfig as m, normalizePosterior as n, DEFAULT_HALF_LIFE_MS as o, parseDecisions as p, DEFAULT_WINDOW_MS as q, readCookie as r, serializeDecisions as s, STATIONARY as t, resolveForgetting as u, normalizeAlgorithm as v, ContentType as w, getContentTypeCategory as x, type BanditConfig as y, type ExperimentStats as z };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { T as Treatment, C as ContextualFeatures, B as BundleAssignmentResponse, a as CompanySnapshot, S as SnapshotTreatment } from './decision-cookie-
|
|
2
|
-
export { H as APIResponse, A as Account, g as AlgorithmResult,
|
|
1
|
+
import { T as Treatment, C as ContextualFeatures, O as OrderLineItem, B as BundleAssignmentResponse, a as CompanySnapshot, S as SnapshotTreatment } from './decision-cookie-DgVvhn7c.js';
|
|
2
|
+
export { H as APIResponse, A as Account, g as AlgorithmResult, Q as ApiKey, J as AssignmentRequest, l as BanditAlgorithm, y as BanditConfig, h as BanditResult, a0 as Bundle, a1 as BundleAssignmentRequest, $ as BundleMode, a2 as BundleSlotAssignment, aa as CONTENT_TYPE_BY_KIND, aI as ClickFunnelGoal, e as Company, w as ContentType, c as CookieDecision, d as CookieDecisions, R as CreateApiKeyRequest, W as CreateApiKeyResponse, I as CreateExperimentRequest, D as DECISIONS_COOKIE, o as DEFAULT_HALF_LIFE_MS, q as DEFAULT_WINDOW_MS, E as Experiment, z as ExperimentStats, i as ExperimentStatus, m as ForgettingConfig, F as ForgettingMode, M as Funnel, am as FunnelGoal, N as FunnelRewardRequest, L as FunnelStatus, X as IdentifyMergeReason, Y as IdentifyUserRequest, Z as IdentifyUserResponse, ad as ImageContent, as as MAX_ALTERNATIVES, au as MAX_IMAGE_URL_LENGTH, ac as MAX_ORDERING_ITEMS, at as MAX_TEXT_ALTERNATIVE_LENGTH, ab as MIN_ORDERING_ITEMS, ae as OfferContent, aQ as OrderAmounts, aC as PICK_CHANNEL, aE as PICK_MODES, aD as PICK_PROTOCOL_VERSION, aG as PICK_REJECTIONS, aL as PICK_TOKEN_PREFIX, a7 as PLACEMENTS, a5 as PLACEMENTS_BY_KIND, aK as PanelToPicker, av as PickDraft, aM as PickEnvelope, aF as PickMode, aH as PickRejection, aw as PickState, az as PickStep, aJ as PickerToPanel, a6 as Placement, P as Posterior, _ as ResolvedIdentity, aj as SITE_TARGET_KINDS, t as STATIONARY, a3 as STOREFRONT_KINDS, ax as SUGGESTED_SITE_EXPERIMENTS, f as Session, al as SiteTarget, ak as SiteTargetKind, b as SnapshotExperiment, a4 as StorefrontKind, K as TrackNamedEventRequest, af as TreatmentContent, j as TreatmentMetadata, G as TreatmentStats, U as User, V as VISITOR_COOKIE, k as VariantConfig, x as getContentTypeCategory, ar as goalMatchesPage, a8 as isPlacement, ag as isShopifyCdnUrl, a9 as kindOfPlacement, ay as moreExperimentsSentence, v as normalizeAlgorithm, ap as normalizeFunnelGoal, n as normalizePosterior, ao as normalizeSiteTarget, aB as parseAlternative, p as parseDecisions, aP as parsePanelMessage, aO as parsePickerMessage, an as parseSiteContent, ah as parseTreatmentContent, aN as pickEnvelope, aA as pickStep, r as readCookie, u as resolveForgetting, s as serializeDecisions, ai as serializeTreatmentConfig, aq as targetMatchesPage } from './decision-cookie-DgVvhn7c.js';
|
|
3
3
|
|
|
4
4
|
declare function validateTreatmentWeights(treatments: Treatment[]): boolean;
|
|
5
5
|
declare function normalizeTreatmentWeights(treatments: Treatment[]): Treatment[];
|
|
@@ -217,6 +217,96 @@ type ScriptPlatform = SitePlatform & {
|
|
|
217
217
|
declare const SCRIPT_PLATFORMS: readonly ScriptPlatform[];
|
|
218
218
|
declare function platformById(id: string | undefined): SitePlatform | undefined;
|
|
219
219
|
|
|
220
|
+
declare const ARRIVAL_CHANNELS: readonly ["ad", "email", "social", "search", "referral", "direct"];
|
|
221
|
+
type ArrivalChannel = (typeof ARRIVAL_CHANNELS)[number];
|
|
222
|
+
declare const ARRIVAL_TTL_MS: number;
|
|
223
|
+
declare const MAX_ARRIVAL_VALUE_LENGTH = 40;
|
|
224
|
+
declare const MAX_REFERRER_HOST_LENGTH = 100;
|
|
225
|
+
declare const MAX_RAW_TOUCH_VALUE_LENGTH = 200;
|
|
226
|
+
type ArrivalTouch = {
|
|
227
|
+
utmSource?: string;
|
|
228
|
+
utmMedium?: string;
|
|
229
|
+
utmCampaign?: string;
|
|
230
|
+
utmContent?: string;
|
|
231
|
+
trackingParam?: string;
|
|
232
|
+
klaviyoExchangeId?: string;
|
|
233
|
+
referrerHost?: string;
|
|
234
|
+
};
|
|
235
|
+
type Arrival = {
|
|
236
|
+
source?: string;
|
|
237
|
+
medium?: string;
|
|
238
|
+
campaign?: string;
|
|
239
|
+
content?: string;
|
|
240
|
+
referrerHost?: string;
|
|
241
|
+
channel?: ArrivalChannel;
|
|
242
|
+
};
|
|
243
|
+
declare const UTM_PARAMS: readonly [readonly ["utmSource", "utm_source"], readonly ["utmMedium", "utm_medium"], readonly ["utmCampaign", "utm_campaign"], readonly ["utmContent", "utm_content"]];
|
|
244
|
+
declare const TRACKING_PARAM_SOURCES: Readonly<Record<string, string>>;
|
|
245
|
+
type ArrivalSignals = Omit<Arrival, 'channel'> & {
|
|
246
|
+
trackingParam?: string;
|
|
247
|
+
};
|
|
248
|
+
type ChannelRule = {
|
|
249
|
+
channel: ArrivalChannel;
|
|
250
|
+
field: 'medium' | 'trackingParam' | 'source' | 'referrerHost';
|
|
251
|
+
values: readonly string[];
|
|
252
|
+
};
|
|
253
|
+
declare const CHANNEL_RULES: readonly ChannelRule[];
|
|
254
|
+
declare function normalizeArrivalValue(raw: string | undefined): string | undefined;
|
|
255
|
+
declare function normalizeHost(raw: string | undefined): string | undefined;
|
|
256
|
+
declare const PASS_THROUGH_HOSTS: readonly string[];
|
|
257
|
+
declare function isPassThroughHost(host: string): boolean;
|
|
258
|
+
declare function channelOf(signals: ArrivalSignals): ArrivalChannel | undefined;
|
|
259
|
+
declare function arrivalFromTouch(touch: ArrivalTouch): Arrival;
|
|
260
|
+
declare function isDirectTouch(touch: ArrivalTouch): boolean;
|
|
261
|
+
declare function touchFromPage(page: {
|
|
262
|
+
href: string;
|
|
263
|
+
referrer: string;
|
|
264
|
+
}): ArrivalTouch;
|
|
265
|
+
type StoredArrival = {
|
|
266
|
+
signature: string;
|
|
267
|
+
sessionId: string;
|
|
268
|
+
at: number;
|
|
269
|
+
};
|
|
270
|
+
declare function touchSignature(touch: ArrivalTouch): string;
|
|
271
|
+
declare function shouldReportTouch(touch: ArrivalTouch, stored: StoredArrival | null, sessionId: string, now: number): boolean;
|
|
272
|
+
declare function isArrivalActive(startedAt: number, at: number): boolean;
|
|
273
|
+
declare const CHANNEL_LABELS: Readonly<Record<ArrivalChannel, string>>;
|
|
274
|
+
declare const UNKNOWN_SOURCE_KEY = "unknown";
|
|
275
|
+
type ArrivalSource = {
|
|
276
|
+
key: string;
|
|
277
|
+
label: string;
|
|
278
|
+
channel?: ArrivalChannel;
|
|
279
|
+
};
|
|
280
|
+
declare function sourceOf(arrival: Arrival | undefined): ArrivalSource;
|
|
281
|
+
|
|
282
|
+
type PayoutUnit = 'count' | 'revenue' | 'margin';
|
|
283
|
+
declare const PAYOUT_UNITS: readonly PayoutUnit[];
|
|
284
|
+
declare const NEW_PAYOUT_UNIT: PayoutUnit;
|
|
285
|
+
declare function isPayoutUnit(value: unknown): value is PayoutUnit;
|
|
286
|
+
declare function isCurrencyUnit(unit: PayoutUnit): boolean;
|
|
287
|
+
declare function rewardValue(unit: PayoutUnit, supplied: number | undefined): number;
|
|
288
|
+
declare function payoutUnitOfRewardBasis(rewardBasis: string | undefined): PayoutUnit;
|
|
289
|
+
declare const PAYOUT_UNIT_COPY: Record<PayoutUnit, {
|
|
290
|
+
label: string;
|
|
291
|
+
hint: string;
|
|
292
|
+
total: string;
|
|
293
|
+
perVisitor: string;
|
|
294
|
+
influence: string;
|
|
295
|
+
}>;
|
|
296
|
+
declare function formatPayout(unit: PayoutUnit, value: number): string;
|
|
297
|
+
|
|
298
|
+
type TrialRule = 'served' | 'exposure';
|
|
299
|
+
declare const TRIAL_RULES: readonly TrialRule[];
|
|
300
|
+
declare function isTrialRule(value: unknown): value is TrialRule;
|
|
301
|
+
declare function trialRuleFor({ target, requested, }: {
|
|
302
|
+
target?: unknown;
|
|
303
|
+
requested?: TrialRule;
|
|
304
|
+
}): TrialRule;
|
|
305
|
+
declare function trialRuleOf(experiment: {
|
|
306
|
+
trialOn?: TrialRule;
|
|
307
|
+
}): TrialRule;
|
|
308
|
+
declare const TRIAL_RULE_COPY: Record<TrialRule, string>;
|
|
309
|
+
|
|
220
310
|
interface BanditsClientConfig {
|
|
221
311
|
apiUrl: string;
|
|
222
312
|
apiKey: string;
|
|
@@ -225,6 +315,7 @@ interface BanditsClientConfig {
|
|
|
225
315
|
flushInterval?: number;
|
|
226
316
|
sessionTtl?: number;
|
|
227
317
|
visitorId?: string;
|
|
318
|
+
captureArrival?: boolean;
|
|
228
319
|
}
|
|
229
320
|
declare class BanditsRequestError extends Error {
|
|
230
321
|
readonly status: number | undefined;
|
|
@@ -237,19 +328,25 @@ interface Assignment {
|
|
|
237
328
|
userId: string;
|
|
238
329
|
config: any;
|
|
239
330
|
funnelId?: string;
|
|
331
|
+
trialOn?: 'served' | 'exposure';
|
|
240
332
|
}
|
|
241
333
|
declare class BanditsClient {
|
|
242
334
|
private config;
|
|
243
335
|
private namedEventQueue;
|
|
244
336
|
readonly sessionId: string;
|
|
245
337
|
readonly visitorId: string;
|
|
338
|
+
private exposureQueue;
|
|
339
|
+
private exposedIds;
|
|
246
340
|
private flushTimer?;
|
|
247
341
|
constructor(config: BanditsClientConfig);
|
|
342
|
+
reportArrival(): Promise<boolean>;
|
|
248
343
|
getAssignment(experimentId: string, userId?: string, context?: ContextualFeatures): Promise<Assignment>;
|
|
249
344
|
trackNamedEvent(event: {
|
|
250
345
|
name: string;
|
|
251
346
|
category?: string;
|
|
252
347
|
value?: number;
|
|
348
|
+
cost?: number;
|
|
349
|
+
lineItems?: OrderLineItem[];
|
|
253
350
|
metadata?: Record<string, any>;
|
|
254
351
|
}, opts?: {
|
|
255
352
|
immediate?: boolean;
|
|
@@ -257,7 +354,18 @@ declare class BanditsClient {
|
|
|
257
354
|
assignmentId?: string;
|
|
258
355
|
}): void;
|
|
259
356
|
flush(): Promise<void>;
|
|
260
|
-
|
|
357
|
+
private flushNamedEvents;
|
|
358
|
+
private flushExposures;
|
|
359
|
+
exposed(assignmentId: string, opts?: {
|
|
360
|
+
immediate?: boolean;
|
|
361
|
+
}): void;
|
|
362
|
+
observeExposure(assignmentId: string, element: Element, opts?: {
|
|
363
|
+
threshold?: number;
|
|
364
|
+
dwellMs?: number;
|
|
365
|
+
}): () => void;
|
|
366
|
+
identify(anonymousId: string, identifiedUserId: string, mergeReason?: 'user_signup' | 'email_verification' | 'social_login' | 'account_recovery' | 'manual', options?: {
|
|
367
|
+
email?: string;
|
|
368
|
+
}): Promise<void>;
|
|
261
369
|
label(userId: string, labels: Record<string, string | boolean>): Promise<void>;
|
|
262
370
|
trackFunnelReward(funnelId: string, userId: string, value: number): Promise<void>;
|
|
263
371
|
convert(funnelId: string, value?: number): Promise<void>;
|
|
@@ -367,4 +475,4 @@ declare function reportPlanImpressions(plan: EmailPlan, recipientIds: string[],
|
|
|
367
475
|
alreadyRecorded: boolean;
|
|
368
476
|
}>;
|
|
369
477
|
|
|
370
|
-
export { type Assignment, BanditsClient as BanditClient, BanditsClient, type BanditsClientConfig, BanditsRequestError, type Bound, BundleAssignmentResponse, type ButtonBlock, CompanySnapshot, ContextualFeatures, DEFAULT_SESSION_TTL_MS, type DividerBlock, EMAIL_TOKEN_PARAM, type EmailBlock, type EmailDocument, type EmailPlan, type EmailTokenPayload, type HeadingBlock, type ImageBlock, type PlanArm, type PlanRenderResult, type PlanSlot, type RenderEmailOptions, type RenderedDocument, type RenderedEmail, type RewriteOptions, type RewriteResult, SCRIPT_PLATFORMS, SESSION_CREATED_AT_KEY, SESSION_ID_KEY, SITE_PLATFORMS, SITE_PLATFORM_IDS, type ScriptPlatform, type SessionOptions, type SigningKey, type SitePlatform, type SitePlatformId, type SitePlatformPath, type SlotBinding, SnapshotClient, type SnapshotClientConfig, SnapshotTreatment, type SpacerBlock, type SyncAssignment, type TextBlock, Treatment, VISITOR_ID_KEY, type VerifiedToken, appendEmailToken, buildSubdomainUrl, calculateConfidenceInterval, extractDocumentSlots, extractEmailLinks, extractSlotNames, extractSubdomain, generateId, generateSubdomain, getOrCreateSessionId, getOrCreateVisitorId, hashRecipient, impressionManifest, isSlotBinding, isValidEmail, isValidSubdomain, matchesConversionPath, mintEmailToken, normalizeConversionPath, normalizeTreatmentWeights, pickArm, pickTreatment, platformById, renderEmail, renderEmailDocument, renderFromPlan, reportPlanImpressions, rewriteEmailLinks, sampleCombination, sanitizeMetadata, shouldRefreshPlan, uniformFor, validateTreatmentWeights, verifyEmailToken };
|
|
478
|
+
export { ARRIVAL_CHANNELS, ARRIVAL_TTL_MS, type Arrival, type ArrivalChannel, type ArrivalSource, type ArrivalTouch, type Assignment, BanditsClient as BanditClient, BanditsClient, type BanditsClientConfig, BanditsRequestError, type Bound, BundleAssignmentResponse, type ButtonBlock, CHANNEL_LABELS, CHANNEL_RULES, CompanySnapshot, ContextualFeatures, DEFAULT_SESSION_TTL_MS, type DividerBlock, EMAIL_TOKEN_PARAM, type EmailBlock, type EmailDocument, type EmailPlan, type EmailTokenPayload, type HeadingBlock, type ImageBlock, MAX_ARRIVAL_VALUE_LENGTH, MAX_RAW_TOUCH_VALUE_LENGTH, MAX_REFERRER_HOST_LENGTH, NEW_PAYOUT_UNIT, OrderLineItem, PASS_THROUGH_HOSTS, PAYOUT_UNITS, PAYOUT_UNIT_COPY, type PayoutUnit, type PlanArm, type PlanRenderResult, type PlanSlot, type RenderEmailOptions, type RenderedDocument, type RenderedEmail, type RewriteOptions, type RewriteResult, SCRIPT_PLATFORMS, SESSION_CREATED_AT_KEY, SESSION_ID_KEY, SITE_PLATFORMS, SITE_PLATFORM_IDS, type ScriptPlatform, type SessionOptions, type SigningKey, type SitePlatform, type SitePlatformId, type SitePlatformPath, type SlotBinding, SnapshotClient, type SnapshotClientConfig, SnapshotTreatment, type SpacerBlock, type StoredArrival, type SyncAssignment, TRACKING_PARAM_SOURCES, TRIAL_RULES, TRIAL_RULE_COPY, type TextBlock, Treatment, type TrialRule, UNKNOWN_SOURCE_KEY, UTM_PARAMS, VISITOR_ID_KEY, type VerifiedToken, appendEmailToken, arrivalFromTouch, buildSubdomainUrl, calculateConfidenceInterval, channelOf, extractDocumentSlots, extractEmailLinks, extractSlotNames, extractSubdomain, formatPayout, generateId, generateSubdomain, getOrCreateSessionId, getOrCreateVisitorId, hashRecipient, impressionManifest, isArrivalActive, isCurrencyUnit, isDirectTouch, isPassThroughHost, isPayoutUnit, isSlotBinding, isTrialRule, isValidEmail, isValidSubdomain, matchesConversionPath, mintEmailToken, normalizeArrivalValue, normalizeConversionPath, normalizeHost, normalizeTreatmentWeights, payoutUnitOfRewardBasis, pickArm, pickTreatment, platformById, renderEmail, renderEmailDocument, renderFromPlan, reportPlanImpressions, rewardValue, rewriteEmailLinks, sampleCombination, sanitizeMetadata, shouldRefreshPlan, shouldReportTouch, sourceOf, touchFromPage, touchSignature, trialRuleFor, trialRuleOf, uniformFor, validateTreatmentWeights, verifyEmailToken };
|