@delmaredigital/payload-experiments 0.0.0-stage → 0.1.0-rc.6

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 (466) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +590 -2
  3. package/dist/access.d.ts +1 -0
  4. package/dist/access.js +2 -0
  5. package/dist/admin/AllocationField.d.ts +2 -0
  6. package/dist/admin/AllocationField.js +80 -0
  7. package/dist/admin/FlagPointSelect.d.ts +2 -0
  8. package/dist/admin/FlagPointSelect.js +54 -0
  9. package/dist/admin/LayerUsage.d.ts +2 -0
  10. package/dist/admin/LayerUsage.js +24 -0
  11. package/dist/admin/LockedFieldNotice.d.ts +2 -0
  12. package/dist/admin/LockedFieldNotice.js +26 -0
  13. package/dist/admin/MetricSourceSelect.d.ts +2 -0
  14. package/dist/admin/MetricSourceSelect.js +32 -0
  15. package/dist/admin/PhaseHistory.d.ts +2 -0
  16. package/dist/admin/PhaseHistory.js +76 -0
  17. package/dist/admin/PreviewLinks.d.ts +11 -0
  18. package/dist/admin/PreviewLinks.js +69 -0
  19. package/dist/admin/StatusCell.d.ts +3 -0
  20. package/dist/admin/StatusCell.js +19 -0
  21. package/dist/admin/SummaryCell.d.ts +2 -0
  22. package/dist/admin/SummaryCell.js +32 -0
  23. package/dist/admin/actions/AddMetricDialog.d.ts +6 -0
  24. package/dist/admin/actions/AddMetricDialog.js +138 -0
  25. package/dist/admin/actions/AllocateDialog.d.ts +6 -0
  26. package/dist/admin/actions/AllocateDialog.js +81 -0
  27. package/dist/admin/actions/ConfirmDialog.d.ts +14 -0
  28. package/dist/admin/actions/ConfirmDialog.js +192 -0
  29. package/dist/admin/actions/DecideDialog.d.ts +7 -0
  30. package/dist/admin/actions/DecideDialog.js +173 -0
  31. package/dist/admin/actions/ExperimentActions.d.ts +3 -0
  32. package/dist/admin/actions/ExperimentActions.js +110 -0
  33. package/dist/admin/actions/MakeContentResult.d.ts +6 -0
  34. package/dist/admin/actions/MakeContentResult.js +50 -0
  35. package/dist/admin/actions/actions.model.d.ts +37 -0
  36. package/dist/admin/actions/actions.model.js +71 -0
  37. package/dist/admin/actions/decide.model.d.ts +21 -0
  38. package/dist/admin/actions/decide.model.js +38 -0
  39. package/dist/admin/allocation.model.d.ts +20 -0
  40. package/dist/admin/allocation.model.js +38 -0
  41. package/dist/admin/api.d.ts +32 -0
  42. package/dist/admin/api.js +95 -0
  43. package/dist/admin/armSelect/ArmSelectField.d.ts +2 -0
  44. package/dist/admin/armSelect/ArmSelectField.js +185 -0
  45. package/dist/admin/armSelect/armSelect.model.d.ts +30 -0
  46. package/dist/admin/armSelect/armSelect.model.js +20 -0
  47. package/dist/admin/arms/ArmsField.d.ts +2 -0
  48. package/dist/admin/arms/ArmsField.js +310 -0
  49. package/dist/admin/arms/ParamsEditor.d.ts +16 -0
  50. package/dist/admin/arms/ParamsEditor.js +79 -0
  51. package/dist/admin/arms/arms.model.d.ts +21 -0
  52. package/dist/admin/arms/arms.model.js +153 -0
  53. package/dist/admin/arms/pageTarget.model.d.ts +4 -0
  54. package/dist/admin/arms/pageTarget.model.js +19 -0
  55. package/dist/admin/arms/params.model.d.ts +7 -0
  56. package/dist/admin/arms/params.model.js +35 -0
  57. package/dist/admin/copy/actions.d.ts +38 -0
  58. package/dist/admin/copy/actions.js +38 -0
  59. package/dist/admin/copy/armSelect.d.ts +11 -0
  60. package/dist/admin/copy/armSelect.js +11 -0
  61. package/dist/admin/copy/arms.d.ts +37 -0
  62. package/dist/admin/copy/arms.js +47 -0
  63. package/dist/admin/copy/common.d.ts +20 -0
  64. package/dist/admin/copy/common.js +27 -0
  65. package/dist/admin/copy/history.d.ts +9 -0
  66. package/dist/admin/copy/history.js +9 -0
  67. package/dist/admin/copy/metrics.d.ts +9 -0
  68. package/dist/admin/copy/metrics.js +9 -0
  69. package/dist/admin/copy/results.d.ts +78 -0
  70. package/dist/admin/copy/results.js +81 -0
  71. package/dist/admin/copy/review.d.ts +33 -0
  72. package/dist/admin/copy/review.js +127 -0
  73. package/dist/admin/copy/status.d.ts +8 -0
  74. package/dist/admin/copy/status.js +8 -0
  75. package/dist/admin/copy/tabs.d.ts +7 -0
  76. package/dist/admin/copy/tabs.js +7 -0
  77. package/dist/admin/copy/who.d.ts +36 -0
  78. package/dist/admin/copy/who.js +36 -0
  79. package/dist/admin/labels.d.ts +45 -0
  80. package/dist/admin/labels.js +53 -0
  81. package/dist/admin/layerUsage.model.d.ts +15 -0
  82. package/dist/admin/layerUsage.model.js +18 -0
  83. package/dist/admin/lockedNotice.model.d.ts +3 -0
  84. package/dist/admin/lockedNotice.model.js +18 -0
  85. package/dist/admin/metricSource.model.d.ts +7 -0
  86. package/dist/admin/metricSource.model.js +11 -0
  87. package/dist/admin/paths.d.ts +16 -0
  88. package/dist/admin/paths.js +16 -0
  89. package/dist/admin/permissions.model.d.ts +10 -0
  90. package/dist/admin/permissions.model.js +4 -0
  91. package/dist/admin/phaseHistory.model.d.ts +19 -0
  92. package/dist/admin/phaseHistory.model.js +19 -0
  93. package/dist/admin/reload.d.ts +1 -0
  94. package/dist/admin/reload.js +1 -0
  95. package/dist/admin/results/ArmTable.d.ts +8 -0
  96. package/dist/admin/results/ArmTable.js +112 -0
  97. package/dist/admin/results/CappedCell.d.ts +4 -0
  98. package/dist/admin/results/CappedCell.js +24 -0
  99. package/dist/admin/results/CiChart.d.ts +10 -0
  100. package/dist/admin/results/CiChart.js +178 -0
  101. package/dist/admin/results/DataQualityPanel.d.ts +4 -0
  102. package/dist/admin/results/DataQualityPanel.js +40 -0
  103. package/dist/admin/results/ResultsView.d.ts +3 -0
  104. package/dist/admin/results/ResultsView.js +312 -0
  105. package/dist/admin/results/VerdictCard.d.ts +9 -0
  106. package/dist/admin/results/VerdictCard.js +49 -0
  107. package/dist/admin/results/chart.model.d.ts +32 -0
  108. package/dist/admin/results/chart.model.js +52 -0
  109. package/dist/admin/results/format.d.ts +10 -0
  110. package/dist/admin/results/format.js +55 -0
  111. package/dist/admin/results/results.model.d.ts +105 -0
  112. package/dist/admin/results/results.model.js +175 -0
  113. package/dist/admin/review/ReviewPanel.d.ts +2 -0
  114. package/dist/admin/review/ReviewPanel.js +268 -0
  115. package/dist/admin/review/review.model.d.ts +31 -0
  116. package/dist/admin/review/review.model.js +40 -0
  117. package/dist/admin/status.model.d.ts +16 -0
  118. package/dist/admin/status.model.js +17 -0
  119. package/dist/admin/styles.css +10 -0
  120. package/dist/admin/styles.d.ts +1 -0
  121. package/dist/admin/styles.js +2 -0
  122. package/dist/admin/summaryBatcher.d.ts +8 -0
  123. package/dist/admin/summaryBatcher.js +33 -0
  124. package/dist/admin/targeting/TargetingAttributeField.d.ts +2 -0
  125. package/dist/admin/targeting/TargetingAttributeField.js +31 -0
  126. package/dist/admin/targeting/TargetingOpField.d.ts +2 -0
  127. package/dist/admin/targeting/TargetingOpField.js +45 -0
  128. package/dist/admin/targeting/TargetingValueField.d.ts +2 -0
  129. package/dist/admin/targeting/TargetingValueField.js +142 -0
  130. package/dist/admin/targeting/targeting.model.d.ts +18 -0
  131. package/dist/admin/targeting/targeting.model.js +48 -0
  132. package/dist/admin/useApi.d.ts +20 -0
  133. package/dist/admin/useApi.js +10 -0
  134. package/dist/admin/useLayerUsage.d.ts +15 -0
  135. package/dist/admin/useLayerUsage.js +92 -0
  136. package/dist/client/ExperimentPageview.d.ts +1 -0
  137. package/dist/client/ExperimentPageview.js +27 -0
  138. package/dist/client/ExperimentsProvider.d.ts +6 -0
  139. package/dist/client/ExperimentsProvider.js +22 -0
  140. package/dist/client/ViewportExposure.d.ts +9 -0
  141. package/dist/client/ViewportExposure.js +69 -0
  142. package/dist/client/beacon.d.ts +17 -0
  143. package/dist/client/beacon.js +71 -0
  144. package/dist/client/context.d.ts +2 -0
  145. package/dist/client/context.js +2 -0
  146. package/dist/client/idempotency.d.ts +2 -0
  147. package/dist/client/idempotency.js +13 -0
  148. package/dist/client/trackConversionBeacon.d.ts +3 -0
  149. package/dist/client/trackConversionBeacon.js +16 -0
  150. package/dist/client/useExperiment.d.ts +5 -0
  151. package/dist/client/useExperiment.js +27 -0
  152. package/dist/client/useFlagPoint.d.ts +9 -0
  153. package/dist/client/useFlagPoint.js +32 -0
  154. package/dist/collections/access.d.ts +21 -0
  155. package/dist/collections/access.js +25 -0
  156. package/dist/collections/events.d.ts +3 -0
  157. package/dist/collections/events.js +117 -0
  158. package/dist/collections/experiments/armInvariants.d.ts +12 -0
  159. package/dist/collections/experiments/armInvariants.js +89 -0
  160. package/dist/collections/experiments/config.d.ts +3 -0
  161. package/dist/collections/experiments/config.js +574 -0
  162. package/dist/collections/experiments/createDefaults.d.ts +2 -0
  163. package/dist/collections/experiments/createDefaults.js +7 -0
  164. package/dist/collections/experiments/deleteGuard.d.ts +3 -0
  165. package/dist/collections/experiments/deleteGuard.js +8 -0
  166. package/dist/collections/experiments/editability.d.ts +4 -0
  167. package/dist/collections/experiments/editability.js +35 -0
  168. package/dist/collections/experiments/flagControlParams.d.ts +2 -0
  169. package/dist/collections/experiments/flagControlParams.js +32 -0
  170. package/dist/collections/experiments/lockHook.d.ts +2 -0
  171. package/dist/collections/experiments/lockHook.js +134 -0
  172. package/dist/collections/identities.d.ts +3 -0
  173. package/dist/collections/identities.js +30 -0
  174. package/dist/collections/index.d.ts +6 -0
  175. package/dist/collections/index.js +24 -0
  176. package/dist/collections/layers.d.ts +3 -0
  177. package/dist/collections/layers.js +77 -0
  178. package/dist/collections/metrics.d.ts +3 -0
  179. package/dist/collections/metrics.js +115 -0
  180. package/dist/collections/phases.d.ts +3 -0
  181. package/dist/collections/phases.js +59 -0
  182. package/dist/collections/serialize.d.ts +5 -0
  183. package/dist/collections/serialize.js +40 -0
  184. package/dist/collections/snapshots.d.ts +3 -0
  185. package/dist/collections/snapshots.js +47 -0
  186. package/dist/constants.d.ts +7 -0
  187. package/dist/constants.js +7 -0
  188. package/dist/db/adapter.d.ts +3 -0
  189. package/dist/db/adapter.js +9 -0
  190. package/dist/db/appends.d.ts +58 -0
  191. package/dist/db/appends.js +116 -0
  192. package/dist/db/delete.d.ts +17 -0
  193. package/dist/db/delete.js +35 -0
  194. package/dist/db/erase.d.ts +12 -0
  195. package/dist/db/erase.js +55 -0
  196. package/dist/db/events.d.ts +21 -0
  197. package/dist/db/events.js +100 -0
  198. package/dist/db/executor.d.ts +10 -0
  199. package/dist/db/executor.js +37 -0
  200. package/dist/db/identities.d.ts +11 -0
  201. package/dist/db/identities.js +29 -0
  202. package/dist/db/locks.d.ts +15 -0
  203. package/dist/db/locks.js +23 -0
  204. package/dist/db/manifest.d.ts +8 -0
  205. package/dist/db/manifest.js +8 -0
  206. package/dist/db/names.d.ts +271 -0
  207. package/dist/db/names.js +270 -0
  208. package/dist/db/pgExecutor.d.ts +41 -0
  209. package/dist/db/pgExecutor.js +250 -0
  210. package/dist/db/results.d.ts +53 -0
  211. package/dist/db/results.js +103 -0
  212. package/dist/db/slices.d.ts +18 -0
  213. package/dist/db/slices.js +51 -0
  214. package/dist/db/snapshots.d.ts +47 -0
  215. package/dist/db/snapshots.js +89 -0
  216. package/dist/db/sql.d.ts +5 -0
  217. package/dist/db/sql.js +5 -0
  218. package/dist/db/state.d.ts +12 -0
  219. package/dist/db/state.js +27 -0
  220. package/dist/db/sweep.d.ts +13 -0
  221. package/dist/db/sweep.js +90 -0
  222. package/dist/db/txid.d.ts +7 -0
  223. package/dist/db/txid.js +12 -0
  224. package/dist/define.d.ts +3 -0
  225. package/dist/define.js +6 -0
  226. package/dist/endpoints/events.d.ts +7 -0
  227. package/dist/endpoints/events.js +98 -0
  228. package/dist/endpoints/index.d.ts +18 -0
  229. package/dist/endpoints/index.js +160 -0
  230. package/dist/endpoints/manifest.d.ts +7 -0
  231. package/dist/endpoints/manifest.js +30 -0
  232. package/dist/endpoints/preflight.d.ts +8 -0
  233. package/dist/endpoints/preflight.js +25 -0
  234. package/dist/endpoints/previewToken.d.ts +7 -0
  235. package/dist/endpoints/previewToken.js +54 -0
  236. package/dist/endpoints/recompute.d.ts +7 -0
  237. package/dist/endpoints/recompute.js +41 -0
  238. package/dist/endpoints/results.d.ts +24 -0
  239. package/dist/endpoints/results.js +136 -0
  240. package/dist/endpoints/summary.d.ts +7 -0
  241. package/dist/endpoints/summary.js +40 -0
  242. package/dist/endpoints/transitions.d.ts +42 -0
  243. package/dist/endpoints/transitions.js +154 -0
  244. package/dist/errors.d.ts +27 -0
  245. package/dist/errors.js +33 -0
  246. package/dist/events/body.d.ts +7 -0
  247. package/dist/events/body.js +43 -0
  248. package/dist/events/dimensions.d.ts +4 -0
  249. package/dist/events/dimensions.js +51 -0
  250. package/dist/events/preview.d.ts +2 -0
  251. package/dist/events/preview.js +9 -0
  252. package/dist/events/request.d.ts +3 -0
  253. package/dist/events/request.js +14 -0
  254. package/dist/events/rows.d.ts +7 -0
  255. package/dist/events/rows.js +65 -0
  256. package/dist/exports/adminClient.d.ts +16 -0
  257. package/dist/exports/adminClient.js +17 -0
  258. package/dist/exports/client.d.ts +7 -0
  259. package/dist/exports/client.js +7 -0
  260. package/dist/exports/index.d.ts +4 -0
  261. package/dist/exports/index.js +3 -0
  262. package/dist/exports/proxy.d.ts +4 -0
  263. package/dist/exports/proxy.js +3 -0
  264. package/dist/exports/puck.d.ts +4 -0
  265. package/dist/exports/puck.js +3 -0
  266. package/dist/exports/puckEditor.d.ts +1 -0
  267. package/dist/exports/puckEditor.js +2 -0
  268. package/dist/exports/rsc.d.ts +13 -0
  269. package/dist/exports/rsc.js +13 -0
  270. package/dist/exports/runtimeProxy.d.ts +4 -0
  271. package/dist/exports/runtimeProxy.js +2 -0
  272. package/dist/exports/runtimeServer.d.ts +2 -0
  273. package/dist/exports/runtimeServer.js +1 -0
  274. package/dist/fields/armSelect.d.ts +7 -0
  275. package/dist/fields/armSelect.js +33 -0
  276. package/dist/globals/state.d.ts +3 -0
  277. package/dist/globals/state.js +31 -0
  278. package/dist/hooks/contentChanges.d.ts +3 -0
  279. package/dist/hooks/contentChanges.js +10 -0
  280. package/dist/hooks/hostHook.d.ts +5 -0
  281. package/dist/hooks/hostHook.js +20 -0
  282. package/dist/index.d.ts +1 -0
  283. package/dist/index.js +4 -0
  284. package/dist/manifest/cache.d.ts +10 -0
  285. package/dist/manifest/cache.js +51 -0
  286. package/dist/manifest/compile.d.ts +63 -0
  287. package/dist/manifest/compile.js +237 -0
  288. package/dist/onInit.d.ts +5 -0
  289. package/dist/onInit.js +13 -0
  290. package/dist/options/fromReq.d.ts +3 -0
  291. package/dist/options/fromReq.js +5 -0
  292. package/dist/options.d.ts +9 -0
  293. package/dist/options.js +107 -0
  294. package/dist/plugin.d.ts +7 -0
  295. package/dist/plugin.js +62 -0
  296. package/dist/proxy/apply.d.ts +3 -0
  297. package/dist/proxy/apply.js +5 -0
  298. package/dist/proxy/consentFallback.d.ts +5 -0
  299. package/dist/proxy/consentFallback.js +27 -0
  300. package/dist/proxy/control.d.ts +6 -0
  301. package/dist/proxy/control.js +36 -0
  302. package/dist/proxy/createProxy.d.ts +3 -0
  303. package/dist/proxy/createProxy.js +15 -0
  304. package/dist/proxy/pageRewrite.d.ts +4 -0
  305. package/dist/proxy/pageRewrite.js +41 -0
  306. package/dist/proxy/resolve.d.ts +13 -0
  307. package/dist/proxy/resolve.js +163 -0
  308. package/dist/proxy/skip.d.ts +1 -0
  309. package/dist/proxy/skip.js +9 -0
  310. package/dist/puck/ExperimentPicker.d.ts +5 -0
  311. package/dist/puck/ExperimentPicker.js +88 -0
  312. package/dist/puck/ExperimentSlot.d.ts +3 -0
  313. package/dist/puck/ExperimentSlot.js +16 -0
  314. package/dist/puck/copy.d.ts +14 -0
  315. package/dist/puck/copy.js +14 -0
  316. package/dist/puck/editor/CreateExperimentDrawer.d.ts +5 -0
  317. package/dist/puck/editor/CreateExperimentDrawer.js +120 -0
  318. package/dist/puck/editor/ExperimentSlotEditor.d.ts +3 -0
  319. package/dist/puck/editor/ExperimentSlotEditor.js +225 -0
  320. package/dist/puck/editor/cloneSlot.d.ts +3 -0
  321. package/dist/puck/editor/cloneSlot.js +41 -0
  322. package/dist/puck/editor/copy.d.ts +25 -0
  323. package/dist/puck/editor/copy.js +25 -0
  324. package/dist/puck/editor/editor.model.d.ts +16 -0
  325. package/dist/puck/editor/editor.model.js +33 -0
  326. package/dist/puck/experimentSlotField.d.ts +5 -0
  327. package/dist/puck/experimentSlotField.js +13 -0
  328. package/dist/puck/slot.model.d.ts +2 -0
  329. package/dist/puck/slot.model.js +11 -0
  330. package/dist/puck/slotConfig.d.ts +5 -0
  331. package/dist/puck/slotConfig.js +25 -0
  332. package/dist/results/aggregate.d.ts +34 -0
  333. package/dist/results/aggregate.js +66 -0
  334. package/dist/results/analyse.d.ts +79 -0
  335. package/dist/results/analyse.js +378 -0
  336. package/dist/results/cuped.d.ts +16 -0
  337. package/dist/results/cuped.js +31 -0
  338. package/dist/results/decideGuard.d.ts +3 -0
  339. package/dist/results/decideGuard.js +8 -0
  340. package/dist/results/guardrails.d.ts +17 -0
  341. package/dist/results/guardrails.js +10 -0
  342. package/dist/results/history.d.ts +13 -0
  343. package/dist/results/history.js +39 -0
  344. package/dist/results/identityCredit.d.ts +16 -0
  345. package/dist/results/identityCredit.js +46 -0
  346. package/dist/results/power.d.ts +15 -0
  347. package/dist/results/power.js +60 -0
  348. package/dist/results/rolloutUnits.d.ts +17 -0
  349. package/dist/results/rolloutUnits.js +26 -0
  350. package/dist/results/snapshot.d.ts +9 -0
  351. package/dist/results/snapshot.js +154 -0
  352. package/dist/results/srm.d.ts +9 -0
  353. package/dist/results/srm.js +22 -0
  354. package/dist/results/verdict.d.ts +82 -0
  355. package/dist/results/verdict.js +85 -0
  356. package/dist/runtime/assign.d.ts +23 -0
  357. package/dist/runtime/assign.js +104 -0
  358. package/dist/runtime/bot.d.ts +1 -0
  359. package/dist/runtime/bot.js +7 -0
  360. package/dist/runtime/cookie.d.ts +17 -0
  361. package/dist/runtime/cookie.js +35 -0
  362. package/dist/runtime/eligibility.d.ts +22 -0
  363. package/dist/runtime/eligibility.js +20 -0
  364. package/dist/runtime/header.d.ts +17 -0
  365. package/dist/runtime/header.js +97 -0
  366. package/dist/runtime/loaders.d.ts +17 -0
  367. package/dist/runtime/loaders.js +29 -0
  368. package/dist/runtime/normalisePath.d.ts +7 -0
  369. package/dist/runtime/normalisePath.js +15 -0
  370. package/dist/runtime/previewToken.d.ts +9 -0
  371. package/dist/runtime/previewToken.js +23 -0
  372. package/dist/runtime/proxyRuntime.d.ts +2 -0
  373. package/dist/runtime/proxyRuntime.js +22 -0
  374. package/dist/runtime/seed.d.ts +2 -0
  375. package/dist/runtime/seed.js +4 -0
  376. package/dist/runtime/signing.d.ts +3 -0
  377. package/dist/runtime/signing.js +16 -0
  378. package/dist/runtime/targeting.d.ts +6 -0
  379. package/dist/runtime/targeting.js +9 -0
  380. package/dist/server/context.d.ts +10 -0
  381. package/dist/server/context.js +59 -0
  382. package/dist/server/eraseUser.d.ts +7 -0
  383. package/dist/server/eraseUser.js +4 -0
  384. package/dist/server/getAssignments.d.ts +9 -0
  385. package/dist/server/getAssignments.js +227 -0
  386. package/dist/server/getFlagPoint.d.ts +11 -0
  387. package/dist/server/getFlagPoint.js +36 -0
  388. package/dist/server/headerRevision.d.ts +6 -0
  389. package/dist/server/headerRevision.js +10 -0
  390. package/dist/server/linkIdentity.d.ts +9 -0
  391. package/dist/server/linkIdentity.js +34 -0
  392. package/dist/server/metadata.d.ts +7 -0
  393. package/dist/server/metadata.js +24 -0
  394. package/dist/server/previewDraft.d.ts +7 -0
  395. package/dist/server/previewDraft.js +51 -0
  396. package/dist/server/recordContentChange.d.ts +7 -0
  397. package/dist/server/recordContentChange.js +150 -0
  398. package/dist/server/recordExposures.d.ts +7 -0
  399. package/dist/server/recordExposures.js +56 -0
  400. package/dist/server/request.d.ts +7 -0
  401. package/dist/server/request.js +39 -0
  402. package/dist/server/resolveExperimentData.d.ts +6 -0
  403. package/dist/server/resolveExperimentData.js +64 -0
  404. package/dist/server/runResults.d.ts +22 -0
  405. package/dist/server/runResults.js +307 -0
  406. package/dist/server/serverRuntime.d.ts +7 -0
  407. package/dist/server/serverRuntime.js +20 -0
  408. package/dist/server/sitemap.d.ts +3 -0
  409. package/dist/server/sitemap.js +6 -0
  410. package/dist/server/toClientAssignments.d.ts +7 -0
  411. package/dist/server/toClientAssignments.js +56 -0
  412. package/dist/server/trackConversion.d.ts +12 -0
  413. package/dist/server/trackConversion.js +69 -0
  414. package/dist/targeting/ops.d.ts +8 -0
  415. package/dist/targeting/ops.js +58 -0
  416. package/dist/transitions/addMetric.d.ts +16 -0
  417. package/dist/transitions/addMetric.js +126 -0
  418. package/dist/transitions/allocate.d.ts +9 -0
  419. package/dist/transitions/allocate.js +84 -0
  420. package/dist/transitions/archive.d.ts +9 -0
  421. package/dist/transitions/archive.js +46 -0
  422. package/dist/transitions/checkStart.d.ts +61 -0
  423. package/dist/transitions/checkStart.js +104 -0
  424. package/dist/transitions/confirmPhrases.d.ts +5 -0
  425. package/dist/transitions/confirmPhrases.js +18 -0
  426. package/dist/transitions/decide.d.ts +9 -0
  427. package/dist/transitions/decide.js +138 -0
  428. package/dist/transitions/deleteExperiment.d.ts +5 -0
  429. package/dist/transitions/deleteExperiment.js +66 -0
  430. package/dist/transitions/kernel.d.ts +31 -0
  431. package/dist/transitions/kernel.js +69 -0
  432. package/dist/transitions/makeContent.d.ts +20 -0
  433. package/dist/transitions/makeContent.js +411 -0
  434. package/dist/transitions/phaseRecord.d.ts +27 -0
  435. package/dist/transitions/phaseRecord.js +81 -0
  436. package/dist/transitions/placements.d.ts +26 -0
  437. package/dist/transitions/placements.js +89 -0
  438. package/dist/transitions/preflightData.d.ts +21 -0
  439. package/dist/transitions/preflightData.js +317 -0
  440. package/dist/transitions/releaseHoldout.d.ts +8 -0
  441. package/dist/transitions/releaseHoldout.js +30 -0
  442. package/dist/transitions/resolveCaps.d.ts +28 -0
  443. package/dist/transitions/resolveCaps.js +68 -0
  444. package/dist/transitions/start.d.ts +26 -0
  445. package/dist/transitions/start.js +220 -0
  446. package/dist/transitions/stop.d.ts +8 -0
  447. package/dist/transitions/stop.js +25 -0
  448. package/dist/types/admin.d.ts +20 -0
  449. package/dist/types/admin.js +1 -0
  450. package/dist/types/assignments.d.ts +57 -0
  451. package/dist/types/assignments.js +1 -0
  452. package/dist/types/contracts.d.ts +141 -0
  453. package/dist/types/contracts.js +1 -0
  454. package/dist/types/endpoints.d.ts +135 -0
  455. package/dist/types/endpoints.js +1 -0
  456. package/dist/types/index.d.ts +8 -0
  457. package/dist/types/index.js +8 -0
  458. package/dist/types/manifest.d.ts +42 -0
  459. package/dist/types/manifest.js +1 -0
  460. package/dist/types/puck.d.ts +23 -0
  461. package/dist/types/puck.js +1 -0
  462. package/dist/types/runtime.d.ts +59 -0
  463. package/dist/types/runtime.js +1 -0
  464. package/dist/types/snapshot.d.ts +117 -0
  465. package/dist/types/snapshot.js +1 -0
  466. package/package.json +138 -3
