@drip-apex/sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/README.md +5 -0
  2. package/dist/bundle-report.json +584 -226
  3. package/dist/define.cjs +123 -0
  4. package/dist/define.cjs.map +7 -0
  5. package/dist/define.mjs +102 -0
  6. package/dist/define.mjs.map +7 -0
  7. package/dist/drip.cjs +19262 -0
  8. package/dist/drip.cjs.map +7 -0
  9. package/dist/drip.debug.js +1 -1
  10. package/dist/drip.debug.js.map +1 -1
  11. package/dist/drip.heatmap.js +1 -1
  12. package/dist/drip.heatmap.js.map +1 -1
  13. package/dist/drip.js +1 -1
  14. package/dist/drip.js.map +1 -1
  15. package/dist/drip.live.js +1 -1
  16. package/dist/drip.live.js.map +1 -1
  17. package/dist/drip.mjs +19246 -0
  18. package/dist/drip.mjs.map +7 -0
  19. package/dist/drip.replay-recorder.js +2 -0
  20. package/dist/drip.replay-recorder.js.map +1 -0
  21. package/dist/editor.js +147 -142
  22. package/dist/editor.js.map +4 -4
  23. package/dist/flags.cjs +1788 -0
  24. package/dist/flags.cjs.map +7 -0
  25. package/dist/flags.mjs +1765 -0
  26. package/dist/flags.mjs.map +7 -0
  27. package/dist/index.mjs +12 -0
  28. package/dist/index.mjs.map +2 -2
  29. package/dist/metafiles/define.cjs.meta.json +28 -0
  30. package/dist/metafiles/define.mjs.meta.json +32 -0
  31. package/dist/metafiles/drip.cjs.meta.json +3193 -0
  32. package/dist/metafiles/drip.debug.meta.json +2859 -574
  33. package/dist/metafiles/drip.heatmap.meta.json +2732 -460
  34. package/dist/metafiles/drip.live.meta.json +2732 -460
  35. package/dist/metafiles/drip.meta.json +2859 -574
  36. package/dist/metafiles/drip.mjs.meta.json +3235 -0
  37. package/dist/metafiles/drip.replay-recorder.meta.json +82 -0
  38. package/dist/metafiles/editor.meta.json +67 -27
  39. package/dist/metafiles/flags.cjs.meta.json +220 -0
  40. package/dist/metafiles/flags.mjs.meta.json +225 -0
  41. package/dist/metafiles/index.meta.json +2717 -491
  42. package/dist/metafiles/index.mjs.meta.json +14 -4
  43. package/dist/react/index.js +16621 -13539
  44. package/dist/react/index.js.map +4 -4
  45. package/dist/sri.json +20 -15
  46. package/dist/types/activation-runtime.d.ts +91 -0
  47. package/dist/types/analytics-runtime.d.ts +166 -0
  48. package/dist/types/antiflicker.d.ts +9 -3
  49. package/dist/types/assignment-cookie-sync.d.ts +31 -0
  50. package/dist/types/assignment-runtime.d.ts +257 -0
  51. package/dist/types/assignment-store.d.ts +4 -8
  52. package/dist/types/bucket.d.ts +1 -2
  53. package/dist/types/compact-store.d.ts +1 -0
  54. package/dist/types/config-runtime.d.ts +313 -0
  55. package/dist/types/consent-evaluation.d.ts +27 -0
  56. package/dist/types/css.d.ts +5 -3
  57. package/dist/types/debug-loader.d.ts +2 -0
  58. package/dist/types/decide-assignments.d.ts +31 -0
  59. package/dist/types/delivery-timing.d.ts +8 -0
  60. package/dist/types/early-interaction-capture.d.ts +79 -0
  61. package/dist/types/early-reassert.d.ts +32 -0
  62. package/dist/types/edge-runtime.d.ts +11 -0
  63. package/dist/types/editor/api.d.ts +3 -0
  64. package/dist/types/editor/controller.d.ts +3 -1
  65. package/dist/types/editor/publication-result.d.ts +11 -0
  66. package/dist/types/editor/types.d.ts +2 -1
  67. package/dist/types/editor/view-kit.d.ts +1 -1
  68. package/dist/types/endpoint.d.ts +8 -0
  69. package/dist/types/exclusion-groups.d.ts +4 -7
  70. package/dist/types/flags.d.ts +2 -0
  71. package/dist/types/goal-eligibility.d.ts +4 -0
  72. package/dist/types/goals.d.ts +10 -1
  73. package/dist/types/guards.d.ts +7 -7
  74. package/dist/types/handover.d.ts +12 -1
  75. package/dist/types/hash.d.ts +8 -4
  76. package/dist/types/hydration.d.ts +2 -1
  77. package/dist/types/index.d.ts +24 -128
  78. package/dist/types/init-test-helpers.d.ts +48 -0
  79. package/dist/types/inline-bootstrap.d.ts +26 -0
  80. package/dist/types/js.d.ts +3 -1
  81. package/dist/types/money.d.ts +12 -0
  82. package/dist/types/mutate.d.ts +45 -6
  83. package/dist/types/performance.d.ts +2 -0
  84. package/dist/types/persistence-decoders.d.ts +12 -0
  85. package/dist/types/public-api.d.ts +209 -0
  86. package/dist/types/qa-assistant-state.d.ts +34 -0
  87. package/dist/types/react/index.d.ts +28 -3
  88. package/dist/types/reassert-sentinel.d.ts +6 -0
  89. package/dist/types/redirect.d.ts +48 -0
  90. package/dist/types/replay-recorder-entry.d.ts +1 -0
  91. package/dist/types/replay-signal-state.d.ts +6 -0
  92. package/dist/types/replay-signals.d.ts +13 -0
  93. package/dist/types/replay.d.ts +110 -0
  94. package/dist/types/router.d.ts +12 -2
  95. package/dist/types/runtime-state.d.ts +166 -0
  96. package/dist/types/sanitize.d.ts +1 -0
  97. package/dist/types/shadow.d.ts +3 -0
  98. package/dist/types/shopify-cart.d.ts +25 -1
  99. package/dist/types/storefront-vitals.d.ts +24 -0
  100. package/dist/types/targeting-diagnostics.d.ts +1 -0
  101. package/dist/types/targeting.d.ts +16 -2
  102. package/dist/types/track.d.ts +15 -1
  103. package/dist/types/types.d.ts +115 -9
  104. package/dist/types/wait.d.ts +14 -1
  105. package/dist/types/weekday-schedule.d.ts +3 -0
  106. package/package.json +17 -8
  107. package/src/activation-runtime.ts +2737 -0
  108. package/src/analytics-runtime.ts +2175 -0
  109. package/src/antiflicker.test.ts +216 -44
  110. package/src/antiflicker.ts +103 -28
  111. package/src/artifact-concurrency.test.ts +1091 -0
  112. package/src/assignment-cookie-sync.test.ts +202 -0
  113. package/src/assignment-cookie-sync.ts +189 -0
  114. package/src/assignment-runtime.ts +3204 -0
  115. package/src/assignment-store.test.ts +56 -0
  116. package/src/assignment-store.ts +7 -38
  117. package/src/bucket.ts +3 -18
  118. package/src/commerce-analytics-lifecycle.test.ts +75 -15
  119. package/src/commerce-config-lifecycle.test.ts +81 -1
  120. package/src/commerce-price-preserve.test.ts +133 -0
  121. package/src/commerce-price.test.ts +97 -0
  122. package/src/commerce-price.ts +74 -20
  123. package/src/commerce-shipping.test.ts +53 -0
  124. package/src/commerce-shipping.ts +5 -11
  125. package/src/compact-store.ts +15 -0
  126. package/src/config-fetch.test.ts +480 -9
  127. package/src/config-runtime.ts +2070 -0
  128. package/src/consent-evaluation-cookiescript.test.ts +50 -0
  129. package/src/consent-evaluation.ts +138 -0
  130. package/src/css.test.ts +30 -0
  131. package/src/css.ts +120 -6
  132. package/src/cwv.test.ts +60 -77
  133. package/src/debug-loader.test.ts +214 -0
  134. package/src/debug-loader.ts +41 -0
  135. package/src/decide-assignments.test.ts +196 -0
  136. package/src/decide-assignments.ts +204 -0
  137. package/src/delivery-timing.test.ts +104 -0
  138. package/src/delivery-timing.ts +89 -0
  139. package/src/early-interaction-capture.test.ts +451 -0
  140. package/src/early-interaction-capture.ts +230 -0
  141. package/src/early-reassert.test.ts +207 -0
  142. package/src/early-reassert.ts +152 -0
  143. package/src/edge-adoption.test.ts +435 -0
  144. package/src/edge-runtime.ts +30 -0
  145. package/src/editor/api.test.ts +109 -0
  146. package/src/editor/api.ts +34 -3
  147. package/src/editor/controller.test.ts +297 -14
  148. package/src/editor/controller.ts +69 -5
  149. package/src/editor/index.test.ts +2 -0
  150. package/src/editor/index.ts +1 -0
  151. package/src/editor/publication-result.ts +58 -0
  152. package/src/editor/types.ts +10 -1
  153. package/src/editor/view-kit.ts +2 -1
  154. package/src/editor/view.test.ts +108 -0
  155. package/src/editor/view.ts +49 -7
  156. package/src/endpoint.test.ts +15 -0
  157. package/src/endpoint.ts +10 -0
  158. package/src/exclusion-groups.ts +8 -18
  159. package/src/flags.test.ts +88 -1
  160. package/src/flags.ts +29 -29
  161. package/src/global-runtime-reconciler.test.ts +271 -0
  162. package/src/goal-eligibility.test.ts +29 -0
  163. package/src/goal-eligibility.ts +17 -0
  164. package/src/goals.test.ts +144 -1
  165. package/src/goals.ts +97 -18
  166. package/src/guards.test.ts +99 -1
  167. package/src/guards.ts +34 -15
  168. package/src/handover-cache-order.test.ts +6 -3
  169. package/src/handover.test.ts +154 -8
  170. package/src/handover.ts +122 -12
  171. package/src/hash.ts +29 -54
  172. package/src/holdout.test.ts +26 -0
  173. package/src/hydration.test.ts +73 -2
  174. package/src/hydration.ts +18 -9
  175. package/src/index.ts +130 -7287
  176. package/src/init-analytics.test.ts +1694 -0
  177. package/src/init-anti-flicker.test.ts +1211 -0
  178. package/src/init-cart-attributes.test.ts +2003 -0
  179. package/src/init-config-resolution.test.ts +999 -0
  180. package/src/init-consent.test.ts +971 -0
  181. package/src/init-empty.test.ts +11 -5406
  182. package/src/init-integrations.test.ts +846 -0
  183. package/src/init-page-activation.test.ts +5064 -0
  184. package/src/init-qa-loading.test.ts +740 -0
  185. package/src/init-redirects.test.ts +2156 -0
  186. package/src/init-test-helpers.ts +287 -0
  187. package/src/inline-bootstrap.test.ts +184 -0
  188. package/src/inline-bootstrap.ts +73 -0
  189. package/src/js.test.ts +51 -1
  190. package/src/js.ts +86 -2
  191. package/src/money.test.ts +55 -1
  192. package/src/money.ts +104 -2
  193. package/src/money.web-parity.contract.test.ts +85 -0
  194. package/src/mutate.test.ts +474 -10
  195. package/src/mutate.ts +739 -230
  196. package/src/page-trigger.test.ts +218 -8
  197. package/src/performance.ts +10 -0
  198. package/src/persistence-decoders.ts +18 -0
  199. package/src/public-api.ts +1828 -0
  200. package/src/qa-assistant-state.test.ts +249 -3
  201. package/src/qa-assistant-state.ts +146 -6
  202. package/src/qa-assistant-view.test.ts +220 -2
  203. package/src/qa-assistant-view.ts +102 -5
  204. package/src/react/index.test.tsx +37 -0
  205. package/src/react/index.tsx +19 -3
  206. package/src/reassert-sentinel.test.ts +155 -1
  207. package/src/reassert-sentinel.ts +168 -8
  208. package/src/redirect.test.ts +541 -0
  209. package/src/redirect.ts +572 -0
  210. package/src/replay-recorder-entry.ts +115 -0
  211. package/src/replay-signal-state.ts +100 -0
  212. package/src/replay-signals.test.ts +249 -0
  213. package/src/replay-signals.ts +151 -0
  214. package/src/replay.test.ts +764 -0
  215. package/src/replay.ts +514 -0
  216. package/src/router.test.ts +61 -2
  217. package/src/router.ts +50 -12
  218. package/src/runtime-state.ts +507 -0
  219. package/src/runtime.test.ts +174 -7
  220. package/src/runtime.ts +88 -14
  221. package/src/sanitize.test.ts +34 -0
  222. package/src/sanitize.ts +23 -12
  223. package/src/shadow.test.ts +187 -0
  224. package/src/shadow.ts +99 -0
  225. package/src/shopify-cart.test.ts +733 -23
  226. package/src/shopify-cart.ts +402 -49
  227. package/src/storefront-vitals.test.ts +217 -0
  228. package/src/storefront-vitals.ts +206 -0
  229. package/src/surface-signals.ts +6 -0
  230. package/src/targeting-conformance.test.ts +9 -0
  231. package/src/targeting-diagnostics.ts +38 -8
  232. package/src/targeting-parity-corpus.json +559 -0
  233. package/src/targeting-parity-corpus.test.ts +18 -0
  234. package/src/targeting.detailed.test.ts +105 -0
  235. package/src/targeting.test.ts +211 -0
  236. package/src/targeting.ts +88 -207
  237. package/src/track.test.ts +147 -0
  238. package/src/track.ts +125 -26
  239. package/src/types.ts +120 -13
  240. package/src/wait.test.ts +23 -0
  241. package/src/wait.ts +129 -13
  242. package/src/weekday-delivery.test.ts +56 -0
  243. package/src/weekday-schedule-parity-corpus.json +92 -0
  244. package/src/weekday-schedule.test.ts +69 -0
  245. package/src/weekday-schedule.ts +20 -0
