@lifeaz/lors-helper 1.1.11 → 1.1.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/README.md +1 -1
- package/dist/main.d.ts +20 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +8 -0
- package/package.json +6 -6
- package/src/main.ts +11 -493
package/README.md
CHANGED
package/dist/main.d.ts
CHANGED
|
@@ -185,6 +185,12 @@ export declare const CartTermsViewSchema: z.ZodObject<{
|
|
|
185
185
|
}, z.core.$strip>>;
|
|
186
186
|
}, z.core.$strip>;
|
|
187
187
|
export type CartTermsView = z.infer<typeof CartTermsViewSchema>;
|
|
188
|
+
export declare const ItemRegularPriceSchema: z.ZodObject<{
|
|
189
|
+
excl: z.ZodNumber;
|
|
190
|
+
vat: z.ZodOptional<z.ZodNumber>;
|
|
191
|
+
incl: z.ZodOptional<z.ZodNumber>;
|
|
192
|
+
}, z.core.$strip>;
|
|
193
|
+
export type ItemRegularPrice = z.infer<typeof ItemRegularPriceSchema>;
|
|
188
194
|
export declare const ItemPriceSchema: z.ZodObject<{
|
|
189
195
|
recurrence: z.ZodUnion<readonly [z.ZodLiteral<"_One_Time_">, z.ZodLiteral<"_Monthly_">, z.ZodLiteral<"_Annually_">]>;
|
|
190
196
|
excl: z.ZodNumber;
|
|
@@ -192,6 +198,12 @@ export declare const ItemPriceSchema: z.ZodObject<{
|
|
|
192
198
|
vat: z.ZodOptional<z.ZodNumber>;
|
|
193
199
|
incl: z.ZodOptional<z.ZodNumber>;
|
|
194
200
|
vatRate: z.ZodOptional<z.ZodNumber>;
|
|
201
|
+
validUntil: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
202
|
+
regular: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
203
|
+
excl: z.ZodNumber;
|
|
204
|
+
vat: z.ZodOptional<z.ZodNumber>;
|
|
205
|
+
incl: z.ZodOptional<z.ZodNumber>;
|
|
206
|
+
}, z.core.$strip>>>;
|
|
195
207
|
}, z.core.$strip>;
|
|
196
208
|
export type ItemPrice = z.infer<typeof ItemPriceSchema>;
|
|
197
209
|
export declare const ItemDescriptionSchema: z.ZodObject<{
|
|
@@ -219,8 +231,15 @@ export declare const ItemSchema: z.ZodObject<{
|
|
|
219
231
|
vat: z.ZodOptional<z.ZodNumber>;
|
|
220
232
|
incl: z.ZodOptional<z.ZodNumber>;
|
|
221
233
|
vatRate: z.ZodOptional<z.ZodNumber>;
|
|
234
|
+
validUntil: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
235
|
+
regular: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
236
|
+
excl: z.ZodNumber;
|
|
237
|
+
vat: z.ZodOptional<z.ZodNumber>;
|
|
238
|
+
incl: z.ZodOptional<z.ZodNumber>;
|
|
239
|
+
}, z.core.$strip>>>;
|
|
222
240
|
}, z.core.$strip>>;
|
|
223
241
|
allowedProfiles: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"_Individual_">, z.ZodLiteral<"_Small_Business_">, z.ZodLiteral<"_Company_">]>>;
|
|
242
|
+
isDefaultDelivery: z.ZodOptional<z.ZodBoolean>;
|
|
224
243
|
}, z.core.$strip>;
|
|
225
244
|
export type Item = z.infer<typeof ItemSchema>;
|
|
226
245
|
export declare const CartItemSchema: z.ZodObject<{
|
|
@@ -1126,6 +1145,7 @@ export interface MvtStudioAnchor {
|
|
|
1126
1145
|
text: string | null;
|
|
1127
1146
|
movable: boolean;
|
|
1128
1147
|
hideable: boolean;
|
|
1148
|
+
hiddenByDefault?: boolean;
|
|
1129
1149
|
slots: string[];
|
|
1130
1150
|
group: string;
|
|
1131
1151
|
style: MvtAnchorStyleSnapshot;
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -114,6 +114,11 @@ export const CartTermsViewSchema = z.object({
|
|
|
114
114
|
required: z.array(TermsTypeSchema),
|
|
115
115
|
accepted: z.array(CartTermsAcceptanceSchema),
|
|
116
116
|
});
|
|
117
|
+
export const ItemRegularPriceSchema = z.object({
|
|
118
|
+
excl: z.number(),
|
|
119
|
+
vat: z.number().optional(),
|
|
120
|
+
incl: z.number().optional(),
|
|
121
|
+
});
|
|
117
122
|
export const ItemPriceSchema = z.object({
|
|
118
123
|
recurrence: PriceRecurrenceSchema,
|
|
119
124
|
excl: z.number(),
|
|
@@ -121,6 +126,8 @@ export const ItemPriceSchema = z.object({
|
|
|
121
126
|
vat: z.number().optional(),
|
|
122
127
|
incl: z.number().optional(),
|
|
123
128
|
vatRate: z.number().optional(),
|
|
129
|
+
validUntil: z.string().nullable().optional(),
|
|
130
|
+
regular: ItemRegularPriceSchema.nullable().optional(),
|
|
124
131
|
});
|
|
125
132
|
export const ItemDescriptionSchema = z.object({
|
|
126
133
|
lines: z.array(z.string()),
|
|
@@ -139,6 +146,7 @@ export const ItemSchema = z.object({
|
|
|
139
146
|
maxPerCart: z.number().int().positive().nullable(),
|
|
140
147
|
prices: z.array(ItemPriceSchema),
|
|
141
148
|
allowedProfiles: z.array(ProfileTypeSchema),
|
|
149
|
+
isDefaultDelivery: z.boolean().optional(),
|
|
142
150
|
});
|
|
143
151
|
export const CartItemSchema = z.object({
|
|
144
152
|
id: uuidSchema,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifeaz/lors-helper",
|
|
3
3
|
"description": "Lifeaz Online Retail Storefront Helper",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.13",
|
|
5
5
|
"main": "dist/main.js",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -43,16 +43,16 @@
|
|
|
43
43
|
"zod": "^4.3.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/node": "^24.
|
|
46
|
+
"@types/node": "^24.19.1",
|
|
47
47
|
"rimraf": "^6.0.1",
|
|
48
|
-
"typescript": "^5.
|
|
49
|
-
"zod": "^4.
|
|
48
|
+
"typescript": "^5.9.3",
|
|
49
|
+
"zod": "^4.6.5"
|
|
50
50
|
},
|
|
51
51
|
"lifeaz": {
|
|
52
52
|
"version": {
|
|
53
53
|
"short": 1,
|
|
54
|
-
"full": "1.1.
|
|
55
|
-
"code": "
|
|
54
|
+
"full": "1.1.13-b50",
|
|
55
|
+
"code": "101130050"
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
package/src/main.ts
CHANGED
|
@@ -205,6 +205,13 @@ export const CartTermsViewSchema = z.object({
|
|
|
205
205
|
});
|
|
206
206
|
export type CartTermsView = z.infer<typeof CartTermsViewSchema>;
|
|
207
207
|
|
|
208
|
+
export const ItemRegularPriceSchema = z.object({
|
|
209
|
+
excl: z.number(),
|
|
210
|
+
vat: z.number().optional(),
|
|
211
|
+
incl: z.number().optional(),
|
|
212
|
+
});
|
|
213
|
+
export type ItemRegularPrice = z.infer<typeof ItemRegularPriceSchema>;
|
|
214
|
+
|
|
208
215
|
export const ItemPriceSchema = z.object({
|
|
209
216
|
recurrence: PriceRecurrenceSchema,
|
|
210
217
|
excl: z.number(),
|
|
@@ -212,6 +219,8 @@ export const ItemPriceSchema = z.object({
|
|
|
212
219
|
vat: z.number().optional(),
|
|
213
220
|
incl: z.number().optional(),
|
|
214
221
|
vatRate: z.number().optional(),
|
|
222
|
+
validUntil: z.string().nullable().optional(),
|
|
223
|
+
regular: ItemRegularPriceSchema.nullable().optional(),
|
|
215
224
|
});
|
|
216
225
|
export type ItemPrice = z.infer<typeof ItemPriceSchema>;
|
|
217
226
|
|
|
@@ -230,17 +239,11 @@ export const ItemSchema = z.object({
|
|
|
230
239
|
thumbnailUrl: z.string().nullable(),
|
|
231
240
|
isMainOffer: z.boolean(),
|
|
232
241
|
visible: z.boolean(),
|
|
233
|
-
/**
|
|
234
|
-
* True for an item that only exists inside a partner funnel.
|
|
235
|
-
*
|
|
236
|
-
* Carried on the catalogue rather than filtered out of it, because the same catalogue serves
|
|
237
|
-
* the plain checkout and every partner one: the item has to be absent from the first and
|
|
238
|
-
* present in the second, and a query that dropped it would make the second impossible.
|
|
239
|
-
*/
|
|
240
242
|
partnersOnly: z.boolean().default(false),
|
|
241
243
|
maxPerCart: z.number().int().positive().nullable(),
|
|
242
244
|
prices: z.array(ItemPriceSchema),
|
|
243
245
|
allowedProfiles: z.array(ProfileTypeSchema),
|
|
246
|
+
isDefaultDelivery: z.boolean().optional(),
|
|
244
247
|
});
|
|
245
248
|
export type Item = z.infer<typeof ItemSchema>;
|
|
246
249
|
|
|
@@ -398,22 +401,7 @@ export const CartSchema = z.object({
|
|
|
398
401
|
status: CartStatusSchema,
|
|
399
402
|
currentStep: CartStepSchema,
|
|
400
403
|
maxReachedStep: CartStepSchema,
|
|
401
|
-
/**
|
|
402
|
-
* The funnel order frozen onto this cart when it was created.
|
|
403
|
-
*
|
|
404
|
-
* Null means the referential order. Frozen rather than re-resolved on every page because a
|
|
405
|
-
* cart whose steps are reordered halfway through would strand the customer on a step the
|
|
406
|
-
* server no longer expects them to be on.
|
|
407
|
-
*/
|
|
408
404
|
stepOrder: z.array(CartStepSchema).nullable().default(null),
|
|
409
|
-
/**
|
|
410
|
-
* The steps skipped on this cart, frozen with the order for the same reason.
|
|
411
|
-
*
|
|
412
|
-
* Read server-side to decide what "the next step" is: a cart advanced to a step its funnel
|
|
413
|
-
* does not show would refuse the customer the step that actually follows. Null means no
|
|
414
|
-
* step is skipped. A partner's own hidden steps are part of this set, since they are known
|
|
415
|
-
* when the cart is opened and never change for its lifetime.
|
|
416
|
-
*/
|
|
417
405
|
hiddenSteps: z.array(CartStepSchema).nullable().default(null),
|
|
418
406
|
profile: ProfileTypeSchema.nullable(),
|
|
419
407
|
offerType: OfferTypeSchema.nullable(),
|
|
@@ -424,13 +412,6 @@ export const CartSchema = z.object({
|
|
|
424
412
|
locale: LangSchema,
|
|
425
413
|
vatNumber: z.string().nullable(),
|
|
426
414
|
multiAddressesCallback: z.boolean(),
|
|
427
|
-
/**
|
|
428
|
-
* True for a basket the MVT studio minted so an operator can edit the funnel from inside it.
|
|
429
|
-
*
|
|
430
|
-
* Defaulted rather than required, so a release that predates the column - or any caller that
|
|
431
|
-
* simply does not set it - produces a real cart. The safe value is the one you get by saying
|
|
432
|
-
* nothing.
|
|
433
|
-
*/
|
|
434
415
|
simulated: z.boolean().default(false),
|
|
435
416
|
partnerId: uuidSchema.nullable(),
|
|
436
417
|
createdAt: dayjsSchema,
|
|
@@ -657,13 +638,6 @@ export type Campaign = z.infer<typeof CampaignSchema>;
|
|
|
657
638
|
|
|
658
639
|
export type DeliveryMethodId = '_Standard_' | '_Express_';
|
|
659
640
|
|
|
660
|
-
/**
|
|
661
|
-
* What the plain checkout commits to, in months.
|
|
662
|
-
*
|
|
663
|
-
* Named rather than written as a literal in four places, because it is reported in the webhooks
|
|
664
|
-
* now: a consumer reading "commitmentMonths" has to get the same answer from a partner order and
|
|
665
|
-
* from a direct one, and the direct one used to answer nothing at all.
|
|
666
|
-
*/
|
|
667
641
|
export const DEFAULT_COMMITMENT_MONTHS = 12;
|
|
668
642
|
|
|
669
643
|
export const PartnerNoticeSchema = z.object({
|
|
@@ -683,23 +657,8 @@ export const PartnerSchema = z.object({
|
|
|
683
657
|
logoUrl: z.string().nullable(),
|
|
684
658
|
promoCodesEnabled: z.boolean(),
|
|
685
659
|
hideReferralSurvey: z.boolean(),
|
|
686
|
-
/**
|
|
687
|
-
* Whether `deliveryCountries` replaces the base deliverable list or extends it.
|
|
688
|
-
*
|
|
689
|
-
* Extending is the older reading and stays the default: a partner that simply sells into one
|
|
690
|
-
* more market should not have to restate the countries everyone already ships to. Replacing
|
|
691
|
-
* is what lets an agreement covering one country be expressed as one country.
|
|
692
|
-
*/
|
|
693
660
|
deliveryCountriesExclusive: z.boolean().default(false),
|
|
694
|
-
/**
|
|
695
|
-
* Customer profiles this partner does not sell to.
|
|
696
|
-
*
|
|
697
|
-
* Blocks rather than an allow list, so a profile added to the catalogue is offered by every
|
|
698
|
-
* partner until one deliberately turns it off. Never all of them: a partner that sells to
|
|
699
|
-
* nobody is a funnel nobody can enter, and the API refuses to store that.
|
|
700
|
-
*/
|
|
701
661
|
blockedProfiles: z.array(z.string()).default([]),
|
|
702
|
-
/** Length of the rental commitment sold through this partner, in months. */
|
|
703
662
|
commitmentMonths: z.number().int().positive().max(120).default(DEFAULT_COMMITMENT_MONTHS),
|
|
704
663
|
hideOffersStep: z.boolean(),
|
|
705
664
|
defaultOfferType: OfferTypeSchema.nullable(),
|
|
@@ -711,10 +670,6 @@ export const PartnerSchema = z.object({
|
|
|
711
670
|
});
|
|
712
671
|
export type Partner = z.infer<typeof PartnerSchema>;
|
|
713
672
|
|
|
714
|
-
// =============================================================================
|
|
715
|
-
// MVT - Multivariate testing
|
|
716
|
-
// =============================================================================
|
|
717
|
-
|
|
718
673
|
export type MvtStatus = '_Draft_' | '_Scheduled_' | '_Running_' | '_Paused_' | '_Stopped_' | '_Archived_';
|
|
719
674
|
export const MvtStatusSchema = z.union([z.literal('_Draft_'), z.literal('_Scheduled_'), z.literal('_Running_'), z.literal('_Paused_'), z.literal('_Stopped_'), z.literal('_Archived_')]);
|
|
720
675
|
|
|
@@ -785,11 +740,6 @@ export const MvtOperatorSchema = z.union([
|
|
|
785
740
|
z.literal('_Date_Between_'),
|
|
786
741
|
]);
|
|
787
742
|
|
|
788
|
-
/**
|
|
789
|
-
* Operators that read no value at all. Storing an empty value list against one of them is not an
|
|
790
|
-
* error worth refusing, but the evaluator ignores it, and the Tools condition builder hides the
|
|
791
|
-
* value editor rather than offering a field that changes nothing.
|
|
792
|
-
*/
|
|
793
743
|
export const MVT_NULLARY_OPERATORS: readonly MvtOperator[] = [
|
|
794
744
|
'_Partner_Absent_',
|
|
795
745
|
'_Visitor_Is_New_',
|
|
@@ -833,62 +783,34 @@ export const MvtVariantSchema = z.object({
|
|
|
833
783
|
weight: z.number().int().nonnegative(),
|
|
834
784
|
control: z.boolean(),
|
|
835
785
|
overrides: z.array(MvtOverrideSchema),
|
|
836
|
-
/**
|
|
837
|
-
* Optional sub-targeting. A variant carrying one stops being a share of the split and becomes
|
|
838
|
-
* a rule: every unit matching it lands here, whatever the weights say. See mvtPickVariant.
|
|
839
|
-
*/
|
|
840
786
|
audience: MvtAudienceNodeSchema.nullable().default(null),
|
|
841
|
-
/** Evaluation order of the targeted variants. The first match wins, so this is the tie-break. */
|
|
842
787
|
order: z.number().int().default(0),
|
|
843
|
-
/** Purely cosmetic, so one arm keeps the same colour across the split bar, the studio and the results. */
|
|
844
788
|
color: z.string().nullable().default(null),
|
|
845
789
|
description: z.string().nullable().default(null),
|
|
846
790
|
});
|
|
847
791
|
export type MvtVariant = z.infer<typeof MvtVariantSchema>;
|
|
848
792
|
|
|
849
|
-
/**
|
|
850
|
-
* What a variant changes on one checkout.
|
|
851
|
-
*
|
|
852
|
-
* The plain checkout is the null partner; so is the storefront, which has no partner dimension.
|
|
853
|
-
* A checkout only ever receives the version written for it, never another checkout's: an
|
|
854
|
-
* override authored against the plain funnel names steps and options a partner funnel may not
|
|
855
|
-
* have, and a fallback would carry it there anyway. The API flattens the right version into
|
|
856
|
-
* `MvtVariant.overrides` before the config leaves the server, so the fronts never see the others.
|
|
857
|
-
*/
|
|
858
793
|
export const MvtVariantVersionSchema = z.object({
|
|
859
794
|
partnerId: z.string().nullable(),
|
|
860
795
|
overrides: z.array(MvtOverrideSchema),
|
|
861
796
|
});
|
|
862
797
|
export type MvtVariantVersion = z.infer<typeof MvtVariantVersionSchema>;
|
|
863
798
|
|
|
864
|
-
/**
|
|
865
|
-
* One checkout an experiment can reach, described by what it actually renders.
|
|
866
|
-
*
|
|
867
|
-
* Built by the API from the partner configuration and handed to the Tools, so the studio only
|
|
868
|
-
* offers what the funnel on screen has: a step the partner hides is not a step to reorder, and
|
|
869
|
-
* an option the partner blocks is not an option to preselect. The same object is what the API
|
|
870
|
-
* validates a version against before writing it, so the interface and the boundary agree.
|
|
871
|
-
*/
|
|
872
799
|
export const MvtCheckoutTargetSchema = z.object({
|
|
873
|
-
/** Null for the plain checkout. */
|
|
874
800
|
partnerId: z.string().nullable(),
|
|
875
801
|
slug: z.string().nullable(),
|
|
876
802
|
name: z.string(),
|
|
877
|
-
/** The referential funnel, in referential order. Always the six steps. */
|
|
878
803
|
steps: z.array(CartStepSchema),
|
|
879
|
-
/** Steps this checkout never shows, whatever a variant says. */
|
|
880
804
|
hiddenSteps: z.array(CartStepSchema),
|
|
881
805
|
availableOfferItemIds: z.array(z.string()),
|
|
882
806
|
availableOptionItemIds: z.array(z.string()),
|
|
883
807
|
blockedPaymentMethods: z.array(z.string()),
|
|
884
808
|
blockedDeliveryMethods: z.array(z.string()),
|
|
885
809
|
profiles: z.array(z.string()),
|
|
886
|
-
/** The offer this checkout applies by itself when it skips the Offers step. Null when it has none. */
|
|
887
810
|
defaultOfferType: OfferTypeSchema.nullable().default(null),
|
|
888
811
|
});
|
|
889
812
|
export type MvtCheckoutTarget = z.infer<typeof MvtCheckoutTargetSchema>;
|
|
890
813
|
|
|
891
|
-
/** The plain checkout as a target: everything the referential funnel offers, nothing removed. */
|
|
892
814
|
export function mvtPlainCheckoutTarget(offerItemIds: string[] = [], optionItemIds: string[] = [], profiles: string[] = []): MvtCheckoutTarget {
|
|
893
815
|
return {
|
|
894
816
|
partnerId: null,
|
|
@@ -905,20 +827,12 @@ export function mvtPlainCheckoutTarget(offerItemIds: string[] = [], optionItemId
|
|
|
905
827
|
};
|
|
906
828
|
}
|
|
907
829
|
|
|
908
|
-
/**
|
|
909
|
-
* How one variant ends up receiving traffic, resolved from the variant set as a whole.
|
|
910
|
-
*
|
|
911
|
-
* `_Targeted_` variants are claimed by their own conditions and take no part in the weighted
|
|
912
|
-
* draw; `_Weighted_` ones share whatever is left. Computed in one place because the operator is
|
|
913
|
-
* shown this and the evaluator obeys it, and the two disagreeing would be the worst outcome.
|
|
914
|
-
*/
|
|
915
830
|
export type MvtAllocationMode = '_Targeted_' | '_Weighted_' | '_Unreachable_';
|
|
916
831
|
|
|
917
832
|
export interface MvtAllocationRow {
|
|
918
833
|
key: string;
|
|
919
834
|
mode: MvtAllocationMode;
|
|
920
835
|
weight: number;
|
|
921
|
-
/** Share of the units that reach the weighted draw. Zero for a targeted variant, whose share depends on the audience rather than on a number. */
|
|
922
836
|
sharePct: number;
|
|
923
837
|
}
|
|
924
838
|
|
|
@@ -949,13 +863,6 @@ export const MvtConfigSchema = z.object({
|
|
|
949
863
|
});
|
|
950
864
|
export type MvtConfig = z.infer<typeof MvtConfigSchema>;
|
|
951
865
|
|
|
952
|
-
/**
|
|
953
|
-
* Everything the audience tree is allowed to read, resolved once and frozen into the assignment.
|
|
954
|
-
*
|
|
955
|
-
* Frozen matters more than it looks: a visitor who rotates their phone crosses the tablet/desktop
|
|
956
|
-
* breakpoint, and a context read live would move them to another variant mid-session. The context
|
|
957
|
-
* captured at assignment time is the one that decides, for as long as the assignment lives.
|
|
958
|
-
*/
|
|
959
866
|
export interface MvtContext {
|
|
960
867
|
unitId: string;
|
|
961
868
|
device: MvtDevice;
|
|
@@ -970,22 +877,12 @@ export interface MvtContext {
|
|
|
970
877
|
hasCart: boolean;
|
|
971
878
|
firstSeenAt: number;
|
|
972
879
|
now: number;
|
|
973
|
-
/** Query string of the landing URL, lowercased keys. Reads as a targeting dimension of its own so an ad link can pin an arm without an UTM convention. */
|
|
974
880
|
query: Record<string, string>;
|
|
975
|
-
/** Viewport width in CSS pixels. Coarser than the device buckets, for the tests where the breakpoint itself is the subject. */
|
|
976
881
|
screenWidth: number;
|
|
977
|
-
/** Sessions this unit has opened, this one included. */
|
|
978
882
|
visits: number;
|
|
979
883
|
loggedIn: boolean;
|
|
980
884
|
}
|
|
981
885
|
|
|
982
|
-
/**
|
|
983
|
-
* Fill in the dimensions an older caller does not provide.
|
|
984
|
-
*
|
|
985
|
-
* The context grew, and a front built against the previous shape must not start failing every
|
|
986
|
-
* leaf that reads a new field. Defaults are chosen so an absent dimension excludes rather than
|
|
987
|
-
* includes: a condition on something the caller cannot observe should not match everybody.
|
|
988
|
-
*/
|
|
989
886
|
export function mvtNormalizeContext(context: Partial<MvtContext> & { unitId: string }): MvtContext {
|
|
990
887
|
return {
|
|
991
888
|
device: '_Desktop_',
|
|
@@ -1017,42 +914,14 @@ export interface MvtDecision {
|
|
|
1017
914
|
overrides: MvtOverride[];
|
|
1018
915
|
}
|
|
1019
916
|
|
|
1020
|
-
/**
|
|
1021
|
-
* How the control arm names itself to the analytics destinations.
|
|
1022
|
-
*
|
|
1023
|
-
* The fronts used to send a null variant for a control assignment, on the reasoning that "which
|
|
1024
|
-
* variant is this person seeing" and "are they in the experiment at all" are different questions.
|
|
1025
|
-
* In practice the destinations do not agree: a null is dropped by some, rendered as "(not set)"
|
|
1026
|
-
* by others, and never groups, so the control arm went missing from exactly the reports it is the
|
|
1027
|
-
* baseline of. A named value groups like any other, and null keeps a meaning of its own - the
|
|
1028
|
-
* visitor is outside the experiment - which is what it was being asked to carry two things for.
|
|
1029
|
-
*
|
|
1030
|
-
* Deliberately lowercase and free of the underscore convention: this is a value read in a report,
|
|
1031
|
-
* not an identifier the applications match on.
|
|
1032
|
-
*/
|
|
1033
917
|
export const MVT_CONTROL_VARIANT = 'control';
|
|
1034
918
|
|
|
1035
|
-
/**
|
|
1036
|
-
* @summary The variant name one decision reports to the trackers.
|
|
1037
|
-
*
|
|
1038
|
-
* Shared so the assignment list, the per-event attribution and the exposure events
|
|
1039
|
-
* cannot drift: one visitor showing up as `control` in one and as their arm key in
|
|
1040
|
-
* another is a segmentation that silently double counts.
|
|
1041
|
-
*/
|
|
1042
919
|
export function mvtTrackedVariant(decision: Pick<MvtDecision, 'control' | 'variantKey'>): string {
|
|
1043
920
|
return decision.control ? MVT_CONTROL_VARIANT : decision.variantKey;
|
|
1044
921
|
}
|
|
1045
922
|
|
|
1046
923
|
const MVT_RETURNING_AFTER_MS = 30 * 60 * 1000;
|
|
1047
924
|
|
|
1048
|
-
/**
|
|
1049
|
-
* FNV-1a, 32 bits.
|
|
1050
|
-
*
|
|
1051
|
-
* Chosen for being trivially reimplementable and byte-for-byte identical everywhere: the API, the
|
|
1052
|
-
* storefront and the checkout each bucket independently, with no round trip, and any disagreement
|
|
1053
|
-
* between them would show up as a visitor silently changing variant when they cross from one
|
|
1054
|
-
* application to the other.
|
|
1055
|
-
*/
|
|
1056
925
|
export function mvtHash(input: string): number {
|
|
1057
926
|
let hash = 0x811c9dc5;
|
|
1058
927
|
|
|
@@ -1075,23 +944,11 @@ export function mvtIsEligibleForTraffic(experiment: MvtExperiment, unitId: strin
|
|
|
1075
944
|
return mvtBucket(experiment.salt, unitId, 'traffic') < experiment.trafficPct * 100;
|
|
1076
945
|
}
|
|
1077
946
|
|
|
1078
|
-
/**
|
|
1079
|
-
* Pick the variant a unit falls into, by weight, deterministically.
|
|
1080
|
-
*
|
|
1081
|
-
* Weights are relative rather than percentages so that 90/10, 50/50 and 34/33/33 are all
|
|
1082
|
-
* expressible without the operator having to make anything add up. They are sorted by key first,
|
|
1083
|
-
* so that the mapping from bucket range to variant depends only on the weights themselves and not
|
|
1084
|
-
* on the order rows happened to come back from the database.
|
|
1085
|
-
*/
|
|
1086
947
|
export function mvtPickVariant(experiment: MvtExperiment, unitId: string, context?: MvtContext): MvtVariant | null {
|
|
1087
948
|
const targeted = experiment.variants
|
|
1088
949
|
.filter(variant => !!variant.audience)
|
|
1089
950
|
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0) || a.key.localeCompare(b.key));
|
|
1090
951
|
|
|
1091
|
-
// Targeted arms are rules, not shares: the first whose own conditions hold claims the unit
|
|
1092
|
-
// outright. Evaluated before the draw so that "everyone on mobile sees B" means exactly that
|
|
1093
|
-
// rather than "mobile visitors have a better chance of seeing B", which is what a weight
|
|
1094
|
-
// nudged by hand would have produced and what an operator would have had to verify by eye.
|
|
1095
952
|
if (context)
|
|
1096
953
|
for (const variant of targeted)
|
|
1097
954
|
if (mvtEvaluateAudience(variant.audience ?? null, context)) return variant;
|
|
@@ -1099,9 +956,6 @@ export function mvtPickVariant(experiment: MvtExperiment, unitId: string, contex
|
|
|
1099
956
|
const pool = experiment.variants.filter(variant => !variant.audience).sort((a, b) => a.key.localeCompare(b.key));
|
|
1100
957
|
const total = pool.reduce((sum, v) => sum + Math.max(v.weight, 0), 0);
|
|
1101
958
|
|
|
1102
|
-
// Every arm targeted and none of them matching leaves nobody to fall back on. The unit is
|
|
1103
|
-
// left out of the experiment entirely rather than pushed onto an arm whose conditions it
|
|
1104
|
-
// failed, which would silently make the targeting a lie.
|
|
1105
959
|
if (!pool.length || total <= 0) return null;
|
|
1106
960
|
|
|
1107
961
|
const target = (mvtBucket(experiment.salt, unitId) / 10000) * total;
|
|
@@ -1116,13 +970,6 @@ export function mvtPickVariant(experiment: MvtExperiment, unitId: string, contex
|
|
|
1116
970
|
return pool[pool.length - 1];
|
|
1117
971
|
}
|
|
1118
972
|
|
|
1119
|
-
/**
|
|
1120
|
-
* How the split actually resolves, for the operator rather than the evaluator.
|
|
1121
|
-
*
|
|
1122
|
-
* Weights are relative and targeted arms are outside the draw entirely, so the number an operator
|
|
1123
|
-
* typed and the share it buys are rarely the same. Computing that here, from the same rules the
|
|
1124
|
-
* bucketing obeys, is what lets the interface show a split bar that cannot drift from the truth.
|
|
1125
|
-
*/
|
|
1126
973
|
export function mvtDistribution(variants: readonly MvtVariant[]): MvtAllocationRow[] {
|
|
1127
974
|
const pool = variants.filter(variant => !variant.audience);
|
|
1128
975
|
const total = pool.reduce((sum, v) => sum + Math.max(v.weight, 0), 0);
|
|
@@ -1190,9 +1037,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1190
1037
|
case '_Is_Weekend_': return [0, 6].includes(new Date(context.now).getDay());
|
|
1191
1038
|
case '_Visits_At_Least_': return context.visits >= Number(values[0] ?? 1);
|
|
1192
1039
|
|
|
1193
|
-
// Written "name=value", or "name" on its own to test for presence. The value side goes
|
|
1194
|
-
// through the same wildcard matcher as the UTM leaves, so utm-like conventions carried in
|
|
1195
|
-
// a bespoke parameter behave the way an operator already expects them to.
|
|
1196
1040
|
case '_Query_Param_Matches_': {
|
|
1197
1041
|
return values.some(raw => {
|
|
1198
1042
|
const separator = raw.indexOf('=');
|
|
@@ -1207,10 +1051,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1207
1051
|
});
|
|
1208
1052
|
}
|
|
1209
1053
|
|
|
1210
|
-
// A bound left blank is open-ended rather than zero. `??` only catches an absent entry,
|
|
1211
|
-
// and the editor writes an empty string for a field the operator cleared - which
|
|
1212
|
-
// `Number('')` turns into 0, so "1024 and above" silently became "between 1024 and 0" and
|
|
1213
|
-
// matched nobody. Same reading as the date window below, which had it right.
|
|
1214
1054
|
case '_Screen_Width_Between_': {
|
|
1215
1055
|
const from = values[0] ? Number(values[0]) : 0;
|
|
1216
1056
|
const to = values[1] ? Number(values[1]) : Number.MAX_SAFE_INTEGER;
|
|
@@ -1220,9 +1060,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1220
1060
|
return context.screenWidth >= from && context.screenWidth <= to;
|
|
1221
1061
|
}
|
|
1222
1062
|
|
|
1223
|
-
// Bounds are wall-clock dates, and either may be left out for an open-ended window. This
|
|
1224
|
-
// is not the experiment's own schedule: it is for the tests whose point is a date, such
|
|
1225
|
-
// as a variant that only exists over a sale weekend.
|
|
1226
1063
|
case '_Date_Between_': {
|
|
1227
1064
|
const from = values[0] ? Date.parse(values[0]) : Number.NEGATIVE_INFINITY;
|
|
1228
1065
|
const to = values[1] ? Date.parse(values[1]) : Number.POSITIVE_INFINITY;
|
|
@@ -1236,14 +1073,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1236
1073
|
}
|
|
1237
1074
|
}
|
|
1238
1075
|
|
|
1239
|
-
/**
|
|
1240
|
-
* Evaluate an audience tree.
|
|
1241
|
-
*
|
|
1242
|
-
* A null tree targets everyone, which is the common case and should not require building a node.
|
|
1243
|
-
* An operator this build does not know returns false rather than throwing: a Tools release that
|
|
1244
|
-
* introduces a new operator must never be able to break a front that has not shipped yet, and
|
|
1245
|
-
* failing closed means the visitor stays on control instead of seeing a broken page.
|
|
1246
|
-
*/
|
|
1247
1076
|
export function mvtEvaluateAudience(node: MvtAudienceNode | null, context: MvtContext): boolean {
|
|
1248
1077
|
if (!node) return true;
|
|
1249
1078
|
|
|
@@ -1267,14 +1096,6 @@ export function mvtIsLive(experiment: MvtExperiment, now: number): boolean {
|
|
|
1267
1096
|
return experiment.status === '_Running_' && mvtIsWithinWindow(experiment, now);
|
|
1268
1097
|
}
|
|
1269
1098
|
|
|
1270
|
-
/**
|
|
1271
|
-
* Resolve every decision for one unit, in one pass.
|
|
1272
|
-
*
|
|
1273
|
-
* Experiments are walked by descending priority so that exclusion groups resolve predictably: the
|
|
1274
|
-
* first live experiment of a group claims it, and the rest are skipped for this unit. Without an
|
|
1275
|
-
* order the winner would depend on row order, and two visitors could end up in mutually exclusive
|
|
1276
|
-
* tests that were meant to be exclusive.
|
|
1277
|
-
*/
|
|
1278
1099
|
export function mvtResolve(config: MvtConfig, context: MvtContext, forced: Record<string, string> = {}): MvtDecision[] {
|
|
1279
1100
|
if (!config.enabled) return [];
|
|
1280
1101
|
|
|
@@ -1320,20 +1141,8 @@ function mvtToDecision(experiment: MvtExperiment, variant: MvtVariant): MvtDecis
|
|
|
1320
1141
|
};
|
|
1321
1142
|
}
|
|
1322
1143
|
|
|
1323
|
-
// -----------------------------------------------------------------------------
|
|
1324
|
-
// Slot registry
|
|
1325
|
-
// -----------------------------------------------------------------------------
|
|
1326
|
-
|
|
1327
1144
|
export type MvtSlotKind = 'boolean' | 'number' | 'duration' | 'text' | 'i18n' | 'color' | 'image' | 'enum' | 'list' | 'object' | 'record';
|
|
1328
1145
|
|
|
1329
|
-
/**
|
|
1330
|
-
* One editable field of a fixed-shape slot.
|
|
1331
|
-
*
|
|
1332
|
-
* The registry describes the shape rather than leaving the interface to infer it, because the
|
|
1333
|
-
* alternative is an operator typing JSON into a textarea and discovering their mistake from a
|
|
1334
|
-
* customer. A field the editor does not recognise degrades to a text input rather than
|
|
1335
|
-
* disappearing, so adding a kind here never blanks out a control in an older build.
|
|
1336
|
-
*/
|
|
1337
1146
|
export interface MvtSlotField {
|
|
1338
1147
|
key: string;
|
|
1339
1148
|
label: string;
|
|
@@ -1346,50 +1155,19 @@ export interface MvtSlotDefinition {
|
|
|
1346
1155
|
scope: MvtScope;
|
|
1347
1156
|
area: string;
|
|
1348
1157
|
label: string;
|
|
1349
|
-
/** One short sentence an operator reads before deciding whether this is the slot they want. */
|
|
1350
1158
|
hint: string;
|
|
1351
1159
|
kind: MvtSlotKind;
|
|
1352
1160
|
ops: readonly MvtOverrideOp[];
|
|
1353
|
-
/** Allowed values for an `enum`, or the closed set of entries for a constrained `list`. */
|
|
1354
1161
|
options?: readonly string[];
|
|
1355
|
-
/** The named fields of an `object`, or the per-item fields of a list of objects. */
|
|
1356
1162
|
fields?: readonly MvtSlotField[];
|
|
1357
|
-
/** The kind every value takes in a `record`, whose keys are open-ended. */
|
|
1358
1163
|
entryKind?: MvtSlotKind;
|
|
1359
|
-
/** Which property identifies an item, for the `remove`, `patch` and `reorder` operations. */
|
|
1360
1164
|
itemKey?: string;
|
|
1361
1165
|
schema: z.ZodType<unknown>;
|
|
1362
1166
|
}
|
|
1363
1167
|
|
|
1364
|
-
/**
|
|
1365
|
-
* A piece of copy, written in whichever languages the operator filled in.
|
|
1366
|
-
*
|
|
1367
|
-
* Partial on purpose, and it has to be said in the schema rather than left to convention: zod
|
|
1368
|
-
* treats a record keyed by a closed set as exhaustive, so `z.record` here would refuse a French-
|
|
1369
|
-
* only override at write time - which is the normal case, since a language left empty is
|
|
1370
|
-
* documented everywhere as keeping the untouched original rather than blanking it.
|
|
1371
|
-
*/
|
|
1372
1168
|
const i18nTextSchema = z.partialRecord(LangSchema, z.string());
|
|
1373
|
-
/**
|
|
1374
|
-
* A hex colour, or the one keyword that is not a colour.
|
|
1375
|
-
*
|
|
1376
|
-
* The value space stays closed - it is written straight onto a customer's page - but it has to
|
|
1377
|
-
* hold "no background at all". Without it a section given a background by mistake could be
|
|
1378
|
-
* recoloured and never undone: every value the picker can produce paints something, and clearing
|
|
1379
|
-
* the override only restores whatever the page painted in the first place.
|
|
1380
|
-
*/
|
|
1381
1169
|
const colorSchema = z.string().regex(/^(#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})|transparent)$/i);
|
|
1382
1170
|
|
|
1383
|
-
/**
|
|
1384
|
-
* What a link or image override may point at.
|
|
1385
|
-
*
|
|
1386
|
-
* Overrides are authored by operators and applied verbatim onto attributes of a customer's page,
|
|
1387
|
-
* so the value space has to be closed the same way the patch vocabulary is. A `javascript:` href
|
|
1388
|
-
* written through the studio would otherwise ride an override straight into `setAttribute` and
|
|
1389
|
-
* run in every visitor's browser, which turns a copy-editing tool into stored XSS. Only http(s)
|
|
1390
|
-
* and same-site relative destinations survive; everything else is refused at write time by the
|
|
1391
|
-
* schemas and ignored at render time by the fronts.
|
|
1392
|
-
*/
|
|
1393
1171
|
const SAFE_HREF_PATTERN = /^(https?:\/\/|\/(?!\/)|#|\?)/i;
|
|
1394
1172
|
const SAFE_IMAGE_PATTERN = /^(https?:\/\/|\/(?!\/)|assets\/)/i;
|
|
1395
1173
|
|
|
@@ -1405,21 +1183,8 @@ const safeHrefSchema = z.string().max(2048).refine(mvtIsSafeHref, { message: 'hr
|
|
|
1405
1183
|
const safeImageSchema = z.string().max(2048).refine(mvtIsSafeImage, { message: 'image must be http(s) or a same-site relative path' });
|
|
1406
1184
|
const safeRouteSchema = z.string().max(512).refine(value => value.startsWith('/') && !value.startsWith('//'), { message: 'route must be an absolute in-app path' });
|
|
1407
1185
|
|
|
1408
|
-
/**
|
|
1409
|
-
* What a test may do to one anchored element.
|
|
1410
|
-
*
|
|
1411
|
-
* This is the whole vocabulary of the visual editor, and it is deliberately short. Hide it, move
|
|
1412
|
-
* it, reword it, repoint it, restyle it within a closed set of properties. Nothing here can
|
|
1413
|
-
* inject markup or a script, so an override authored by clicking around a page carries the same
|
|
1414
|
-
* blast radius as one typed into the registry editor, which is what makes the studio safe to
|
|
1415
|
-
* hand to somebody who is not going to read a diff.
|
|
1416
|
-
*
|
|
1417
|
-
* Every field is optional and absence means untouched, so the patches stay small and two editing
|
|
1418
|
-
* sessions on the same element compose instead of overwriting one another.
|
|
1419
|
-
*/
|
|
1420
1186
|
export const MvtAnchorPatchSchema = z.object({
|
|
1421
1187
|
hidden: z.boolean().optional(),
|
|
1422
|
-
/** Position among its siblings. Lower comes first; anchors without one keep their place. */
|
|
1423
1188
|
order: z.number().int().min(-999).max(999).optional(),
|
|
1424
1189
|
text: i18nTextSchema.optional(),
|
|
1425
1190
|
href: safeHrefSchema.optional(),
|
|
@@ -1454,19 +1219,6 @@ function slot(definition: MvtSlotDefinition): MvtSlotDefinition {
|
|
|
1454
1219
|
return definition;
|
|
1455
1220
|
}
|
|
1456
1221
|
|
|
1457
|
-
/**
|
|
1458
|
-
* The single source of truth for what a test is allowed to change.
|
|
1459
|
-
*
|
|
1460
|
-
* Shared by all four applications on purpose. The API validates writes against it, so a malformed
|
|
1461
|
-
* override is refused at authoring time rather than discovered by a customer; Tools reads it to
|
|
1462
|
-
* render a typed editor instead of a free JSON field; and the fronts read it to reject anything
|
|
1463
|
-
* that slipped through anyway. A slot absent from this list simply does not exist, which is what
|
|
1464
|
-
* keeps the blast radius of the whole feature bounded.
|
|
1465
|
-
*
|
|
1466
|
-
* Nothing monetary appears here, and nothing ever should. Prices, items and discounts are steered
|
|
1467
|
-
* by campaigns and discounts, which carry their own controls and their own audit trail. A test
|
|
1468
|
-
* decides how an offer is presented, never what it costs.
|
|
1469
|
-
*/
|
|
1470
1222
|
export const MVT_SLOTS: readonly MvtSlotDefinition[] = [
|
|
1471
1223
|
slot({ key: 'storefront.sections.order', scope: '_Storefront_', area: 'Structure', label: 'Section order', hint: 'Reorder the blocks of a page. Blocks not listed keep their place at the end.', kind: 'list', ops: ['reorder', 'set'], itemKey: 'id', schema: z.array(z.string()) }),
|
|
1472
1224
|
slot({ key: 'storefront.sections.hidden', scope: '_Storefront_', area: 'Structure', label: 'Hidden sections', hint: 'Blocks to take off the page entirely.', kind: 'list', ops: ['set'], schema: z.array(z.string()) }),
|
|
@@ -1623,13 +1375,6 @@ export interface MvtOverrideIssue {
|
|
|
1623
1375
|
reason: string;
|
|
1624
1376
|
}
|
|
1625
1377
|
|
|
1626
|
-
/**
|
|
1627
|
-
* Validate a variant's overrides against the registry.
|
|
1628
|
-
*
|
|
1629
|
-
* Called by the API before a variant is stored, so that a slot typo or a colour written as a name
|
|
1630
|
-
* instead of a hex value is a 422 for the operator who can still fix it, rather than a silently
|
|
1631
|
-
* ignored override that makes a test look like it had no effect.
|
|
1632
|
-
*/
|
|
1633
1378
|
export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue[] {
|
|
1634
1379
|
const issues: MvtOverrideIssue[] = [];
|
|
1635
1380
|
|
|
@@ -1657,10 +1402,6 @@ export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue
|
|
|
1657
1402
|
return;
|
|
1658
1403
|
}
|
|
1659
1404
|
|
|
1660
|
-
// A merge onto a record is still a record of the same entries, so the full schema
|
|
1661
|
-
// applies and catches a malformed anchor patch here rather than in a customer's
|
|
1662
|
-
// browser. A merge onto a fixed-shape object is a partial by definition, and running
|
|
1663
|
-
// the whole schema over it would refuse every legitimate single-field edit.
|
|
1664
1405
|
if (definition.kind === 'record' && !definition.schema.safeParse(override.value).success)
|
|
1665
1406
|
issues.push({ index, slot: override.slot, reason: 'invalid_value' });
|
|
1666
1407
|
|
|
@@ -1674,51 +1415,18 @@ export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue
|
|
|
1674
1415
|
return issues;
|
|
1675
1416
|
}
|
|
1676
1417
|
|
|
1677
|
-
/**
|
|
1678
|
-
* Steps no experiment may hide on any checkout.
|
|
1679
|
-
*
|
|
1680
|
-
* Each of these writes something the rest of the funnel cannot do without: Profile decides
|
|
1681
|
-
* which offers exist at all, Information carries the customer identity, Delivery the address
|
|
1682
|
-
* the price depends on, Payment the money. A funnel skipping one of them is not a variation, it
|
|
1683
|
-
* is a checkout that blocks on the step after the missing one - which is exactly what happened
|
|
1684
|
-
* when hiding the profile step was allowed.
|
|
1685
|
-
*/
|
|
1686
1418
|
export const MVT_UNHIDEABLE_STEPS: readonly CartStep[] = ['_Profile_', '_Information_', '_Delivery_', '_Payment_'];
|
|
1687
1419
|
|
|
1688
|
-
/**
|
|
1689
|
-
* The only steps a test may skip.
|
|
1690
|
-
*
|
|
1691
|
-
* Options is optional by nature. Offers is skippable only when something else picks the offer:
|
|
1692
|
-
* either the partner funnel, which applies its single offer by itself, or the variant, through
|
|
1693
|
-
* the `checkout.offers.default` slot. Without one of those nothing selects an offer, and the
|
|
1694
|
-
* Options step has nothing to attach a warranty to.
|
|
1695
|
-
*/
|
|
1696
1420
|
export const MVT_HIDEABLE_STEPS: readonly CartStep[] = ['_Offers_', '_Options_'];
|
|
1697
1421
|
|
|
1698
|
-
/** Whether a preselection entry names an item identifier rather than a SKU. */
|
|
1699
1422
|
const UUID_LIKE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
1700
1423
|
|
|
1701
|
-
/**
|
|
1702
|
-
* The default offer a set of overrides names, if any.
|
|
1703
|
-
*/
|
|
1704
1424
|
export function mvtDefaultOfferOf(overrides: readonly MvtOverride[]): string | null {
|
|
1705
1425
|
const override = overrides.find(entry => entry.slot === 'checkout.offers.default' && entry.op === 'set');
|
|
1706
1426
|
|
|
1707
1427
|
return typeof override?.value === 'string' ? override.value : null;
|
|
1708
1428
|
}
|
|
1709
1429
|
|
|
1710
|
-
/**
|
|
1711
|
-
* Validate a version's overrides against the checkout it is written for.
|
|
1712
|
-
*
|
|
1713
|
-
* Runs after mvtValidateOverrides, which already knows the value is well-typed; this one knows
|
|
1714
|
-
* whether the value names something the target checkout has. Hiding a step the partner already
|
|
1715
|
-
* hides is refused rather than tolerated, because an override that changes nothing on the funnel
|
|
1716
|
-
* it was written for is an override somebody will later wonder about. Preselecting an option the
|
|
1717
|
-
* partner blocks is refused for the plainer reason that the customer could never see it.
|
|
1718
|
-
*
|
|
1719
|
-
* The step order stays a permutation of the six steps on every checkout, hidden ones included:
|
|
1720
|
-
* hiding is a separate list, and the fronts discard an order that drops a step as malformed.
|
|
1721
|
-
*/
|
|
1722
1430
|
export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target: MvtCheckoutTarget): MvtOverrideIssue[] {
|
|
1723
1431
|
const issues: MvtOverrideIssue[] = [];
|
|
1724
1432
|
const hidden = new Set<string>(target.hiddenSteps);
|
|
@@ -1755,9 +1463,6 @@ export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target:
|
|
|
1755
1463
|
issues.push({ index, slot: override.slot, reason: 'option_absent_on_target' });
|
|
1756
1464
|
}
|
|
1757
1465
|
|
|
1758
|
-
// A warranty is matched by SKU or by item id on the front, so only an entry that looks
|
|
1759
|
-
// like an identifier can be checked here. A SKU is left to the front, which knows the
|
|
1760
|
-
// catalogue in the customer's country; naming a blocked item id is refused outright.
|
|
1761
1466
|
if (override.slot === 'checkout.warranty.preselected' && typeof override.value === 'string' && options.size) {
|
|
1762
1467
|
if (override.value !== '_None_' && UUID_LIKE.test(override.value) && !options.has(override.value))
|
|
1763
1468
|
issues.push({ index, slot: override.slot, reason: 'option_absent_on_target' });
|
|
@@ -1772,13 +1477,6 @@ export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target:
|
|
|
1772
1477
|
return issues;
|
|
1773
1478
|
}
|
|
1774
1479
|
|
|
1775
|
-
/**
|
|
1776
|
-
* Apply one override to a base value.
|
|
1777
|
-
*
|
|
1778
|
-
* Every branch is total: an operation that cannot be carried out on the shape it was given returns
|
|
1779
|
-
* the base untouched. A test that does nothing is a disappointment; a test that throws inside a
|
|
1780
|
-
* component's render path is an outage, and the two are not worth trading against each other.
|
|
1781
|
-
*/
|
|
1782
1480
|
export function mvtApplyOverride<T>(base: T, override: MvtOverride): T {
|
|
1783
1481
|
const value = override.value;
|
|
1784
1482
|
|
|
@@ -1846,28 +1544,14 @@ export function mvtApplyOverride<T>(base: T, override: MvtOverride): T {
|
|
|
1846
1544
|
}
|
|
1847
1545
|
}
|
|
1848
1546
|
|
|
1849
|
-
// -----------------------------------------------------------------------------
|
|
1850
|
-
// Anchors
|
|
1851
|
-
// -----------------------------------------------------------------------------
|
|
1852
|
-
|
|
1853
1547
|
export const MVT_ANCHOR_ATTRIBUTE = 'data-mvt-anchor';
|
|
1854
1548
|
|
|
1855
|
-
/** The tags a text block may contain and still be edited wholesale: pure inline formatting. */
|
|
1856
1549
|
const MVT_INLINE_TEXT_TAGS = new Set(['BR', 'B', 'STRONG', 'EM', 'I', 'U', 'SPAN', 'SMALL', 'SUP', 'SUB', 'MARK']);
|
|
1857
1550
|
|
|
1858
|
-
/**
|
|
1859
|
-
* Whether an element holds nothing but text as far as editing is concerned.
|
|
1860
|
-
*
|
|
1861
|
-
* Used to be "no element children at all", which locked a title split by a <br> or a label
|
|
1862
|
-
* wrapped in a <strong> out of the double-click editor for no reason an operator could see.
|
|
1863
|
-
* Inline formatting tags are text; a nested component, a link or an image is not, because
|
|
1864
|
-
* replacing the textContent of those would delete markup Angular will not put back.
|
|
1865
|
-
*/
|
|
1866
1551
|
export function mvtHoldsOnlyText(node: HTMLElement): boolean {
|
|
1867
1552
|
return Array.from(node.querySelectorAll('*')).every(child => MVT_INLINE_TEXT_TAGS.has(child.tagName));
|
|
1868
1553
|
}
|
|
1869
1554
|
|
|
1870
|
-
/** What the style inspector edits, read from the page rather than assumed. */
|
|
1871
1555
|
export interface MvtAnchorStyleSnapshot {
|
|
1872
1556
|
background: string | null;
|
|
1873
1557
|
color: string | null;
|
|
@@ -1888,14 +1572,6 @@ function mvtColorToHex(value: string): string | null {
|
|
|
1888
1572
|
return `#${hex(match[1])}${hex(match[2])}${hex(match[3])}`;
|
|
1889
1573
|
}
|
|
1890
1574
|
|
|
1891
|
-
/**
|
|
1892
|
-
* Read the style an element actually renders with, in the vocabulary of the patch schema.
|
|
1893
|
-
*
|
|
1894
|
-
* The inspector used to open every element on white-on-black defaults, which told the operator
|
|
1895
|
-
* the editor did not know the page - and it did not. The background climbs the ancestors until
|
|
1896
|
-
* something opaque is found, because "transparent" is never what a person means by the colour
|
|
1897
|
-
* behind a title.
|
|
1898
|
-
*/
|
|
1899
1575
|
export function mvtSnapshotAnchorStyle(node: HTMLElement): MvtAnchorStyleSnapshot {
|
|
1900
1576
|
const computed = window.getComputedStyle(node);
|
|
1901
1577
|
|
|
@@ -1925,24 +1601,10 @@ export function mvtSnapshotAnchorStyle(node: HTMLElement): MvtAnchorStyleSnapsho
|
|
|
1925
1601
|
};
|
|
1926
1602
|
}
|
|
1927
1603
|
|
|
1928
|
-
/**
|
|
1929
|
-
* The anchors slot for one scope.
|
|
1930
|
-
*
|
|
1931
|
-
* Kept as a lookup rather than a naming convention the call sites repeat, because the studio, the
|
|
1932
|
-
* API validator and the two fronts all have to agree on it, and a typo in any of the four would
|
|
1933
|
-
* produce an override that validates and does nothing.
|
|
1934
|
-
*/
|
|
1935
1604
|
export function mvtAnchorsSlot(scope: MvtScope): string {
|
|
1936
1605
|
return scope === '_Checkout_' ? 'checkout.anchors' : 'storefront.anchors';
|
|
1937
1606
|
}
|
|
1938
1607
|
|
|
1939
|
-
/**
|
|
1940
|
-
* Fold a stack of anchor patches into one.
|
|
1941
|
-
*
|
|
1942
|
-
* Later patches win field by field rather than wholesale: two overrides touching the same element,
|
|
1943
|
-
* one hiding it and one rewording it, both have to survive, or the operator has to remember which
|
|
1944
|
-
* of their own edits cancelled which.
|
|
1945
|
-
*/
|
|
1946
1608
|
export function mvtMergeAnchorPatch(base: MvtAnchorPatch | undefined, next: MvtAnchorPatch | undefined): MvtAnchorPatch {
|
|
1947
1609
|
if (!base) return next ?? {};
|
|
1948
1610
|
if (!next) return base;
|
|
@@ -1955,13 +1617,6 @@ export function mvtMergeAnchorPatch(base: MvtAnchorPatch | undefined, next: MvtA
|
|
|
1955
1617
|
};
|
|
1956
1618
|
}
|
|
1957
1619
|
|
|
1958
|
-
/**
|
|
1959
|
-
* The inline style an anchor patch asks for, as a plain property bag.
|
|
1960
|
-
*
|
|
1961
|
-
* Only the closed set the patch schema allows can come out of here, which is the point: a front
|
|
1962
|
-
* applying this is not evaluating anything an operator wrote, it is reading a handful of numbers
|
|
1963
|
-
* and colours that have already been validated twice.
|
|
1964
|
-
*/
|
|
1965
1620
|
export function mvtAnchorStyle(patch: MvtAnchorPatch | null | undefined): Record<string, string> {
|
|
1966
1621
|
const style = patch?.style;
|
|
1967
1622
|
|
|
@@ -1982,181 +1637,68 @@ export function mvtAnchorStyle(patch: MvtAnchorPatch | null | undefined): Record
|
|
|
1982
1637
|
return out;
|
|
1983
1638
|
}
|
|
1984
1639
|
|
|
1985
|
-
// -----------------------------------------------------------------------------
|
|
1986
|
-
// Studio bridge
|
|
1987
|
-
// -----------------------------------------------------------------------------
|
|
1988
|
-
|
|
1989
|
-
/**
|
|
1990
|
-
* The message vocabulary between the Tools studio and the front rendered inside its frame.
|
|
1991
|
-
*
|
|
1992
|
-
* A separate protocol rather than a preview link with more query parameters, because the studio
|
|
1993
|
-
* has to do two things a link cannot: read back what is actually on the page - the anchors, their
|
|
1994
|
-
* labels, their nesting - and apply an edit without a reload, so that changing a colour is a
|
|
1995
|
-
* colour changing rather than a page blinking.
|
|
1996
|
-
*
|
|
1997
|
-
* Every message carries the protocol version. A front and a Tools release drift apart eventually,
|
|
1998
|
-
* and a version mismatch has to degrade to a plain preview rather than to an editor whose clicks
|
|
1999
|
-
* quietly do nothing.
|
|
2000
|
-
*/
|
|
2001
1640
|
export const MVT_STUDIO_PROTOCOL = 4;
|
|
2002
1641
|
|
|
2003
1642
|
export type MvtStudioAnchorRole = 'section' | 'cta' | 'text' | 'image' | 'block';
|
|
2004
1643
|
|
|
2005
1644
|
export interface MvtStudioAnchor {
|
|
2006
|
-
/** Stable identifier written into the markup by the front, never derived from the DOM position. */
|
|
2007
1645
|
id: string;
|
|
2008
1646
|
label: string;
|
|
2009
1647
|
role: MvtStudioAnchorRole;
|
|
2010
|
-
/** The anchor this one sits inside, for the studio's tree. Null at the top level. */
|
|
2011
1648
|
parentId: string | null;
|
|
2012
1649
|
order: number;
|
|
2013
|
-
/** What the untouched page shows today, so the editor opens on the real copy rather than an empty field. */
|
|
2014
1650
|
text: string | null;
|
|
2015
1651
|
movable: boolean;
|
|
2016
1652
|
hideable: boolean;
|
|
2017
|
-
|
|
2018
|
-
* Slot keys this element governs, beyond its own patch.
|
|
2019
|
-
*
|
|
2020
|
-
* Declared by the front on the element people would naturally click for the change: the
|
|
2021
|
-
* checkout breadcrumb carries the step order and hidden steps, the flash banner carries its
|
|
2022
|
-
* placement. The studio and the in-page menu build their controls from the slot registry, so
|
|
2023
|
-
* a structural change is a right click on the thing itself rather than a form beside it.
|
|
2024
|
-
*/
|
|
1653
|
+
hiddenByDefault?: boolean;
|
|
2025
1654
|
slots: string[];
|
|
2026
|
-
/**
|
|
2027
|
-
* Opaque identity of the container the element can be reordered inside.
|
|
2028
|
-
*
|
|
2029
|
-
* Two anchors sharing a group share a DOM parent whose layout honours the order property.
|
|
2030
|
-
* The studio's own move arrows used to group by the nearest anchored ancestor, which is a
|
|
2031
|
-
* different relation: a hero's title and its visual share an ancestor but live in different
|
|
2032
|
-
* containers, and swapping their ranks would have moved nothing.
|
|
2033
|
-
*/
|
|
2034
1655
|
group: string;
|
|
2035
|
-
/** The style the element renders with today, so the inspector opens on the truth. */
|
|
2036
1656
|
style: MvtAnchorStyleSnapshot;
|
|
2037
1657
|
rect: { top: number; left: number; width: number; height: number };
|
|
2038
1658
|
}
|
|
2039
1659
|
|
|
2040
|
-
/**
|
|
2041
|
-
* Somewhere the studio can go next.
|
|
2042
|
-
*
|
|
2043
|
-
* The editor used to reach other pages through a free-text path field, which asked an operator to
|
|
2044
|
-
* already know the route they wanted and silently rendered a 404 inside the frame when they were
|
|
2045
|
-
* one character out. The front knows its own routes, so it says what they are.
|
|
2046
|
-
*
|
|
2047
|
-
* `kind` separates what the page happens to link to from what the front declares it can reach.
|
|
2048
|
-
* A storefront only has links; the checkout has steps that exist whether or not the current page
|
|
2049
|
-
* links to them, and an operator editing the payment step should not have to walk the funnel to
|
|
2050
|
-
* get there.
|
|
2051
|
-
*/
|
|
2052
1660
|
export interface MvtStudioLink {
|
|
2053
1661
|
path: string;
|
|
2054
1662
|
label: string;
|
|
2055
1663
|
kind: 'link' | 'step';
|
|
2056
|
-
/** Steps the cart has not unlocked yet are offered but marked, rather than hidden. */
|
|
2057
1664
|
reachable: boolean;
|
|
2058
1665
|
}
|
|
2059
1666
|
|
|
2060
|
-
/**
|
|
2061
|
-
* The simulated basket the checkout studio runs on.
|
|
2062
|
-
*
|
|
2063
|
-
* Editing the funnel means being inside it, and being inside it means holding a cart. Minting one
|
|
2064
|
-
* by hand through the real onboarding flow every time is what made the checkout scope effectively
|
|
2065
|
-
* uneditable.
|
|
2066
|
-
*/
|
|
2067
1667
|
export interface MvtStudioCart {
|
|
2068
1668
|
reference: string;
|
|
2069
1669
|
secret: string;
|
|
2070
|
-
/** Where the simulated cart currently sits, so the studio can offer the steps behind it. */
|
|
2071
1670
|
step: string;
|
|
2072
1671
|
simulated: true;
|
|
2073
|
-
/**
|
|
2074
|
-
* The checkout the basket was minted for. Null is the plain checkout.
|
|
2075
|
-
*
|
|
2076
|
-
* Carried so the studio can tell a basket minted for one partner from one minted for
|
|
2077
|
-
* another and never hand a partner funnel a basket that does not belong to it.
|
|
2078
|
-
*/
|
|
2079
1672
|
partnerId?: string | null;
|
|
2080
1673
|
}
|
|
2081
1674
|
|
|
2082
|
-
/**
|
|
2083
|
-
* One popup the page can open on demand.
|
|
2084
|
-
*
|
|
2085
|
-
* Popups exist behind timers, scroll depths and frequency caps by design, which makes them
|
|
2086
|
-
* invisible to an operator who opened the studio thirty seconds ago. The front declares the ones
|
|
2087
|
-
* it has, and the studio - or the in-frame overlay - opens them directly, so editing a popup does
|
|
2088
|
-
* not start with waiting for it.
|
|
2089
|
-
*/
|
|
2090
1675
|
export interface MvtStudioPopup {
|
|
2091
1676
|
id: string;
|
|
2092
1677
|
label: string;
|
|
2093
1678
|
}
|
|
2094
1679
|
|
|
2095
|
-
/** Tools to front. */
|
|
2096
1680
|
export type MvtStudioRequest =
|
|
2097
1681
|
| { protocol: number; type: 'studio:hello' }
|
|
2098
1682
|
| { protocol: number; type: 'studio:scan' }
|
|
2099
1683
|
| { protocol: number; type: 'studio:select'; anchorId: string | null }
|
|
2100
|
-
/** Open one declared popup by identifier, or close whichever is open with null. */
|
|
2101
1684
|
| { protocol: number; type: 'studio:popup'; popup: string | null }
|
|
2102
|
-
/**
|
|
2103
|
-
* The full authoring state of the variant on screen: the anchor patch set plus every
|
|
2104
|
-
* non-anchor override it carries. The frame renders exactly this, so a structural edit - a
|
|
2105
|
-
* reordered funnel, a moved banner - shows up live the same way a reworded title does.
|
|
2106
|
-
*/
|
|
2107
1685
|
| { protocol: number; type: 'studio:apply'; anchors: Record<string, MvtAnchorPatch>; overrides: MvtOverride[]; lang: string }
|
|
2108
1686
|
| { protocol: number; type: 'studio:mode'; picking: boolean }
|
|
2109
1687
|
| { protocol: number; type: 'studio:navigate'; path: string }
|
|
2110
1688
|
| { protocol: number; type: 'studio:links' }
|
|
2111
1689
|
| { protocol: number; type: 'studio:cart'; cart: MvtStudioCart };
|
|
2112
1690
|
|
|
2113
|
-
/** Front to Tools. */
|
|
2114
1691
|
export type MvtStudioEvent =
|
|
2115
|
-
/**
|
|
2116
|
-
* `partner` is the checkout the frame is actually running as, read from its own URL. Null is
|
|
2117
|
-
* the plain checkout; absent means an older front that does not say. The studio compares it
|
|
2118
|
-
* with the target it meant to open and refuses to write into a frame showing another one.
|
|
2119
|
-
*/
|
|
2120
1692
|
| { protocol: number; type: 'studio:ready'; scope: MvtScope; path: string; langs: string[]; lang: string; partner?: string | null }
|
|
2121
1693
|
| { protocol: number; type: 'studio:anchors'; anchors: MvtStudioAnchor[]; path: string }
|
|
2122
1694
|
| { protocol: number; type: 'studio:picked'; anchor: MvtStudioAnchor }
|
|
2123
1695
|
| { protocol: number; type: 'studio:navigated'; path: string }
|
|
2124
1696
|
| { protocol: number; type: 'studio:links'; links: MvtStudioLink[]; path: string }
|
|
2125
1697
|
| { protocol: number; type: 'studio:cart'; cart: MvtStudioCart | null }
|
|
2126
|
-
/** The popups this page can open on demand, re-announced whenever the set changes. */
|
|
2127
1698
|
| { protocol: number; type: 'studio:popups'; popups: MvtStudioPopup[] }
|
|
2128
|
-
/**
|
|
2129
|
-
* An edit made on the page itself rather than in the inspector.
|
|
2130
|
-
*
|
|
2131
|
-
* Reported as a patch fragment rather than as a whole patch, so the studio merges it into
|
|
2132
|
-
* whatever that anchor already carries instead of replacing it: dragging a section must not
|
|
2133
|
-
* discard the colour somebody set on it a minute earlier.
|
|
2134
|
-
*
|
|
2135
|
-
* The page never writes to the saved variant. It says what changed and the studio decides -
|
|
2136
|
-
* which keeps undo, the dirty marker and the save button in one place, and means a front that
|
|
2137
|
-
* gets this wrong can produce a bad edit but never a bad save.
|
|
2138
|
-
*/
|
|
2139
1699
|
| { protocol: number; type: 'studio:edited'; anchorId: string; patch: Partial<MvtAnchorPatch>; replace?: boolean }
|
|
2140
|
-
/**
|
|
2141
|
-
* A structural edit made through the in-page menu: a slot value rather than an anchor patch.
|
|
2142
|
-
*
|
|
2143
|
-
* Same contract as `studio:edited`: the page proposes, the studio disposes. The value is
|
|
2144
|
-
* validated by Tools against the slot registry before it ever lands in the variant, so a
|
|
2145
|
-
* bridge bug can produce a wrong preview but never a wrong save.
|
|
2146
|
-
*/
|
|
2147
1700
|
| { protocol: number; type: 'studio:slot'; slot: string; op: 'set' | 'merge'; value: unknown };
|
|
2148
1701
|
|
|
2149
|
-
/**
|
|
2150
|
-
* Strip a deployment base path from a document pathname, yielding the router-space path.
|
|
2151
|
-
*
|
|
2152
|
-
* A front served under a sub-path (the checkout lives at `/checkout/` on the shared staging host)
|
|
2153
|
-
* sees `window.location.pathname` carry that prefix, while its router - and the studio driving it -
|
|
2154
|
-
* both reason in base-relative paths. Every path crossing the studio bridge goes through this, so
|
|
2155
|
-
* the two sides always speak the same path space whatever the deployment layout is.
|
|
2156
|
-
*
|
|
2157
|
-
* The base is matched as a whole segment: `/checkout` strips `/checkout/cart` down to `/cart` and
|
|
2158
|
-
* leaves `/checkout-help` alone, because that is a different route and not a prefixed one.
|
|
2159
|
-
*/
|
|
2160
1702
|
export function mvtStripBasePath(pathname: string, basePath: string): string {
|
|
2161
1703
|
const base = (basePath ?? '').replace(/\/+$/, '');
|
|
2162
1704
|
|
|
@@ -2167,12 +1709,6 @@ export function mvtStripBasePath(pathname: string, basePath: string): string {
|
|
|
2167
1709
|
return pathname || '/';
|
|
2168
1710
|
}
|
|
2169
1711
|
|
|
2170
|
-
/**
|
|
2171
|
-
* The base path the document is served under, read from the base element the framework injected.
|
|
2172
|
-
*
|
|
2173
|
-
* Read from the DOM rather than configured, so the same build works at the domain root and under
|
|
2174
|
-
* a sub-path without anyone remembering to keep a constant in step with the deployment.
|
|
2175
|
-
*/
|
|
2176
1712
|
export function mvtBasePathOf(doc: Document): string {
|
|
2177
1713
|
try {
|
|
2178
1714
|
return new URL(doc.baseURI).pathname.replace(/\/+$/, '') || '/';
|
|
@@ -2181,21 +1717,6 @@ export function mvtBasePathOf(doc: Document): string {
|
|
|
2181
1717
|
}
|
|
2182
1718
|
}
|
|
2183
1719
|
|
|
2184
|
-
/**
|
|
2185
|
-
* Collect the navigable links of the page the front is currently showing.
|
|
2186
|
-
*
|
|
2187
|
-
* Shared rather than written twice, because the filtering is where this gets subtle and getting it
|
|
2188
|
-
* wrong in one front and not the other produces a link list that behaves differently depending on
|
|
2189
|
-
* which scope is being edited.
|
|
2190
|
-
*
|
|
2191
|
-
* Only same-origin, non-anchor, non-download links survive. An external link would navigate the
|
|
2192
|
-
* frame off the front entirely, taking the preview token with it and leaving the studio talking to
|
|
2193
|
-
* a page that has never heard of it; an in-page anchor is not a destination.
|
|
2194
|
-
*
|
|
2195
|
-
* `basePath` is the deployment prefix of the front, when it has one. Collected hrefs carry it -
|
|
2196
|
-
* the browser resolves them against the base element - while the studio and the router reason in
|
|
2197
|
-
* base-relative paths, so it is stripped here rather than by every caller.
|
|
2198
|
-
*/
|
|
2199
1720
|
export function mvtCollectLinks(root: ParentNode, origin: string, basePath = ''): MvtStudioLink[] {
|
|
2200
1721
|
const seen = new Set<string>();
|
|
2201
1722
|
const links: MvtStudioLink[] = [];
|
|
@@ -2222,9 +1743,6 @@ export function mvtCollectLinks(root: ParentNode, origin: string, basePath = '')
|
|
|
2222
1743
|
|
|
2223
1744
|
seen.add(path);
|
|
2224
1745
|
|
|
2225
|
-
// The visible text, collapsed. An operator picks a destination by the words they can see
|
|
2226
|
-
// on the page, not by its route, and a label carrying the whitespace of a three-line
|
|
2227
|
-
// menu entry is unreadable in a dropdown.
|
|
2228
1746
|
const label = (anchor.textContent ?? '').replace(/\s+/g, ' ').trim();
|
|
2229
1747
|
|
|
2230
1748
|
links.push({ path, label: label || path, kind: 'link', reachable: true });
|