@delmaredigital/payload-experiments 0.0.0-stage → 0.1.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +582 -2
- package/dist/access.d.ts +1 -0
- package/dist/access.js +2 -0
- package/dist/admin/AllocationField.d.ts +2 -0
- package/dist/admin/AllocationField.js +80 -0
- package/dist/admin/FlagPointSelect.d.ts +2 -0
- package/dist/admin/FlagPointSelect.js +54 -0
- package/dist/admin/LayerUsage.d.ts +2 -0
- package/dist/admin/LayerUsage.js +24 -0
- package/dist/admin/LockedFieldNotice.d.ts +2 -0
- package/dist/admin/LockedFieldNotice.js +26 -0
- package/dist/admin/MetricSourceSelect.d.ts +2 -0
- package/dist/admin/MetricSourceSelect.js +32 -0
- package/dist/admin/PhaseHistory.d.ts +2 -0
- package/dist/admin/PhaseHistory.js +76 -0
- package/dist/admin/PreviewLinks.d.ts +11 -0
- package/dist/admin/PreviewLinks.js +69 -0
- package/dist/admin/StatusCell.d.ts +3 -0
- package/dist/admin/StatusCell.js +19 -0
- package/dist/admin/SummaryCell.d.ts +2 -0
- package/dist/admin/SummaryCell.js +32 -0
- package/dist/admin/actions/AddMetricDialog.d.ts +6 -0
- package/dist/admin/actions/AddMetricDialog.js +138 -0
- package/dist/admin/actions/AllocateDialog.d.ts +6 -0
- package/dist/admin/actions/AllocateDialog.js +81 -0
- package/dist/admin/actions/ConfirmDialog.d.ts +14 -0
- package/dist/admin/actions/ConfirmDialog.js +192 -0
- package/dist/admin/actions/DecideDialog.d.ts +7 -0
- package/dist/admin/actions/DecideDialog.js +173 -0
- package/dist/admin/actions/ExperimentActions.d.ts +3 -0
- package/dist/admin/actions/ExperimentActions.js +110 -0
- package/dist/admin/actions/MakeContentResult.d.ts +6 -0
- package/dist/admin/actions/MakeContentResult.js +50 -0
- package/dist/admin/actions/actions.model.d.ts +37 -0
- package/dist/admin/actions/actions.model.js +71 -0
- package/dist/admin/actions/decide.model.d.ts +21 -0
- package/dist/admin/actions/decide.model.js +38 -0
- package/dist/admin/allocation.model.d.ts +20 -0
- package/dist/admin/allocation.model.js +38 -0
- package/dist/admin/api.d.ts +32 -0
- package/dist/admin/api.js +95 -0
- package/dist/admin/armSelect/ArmSelectField.d.ts +2 -0
- package/dist/admin/armSelect/ArmSelectField.js +185 -0
- package/dist/admin/armSelect/armSelect.model.d.ts +30 -0
- package/dist/admin/armSelect/armSelect.model.js +20 -0
- package/dist/admin/arms/ArmsField.d.ts +2 -0
- package/dist/admin/arms/ArmsField.js +310 -0
- package/dist/admin/arms/ParamsEditor.d.ts +16 -0
- package/dist/admin/arms/ParamsEditor.js +79 -0
- package/dist/admin/arms/arms.model.d.ts +21 -0
- package/dist/admin/arms/arms.model.js +153 -0
- package/dist/admin/arms/pageTarget.model.d.ts +4 -0
- package/dist/admin/arms/pageTarget.model.js +19 -0
- package/dist/admin/arms/params.model.d.ts +7 -0
- package/dist/admin/arms/params.model.js +35 -0
- package/dist/admin/copy/actions.d.ts +38 -0
- package/dist/admin/copy/actions.js +38 -0
- package/dist/admin/copy/armSelect.d.ts +11 -0
- package/dist/admin/copy/armSelect.js +11 -0
- package/dist/admin/copy/arms.d.ts +37 -0
- package/dist/admin/copy/arms.js +47 -0
- package/dist/admin/copy/common.d.ts +20 -0
- package/dist/admin/copy/common.js +27 -0
- package/dist/admin/copy/history.d.ts +9 -0
- package/dist/admin/copy/history.js +9 -0
- package/dist/admin/copy/metrics.d.ts +9 -0
- package/dist/admin/copy/metrics.js +9 -0
- package/dist/admin/copy/results.d.ts +78 -0
- package/dist/admin/copy/results.js +81 -0
- package/dist/admin/copy/review.d.ts +33 -0
- package/dist/admin/copy/review.js +127 -0
- package/dist/admin/copy/status.d.ts +8 -0
- package/dist/admin/copy/status.js +8 -0
- package/dist/admin/copy/tabs.d.ts +7 -0
- package/dist/admin/copy/tabs.js +7 -0
- package/dist/admin/copy/who.d.ts +36 -0
- package/dist/admin/copy/who.js +36 -0
- package/dist/admin/labels.d.ts +45 -0
- package/dist/admin/labels.js +53 -0
- package/dist/admin/layerUsage.model.d.ts +15 -0
- package/dist/admin/layerUsage.model.js +18 -0
- package/dist/admin/lockedNotice.model.d.ts +3 -0
- package/dist/admin/lockedNotice.model.js +18 -0
- package/dist/admin/metricSource.model.d.ts +7 -0
- package/dist/admin/metricSource.model.js +11 -0
- package/dist/admin/paths.d.ts +16 -0
- package/dist/admin/paths.js +16 -0
- package/dist/admin/permissions.model.d.ts +10 -0
- package/dist/admin/permissions.model.js +4 -0
- package/dist/admin/phaseHistory.model.d.ts +19 -0
- package/dist/admin/phaseHistory.model.js +19 -0
- package/dist/admin/reload.d.ts +1 -0
- package/dist/admin/reload.js +1 -0
- package/dist/admin/results/ArmTable.d.ts +8 -0
- package/dist/admin/results/ArmTable.js +112 -0
- package/dist/admin/results/CappedCell.d.ts +4 -0
- package/dist/admin/results/CappedCell.js +24 -0
- package/dist/admin/results/CiChart.d.ts +10 -0
- package/dist/admin/results/CiChart.js +178 -0
- package/dist/admin/results/DataQualityPanel.d.ts +4 -0
- package/dist/admin/results/DataQualityPanel.js +40 -0
- package/dist/admin/results/ResultsView.d.ts +3 -0
- package/dist/admin/results/ResultsView.js +312 -0
- package/dist/admin/results/VerdictCard.d.ts +9 -0
- package/dist/admin/results/VerdictCard.js +49 -0
- package/dist/admin/results/chart.model.d.ts +32 -0
- package/dist/admin/results/chart.model.js +52 -0
- package/dist/admin/results/format.d.ts +10 -0
- package/dist/admin/results/format.js +55 -0
- package/dist/admin/results/results.model.d.ts +105 -0
- package/dist/admin/results/results.model.js +175 -0
- package/dist/admin/review/ReviewPanel.d.ts +2 -0
- package/dist/admin/review/ReviewPanel.js +268 -0
- package/dist/admin/review/review.model.d.ts +31 -0
- package/dist/admin/review/review.model.js +40 -0
- package/dist/admin/status.model.d.ts +16 -0
- package/dist/admin/status.model.js +17 -0
- package/dist/admin/styles.css +10 -0
- package/dist/admin/styles.d.ts +1 -0
- package/dist/admin/styles.js +2 -0
- package/dist/admin/summaryBatcher.d.ts +8 -0
- package/dist/admin/summaryBatcher.js +33 -0
- package/dist/admin/targeting/TargetingAttributeField.d.ts +2 -0
- package/dist/admin/targeting/TargetingAttributeField.js +31 -0
- package/dist/admin/targeting/TargetingOpField.d.ts +2 -0
- package/dist/admin/targeting/TargetingOpField.js +45 -0
- package/dist/admin/targeting/TargetingValueField.d.ts +2 -0
- package/dist/admin/targeting/TargetingValueField.js +142 -0
- package/dist/admin/targeting/targeting.model.d.ts +18 -0
- package/dist/admin/targeting/targeting.model.js +48 -0
- package/dist/admin/useApi.d.ts +20 -0
- package/dist/admin/useApi.js +10 -0
- package/dist/admin/useLayerUsage.d.ts +15 -0
- package/dist/admin/useLayerUsage.js +92 -0
- package/dist/client/ExperimentPageview.d.ts +1 -0
- package/dist/client/ExperimentPageview.js +27 -0
- package/dist/client/ExperimentsProvider.d.ts +6 -0
- package/dist/client/ExperimentsProvider.js +22 -0
- package/dist/client/ViewportExposure.d.ts +9 -0
- package/dist/client/ViewportExposure.js +69 -0
- package/dist/client/beacon.d.ts +17 -0
- package/dist/client/beacon.js +71 -0
- package/dist/client/context.d.ts +2 -0
- package/dist/client/context.js +2 -0
- package/dist/client/idempotency.d.ts +2 -0
- package/dist/client/idempotency.js +13 -0
- package/dist/client/trackConversionBeacon.d.ts +3 -0
- package/dist/client/trackConversionBeacon.js +16 -0
- package/dist/client/useExperiment.d.ts +5 -0
- package/dist/client/useExperiment.js +27 -0
- package/dist/client/useFlagPoint.d.ts +9 -0
- package/dist/client/useFlagPoint.js +32 -0
- package/dist/collections/access.d.ts +21 -0
- package/dist/collections/access.js +25 -0
- package/dist/collections/events.d.ts +3 -0
- package/dist/collections/events.js +117 -0
- package/dist/collections/experiments/armInvariants.d.ts +12 -0
- package/dist/collections/experiments/armInvariants.js +89 -0
- package/dist/collections/experiments/config.d.ts +3 -0
- package/dist/collections/experiments/config.js +574 -0
- package/dist/collections/experiments/createDefaults.d.ts +2 -0
- package/dist/collections/experiments/createDefaults.js +7 -0
- package/dist/collections/experiments/deleteGuard.d.ts +3 -0
- package/dist/collections/experiments/deleteGuard.js +8 -0
- package/dist/collections/experiments/editability.d.ts +4 -0
- package/dist/collections/experiments/editability.js +35 -0
- package/dist/collections/experiments/flagControlParams.d.ts +2 -0
- package/dist/collections/experiments/flagControlParams.js +32 -0
- package/dist/collections/experiments/lockHook.d.ts +2 -0
- package/dist/collections/experiments/lockHook.js +134 -0
- package/dist/collections/identities.d.ts +3 -0
- package/dist/collections/identities.js +30 -0
- package/dist/collections/index.d.ts +6 -0
- package/dist/collections/index.js +24 -0
- package/dist/collections/layers.d.ts +3 -0
- package/dist/collections/layers.js +77 -0
- package/dist/collections/metrics.d.ts +3 -0
- package/dist/collections/metrics.js +115 -0
- package/dist/collections/phases.d.ts +3 -0
- package/dist/collections/phases.js +59 -0
- package/dist/collections/serialize.d.ts +5 -0
- package/dist/collections/serialize.js +40 -0
- package/dist/collections/snapshots.d.ts +3 -0
- package/dist/collections/snapshots.js +47 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.js +7 -0
- package/dist/db/adapter.d.ts +3 -0
- package/dist/db/adapter.js +9 -0
- package/dist/db/appends.d.ts +58 -0
- package/dist/db/appends.js +116 -0
- package/dist/db/delete.d.ts +17 -0
- package/dist/db/delete.js +35 -0
- package/dist/db/erase.d.ts +12 -0
- package/dist/db/erase.js +55 -0
- package/dist/db/events.d.ts +21 -0
- package/dist/db/events.js +100 -0
- package/dist/db/executor.d.ts +10 -0
- package/dist/db/executor.js +37 -0
- package/dist/db/identities.d.ts +11 -0
- package/dist/db/identities.js +29 -0
- package/dist/db/locks.d.ts +15 -0
- package/dist/db/locks.js +23 -0
- package/dist/db/manifest.d.ts +8 -0
- package/dist/db/manifest.js +8 -0
- package/dist/db/names.d.ts +271 -0
- package/dist/db/names.js +270 -0
- package/dist/db/pgExecutor.d.ts +41 -0
- package/dist/db/pgExecutor.js +250 -0
- package/dist/db/results.d.ts +53 -0
- package/dist/db/results.js +103 -0
- package/dist/db/slices.d.ts +18 -0
- package/dist/db/slices.js +51 -0
- package/dist/db/snapshots.d.ts +47 -0
- package/dist/db/snapshots.js +89 -0
- package/dist/db/sql.d.ts +5 -0
- package/dist/db/sql.js +5 -0
- package/dist/db/state.d.ts +12 -0
- package/dist/db/state.js +27 -0
- package/dist/db/sweep.d.ts +13 -0
- package/dist/db/sweep.js +90 -0
- package/dist/db/txid.d.ts +7 -0
- package/dist/db/txid.js +12 -0
- package/dist/define.d.ts +3 -0
- package/dist/define.js +6 -0
- package/dist/endpoints/events.d.ts +7 -0
- package/dist/endpoints/events.js +98 -0
- package/dist/endpoints/index.d.ts +18 -0
- package/dist/endpoints/index.js +160 -0
- package/dist/endpoints/manifest.d.ts +7 -0
- package/dist/endpoints/manifest.js +30 -0
- package/dist/endpoints/preflight.d.ts +8 -0
- package/dist/endpoints/preflight.js +25 -0
- package/dist/endpoints/previewToken.d.ts +7 -0
- package/dist/endpoints/previewToken.js +54 -0
- package/dist/endpoints/recompute.d.ts +7 -0
- package/dist/endpoints/recompute.js +41 -0
- package/dist/endpoints/results.d.ts +24 -0
- package/dist/endpoints/results.js +136 -0
- package/dist/endpoints/summary.d.ts +7 -0
- package/dist/endpoints/summary.js +40 -0
- package/dist/endpoints/transitions.d.ts +42 -0
- package/dist/endpoints/transitions.js +154 -0
- package/dist/errors.d.ts +27 -0
- package/dist/errors.js +33 -0
- package/dist/events/body.d.ts +7 -0
- package/dist/events/body.js +43 -0
- package/dist/events/dimensions.d.ts +4 -0
- package/dist/events/dimensions.js +51 -0
- package/dist/events/preview.d.ts +2 -0
- package/dist/events/preview.js +9 -0
- package/dist/events/request.d.ts +3 -0
- package/dist/events/request.js +14 -0
- package/dist/events/rows.d.ts +7 -0
- package/dist/events/rows.js +65 -0
- package/dist/exports/adminClient.d.ts +16 -0
- package/dist/exports/adminClient.js +17 -0
- package/dist/exports/client.d.ts +7 -0
- package/dist/exports/client.js +7 -0
- package/dist/exports/index.d.ts +4 -0
- package/dist/exports/index.js +3 -0
- package/dist/exports/proxy.d.ts +4 -0
- package/dist/exports/proxy.js +3 -0
- package/dist/exports/puck.d.ts +4 -0
- package/dist/exports/puck.js +3 -0
- package/dist/exports/puckEditor.d.ts +1 -0
- package/dist/exports/puckEditor.js +2 -0
- package/dist/exports/rsc.d.ts +13 -0
- package/dist/exports/rsc.js +13 -0
- package/dist/exports/runtimeProxy.d.ts +4 -0
- package/dist/exports/runtimeProxy.js +2 -0
- package/dist/exports/runtimeServer.d.ts +2 -0
- package/dist/exports/runtimeServer.js +1 -0
- package/dist/fields/armSelect.d.ts +7 -0
- package/dist/fields/armSelect.js +33 -0
- package/dist/globals/state.d.ts +3 -0
- package/dist/globals/state.js +31 -0
- package/dist/hooks/contentChanges.d.ts +3 -0
- package/dist/hooks/contentChanges.js +10 -0
- package/dist/hooks/hostHook.d.ts +5 -0
- package/dist/hooks/hostHook.js +20 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -0
- package/dist/manifest/cache.d.ts +10 -0
- package/dist/manifest/cache.js +51 -0
- package/dist/manifest/compile.d.ts +63 -0
- package/dist/manifest/compile.js +237 -0
- package/dist/onInit.d.ts +5 -0
- package/dist/onInit.js +13 -0
- package/dist/options/fromReq.d.ts +3 -0
- package/dist/options/fromReq.js +5 -0
- package/dist/options.d.ts +9 -0
- package/dist/options.js +99 -0
- package/dist/plugin.d.ts +7 -0
- package/dist/plugin.js +62 -0
- package/dist/proxy/apply.d.ts +3 -0
- package/dist/proxy/apply.js +5 -0
- package/dist/proxy/consentFallback.d.ts +5 -0
- package/dist/proxy/consentFallback.js +27 -0
- package/dist/proxy/control.d.ts +6 -0
- package/dist/proxy/control.js +36 -0
- package/dist/proxy/createProxy.d.ts +3 -0
- package/dist/proxy/createProxy.js +15 -0
- package/dist/proxy/pageRewrite.d.ts +4 -0
- package/dist/proxy/pageRewrite.js +41 -0
- package/dist/proxy/resolve.d.ts +13 -0
- package/dist/proxy/resolve.js +163 -0
- package/dist/proxy/skip.d.ts +1 -0
- package/dist/proxy/skip.js +9 -0
- package/dist/puck/ExperimentPicker.d.ts +5 -0
- package/dist/puck/ExperimentPicker.js +88 -0
- package/dist/puck/ExperimentSlot.d.ts +3 -0
- package/dist/puck/ExperimentSlot.js +16 -0
- package/dist/puck/copy.d.ts +14 -0
- package/dist/puck/copy.js +14 -0
- package/dist/puck/editor/CreateExperimentDrawer.d.ts +5 -0
- package/dist/puck/editor/CreateExperimentDrawer.js +120 -0
- package/dist/puck/editor/ExperimentSlotEditor.d.ts +3 -0
- package/dist/puck/editor/ExperimentSlotEditor.js +225 -0
- package/dist/puck/editor/cloneSlot.d.ts +3 -0
- package/dist/puck/editor/cloneSlot.js +41 -0
- package/dist/puck/editor/copy.d.ts +25 -0
- package/dist/puck/editor/copy.js +25 -0
- package/dist/puck/editor/editor.model.d.ts +16 -0
- package/dist/puck/editor/editor.model.js +33 -0
- package/dist/puck/experimentSlotField.d.ts +5 -0
- package/dist/puck/experimentSlotField.js +13 -0
- package/dist/puck/slot.model.d.ts +2 -0
- package/dist/puck/slot.model.js +11 -0
- package/dist/puck/slotConfig.d.ts +5 -0
- package/dist/puck/slotConfig.js +25 -0
- package/dist/results/aggregate.d.ts +34 -0
- package/dist/results/aggregate.js +66 -0
- package/dist/results/analyse.d.ts +79 -0
- package/dist/results/analyse.js +378 -0
- package/dist/results/cuped.d.ts +16 -0
- package/dist/results/cuped.js +31 -0
- package/dist/results/decideGuard.d.ts +3 -0
- package/dist/results/decideGuard.js +8 -0
- package/dist/results/guardrails.d.ts +17 -0
- package/dist/results/guardrails.js +10 -0
- package/dist/results/history.d.ts +13 -0
- package/dist/results/history.js +39 -0
- package/dist/results/identityCredit.d.ts +16 -0
- package/dist/results/identityCredit.js +46 -0
- package/dist/results/power.d.ts +15 -0
- package/dist/results/power.js +60 -0
- package/dist/results/rolloutUnits.d.ts +17 -0
- package/dist/results/rolloutUnits.js +26 -0
- package/dist/results/snapshot.d.ts +9 -0
- package/dist/results/snapshot.js +154 -0
- package/dist/results/srm.d.ts +9 -0
- package/dist/results/srm.js +22 -0
- package/dist/results/verdict.d.ts +82 -0
- package/dist/results/verdict.js +85 -0
- package/dist/runtime/assign.d.ts +23 -0
- package/dist/runtime/assign.js +104 -0
- package/dist/runtime/bot.d.ts +1 -0
- package/dist/runtime/bot.js +7 -0
- package/dist/runtime/cookie.d.ts +17 -0
- package/dist/runtime/cookie.js +35 -0
- package/dist/runtime/eligibility.d.ts +22 -0
- package/dist/runtime/eligibility.js +20 -0
- package/dist/runtime/header.d.ts +17 -0
- package/dist/runtime/header.js +97 -0
- package/dist/runtime/loaders.d.ts +17 -0
- package/dist/runtime/loaders.js +29 -0
- package/dist/runtime/normalisePath.d.ts +7 -0
- package/dist/runtime/normalisePath.js +15 -0
- package/dist/runtime/previewToken.d.ts +9 -0
- package/dist/runtime/previewToken.js +23 -0
- package/dist/runtime/proxyRuntime.d.ts +2 -0
- package/dist/runtime/proxyRuntime.js +22 -0
- package/dist/runtime/seed.d.ts +2 -0
- package/dist/runtime/seed.js +4 -0
- package/dist/runtime/signing.d.ts +3 -0
- package/dist/runtime/signing.js +16 -0
- package/dist/runtime/targeting.d.ts +6 -0
- package/dist/runtime/targeting.js +9 -0
- package/dist/server/context.d.ts +10 -0
- package/dist/server/context.js +59 -0
- package/dist/server/eraseUser.d.ts +7 -0
- package/dist/server/eraseUser.js +4 -0
- package/dist/server/getAssignments.d.ts +9 -0
- package/dist/server/getAssignments.js +227 -0
- package/dist/server/getFlagPoint.d.ts +11 -0
- package/dist/server/getFlagPoint.js +36 -0
- package/dist/server/headerRevision.d.ts +6 -0
- package/dist/server/headerRevision.js +10 -0
- package/dist/server/linkIdentity.d.ts +9 -0
- package/dist/server/linkIdentity.js +34 -0
- package/dist/server/metadata.d.ts +7 -0
- package/dist/server/metadata.js +24 -0
- package/dist/server/previewDraft.d.ts +7 -0
- package/dist/server/previewDraft.js +51 -0
- package/dist/server/recordContentChange.d.ts +7 -0
- package/dist/server/recordContentChange.js +150 -0
- package/dist/server/recordExposures.d.ts +7 -0
- package/dist/server/recordExposures.js +56 -0
- package/dist/server/request.d.ts +7 -0
- package/dist/server/request.js +39 -0
- package/dist/server/resolveExperimentData.d.ts +6 -0
- package/dist/server/resolveExperimentData.js +64 -0
- package/dist/server/runResults.d.ts +22 -0
- package/dist/server/runResults.js +307 -0
- package/dist/server/serverRuntime.d.ts +7 -0
- package/dist/server/serverRuntime.js +20 -0
- package/dist/server/sitemap.d.ts +3 -0
- package/dist/server/sitemap.js +6 -0
- package/dist/server/toClientAssignments.d.ts +7 -0
- package/dist/server/toClientAssignments.js +56 -0
- package/dist/server/trackConversion.d.ts +12 -0
- package/dist/server/trackConversion.js +69 -0
- package/dist/targeting/ops.d.ts +8 -0
- package/dist/targeting/ops.js +58 -0
- package/dist/transitions/addMetric.d.ts +16 -0
- package/dist/transitions/addMetric.js +126 -0
- package/dist/transitions/allocate.d.ts +9 -0
- package/dist/transitions/allocate.js +84 -0
- package/dist/transitions/archive.d.ts +9 -0
- package/dist/transitions/archive.js +46 -0
- package/dist/transitions/checkStart.d.ts +61 -0
- package/dist/transitions/checkStart.js +104 -0
- package/dist/transitions/confirmPhrases.d.ts +5 -0
- package/dist/transitions/confirmPhrases.js +18 -0
- package/dist/transitions/decide.d.ts +9 -0
- package/dist/transitions/decide.js +138 -0
- package/dist/transitions/deleteExperiment.d.ts +5 -0
- package/dist/transitions/deleteExperiment.js +66 -0
- package/dist/transitions/kernel.d.ts +31 -0
- package/dist/transitions/kernel.js +69 -0
- package/dist/transitions/makeContent.d.ts +20 -0
- package/dist/transitions/makeContent.js +411 -0
- package/dist/transitions/phaseRecord.d.ts +27 -0
- package/dist/transitions/phaseRecord.js +81 -0
- package/dist/transitions/placements.d.ts +26 -0
- package/dist/transitions/placements.js +89 -0
- package/dist/transitions/preflightData.d.ts +21 -0
- package/dist/transitions/preflightData.js +317 -0
- package/dist/transitions/releaseHoldout.d.ts +8 -0
- package/dist/transitions/releaseHoldout.js +30 -0
- package/dist/transitions/resolveCaps.d.ts +28 -0
- package/dist/transitions/resolveCaps.js +68 -0
- package/dist/transitions/start.d.ts +26 -0
- package/dist/transitions/start.js +220 -0
- package/dist/transitions/stop.d.ts +8 -0
- package/dist/transitions/stop.js +25 -0
- package/dist/types/admin.d.ts +20 -0
- package/dist/types/admin.js +1 -0
- package/dist/types/assignments.d.ts +57 -0
- package/dist/types/assignments.js +1 -0
- package/dist/types/contracts.d.ts +133 -0
- package/dist/types/contracts.js +2 -0
- package/dist/types/endpoints.d.ts +135 -0
- package/dist/types/endpoints.js +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.js +8 -0
- package/dist/types/manifest.d.ts +42 -0
- package/dist/types/manifest.js +1 -0
- package/dist/types/puck.d.ts +23 -0
- package/dist/types/puck.js +1 -0
- package/dist/types/runtime.d.ts +59 -0
- package/dist/types/runtime.js +1 -0
- package/dist/types/snapshot.d.ts +117 -0
- package/dist/types/snapshot.js +1 -0
- package/package.json +137 -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?.includes(event.eventName)) 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,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 @@
|
|
|
1
|
+
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 @@
|
|
|
1
|
+
export { defineExperimentsServerRuntime } from '../server/serverRuntime.js';
|
|
@@ -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,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,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
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -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 {};
|