package/dist/sri.json CHANGED
@@ -1,27 +1,32 @@
1
1
  {
2
2
  "drip.js": {
3
- "sha384": "sha384-Um2aSsOgGy30oXzHq054QWAey3e6xnQhUpxi6t0DoBLN/vl7L34IluEEDsVDUvy+",
4
- "bytes": 327176,
5
- "gzipBytes": 95380
3
+ "sha384": "sha384-QcviG2yudwcp21+saOzRBTao3iCw9Klvg0E6tn+8WtZSj59rtG+pYDPisLayylr2",
4
+ "bytes": 441764,
5
+ "gzipBytes": 132087
6
6
  },
7
7
  "drip.live.js": {
8
- "sha384": "sha384-dP//F37IbyzbnWQ7W/PYVmQVKp+ByihrHT15tpQFISCO10M2C7GI/tmAu7WRmCwi",
9
- "bytes": 238320,
10
- "gzipBytes": 69619
8
+ "sha384": "sha384-SWfJun6EaNrR6EGydboVMqywr1cWkg6wn68hxAhS9qDRadAm2INiQX6+wp97p0Ih",
9
+ "bytes": 343553,
10
+ "gzipBytes": 102995
11
11
  },
12
12
  "drip.heatmap.js": {
13
- "sha384": "sha384-h6Jx5DkyjsdiU0XzIc/2AlH2Xu4qQppeOY6cfVQxrRzrFkYl6VP/g6NDFTdwGppy",
14
- "bytes": 243757,
15
- "gzipBytes": 71115
13
+ "sha384": "sha384-XJaQw2UA07kiwX/QOolq/OD/VZwp1qS+XKSkVxaz9lgl9RG9tZb4mW3VayRaQ0NB",
14
+ "bytes": 350002,
15
+ "gzipBytes": 104619
16
16
  },
17
17
  "drip.debug.js": {
18
- "sha384": "sha384-eaOKabQEMuuTio8GrmAj5B1sn4qlTqhw3gO+0u9gTKeWBtYmo0LXfTxBN2nEYsEg",
19
- "bytes": 327182,
20
- "gzipBytes": 95383
18
+ "sha384": "sha384-2URcohbse0uBuvenzE65vNNDop+upfeAEI5CoAJEMa9u3wQFwisZ+EKwhPDBK8ov",
19
+ "bytes": 441770,
20
+ "gzipBytes": 132090
21
21
  },
22
22
  "editor.js": {
23
- "sha384": "sha384-WBLo4reMW+GBBHxLB6TpXCsJa2mukHmYMuyqlQpGeMR4OqPSNvNbRgqMXLLDYnr6",
24
- "bytes": 106433,
25
- "gzipBytes": 31127
23
+ "sha384": "sha384-OB10jEeM+Ci1L3cmdhp4MJyqko/f7lM+mcLfShixNRz145ucf9ZJaldhXCs++of5",
24
+ "bytes": 121189,
25
+ "gzipBytes": 36534
26
+ },
27
+ "drip.replay-recorder.js": {
28
+ "sha384": "sha384-oEkvAAksGbMrF+9k82zSulOTcBK2YIeo+2fiv7dYN03Su6dlTK98ikspp7muSbjN",
29
+ "bytes": 191115,
30
+ "gzipBytes": 60056
26
31
  }
27
32
  }