@@ -0,0 +1,65 @@
1
+ import { exposureDimensions } from './dimensions.js';
2
+ function record(value) {
3
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
4
+ }
5
+ /** Only declared primitive attributes can enter telemetry; never accept arbitrary browser objects. */ function attributes(value, keys) {
6
+ if (!record(value)) return undefined;
7
+ return Object.fromEntries(Object.entries(value).filter(([key, item])=>{
8
+ const definition = keys && Object.hasOwn(keys, key) ? keys[key] : undefined;
9
+ return definition && typeof item === definition.type && (typeof item !== 'number' || Number.isFinite(item)) && (!definition.values || typeof item === 'string' && definition.values.includes(item));
10
+ }));
11
+ }
12
+ export function eventRows(events, manifest, assignments, options, visitorId, userId, ts, requestAttributes = {}) {
13
+ const rows = new Map();
14
+ for (const event of events){
15
+ if (!record(event)) continue;
16
+ let row;
17
+ if (event.type === 'exposure') {
18
+ if (typeof event.experiment !== 'string' || typeof event.arm !== 'string' || ![
19
+ 'manual',
20
+ 'viewport',
21
+ 'pageview'
22
+ ].includes(String(event.policy))) continue;
23
+ const experiment = manifest.experiments.find((exp)=>exp.slug === event.experiment);
24
+ const assigned = assignments.bySlug[event.experiment];
25
+ if (!experiment || !assigned?.exposable || event.phase !== experiment.phase || event.policy !== experiment.exposurePolicy) continue;
26
+ const unitId = experiment.unitType === 'visitor' ? visitorId : userId;
27
+ if (!unitId) continue;
28
+ const mismatch = event.arm !== assigned.arm;
29
+ row = {
30
+ type: mismatch ? 'arm-mismatch' : 'exposure',
31
+ experimentId: experiment.id,
32
+ phase: experiment.phase,
33
+ arm: event.arm,
34
+ unitId,
35
+ unitType: experiment.unitType,
36
+ userId,
37
+ ts,
38
+ dimensions: mismatch ? null : exposureDimensions(requestAttributes, options.events?.dimensions),
39
+ // §5.5 / §11: diagnostics are separate rows, never exposure denominators or multi-arm counts.
40
+ dedupeKey: mismatch ? `mismatch:${experiment.id}:${experiment.phase}:${unitId}:${ts.slice(0, 10)}` : `exposure:${experiment.id}:${experiment.phase}:${event.arm}:${unitId}:${ts.slice(0, 10)}`
41
+ };
42
+ } else if (event.type === 'conversion') {
43
+ if (typeof event.eventName !== 'string' || typeof event.idempotencyKey !== 'string' || !event.idempotencyKey.trim() || event.value !== undefined && (typeof event.value !== 'number' || !Number.isFinite(event.value))) continue;
44
+ const source = options.metricSources?.find((source)=>source.id === event.eventName);
45
+ if (source ? source.clientWritable !== true || source.kind === 'revenue' : !options.eventSources?.some((source)=>source.name === event.eventName && source.clientWritable)) continue;
46
+ row = {
47
+ type: 'conversion',
48
+ eventName: event.eventName,
49
+ value: 1,
50
+ unitId: visitorId,
51
+ unitType: 'visitor',
52
+ userId,
53
+ ts,
54
+ dimensions: null,
55
+ attributes: attributes(event.attributes, options.attributeKeys),
56
+ // §5.5: scoped by unit and event so one client can never pre-claim another's key.
57
+ dedupeKey: `conversion:c:${visitorId}:${event.eventName}:${event.idempotencyKey}`
58
+ };
59
+ } else continue;
60
+ rows.set(row.dedupeKey, row);
61
+ }
62
+ return [
63
+ ...rows.values()
64
+ ];
65
+ }
@@ -0,0 +1,16 @@
1
+ export { AllocationField } from '../admin/AllocationField.js';
2
+ export { FlagPointSelect } from '../admin/FlagPointSelect.js';
3
+ export { LayerUsage } from '../admin/LayerUsage.js';
4
+ export { LockedFieldNotice } from '../admin/LockedFieldNotice.js';
5
+ export { MetricSourceSelect } from '../admin/MetricSourceSelect.js';
6
+ export { PhaseHistory } from '../admin/PhaseHistory.js';
7
+ export { StatusCell } from '../admin/StatusCell.js';
8
+ export { SummaryCell } from '../admin/SummaryCell.js';
9
+ export { ExperimentActions } from '../admin/actions/ExperimentActions.js';
10
+ export { ArmSelectField } from '../admin/armSelect/ArmSelectField.js';
11
+ export { ArmsField } from '../admin/arms/ArmsField.js';
12
+ export { ResultsView } from '../admin/results/ResultsView.js';
13
+ export { ReviewPanel } from '../admin/review/ReviewPanel.js';
14
+ export { TargetingAttributeField } from '../admin/targeting/TargetingAttributeField.js';
15
+ export { TargetingOpField } from '../admin/targeting/TargetingOpField.js';
16
+ export { TargetingValueField } from '../admin/targeting/TargetingValueField.js';
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+ export { AllocationField } from '../admin/AllocationField.js';
3
+ export { FlagPointSelect } from '../admin/FlagPointSelect.js';
4
+ export { LayerUsage } from '../admin/LayerUsage.js';
5
+ export { LockedFieldNotice } from '../admin/LockedFieldNotice.js';
6
+ export { MetricSourceSelect } from '../admin/MetricSourceSelect.js';
7
+ export { PhaseHistory } from '../admin/PhaseHistory.js';
8
+ export { StatusCell } from '../admin/StatusCell.js';
9
+ export { SummaryCell } from '../admin/SummaryCell.js';
10
+ export { ExperimentActions } from '../admin/actions/ExperimentActions.js';
11
+ export { ArmSelectField } from '../admin/armSelect/ArmSelectField.js';
12
+ export { ArmsField } from '../admin/arms/ArmsField.js';
13
+ export { ResultsView } from '../admin/results/ResultsView.js';
14
+ export { ReviewPanel } from '../admin/review/ReviewPanel.js';
15
+ export { TargetingAttributeField } from '../admin/targeting/TargetingAttributeField.js';
16
+ export { TargetingOpField } from '../admin/targeting/TargetingOpField.js';
17
+ export { TargetingValueField } from '../admin/targeting/TargetingValueField.js';
@@ -0,0 +1,7 @@
1
+ export { ExperimentsProvider } from '../client/ExperimentsProvider.js';
2
+ export { useFlagPoint } from '../client/useFlagPoint.js';
3
+ export { useExperiment } from '../client/useExperiment.js';
4
+ export { ExperimentPageview } from '../client/ExperimentPageview.js';
5
+ export { trackConversionBeacon } from '../client/trackConversionBeacon.js';
6
+ export { MAX_EVENTS_PER_BODY, DEFAULT_MAX_BODY_BYTES } from '../constants.js';
7
+ export type { ClientAssignments } from '../types/assignments.js';
@@ -0,0 +1,7 @@
1
+ 'use client';
2
+ export { ExperimentsProvider } from '../client/ExperimentsProvider.js';
3
+ export { useFlagPoint } from '../client/useFlagPoint.js';
4
+ export { useExperiment } from '../client/useExperiment.js';
5
+ export { ExperimentPageview } from '../client/ExperimentPageview.js';
6
+ export { trackConversionBeacon } from '../client/trackConversionBeacon.js';
7
+ export { MAX_EVENTS_PER_BODY, DEFAULT_MAX_BODY_BYTES } from '../constants.js';
@@ -0,0 +1,4 @@
1
+ export { createExperimentsPlugin } from '../plugin.js';
2
+ export { defineFlagPoint, defineMetricSource } from '../define.js';
3
+ export { createArmSelectField } from '../fields/armSelect.js';
4
+ export type { SerializedFlagPoint, SerializedMetricSource, SerializedAttributeKeys, EditableField, Assignment, Assignments, FlagPointResult, ClientAssignments, RenderedExposure, DocId, Attributes, ExposurePolicy, ExperimentKind, Status, UnitType, ArmKey, ArmKind, TargetingRule, Arm, ParamField, MetricSource, FlagPoint, RateLimiter, ExperimentsAccess, ExperimentsPluginOptions, ArmIssueCode, RefusalCode, ErrorEnvelope, TransitionSuccess, AllocateBody, AddMetricBody, DecideBody, ArchiveBody, MakeContentResult, PreflightResult, PreviewTokenResult, PhaseSummary, ResultsResponse, SummaryResponse, EventBody, FlagDefault, Manifest, ManifestExperiment, ArmSlot, ExperimentRef, ExperimentSlotProps, ExperimentsProxyRuntimeOptions, ExperimentsProxyRuntime, ExperimentsServerRuntimeOptions, ExperimentsServerRuntime, VerdictCode, Snapshot, } from '../types/index.js';
@@ -0,0 +1,3 @@
1
+ export { createExperimentsPlugin } from '../plugin.js';
2
+ export { defineFlagPoint, defineMetricSource } from '../define.js';
3
+ export { createArmSelectField } from '../fields/armSelect.js';
@@ -0,0 +1,4 @@
1
+ export { resolveExperiments } from '../proxy/resolve.js';
2
+ export { applyExperiments } from '../proxy/apply.js';
3
+ export { createExperimentProxy } from '../proxy/createProxy.js';
4
+ export type { ExperimentsProxyResult } from '../proxy/resolve.js';
@@ -0,0 +1,3 @@
1
+ export { resolveExperiments } from '../proxy/resolve.js';
2
+ export { applyExperiments } from '../proxy/apply.js';
3
+ export { createExperimentProxy } from '../proxy/createProxy.js';
@@ -0,0 +1,4 @@
1
+ export { ExperimentSlot } from '../puck/ExperimentSlot.js';
2
+ export { createExperimentSlotField } from '../puck/experimentSlotField.js';
3
+ export { EXPERIMENT_SLOT_TYPE } from '../types/puck.js';
4
+ export type { ArmSlot, ExperimentRef, ExperimentSlotProps } from '../types/puck.js';
@@ -0,0 +1,3 @@
1
+ export { ExperimentSlot } from '../puck/ExperimentSlot.js';
2
+ export { createExperimentSlotField } from '../puck/experimentSlotField.js';
3
+ export { EXPERIMENT_SLOT_TYPE } from '../types/puck.js';
@@ -0,0 +1 @@
1
+ export { ExperimentSlotEditor } from '../puck/editor/ExperimentSlotEditor.js';
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export { ExperimentSlotEditor } from '../puck/editor/ExperimentSlotEditor.js';
@@ -0,0 +1,13 @@
1
+ export { getAssignments } from '../server/getAssignments.js';
2
+ export { resolveExperimentData } from '../server/resolveExperimentData.js';
3
+ export { recordExposures } from '../server/recordExposures.js';
4
+ export { getFlagPoint } from '../server/getFlagPoint.js';
5
+ export { linkIdentity } from '../server/linkIdentity.js';
6
+ export { trackConversion } from '../server/trackConversion.js';
7
+ export { eraseUser } from '../server/eraseUser.js';
8
+ export { runResults } from '../server/runResults.js';
9
+ export { recordContentChange } from '../server/recordContentChange.js';
10
+ export { experimentSitemapFilter } from '../server/sitemap.js';
11
+ export { experimentMetadata } from '../server/metadata.js';
12
+ export { toClientAssignments } from '../server/toClientAssignments.js';
13
+ export { contentChangesBeforeHook as captureContentBaseline } from '../hooks/contentChanges.js';
@@ -0,0 +1,13 @@
1
+ export { getAssignments } from '../server/getAssignments.js';
2
+ export { resolveExperimentData } from '../server/resolveExperimentData.js';
3
+ export { recordExposures } from '../server/recordExposures.js';
4
+ export { getFlagPoint } from '../server/getFlagPoint.js';
5
+ export { linkIdentity } from '../server/linkIdentity.js';
6
+ export { trackConversion } from '../server/trackConversion.js';
7
+ export { eraseUser } from '../server/eraseUser.js';
8
+ export { runResults } from '../server/runResults.js';
9
+ export { recordContentChange } from '../server/recordContentChange.js';
10
+ export { experimentSitemapFilter } from '../server/sitemap.js';
11
+ export { experimentMetadata } from '../server/metadata.js';
12
+ export { toClientAssignments } from '../server/toClientAssignments.js';
13
+ export { contentChangesBeforeHook as captureContentBaseline } from '../hooks/contentChanges.js';
@@ -0,0 +1,4 @@
1
+ export { defineExperimentsProxyRuntime } from '../runtime/proxyRuntime.js';
2
+ export { createPostgresManifestLoader, createHttpManifestLoader } from '../runtime/loaders.js';
3
+ export type { ExperimentsProxyRuntime, ExperimentsProxyRuntimeOptions, Manifest } from '../types/index.js';
4
+ export type { PostgresManifestLoaderOptions, HttpManifestLoaderOptions, ManifestLoader } from '../runtime/loaders.js';
@@ -0,0 +1,2 @@
1
+ export { defineExperimentsProxyRuntime } from '../runtime/proxyRuntime.js';
2
+ export { createPostgresManifestLoader, createHttpManifestLoader } from '../runtime/loaders.js';
@@ -0,0 +1,2 @@
1
+ export { defineExperimentsServerRuntime } from '../server/serverRuntime.js';
2
+ export type { ExperimentsServerRuntime, ExperimentsServerRuntimeOptions } from '../types/runtime.js';
@@ -0,0 +1 @@
1
+ export { defineExperimentsServerRuntime } from '../server/serverRuntime.js';
@@ -0,0 +1,7 @@
1
+ import type { Field } from 'payload';
2
+ export declare function createArmSelectField({ name, flagPoint, label, required }: {
3
+ name?: string;
4
+ flagPoint: string;
5
+ label?: string;
6
+ required?: boolean;
7
+ }): Field;
@@ -0,0 +1,33 @@
1
+ import { XP_ARM_SELECT } from '../admin/paths.js';
2
+ export function createArmSelectField({ name = 'experimentArm', flagPoint, label, required }) {
3
+ return {
4
+ name,
5
+ type: 'group',
6
+ label: label ?? 'Experiment group',
7
+ admin: {
8
+ components: {
9
+ Field: XP_ARM_SELECT
10
+ },
11
+ custom: {
12
+ flagPoint
13
+ }
14
+ },
15
+ fields: [
16
+ {
17
+ name: 'experiment',
18
+ type: 'text',
19
+ admin: {
20
+ hidden: true
21
+ }
22
+ },
23
+ {
24
+ name: 'arm',
25
+ type: 'text',
26
+ required,
27
+ admin: {
28
+ hidden: true
29
+ }
30
+ }
31
+ ]
32
+ };
33
+ }
@@ -0,0 +1,3 @@
1
+ import type { GlobalConfig } from 'payload';
2
+ import type { ResolvedOptions } from '../types/contracts.js';
3
+ export declare function stateGlobal(options: ResolvedOptions): GlobalConfig;
@@ -0,0 +1,31 @@
1
+ import { deny, isTrue } from '../collections/access.js';
2
+ export function stateGlobal(options) {
3
+ return {
4
+ slug: 'xp-state',
5
+ dbName: 'xp_state',
6
+ graphQL: false,
7
+ admin: {
8
+ hidden: true
9
+ },
10
+ access: {
11
+ read: isTrue(options.access.manage),
12
+ update: deny,
13
+ readVersions: deny
14
+ },
15
+ fields: [
16
+ {
17
+ name: 'revision',
18
+ type: 'number',
19
+ defaultValue: 0
20
+ },
21
+ {
22
+ name: 'manifest',
23
+ type: 'json'
24
+ },
25
+ {
26
+ name: 'flagDefaults',
27
+ type: 'json'
28
+ }
29
+ ]
30
+ };
31
+ }
@@ -0,0 +1,3 @@
1
+ import type { CollectionAfterChangeHook, CollectionBeforeChangeHook } from 'payload';
2
+ export declare const contentChangesHook: CollectionAfterChangeHook;
3
+ export declare const contentChangesBeforeHook: CollectionBeforeChangeHook;
@@ -0,0 +1,10 @@
1
+ import { capturePublishedContent, recordContentChange } from '../server/recordContentChange.js';
2
+ import { neverThrow, neverThrowBefore } from './hostHook.js';
3
+ export const contentChangesHook = neverThrow('contentChanges', async (args)=>{
4
+ await recordContentChange(args);
5
+ return args.doc;
6
+ });
7
+ export const contentChangesBeforeHook = neverThrowBefore('contentChanges baseline', async (args)=>{
8
+ await capturePublishedContent(args);
9
+ return args.data;
10
+ });
@@ -0,0 +1,5 @@
1
+ import type { CollectionAfterChangeHook, CollectionBeforeChangeHook } from 'payload';
2
+ /** Host saves must survive synchronous and asynchronous plugin hook failures. */
3
+ export declare function neverThrow(name: string, hook: CollectionAfterChangeHook): CollectionAfterChangeHook;
4
+ /** The baseline capture is also best effort and must return incoming save data. */
5
+ export declare function neverThrowBefore(name: string, hook: CollectionBeforeChangeHook): CollectionBeforeChangeHook;
@@ -0,0 +1,20 @@
1
+ /** Host saves must survive synchronous and asynchronous plugin hook failures. */ export function neverThrow(name, hook) {
2
+ return async (args)=>{
3
+ try {
4
+ return await hook(args);
5
+ } catch (error) {
6
+ console.error(`[payload-experiments] ${name} failed; the document was saved without it`, error);
7
+ return args.doc;
8
+ }
9
+ };
10
+ }
11
+ /** The baseline capture is also best effort and must return incoming save data. */ export function neverThrowBefore(name, hook) {
12
+ return async (args)=>{
13
+ try {
14
+ return await hook(args);
15
+ } catch (error) {
16
+ console.error(`[payload-experiments] ${name} failed; the document was saved without it`, error);
17
+ return args.data;
18
+ }
19
+ };
20
+ }
@@ -0,0 +1 @@
1
+ export declare const PLUGIN_NAME: "@delmaredigital/payload-experiments";
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ // @delmaredigital/payload-experiments
2
+ // Public surface is defined in docs/plans/2026-10-30-payload-experiments-design.md §7.
3
+ // Implementation lands by lane; this file only pins the package until then.
4
+ export const PLUGIN_NAME = '@delmaredigital/payload-experiments';
@@ -0,0 +1,10 @@
1
+ import type { Manifest } from '../types/manifest.js';
2
+ import type { ManifestLoader } from '../runtime/loaders.js';
3
+ export declare function createManifestCache(load: ManifestLoader, { ttlMs, coldStartMs, refreshTimeoutMs, now }?: {
4
+ ttlMs?: number;
5
+ coldStartMs?: number;
6
+ refreshTimeoutMs?: number;
7
+ now?: () => number;
8
+ }): {
9
+ get(): Promise<Manifest | null>;
10
+ };
@@ -0,0 +1,51 @@
1
+ export function createManifestCache(load, { ttlMs = 30_000, coldStartMs = 1_500, refreshTimeoutMs = 5_000, now = Date.now } = {}) {
2
+ let cached = null;
3
+ let checkedAt = -Infinity;
4
+ let inFlight;
5
+ function refresh() {
6
+ if (!inFlight) {
7
+ const expired = new Error('Manifest refresh timed out');
8
+ let timer;
9
+ const pending = Promise.resolve().then(()=>load(cached ? {
10
+ ifRevision: cached.revision
11
+ } : {}));
12
+ inFlight = Promise.race([
13
+ pending,
14
+ new Promise((_resolve, reject)=>{
15
+ timer = setTimeout(()=>reject(expired), refreshTimeoutMs);
16
+ })
17
+ ]).then((result)=>{
18
+ if (result !== 'not-modified') cached = result;
19
+ checkedAt = now();
20
+ return cached;
21
+ }, (error)=>{
22
+ // A timed-out attempt must not pin inFlight or delay the next retry.
23
+ // Its late result is ignored: only the race winner can mutate the cache.
24
+ checkedAt = error === expired ? -Infinity : now();
25
+ return cached;
26
+ }).finally(()=>{
27
+ clearTimeout(timer);
28
+ inFlight = undefined;
29
+ });
30
+ }
31
+ return inFlight;
32
+ }
33
+ return {
34
+ async get () {
35
+ if (now() - checkedAt < ttlMs) return cached;
36
+ const pending = refresh();
37
+ if (cached) return cached;
38
+ let timer;
39
+ try {
40
+ return await Promise.race([
41
+ pending,
42
+ new Promise((resolve)=>{
43
+ timer = setTimeout(()=>resolve(null), coldStartMs);
44
+ })
45
+ ]);
46
+ } finally{
47
+ if (timer !== undefined) clearTimeout(timer);
48
+ }
49
+ }
50
+ };
51
+ }
@@ -0,0 +1,63 @@
1
+ import type { PayloadRequest } from 'payload';
2
+ import type { Arm, DocId, ExperimentKind, ExposurePolicy, Status, TargetingRule, UnitType } from '../types/contracts.js';
3
+ import type { Manifest, ManifestExperiment } from '../types/manifest.js';
4
+ import type { AttributeKeys } from '../runtime/targeting.js';
5
+ type TypedTargetingRule = ManifestExperiment['targeting'][number];
6
+ export interface ManifestCompileOptions {
7
+ attributeKeys?: AttributeKeys;
8
+ onInvalid?(slug: string, reason: string): void;
9
+ }
10
+ export interface ManifestPhase {
11
+ phase: number;
12
+ phaseKind: 'test' | 'rollout';
13
+ seed: string;
14
+ arms: Arm[];
15
+ allocation: number;
16
+ targeting: Array<TargetingRule & {
17
+ type?: TypedTargetingRule['type'];
18
+ }>;
19
+ endedAt?: string | null;
20
+ }
21
+ export interface ManifestInputExperiment {
22
+ id: DocId;
23
+ slug: string;
24
+ kind: ExperimentKind;
25
+ status: Status;
26
+ unitType: UnitType;
27
+ exposurePolicy: ExposurePolicy;
28
+ flagPoint?: string | null;
29
+ arms: Arm[];
30
+ layer?: {
31
+ slug: string;
32
+ } | DocId | null;
33
+ layerSlices?: number[] | null;
34
+ decision?: {
35
+ winnerArm?: string | null;
36
+ discardedAt?: string | null;
37
+ holdoutReleasedAt?: string | null;
38
+ } | null;
39
+ currentPhase: ManifestPhase | null;
40
+ lastTestPhase?: ManifestPhase | null;
41
+ }
42
+ export interface ManifestInputs {
43
+ experiments: ManifestInputExperiment[];
44
+ flagDefaults: Manifest['flagDefaults'];
45
+ excludeIds?: DocId[];
46
+ pruneFlagDefaultIds?: DocId[];
47
+ }
48
+ export declare function loadManifestInputs(req: PayloadRequest, { excludeIds, pruneFlagDefaultIds }?: {
49
+ excludeIds?: DocId[];
50
+ pruneFlagDefaultIds?: DocId[];
51
+ }): Promise<ManifestInputs>;
52
+ /** Pure compiler. Assignment config comes exclusively from the frozen phase. */
53
+ export declare function compileManifest(inputs: ManifestInputs, revision: number, { attributeKeys, onInvalid }?: ManifestCompileOptions): Manifest;
54
+ /** Take the state lock before reading inputs. Under READ COMMITTED, a builder
55
+ * waiting for another transition then sees that transition's committed changes,
56
+ * so a later revision cannot overwrite the manifest with pre-lock input state.
57
+ * All reads and writes join the request's transaction.
58
+ */
59
+ export declare function buildAndStoreManifest(req: PayloadRequest, options?: {
60
+ excludeIds?: DocId[];
61
+ pruneFlagDefaultIds?: DocId[];
62
+ }): Promise<Manifest>;
63
+ export {};