@@ -0,0 +1,91 @@
1
+ import { readBucketingHandover } from "./handover";
2
+ import { redirectPlanForAssignment } from "./redirect";
3
+ import type { VerifiedRedirectCarry } from "./redirect";
4
+ import { syncShopifyCartAttributes, type CartAssignment, type CartAttributeSyncInput } from "./shopify-cart";
5
+ import { Assignment, Experiment, InitConfig } from "./types";
6
+ import { QaAssistantRuntimeSnapshot } from "./runtime-state";
7
+ import { ConfigSource, InitPerfContext, PageRuleReconcileScope } from "./config-runtime";
8
+ export declare function generateQaSessionId(): string;
9
+ export declare const SHOPIFY_ASSIGNMENT_SYNC_DELAYS_MS: number[];
10
+ export declare let shopifyAssignmentSyncTimers: number[];
11
+ export type CommerceOnlyAdoptionState = {
12
+ applying: boolean;
13
+ assignments: Assignment[];
14
+ context: string | null;
15
+ };
16
+ export declare let commercePriceAdoptionState: CommerceOnlyAdoptionState | null;
17
+ export declare function ensureCommercePriceAdoptionState(): CommerceOnlyAdoptionState;
18
+ export declare function currentCommercePriceContext(): string | null;
19
+ export declare function withCommercePriceAssignments(assignments?: Assignment[]): Assignment[];
20
+ export declare function clearShopifyAssignmentSyncTimers(): void;
21
+ export declare function adoptAuthoritativePriceAssignments(assignments: CartAssignment[]): boolean;
22
+ export type OffersAdoptionPlan = {
23
+ configuredOffersExperimentIds: Set<string>;
24
+ replacements: Map<string, Assignment>;
25
+ nextCommercePriceOnlyAssignments: Assignment[];
26
+ };
27
+ export declare function planAuthoritativeOffersAdoption(assignments: CartAssignment[]): OffersAdoptionPlan | null;
28
+ export declare function canAdoptAuthoritativeOffersAssignments(assignments: CartAssignment[]): boolean;
29
+ export declare function adoptAuthoritativeOffersAssignments(assignments: CartAssignment[]): boolean;
30
+ export declare function sdkCartMintAllowed(): boolean;
31
+ export declare function buildSdkCartMintInput(): CartAttributeSyncInput | null;
32
+ export declare function buildScopedCartAttributeSyncInput(): CartAttributeSyncInput | null;
33
+ export declare function buildActiveCartAttributeSyncInput(functionalCartWrite?: boolean): CartAttributeSyncInput | null;
34
+ export declare let sdkCartMintSync: ReturnType<typeof syncShopifyCartAttributes> | null;
35
+ export declare function syncSdkCartMint(): void;
36
+ export declare const removeSdkCartMintTrigger: () => void;
37
+ export declare function onSdkCartMintClick(): void;
38
+ export declare function installSdkCartMintTrigger(): void;
39
+ export type HeadlessCartAuthorizationState = {
40
+ generation: number;
41
+ confirmationPending: boolean;
42
+ pending: {
43
+ generation: number;
44
+ cartToken: string;
45
+ priceAssignments: CartAssignment[];
46
+ shippingAssignments: CartAssignment[];
47
+ offersAssignments: CartAssignment[];
48
+ offersAdoptionAssignments: CartAssignment[] | null;
49
+ } | null;
50
+ };
51
+ export declare let headlessCartAuthorizationState: HeadlessCartAuthorizationState | null;
52
+ export declare function ensureHeadlessCartAuthorizationState(): HeadlessCartAuthorizationState;
53
+ export declare function hasChargeAffectingCommerceAssignment(assignments?: Assignment[]): boolean;
54
+ export declare function hasActiveAuthorizationPlane(plane: "price" | "shipping" | "offers"): boolean;
55
+ export declare const hasActivePriceAuthorizationPlane: () => boolean;
56
+ export declare const hasActiveShippingAuthorizationPlane: () => boolean;
57
+ export declare const hasActiveOffersAuthorizationPlane: () => boolean;
58
+ export declare function hasActiveCommerceAuthorizationPlane(): boolean;
59
+ export declare function requiresCommerceCohortPin(assignments?: Assignment[]): boolean;
60
+ export declare function getChargeAffectingCommerceExperimentIds(assignments?: Assignment[]): Set<string>;
61
+ export declare function isCohortStampedOnCart(): boolean | "pending";
62
+ export declare function syncActiveAssignmentToShopifyCart(options?: {
63
+ chargeCorrectness?: boolean;
64
+ force?: boolean;
65
+ holdoutCartClear?: boolean;
66
+ }): void;
67
+ export declare function configureChargeCorrectnessCartSync(assignments: Assignment[]): void;
68
+ export declare function holdoutConfigEpoch(config: InitConfig | null | undefined): number | undefined;
69
+ export declare function publishAssignmentsToShopify(): void;
70
+ export declare function scheduleShopifyAssignmentSync(): void;
71
+ export declare function variationsAllowed(config: InitConfig): boolean;
72
+ export declare function updateProjectActivationDiagnostics(config: InitConfig): void;
73
+ export declare function trackingAllowed(config: InitConfig): boolean;
74
+ export declare function experimentById(experiments: Experiment[]): Map<string, Experiment>;
75
+ export declare function targetingLifecycleMode(experiment: Experiment | undefined): "reset" | "deactivate" | "force_reset" | "persistent";
76
+ export declare function preservePersistentAssignments(previous: Assignment[], next: Assignment[], experiments: Experiment[]): Assignment[];
77
+ export declare function stopAnalyticsStage(): void;
78
+ export declare function canMintVerifiedRedirectCarry(config: InitConfig): boolean;
79
+ export declare function planRedirectAssignment(config: InitConfig, experiments: Experiment[], assignments: Assignment[]): ReturnType<typeof redirectPlanForAssignment>;
80
+ export declare function navigateForRedirectAssignment(config: InitConfig, experiments: Experiment[], assignments: Assignment[]): boolean;
81
+ export declare const RECONCILE_MAX_DRAINS = 3;
82
+ export declare function reevaluateAssignments(reason: "url" | "dom" | "manual" | "prerequisite", forceReapply?: boolean, skipHoldGate?: boolean, pageRuleScope?: PageRuleReconcileScope): Assignment[];
83
+ export declare function reevaluateAssignmentsPass(reason: "url" | "dom" | "manual" | "prerequisite", forceReapply: boolean, skipHoldGate: boolean, pageRuleScope?: PageRuleReconcileScope): Assignment[];
84
+ export declare function reapplyQaAssistantForceMap(): void;
85
+ export declare function reconcileForcedUnavailable(config: InitConfig): void;
86
+ export declare function __getQaAssistantRuntimeSnapshot(): QaAssistantRuntimeSnapshot;
87
+ export declare function __subscribeQaAssistantRuntime(listener: () => void): () => void;
88
+ export declare function __forceQaAssistantVariation(experimentId: string, variationId: string): void;
89
+ export declare function __resetQaAssistantForce(experimentId?: string): void;
90
+ export declare function clearQaForceFromCurrentUrl(): boolean;
91
+ export declare function initWithExperiments(config: InitConfig, initialExperiments: Experiment[], configSource?: ConfigSource, perfContext?: InitPerfContext, parsedRedirectCarry?: VerifiedRedirectCarry | null, verifiedHandover?: Awaited<ReturnType<typeof readBucketingHandover>>): Assignment[];
@@ -0,0 +1,166 @@
1
+ import { type CartAssignment } from "./shopify-cart";
2
+ import { type GiftSyncOptions } from "./commerce-gift";
3
+ import { ActivationMode, Assignment, Experiment, ExclusionGroupConfig, InitConfig, RuntimeSignalDefinition, ExposureDestinationsSettings, TrackEvent } from "./types";
4
+ import { OrderIdentityPlatform } from "./runtime-state";
5
+ import { PendingPerfEvent, InitPhaseKey, DeliveryHealthStatus, ExposureDestinationDiagnostic, RuntimeLoadDiagnostic } from "./config-runtime";
6
+ export declare function scheduleDeferredRouteReevaluation(): void;
7
+ export declare function installDataLayerTriggers(config: InitConfig): (() => void) | null;
8
+ export declare function experimentsUseSurfaceSignals(experiments: Experiment[]): boolean;
9
+ export declare function rememberExposureDestination(result: ExposureDestinationDiagnostic): void;
10
+ export declare let clarityUpgradeSent: boolean;
11
+ export declare function clarityTagKey(prefix: string, name: string): string;
12
+ export declare function pushExposureToQueue(destination: NonNullable<ExposureDestinationsSettings["queues"]>[number], payload: Record<string, unknown>): void;
13
+ export declare function emitExposureDestinations(assignment: Assignment, config: InitConfig): void;
14
+ export declare function ensureTrackerStarted(config: InitConfig): void;
15
+ export declare function exposureAssignmentKey(assignment: Assignment): string;
16
+ export declare function priceAssignmentAuthorizationKey(assignment: {
17
+ experimentId: string;
18
+ variationId: string;
19
+ assignmentEpoch?: number;
20
+ }): string;
21
+ export declare function isPriceDisplayAssignmentAuthorized(assignment: Assignment): boolean;
22
+ export declare function isShippingDisplayAssignmentAuthorized(assignment: Assignment): boolean;
23
+ export declare function isOffersDisplayAssignmentAuthorized(assignment: Assignment): boolean;
24
+ export declare function giftSyncOptions(extra?: Partial<GiftSyncOptions>): GiftSyncOptions;
25
+ export declare function assignmentHasRenderableArtifacts(assignment: Assignment): boolean;
26
+ export declare function authorizeOffersDisplayAndRender(authorizedAssignments: CartAssignment[]): void;
27
+ export declare function revokeOffersDisplayAuthorization(): void;
28
+ export declare function exposureEligibleAssignments(config: InitConfig): Assignment[];
29
+ export declare function isShippingExposureCartEligible(config: InitConfig, assignment: Assignment): boolean;
30
+ export declare function trackViewedAssignmentsAfterShippingEligibility(): void;
31
+ export declare const EMPTY_TARGETING_ATTRIBUTES: Record<string, unknown>;
32
+ export type TargetingEvaluationPass = {
33
+ attributes?: Record<string, unknown>;
34
+ persistSignals: boolean;
35
+ sourceAttributes: Record<string, unknown>;
36
+ url: string;
37
+ };
38
+ export declare let activeTargetingEvaluationPass: TargetingEvaluationPass | undefined;
39
+ export declare function createTargetingEvaluationPass(sourceAttributes: Record<string, unknown>, url: string, persistSignals: boolean): TargetingEvaluationPass;
40
+ export declare function targetingAttributesForPass(pass: TargetingEvaluationPass | undefined, sourceAttributes: Record<string, unknown>, url: string, persistSignals: boolean): Record<string, unknown>;
41
+ export declare function trackViewedAssignments(config: InitConfig, onlyAssignments?: Assignment[], targetingPass?: TargetingEvaluationPass): void;
42
+ export declare function sameStringSet(left: ReadonlySet<string>, right: ReadonlySet<string>): boolean;
43
+ export declare function setupGoalTracking(experiments: Experiment[], url?: string, activePageIdsForGoals?: Set<string>): void;
44
+ export declare function setupHeatmapTracking(assignments: Assignment[], experiments: Experiment[]): void;
45
+ export declare function cleanupHeatmapTracking(): void;
46
+ export declare function setupReplayTracking(assignments: Assignment[], experiments: Experiment[]): void;
47
+ export declare function cleanupReplayTracking(): void;
48
+ export declare function setupSemanticTracking(config: InitConfig): void;
49
+ export declare function cleanupSemanticTracking(): void;
50
+ export declare function buildExperimentBehaviorEvents(type: "experiment_pageview" | "experiment_page_exit", data?: Record<string, unknown>): TrackEvent[];
51
+ export declare function buildPageExitEvents(type: string, data?: Record<string, unknown>): TrackEvent[];
52
+ export declare function analyticsTrack(type: string, data?: Record<string, unknown>): void;
53
+ export declare function syncLoadDiagnosticsToPerf(): void;
54
+ export declare function updateLoadDiagnostics(patch: Partial<RuntimeLoadDiagnostic> & {
55
+ stage: string;
56
+ }): void;
57
+ export declare function resetLoadDiagnostics(stage?: string): void;
58
+ export declare function queuePerfEvent(data: PendingPerfEvent): void;
59
+ export type RuntimeInstallClaim = {
60
+ installSurface: string;
61
+ sdkVersion: string;
62
+ runtimeProfile: string;
63
+ };
64
+ export declare const RUNTIME_INSTALL_CLAIM_KEY = "__dripRuntimeInstallClaim";
65
+ export declare const RUNTIME_INSTALL_CONFLICT_KEY = "__dripRuntimeInstallConflictEmitted";
66
+ export declare function telemetryLabel(value: unknown, fallback?: string): string;
67
+ export declare function readRuntimeInstallClaim(): RuntimeInstallClaim | null;
68
+ export declare function rememberRuntimeInstallClaim(config: InitConfig): RuntimeInstallClaim;
69
+ export declare function claimInstallConflictEmission(): boolean;
70
+ export declare function sdkAttributionData(config: InitConfig): Record<string, unknown>;
71
+ export declare function sendRuntimeEventNow(config: InitConfig, type: string, data: Record<string, unknown>, userId?: string | null): void;
72
+ export declare function sendRuntimePerfNow(config: InitConfig, data: Record<string, unknown>, userId?: string | null): void;
73
+ export declare function readDripPerf(): Record<string, unknown>;
74
+ export declare function markDripPerf(name: string): number;
75
+ export declare function numberPerf(perf: Record<string, unknown>, name: string): number | undefined;
76
+ export declare function coexistencePerfFields(perf: Record<string, unknown>): Partial<PendingPerfEvent>;
77
+ export declare function buildPerfEvent(config: InitConfig, timing: {
78
+ eventKind: "init" | "route_change";
79
+ assignmentReadyMs: number;
80
+ initTotalMs?: number;
81
+ phases?: Partial<Record<InitPhaseKey, number>>;
82
+ includesConfigFetch?: boolean;
83
+ predecisionMismatches?: number;
84
+ blankScreenMs: number;
85
+ assignmentReadyAt?: number;
86
+ }): PendingPerfEvent;
87
+ export declare function flushPendingPerf(): void;
88
+ export declare function orderIdentityEndpoint(config: InitConfig): string | null;
89
+ export declare const ORDER_EXPOSURE_STORAGE_KEY = "drip_exposures";
90
+ export declare const ORDER_EXPOSURE_MAX_ENTRIES = 50;
91
+ export declare const ORDER_EXPOSURE_TTL_MS: number;
92
+ export type StoredOrderExposure = {
93
+ e: string;
94
+ v: string;
95
+ t: number;
96
+ };
97
+ export declare function pruneStoredOrderExposures(exposures: StoredOrderExposure[], now?: number): StoredOrderExposure[];
98
+ export declare function readStoredOrderExposures(): StoredOrderExposure[];
99
+ export declare function writeStoredOrderExposures(exposures: StoredOrderExposure[]): void;
100
+ export declare function clearIdentityContextCookie(): void;
101
+ export declare function recentIdentityContextExposures(): StoredOrderExposure[];
102
+ export declare function buildIdentityContextCookieValue(visitorId: string, sessionId: string, exposures: StoredOrderExposure[]): string | null;
103
+ export declare function generateSessionId(): string;
104
+ export declare function getIdentityContextSessionId(): string;
105
+ export declare function writeIdentityContextCookie(): StoredOrderExposure[];
106
+ export declare function isOffTargetPersistedAssignment(assignment: Assignment): boolean;
107
+ export declare function restoreRecordedExposureDedup(exposures: StoredOrderExposure[]): void;
108
+ export declare function rememberOrderExposure(assignment: Assignment): void;
109
+ export declare function mergedOrderIdentityAssignments(): Array<{
110
+ experimentId: string;
111
+ variationId: string;
112
+ }>;
113
+ export declare function cleanOrderIdentityText(value: unknown): string | null;
114
+ export declare function resolveOrderIdentityPlatform(): OrderIdentityPlatform;
115
+ export declare function detectOrderIdentity(): {
116
+ platform: OrderIdentityPlatform;
117
+ platformOrderId: string | null;
118
+ orderNumber: string | null;
119
+ } | null;
120
+ export declare function orderIdentityDedupeKey(identity: {
121
+ platform: string;
122
+ platformOrderId: string | null;
123
+ orderNumber: string | null;
124
+ }, assignments: Array<{
125
+ experimentId: string;
126
+ variationId: string;
127
+ }>): string;
128
+ export declare function scheduleOrderIdentityBeacon(config: InitConfig): void;
129
+ export declare function deliveryStatus(expected: number, applied: number, missed: number, isControl: boolean): DeliveryHealthStatus;
130
+ export declare function queueDeliveryHealthEvent(assignment: Assignment, data: {
131
+ expectedMutations: number;
132
+ appliedMutations: number;
133
+ selectorMisses: number;
134
+ applyGeneration: number;
135
+ activationMode: ActivationMode;
136
+ }): void;
137
+ export declare function flushPendingDeliveryHealth(): void;
138
+ export declare function startAnalyticsStage(config: InitConfig, experiments: Experiment[], initialExposureAssignments?: Assignment[], targetingPass?: TargetingEvaluationPass | undefined): void;
139
+ export declare function scheduleAnalyticsStart(config: InitConfig, experiments: Experiment[], targetingPass?: TargetingEvaluationPass): void;
140
+ export declare function startAnalyticsIfReady(): void;
141
+ export declare function getConfigCacheKey(shopId: string, environmentKey?: string): string;
142
+ export declare function storageAvailable(kind: "localStorage" | "sessionStorage"): boolean;
143
+ export declare function getConfigCacheTtlMs(config: InitConfig): number;
144
+ export declare function configuredStoreOrigins(config: Pick<InitConfig, "storeOrigin" | "storeOrigins">): string | string[] | undefined;
145
+ export declare function readCachedExperiments(shopId: string, ttlMs: number, environmentKey?: string): {
146
+ experiments: Experiment[];
147
+ storeOrigin?: string;
148
+ storeOrigins?: string[];
149
+ exclusionGroups?: ExclusionGroupConfig[];
150
+ profile?: InitConfig["profile"];
151
+ runtime?: unknown;
152
+ signals?: RuntimeSignalDefinition[];
153
+ commerce?: InitConfig["commerce"];
154
+ geo?: {
155
+ country?: string;
156
+ };
157
+ holdout?: [enabled?: boolean, pct?: number, configUpdatedAt?: string | null];
158
+ hash: string;
159
+ } | null;
160
+ export declare function hashConfigPayload(experiments: Experiment[], storeOrigin?: string, storeOrigins?: string[], exclusionGroups?: ExclusionGroupConfig[], profile?: InitConfig["profile"], runtime?: unknown, signals?: RuntimeSignalDefinition[], commerce?: InitConfig["commerce"], holdout_v1_enabled?: boolean, holdout_pct?: number, holdout_config_updated_at?: string | null): string;
161
+ export declare function writeCachedExperiments(shopId: string, experiments: Experiment[], storeOrigin?: string, storeOrigins?: string[], exclusionGroups?: ExclusionGroupConfig[], profile?: InitConfig["profile"], runtime?: unknown, signals?: RuntimeSignalDefinition[], commerce?: InitConfig["commerce"], holdout_v1_enabled?: boolean, holdout_pct?: number, holdout_config_updated_at?: string | null, geo?: {
162
+ country?: string;
163
+ }, environmentKey?: string): void;
164
+ export declare function withRuntimeSettings(config: InitConfig, runtime: unknown, profile?: InitConfig["profile"]): InitConfig;
165
+ export declare function serializeForceMap(forceMap: Record<string, string> | null): string;
166
+ export declare function getHashId(exp: Experiment, userId: string, attrs: Record<string, unknown>): string;
@@ -7,8 +7,14 @@ export declare function resolveAntiFlickerCss(mode?: AntiFlickerMode, scopedSele
7
7
  * - "off": no-op.
8
8
  * Scoped mode is a no-op when no selectors are available.
9
9
  *
10
- * Progressive reveal: at 80% of timeout, begins a CSS transition to fade
11
- * content in gradually rather than a sudden flash at timeout expiry.
10
+ * Progressive reveal: at 80% of timeout, scoped mode reveals its selectors.
11
+ * Full mode stays hidden and only pre-arms its opacity transition.
12
12
  */
13
- export declare function applyAntiFlicker(mode?: AntiFlickerMode, timeoutMs?: number, scopedSelectors?: string[], customCss?: string): void;
13
+ export declare function applyAntiFlicker(mode?: AntiFlickerMode, timeoutMs?: number, scopedSelectors?: string[], customCss?: string, bootedTooLate?: boolean): boolean;
14
+ /**
15
+ * Runtime-loaded SDKs must not introduce a hiding barrier after the browser
16
+ * has likely painted. Inline edge bootstrap callers deliberately do not opt
17
+ * into this guard because their barrier is installed synchronously pre-paint.
18
+ */
19
+ export declare function bootedTooLateForAntiFlicker(): boolean;
14
20
  export declare function removeAntiFlicker(): void;
@@ -0,0 +1,31 @@
1
+ export declare const ASSIGNMENT_SYNC_COOKIE_NAME = "drip_assignment_sync_v1";
2
+ export declare const ASSIGNMENT_SYNC_COOKIE_MAX_AGE_SECONDS = 7200;
3
+ export declare const ASSIGNMENT_SYNC_COOKIE_MAX_BYTES = 3800;
4
+ export type AssignmentSyncPayload = {
5
+ visitorId: string | null;
6
+ sessionId: string;
7
+ cartToken?: string;
8
+ qaMode: boolean;
9
+ qaSessionId: string;
10
+ cohort?: "holdout" | "active";
11
+ holdoutConfigEpoch?: number;
12
+ assignments: Array<{
13
+ experimentId: string;
14
+ variationId: string;
15
+ assignmentEpoch?: number;
16
+ }>;
17
+ };
18
+ export type AssignmentSyncCookieWriteResult = {
19
+ written: boolean;
20
+ assignmentCount: number;
21
+ truncatedAssignmentCount: number;
22
+ encodedBytes: number;
23
+ domain?: string;
24
+ reason?: "document_unavailable" | "visitor_id_missing" | "cookie_too_large" | "cookie_write_failed";
25
+ };
26
+ type CookieDocument = Pick<Document, "cookie">;
27
+ export declare function encodeStoredAssignment(data: AssignmentSyncPayload): string;
28
+ export declare function discoverRegistrableDomain(hostname: string, documentRef: CookieDocument): string | undefined;
29
+ export declare function writeAssignmentSyncCookie(payload: AssignmentSyncPayload): AssignmentSyncCookieWriteResult;
30
+ export declare function clearAssignmentSyncCookie(): void;
31
+ export {};
@@ -0,0 +1,257 @@
1
+ import { findPersistedVariation, prunePersistedAssignments } from "./assignment-store";
2
+ import { type ExclusionGroupDecision } from "./exclusion-groups";
3
+ import type { CompactGroupSelections } from "./persistence-decoders";
4
+ import { ActivationMode, Assignment, ActivationGateDiagnostic, ConditionDiagnostic, Experiment, ExperimentActivationDiagnostic, ExclusionGroupConfig, PageTargetingRule, PageActivationDiagnostic, PageDeactivationMode, SnippetCriticalMutation, SnippetCriticalMutationPlanItem, SnippetDeliveryUrlRule, Mutation } from "./types";
5
+ import { PageActivationRuntimeState } from "./runtime-state";
6
+ import { PageDetectorMode, PageRuleReconcileScope } from "./config-runtime";
7
+ import { TargetingEvaluationPass } from "./analytics-runtime";
8
+ export type PersistedAssignmentMap = ReturnType<typeof prunePersistedAssignments>;
9
+ export declare const GLOBAL_PAGE_PREFIX = "\u0001experiment:";
10
+ export declare const appliedAssignmentsByKey: Map<string, Assignment>;
11
+ export type ArtifactId = string & {
12
+ readonly __artifactId: unique symbol;
13
+ };
14
+ export declare const invalidatedArtifactIds: Set<ArtifactId>;
15
+ export declare const artifactEpochs: Map<string, number>;
16
+ export declare let applyPassEpoch: number;
17
+ export declare function artifactEpochCurrent(ownerKeys: readonly string[], epoch: number): boolean;
18
+ export type PageActivationTransition = {
19
+ pageId: string;
20
+ mode: PageDeactivationMode;
21
+ previousActive: boolean;
22
+ active: boolean;
23
+ teardown: boolean;
24
+ reapply: boolean;
25
+ };
26
+ export declare function normalizePageDeactivationMode(rule: PageTargetingRule): PageDeactivationMode;
27
+ export declare function effectiveDeactivationMode(experiment: Experiment, rule: PageTargetingRule): PageDeactivationMode;
28
+ export declare function includedPageRules(experiment: Experiment | undefined): PageTargetingRule[];
29
+ export declare function currentPageMatchContext(url: string, targetingPass?: TargetingEvaluationPass): {
30
+ url: string;
31
+ attributes: Record<string, unknown>;
32
+ };
33
+ export declare function pageActivationDiagnosticRows(options?: {
34
+ includePageNames?: boolean;
35
+ }): PageActivationDiagnostic[];
36
+ export declare function reconcilePageActivation(experiments: Experiment[], url: string, options?: {
37
+ previous?: ReadonlyMap<string, PageActivationRuntimeState>;
38
+ persistedAssignments?: PersistedAssignmentMap;
39
+ targetingPass?: TargetingEvaluationPass;
40
+ pageRuleScope?: PageRuleReconcileScope;
41
+ }): {
42
+ transitions: PageActivationTransition[];
43
+ next: Map<string, PageActivationRuntimeState>;
44
+ pollRules: PageTargetingRule[];
45
+ };
46
+ export declare function cancelPageRulePoll(pageId: string): void;
47
+ export declare function cancelAllPageRulePolls(): void;
48
+ export declare function pageRulePollSettings(): {
49
+ intervalMs: number;
50
+ windowMs: number;
51
+ };
52
+ export declare function deactivationModeForTriggeredRule(rule: PageTargetingRule): PageDeactivationMode;
53
+ export declare function reconcileTriggeredPageMatch(rule: PageTargetingRule, matched: boolean, detector?: PageDetectorMode, options?: {
54
+ elapsedMs?: number;
55
+ fromPoll?: boolean;
56
+ pollAttempts?: number;
57
+ }): boolean;
58
+ export declare function startPageRulePoll(rule: PageTargetingRule, detector?: PageDetectorMode): void;
59
+ export declare function firePageDetector(detector: PageDetectorMode, resolvedUrl: string): Set<string>;
60
+ export declare function activePageIds(): Set<string>;
61
+ export declare function experimentHasActivePage(experiment: Experiment | undefined): boolean;
62
+ export declare function syncAssignmentPageActive(assignments: Assignment[], experiments: Experiment[]): Assignment[];
63
+ export declare function assignmentPageIds(assignment: Assignment): string[];
64
+ export declare function stableArtifactJson(value: unknown): string;
65
+ export declare function artifactContentHash(assignment: Assignment): string;
66
+ export declare function baseArtifactApplicationKey(assignment: Assignment): ArtifactId;
67
+ export declare function artifactApplicationKey(assignment: Assignment, pageId: string): string;
68
+ export declare function artifactIdFromApplicationKey(applicationKey: string): ArtifactId;
69
+ export declare function assignmentRuntimeKeys(assignments: Assignment[]): Set<string>;
70
+ export declare function artifactOwnerId(applicationKey: string): string;
71
+ export declare function redirectCarryAssignmentKey(experimentId: string, variationId: string, epoch: number): string;
72
+ export declare function shouldPreserveOffTargetRedirectAssignment(assignment: Assignment): boolean;
73
+ export declare function isAssignmentArtifactInactive(assignment: Assignment): boolean;
74
+ export declare function renderable(assignment: Assignment): boolean;
75
+ export declare function exposable(assignment: Assignment): boolean;
76
+ export declare function attributable(assignment: Assignment): boolean;
77
+ export declare function recordAttributableAssignments(assignments: Assignment[]): void;
78
+ export declare function attributionLedgerAssignments(): Assignment[];
79
+ export declare function artifactRenderableAssignments(assignments: Assignment[]): Assignment[];
80
+ export declare function activeRenderableAssignments(): Assignment[];
81
+ export declare function chargeAffectingAssignments(): Assignment[];
82
+ export declare function loadPersistedAssignments(experiments: Experiment[]): PersistedAssignmentMap | undefined;
83
+ export declare function buildPersistedAssignmentResult(experiment: Experiment, persisted: NonNullable<ReturnType<typeof findPersistedVariation>>, hashId: string, gates: ActivationGateDiagnostic[], targetingConditions: ConditionDiagnostic[], url: string, reason: "persisted_assignment" | "persisted_assignment_off_target"): {
84
+ assignment: Assignment;
85
+ diagnostic: ExperimentActivationDiagnostic;
86
+ };
87
+ export declare function withAssignmentEpochData(data: Record<string, unknown> | undefined, experimentId?: string, variationId?: string): Record<string, unknown> | undefined;
88
+ export declare function usesStickyAssignmentPersistence(experiment: Experiment): boolean;
89
+ export declare function persistActiveExperimentAssignments(experiments: Experiment[]): void;
90
+ export declare function experimentDiagnostic(experiment: Experiment, gates: ActivationGateDiagnostic[], assignment: Assignment | null, reason?: string, forced?: boolean, targetingConditions?: ConditionDiagnostic[]): ExperimentActivationDiagnostic;
91
+ export declare function evaluateExperimentDetailed(experiment: Experiment, ctx: {
92
+ url: string;
93
+ attributes: Record<string, unknown>;
94
+ userId: string;
95
+ storeOrigin?: string | string[];
96
+ persistedAssignments?: PersistedAssignmentMap;
97
+ holdout?: {
98
+ enabled?: boolean;
99
+ percentage?: number;
100
+ };
101
+ }): {
102
+ assignment: Assignment | null;
103
+ diagnostic: ExperimentActivationDiagnostic;
104
+ };
105
+ export declare function evaluateExperiment(experiment: Experiment, ctx: {
106
+ url: string;
107
+ attributes: Record<string, unknown>;
108
+ userId: string;
109
+ storeOrigin?: string | string[];
110
+ persistedAssignments?: PersistedAssignmentMap;
111
+ }): Assignment | null;
112
+ export declare function stoppedPersonalizationDiagnostic(diagnostic: ExperimentActivationDiagnostic): ExperimentActivationDiagnostic;
113
+ export declare function enforcePersonalizationStopAfterMatch(assignments: Assignment[], diagnostics?: ExperimentActivationDiagnostic[]): {
114
+ assignments: Assignment[];
115
+ diagnostics?: ExperimentActivationDiagnostic[];
116
+ };
117
+ export declare function excludedByGroupDiagnostic(diagnostic: ExperimentActivationDiagnostic, decision: ExclusionGroupDecision): ExperimentActivationDiagnostic;
118
+ export declare function keptByGroupDiagnostic(diagnostic: ExperimentActivationDiagnostic, reason: "exclusion_group_no_overlap" | "exclusion_group_overlap_winner" | "exclusion_group_sticky_winner", detail: {
119
+ groupId: string;
120
+ conflictingExperimentIds: string[];
121
+ }): ExperimentActivationDiagnostic;
122
+ export declare function applyExclusionAndPersonalization(assignments: Assignment[], context: {
123
+ userId: string;
124
+ exclusionGroups?: ExclusionGroupConfig[];
125
+ storedGroupSelections?: CompactGroupSelections;
126
+ }, diagnostics?: ExperimentActivationDiagnostic[]): {
127
+ assignments: Assignment[];
128
+ diagnostics?: ExperimentActivationDiagnostic[];
129
+ decisions: ExclusionGroupDecision[];
130
+ };
131
+ export declare function evaluate(experiments: Experiment[], context?: {
132
+ url?: string;
133
+ attributes?: Record<string, unknown>;
134
+ userId?: string;
135
+ persistSignals?: boolean;
136
+ storeOrigin?: string | string[];
137
+ exclusionGroups?: ExclusionGroupConfig[];
138
+ }): Assignment[];
139
+ export declare function evaluateWithDiagnostics(experiments: Experiment[], context?: {
140
+ url?: string;
141
+ attributes?: Record<string, unknown>;
142
+ userId?: string;
143
+ persistSignals?: boolean;
144
+ storeOrigin?: string | string[];
145
+ exclusionGroups?: ExclusionGroupConfig[];
146
+ storedGroupSelections?: CompactGroupSelections;
147
+ persistedAssignments?: PersistedAssignmentMap | null;
148
+ holdout?: {
149
+ enabled?: boolean;
150
+ percentage?: number;
151
+ };
152
+ targetingPass?: TargetingEvaluationPass;
153
+ }): {
154
+ assignments: Assignment[];
155
+ diagnostics: ExperimentActivationDiagnostic[];
156
+ };
157
+ export declare function evaluateEdgeRuntimeAssignments(experiments: Experiment[], context: {
158
+ url: string;
159
+ attributes: Record<string, unknown>;
160
+ userId: string;
161
+ }, eligibleAssignments?: Assignment[], eligibleDiagnostics?: ExperimentActivationDiagnostic[]): {
162
+ assignments: Assignment[];
163
+ diagnostics: ExperimentActivationDiagnostic[];
164
+ experimentIds: Map<string, import("./edge-runtime").EdgeRuntimeAssignment>;
165
+ } | null;
166
+ export declare function resolveCombinedEdgeEvaluation(edgeAssignments: Assignment[], fallbackAssignments: Assignment[], diagnostics: ExperimentActivationDiagnostic[], context: {
167
+ userId: string;
168
+ exclusionGroups?: ExclusionGroupConfig[];
169
+ }): {
170
+ assignments: Assignment[];
171
+ diagnostics: ExperimentActivationDiagnostic[];
172
+ };
173
+ export declare function escapeDeliveryRegex(value: string): string;
174
+ export declare function matchSimpleDeliveryPattern(pattern: string, url: string): boolean;
175
+ export declare function matchRegexDeliveryPattern(pattern: string, url: string): boolean;
176
+ export declare function matchesDeliveryUrlRules(rules: SnippetDeliveryUrlRule[] | undefined, url: string): boolean;
177
+ export declare function expandCriticalMutation(raw: SnippetCriticalMutation): Mutation | null;
178
+ export declare function buildCriticalPathAssignments(experiments: Experiment[], plan: SnippetCriticalMutationPlanItem[] | undefined, ctx: {
179
+ url: string;
180
+ attributes: Record<string, unknown>;
181
+ userId: string;
182
+ }): {
183
+ assignments: Assignment[];
184
+ plannedExperimentIds: Set<string>;
185
+ skippedDiagnostics: ExperimentActivationDiagnostic[];
186
+ };
187
+ export declare function runPostRevealReassert(): void;
188
+ export declare function schedulePostRevealReassert(): void;
189
+ export declare function revealExperimentContent(options?: {
190
+ postRevealReassert?: boolean;
191
+ }): void;
192
+ export declare function applyAssignmentCode(assignment: Assignment, applyEpoch: number, appliedExperimentCode: Set<string>, ownerKeys: readonly string[], ownerIds: readonly string[], runCustomJs?: boolean, onCustomJsRun?: () => void): void;
193
+ export declare function recordAppliedAssignment(assignment: Assignment, pageIds: readonly string[]): string[];
194
+ export declare function appliedOwnerKeysForAssignment(assignment: Assignment): string[];
195
+ export declare function applyAssignments(assignments: Assignment[], activationMode: ActivationMode, options?: {
196
+ pageIds?: ReadonlySet<string>;
197
+ goalUrl?: string;
198
+ }): void;
199
+ export declare function reassertAssignmentMutations(assignments: Assignment[]): void;
200
+ export type TeardownPage = {
201
+ pageId: string;
202
+ mode: PageDeactivationMode;
203
+ };
204
+ export type TeardownRuntimeOptions = {
205
+ goalUrl?: string;
206
+ skipCartSync?: boolean;
207
+ };
208
+ export type TeardownSelection = Map<string, {
209
+ artifactIds: Set<ArtifactId>;
210
+ mode: PageDeactivationMode;
211
+ }>;
212
+ export declare function runAssignmentResetJs(assignments: Iterable<Assignment>): void;
213
+ export declare let pendingCommercePriceResolve: (() => void) | null;
214
+ export declare function resolveCommercePricePending(): void;
215
+ export declare function unwireGoals(): void;
216
+ export declare function goalWiringEligible(): boolean;
217
+ export declare function reconcileGoals(url?: string): void;
218
+ export declare function reconcileHarnessPolling(): void;
219
+ export declare function reconcileCommercePrice(): void;
220
+ export declare function reconcileCommerceShipping(): void;
221
+ export declare function reconcileCartSync(): void;
222
+ export declare function syncGlobalRuntimes(options?: {
223
+ goalUrl?: string;
224
+ skipCartSync?: boolean;
225
+ }): void;
226
+ export declare function configuredPageDeactivationModes(): Map<string, PageDeactivationMode>;
227
+ export declare function allAppliedPagesWithModes(): TeardownPage[];
228
+ export declare function rollbackArtifactOwner(pageId: string, artifactId: ArtifactId): void;
229
+ export declare function unregisterArtifactOwner(ownerKey: string): void;
230
+ export declare function executeTeardownTransaction(selection: TeardownSelection, runtimeOptions?: TeardownRuntimeOptions): void;
231
+ export declare function teardownTransaction(pages: TeardownPage[], runtimeOptions?: TeardownRuntimeOptions): void;
232
+ export declare function teardownArtifactsTransaction(artifactIds: ReadonlySet<ArtifactId>, runtimeOptions?: TeardownRuntimeOptions): void;
233
+ export type DesiredArtifact = {
234
+ id: ArtifactId;
235
+ assignment: Assignment;
236
+ ownerPageIds: Set<string>;
237
+ };
238
+ export type LiveArtifact = DesiredArtifact & {
239
+ ownerKeys: Set<string>;
240
+ };
241
+ export type ArtifactReconcileResult = {
242
+ applied: number;
243
+ ownerUpdates: number;
244
+ removed: number;
245
+ replayed: number;
246
+ };
247
+ export declare function desiredArtifactSet(assignments: Assignment[]): Map<ArtifactId, DesiredArtifact>;
248
+ export declare function liveArtifactInventory(): Map<ArtifactId, LiveArtifact>;
249
+ export declare function removeArtifactOwner(artifactId: ArtifactId, pageId: string): void;
250
+ export declare function registerDesiredOwners(desired: DesiredArtifact, live: LiveArtifact): {
251
+ ownerKeys: string[];
252
+ added: boolean;
253
+ epoch: number;
254
+ };
255
+ export declare function replayDesiredArtifacts(artifacts: DesiredArtifact[]): void;
256
+ export declare function invalidateLiveArtifactsForReplay(): void;
257
+ export declare function reconcileArtifacts(desired: Map<ArtifactId, DesiredArtifact>, goalUrl?: string): ArtifactReconcileResult;
@@ -1,13 +1,10 @@
1
1
  import type { Experiment, Variation } from "./types";
2
- export type PersistedAssignmentRecord = {
3
- variationId: string;
4
- epoch: number;
5
- assignedAt: number;
6
- };
2
+ import { type PersistedAssignmentRecord } from "./persistence-decoders";
3
+ export { decodePersistedAssignments, type PersistedAssignmentRecord } from "./persistence-decoders";
7
4
  type CompactRecord = [string, number, number];
8
5
  type CompactStore = Record<string, CompactRecord>;
9
6
  declare function assignmentEpoch(experiment: Experiment): number;
10
- declare function parseStore(raw: string | null): CompactStore;
7
+ export declare function decodeCompactAssignmentStore(raw: string | null): CompactStore;
11
8
  declare function serializeStore(store: CompactStore, maxEntries?: number): string;
12
9
  export declare function readPersistedAssignments(): Record<string, PersistedAssignmentRecord>;
13
10
  export declare function writePersistedAssignments(records: Record<string, PersistedAssignmentRecord>): void;
@@ -24,7 +21,6 @@ export declare const __assignmentStoreInternals: {
24
21
  STORAGE_KEY: string;
25
22
  COOKIE_NAME: string;
26
23
  assignmentEpoch: typeof assignmentEpoch;
27
- parseStore: typeof parseStore;
24
+ parseStore: typeof decodeCompactAssignmentStore;
28
25
  serializeStore: typeof serializeStore;
29
26
  };
30
- export {};
@@ -1,2 +1 @@
1
- export declare function inTrafficAllocation(hashValue: number, allocation?: number): boolean;
2
- export declare function chooseVariation(hashValue: number, weights: number[]): number;
1
+ export { chooseVariation, inTrafficAllocation } from "@drip/shared-runtime/bucketing";
@@ -0,0 +1 @@
1
+ export declare function decodeCompactStore(raw: string | null, width: 2 | 3): Record<string, unknown[]>;