@revturbine/sdk 0.7.2 → 0.7.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/dist/headless.d.ts +1454 -583
- package/dist/headless.js +2 -2
- package/dist/headless.js.map +1 -1
- package/dist/index.d.ts +1454 -583
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/types/web-sdk/react/PlacementDecisionInspector.d.ts.map +1 -1
- package/dist/types/web-sdk/react/UserProfile.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/headless.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {z}from'zod';var yT=Object.defineProperty;var vT=(t,e,n)=>e in t?yT(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var A=(t,e,n)=>vT(t,typeof e!="symbol"?e+"":e,n);function bT(){try{return "production"}catch{return}}function xT(){try{return typeof process<"u"}catch{return false}}function Ms(){let t=bT();if(t!==void 0)return t!=="production";if(xT())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}var wm="1.0.0",xf=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],ST=["slot_configs","content_overrides"];function PT(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function TT(t,e){if(!Ms())return;let n=ST.filter(r=>r in t);n.length!==0&&console.warn(`[RevTurbine] ${e} uses deprecated Playbook projection(s): ${n.join(", ")}. Move activation/triggers to local runtime state and content to Message Blocks/Placement Payloads.`);}function IT(t,e){for(let n of xf)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function CT(t){return t.artifact_type==="playbook"&&t.format_version===wm&&typeof t.playbook_handle=="string"&&t.playbook_handle.length>0&&(t.playbook_version_id===null||typeof t.playbook_version_id=="string")&&typeof t.tenant_id=="string"&&t.tenant_id.length>0&&typeof t.environment_id=="string"&&t.environment_id.length>0&&xf.every(e=>Array.isArray(t[e]))}function ET(t){return (t.project_id===void 0||typeof t.project_id=="string"&&t.project_id.length>0)&&(t.exported_at===void 0||typeof t.exported_at=="string")&&(t.schema_version===void 0||typeof t.schema_version=="string"&&t.schema_version.length>0)&&(t.bundle_schema_version===void 0||Number.isInteger(t.bundle_schema_version)&&Number(t.bundle_schema_version)>=0)}function Sf(t,e,n){if(t===void 0)return;if(!PT(t))throw new Error(`Invalid ${e}: expected top-level object`);TT(t,e),IT(t,e);let r="artifact_type"in t||"format_version"in t;if(r&&t.artifact_type!=="playbook")throw new Error(`Invalid ${e}: unsupported "artifact_type"`);if(r&&t.format_version!==wm)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==wm)throw new Error(`Invalid ${e}: unsupported legacy "version" ${String(t.version)}`);let a=typeof t.tenant_id=="string"&&t.tenant_id.length>0?t.tenant_id:r?void 0:n?.tenantId,i=typeof t.environment_id=="string"&&t.environment_id.length>0?t.environment_id:r?void 0:n?.environmentId;if(!a)throw new Error(`Invalid ${e}: missing non-empty string "tenant_id"`);if(!i)throw new Error(`Invalid ${e}: missing non-empty string "environment_id"`);if(t.playbook_handle!==void 0&&(typeof t.playbook_handle!="string"||t.playbook_handle.length===0))throw new Error(`Invalid ${e}: malformed "playbook_handle"`);if(!ET(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:s,change_set_id:u,...y}=t,C=r?t.playbook_version_id??null:u??null,I={...y,artifact_type:"playbook",format_version:wm,playbook_handle:t.playbook_handle??"default",playbook_version_id:C,tenant_id:a,environment_id:i};if(!CT(I))throw new Error(`Invalid ${e}: malformed Playbook header`);return I}function Fi(t,e,n){return Sf(t,e,n)}var Ad=864e5,kT=75;function Pf(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function RT(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=kT?"running_out":"active"}function AT(t,e,n){let r=Math.max(0,e-t),a=Math.max(0,n-t),i=Math.max(0,e-n),s=Math.max(1,Math.round(r/Ad)),u=Math.min(s,Math.floor(a/Ad)),y=Math.max(0,Math.ceil(i/Ad)),C=Math.min(100,Math.max(0,a/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:u,daysRemaining:y,daysTotal:s,progressPercent:C}}function wT(t,e){let n=Math.max(1,e),r=Math.max(0,t),a=Math.max(0,n-r),i=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:a,usageLimit:n,progressPercent:i}}function jm(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:a,usageBalances:i}=t,s=Date.parse(e.started_at),u=Date.parse(r);if(Number.isNaN(s)||Number.isNaN(u)||e.status==="not_started"||u<s)return;let y=e.trial_limit_type??"time",C=0,I=false,R,w,E,k,U,ie;if(y==="usage"){let W=e.usage_entitlement_handle??(n&&"usage_entitlement_handle"in n?n.usage_entitlement_handle:void 0),ot=e.usage_limit_value??(n&&"usage_limit_value"in n?n.usage_limit_value:void 0);if(typeof W!="string"||typeof ot!="number"||ot<1)return;let en=i?.[W]??0,pr=wT(en,ot);C=pr.progressPercent,I=pr.isExpiredByBounds,E=pr.usageConsumed,k=pr.usageRemaining,U=pr.usageLimit,ie=W;}else {let W=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(W))return;let ot=AT(s,W,u);C=ot.progressPercent,I=ot.isExpiredByBounds,R=ot.dayNumber,w=ot.daysRemaining;}let Z=Pf(e.status,I),ve=RT(Z,C),qe;e.rule_type==="reverse_trial"?qe=a:e.rule_type==="free_trial"&&n&&"plan_id"in n&&typeof n.plan_id=="string"&&(qe=n.plan_id);let ne=e.rule_type==="reverse_trial"?"reverse":"free";return {in_trial:Z==="active",trial_type:ne,...qe!==void 0?{plan_handle:qe}:{},state:ve,trial_limit_type:y,progress_percent:C,...R!==void 0?{day_number:R}:{},...w!==void 0?{days_remaining:w}:{},...ie!==void 0?{usage_entitlement_handle:ie}:{},...E!==void 0?{usage_consumed:E}:{},...k!==void 0?{usage_remaining:k}:{},...U!==void 0?{usage_limit:U}:{}}}function Tf(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let a,i=-1/0;for(let s of t){let u=Date.parse(s.started_at);if(Number.isNaN(u)||r<u)continue;let y=false;if((s.trial_limit_type??"time")==="usage")n&&typeof s.usage_entitlement_handle=="string"&&typeof s.usage_limit_value=="number"&&(y=(n[s.usage_entitlement_handle]??0)>=s.usage_limit_value);else if(s.expires_at){let I=Date.parse(s.expires_at);Number.isNaN(I)||(y=r>=I);}let C=Pf(s.status,y);C!=="active"&&C!=="converted"||u>i&&(a=s,i=u);}return a}function wd(t,e){return t.rule_type!=="reverse_trial"||t.rule_id!==e.id||!e.entitlements_during_trial||e.entitlements_during_trial.length===0?null:{trialGrantedEntitlementHandles:new Set(e.entitlements_during_trial),effectivePlanHandle:e.premium_plan_id}}function jd(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,a=-1/0;for(let i of t){if(i.status!=="active"&&i.status!=="expired"&&i.status!=="converted")continue;let s=Date.parse(i.started_at);Number.isNaN(s)||n<s||s>a&&(r=i,a=s);}return r}function Om(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:a,usageBalances:i,basePlanHandle:s}=t,u=jd(r,a);if(!u)return {trial:void 0,reverseGrants:null};if(u.rule_type==="reverse_trial"){let I=(n??[]).find(E=>E.id===u.rule_id),R=jm({instance:u,...I!==void 0?{rule:I}:{},nowIso:a,...s!==void 0?{basePlanHandle:s}:{},...i!==void 0?{usageBalances:i}:{}}),w=I!==void 0?wd(u,I):null;return {trial:R,reverseGrants:w}}let y=(e??[]).find(I=>I.id===u.rule_id);return {trial:jm({instance:u,...y!==void 0?{rule:y}:{},nowIso:a,...s!==void 0?{basePlanHandle:s}:{},...i!==void 0?{usageBalances:i}:{}}),reverseGrants:null}}function be(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Jl(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function er(...t){for(let e of t)if(typeof e=="string"&&e.trim().length>0)return e}function En(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"){let e=Number(t);return Number.isFinite(e)?e:null}return null}function ho(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function Od(t,e){return String(t||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function Zl(t){let e=String(t||"").trim().toLowerCase().replace(/\s+/g,"_").replace(/-+/g,"_");if(!e)return "unknown_event";switch(e){case "pageview":case "page_view":return "clickstream_page_view";case "click":return "clickstream_click";case "doc_view":return "clickstream_doc_view";case "checkout_started":return "clickstream_checkout_started";case "checkout_completed":return "clickstream_checkout_completed";case "payment_failed":return "clickstream_payment_failed";default:return e}}function qd(t){if(!be(t))return null;let e=Number(t.count),n=typeof t.period=="string"?t.period:"";return !Number.isFinite(e)||e<=0||n!=="session"&&n!=="day"&&n!=="week"&&n!=="month"&&n!=="lifetime"?null:{count:e,period:n}}function Dd(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function If(t){let e=t.trim().toLowerCase();return e?e==="starter"||e==="free"?["starter","free"]:e==="professional"||e==="pro"?["professional","pro"]:e==="enterprise"?["enterprise"]:[e]:[]}function Cf(t){let e=t,n=be(e.target)?e.target:void 0,r=Array.isArray(n?.plan_ids)?n.plan_ids.filter(s=>typeof s=="string"):[];if(r.length>0)return r;let a=be(t.content)?t.content:{};return Array.isArray(a.__target_plan_ids)?a.__target_plan_ids.filter(s=>typeof s=="string"):[]}function Ud(t,e){let n=Cf(t);if(n.length===0||!e)return true;let r=If(e);return r.length===0?true:n.some(a=>{let i=a.toLowerCase();return r.some(s=>i===s||i.endsWith(`_${s}`)||i.includes(s))})}function Md(t,e){if(e.length===0)return null;let n=[...e].sort((a,i)=>a.tier_position!==i.tier_position?a.tier_position-i.tier_position:a.sort_order!==i.sort_order?a.sort_order-i.sort_order:a.source_id.localeCompare(i.source_id)),r=n.findIndex(a=>a.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function fo(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function Fd(t){return t.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function Ld(t){return t==="minutes"||t==="minute"||t==="credits"||t==="credit"||t==="seats"||t==="seat"||t==="units"||t==="unit"}function gi(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t))be(r)&&typeof r.amount=="number"?e[n]=r.amount:typeof r=="number"&&(e[n]=r);return e}function qm(t){if(typeof t.plan_handle=="string"&&t.plan_handle.trim().length>0)return t.plan_handle.trim();if(typeof t.plan=="string"&&t.plan.trim().length>0)return t.plan.trim();if(be(t.plan)&&typeof t.plan.handle=="string"&&t.plan.handle.trim().length>0)return t.plan.handle.trim()}function Fs(t,e){if(!t||!Array.isArray(t.plans))return;let n;if(typeof e=="string"&&e.trim().length>0&&(n=e.trim()),!n)return;let r=n.toLowerCase();for(let a of t.plans){if(!be(a))continue;if((typeof a.unique_handle=="string"?a.unique_handle.toLowerCase():"")===r){let s=typeof a.name=="string"?a.name.trim():"";if(s.length>0)return s}}}function Dm(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function os(t){let e=String(t||"").trim().toLowerCase();return e?e.includes("gated")||e.includes("entitlement")?0:e.includes("fixed")?1:e.includes("usage")||e.includes("credit")||e.includes("seat")||e.includes("quota")||e.includes("trial")?2:e.includes("conversion")||e.includes("expansion")||e.includes("upsell")||e.includes("retention")||e.includes("winback")||e.includes("churn")?4:99:99}function Ql(t){let e=t,n=be(t.content)?t.content:{};return [En(e.score),En(e.ltv_propensity_score),En(n.score),En(n.ltv_propensity_score),En(n.ranking_score)].find(a=>a!==null)??0}function Um(t){let e=t,n=be(t.content)?t.content:{};return [En(e.priority),En(e.placement_priority),En(n.priority),En(n.placement_priority)].find(a=>a!==null)??0}function Nd(t){let e=be(t.content)?t.content:{};return [En(e.usage_percent),En(e.trial_percent_elapsed),En(e.threshold_percent)].find(r=>r!==null)??Ql(t)}var jT=new Set(["trial_started","trial_ended","trial_converted"]),OT=new Set(["trial_progress","trial_ending"]);function Vd(t){let e=be(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&jT.has(n))return 1;if(n&&OT.has(n))return 3;let r=[En(e.usage_percent),En(e.threshold_percent)].find(a=>a!==null);return r!=null&&r>=100?2:3}function Xl(t){let e=t,n=be(t.content)?t.content:{};return [En(e.server_order),En(e.order),En(e.rank),En(e.order_index),En(n.server_order),En(n.order),En(n.rank),En(n.order_index)].find(a=>a!==null)??null}function Bd(t){let e=be(t.content)?t.content:{},n=e.template_version;if(typeof n=="string"&&n.trim().length>0)return n.trim();let r=En(n);if(r!==null)return String(r);let a=e.milestone_version;if(typeof a=="string"&&a.trim().length>0)return a.trim();let i=En(a);return i!==null?String(i):null}function zd(t){let n=(be(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(a=>typeof a=="string"?a.trim():En(a)).filter(a=>a!==null&&a!=="").map(a=>String(a));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=En(n);return r!==null?[String(r)]:[]}function Li(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>Li(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${Li(r)}`).join(",")}}`}function $d(t){return be(t)?{in_trial:typeof t.in_trial=="boolean"?t.in_trial:false,...typeof t.trial_type=="string"?{trial_type:t.trial_type}:{},...typeof t.plan_handle=="string"?{plan_handle:t.plan_handle}:{},...typeof t.day_number=="number"?{day_number:t.day_number}:{},...typeof t.days_remaining=="number"?{days_remaining:t.days_remaining}:{}}:{in_trial:false}}var DT=/^[a-z0-9._]{1,100}$/,ls={Persisted:"persisted",Transient:"transient"},hi={Internal:"internal",External:"external"},ti={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},UT="readOnly";function fa(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[UT]===true||(e[n]=r);}return z.object(e)}function Br(t){let e=fa(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(DT)}):e}var {Unrestricted:ea}=ti,{Transient:ta,Persisted:FT}=ls,{Internal:Ls,External:Ni}=hi;z.object({page:z.coerce.number().int().min(1).default(1).meta(ea),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(ea)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni});var Un=z.object({created_at:z.string().datetime().meta({...ea,readOnly:true}),updated_at:z.string().datetime().meta({...ea,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni}),jn=z.object({id:z.string().min(1).meta({...ea,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni}),Mn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...ea,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ls});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni});var Kd=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni}),kf=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni});var Mm=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni}),Rf=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ls});var Vi=z.string().min(1).max(200),hr=z.string().min(1).max(100),Fm=z.string().max(500).optional(),Ca=z.record(z.string(),z.unknown()).default({}),Ns=z.number().int().min(10).max(100).multipleOf(10),Lm=z.string().datetime().nullable().default(null),lr=z.object({environment_id:z.string().min(1).default("production").meta({...ea,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ls}),fr=z.object({playbook_version_id:z.string().nullable().default(null).meta(ea),is_current:z.boolean().default(true).meta({...ea,readOnly:true}),is_deleted:z.boolean().default(false).meta({...ea,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...ea,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...ea,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...ea,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ls}),LT=jn.merge(Un).merge(Mn).merge(lr).extend({handle:hr.meta({...ea,readOnly:true}),active:z.boolean().default(true).meta({...ea,readOnly:true})});function zr(t){return LT.meta({id:t,"x-revturbine-schema-persistence":FT,"x-revturbine-schema-exposure":Ls})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ls});z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ls});var Af=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":Ni}),NT=new Set(Kd.options);function Nm(t,e){if(!be(t))return null;let n=typeof t.output_id=="string"?t.output_id:"";if(!n)return null;let r=be(t.surface)?t.surface:{},a=NT.has(r.type)?r.type:"custom",i=be(t.cta_path)?t.cta_path:be(t.ui_path)?t.ui_path:{};return {output_id:n,category:typeof t.category=="string"?t.category:"unknown",surface:{...typeof r.template=="string"?{template:r.template}:{},type:a,...typeof r.slot_id=="string"?{slot_id:r.slot_id}:{}},content:be(t.content)?t.content:{},...be(t.promotion)?{promotion:t.promotion}:{},cta_path:i,ui_path:i,rule_id:typeof t.rule_id=="string"?t.rule_id:"",decision_id:typeof t.decision_id=="string"?t.decision_id:e(),config_version:typeof t.config_version=="string"?t.config_version:"unknown",present_upsell:typeof t.present_upsell=="boolean"?t.present_upsell:false}}var VT="__no_dim__";function Of(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),a=new Map;for(let i of t){let s=n(i)??VT,u=a.get(s)??[];u.push(i),a.set(s,u);}for(let i of a.values())if(!i.some(s=>r.has(s)))return false;return true}var BT=999999;function zT(t){return t==null||t==="unlimited"||t===BT}function ec(t){return zT(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function $T(t,e){switch(t.kind){case "plan":return e.currentPlanId!=null&&t.id===e.currentPlanId||e.currentPlanHandle!=null&&t.id===e.currentPlanHandle;case "plan_variation":return e.currentPlanVariationId!=null&&t.id===e.currentPlanVariationId;case "addon":return e.addonIds?.includes(t.id)??false;case "addon_variation":return e.addonVariationIds?.includes(t.id)??false;default:return false}}function qf(t,e,n){return t.map(r=>{let a=r.targets!=null&&r.targets.length>0?r.targets.some(s=>$T(s,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),i=Of(r.segmentIds,e.segmentIds,s=>n?.[s]);return {rule:r,matchesPlan:a,matchesSegment:i,matched:a&&i}})}function Df(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return ec(e.limit_value)??0;case "credits":return ec(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return ec(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function Uf(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let a of t){let i=e(a);(n===void 0||i>r)&&(n=a,r=i);}return n}function KT(t){return Uf(t,e=>Df(e.rule))?.rule}function Hd(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let a=qf(r,n,t.segmentDimensions);return KT(a.filter(i=>i.matched))}function HT(t){let e=t.segment_ids;if(Array.isArray(e))return e.filter(r=>typeof r=="string");let n=t.segment_id??t.segmentId;return typeof n=="string"&&n!=="all"?[n]:[]}function GT(t,e,n){let r=new Map;for(let a of n)typeof a.handle=="string"&&r.set(a.handle,typeof a.dimension_id=="string"?a.dimension_id:void 0);return Of(HT(t),e,a=>r.get(a))}function wf(t,e,n){if(!t)return {status:"allowed",allowed:true};switch(e){case "hard_block":return {status:"denied",allowed:false,reason:n};case "block_with_upsell":case "soft_block":return {status:"denied",allowed:false,reason:`${n}_block_with_upsell`};case "degrade":return {status:"limited",allowed:true,reason:`${n}_degraded`};case "allow_overage":return {status:"allowed",allowed:true,reason:`${n}_overage`};default:return {status:"limited",allowed:false,reason:n}}}function tc(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:a,segmentIds:i,usageBalances:s,userUsage:u,trialGrantedEntitlementHandles:y,effectivePlanHandle:C}=t,R=(r.entitlements??[]).find(Ct=>typeof Ct?.unique_handle=="string"&&Ct.unique_handle===e),w=typeof R?.unique_handle=="string"?R.unique_handle:e,E=typeof R?.unique_handle=="string"?R.unique_handle:void 0,k=!!(y&&y.size>0&&(y.has(e)||y.has(w)||E!==void 0&&y.has(E)));if(k&&(C===void 0||C===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let ie=String((k&&C?C:a)||"").trim().toLowerCase(),ve=(r.plans??[]).find(Ct=>typeof Ct.unique_handle=="string"&&Ct.unique_handle.toLowerCase()===ie),qe=typeof ve?.unique_handle=="string"?ve.unique_handle:ie||void 0;if(qe===void 0)return {status:"denied",allowed:false,reason:"no_plan_identity"};let W=(r.entitlement_rules??[]).filter(Ct=>!((typeof Ct.entitlement_id=="string"?Ct.entitlement_id:typeof Ct.entitlementId=="string"?Ct.entitlementId:"")!==w||!(Array.isArray(Ct.targets)?Ct.targets.filter(Nt=>be(Nt)&&Nt.kind==="plan"&&typeof Nt.id=="string").map(Nt=>Nt.id):Array.isArray(Ct.plan_ids)?Ct.plan_ids.filter(Nt=>typeof Nt=="string"):Array.isArray(Ct.planIds)?Ct.planIds.filter(Nt=>typeof Nt=="string"):[]).includes(qe)||!GT(Ct,i,r.segments??[])));if(W.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let ot=(()=>{let Ct=(r.entitlements??[]).find(Dn=>Dn.unique_handle===w);return Ct&&typeof Ct.type=="string"?Ct.type:void 0})(),en=Ct=>{let Dn=be(Ct)?Ct:{},Nt={...be(Dn.type_fields)?Dn.type_fields:be(Dn.typeFields)?Dn.typeFields:{},...Dn};return typeof Nt.kind!="string"&&ot&&(Nt.kind=ot),Nt},pr=Uf(W,Ct=>{let Dn=en(Ct);return Df({kind:typeof Dn.kind=="string"?Dn.kind:"",fields:Dn})})??W[0],le=en(pr);typeof le.kind=="string"?le.kind:void 0;let fn=Ct=>{let Dn=u?.[Ct];if(be(Dn)&&typeof Dn.amount=="number")return Dn.amount},_n=n?.used??(Number.isFinite(s[e])?s[e]:void 0)??(Number.isFinite(s[w])?s[w]:void 0)??fn(e)??fn(w)??0;return Vm(le,_n)}function jf(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function Mf(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function Vm(t,e){let n=typeof t.kind=="string"?t.kind:void 0;if(n==="feature"){let r=t.enabled!==false;return {status:r?"allowed":"denied",allowed:r,reason:r?void 0:"feature_not_enabled_for_plan"}}if(n==="usage_limit"||n==="limit"){let r=ec(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?jf(wf(e>=r,t.enforcement,"usage_limit_reached"),r,e):{status:"allowed",allowed:true}}if(n==="credits"){let r=t.allowance_value!==void 0?t.allowance_value:t.allowance,a=r===void 0?void 0:ec(r),i=Number(t.initial_grant),s=a!==void 0&&a>=0?a:Number.isFinite(i)&&i>=0?i:void 0;return s!==void 0&&Number.isFinite(s)?jf(wf(e>=s,t.enforcement,"credit_balance_exhausted"),s,e):{status:"allowed",allowed:true}}if(n==="capability_tier"){let r=typeof t.tier_name=="string"?t.tier_name:void 0;return {status:"allowed",allowed:true,...r?{current_tier:r}:{}}}return {status:"allowed",allowed:true}}function Gd(t,e,n,r,a=80){let i=e.get(t);if(i)return i;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let u=Number(r[t]);if(u>0)return {limit:u,warningPercent:a}}return null}var YT=0;function WT(){return `core_${Date.now()}_${++YT}`}function Ff(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var Yd=class{constructor(t){this.registry=t.registry,this.interactionTracker=t.interactionTracker,this.capEnforcer=t.capEnforcer,this.options=t.options??{},this.placements=t.placements??new Map,this.placementResolver=t.placementResolver;}async evaluate(t){let e=WT(),n=this.placements.get(t.placementId);if(this.interactionTracker){let i=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(i.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:i.reason?[i.reason]:[],suppressionReason:i.reason,content:Ff(`${n?.name??t.placementId} suppressed`,"Suppressed due to recent interaction state.","Continue")}}let a={__providers:await this.registry.resolveAll()};if(t.traits&&(a.traits=t.traits),this.placementResolver){let i=await this.placementResolver(t,n,a);if(i.visible&&i.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let s=this.capEnforcer.enforce(i.output);if(!s.allowed)return {...i,visible:false,reasonCodes:[...i.reasonCodes,s.reason??"suppressed_by_cap"],suppressionReason:s.reason}}return i}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:Ff("No resolver","No placement resolver configured.","")}}async evaluateBatch(t){return Promise.all(t.map(e=>this.evaluate(e)))}async checkEntitlement(t,e){let n=await this.registry.resolveAll();return this.deriveEntitlementResult(t,n,e)}trackInteraction(t){this.interactionTracker?.track(t);}async resolveProviders(){return this.registry.resolveAll()}deriveEntitlementResult(t,e,n){let r=this.options.defaultEntitlementPolicy??"allow",a=e.entitlements;if(!a)return r==="allow"?{status:"allowed",allowed:true,reason:"no_entitlement_provider"}:{status:"denied",allowed:false,reason:"no_entitlement_provider_default_deny"};let i=a.entries[t];if(!i)return r==="allow"?{status:"allowed",allowed:true,reason:"entitlement_not_found_default_allow"}:{status:"denied",allowed:false,reason:"entitlement_not_found_default_deny"};let s=a.usage?.[t];if(e.rules){let u=Hd(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(u){let y={kind:u.kind,...u.fields};if(Mf(y.kind))return Vm(y,n?.used??s?.used??0)}else return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"}}return s&&n?.used!==void 0&&s.limit>0&&n.used>=s.limit?{status:"denied",allowed:false,reason:"usage_limit_exceeded",limit:s.limit,used:n.used,remaining:Math.max(0,s.limit-n.used)}:{status:i.status,allowed:i.status==="allowed",reason:i.reason,limit:s?.limit,used:s?.used,remaining:s?.remaining}}};var Lf=["high","medium","low"];function nc(t,e){return t==="active"?Lf.includes(e):t===e}var JT="activity_level";function Nf(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),a=t.value,i=t.field===JT;switch(t.operator){case "eq":return i?nc(a,r):r===a;case "neq":return i?!nc(a,r):r!==a;case "gt":return Number(r)>Number(a);case "lt":return Number(r)<Number(a);case "gte":return Number(r)>=Number(a);case "lte":return Number(r)<=Number(a);case "contains":return r.includes(a);case "in":{let s=a.split(",").map(u=>u.trim());return i?s.some(u=>nc(u,r)):s.includes(r)}default:return false}}function rc(t,e,n={}){return t.filter(r=>{let a=!!(r.predicates&&r.predicates.length>0),i=r.experiment_handle??r.experiment_id;if(i){if(!Object.prototype.hasOwnProperty.call(n,i))return false;if(!a)return true}else if(!a)return false;return r.predicates.every(s=>Nf(s,e))}).map(r=>r.handle)}function Vf(t){let e={};for(let n of t){let r=n.experiment_handle??n.experiment_id;r&&(e[n.handle]=r);}return e}function Bf(t,e,n={}){for(let r of e){let a=t[r];if(!a)continue;let i=n[a];if(typeof i=="string")return {experiment_id:a,variant_key:i}}}function Wd(t,e){let n=String(t.field||""),r=String(t.operator||""),a=String(t.value||""),i=e[n],s=typeof i=="string"||typeof i=="number"||typeof i=="boolean"?i:null,u=Nf(t,e);return {field:n,operator:r,expected:a,actual:s,matched:u}}function Bm(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function ac(t){let e=2166136261;for(let a=0;a<t.length;a+=1)e^=t.charCodeAt(a),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);let n=new Uint8Array(8),r=new DataView(n.buffer);return r.setUint32(0,e>>>0),r.setUint32(4,e*1103515245>>>0),Bm(n)}var Jd={async sha256Base64Url(t){return ac(t)},randomHex(t){let e="0123456789abcdef",n="";for(let r=0;r<t;r+=1)n+=e[Math.floor(Math.random()*16)];return n}};var zf=z.enum(["session","day","week","month"]),$f=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array($f),cap:z.object({count:z.number().int().min(1),period:zf})});function ZT(t,e){switch(t){case "session":case "lifetime":return 0;case "day":return e-1440*60*1e3;case "week":return e-10080*60*1e3;case "month":return e-720*60*60*1e3;default:return 0}}function Hf(t,e){return `${t}:${e}`}function ic(t){let{now:e}=t;if(t.sessionCooldownMinutes!=null&&t.sessionCooldownMinutes>0&&t.lastSessionPresentationAt!=null&&e-t.lastSessionPresentationAt<t.sessionCooldownMinutes*6e4)return {allowed:false,reason:"session_cooldown"};if(t.rules&&t.candidate){let n=t.candidate,r=t.counters??new Map;for(let a of t.rules){if(!a.group.some(y=>y.kind==="template"?y.id===n.templateId:y.kind==="slot"?y.id===n.slotId:false))continue;let s=Hf(a.id,a.cap.period);if((r.get(s)??0)>=a.cap.count)return {allowed:false,reason:"cap_hit",matchedRuleId:a.id}}}if(t.perPayload){let{policies:n,seenAt:r,cooldownUntil:a}=t.perPayload;if(a!=null&&Number.isFinite(a)&&a>e)return {allowed:false,reason:"suppressed_by_payload_cooldown"};for(let i of n)for(let s of i.rules){let u=ZT(s.period,e);if(r.filter(C=>C>=u&&C<=e).length>=s.count)return {allowed:false,reason:`suppressed_by_payload_cap_${s.period}`}}}return {allowed:true}}z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});function Zd(t,e){return t.target_plan_ids.length>0&&e.currentPlanId&&!t.target_plan_ids.includes(e.currentPlanId)?{eligible:false,reason:"plan_mismatch"}:t.target_billing_periods.length>0&&e.billingPeriod&&!t.target_billing_periods.includes(e.billingPeriod)?{eligible:false,reason:"billing_period_mismatch"}:(t.category==="upsell"||t.category==="trial_conversion")&&e.planHandle==="enterprise"?{eligible:false,reason:"enterprise_upsell_suppressed"}:{eligible:true}}var Gf={Named:"named",Minted:"minted"},Yf="x-revturbine-schema-identity";function ni(t="handle"){return {[Yf]:{kind:Gf.Named,handleField:t}}}function ri(t="handle"){return {[Yf]:{kind:Gf.Minted,handleField:t}}}var xn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},wa={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},XT="x-revturbine-context",eI="x-revturbine-in-config",tI="x-revturbine-sdk-input",nI="x-revturbine-source",rI="x-revturbine-deprecation",aI={[xn.Playbook]:wa.Customer,[xn.Branding]:wa.Customer,[xn.Billing]:wa.Stripe,[xn.Metering]:wa.Customer,[xn.CustomerOperations]:wa.Runtime,[xn.EventIngestion]:wa.Runtime};function Kn(t,e){return {[XT]:t,[eI]:e.inConfig??t===xn.Playbook,[tI]:e.sdkInput,[nI]:e.source??aI[t]}}function zm(t){return {deprecated:true,[rI]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var ln=t=>z.object({items:z.array(t)}),tr=z.object({error:z.string(),code:z.string(),request_id:z.string()}),M=t=>t,cn=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()});async function Xd(t,e){let n=ho(t.pageRoute),r=[t.tenantId,n,t.placementName.trim().toLowerCase(),String(t.placementScopeKey||"").trim().toLowerCase()].join("::");if(e)try{return (await e.sha256Base64Url(r)).slice(0,22)}catch{}return ac(r).slice(0,22)}function ep(t){return [t.slotId||"",t.surfaceType||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function tp(t){let e=Li({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:ho(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${ac(e)}`}function t_(t){if(t.length<=1)return t;let e=new Set;for(let r of t){let a=r.surface.template;if(!a)continue;let i=zd(r);if(i.length!==0)for(let s of t){if(s.output_id===r.output_id||s.surface.template!==a)continue;let u=Bd(s);u&&i.includes(u)&&e.add(s.output_id);}}let n=new Map;for(let r of t){if(!r.surface.template)continue;let a=n.get(r.surface.template)??[];a.push(r),n.set(r.surface.template,a);}for(let r of n.values()){if(r.length<=1)continue;let a=r.map(s=>{let u=be(s.content)?s.content:{};return {output:s,order:En(u.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(s=>Number.isFinite(s.order));if(a.length<=1)continue;let i=a.reduce((s,u)=>u.order>s.order?u:s);for(let s of a)s.output.output_id!==i.output.output_id&&e.add(s.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function Wf(t){let n=(be(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function iI(t,e,n){if(n===1){let r=t.surface.slot_id,a=e.surface.slot_id;if(typeof r=="string"&&r&&typeof a=="string"&&a)return {leftKey:r,rightKey:a}}else if(n===0){let r=Wf(t),a=Wf(e);if(r&&a)return {leftKey:r,rightKey:a}}return {leftKey:t.surface.type??"",rightKey:e.surface.type??""}}function $m(t){if(t.length<=1)return t;let e=new Set;for(let n=0;n<t.length;n+=1)for(let r=n+1;r<t.length;r+=1){let a=t[n],i=t[r];if(a.surface.type!==i.surface.type)continue;let s=os(a.category),u=os(i.category);if(s!==u){s<u?e.add(i.output_id):e.add(a.output_id);continue}if(s===0||s===1){let{leftKey:y,rightKey:C}=iI(a,i,s);y===C&&e.add(i.output_id);}}return t.filter(n=>!e.has(n.output_id))}function np(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(y=>os(y.category)===1)),r.length===0)return null;let a=t_(r);if(a.length===0)return null;let i=a.some(y=>Xl(y)!==null),s=i?a:$m(a);return s.length===0?null:[...s].sort((y,C)=>{if(i){let U=Xl(y),ie=Xl(C);if(U!==null&&ie!==null&&U!==ie)return U-ie;if(U!==null&&ie===null)return -1;if(U===null&&ie!==null)return 1}let I=os(y.category),R=os(C.category),w=I-R;if(w!==0)return w;if(I===2){let U=Vd(y)-Vd(C);if(U!==0)return U;let ie=Nd(C)-Nd(y);if(ie!==0)return ie}let E=Ql(C)-Ql(y);if(E!==0)return E;let k=Um(C)-Um(y);return k!==0?k:y.output_id.localeCompare(C.output_id)})[0]??null}function sI(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function rp(t,e,n,r){let a=be(r)?r:{},i=be(a.decision)?a.decision:{},s=be(a.content)?a.content:be(i.content)?i.content:{},u=typeof i.visible=="boolean"?i.visible:typeof a.visible=="boolean"?a.visible:true;return {placementId:t,requestId:typeof a.request_id=="string"?a.request_id:e,visible:u,decisionSource:"remote",reasonCodes:Array.isArray(a.reason_codes)?a.reason_codes.filter(y=>typeof y=="string"):[],content:sI(typeof s.title=="string"?s.title:`${n} recommendation`,typeof s.body=="string"?s.body:"Treatment selected by RevTurbine decisioning.",typeof s.cta=="string"?s.cta:"Continue")}}function Km(t){let e=[],n=[t,t.content,be(t.content)?t.content.payload:void 0,be(t.content)?t.content.placement:void 0,be(t.content)?t.content.surface:void 0];for(let r of n){if(!be(r))continue;let a=be(r.caps)?r.caps:void 0;if(!a)continue;let i=[],s=qd(a.max_per_period);s&&i.push(s);let u=Number(a.cooldown_days),y=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:i,...y!==void 0?{cooldownMs:y}:{}});}return e}function ap(t,e,n,r,a="impression"){if(os(t.category)<=1)return {allowed:true};let i=Km(t);if(i.length===0)return {allowed:true};let s={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(R=>Number.isFinite(R)&&R>0)},u=ic({perPayload:{policies:i,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!u.allowed)return {allowed:false,reason:u.reason,updatedState:s};let y=[...s.seenAt,r],C=a==="dismiss"?i.map(R=>R.cooldownMs).filter(R=>typeof R=="number"&&Number.isFinite(R)&&R>0):[],I=C.length>0?r+Math.max(...C):void 0;return {allowed:true,updatedState:{seenAt:y,...I!==void 0?{cooldownUntil:I}:{}}}}function ip(t){return !t||t.trialActive!==true||t.trialState==="expired"?null:typeof t.trialProgressPercent=="number"&&t.trialProgressPercent>=0?Math.min(100,t.trialProgressPercent):typeof t.trialDaysTotal=="number"&&typeof t.trialDaysRemaining=="number"&&t.trialDaysTotal>0?Math.max(0,t.trialDaysTotal-t.trialDaysRemaining)/t.trialDaysTotal*100:typeof t.trialUsageLimit=="number"&&typeof t.trialUsageConsumed=="number"&&t.trialUsageLimit>0?Math.min(100,Math.max(0,t.trialUsageConsumed/t.trialUsageLimit*100)):null}function Qd(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=ip(e);return n===null?false:n<=5}case "trial_progress":return e.trialActive===true&&e.trialState!=="expired"&&e.trialState!=="converted";case "trial_ending":return e.trialActive!==true||e.trialLimitType==="usage"||typeof e.trialDaysRemaining!="number"?false:e.trialDaysRemaining<=t.daysBeforeEnd;case "trial_ended":return e.trialState==="expired";case "trial_converted":return e.trialState==="converted";default:return false}}function n_(t,e){let n=t.filter(s=>s.trialTrigger?.kind==="trial_progress");if(n.length===0)return null;let r=n.filter(s=>s.trialTrigger?.kind!=="trial_progress"?false:e>=s.trialTrigger.progressPercent);if(r.length===0)return null;let a=r[0];for(let s of r.slice(1)){let u=s.trialTrigger.kind==="trial_progress"?s.trialTrigger.progressPercent:-1,y=a.trialTrigger.kind==="trial_progress"?a.trialTrigger.progressPercent:-1;(u>y||u===y&&s.entryOrder<a.entryOrder)&&(a=s);}let i=r.filter(s=>s!==a).map(s=>s.ruleId).filter(s=>typeof s=="string"&&s.length>0);return {winner:a,supersededIds:i}}function r_(t){if(!(!t||typeof t.type!="string"))switch(t.type){case "trial_started":return {kind:"trial_started"};case "trial_progress":return typeof t.progress_percent=="number"?{kind:"trial_progress",progressPercent:t.progress_percent}:void 0;case "trial_ending":return typeof t.days_before_end=="number"?{kind:"trial_ending",daysBeforeEnd:t.days_before_end}:void 0;case "trial_ended":return {kind:"trial_ended"};case "trial_converted":return {kind:"trial_converted"};default:return}}function oI(t,e){let n=e.grants;if(!n)return;let r=n.user?.[t]??n.instance?.[t]??n.account?.[t];switch(r?.allocation){case "account_pool":case "per_user_pooled":return n.account?.[t]??r;case "per_instance":return n.instance?.[t]??r;case "per_user":return n.user?.[t]??r;default:return r}}function lI(t,e){let n=oI(t,e);if(n&&typeof n.limit=="number")return {used:typeof n.used=="number"?n.used:0,limit:n.limit};let r=e.usage?.[t];return r&&typeof r.limit=="number"?{used:r.used,limit:r.limit,remaining:r.remaining}:null}function cI(t,e){if(!e)return null;let n=lI(t.entitlementHandle,e);return !n||!Number.isFinite(n.limit)||n.limit<=0?null:t.kind==="credit_threshold"&&typeof n.remaining=="number"?(n.limit-n.remaining)/n.limit*100:Number.isFinite(n.used)?n.used/n.limit*100:null}function Jf(t,e){if(!t)return true;let n=cI(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:Je}=ti,{Persisted:Hm,Transient:cs}=ls,{External:Oa}=hi,a_=Kn(xn.Playbook,{sdkInput:true});Kn(xn.Playbook,{inConfig:false,sdkInput:false});var mI=Kn(xn.Playbook,{inConfig:false,sdkInput:true}),uI=Kn(xn.Playbook,{inConfig:false,sdkInput:false,source:wa.Runtime}),dI=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),pI={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function gI(t){return pI[t]??[]}function hI(t,e){return gI(e).includes(t)}var i_=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":cs,"x-revturbine-schema-exposure":Oa}),s_=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":cs,"x-revturbine-schema-exposure":Oa}),fI=z.object({count:z.number().int().positive().meta(Je),period:s_.meta(Je)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":cs,"x-revturbine-schema-exposure":Oa});z.object({surface_type:z.string().min(1).meta(Je),rules:z.array(fI).meta(Je),cooldown_ms:z.number().int().nonnegative().optional().meta(Je)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Hm,"x-revturbine-schema-exposure":Oa,...ti.Operational,...mI});var _I=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":cs,"x-revturbine-schema-exposure":Oa}),yo=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Je,readOnly:true}),name:Vi.meta(Je),handle:hr.meta(Je),description:Fm.meta(Je),category:i_.meta(Je),drag_order_in_category:z.number().int().default(0).meta(Je),surface_slot_id:z.string().optional().meta(Je),entitlement_id:z.string().optional().meta(Je),tier_threshold:z.string().optional().meta(Je),threshold_percent:Ns.optional().meta(Je),trial_type:z.enum(["free","reverse"]).optional().meta(Je),trigger_type:z.string().optional().meta(Je),trial_progress_percent:z.number().min(0).max(100).optional().meta(Je),days_before_end:z.number().int().min(0).optional().meta(Je),qualifier:dI.optional().meta(Je),activation_window_start:z.string().datetime().optional().meta(Je),activation_window_end:z.string().datetime().optional().meta(Je),metadata:Ca.meta(Je)}).meta({id:"Placement","x-revturbine-schema-persistence":Hm,"x-revturbine-schema-exposure":Oa,...a_,...ni()}),yI=zr("PlacementAnchor"),vI=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":cs,"x-revturbine-schema-exposure":Oa}),bI=z.object({code:vI.meta(Je),message:z.string().min(1).meta(Je),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Je)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":cs,"x-revturbine-schema-exposure":Oa}),Zf=yo.extend({warnings:z.array(bI).optional().meta(Je)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":cs,"x-revturbine-schema-exposure":Oa}),xI=z.object({label:z.string().min(1).max(200).meta(Je),cta_path_type:_I.meta(Je),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Je)}).meta({id:"CtaObject","x-revturbine-schema-persistence":cs,"x-revturbine-schema-exposure":Oa}),oc=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Je,readOnly:true}),handle:hr.meta({...Je,readOnly:true}),placement_id:z.string().min(1).meta(Je),drag_order:z.number().int().default(0).meta(Je),target_plan_ids:z.array(z.string()).default([]).meta(Je),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Je),target_segments:z.array(z.string()).default([]).meta(Je),surface_slot_ids:z.array(z.string()).default([]).meta(Je),surface_template_id:z.string().min(1).meta(Je),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Je),cta_list:z.array(xI).default([]).meta(Je),max_per_period:z.number().int().min(0).nullable().default(null).meta(Je),max_period_unit:s_.default("session").meta(Je),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Je),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Je),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Je),recommendation_plan_override:z.string().optional().meta(Je)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Hm,"x-revturbine-schema-exposure":Oa,...a_,...ri()}),SI=zr("PlacementPayloadAnchor"),PI=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Je),surface_type:Kd.meta(Je),surface_template_ids:z.array(z.string()).default([]).meta(Je),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Je),first_seen:z.string().datetime().meta({...Je,readOnly:true}),last_seen:z.string().datetime().meta({...Je,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Je),placement_count:z.number().int().min(0).default(0).meta({...Je,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Hm,"x-revturbine-schema-exposure":Oa,...uI,...ni("surface_slot_handle")}),TI=fa(yo),II=fa(oc);({"/api/placement-anchors":{get:M({operationId:"listPlacementAnchors",requestParams:{query:cn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:ln(yI)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:M({operationId:"listPlacements",requestParams:{query:cn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:ln(yo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:M({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Br(yo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Zf}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:M({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:yo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:M({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:TI}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zf}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:M({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:M({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:yo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:M({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:i_,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:M({operationId:"listPlacementPayloadAnchors",requestParams:{query:cn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:ln(SI)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:M({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:cn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:ln(oc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:M({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Br(oc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:oc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:M({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:II}}},responses:{200:{description:"Updated",content:{"application/json":{schema:oc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:M({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:M({operationId:"listSurfaceSlots",requestParams:{query:cn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:ln(PI)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function Qf(t,e,n){if(!t)return true;if(!hI(t.qualifier,e))return false;switch(t.qualifier){case "none_always_on":return true;case "payment_failed":return n?.paymentFailed===true;case "payment_at_risk":return n?.paymentAtRisk===true;default:return true}}function Xf(t,e,n){if(!t||!t.tierThreshold)return true;let r=e.get(t.entitlementHandle);if(!r||r.length===0)return false;let a=r.indexOf(t.tierThreshold);if(a<0)return false;let i=n?.tiers?.[t.entitlementHandle];return (i?r.indexOf(i):-1)<a}function Gm(t){let e=Array.isArray(t.payloads)?t.payloads:[],n=new Map((Array.isArray(t.messageBlocks)?t.messageBlocks:[]).map(s=>[s.block_id,s])),r=Array.isArray(t.uiPaths)?t.uiPaths:[],a=Array.isArray(t.promotions)?t.promotions:[],i=Array.isArray(t.tokens)?t.tokens:[];return {listPayloads:s=>e.filter(u=>u.surface_template_id===s),getMessageBlockById:s=>n.get(s),getUiPathById:s=>r.find(u=>u.id===s||u.name===s),getPromotionById:s=>a.find(u=>u.id===s||u.name===s),listPersonalizationTokens:()=>i}}function lc(t,e){let n={...t};for(let r of e){let a=t[r.token];if(a==null||!r.value_map)continue;let i=String(a),s=r.value_map[i];s!==void 0&&(n[r.token]=s);}return n}function sp(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"};return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(r,a)=>{let i=e[a];if(i===void 0){let s=n[a];s&&(i=e[s]);}return i===void 0?r:String(i)})}function op(t,e){let n={};for(let[r,a]of Object.entries(t))typeof a=="string"?n[r]=sp(a,e):n[r]=a;return n}function o_(t,e){return op(t,e)}function lp(t,e,n,r,a,i,s){let u=n.filter(w=>w.surface_template_id===t&&w.status==="active");if(u.length===0)return null;let y=new Map(r.map(w=>[w.block_id,w])),C=new Set(e.segmentIds),I=lc(i,a),R=s?.segmentDimensions;for(let w of u){let E=w.default_message_block_id,k,U=w.ui_path_id,ie=w.promotion_id;if(w.segment_content_map){if(R&&Object.keys(R).length>0){let ne=new Map;for(let W of w.segment_content_map){let ot=W.dimension;if(!ot)continue;let en=ne.get(ot)??[];en.push(W),ne.set(ot,en);}if(ne.size>0){let W=true,ot;for(let[,en]of ne){let pr=en.find(le=>C.has(le.segment_id));if(!pr){W=false;break}ot||(ot=pr);}if(W&&ot)E=ot.message_block_id,k=ot.segment_id,ot.ui_path_id&&(U=ot.ui_path_id),ot.promotion_id&&(ie=ot.promotion_id);else if(!W)continue}else for(let W of w.segment_content_map)if(C.has(W.segment_id)){E=W.message_block_id,k=W.segment_id,W.ui_path_id&&(U=W.ui_path_id),W.promotion_id&&(ie=W.promotion_id);break}}else for(let ne of w.segment_content_map)if(C.has(ne.segment_id)){E=ne.message_block_id,k=ne.segment_id,ne.ui_path_id&&(U=ne.ui_path_id),ne.promotion_id&&(ie=ne.promotion_id);break}}let Z=y.get(E);if(!Z||Z.status!=="active")continue;let ve={...Z.default_content};if(Z.segment_overrides){let ne=k?Z.segment_overrides.find(W=>W.segment_value_id===k):Z.segment_overrides.find(W=>C.has(W.segment_value_id));ne&&(ve={...ve,...ne.content},k=ne.segment_value_id);}let qe=o_(ve,I);return {payload:w,messageBlock:Z,resolvedContent:qe,matchedSegmentId:k,uiPathId:U,promotionId:ie}}return null}async function Ym(t,e,n,r,a){let s=(await Promise.resolve(n.listPayloads(t))).filter(I=>I.status==="active");if(s.length===0)return null;let u=new Set(e.segmentIds),y=a??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),C=lc(r,y);for(let I of s){let R=I.default_message_block_id,w,E=I.ui_path_id,k=I.promotion_id;if(I.segment_content_map){for(let ne of I.segment_content_map)if(u.has(ne.segment_id)){R=ne.message_block_id,w=ne.segment_id,ne.ui_path_id&&(E=ne.ui_path_id),ne.promotion_id&&(k=ne.promotion_id);break}}let U=await Promise.resolve(n.getMessageBlockById(R));if(!U||U.status!=="active")continue;let ie={...U.default_content};if(U.segment_overrides){let ne=w?U.segment_overrides.find(W=>W.segment_value_id===w):U.segment_overrides.find(W=>u.has(W.segment_value_id));ne&&(ie={...ie,...ne.content},w=ne.segment_value_id);}let Z=o_(ie,C),ve;E&&n.getUiPathById&&(ve=await Promise.resolve(n.getUiPathById(E)));let qe;return k&&n.getPromotionById&&(qe=await Promise.resolve(n.getPromotionById(k))),{payload:I,messageBlock:U,resolvedContent:Z,matchedSegmentId:w,uiPathId:E,promotionId:k,uiPath:ve??void 0,promotion:qe??void 0}}return null}var CI={modal_overlay:"modal",banner_placement:"banner",in_page_card:"in_page",inline_gate_message:"in_page",usage_counter:"in_page",button:"button",email:"email",full_page:"full_page"};function EI(t,e){return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(n,r)=>{let a=e[r];return a==null?`{{${r}}}`:String(a)})}function kI(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=EI(r,t);continue}e[n]=r;}return e}function RI(t){if(!t?.path)return {type:"dismiss"};let e=t.path,n=t.config??{};return e==="open_checkout"?{type:"open_checkout_modal",plan_handle:typeof n.purchase=="string"?n.purchase:void 0}:e==="view_plans"?{type:"navigate_to_plans"}:e==="open_rt_placement"?{type:"open_rt_placement",placement_handle:typeof n.placement_handle=="string"?n.placement_handle:void 0}:{type:e,...n}}function AI(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function wI(t){if(!t||typeof t!="object")return;let e="type"in t&&typeof t.type=="string"?t.type:void 0,n="qualifier"in t?t.qualifier:void 0;return AI(e,n)}function jI(t,e,n){if(!(t!=="usage_threshold"&&t!=="credit_threshold"&&t!=="seat_threshold")&&!(typeof e!="string"||e.length===0)&&!(typeof n!="number"||!Number.isFinite(n)))return {kind:t,entitlementHandle:e,thresholdPercent:n}}function OI(t,e){if(!t||typeof t!="object")return;let n="type"in t&&typeof t.type=="string"?t.type:void 0,r="threshold_percent"in t?t.threshold_percent:void 0;return jI(n,e,r)}function qI(t,e,n){if(t!=="entitlement_gate"||typeof e!="string"||e.length===0)return;let r=typeof n=="string"&&n.length>0?n:void 0;return {kind:"entitlement_gate",entitlementHandle:e,tierThreshold:r}}function DI(t,e){if(!t||typeof t!="object")return;let n="type"in t&&typeof t.type=="string"?t.type:void 0,r="tier_threshold"in t?t.tier_threshold:void 0;return qI(n,e,r)}function UI(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function MI(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function FI(t,e){let n={...CI};for(let u of t.surface_templates??[])n[u.id]=u.surface_type;let r=new Map;for(let u of t.plans??[])r.set(u.unique_handle,u.unique_handle);let a=new Map;for(let u of t.entitlements??[])u.tier_definitions?.length&&a.set(u.unique_handle,u.tier_definitions.map(y=>y.handle));let i=new Map,s=new Map;for(let u of e.placements){let y=u.payloads[0];if(!y)continue;let C=y.surfaces[0];if(!C)continue;let I=C.template_id,R=n[I]??"custom",w={...C.fields};C.ctas?.[0]&&(w.cta_label=C.ctas[0].label),C.ctas?.[1]&&(w.secondary_cta_label=C.ctas[1].label);let E=RI(C.ctas?.[0]),k=Array.isArray(y.target?.plan_ids)?y.target.plan_ids:[],U=UI(u.trigger),ie=MI(u.trigger),Z=r_(u.trigger),ve=OI(u.trigger,U),qe=wI(u.trigger),ne=DI(u.trigger,U),W={output_id:y.id,category:u.category,surface:{template:I,type:R,slot_id:u.id},content:{...w,__target_plan_ids:k,...U?{__trigger_entitlement_handle:U}:{},...Z?{__trigger_kind:Z.kind}:{}},cta_path:E,rule_id:u.id,decision_id:y.id,config_version:Dm(t),present_upsell:true},ot=i.get(I)??[];ot.push({output:W,entryOrder:u.order??0,entryCategory:u.category,triggerEntitlementHandle:U,triggerSlotId:ie,trialTrigger:Z,thresholdTrigger:ve,qualifierTrigger:qe,entitlementGateTrigger:ne}),i.set(I,ot);let en=u.id.replace(/^pl_/,"");s.set(en,W),s.set(u.id,W);}for(let u of i.values())u.sort((y,C)=>y.entryOrder-C.entryOrder);return {outputsByTemplate:i,outputsByName:s,planHandleToId:r,tierLaddersByHandle:a}}function LI(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let a=new Map;for(let s of e.placements){let u=s.payloads[0]?.surfaces?.[0]?.template_id;u&&a.set(s.id,u);}let i=[];for(let s of r){let u=s.content_link?.message_block_id;if(!u)continue;let y=a.get(s.placement_id);y&&i.push({payload_id:s.payload_id,tenant_id:"",name:s.payload_id,surface_template_id:y,default_message_block_id:u,ui_path_id:s.content_link?.ui_path_id,promotion_id:s.content_link?.promotion_id,status:"active"});}if(i.length!==0)return Gm({payloads:i,messageBlocks:n,uiPaths:t.content_ui_paths,promotions:t.content_promotions,tokens:t.personalization_tokens})}function l_(t){let{source:e,impressionHistory:n}=t,{outputsByTemplate:r,outputsByName:a,planHandleToId:i,tierLaddersByHandle:s}=FI(e.exportedConfig,e.placements),u=LI(e.exportedConfig,e.placements),y=Vf(e.exportedConfig.segments??[]);function C(I,R,w,E){let k=Array.isArray(I.content.__target_plan_ids)?I.content.__target_plan_ids.filter(ie=>typeof ie=="string"):[],U=Array.isArray(I.content.__target_billing_periods)?I.content.__target_billing_periods.filter(ie=>typeof ie=="string"):[];return Zd({target_plan_ids:k,target_billing_periods:U,category:I.category},{currentPlanId:R,planHandle:w,billingPeriod:E}).eligible}return async(I,R,w)=>{let E=w?.__providers,k=E?.plan?.currentPlanHandle,U=E?.plan?.billingPeriod,ie=k?i.get(k):void 0,Z=Nt=>typeof Nt=="string"?Nt:"",ve=Array.isArray(R?.metadata?.surface_template_ids)?R.metadata.surface_template_ids:void 0,qe,ne=[];if(ve&&ve.length>0){let Nt=[];for(let qt of ve){let Ur=r.get(qt);Ur&&Nt.push(...Ur);}if(Nt.length===0)return e_(I,"no_candidates_for_template","No placements configured for this surface template");Nt.sort((qt,Ur)=>qt.entryOrder-Ur.entryOrder);let yn=R?.metadata?.entitlement_handle,$n=R?.metadata?.surface_slot_category,vn=$n?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[$n]:void 0,dn=Nt;if(yn){let qt=Nt.filter(Ur=>Ur.triggerEntitlementHandle===yn);qt.length>0&&(dn=qt);}let Sr=R?.metadata?.surface_slot_id;if(Sr){let qt=dn.filter(Ur=>Ur.triggerSlotId===Sr);qt.length>0&&(dn=qt);}if(R?.metadata?.fixedOnly===true&&(dn=dn.filter(qt=>qt.entryCategory==="fixed")),vn&&$n!=="fixed"&&dn.length>1){let qt=dn.filter(Ur=>vn.includes(Ur.entryCategory));qt.length>0&&(dn=qt);}n&&(dn=dn.filter(qt=>!n.isHiddenSync(qt.output.rule_id??""))),dn=dn.filter(qt=>Qd(qt.trialTrigger,E?.plan)),dn=dn.filter(qt=>Jf(qt.thresholdTrigger,E?.entitlements)),dn=dn.filter(qt=>Qf(qt.qualifierTrigger,qt.entryCategory,E?.plan)),dn=dn.filter(qt=>Xf(qt.entitlementGateTrigger,s,E?.entitlements));let Cn,lt=[],gr=ip(E?.plan);if(gr!==null&&dn.length>1){let qt=dn.map(go=>({ruleId:go.output.rule_id??void 0,entryOrder:go.entryOrder,trialTrigger:go.trialTrigger,output:go.output})),Ur=n_(qt,gr);if(Ur){Cn=Ur.winner,lt=Ur.supersededIds;let go=Ur.winner.ruleId;dn=dn.filter(bf=>bf.trialTrigger?.kind!=="trial_progress"||(bf.output.rule_id??void 0)===go);}}let Ia;for(let qt of dn)if(C(qt.output,ie,k,U)){qe=qt.output,Ia=qt;break}Ia&&Cn&&Cn.ruleId===(Ia.output.rule_id??void 0)&<.length>0&&(qe={...qe,content:{...qe.content,__superseded_placement_ids:lt}}),qe||(ne=["no_eligible_candidate"]);}else {let Nt=R?.name,yn=(Nt?a.get(Nt):void 0)??a.get(I.placementId),$n;if(yn)for(let Dr of r.values()){let vn=Dr.find(dn=>dn.output===yn);if(vn){$n=vn;break}}yn&&n?.isHiddenSync(yn.rule_id??"")?ne=["placement_retired"]:yn&&!Qd($n?.trialTrigger,E?.plan)?ne=["trial_trigger_unmet"]:yn&&!Jf($n?.thresholdTrigger,E?.entitlements)?ne=["threshold_trigger_unmet"]:yn&&!Qf($n?.qualifierTrigger,$n?.entryCategory??yn.category,E?.plan)?ne=["qualifier_trigger_unmet"]:yn&&!Xf($n?.entitlementGateTrigger,s,E?.entitlements)?ne=["entitlement_gate_unmet"]:yn&&C(yn,ie,k,U)?qe=yn:yn?ne=["plan_target_mismatch"]:ne=["placement_not_found"];}if(!qe){let Nt=ne[0]??"placement_not_found";return e_(I,Nt,"Placement not configured")}let W=qe.content,ot=qe.surface.template;if(u&&ot){let Nt={userId:typeof I.userId=="string"?I.userId:"",segmentIds:E?.segments?.segmentIds??[]},yn=await Ym(ot,Nt,u,{});yn&&(W={...qe.content,...yn.resolvedContent});}let en={...W},pr=typeof en.entitlement=="string"?en.entitlement:typeof en.__trigger_entitlement_handle=="string"?en.__trigger_entitlement_handle:void 0,le=pr?E?.entitlements?.usage?.[pr]:void 0;if(le){en.usage_remaining=Number.isFinite(le.remaining)?le.remaining:0,en.usage_limit=Number.isFinite(le.limit)?le.limit:0,en.usage_current=Number.isFinite(le.used)?le.used:0,en.usage_percent=le.limit>0?Math.min(100,Math.round(le.used/le.limit*100)):0;let Nt=le.reset_date;typeof Nt=="string"&&Nt.length>0&&(en.reset_date=Nt);}let tn=kI(en),fn=Bf(y,E?.segments?.segmentIds??[],E?.experiments?.assignments),_n={...qe,content:tn,...fn},or=!((qe.category==="upsell"||qe.category==="trial_conversion")&&k==="enterprise");return {placementId:I.placementId,requestId:`local_${Date.now()}`,visible:or,decisionSource:"fallback",reasonCodes:or?[]:["plan_tier_suppressed"],content:{header:Z(_n.content.header),body:Z(_n.content.body),cta_label:Z(_n.content.cta_label),title:Z(_n.content.header),cta:Z(_n.content.cta_label)},output:_n}}}function e_(t,e,n){return {placementId:t.placementId,requestId:`local_${Date.now()}`,visible:false,decisionSource:"fallback",reasonCodes:[e],content:{header:n,body:"",cta_label:"",title:n,cta:""}}}function bo(t){return l_({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}function vo(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim().length>0){let e=Number(t);if(Number.isFinite(e))return e}}function sc(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function NI(t,e){let n=vo(t.limit_value??t.usage_limit??t.limit??t.allowance??t.initial_grant);if(n!==void 0)return n;let r=t.usageLimits;if(r&&typeof r=="object"&&!Array.isArray(r)){let a=(e??"").toLowerCase();for(let[i,s]of Object.entries(r))if(i.toLowerCase()===a)return vo(s)}}function VI(t){let e=vo(t.warning_threshold_percent??t.warning_percentage??t.threshold_percent??t.threshold);if(e!==void 0)return Math.max(0,Math.min(100,e))}function c_(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[E,k]of Object.entries(t.base))(typeof k=="string"||typeof k=="number")&&(e[E]=k);let r=n?.plan?.currentPlanHandle,a=n?.plan?.currentPlanName??r;typeof a=="string"&&a.length>0&&(e.plan_name=a);let i=n?.plan?.trialDaysRemaining;i!==void 0&&Number.isFinite(i)&&(e.trial_days_remaining=i);let s=n?.plan?.trialDaysTotal;s!==void 0&&Number.isFinite(s)&&(e.trial_days_total=s);let u=n?.traits?.traits??{};for(let[E,k]of Object.entries(u))(typeof k=="string"||typeof k=="number")&&(e[E]=k);let y=n?.entitlements?.usage??{};for(let[E,k]of Object.entries(y)){let U=sc(E);if(!U)continue;let ie=vo(k.used),Z=vo(k.remaining),ve=vo(k.limit);if(ie!==void 0&&(e[`${U}_usage_current`]=ie,e.usage_current===void 0&&(e.usage_current=ie),e.current_usage===void 0&&(e.current_usage=ie)),ve!==void 0&&(e[`${U}_usage_limit`]=ve,e.usage_limit===void 0&&(e.usage_limit=ve),e.current_limit===void 0&&(e.current_limit=ve)),Z!==void 0)e[`${U}_usage_remaining`]=Z,e.usage_remaining===void 0&&(e.usage_remaining=Z);else if(ie!==void 0&&ve!==void 0){let ne=Math.max(0,ve-ie);e[`${U}_usage_remaining`]=ne,e.usage_remaining===void 0&&(e.usage_remaining=ne);}if(ie!==void 0&&ve!==void 0&&ve>0){let ne=Math.min(100,Math.round(ie/ve*100));e[`${U}_usage_percent`]=ne,e.usage_percent===void 0&&(e.usage_percent=ne);}let qe=k.reset_date;typeof qe=="string"&&qe.length>0&&(e[`${U}_reset_date`]=qe,e.reset_date===void 0&&(e.reset_date=qe));}let C=n?.rules?.entitlementRules??{};for(let[E,k]of Object.entries(C)){if(!Array.isArray(k)||k.length===0)continue;let U=k.find(ne=>ne.kind==="usage_limit"||ne.kind==="usage_rate"||ne.kind==="credits"||ne.kind==="seat");if(!U)continue;let ie=sc(E);if(!ie)continue;let Z=U.fields??{},ve=NI(Z,r);ve!==void 0&&e[`${ie}_usage_limit`]===void 0&&(e[`${ie}_usage_limit`]=ve);let qe=VI(Z);qe!==void 0&&(e[`${ie}_usage_warning_threshold_percent`]=qe);}t.userName&&t.userName.length>0&&(e.user_name=t.userName);let I=n?.plan?.currentPlanPrice;typeof I=="string"&&I.length>0&&(e.plan_price=I),t.upgradePlan?.name&&(e.upgrade_plan_name=t.upgradePlan.name),t.upgradePlan?.price&&(e.upgrade_plan_price=t.upgradePlan.price),t.trialPlanName&&t.trialPlanName.length>0&&(e.trial_plan_name=t.trialPlanName),t.promoDiscount&&t.promoDiscount.length>0&&(e.promo_discount=t.promoDiscount),t.featuresLostOnDowngrade&&t.featuresLostOnDowngrade.length>0&&(e.features_lost_on_downgrade=t.featuresLostOnDowngrade);let R=t.effectiveGrants;if(R)for(let[E,k]of Object.entries(R)){if(k.allocation==="per_user"||k.allocation==="per_user_pooled"||!k.allocation){let U=sc(E);if(!U)continue;k.used!==void 0&&e[`${U}_usage_current`]===void 0&&(e[`${U}_usage_current`]=k.used),k.limit!==void 0&&e[`${U}_usage_limit`]===void 0&&(e[`${U}_usage_limit`]=k.limit);}if(k.enforcement&&(k.status==="limited"||k.status==="denied")){let U=sc(E);U&&e[`${U}_enforcement`]===void 0&&(e[`${U}_enforcement`]=k.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=k.enforcement);}}let w=n?.rules?.entitlementRules??{};for(let[E,k]of Object.entries(w)){if(!Array.isArray(k))continue;let U=sc(E);if(U)for(let ie of k){if(ie.kind==="credits"){let Z=e[`${U}_usage_remaining`];Z!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=Z);}if(ie.kind==="seat"){let Z=e[`${U}_usage_current`],ve=e[`${U}_usage_limit`];Z!==void 0&&e.seat_count===void 0&&(e.seat_count=Z),ve!==void 0&&e.seat_limit===void 0&&(e.seat_limit=ve);}}}if(t.featureInteractions&&R){let{invokedFeatureHandles:E,interactionCounts:k,topFeaturesByEngagement:U}=t.featureInteractions,ie=new Set(E),Z=new Set;for(let[ne,W]of Object.entries(R))(W.status==="denied"||W.status==="limited")&&Z.add(ne);let ve=0,qe=0;for(let ne of E)Z.has(ne)&&(ve++,k&&(qe+=k[ne]??0));if(e.gated_features_used_count=ve,k&&(e.gated_action_count=qe),U){let ne=U.find(W=>!ie.has(W)&&Z.has(W));ne&&(e.top_unused_gated_feature=ne);}if(n?.plan?.trialActive){let ne=0;for(let W of E)W in R&&ne++;e.trial_features_used=ne;}}return e}function cp(t,e){let n={};for(let[r,a]of Object.entries(e))a!==void 0&&(n[r]=a);return {...t,...n,custom:{...t.custom||{},...e.custom||{}},entitlements:{...t.entitlements||{},...e.entitlements||{}},usage:{...t.usage||{},...e.usage||{}},personalization:{...t.personalization||{},...e.personalization||{}}}}function Wm(t,e,n){let r={};for(let[a,i]of Object.entries(t))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(r[a]=i);e&&r.plan===void 0&&(r.plan=e);for(let[a,i]of Object.entries(n))r[a]===void 0&&(r[a]=i);return r}function Jm(t,e,n){let r=qm(t),a=Fs(e,r),i=a??r,s={...t.custom??{}};for(let[y,C]of Object.entries(t.entitlements??{}))s[y]===void 0&&(s[y]=C);r?s.plan_handle=r:delete s.plan_handle,a&&s.plan_name===void 0&&(s.plan_name=a),i&&s.plan===void 0&&(s.plan=i);let u={...gi(t.usage),...n??{}};for(let[y,C]of Object.entries(u))s[y]===void 0&&(s[y]=C);return {effectivePlan:i,traits:s,usage:u,segmentTraits:Wm(s,i,u)}}function BI(t){return {plan_handle:t.plan_handle??null,plan:t.plan??null,usage:t.usage??{},custom:t.custom??{},trial:t.trial??null,instances:t.instances??[]}}function mp(t,e=Jd){return e.sha256Base64Url(Li(BI(t)))}function up(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:a,usageThresholdLookup:i}=t,s={};for(let[Z,ve]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(Z)||(s[Z]=ve);let u={...s},y=Fs(n,qm(e));y?u.plan_name=y:typeof e.plan=="object"&&e.plan?.name&&(u.plan_name=e.plan.name);let C={...gi(e.usage),...r},I=Object.entries(C).filter(([,Z])=>Number.isFinite(Z)).sort(([Z],[ve])=>Z.localeCompare(ve)),R,w,E,k,U=[];for(let[Z,ve]of I){let qe=a.get(Z)??fo(Z);if(!qe)continue;let W=i(Z)?.limit,ot=W!==void 0?Math.max(0,W-ve):void 0,en=W!==void 0&&W>0?Math.min(100,Math.round(ve/W*100)):void 0;u[`${qe}_usage_current`]=ve,W!==void 0&&(u[`${qe}_usage_limit`]=W),ot!==void 0&&(u[`${qe}_usage_remaining`]=ot),en!==void 0&&(u[`${qe}_usage_percent`]=en),U.push({prefix:qe,current:ve,...W!==void 0?{limit:W}:{},...ot!==void 0?{remaining:ot}:{},...en!==void 0?{percent:en}:{}}),R===void 0&&(R=ve,w=W,E=ot,k=en);}let ie=U.find(Z=>Z.prefix==="core")??U.find(Z=>Z.limit!==void 0)??U[0];return ie&&(R=ie.current,w=ie.limit,E=ie.remaining,k=ie.percent),R!==void 0&&(u.usage_current=R),w!==void 0&&(u.usage_limit=w),E!==void 0&&(u.usage_remaining=E),k!==void 0&&(u.usage_percent=k),u}function dp(t,e,n){let r=[];for(let[a,i]of Object.entries(e)){let s=t[a]||0;if(!Number.isFinite(i)||i<=s)continue;let u=n(a);if(!u)continue;let y=s/u.limit*100,C=i/u.limit*100;C>=u.warningPercent&&y<u.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:a,current_usage:i,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(C)),threshold:u.warningPercent}),i>=u.limit&&s<u.limit&&r.push({type:"usage_limit_reached",entitlement_handle:a,current_usage:i,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(C)),threshold:100});}return r}function pp(t,e,n=3){if(!t.in_trial)return e==="none"?"none":"expired";let r=Number(t.days_remaining);if(Number.isFinite(r)&&r<=0)return "expired";if(Number.isFinite(r)&&r<=n)return "expiring";let a=Number(t.day_number);if(Number.isFinite(a)&&a>0&&Number.isFinite(r)){let i=a+Math.max(0,r);if(i>0&&a>=Math.ceil(i/2))return "midpoint"}return "none"}var m_="__self__",zI={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},gp={plans:{sortKey:"unique_handle",indexBy:["unique_handle"],fields:{unique_handle:{},name:{},tier_position:{},sort_order:{},visibility:{}}},entitlements:{sortKey:"unique_handle",indexBy:["unique_handle"],fields:{unique_handle:{},name:{},type:{},unit:{},tier_definitions:{}}},entitlement_rules:{sortKey:"id",fields:{id:{},entitlement_id:{reference:{table:"entitlements",by:"unique_handle",kind:"one",onDelete:"cascade"}},targets:{},segment_ids:{reference:{table:"segments",by:"handle",kind:"list",onDelete:"restrict"}},kind:{include:"never"},unit:{include:"never"},tier_name:{include:"never"},tier_description:{include:"never"},enabled:{},limit_value:{},enforcement:{},tier_value:{},period_scope:{},included_count:{},seat_type_id:{},initial_grant:{},allowance_value:{},rollover_enabled:{},max_balance:{},reset_period:{},max_seats:{},rate_value:{},amount_cents:{},currency:{},current_usage:{include:"never"},allocation:{}}},segments:{sortKey:"handle",indexBy:["handle"],fields:{name:{},handle:{},predicates:{},dimension_id:{},experiment_handle:{},experiment_id:{}}},placement_slots:{sortKey:"id",indexBy:["id","placement_handle"],fields:{id:{},label:{},description:{},surface_type:{},placement_handle:{},template:{}}},slot_configs:{sortKey:"slot_id",fields:{slot_id:{reference:{table:"placement_slots",by:"id",kind:"one",onDelete:"cascade"}},active:{},triggers:{}}},surface_templates:{sortKey:"id",indexBy:["id"],fields:{id:{},surface_type:{},fields:{}}},placements:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},category:{},trigger:{discriminator:{keyed_on:{table:m_,via:"__self__",field:"trigger.type"},variants:{surface_render:["type","slot_id"],entitlement_gate:["type","entitlement_handle","tier_threshold"],usage_threshold:["type","entitlement_handle","threshold_percent"],credit_threshold:["type","entitlement_handle","threshold_percent"],seat_threshold:["type","entitlement_handle","threshold_percent"],trial_started:["type","trial_type"],trial_progress:["type","progress_percent"],trial_ending:["type","days_before_end"],trial_ended:["type"],trial_converted:["type"],qualifier:["type","qualifier"]}}},payloads:{},order:{}}},placement_payloads:{sortKey:"payload_id",fields:{payload_id:{},placement_id:{reference:{table:"placements",by:"id",kind:"one",onDelete:"cascade"}},target:{chipResolution:zI},caps:{},created_at:{},updated_at:{},source_mode:{},surfaces:{},content_link:{},surface_slot_ids:{},remind_later_minutes:{}}},content_ui_paths:{sortKey:"name",fields:{name:{},action_type:{},plan_handle:{reference:{table:"plans",by:"unique_handle",kind:"optional",onDelete:"detach"}},promotion_id:{reference:{table:"content_promotions",by:"id",kind:"optional",onDelete:"detach"}},placement_handle:{reference:{table:"placement_slots",by:"placement_handle",kind:"optional",onDelete:"detach"}},url:{},tour_id:{},target_billing_period:{},description:{}}},content_promotions:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},discount:{},type:{},status:{}}},personalization_tokens:{sortKey:"token",indexBy:["token"],fields:{token:{},label:{},description:{},category:{},data_source:{},example_value:{},value_map:{},format:{}}},message_blocks:{sortKey:"block_id",indexBy:["block_id"],fields:{block_id:{},tenant_id:{},name:{},surface_template_id:{reference:{table:"surface_templates",by:"id",kind:"optional",onDelete:"detach"}},default_content:{},segment_overrides:{},child_blocks:{},tokens_used:{},status:{},created_at:{},updated_at:{}}}};var u_=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(u_).default([]),days_before_end:z.number().int().min(0).max(365).nullable().default(null),trial_type:z.enum(["free","reverse"]).nullable().default(null)});z.object({threshold_percent:z.number().int().min(0).max(100),trial_type:z.enum(["free","reverse"]).nullable().default(null)});var {Unrestricted:Se}=ti,{Persisted:Pp,Transient:_a}=ls,{Internal:g_,External:na}=hi,h_=Kn(xn.Playbook,{sdkInput:true}),HI=Kn(xn.Playbook,{inConfig:false,sdkInput:false}),f_=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),Xm=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),GI=z.enum(kf).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),YI=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),__=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),fp=z.object({entitlement_id:z.string().min(1).meta(Se),entitlement_handle:z.string().min(1).meta(Se),status:GI.meta(Se),limit:z.number().optional().meta(Se),used:z.number().optional().meta(Se),allocation:Xm.optional().meta(Se),enforcement:__.optional().meta(Se),source:YI.optional().meta(Se),plan_id:z.string().optional().meta(Se),segment_id:z.string().optional().meta(Se),seat_type_id:z.string().optional().meta(Se),rule_id:z.string().optional().meta(Se)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na,...ti.Operational});z.object({account:z.record(z.string(),fp).optional().meta(Se),instance:z.record(z.string(),fp).optional().meta(Se),user:z.record(z.string(),fp).optional().meta(Se)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na,...ti.Operational});var WI=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),JI=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),y_=z.object({kind:JI.meta(Se),id:z.string().min(1).meta(Se)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),ZI=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),Co=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Se,readOnly:true}),name:Vi.meta(Se),handle:hr.meta(Se),customer_facing_description:z.string().max(500).optional().meta(Se),type:Mm.meta(Se),unit:z.string().max(100).optional().meta(Se),period_scope:f_.optional().meta(Se),allocation:Xm.optional().meta(Se),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Se),sort_order:z.number().int().default(0).meta(Se),metadata:Ca.meta(Se)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Pp,"x-revturbine-schema-exposure":na,...h_,...ni()}),QI=zr("EntitlementAnchor"),Oo=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Se,readOnly:true}),handle:hr.meta({...Se,readOnly:true}),entitlement_id:z.string().min(1).meta(Se),targets:z.array(y_).min(1).meta(Se),segment_ids:z.array(z.string()).default([]).meta(Se),visibility:WI.default("public").meta(Se),period_scope:f_.optional().meta(Se),instance:z.string().max(100).optional().meta(Se),reset_period:ZI.optional().meta(Se),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Se),enforcement:__.optional().meta(Se),warning_threshold_percent:Ns.optional().meta(Se),overage_price_ref:z.string().optional().meta(Se),grace_period_hours:z.number().int().min(0).optional().meta(Se),tier_value:z.string().optional().meta(Se),rate_value:z.number().optional().meta(Se),initial_grant:z.number().optional().meta(Se),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Se),rollover_enabled:z.boolean().optional().meta(Se),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Se),seat_type_id:z.string().optional().meta(Se),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Se),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Se),stripe_metered_price_id:z.string().optional().meta(Se),enabled:z.boolean().optional().meta(Se),allocation:Xm.optional().meta(Se),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Se),amount_cents:z.number().int().optional().meta(Se),currency:z.string().optional().meta(Se)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Pp,"x-revturbine-schema-exposure":g_,...h_,...ri()}),XI=zr("EntitlementRuleAnchor");Oo.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var e0=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),t0=z.object({code:e0.meta(Se),message:z.string().min(1).meta(Se),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Se)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),_p=Oo.extend({warnings:z.array(t0).optional().meta(Se)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":na}),yp=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({handle:hr.meta({...Se,readOnly:true}),rule_id:z.string().min(1).meta(Se),experiment_id:z.string().min(1).meta(Se),variant_name:z.string().min(1).max(200).meta(Se),is_control:z.boolean().default(false).meta(Se),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Se)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Pp,"x-revturbine-schema-exposure":g_,...HI,...ri()}),n0=fa(Co),r0=fa(Oo);({"/api/entitlement-anchors":{get:M({operationId:"listEntitlementAnchors",requestParams:{query:cn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:ln(QI)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:M({operationId:"listEntitlementRuleAnchors",requestParams:{query:cn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:ln(XI)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:M({operationId:"listEntitlements",requestParams:{query:cn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:ln(Co)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:M({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Br(Co)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:M({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:M({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:n0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:M({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:M({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:cn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:ln(Oo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:M({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Br(Oo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:M({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:r0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:M({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:M({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:M({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:cn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:ln(yp)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:M({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Br(yp)}}},responses:{201:{description:"Created",content:{"application/json":{schema:yp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:ut}=ti,{Persisted:gc,Transient:hc}=ls,{Internal:_i}=hi,v_=Kn(xn.Playbook,{sdkInput:true}),b_=Kn(xn.Playbook,{inConfig:false,sdkInput:true}),a0=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":hc,"x-revturbine-schema-exposure":_i}),Tp=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":hc,"x-revturbine-schema-exposure":_i}),x_=z.object({name:Vi.meta(ut),handle:hr.meta(ut),plan_id:z.string().nullable().optional().meta(ut),segment_id:z.string().nullable().optional().meta(ut),trial_limit_type:Tp.default("time").meta(ut),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ut),grace_period_days:z.number().int().min(0).default(0).meta(ut),usage_entitlement_handle:z.string().min(1).optional().meta(ut),usage_limit_value:z.number().int().min(1).optional().meta(ut),require_payment_method:z.boolean().default(false).meta(ut),auto_convert:z.boolean().default(true).meta(ut),convert_to_plan_id:z.string().optional().meta(ut),fallback_plan_id:z.string().optional().meta(ut),limit_per_customer:z.number().int().min(1).default(1).meta(ut),is_active:z.boolean().default(true).meta(ut),metadata:Ca.meta(ut)}),xo=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...ut,readOnly:true})}).merge(x_).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":_i,...v_,...ni()}),i0=zr("FreeTrialRuleAnchor"),s0=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":hc,"x-revturbine-schema-exposure":_i}),S_=z.object({name:Vi.meta(ut),handle:hr.meta(ut),premium_plan_id:z.string().min(1).meta(ut),fallback_plan_id:z.string().min(1).meta(ut),segment_id:z.string().nullable().optional().meta(ut),trial_limit_type:Tp.default("time").meta(ut),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ut),usage_entitlement_handle:z.string().min(1).optional().meta(ut),usage_limit_value:z.number().int().min(1).optional().meta(ut),start_policy:s0.default("signup").meta(ut),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(ut),entitlements_during_trial:z.array(z.string()).default([]).meta(ut),is_active:z.boolean().default(true).meta(ut),metadata:Ca.meta(ut)}),So=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...ut,readOnly:true})}).merge(S_).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":_i,...v_,...ni()}),o0=zr("ReverseTrialRuleAnchor"),P_=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":hc,"x-revturbine-schema-exposure":_i}),T_=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":hc,"x-revturbine-schema-exposure":_i}),Po=jn.merge(Un).merge(Mn).extend({trial_limit_policy:P_.default("1_per_lifetime").meta(ut),eligibility_scope:T_.default("per_customer").meta(ut)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":_i,...b_}),To=jn.merge(Un).merge(Mn).extend({trial_limit_policy:P_.default("1_per_lifetime").meta(ut),eligibility_scope:T_.default("per_customer").meta(ut)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":_i,...b_}),Zm=jn.merge(Un).merge(Mn).extend({customer_id:z.string().min(1).meta(ut),rule_id:z.string().min(1).meta(ut),rule_type:z.enum(["free_trial","reverse_trial"]).meta(ut),plan_id:z.string().min(1).meta(ut),status:a0.default("active").meta(ut),started_at:z.string().datetime().meta({...ut,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(ut),trial_limit_type:Tp.default("time").meta(ut),usage_entitlement_handle:z.string().min(1).optional().meta(ut),usage_limit_value:z.number().int().min(1).optional().meta(ut),converted_at:Lm.meta(ut),cancelled_at:Lm.meta(ut),metadata:Ca.meta(ut)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":_i});({"/api/free-trial-rule-anchors":{get:M({operationId:"listFreeTrialRuleAnchors",requestParams:{query:cn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:ln(i0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:M({operationId:"listFreeTrialRules",requestParams:{query:cn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:ln(xo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:M({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:xo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:M({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:xo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:M({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:M({operationId:"listReverseTrialRuleAnchors",requestParams:{query:cn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:ln(o0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:M({operationId:"listReverseTrialRules",requestParams:{query:cn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:ln(So)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:M({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:So}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:M({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:So.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:So}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:M({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:M({operationId:"listFreeTrialSettings",requestParams:{query:cn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:ln(Po)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:M({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:M({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Po.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:M({operationId:"listReverseTrialSettings",requestParams:{query:cn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:ln(To)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:M({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:M({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:To.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:M({operationId:"listTrialInstances",requestParams:{query:cn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:ln(Zm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:M({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Zm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:M({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Zm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:M({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:Zm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Jt,Financial:Qm}=ti,{Persisted:fc,Transient:eu}=ls,{External:Bi}=hi,l0=Kn(xn.Playbook,{sdkInput:true}),c0=Kn(xn.Playbook,{sdkInput:false}),Ip=Kn(xn.Billing,{sdkInput:false}),us=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":eu,"x-revturbine-schema-exposure":Bi}),_c=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":eu,"x-revturbine-schema-exposure":Bi}),tu=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":eu,"x-revturbine-schema-exposure":Bi}),Eo=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),name:Vi.meta(Jt),handle:hr.meta(Jt),tier_position:z.number().int().min(0).default(0).meta(Jt),sort_order:z.number().int().default(0).meta(Jt),visibility:us.default("public").meta(Jt),metadata:Ca.meta(Jt)}).meta({id:"Plan","x-revturbine-schema-persistence":fc,"x-revturbine-schema-exposure":Bi,...l0,...ni()}),m0=zr("PlanAnchor"),ko=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),handle:hr.meta({...Jt,readOnly:true}),plan_id:z.string().min(1).meta(Jt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Jt),segment_id:z.string().nullable().default(null).meta(Jt),price_amount:z.number().min(0).meta(Qm),pricing_model:_c.meta(Jt),visibility:us.default("public").meta(Jt),stripe_price_id:z.string().optional().meta(Jt),price_source:tu.default("static").meta(Jt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":fc,"x-revturbine-schema-exposure":Bi,...Ip,...ri()}),u0=zr("PlanVariationAnchor"),Ro=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),name:Vi.meta(Jt),handle:hr.meta(Jt),sort_order:z.number().int().default(0).meta(Jt),visibility:us.default("public").meta(Jt),metadata:Ca.meta(Jt)}).meta({id:"AddOn","x-revturbine-schema-persistence":fc,"x-revturbine-schema-exposure":Bi,...c0,...ni()}),d0=zr("AddOnAnchor"),Ao=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),handle:hr.meta({...Jt,readOnly:true}),addon_id:z.string().min(1).meta(Jt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Jt),segment_id:z.string().nullable().default(null).meta(Jt),price_amount:z.number().min(0).meta(Qm),pricing_model:_c.meta(Jt),visibility:us.default("public").meta(Jt),stripe_price_id:z.string().optional().meta(Jt),price_source:tu.default("static").meta(Jt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":fc,"x-revturbine-schema-exposure":Bi,...Ip,...ri()}),p0=zr("AddOnVariationAnchor"),g0=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":eu,"x-revturbine-schema-exposure":Bi}),wo=jn.merge(Un).merge(Mn).extend({stripe_price_id:z.string().min(1).meta(Jt),stripe_product_id:z.string().min(1).meta(Jt),billing_period:g0.meta(Jt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Qm),currency:Rf.meta(Qm),pricing_model:_c.meta(Jt),nickname:z.string().nullable().default(null).meta(Jt),is_mock:z.boolean().default(false).meta(Jt),last_updated_from_stripe:Lm.meta(Jt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":fc,"x-revturbine-schema-exposure":Bi,...Ip}),h0=fa(Eo),f0=fa(ko),_0=fa(Ro),y0=fa(Ao),v0=fa(wo);({"/api/plan-anchors":{get:M({operationId:"listPlanAnchors",requestParams:{query:cn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:ln(m0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:M({operationId:"listPlans",requestParams:{query:cn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:ln(Eo)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:M({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(Eo)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Eo}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:M({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Eo}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:M({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:h0}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Eo}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:M({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:M({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:M({operationId:"listPlanVariationAnchors",requestParams:{query:cn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:ln(u0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:M({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:cn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:ln(ko)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:M({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(ko)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:ko}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:M({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:ko}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:M({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:f0}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:ko}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:M({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:M({operationId:"listAddOnAnchors",requestParams:{query:cn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:ln(d0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:M({operationId:"listAddOns",requestParams:{query:cn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:ln(Ro)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:M({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(Ro)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:M({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:M({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:_0}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:M({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:M({operationId:"listAddOnVariationAnchors",requestParams:{query:cn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:ln(p0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:M({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:cn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:ln(Ao)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:M({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(Ao)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:M({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:M({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:y0}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:M({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:M({operationId:"listStripePrices",requestParams:{query:cn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:ln(wo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:M({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(wo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:M({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:M({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:v0}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:M({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:d}=ti,{Persisted:qo,Transient:ht}=ls,{Internal:qa,External:Dt}=hi,kt=Kn(xn.Playbook,{sdkInput:true}),jo=Kn(xn.Playbook,{sdkInput:false}),ms=Kn(xn.Playbook,{inConfig:false,sdkInput:false}),I_=Kn(xn.Playbook,{inConfig:false,sdkInput:true}),Io=Kn(xn.Playbook,{inConfig:false,sdkInput:true,source:wa.CodeConstant}),vp=Kn(xn.Playbook,{inConfig:false,sdkInput:true,source:wa.Runtime}),bp=Kn(xn.Playbook,{inConfig:false,sdkInput:false,source:wa.Runtime}),b0=Kn(xn.Billing,{sdkInput:false}),x0=Kn(xn.Metering,{sdkInput:false}),S0=Kn(xn.Branding,{inConfig:true,sdkInput:true}),P0=Kn(xn.Branding,{sdkInput:false}),T0="1.0.0",mc=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),name:Vi.meta(d),handle:hr.meta(d),description:Fm.meta(d),is_default:z.boolean().default(false).meta(d),entitlement_ids:z.array(z.string()).default([]).meta(d),metadata:Ca.meta(d)}).meta({id:"SeatType","x-revturbine-schema-persistence":qo,"x-revturbine-schema-exposure":qa,...ms,...ni()}),I0=zr("SeatTypeAnchor"),uc=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:hr.meta(d),label:z.string().min(1).meta(d),description:z.string().nullable().default(null).meta(d),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(d),data_source:z.string().nullable().default(null).meta(d),example_value:z.string().nullable().default(null).meta(d),value_map:z.record(z.string(),z.string()).default({}).meta(d),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(d),metadata:Ca.meta(d)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":qo,"x-revturbine-schema-exposure":qa,...ms,...ni()}),C0=zr("PersonalizationTokenAnchor"),E0=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":qa}),xp=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({handle:hr.meta({...d,readOnly:true}),stripe_account_id:z.string().min(1).meta(d),live_mode:z.boolean().default(false).meta(d),onboarding_state:E0.default("not_started").meta({...d,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...d,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...d,readOnly:true}),details_submitted:z.boolean().default(false).meta({...d,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...d,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...d,readOnly:true}),sync_products:z.boolean().default(true).meta(d),sync_prices:z.boolean().default(true).meta(d),sync_subscriptions:z.boolean().default(true).meta(d),sync_invoices:z.boolean().default(false).meta(d),default_currency:z.string().length(3).default("USD").meta(d),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(d),last_sync_at:z.string().optional().meta({...d,readOnly:true}),metadata:Ca.meta(d)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":qo,"x-revturbine-schema-exposure":qa,...b0,...ri()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(d),workspace_name:z.string().optional().meta(d),logo_url:z.string().optional().meta(d),support_email:z.string().optional().meta(d)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...P0});var dc=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({handle:hr.meta({...d,readOnly:true}),entitlement_id:z.string().min(1).meta(d),meter_key:z.string().min(1).max(100).meta(d),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(d),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(d),stripe_meter_id:z.string().nullable().default(null).meta(d),is_active:z.boolean().default(true).meta(d),metadata:Ca.meta(d)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":qo,"x-revturbine-schema-exposure":qa,...x0,...ri()}),d_=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":qa}),pc=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:hr.meta({...d,readOnly:true}),entitlement_id:z.string().min(1).meta(d),soft_limit_percent:z.number().min(0).max(100).default(80).meta(d),hard_limit_percent:z.number().min(0).max(100).default(100).meta(d),soft_limit_action:d_.default("warn").meta(d),hard_limit_action:d_.default("block").meta(d),grace_period_hours:z.number().int().min(0).default(0).meta(d),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(d),is_active:z.boolean().default(true).meta(d)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":qo,"x-revturbine-schema-exposure":qa,...I_,...ri()}),k0=zr("UsageEnforcementSettingsAnchor"),R0=z.object({kind:z.enum(["template","slot"]).meta(d),id:z.string().min(1).meta(d),label:z.string().min(1).optional().meta(d)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":qa}),A0=z.object({id:z.string().min(1).meta(d),group:z.array(R0).min(1).meta(d),cap:z.object({count:z.number().int().min(1).meta(d),period:z.enum(["session","day","week","month"]).meta(d)}).meta(d)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":qa}),w0=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":qa}),C_=z.object({capRules:z.array(A0).default([]).meta(d),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(d),remindLaterMinutes:z.number().int().min(0).default(60).meta(d),testMode:w0.default("off").meta(d)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":qa}),Sp=jn.merge(Un).merge(Mn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:hr.meta({...d,readOnly:true}),global_frequency_cap:C_.nullable().default(null).meta(d),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(d),suppress_for_paid:z.boolean().default(false).meta(d),suppress_for_trial:z.boolean().default(false).meta(d),allow_stacking:z.boolean().default(false).meta(d),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(d)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":qo,"x-revturbine-schema-exposure":qa,...I_,...ri()}),j0=zr("PlacementSettingsAnchor"),O0=z.object({field:z.string().min(1).meta(d),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(d),value:z.string().meta(d)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),q0=z.object({name:z.string().min(1).meta(d),handle:z.string().min(1).meta(d),predicates:z.array(O0).optional().meta(d),dimension_id:z.string().optional().meta(d),experiment_handle:z.string().min(1).optional().meta(d),experiment_id:z.string().min(1).optional().meta(d)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),D0=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),tier_position:z.number().int().min(0).default(0).meta(d),sort_order:z.number().int().min(0).default(0).meta(d),visibility:us.default("public").meta(d)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),U0=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),sort_order:z.number().int().min(0).default(0).meta(d),visibility:us.default("public").meta(d)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...jo}),M0=z.object({handle:z.string().min(1).meta(d),plan_handle:z.string().min(1).meta(d),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(d),segment_handle:z.string().nullable().default(null).meta(d),price_amount:z.number().min(0).meta(d),pricing_model:_c.meta(d),visibility:us.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:tu.meta(d)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...ms}),F0=z.object({handle:z.string().min(1).meta(d),addon_handle:z.string().min(1).meta(d),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(d),segment_handle:z.string().nullable().default(null).meta(d),price_amount:z.number().min(0).meta(d),pricing_model:_c.meta(d),visibility:us.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:tu.meta(d)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...ms}),L0=z.object({handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),description:z.string().nullable().default(null).meta(d),is_default:z.boolean().default(false).meta(d),entitlement_handles:z.array(z.string()).default([]).meta(d)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),N0=z.object({handle:z.string().min(1).meta(d),entitlement_handle:z.string().nullable().default(null).meta(d),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(d),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(d),soft_limit_action:z.string().meta(d),hard_limit_action:z.string().meta(d),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(d),notification_channels:z.array(z.string()).default([]).meta(d),is_active:z.boolean().default(true).meta(d)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),V0=z.object({handle:z.string().min(1).meta(d),global_frequency_cap:C_.nullable().default(null).meta(d),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(d),suppress_for_paid:z.boolean().default(false).meta(d),suppress_for_trial:z.boolean().default(false).meta(d),allow_stacking:z.boolean().default(false).meta(d),priority_collision_strategy:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),B0=z.object({handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),category:z.string().nullable().default(null).meta(d),visibility_toggle:z.boolean().default(true).meta(d),source_type:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),z0=z.object({handle:z.string().min(1).meta(d),entitlement_handle:z.string().min(1).meta(d),meter_handle:z.string().min(1).meta(d),limit:z.number().int().min(0).nullable().default(null).meta(d),reset_period:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),$0=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),type:Mm.meta(d),unit:z.string().optional().meta(d),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),K0=z.object({id:z.string().min(1).meta(d),entitlement_id:z.string().min(1).meta(d),targets:z.array(y_).min(1).meta(d),segment_ids:z.array(z.string()).default([]).meta(d),kind:Mm.optional().meta({...d,readOnly:true}),unit:z.string().optional().meta({...d,readOnly:true}),tier_name:z.string().optional().meta({...d,readOnly:true}),tier_description:z.string().optional().meta({...d,readOnly:true}),...Oo.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(d),allocation:Xm.optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),H0=z.object({slot_id:z.string().min(1).meta(d),active:z.boolean().meta(d),triggers:z.array(z.string()).meta(d)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),G0=z.object({id:z.string().min(1).meta(d),label:z.string().min(1).meta(d),description:z.string().meta(d),surface_type:z.string().meta(d),placement_handle:z.string().min(1).meta(d),template:z.string().optional().meta(d)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),Y0=z.object({name:z.string().min(1).meta(d),type:z.string().optional().meta(d),required:z.boolean().optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),W0=z.object({id:z.string().min(1).meta(d),surface_type:z.string().meta(d),fields:z.array(Y0).optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),J0=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),Z0=z.object({name:z.string().min(1).meta(d),action_type:J0.meta(d),plan_handle:z.string().optional().meta(d),promotion_id:z.string().optional().meta(d),placement_handle:z.string().optional().meta(d),url:z.string().optional().meta(d),tour_id:z.string().optional().meta(d),target_billing_period:z.enum(["monthly","annual"]).optional().meta(d),description:z.string().optional().meta(d)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),Q0=z.object({id:z.string().meta(d),name:z.string().meta(d),discount:z.string().meta(d),type:z.string().meta(d),status:z.string().meta(d)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),X0=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(d),label:z.string().min(1).meta(d),description:z.string().optional().meta(d),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(d),data_source:z.string().optional().meta(d),example_value:z.string().optional().meta(d),value_map:z.record(z.string(),z.string()).optional().meta(d),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(d)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),p_=z.object({header:z.string().optional().meta(d),body:z.string().optional().meta(d),cta_label:z.string().optional().meta(d),secondary_cta_label:z.string().optional().meta(d)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),eC=z.object({block_id:z.string().min(1).meta(d),tenant_id:z.string().min(1).meta(d),name:z.string().min(1).meta(d),surface_template_id:z.string().optional().meta(d),default_content:p_.meta(d),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:p_})).optional().meta(d),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(d),tokens_used:z.array(z.string()).optional().meta(d),status:z.enum(["draft","active","archived"]).meta(d),created_at:z.string().datetime().meta({...d,readOnly:true}),updated_at:z.string().datetime().meta({...d,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),tC=z.object({label:z.string().meta(d),path:Af.meta(d),config:z.record(z.string(),z.string()).optional().meta(d)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),E_=z.object({template_id:z.string().min(1).meta(d),fields:z.record(z.string(),z.string()).meta(d),ctas:z.array(tC).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),k_=z.object({plan_ids:z.array(z.string()).meta(d),billing_cadences:z.array(z.string()).optional().meta(d),segment_chips:z.array(z.string()).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),nC=z.object({count:z.number().int().min(1).meta(d),period:z.enum(["session","day","week","month","lifetime"]).meta(d)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),R_=z.object({max_per_period:nC.optional().meta(d),cooldown_days:z.number().int().min(0).optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),rC=z.object({id:z.string().min(1).meta(d),target:k_.meta(d),surfaces:z.array(E_).meta(d),caps:R_.optional().meta(d),surface_slot_ids:z.array(z.string()).optional().meta(d),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(d),created_at:z.string().optional().meta({...d,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(d),recommendation_plan_override:z.string().optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),aC=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ns}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ns}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ns}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),iC=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt}),sC=z.object({id:z.string().min(1).meta(d),name:z.string().min(1).meta(d),category:iC.meta(d),trigger:aC.meta(d),payloads:z.array(rC).meta(d),order:z.number().int().min(0).meta(d)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),oC=z.object({payload_id:z.string().min(1).meta(d),placement_id:z.string().min(1).meta(d),target:k_.meta(d),caps:R_.optional().meta(d),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(d),created_at:z.string().meta({...d,readOnly:true}),updated_at:z.string().datetime().optional().meta({...d,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(d),surfaces:z.array(E_).optional().meta(d),surface_slot_ids:z.array(z.string()).optional().meta(d),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(d)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),lC=z.object({kind:z.string().min(1).meta(d),schema_version:z.number().int().nonnegative().meta(d),config:z.unknown().meta(d)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),cC=jn.merge(x_).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...ms}),mC=jn.merge(S_).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...ms}),uC=z.object({plans:z.array(D0).meta({...d,...kt}),addons:z.array(U0).optional().meta({...d,...jo}),entitlements:z.array($0).meta({...d,...kt}),entitlement_rules:z.array(K0).meta({...d,...kt}),segments:z.array(q0).meta({...d,...kt}),content_ui_paths:z.array(Z0).meta({...d,...kt}),slot_configs:z.array(H0).optional().meta({...d,...kt,...zm({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...d,...kt,...zm({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...d,...S0,...zm({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(G0).optional().meta({...d,...kt}),message_blocks:z.array(eC).optional().meta({...d,...kt}),placement_payloads:z.array(oC).optional().meta({...d,...kt}),placements:z.array(sC).optional().meta({...d,...kt}),content_promotions:z.array(Q0).optional().meta({...d,...kt}),personalization_tokens:z.array(X0).optional().meta({...d,...kt}),surface_templates:z.array(W0).optional().meta({...d,...kt}),free_trial_rules:z.array(cC).optional().meta({...d,...jo}),reverse_trial_rules:z.array(mC).optional().meta({...d,...jo}),plan_variations:z.array(M0).optional().meta({...d,...jo}),addon_variations:z.array(F0).optional().meta({...d,...jo}),extension_rules:z.array(lC).optional().meta({...d,...kt}),seat_types:z.array(L0).optional().meta({...d,...kt}),enforcement_defaults:z.array(N0).optional().meta({...d,...kt}),placement_settings:z.array(V0).optional().meta({...d,...kt}),segment_dimensions:z.array(B0).optional().meta({...d,...kt}),meter_bindings:z.array(z0).optional().meta({...d,...kt}),experiments:z.array(z.unknown()).max(0).optional().meta({...d,...ms}),signal_catalog:z.object({}).strict().optional().meta({...d,...ms})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt}),dC=z.object({artifact_type:z.literal("playbook").meta({...d,...Io,readOnly:true}),format_version:z.literal(T0).meta({...d,...Io,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...d,...Io}),playbook_version_id:z.string().nullable().default(null).meta({...d,...vp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...d,...bp,readOnly:true}),environment_id:z.string().min(1).optional().meta({...d,...bp,readOnly:true}),project_id:z.string().min(1).optional().meta({...d,...bp,readOnly:true}),exported_at:z.string().datetime().optional().meta({...d,...vp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...d,...Io,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...d,...Io,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...d,...Io,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...vp}),A_=dC.extend(uC.shape).meta({"x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt});function pC(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function w_(t){if(!pC(t))return t;let e={...t};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess(w_,A_).meta({id:"Playbook","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt});z.preprocess(w_,A_.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":ht,"x-revturbine-schema-exposure":Dt,...kt});({"/api/seat-type-anchors":{get:M({operationId:"listSeatTypeAnchors",requestParams:{query:cn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:ln(I0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:M({operationId:"listSeatTypes",requestParams:{query:cn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:ln(mc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:M({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(mc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:mc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:M({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:mc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:mc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:M({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:M({operationId:"listPersonalizationTokenAnchors",requestParams:{query:cn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:ln(C0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:M({operationId:"listPersonalizationTokens",requestParams:{query:cn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:ln(uc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:M({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(uc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:uc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:M({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:uc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:uc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:M({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:M({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:fa(xp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:xp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:M({operationId:"listMeteringConfigs",requestParams:{query:cn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:ln(dc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:M({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(dc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:M({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:dc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:M({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:M({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:cn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:ln(k0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:M({operationId:"listUsageEnforcementSettings",requestParams:{query:cn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:ln(pc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:M({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(pc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:pc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:M({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:pc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:M({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:M({operationId:"listPlacementSettingsAnchors",requestParams:{query:cn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:ln(j0)}}},default:{description:"Error response",content:{"application/json":{schema:tr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:M({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:fa(Sp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Sp}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});function Uo(){return typeof window>"u"||typeof document>"u"}function $r(){return !Uo()}var yc=class{constructor(){this.providers=new Map,this.cache=new Map,this.unsubscribers=new Map;}register(t){let e=this.providers.get(t.domain);if(e&&this.unregister(e.domain),this.providers.set(t.domain,t),t.subscribe){let n=t.subscribe(r=>{this.cache.set(t.domain,{value:r,resolvedAt:Date.now(),ttlMs:t.cacheTtlMs??0});});this.unsubscribers.set(t.domain,n);}}unregister(t){this.providers.delete(t),this.cache.delete(t);let e=this.unsubscribers.get(t);e&&(e(),this.unsubscribers.delete(t));}clear(){for(let t of this.unsubscribers.values())t();this.providers.clear(),this.cache.clear(),this.unsubscribers.clear();}async resolveAll(){let t=Array.from(this.providers.entries()),e=await Promise.all(t.map(async([i,s])=>{let u=this.cache.get(i),y=Date.now();if(u&&u.ttlMs>0&&y-u.resolvedAt<u.ttlMs)return [i,u.value];let C=await s.resolve();return this.cache.set(i,{value:C,resolvedAt:y,ttlMs:s.cacheTtlMs??0}),[i,C]})),n={},r={},a=false;for(let[i,s]of e)if(i==="traits"||i.startsWith("traits:")){let u=s;u?.traits&&(Object.assign(r,u.traits),a=true);}else n[i]=s;return a&&(n.traits={traits:r}),n}async get(t){let e=this.providers.get(t);if(!e)return;let n=this.cache.get(t),r=Date.now();if(n&&n.ttlMs>0&&r-n.resolvedAt<n.ttlMs)return n.value;let a=await e.resolve();return this.cache.set(t,{value:a,resolvedAt:r,ttlMs:e.cacheTtlMs??0}),a}has(t){return this.providers.has(t)}get size(){return this.providers.size}invalidate(t){this.cache.delete(t);}invalidateAll(){this.cache.clear();}},hC=new Set(["cta_completed"]),fC=1440*60*1e3,j_=10080*60*1e3,_C="revturbine:interaction-state",O_=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??j_,this.defaultRemindLaterMs=t.defaultRemindLaterMs??3600*1e3,this.hydrate();}track(t){let e=this.stateKey(t.placementId,t.userId,t.treatmentId),n=Date.now(),r=t.metadata??{},i={...this.state.get(e)??{updatedAt:new Date(n).toISOString()},lastInteractionType:t.interactionType,updatedAt:t.interactionAt??new Date(n).toISOString()};if(t.interactionType==="dismiss"){let s=Number(r.cooldown_ms);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let s=Number(r.remind_after_seconds);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let s=Number(r.cooldown_ms);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(i.suppressedUntil=n+300*1e3),this.state.set(e,i),this.persist();}checkSuppression(t,e,n){let r=this.stateKey(t,e,n),a=this.state.get(r);return a?.suppressedUntil?a.suppressedUntil<=Date.now()?{suppressed:false}:{suppressed:true,reason:a.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}clearSuppression(t,e,n){let r=this.stateKey(t,e,n);this.state.delete(r),this.persist();}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e))!r||typeof r!="object"||this.state.set(n,r);}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.state.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${_C}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},yC="revturbine:presentation-caps";function Do(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function vC(t){if(!Do(t))return null;let e=Number(t.count),n=typeof t.period=="string"?t.period:"";return !Number.isFinite(e)||e<=0||n!=="session"&&n!=="day"&&n!=="week"&&n!=="month"&&n!=="lifetime"?null:{count:e,period:n}}var q_=class{constructor(t){this.capsByKey=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.hydrate();}enforce(t){let e=this.extractPolicies(t);if(e.length===0)return {allowed:true};let n=this.capKey(t),r=Date.now(),a=this.capsByKey.get(n)??{seenAt:[]},i={...a,seenAt:a.seenAt.filter(y=>Number.isFinite(y)&&y>0)},s=ic({perPayload:{policies:e,seenAt:i.seenAt,cooldownUntil:i.cooldownUntil},now:r});if(!s.allowed)return this.capsByKey.set(n,i),{allowed:false,reason:s.reason};i.seenAt.push(r);let u=e.map(y=>y.cooldownMs).filter(y=>typeof y=="number"&&Number.isFinite(y)&&y>0);return u.length>0?i.cooldownUntil=r+Math.max(...u):delete i.cooldownUntil,this.capsByKey.set(n,i),this.persist(),{allowed:true}}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let a=Array.isArray(r.seenAt)?r.seenAt.filter(s=>Number.isFinite(s)&&s>0):[],i=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:a,cooldownUntil:i});}}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.capsByKey.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${yC}:${this.tenantId}:${this.userId}`}capKey(t){return [this.tenantId,this.userId,t.surface.type,t.output_id].join(":")}extractPolicies(t){let e=[],n=[t,t.content,Do(t.content)?t.content.payload:void 0,Do(t.content)?t.content.placement:void 0,Do(t.content)?t.content.surface:void 0];for(let r of n){if(!Do(r))continue;let a=Do(r.caps)?r.caps:void 0;if(!a)continue;let i=[],s=vC(a.max_per_period);s&&i.push(s);let u=Number(a.cooldown_days),y=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:i,...y!==void 0?{cooldownMs:y}:{}});}return e}},Mo=class{constructor(){this.store=new Map;}getItem(t){return this.store.get(t)??null}setItem(t,e){this.store.set(t,e);}removeItem(t){this.store.delete(t);}};function D_(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function U_(t,e=Date.now()){return t?.suppressedUntil?t.suppressedUntil<=e?{suppressed:false}:{suppressed:true,reason:t.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}var Cp=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??fC,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??j_;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,a){let i=a??this.defaultDismissCooldownMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordClickThru(t,e,n,r,a){let i=a??this.defaultDismissCooldownMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"clicked_thru",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordConversion(t,e,n,r){await this.appendRecord(t,"cta_completed",e,n,r),this.retireInCache(t);}async recordSuppression(t,e,n,r,a){let i=a??this.defaultSuppressionMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"suppressed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async isRetired(t){return (await this.getRetiredIds()).has(t)}async getRetiredIds(){if(this.retiredCache)return this.retiredCache;let t=await this.store.getRetiredPlacementIds(this.userId);return this.retiredCache=t,t}isRetiredSync(t){return this.retiredCache?.has(t)??false}isSuppressedSync(t){if(!this.suppressedCache)return false;let e=this.suppressedCache.get(t);return e?new Date(e).getTime()>Date.now()?true:(this.suppressedCache.delete(t),false):false}isHiddenSync(t){return this.isRetiredSync(t)||this.isSuppressedSync(t)}async queryHistory(t){return this.store.query(this.userId,t)}async hydrate(){this.retiredCache=await this.store.getRetiredPlacementIds(this.userId),this.suppressedCache=await this.store.getSuppressedPlacements(this.userId);}async reset(){await this.store.clear(this.userId),this.retiredCache=new Set,this.suppressedCache=new Map;}setUserId(t){this.userId=t,this.retiredCache=null,this.suppressedCache=null;}async appendRecord(t,e,n,r,a){let i={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...a?{metadata:a}:{}};await this.store.append(this.userId,i);}retireInCache(t){this.retiredCache||(this.retiredCache=new Set),this.retiredCache.add(t);}suppressInCache(t,e){this.suppressedCache||(this.suppressedCache=new Map),this.suppressedCache.set(t,e);}},bC=class{constructor(){this.records=new Map;}append(t,e){let n=this.records.get(t)??[];n.push(e),this.records.set(t,n);}query(t,e){let n=this.records.get(t)??[];return e&&(n=M_(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return F_(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return L_(e)}clear(t){this.records.delete(t);}},xC="revturbine:impression-history",nu=class{constructor(t){this.storage=t.storage,this.tenantId=t.tenantId,this.maxRecords=t.maxRecords??500;}append(t,e){let n=this.load(t);n.push(e),n.length>this.maxRecords&&n.splice(0,n.length-this.maxRecords),this.save(t,n);}query(t,e){let n=this.load(t);return e&&(n=M_(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return F_(e)}getSuppressedPlacements(t){let e=this.load(t);return L_(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${xC}:${this.tenantId}:${t}`}load(t){let e=this.storage.getItem(this.key(t));if(!e)return [];try{let n=JSON.parse(e);return Array.isArray(n)?n:[]}catch{return []}}save(t,e){try{this.storage.setItem(this.key(t),JSON.stringify(e));}catch{}}};function M_(t,e){let n=t;if(e.placementIds&&e.placementIds.length>0){let r=new Set(e.placementIds);n=n.filter(a=>r.has(a.placementId));}if(e.outcomes&&e.outcomes.length>0){let r=new Set(e.outcomes);n=n.filter(a=>r.has(a.outcome));}if(e.since){let r=new Date(e.since).getTime();n=n.filter(a=>new Date(a.occurredAt).getTime()>=r);}return n}function F_(t){let e=new Set;for(let n of t)hC.has(n.outcome)&&e.add(n.placementId);return e}function L_(t){let e=new Map,n=Date.now();for(let r=t.length-1;r>=0;r--){let a=t[r];if(e.has(a.placementId))continue;let i=a.metadata?.suppressUntil;typeof i=="string"&&new Date(i).getTime()>n&&e.set(a.placementId,i);}return e}function SC(t){let{config:e,cacheTtlMs:n}=t,r=[];if(t.planHandle){let a={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:t.planHandle,currentPlanName:t.planName??t.planHandle,...t.paymentFailed!==void 0?{paymentFailed:t.paymentFailed}:{},...t.paymentAtRisk!==void 0?{paymentAtRisk:t.paymentAtRisk}:{}})};r.push(a);}if(e.entitlements?.length){let a=t.defaultEntitlementPolicy??"allow",i={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={},u={};for(let y of e.entitlements??[]){s[y.unique_handle]={status:a==="allow"?"allowed":"denied",allowed:a==="allow",reason:`static_config_default_${a}`};let C=t.usage?.[y.unique_handle];C&&(u[y.unique_handle]={used:C.used,limit:C.limit,remaining:Math.max(0,C.limit-C.used),unit:y.unit});}return {entries:s,usage:u,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(i);}if(e.segments?.length){let a={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(i=>i.handle),segmentSlugs:(e.segments??[]).map(i=>i.handle)})};r.push(a);}if(e.entitlement_rules?.length){let a={domain:"rules",cacheTtlMs:n,resolve:()=>{let i={},s=new Map;for(let y of e.entitlements??[]){let C=y;typeof C.unique_handle=="string"&&typeof C.type=="string"&&s.set(C.unique_handle,C.type);}for(let y of e.entitlement_rules??[]){let C=y.entitlement_id;i[C]||(i[C]=[]);let I=y,R=Array.isArray(I.segment_ids)?I.segment_ids.filter(k=>typeof k=="string"):typeof I.segment_id=="string"&&I.segment_id!=="all"?[I.segment_id]:[],w=Array.isArray(I.plan_ids)?I.plan_ids.filter(k=>typeof k=="string"):[],E={ruleId:y.id,entitlementId:C,planIds:(y.targets??[]).length>0?(y.targets??[]).filter(k=>k.kind==="plan").map(k=>k.id):w,segmentIds:R,kind:(()=>{let k=typeof I.type_fields=="object"&&I.type_fields!==null?I.type_fields:{};return (typeof I.kind=="string"?I.kind:void 0)??(typeof k.kind=="string"?k.kind:void 0)??s.get(C)??"feature"})(),fields:{...typeof I.type_fields=="object"&&I.type_fields!==null?I.type_fields:{},...I}};i[C].push(E);}let u={};for(let y of e.segments??[])typeof y.dimension_id=="string"&&typeof y.handle=="string"&&(u[y.handle]=y.dimension_id);return {entitlementRules:i,segmentDimensions:u,configVersion:Dm(e)}}};r.push(a);}if(e.message_blocks?.length||e.personalization_tokens?.length){let a={domain:"content",cacheTtlMs:n,resolve:()=>{let i={};for(let s of e.message_blocks??[])i[s.block_id]={blockId:s.block_id,name:s.name,defaultContent:s.default_content,segmentOverrides:s.segment_overrides?.map(u=>({segmentId:u.segment_value_id,content:u.content})),status:s.status};return {messageBlocks:i,personalization:{}}}};r.push(a);}if(e.theme&&Object.keys(e.theme).length>0){let a={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(a);}return r}function PC(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let a=e.user_context,i={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:a.plan_handle??"unknown",currentPlanName:a.plan_name,billingPeriod:a.billing_period,trialActive:a.trial_active,trialLimitType:a.trial_limit_type,trialProgressPercent:a.trial_progress_percent,trialDaysRemaining:a.trial_days_remaining,trialDaysTotal:a.trial_days_total,trialState:a.trial_state,trialUsageEntitlementHandle:a.trial_usage_entitlement_handle,trialUsageConsumed:a.trial_usage_consumed,trialUsageLimit:a.trial_usage_limit})};r.push(i);}if(e.entitlements){let a=e.entitlements,i={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={};for(let[u,y]of Object.entries(a))s[u]=y;return {entries:s}}};r.push(i);}if(e.user_context){let a=e.user_context;if(Array.isArray(a.segment_ids)){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:a.segment_ids})};r.push(i);}}if(e.user_context){let a=e.user_context;if(a.traits&&typeof a.traits=="object"){let i={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:a.traits})};r.push(i);}}if(e.theme){let a={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(a);}return r}var N_=class{constructor(t){this.registeredPlacements=new Map,this.tenantId=t.tenantId,this.userId=t.userId,this.exportedConfig=t.exportedConfig;let e=t.storage??new Mo;this.registry=new yc;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new O_({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new q_({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new Cp({store:t.impressionStore??new bC,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new Yd({registry:this.registry,interactionTracker:this.interactionTracker,capEnforcer:this.capEnforcer,options:t.engineOptions,placements:this.registeredPlacements,placementResolver:n});}registerPlacement(t){this.registeredPlacements.set(t.id,t);}async getPlacementDecision(t){return this.engine.evaluate(t)}async getPlacementDecisions(t){return this.engine.evaluateBatch(t)}async getPlacement(t){let e=this.slotRecordForConfig(t);return e?(this.registerPlacement(e),this.engine.evaluate({placementId:e.id,userId:this.userId})):null}async checkEntitlement(t,e){let n=await this.engine.checkEntitlement(t,e);if(n.reason==="no_entitlement_provider"){let r=await this.engine.resolveProviders();return this.deriveEntitlementFromConfig(t,e,r.plan?.currentPlanHandle??"")}return n}trackInteraction(t){this.engine.trackInteraction(t);}clearSuppression(t,e){this.interactionTracker.clearSuppression(t,e??this.userId);}async resolveProviders(){return this.registry.resolveAll()}evaluateSegments(t){let e=this.exportedConfig.segments??[];return rc(e,t)}buildTargetingState(t,e){return Jm(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return c_({userId:this.userId,providers:e,base:t})}setUserId(t){this.userId=t,this.impressionHistory.setUserId(t);}getUserId(){return this.userId}getExportedConfig(){return this.exportedConfig}async hydrate(){await this.impressionHistory.hydrate();}updateProviders(t){this.registry.clear();for(let e of t)this.registry.register(e);}slotRecordForConfig(t){if(t.slotId){let r=this.registeredPlacements.get(t.slotId);if(r)return r}let n=(this.exportedConfig.placement_slots??[]).find(r=>t.slotId?r.id===t.slotId:t.surfaceType?r.surface_type===t.surfaceType:false);return n?{id:n.id,name:t.placementHandle??n.placement_handle,route:"",metadata:{surface_slot_id:n.id,surface_type:n.surface_type,surface_template_ids:n.template?[n.template]:[],...t.entitlementHandle?{entitlement_handle:t.entitlementHandle}:{},...t.fixedOnly?{fixedOnly:true}:{}}}:null}buildPlacementResolver(t){let e=t.placements??{placements:t.exportedConfig.placements??[]};return bo({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e,n){return tc({handle:t,context:e,currentPlanHandle:n,segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"denied",allowed:false,reason:"entitlement_not_in_playbook"}}},TC=["web-client"],IC=z.enum(TC),CC=["method","meta","component"],EC=z.enum(CC),kC=["ts","python","java","csharp","rust"];z.enum(kC);var RC=z.object({ts:z.string().min(1).optional(),python:z.string().min(1).optional(),java:z.string().min(1).optional(),csharp:z.string().min(1).optional(),rust:z.string().min(1).optional()}).strict(),AC=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:EC,appliesTo:z.array(IC).min(1),composes:z.string().min(1).optional(),perLanguage:RC.optional(),description:z.string().min(1)}).strict().refine(t=>t.kind!=="meta"||t.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),wC=z.object({version:z.number().int().positive(),functions:z.array(AC).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let a of [r.canonical,...r.aliases]){let i=n.get(a);i!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${a}" (also on "${i}")`,path:["functions"]}),n.set(a,r.canonical);}});wC.parse({version:3,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client"],description:"Check whether the user is entitled to a feature/handle; returns the rich EntitlementResult (allowed, status, reason, limits, enforcement)."},{canonical:"gate",aliases:[],kind:"meta",appliesTo:["web-client"],composes:"checkEntitlement",description:"Gate an action behind an entitlement: checks the handle, runs fn when allowed, otherwise returns the entitlement so the caller can surface a paywall."},{canonical:"trackEvent",aliases:["track"],kind:"method",appliesTo:["web-client"],description:"Emit a product/analytics event powering frequency caps, attribution, and experiments."},{canonical:"updateUsage",aliases:["update"],kind:"method",appliesTo:["web-client"],description:"Patch customer-reported usage balances for client-side metering display (the advertised update({ usage }) verb)."},{canonical:"resetIdentity",aliases:["reset"],kind:"method",appliesTo:["web-client"],description:"Clear the current user and revert to the anonymous identity (e.g. on sign-out)."},{canonical:"identify",aliases:[],kind:"method",appliesTo:["web-client"],description:"Associate the session with a known user id and optional traits/context."},{canonical:"getPlacement",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a single placement decision for a surface."},{canonical:"getPlacementDecision",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a placement decision from an explicit decision input (headless)."},{canonical:"SurfaceSlotComponent",aliases:["Slot","RTSlot"],kind:"component",appliesTo:["web-client"],description:"React slot component that renders the resolved placement; advertised as <Slot> (<RTSlot> is the deprecated prior name)."},{canonical:"AccessGateSurfaceSlot",aliases:["Gate"],kind:"component",appliesTo:["web-client"],description:"React component that gates content behind an entitlement, rendering an upsell placement when denied; advertised as <Gate>."}]});var jC=[{from:"entitlement_rules",field:"targets[].id",to:"plans",by:"unique_handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"plan",note:"Entry-level; a rule losing its last target is swept whole (targets.min(1))."},{from:"entitlement_rules",field:"targets[].id",to:"addons",by:"unique_handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"addon",note:"Entry-level; a rule losing its last target is swept whole (targets.min(1))."},{from:"entitlement_rules",field:"targets[].id",to:"plan_variations",by:"handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"plan_variation",note:"Variation-level targeting is dead per the plan-125 audit; declared for kind-enum totality."},{from:"entitlement_rules",field:"targets[].id",to:"addon_variations",by:"handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"addon_variation",note:"Variation-level targeting is dead per the plan-125 audit; declared for kind-enum totality."},{from:"plan_variations",field:"plan_handle",to:"plans",by:"unique_handle",kind:"one",onDelete:"cascade",resolution:"playbook"},{from:"addon_variations",field:"addon_handle",to:"addons",by:"unique_handle",kind:"one",onDelete:"cascade",resolution:"playbook"},{from:"plan_variations",field:"segment_handle",to:"segments",by:"handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"Detach would silently widen variation availability \u2014 restrict pending Q-1 ratification."},{from:"addon_variations",field:"segment_handle",to:"segments",by:"handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"Detach would silently widen variation availability \u2014 restrict pending Q-1 ratification."},{from:"free_trial_rules",field:"plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:'null means "All plans" and never blocks.'},{from:"free_trial_rules",field:"convert_to_plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook"},{from:"free_trial_rules",field:"fallback_plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook"},{from:"reverse_trial_rules",field:"premium_plan_id",to:"plans",by:"unique_handle",kind:"one",onDelete:"restrict",resolution:"playbook"},{from:"reverse_trial_rules",field:"fallback_plan_id",to:"plans",by:"unique_handle",kind:"one",onDelete:"restrict",resolution:"playbook"},{from:"placements",field:"trigger.entitlement_handle",to:"entitlements",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"entitlement_gate / usage_threshold / credit_threshold / seat_threshold trigger variants."},{from:"placements",field:"trigger.slot_id",to:"placement_slots",by:"id",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"surface_render trigger variant."},{from:"placement_payloads",field:"target.segment_chips[]",to:"segments",by:"handle",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry",note:"Chip resolution falls back segment \u2192 plan \u2192 literal; stale chips degrade to literals."},{from:"placement_payloads",field:"target.segment_chips[]",to:"plans",by:"unique_handle",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry",note:"Chip resolution falls back segment \u2192 plan \u2192 literal; stale chips degrade to literals."},{from:"placement_payloads",field:"surface_slot_ids[]",to:"placement_slots",by:"id",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry"},{from:"customer_overrides",field:"plan_handle",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Grant-Plan overrides (Q-1 restrict class)."},{from:"subscriptions",field:"variation_handle",to:"plan_variations",by:"handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Active-subscriber variations (Q-1 restrict class)."},{from:"subscriptions",field:"variation_handle",to:"addon_variations",by:"handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Active-subscriber add-on variations (Q-1 restrict class)."}];function OC(){let t=[];for(let[e,n]of Object.entries(gp))for(let[r,a]of Object.entries(n.fields)){let i=a.reference;if(i){if(!i.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${i.table} has no onDelete policy`);t.push({from:e,field:r,to:i.table,by:i.by,kind:i.kind,onDelete:i.onDelete,resolution:"playbook"});}}return t}function qC(t){return [...t].sort((e,n)=>e.from.localeCompare(n.from)||e.field.localeCompare(n.field)||e.to.localeCompare(n.to)||(e.targetKind??"").localeCompare(n.targetKind??""))}Object.freeze(qC([...OC(),...jC]));var V_="traits:server",vc=class{constructor(){A(this,"domain",V_);A(this,"snapshot",{});}setSnapshot(e){this.snapshot=e??{};}hasSignals(){return Object.keys(this.toTraits()).length>0}resolve(){return {traits:this.toTraits()}}toTraits(){let e={},n=this.snapshot.trial;return n&&(typeof n.in_trial=="boolean"&&(e.trial_active=n.in_trial),typeof n.state=="string"&&n.state.length>0&&(e.trial_state=n.state),typeof n.days_remaining=="number"&&(e.trial_days_remaining=n.days_remaining)),this.snapshot.payment_at_risk===true&&(e.payment_at_risk=true),e}};var Ep={workspace_name:"Your workspace",theme:{}};function B_(t){return !!t&&Object.keys(t).length>0}var z_=false;function kp(t={}){let e=(n,r)=>({branding:{...Ep,...n,theme:{...Ep.theme,...n?.theme}},source:r});return B_(t.explicit)?e(t.explicit,"explicit"):B_(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!z_&&Ms()&&(z_=true,console.warn("[RevTurbine] Branding embedded in the config `theme` field is deprecated. Pass a `branding` option to the SDK, or resolve it via the Branding API. See the Branding resolution ladder in the SDK docs.")),e({theme:t.legacyConfigTheme},"legacy-config")):e(void 0,"default")}var $_="[REDACTED]",DC=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,UC=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,MC=/\d(?:[ -]?\d){12,18}/g;function FC(t){let e=0,n=false;for(let r=t.length-1;r>=0;r-=1){let a=t.charCodeAt(r)-48;if(a<0||a>9)return false;if(n){let i=a*2;i>9&&(i-=9),e+=i;}else e+=a;n=!n;}return e%10===0}function LC(t){let e=0,n=t.replace(DC,()=>(e+=1,$_));return n=n.replace(MC,r=>{let a=r.replace(/[ -]/g,"");return a.length>=13&&a.length<=19&&FC(a)?(e+=1,$_):r}),{value:n,count:e}}function Rp(t){let e=0,n=r=>{if(typeof r=="string"){let a=LC(r);return e+=a.count,a.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let a={};for(let[i,s]of Object.entries(r))a[i]=n(s);return a}return r};return {value:n(t),redactions:e}}function NC(t){return UC.test(t.trim())}function VC(t){let e=t.trim().toLowerCase();return `eml_${$C(e).slice(0,16)}`}function Ap(t){return NC(t)?{value:VC(t),redacted:true}:{value:t,redacted:false}}function K_(t){let e=Ap(t.user_id??""),n=Rp({url:t.url,path:t.path,page_title:t.page_title,tags:t.tags,traits:t.identity?.traits??null,properties:t.properties});return {value:{...t,url:n.value.url,path:n.value.path,page_title:n.value.page_title,tags:n.value.tags,user_id:t.user_id===null||t.user_id===void 0?t.user_id:e.value,identity:t.identity?{...t.identity,traits:n.value.traits??void 0}:t.identity,properties:n.value.properties},redactions:n.redactions+(e.redacted?1:0)}}var BC=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function zC(t){let e=[];for(let n=0;n<t.length;n+=1){let r=t.charCodeAt(n);if(r<128)e.push(r);else if(r<2048)e.push(192|r>>6,128|r&63);else if(r>=55296&&r<=56319){let a=r,i=t.charCodeAt(n+1);n+=1,r=65536+((a&1023)<<10)+(i&1023),e.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|r&63);}else e.push(224|r>>12,128|r>>6&63,128|r&63);}return e}function yi(t,e){return t>>>e|t<<32-e}function $C(t){let e=zC(t),n=e.length*8;for(e.push(128);e.length%64!==56;)e.push(0);for(let w=0;w<4;w+=1)e.push(0);e.push(n>>>24&255,n>>>16&255,n>>>8&255,n&255);let r=1779033703,a=3144134277,i=1013904242,s=2773480762,u=1359893119,y=2600822924,C=528734635,I=1541459225,R=new Array(64);for(let w=0;w<e.length;w+=64){for(let W=0;W<16;W+=1){let ot=w+W*4;R[W]=(e[ot]<<24|e[ot+1]<<16|e[ot+2]<<8|e[ot+3])>>>0;}for(let W=16;W<64;W+=1){let ot=yi(R[W-15],7)^yi(R[W-15],18)^R[W-15]>>>3,en=yi(R[W-2],17)^yi(R[W-2],19)^R[W-2]>>>10;R[W]=R[W-16]+ot+R[W-7]+en>>>0;}let E=r,k=a,U=i,ie=s,Z=u,ve=y,qe=C,ne=I;for(let W=0;W<64;W+=1){let ot=yi(Z,6)^yi(Z,11)^yi(Z,25),en=Z&ve^~Z&qe,pr=ne+ot+en+BC[W]+R[W]>>>0,le=yi(E,2)^yi(E,13)^yi(E,22),tn=E&k^E&U^k&U,fn=le+tn>>>0;ne=qe,qe=ve,ve=Z,Z=ie+pr>>>0,ie=U,U=k,k=E,E=pr+fn>>>0;}r=r+E>>>0,a=a+k>>>0,i=i+U>>>0,s=s+ie>>>0,u=u+Z>>>0,y=y+ve>>>0,C=C+qe>>>0,I=I+ne>>>0;}return [r,a,i,s,u,y,C,I].map(w=>w.toString(16).padStart(8,"0")).join("")}var H_={web_signed_up:"system",web_signed_in:"system",cli_signed_up:"system",cli_signed_in:"system",cli_command_executed:"system",changeset_submitted:"workflow",changeset_approved:"workflow",changeset_rejected:"workflow",changeset_deployed:"workflow",changeset_launched:"workflow",changeset_parked:"workflow",changeset_resumed:"workflow",changeset_discarded:"workflow",changeset_archived:"workflow",config_imported:"workflow",config_exported:"workflow",entity_created:"workflow",entity_updated:"workflow",entity_deleted:"workflow",web_api_error:"system"},G_="control_plane_source";function wp(t,e={}){return {eventName:t,properties:{[G_]:H_[t],...e}}}var bc=class{constructor(e){A(this,"backend");this.backend=e;}getItem(e){try{return this.backend.getItem(e)}catch{return null}}setItem(e,n){try{this.backend.setItem(e,n);}catch{}}removeItem(e){try{this.backend.removeItem(e);}catch{}}};function ds(t){if(t)return t;if($r())try{return new bc(window.localStorage)}catch{}return new Mo}function jp(t){if(t)return t;if($r())try{return new bc(window.sessionStorage)}catch{}return new Mo}var KC=/^[a-z0-9._]{1,100}$/,An={Persisted:"persisted",Transient:"transient"},Tn={Internal:"internal",External:"external"},bn={Pii:{"x-revturbine-data-classification":"pii"},Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}};var oy="x-revturbine-schema-exposure",GC="readOnly",YC="x-revturbine-decision-only",Y_={[YC]:true},ya={[oy]:Tn.External},WC={[oy]:Tn.Internal};function kr(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[GC]===true||(e[n]=r);}return z.object(e)}function Rr(t){let e=kr(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(KC)}):e}var {Unrestricted:_r}=bn,{Transient:Gr,Persisted:JC}=An,{Internal:$s,External:Si}=Tn;z.object({page:z.coerce.number().int().min(1).default(1).meta(_r),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(_r)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si});var ZC=t=>z.object({items:z.array(t).meta(_r),total:z.number().int().min(0).meta(_r),page:z.number().int().min(1).meta(_r),per_page:z.number().int().min(1).meta(_r),has_more:z.boolean().meta(_r)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si}),Ge=z.object({created_at:z.string().datetime().meta({..._r,readOnly:true}),updated_at:z.string().datetime().meta({..._r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si}),Ee=z.object({id:z.string().min(1).meta({..._r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si}),st=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({..._r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":$s});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si});var mu=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si}),ly=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si});var eg=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si}),QC=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":$s});var Yn=z.string().min(1).max(200),Yt=z.string().min(1).max(100),Ks=z.string().max(500).optional(),Wn=z.record(z.string(),z.unknown()).default({}),kc=z.number().int().min(10).max(100).multipleOf(10),Fn=z.string().datetime().nullable().default(null),In=z.object({environment_id:z.string().min(1).default("production").meta({..._r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":$s}),kn=z.object({playbook_version_id:z.string().nullable().default(null).meta(_r),is_current:z.boolean().default(true).meta({..._r,readOnly:true}),is_deleted:z.boolean().default(false).meta({..._r,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({..._r,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({..._r,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({..._r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":$s}),XC=Ee.merge(Ge).merge(st).merge(In).extend({handle:Yt.meta({..._r,readOnly:true}),active:z.boolean().default(true).meta({..._r,readOnly:true})});function mr(t){return XC.meta({id:t,"x-revturbine-schema-persistence":JC,"x-revturbine-schema-exposure":$s})}var tg=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":$s}),eE=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":$s}),cy=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Si}),Vt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ua={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},tE="x-revturbine-context",nE="x-revturbine-in-config",rE="x-revturbine-sdk-input",aE="x-revturbine-source",iE="x-revturbine-deprecation",sE={[Vt.Playbook]:Ua.Customer,[Vt.Branding]:Ua.Customer,[Vt.Billing]:Ua.Stripe,[Vt.Metering]:Ua.Customer,[Vt.CustomerOperations]:Ua.Runtime,[Vt.EventIngestion]:Ua.Runtime};function gn(t,e){return {[tE]:t,[nE]:e.inConfig??t===Vt.Playbook,[rE]:e.sdkInput,[aE]:e.source??sE[t]}}function Op(t){return {deprecated:true,[iE]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var my={Named:"named",Minted:"minted"},uy="x-revturbine-schema-identity";function Fr(t="handle"){return {[uy]:{kind:my.Named,handleField:t}}}function La(t="handle"){return {[uy]:{kind:my.Minted,handleField:t}}}var me=t=>z.object({items:z.array(t)}),Et=z.object({error:z.string(),code:z.string(),request_id:z.string()}),_=t=>t,de=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()}),{Unrestricted:Zt,Financial:cu}=bn,{Persisted:jc,Transient:uu}=An,{External:Gi}=Tn,oE=gn(Vt.Playbook,{sdkInput:true}),lE=gn(Vt.Playbook,{sdkInput:false}),ng=gn(Vt.Billing,{sdkInput:false}),_s=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":uu,"x-revturbine-schema-exposure":Gi}),Oc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":uu,"x-revturbine-schema-exposure":Gi}),du=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":uu,"x-revturbine-schema-exposure":Gi}),Ko=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),name:Yn.meta(Zt),handle:Yt.meta(Zt),tier_position:z.number().int().min(0).default(0).meta(Zt),sort_order:z.number().int().default(0).meta(Zt),visibility:_s.default("public").meta(Zt),metadata:Wn.meta(Zt)}).meta({id:"Plan","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":Gi,...oE,...Fr()}),cE=mr("PlanAnchor"),Ho=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),handle:Yt.meta({...Zt,readOnly:true}),plan_id:z.string().min(1).meta(Zt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Zt),segment_id:z.string().nullable().default(null).meta(Zt),price_amount:z.number().min(0).meta(cu),pricing_model:Oc.meta(Zt),visibility:_s.default("public").meta(Zt),stripe_price_id:z.string().optional().meta(Zt),price_source:du.default("static").meta(Zt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":Gi,...ng,...La()}),mE=mr("PlanVariationAnchor"),Go=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),name:Yn.meta(Zt),handle:Yt.meta(Zt),sort_order:z.number().int().default(0).meta(Zt),visibility:_s.default("public").meta(Zt),metadata:Wn.meta(Zt)}).meta({id:"AddOn","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":Gi,...lE,...Fr()}),uE=mr("AddOnAnchor"),Yo=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),handle:Yt.meta({...Zt,readOnly:true}),addon_id:z.string().min(1).meta(Zt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Zt),segment_id:z.string().nullable().default(null).meta(Zt),price_amount:z.number().min(0).meta(cu),pricing_model:Oc.meta(Zt),visibility:_s.default("public").meta(Zt),stripe_price_id:z.string().optional().meta(Zt),price_source:du.default("static").meta(Zt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":Gi,...ng,...La()}),dE=mr("AddOnVariationAnchor"),pE=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":uu,"x-revturbine-schema-exposure":Gi}),Wo=Ee.merge(Ge).merge(st).extend({stripe_price_id:z.string().min(1).meta(Zt),stripe_product_id:z.string().min(1).meta(Zt),billing_period:pE.meta(Zt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(cu),currency:QC.meta(cu),pricing_model:Oc.meta(Zt),nickname:z.string().nullable().default(null).meta(Zt),is_mock:z.boolean().default(false).meta(Zt),last_updated_from_stripe:Fn.meta(Zt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":Gi,...ng});var gE=kr(Ko),hE=kr(Ho),fE=kr(Go),_E=kr(Yo),yE=kr(Wo);({"/api/plan-anchors":{get:_({operationId:"listPlanAnchors",requestParams:{query:de},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:me(cE)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:_({operationId:"listPlans",requestParams:{query:de},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:me(Ko)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:_({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(Ko)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ko}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:_({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Ko}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:_({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:gE}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ko}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:_({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:_({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:_({operationId:"listPlanVariationAnchors",requestParams:{query:de},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:me(mE)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:_({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:de},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:me(Ho)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:_({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(Ho)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Ho}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:_({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:Ho}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:_({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:hE}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Ho}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:_({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:_({operationId:"listAddOnAnchors",requestParams:{query:de},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:me(uE)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:_({operationId:"listAddOns",requestParams:{query:de},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:me(Go)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:_({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(Go)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:_({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:_({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:fE}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:_({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:_({operationId:"listAddOnVariationAnchors",requestParams:{query:de},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:me(dE)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:_({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:de},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:me(Yo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:_({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(Yo)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Yo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:_({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Yo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:_({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:_E}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Yo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:_({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:_({operationId:"listStripePrices",requestParams:{query:de},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:me(Wo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:_({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(Wo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Wo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:_({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Wo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:_({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:yE}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Wo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:_({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:Ie}=bn,{Persisted:rg,Transient:ba}=An,{Internal:dy,External:aa}=Tn,py=gn(Vt.Playbook,{sdkInput:true}),vE=gn(Vt.Playbook,{inConfig:false,sdkInput:false}),gy=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),pu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),bE=z.enum(ly).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),xE=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),hy=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),Rc=z.object({entitlement_id:z.string().min(1).meta(Ie),entitlement_handle:z.string().min(1).meta(Ie),status:bE.meta(Ie),limit:z.number().optional().meta(Ie),used:z.number().optional().meta(Ie),allocation:pu.optional().meta(Ie),enforcement:hy.optional().meta(Ie),source:xE.optional().meta(Ie),plan_id:z.string().optional().meta(Ie),segment_id:z.string().optional().meta(Ie),seat_type_id:z.string().optional().meta(Ie),rule_id:z.string().optional().meta(Ie)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa,...bn.Operational});z.object({account:z.record(z.string(),Rc).optional().meta(Ie),instance:z.record(z.string(),Rc).optional().meta(Ie),user:z.record(z.string(),Rc).optional().meta(Ie)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa,...bn.Operational});var SE=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),PE=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),fy=z.object({kind:PE.meta(Ie),id:z.string().min(1).meta(Ie)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),TE=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),Jo=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ie,readOnly:true}),name:Yn.meta(Ie),handle:Yt.meta(Ie),customer_facing_description:z.string().max(500).optional().meta(Ie),type:eg.meta(Ie),unit:z.string().max(100).optional().meta(Ie),period_scope:gy.optional().meta(Ie),allocation:pu.optional().meta(Ie),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Ie),sort_order:z.number().int().default(0).meta(Ie),metadata:Wn.meta(Ie)}).meta({id:"Entitlement","x-revturbine-schema-persistence":rg,"x-revturbine-schema-exposure":aa,...py,...Fr()}),IE=mr("EntitlementAnchor"),el=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ie,readOnly:true}),handle:Yt.meta({...Ie,readOnly:true}),entitlement_id:z.string().min(1).meta(Ie),targets:z.array(fy).min(1).meta(Ie),segment_ids:z.array(z.string()).default([]).meta(Ie),visibility:SE.default("public").meta(Ie),period_scope:gy.optional().meta(Ie),instance:z.string().max(100).optional().meta(Ie),reset_period:TE.optional().meta(Ie),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Ie),enforcement:hy.optional().meta(Ie),warning_threshold_percent:kc.optional().meta(Ie),overage_price_ref:z.string().optional().meta(Ie),grace_period_hours:z.number().int().min(0).optional().meta(Ie),tier_value:z.string().optional().meta(Ie),rate_value:z.number().optional().meta(Ie),initial_grant:z.number().optional().meta(Ie),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Ie),rollover_enabled:z.boolean().optional().meta(Ie),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Ie),seat_type_id:z.string().optional().meta(Ie),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Ie),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Ie),stripe_metered_price_id:z.string().optional().meta(Ie),enabled:z.boolean().optional().meta(Ie),allocation:pu.optional().meta(Ie),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Ie),amount_cents:z.number().int().optional().meta(Ie),currency:z.string().optional().meta(Ie)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":rg,"x-revturbine-schema-exposure":dy,...py,...La()}),CE=mr("EntitlementRuleAnchor");el.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var EE=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),kE=z.object({code:EE.meta(Ie),message:z.string().min(1).meta(Ie),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ie)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa}),qp=el.extend({warnings:z.array(kE).optional().meta(Ie)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":aa});var Dp=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({handle:Yt.meta({...Ie,readOnly:true}),rule_id:z.string().min(1).meta(Ie),experiment_id:z.string().min(1).meta(Ie),variant_name:z.string().min(1).max(200).meta(Ie),is_control:z.boolean().default(false).meta(Ie),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Ie)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":rg,"x-revturbine-schema-exposure":dy,...vE,...La()}),RE=kr(Jo),AE=kr(el);({"/api/entitlement-anchors":{get:_({operationId:"listEntitlementAnchors",requestParams:{query:de},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:me(IE)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:_({operationId:"listEntitlementRuleAnchors",requestParams:{query:de},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:me(CE)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:_({operationId:"listEntitlements",requestParams:{query:de},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:me(Jo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:_({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Rr(Jo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:_({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Jo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:_({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:RE}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Jo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:_({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:_({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:de},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:me(el)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:_({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Rr(el)}}},responses:{201:{description:"Created",content:{"application/json":{schema:qp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:_({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:AE}}},responses:{200:{description:"Updated",content:{"application/json":{schema:qp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:_({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:qp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:_({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:de},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:me(Dp)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:_({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Rr(Dp)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Dp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Ze}=bn,{Persisted:gu,Transient:ys}=An,{External:Na}=Tn,_y=gn(Vt.Playbook,{sdkInput:true});gn(Vt.Playbook,{inConfig:false,sdkInput:false});var wE=gn(Vt.Playbook,{inConfig:false,sdkInput:true}),jE=gn(Vt.Playbook,{inConfig:false,sdkInput:false,source:Ua.Runtime}),OE=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var yy=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ys,"x-revturbine-schema-exposure":Na}),vy=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ys,"x-revturbine-schema-exposure":Na}),qE=z.object({count:z.number().int().positive().meta(Ze),period:vy.meta(Ze)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ys,"x-revturbine-schema-exposure":Na});z.object({surface_type:z.string().min(1).meta(Ze),rules:z.array(qE).meta(Ze),cooldown_ms:z.number().int().nonnegative().optional().meta(Ze)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":gu,"x-revturbine-schema-exposure":Na,...bn.Operational,...wE});var DE=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":ys,"x-revturbine-schema-exposure":Na}),Qo=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ze,readOnly:true}),name:Yn.meta(Ze),handle:Yt.meta(Ze),description:Ks.meta(Ze),category:yy.meta(Ze),drag_order_in_category:z.number().int().default(0).meta(Ze),surface_slot_id:z.string().optional().meta(Ze),entitlement_id:z.string().optional().meta(Ze),tier_threshold:z.string().optional().meta(Ze),threshold_percent:kc.optional().meta(Ze),trial_type:z.enum(["free","reverse"]).optional().meta(Ze),trigger_type:z.string().optional().meta(Ze),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ze),days_before_end:z.number().int().min(0).optional().meta(Ze),qualifier:OE.optional().meta(Ze),activation_window_start:z.string().datetime().optional().meta(Ze),activation_window_end:z.string().datetime().optional().meta(Ze),metadata:Wn.meta(Ze)}).meta({id:"Placement","x-revturbine-schema-persistence":gu,"x-revturbine-schema-exposure":Na,..._y,...Fr()}),UE=mr("PlacementAnchor"),ME=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ys,"x-revturbine-schema-exposure":Na}),FE=z.object({code:ME.meta(Ze),message:z.string().min(1).meta(Ze),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ze)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":ys,"x-revturbine-schema-exposure":Na}),W_=Qo.extend({warnings:z.array(FE).optional().meta(Ze)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ys,"x-revturbine-schema-exposure":Na});var LE=z.object({label:z.string().min(1).max(200).meta(Ze),cta_path_type:DE.meta(Ze),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ze)}).meta({id:"CtaObject","x-revturbine-schema-persistence":ys,"x-revturbine-schema-exposure":Na}),Cc=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ze,readOnly:true}),handle:Yt.meta({...Ze,readOnly:true}),placement_id:z.string().min(1).meta(Ze),drag_order:z.number().int().default(0).meta(Ze),target_plan_ids:z.array(z.string()).default([]).meta(Ze),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ze),target_segments:z.array(z.string()).default([]).meta(Ze),surface_slot_ids:z.array(z.string()).default([]).meta(Ze),surface_template_id:z.string().min(1).meta(Ze),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ze),cta_list:z.array(LE).default([]).meta(Ze),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ze),max_period_unit:vy.default("session").meta(Ze),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ze),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ze),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ze),recommendation_plan_override:z.string().optional().meta(Ze)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":gu,"x-revturbine-schema-exposure":Na,..._y,...La()}),NE=mr("PlacementPayloadAnchor"),VE=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ze),surface_type:mu.meta(Ze),surface_template_ids:z.array(z.string()).default([]).meta(Ze),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ze),first_seen:z.string().datetime().meta({...Ze,readOnly:true}),last_seen:z.string().datetime().meta({...Ze,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ze),placement_count:z.number().int().min(0).default(0).meta({...Ze,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":gu,"x-revturbine-schema-exposure":Na,...jE,...Fr("surface_slot_handle")}),BE=kr(Qo),zE=kr(Cc);({"/api/placement-anchors":{get:_({operationId:"listPlacementAnchors",requestParams:{query:de},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:me(UE)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:_({operationId:"listPlacements",requestParams:{query:de},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:me(Qo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:_({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Rr(Qo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:W_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:_({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Qo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:_({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:BE}}},responses:{200:{description:"Updated",content:{"application/json":{schema:W_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:_({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:_({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Qo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:_({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:yy,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:_({operationId:"listPlacementPayloadAnchors",requestParams:{query:de},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:me(NE)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:_({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:de},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:me(Cc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:_({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Rr(Cc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:_({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:zE}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:_({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:_({operationId:"listSurfaceSlots",requestParams:{query:de},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:me(VE)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Mr,Pii:tl}=bn,{Persisted:ag,Transient:ig}=An,{Internal:rl}=Tn,$E=gn(Vt.CustomerOperations,{sdkInput:false}),KE=z.object({external_id:z.string().min(1).meta(tl),traits:z.record(z.string(),z.unknown()).default({}).meta(tl),plan_id:z.string().optional().meta(Mr)}).meta({id:"Identity","x-revturbine-schema-persistence":ag,"x-revturbine-schema-exposure":rl}),by=z.enum(["payment_failed","payment_method_missing"]),J_=Ee.merge(Ge).merge(st).extend({external_id:z.string().min(1).meta(tl),identity:KE.meta(tl),stripe_customer_id:z.string().optional().meta(Mr),current_plan_id:z.string().optional().meta(Mr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Mr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Mr),billing_health_issues:z.array(by).default([]).meta(Mr),metadata:Wn.meta(Mr)}).meta({id:"Customer","x-revturbine-schema-persistence":ag,"x-revturbine-schema-exposure":rl}),HE=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":ig,"x-revturbine-schema-exposure":rl}),GE=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":ig,"x-revturbine-schema-exposure":rl}),YE=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":ig,"x-revturbine-schema-exposure":rl}),ps=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({handle:Yt.meta({...Mr,readOnly:true}),customer_id:z.string().min(1).meta(tl),customer_id_list:z.array(z.string()).optional().meta(tl),override_type:GE.meta(Mr),target_id:z.string().min(1).meta(Mr),value:z.record(z.string(),z.unknown()).default({}).meta(Mr),duration_type:HE.default("permanent").meta(Mr),duration_value:z.string().optional().meta(Mr),expiry_date:Fn.meta(Mr),status:YE.default("active").meta(Mr),reason:z.string().max(500).optional().meta(Mr),created_by:z.string().optional().meta(Mr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":ag,"x-revturbine-schema-exposure":rl,...$E,...La()});({"/api/customers":{get:_({operationId:"listCustomers",requestParams:{query:de},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:me(J_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:_({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:J_}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:_({operationId:"listCustomerOverrides",requestParams:{query:de},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:me(ps)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:_({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:_({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:ps.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:_({operationId:"deleteCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:_({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:_({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:Ve,Pii:Ec,Financial:Up}=bn,{Persisted:xy,Transient:Pi}=An,{External:al,Internal:qc}=Tn,sg=z.object({in_trial:z.boolean().meta(Ve),trial_type:z.string().optional().meta(Ve),plan_handle:z.string().optional().meta(Ve),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(Ve),trial_limit_type:z.enum(["time","usage"]).optional().meta(Ve),progress_percent:z.number().min(0).max(100).optional().meta(Ve),day_number:z.number().int().min(0).optional().meta(Ve),days_remaining:z.number().int().min(0).optional().meta(Ve),usage_entitlement_handle:z.string().optional().meta(Ve),usage_consumed:z.number().int().min(0).optional().meta(Ve),usage_remaining:z.number().int().min(0).optional().meta(Ve),usage_limit:z.number().int().min(0).optional().meta(Ve)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":al}),Sy=z.object({entitlement_handle:z.string().min(1).meta(Ve),unit:z.string().min(1).meta(Ve),amount:z.number().min(0).meta(Ve),limit:z.number().min(0).optional().meta(Ve),reset_date:z.string().optional().meta(Ve)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":al});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":al});var Py=z.object({handle:z.string().min(1).meta(Ve),name:z.string().min(1).meta(Ve),price:z.string().optional().meta(Ve),billing_period:z.enum(["monthly","annual","none"]).optional().meta(Ve)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":al}),WE=z.object({product_instance_id:z.string().min(1).meta(Ve),user_id:z.string().min(1).meta(Ec),plan:Py.optional().meta(Ve),usage:z.record(z.string(),Sy).default({}).meta(Ve),trial:sg.optional().meta(Ve),entitlements:z.record(z.string(),z.union([z.boolean(),Rc])).default({}).meta(Ve)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":xy,"x-revturbine-schema-exposure":al}),Fo=Ee.merge(st).merge(Ge).extend({user_id:z.string().min(1).meta(Ec),account_id:z.string().min(1).nullable().optional().meta(Ec),email:z.string().email().nullable().optional().meta(Ec),email_type:z.string().optional().meta(Ve),plan_handle:z.string().min(1).optional().meta(Ve),plan:Py.optional().meta(Ve),usage:z.record(z.string(),Sy).default({}).meta(Ve),trial:sg.optional().meta(Ve),payment_failed:z.boolean().optional().meta(Ve),payment_at_risk:z.boolean().optional().meta(Ve),tiers:z.record(z.string(),z.string()).optional().meta(Ve),entitlements:z.record(z.string(),z.union([z.boolean(),Rc])).default({}).meta(Ve),instances:z.array(WE).optional().meta(Ve),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Ec),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Ve,"x-revturbine-schema-persistence":Pi}),derived_config_version:z.string().nullable().optional().meta(Ve),context_hash:z.string().nullable().optional().meta(Ve),derived_computed_at:Fn.meta(Ve),activity_score:z.number().int().min(0).nullable().optional().meta(Ve),activity_score_computed_at:z.string().datetime().nullable().optional().meta(Ve),experiments:z.record(z.string(),z.string()).optional().meta(Ve)}).meta({id:"UserContext","x-revturbine-schema-persistence":xy,"x-revturbine-schema-exposure":al}),JE=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Ve,...ya}),days_remaining:z.number().int().min(0).optional().meta({...Ve,...ya}),ends_at:z.string().optional().meta({...Ve,...ya})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":qc}),ZE=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Ve,...ya}),failed_payment_reason:z.string().optional().meta({...Up,...Y_}),issues:z.array(by).optional().meta({...Up,...Y_}),provider_subscription_id:z.string().optional().meta({...Up,...WC})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":qc}),QE=z.object({can_upgrade:z.boolean().optional().meta({...Ve,...ya}),can_manage_billing:z.boolean().optional().meta({...Ve,...ya})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":qc}),XE=z.object({handle:z.string().min(1).optional().meta({...Ve,...ya}),name:z.string().min(1).optional().meta({...Ve,...ya})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":qc});z.object({subject:z.string().min(1).meta({...Ve,...ya}),context_version:z.string().optional().meta({...Ve,...ya}),trial:JE.optional().meta({...Ve,...ya}),billing:ZE.optional().meta({...Ve,...ya}),plan:XE.optional().meta({...Ve,...ya}),capabilities:QE.optional().meta({...Ve,...ya})}).meta({id:"ClientContext","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":qc});({"/api/user-contexts":{get:_({operationId:"listUserContexts",requestParams:{query:de},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:me(Fo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:_({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:Fo}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:_({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:Fo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fo}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:_({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:Gn}=bn,{Persisted:og,Transient:Ty}=An,{Internal:Dc}=Tn,ek=gn(Vt.Playbook,{sdkInput:true}),Iy=gn(Vt.Playbook,{inConfig:false,sdkInput:true}),tk=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":Ty,"x-revturbine-schema-exposure":Dc}),nk=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":Ty,"x-revturbine-schema-exposure":Dc}),Mp=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Gn,readOnly:true}),name:Yn.meta(Gn),handle:Yt.optional().meta(Gn),category:tk.default("custom").meta(Gn),visibility_toggle:z.boolean().default(true).meta(Gn),source_type:nk.default("system").meta(Gn),estimated_size:z.number().int().min(0).optional().meta(Gn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":og,"x-revturbine-schema-exposure":Dc,...Iy,...Fr()}),rk=mr("SegmentDimensionAnchor"),Fp=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Gn,readOnly:true}),dimension_id:z.string().min(1).meta(Gn),name:Yn.meta(Gn),handle:Yt.meta(Gn),description:Ks.meta(Gn),definition_rule:z.record(z.string(),z.unknown()).optional().meta(Gn),used_in_count:z.number().int().min(0).default(0).meta({...Gn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":og,"x-revturbine-schema-exposure":Dc,...Iy,...Fr()}),ak=mr("SegmentValueAnchor");Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Gn,readOnly:true}),name:Yn.meta(Gn),handle:Yt.meta(Gn),description:Ks.meta(Gn),rules:z.record(z.string(),z.unknown()).default({}).meta(Gn),experiment_handle:z.string().min(1).optional().meta(Gn),experiment_id:z.string().min(1).optional().meta(Gn),is_active:z.boolean().default(true).meta(Gn),estimated_size:z.number().int().min(0).nullable().default(null).meta(Gn),metadata:Wn.meta(Gn)}).meta({id:"Segment","x-revturbine-schema-persistence":og,"x-revturbine-schema-exposure":Dc,...ek,...Fr()});({"/api/segment-dimension-anchors":{get:_({operationId:"listSegmentDimensionAnchors",requestParams:{query:de},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:me(rk)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:_({operationId:"listSegmentValueAnchors",requestParams:{query:de},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:me(ak)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:_({operationId:"listSegmentDimensions",requestParams:{query:de},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:me(Mp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:_({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),description:z.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:Mp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:_({operationId:"deleteCustomDimension",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:_({operationId:"toggleDimensionVisibility",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({visible:z.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:_({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:de},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:me(Fp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:_({operationId:"createSegmentValue",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),handle:z.string(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:Fp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:_({operationId:"updateSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().optional(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:_({operationId:"deleteSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Delete segment value",tags:["segments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"delete"}}})}});var {Unrestricted:Tt}=bn,{Persisted:il,Transient:Cy}=An,{External:vs}=Tn,lg=gn(Vt.Playbook,{sdkInput:true}),ik=gn(Vt.Playbook,{inConfig:false,sdkInput:false}),sk=gn(Vt.Playbook,{inConfig:false,sdkInput:true}),ok=gn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ua.CodeConstant});Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Tt,readOnly:true}),handle:Yt.meta({...Tt,readOnly:true}),name:Yn.meta(Tt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(Tt),subject:z.string().max(500).optional().meta(Tt),body:z.string().meta(Tt),template_variables:z.array(z.string()).default([]).meta(Tt),metadata:Wn.meta(Tt)}).meta({id:"Message","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":vs,...ik,...La()});var Lp=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Tt,readOnly:true}),name:Yn.meta(Tt),handle:Yt.meta(Tt),action_type:cy.meta(Tt),target_url:z.string().optional().meta(Tt),target_plan_id:z.string().optional().meta(Tt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Tt),metadata:Wn.meta(Tt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":vs,...lg,...Fr()}),lk=mr("CtaPathAnchor"),ck=z.enum(["header","body","secondary_body","message","cta_label","secondary_label","image","toggle","duration","send_delay","entitlement","plan","dropdown","json"]).meta({id:"TemplateFieldType","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":vs,...ok}),mk=z.object({name:z.string().min(1),field_type:ck,required:z.boolean().default(false),default_value:z.unknown().optional(),order:z.number().int().min(0).optional(),help_text:z.string().max(500).optional()}).meta({id:"FieldDefinition","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":vs,...sk}),Np=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Tt,readOnly:true}),name:Yn.meta(Tt),handle:Yt.meta(Tt),surface_type:eE.meta(Tt),field_definitions:z.array(mk).default([]).meta(Tt),description:Ks.meta(Tt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":vs,...lg,...Fr()}),uk=mr("SurfaceTemplateAnchor"),Vp=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Tt,readOnly:true}),name:Yn.meta(Tt),handle:Yt.meta(Tt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Tt),variation_dimension_id:z.string().optional().meta(Tt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(Tt),notes:z.string().max(1e3).optional().meta(Tt),used_in_count:z.number().int().min(0).default(0).meta({...Tt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":vs,...lg,...Fr()}),dk=mr("MessageBlockRecordAnchor"),pk=z.object({segment_id:z.string().min(1).meta(Tt),message_block_id:z.string().min(1).meta(Tt),ui_path_id:z.string().optional().meta(Tt),promotion_id:z.string().optional().meta(Tt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":Cy,"x-revturbine-schema-exposure":vs});z.object({payload_id:z.string().min(1).meta(Tt),tenant_id:z.string().min(1).meta(Tt),name:Yn.meta(Tt),surface_template_id:z.string().min(1).meta(Tt),default_message_block_id:z.string().min(1).meta(Tt),segment_content_map:z.array(pk).optional().meta(Tt),ui_path_id:z.string().optional().meta(Tt),promotion_id:z.string().optional().meta(Tt),status:z.enum(["draft","active","inactive"]).meta(Tt),created_at:z.string().datetime().optional().meta({...Tt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...Tt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":Cy,"x-revturbine-schema-exposure":vs});({"/api/surface-template-anchors":{get:_({operationId:"listSurfaceTemplateAnchors",requestParams:{query:de},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:me(uk)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:_({operationId:"listSurfaceTemplates",requestParams:{query:de},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:me(Np)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:_({operationId:"listMessageBlockRecordAnchors",requestParams:{query:de},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:me(dk)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:_({operationId:"listMessageBlocks",requestParams:{query:de},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:me(Vp)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:_({operationId:"listCtaPathAnchors",requestParams:{query:de},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:me(lk)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:_({operationId:"listCtaPaths",requestParams:{query:de},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:me(Lp)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Xo,Pii:gk}=bn,{Persisted:Ey}=An,{Internal:hk,External:fk}=Tn,_k=gn(Vt.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...Xo,readOnly:true}),name:z.string().min(1).max(120).meta(Xo),mode:z.enum(["light","dark","system"]).default("system").meta(Xo),tokens:z.record(z.string(),z.string()).default({}).meta(Xo)}).meta({id:"Theme","x-revturbine-schema-persistence":Ey,"x-revturbine-schema-exposure":fk,..._k});var Z_=Ee.merge(Ge).extend({user_id:z.string().min(1).meta(gk),scope:z.string().min(1).meta(Xo),preferences:z.record(z.string(),z.unknown()).default({}).meta(Xo)}).meta({id:"UiPreference","x-revturbine-schema-persistence":Ey,"x-revturbine-schema-exposure":hk});({"/api/ui-preferences":{get:_({operationId:"listUiPreferences",requestParams:{query:de},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:me(Z_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:_({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(kr(Z_))}}},responses:{200:{description:"UI preferences upsert response",content:{"application/json":{schema:z.object({updated:z.number().int().min(0)})}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"upsert",writeSchema:"UiPreferenceSchema#writable"}}})}});var {Unrestricted:At,Financial:bi}=bn,{Persisted:ky,Transient:Uc}=An,{External:Mc,Internal:Ry}=Tn,yk=z.object({month:z.string().meta(At),cohort_size:z.number().int().min(0).meta(At),retained:z.number().int().min(0).meta(At),retention_rate:z.number().min(0).max(1).meta(At),revenue_cents:z.number().int().min(0).meta(bi)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),vk=z.object({step:z.string().meta(At),label:z.string().meta(At),count:z.number().int().min(0).meta(At),conversion_rate:z.number().min(0).max(1).meta(At),drop_off_rate:z.number().min(0).max(1).meta(At)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),bk=z.object({placement_id:z.string().meta(At),placement_name:z.string().meta(At),impressions:z.number().int().min(0).meta(At),clicks:z.number().int().min(0).meta(At),conversions:z.number().int().min(0).meta(At),ctr:z.number().min(0).meta(At),conversion_rate:z.number().min(0).meta(At),revenue_cents:z.number().int().min(0).meta(bi)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),xk=z.object({date:z.string().meta(At),mrr_cents:z.number().int().min(0).meta(bi),arr_cents:z.number().int().min(0).meta(bi),new_mrr_cents:z.number().int().min(0).meta(bi),churned_mrr_cents:z.number().int().min(0).meta(bi),expansion_mrr_cents:z.number().int().min(0).meta(bi),net_new_mrr_cents:z.number().int().meta(bi)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),Sk=z.object({metric_key:z.string().min(1).meta(At),label:z.string().meta(At),current_value:z.number().meta(bi),previous_value:z.number().nullable().default(null).meta(bi),change_percent:z.number().nullable().default(null).meta(At),period:z.string().meta(At),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(At)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),Q_=Ee.merge(Ge).merge(st).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(At),severity:tg.meta(At),resource_type:z.string().min(1).meta(At),resource_id:z.string().min(1).meta(At),summary:z.string().max(1e3).meta(At),expected_value:z.unknown().optional().meta(At),actual_value:z.unknown().optional().meta(At),affected_customer_count:z.number().int().min(0).default(0).meta(At),is_resolved:z.boolean().default(false).meta(At),resolved_at:Fn.meta(At),metadata:Wn.meta(At)}).meta({id:"DriftReport","x-revturbine-schema-persistence":ky,"x-revturbine-schema-exposure":Ry}),X_=Ee.merge(Ge).merge(st).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(At),severity:tg.meta(At),title:z.string().min(1).max(300).meta(At),description:z.string().max(2e3).meta(At),resource_type:z.string().optional().meta(At),resource_id:z.string().optional().meta(At),is_acknowledged:z.boolean().default(false).meta(At),acknowledged_at:Fn.meta(At),acknowledged_by:z.string().nullable().default(null).meta(At),metadata:Wn.meta(At)}).meta({id:"Alert","x-revturbine-schema-persistence":ky,"x-revturbine-schema-exposure":Ry});({"/api/analytics/kpis":{get:_({operationId:"listKpiAggregates",requestParams:{query:de},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:me(Sk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:_({operationId:"listPlacementPerformance",requestParams:{query:de},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:me(bk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:_({operationId:"listRevenueMetrics",requestParams:{query:de},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:me(xk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:_({operationId:"listCohortMetrics",requestParams:{query:de},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:me(yk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:_({operationId:"listFunnelSteps",requestParams:{query:de},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:me(vk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:_({operationId:"listDriftReports",requestParams:{query:de},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:me(Q_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:_({operationId:"resolveDriftReport",requestParams:{path:z.object({reportId:z.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:Q_}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:_({operationId:"listAlerts",requestParams:{query:de},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:me(X_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:_({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:X_}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:v}=bn,{Transient:Pk}=An,{Internal:Tk}=Tn,Qe=t=>({id:t,"x-revturbine-schema-persistence":Pk,"x-revturbine-schema-exposure":Tk}),Ik=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,Ay=/^[a-z][a-z0-9_-]{0,99}$/,rn=z.string().regex(Ik).max(120),Ea=z.string().regex(Ay),va=rn.meta(Qe("AnalyticsSemanticId")),ai=z.enum(["account","user","billing_unit","organization"]).meta(Qe("AnalyticsAnalyticalUnit")),hu=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(Qe("AnalyticsQueryFamily")),Hs=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(Qe("AnalyticsSourceScope")),wy=z.enum(["as_of_event","current"]).meta(Qe("AnalyticsHistoricalMode")),Ck=z.enum(["hour","day","week","month","quarter"]).meta(Qe("AnalyticsTimeGrain")),cg=z.enum(["none","previous_period","previous_year"]).meta(Qe("AnalyticsCompareMode")),fu=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(Qe("AnalyticsFilterOperator")),mg=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(Qe("AnalyticsFilterControl")),Ek=z.enum(["low","medium","high"]).meta(Qe("AnalyticsCardinalityClass")),ug=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(Qe("AnalyticsFieldType")),kk=z.enum(["increase","decrease","neutral"]).meta(Qe("AnalyticsMetricDirection")),Rk=z.enum(["binary","count","continuous","ratio","revenue"]).meta(Qe("AnalyticsMetricStatisticalType")),Ak=z.enum(["additive","semi_additive","non_additive"]).meta(Qe("AnalyticsMetricAggregationSemantics")),wk=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(Qe("AnalyticsDimensionType")),jy=z.enum(["filter","group","split","sort"]).meta(Qe("AnalyticsDimensionCapability")),jk=z.enum(["private","team","tenant"]).meta(Qe("AnalyticsViewVisibility")),ey=z.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta(Qe("AnalyticsCustomizationCapability")),Ok=z.enum(["unrestricted","pii","financial","operational"]).meta(Qe("AnalyticsClassification")),ka=z.strictObject({value:z.string().min(1).max(300).meta(v),key:z.string().max(120).optional().meta(v)}).meta(Qe("LocalizedText")),Xp=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),_u=z.union([Xp,z.array(Xp).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(v),compare:cg.optional().meta(v)}),z.strictObject({min:z.number().optional().meta(v),max:z.number().optional().meta(v)})]).meta(Qe("AnalyticsFilterValue")),dg=z.strictObject({dimension:rn.meta(v),operator:fu.meta(v),value:_u.optional().meta(v)}).meta(Qe("AnalyticsSemanticFilter")),Ac=z.strictObject({type:z.enum(["number","currency","percent","duration"]).meta(v),decimals:z.number().int().min(0).max(6).optional().meta(v),compact:z.boolean().optional().meta(v)}).meta(Qe("AnalyticsFormatSpec")),qk=z.strictObject({legend:z.enum(["none","top","right","bottom","left"]).optional().meta(v),value_labels:z.boolean().optional().meta(v),reference_lines:z.array(z.strictObject({value:z.number().meta(v),label:ka.optional().meta(v)})).max(5).optional().meta(v),x_axis_format:Ac.optional().meta(v),y_axis_format:Ac.optional().meta(v),empty_state:z.enum(["blank","message"]).optional().meta(v)}).meta(Qe("AnalyticsSafeChartOptions")),yu=z.object({deprecated:z.boolean().meta(v),replaced_by:rn.optional().meta(v)}).meta(Qe("AnalyticsCatalogDeprecation")),Dk=yu,Uk=z.object({id:rn.meta(v),label:z.string().min(1).max(120).meta(v),description:z.string().max(500).optional().meta(v),when_to_use:z.string().max(500).optional().meta(v),do_not_use_for:z.string().max(500).optional().meta(v),type:wk.meta(v),operators:z.array(fu).min(1).meta(v),control:mg.meta(v),capabilities:z.array(jy).min(1).meta(v),cardinality:Ek.meta(v),classification:Ok.default("unrestricted").meta(v),historical_mode:wy.optional().meta(v),allowed_concepts:z.array(rn).optional().meta(v),exclude_from_segment_picker:z.boolean().default(false).meta(v),deprecation:yu.optional().meta(v)}).meta(Qe("AnalyticsCatalogDimension")),Mk=z.object({id:rn.meta(v),label:z.string().min(1).max(120).meta(v),description:z.string().max(500).optional().meta(v),when_to_use:z.string().max(500).optional().meta(v),do_not_use_for:z.string().max(500).optional().meta(v),value_type:ug.meta(v),format:Ac.optional().meta(v),source_scope:Hs.optional().meta(v),direction:kk.optional().meta(v),statistical_type:Rk.optional().meta(v),aggregation_semantics:Ak.optional().meta(v),preferred_analysis_unit:ai.optional().meta(v),deprecation:yu.optional().meta(v)}).meta(Qe("AnalyticsCatalogMetric")),Fk=z.object({id:rn.meta(v),version:z.number().int().min(1).meta(v),label:z.string().min(1).max(120).meta(v),description:z.string().max(500).optional().meta(v),when_to_use:z.string().max(500).optional().meta(v),do_not_use_for:z.string().max(500).optional().meta(v),grain:z.array(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/)).min(1).meta(v),analytical_units:z.array(ai).min(1).meta(v),primary_time_dimension:rn.meta(v),historical_mode:wy.meta(v),dimensions:z.array(rn).min(1).meta(v),metrics:z.array(rn).min(1).meta(v),query_families:z.array(hu).min(1).meta(v),source_scope:Hs.meta(v),coverage_metric:rn.optional().meta(v),deprecation:yu.optional().meta(v)}).meta(Qe("AnalyticsCatalogConcept")),Oy=z.strictObject({field:rn.meta(v),direction:z.enum(["asc","desc"]).meta(v)}),qy=z.strictObject({dimension:rn.meta(v),grain:Ck.meta(v)}),Lk=z.strictObject({concept:rn.meta(v),family:hu.meta(v),metrics:z.array(rn).min(1).max(10).meta(v),group_by:z.array(rn).max(3).optional().meta(v),time:qy.optional().meta(v),filters_from:z.array(Ea).max(20).optional().meta(v),fixed_filters:z.array(dg).max(20).optional().meta(v),compare:cg.optional().meta(v),order_by:z.array(Oy).max(3).optional().meta(v),limit:z.number().int().min(1).max(1e3).optional().meta(v)}).meta(Qe("AnalyticsViewQuery")),Nk=z.strictObject({type:z.literal("metric").meta(v),value:rn.meta(v),comparison:rn.optional().meta(v),format:Ac.optional().meta(v)}).meta(Qe("AnalyticsRenderMetric")),Vk=z.strictObject({type:z.literal("cartesian").meta(v),mark:z.enum(["line","area","bar","stacked_bar","scatter"]).meta(v),encoding:z.strictObject({x:rn.meta(v),y:z.union([rn,z.array(rn).min(1).max(5)]).meta(v),color:rn.optional().meta(v),facet:rn.optional().meta(v)}).meta(v),options:qk.optional().meta(v)}).meta(Qe("AnalyticsRenderCartesian")),Bk=z.strictObject({type:z.literal("funnel").meta(v),stages:z.array(rn).min(2).max(10).meta(v),split_by:rn.optional().meta(v)}).meta(Qe("AnalyticsRenderFunnel")),zk=z.strictObject({type:z.literal("table").meta(v),columns:z.array(rn).min(1).max(20).meta(v)}).meta(Qe("AnalyticsRenderTable")),$k=z.strictObject({type:z.literal("timeline").meta(v),timestamp:rn.meta(v),event_type:rn.meta(v)}).meta(Qe("AnalyticsRenderTimeline")),Kk=z.strictObject({type:z.literal("recommendations").meta(v),presentation:z.enum(["list","ranked_cards"]).meta(v)}).meta(Qe("AnalyticsRenderRecommendations")),Dy=z.discriminatedUnion("type",[Nk,Vk,Bk,zk,$k,Kk]).meta(Qe("AnalyticsRenderSpec")),Hk=z.strictObject({id:Ea.meta(v),dimension:rn.meta(v),control:mg.meta(v),label:ka.optional().meta(v),operators:z.array(fu).min(1).meta(v),default_value:_u.optional().meta(v),required:z.boolean().default(false).meta(v),pinned:z.boolean().default(false).meta(v),applies_to:z.union([z.literal("all"),z.array(Ea).min(1).max(24)]).default("all").meta(v)}).meta(Qe("AnalyticsViewFilter")),Uy=z.strictObject({type:z.literal("grid").meta(v),columns:z.number().int().min(1).max(24).default(12).meta(v),items:z.array(z.strictObject({block_id:Ea.meta(v),x:z.number().int().min(0).meta(v),y:z.number().int().min(0).meta(v),w:z.number().int().min(1).max(24).meta(v),h:z.number().int().min(1).max(24).meta(v)})).max(24).meta(v)}).meta(Qe("AnalyticsViewLayout")),Gk=z.strictObject({id:Ea.meta(v),title:ka.optional().meta(v),description:ka.optional().meta(v),query:Lk.meta(v),render:Dy.meta(v)}).meta(Qe("AnalyticsViewBlock")),Yk=z.strictObject({id:Ea.meta(v),label:ka.meta(v),target:rn.meta(v),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).default({}).meta(v)}).meta(Qe("AnalyticsViewHandoff")),Wk=z.strictObject({allow:z.array(ey).default([]).meta(v),deny:z.array(ey).default([]).meta(v)}).meta(Qe("AnalyticsCustomizationPolicy"));var My=z.string().regex(/^\d+\.\d+$/),Jk=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(v),schema_version:My.meta(v),id:Ea.meta(v),revision:z.number().int().min(1).meta(v),title:ka.meta(v),description:ka.optional().meta(v),analytical_unit:ai.meta(v),base_template:z.strictObject({id:Ea.meta(v),version:z.number().int().min(1).meta(v)}).optional().meta(v),catalog_version:z.string().min(1).max(64).meta(v),filters:z.array(Hk).max(20).meta(v),layout:Uy.meta(v),blocks:z.array(Gk).min(1).max(24).meta(v),handoffs:z.array(Yk).max(10).optional().meta(v),customization_policy:Wk.meta(v)}).meta(Qe("AnalyticsView")),Zk=z.strictObject({id:Ea.optional().meta(v),dimension:rn.meta(v),control:mg.optional().meta(v),label:ka.optional().meta(v),operators:z.array(fu).min(1).optional().meta(v),default_value:_u.optional().meta(v),required:z.boolean().optional().meta(v),pinned:z.boolean().optional().meta(v),applies_to:z.union([z.literal("all"),z.array(Ea).min(1).max(24)]).optional().meta(v)}).meta(Qe("AnalyticsViewFilterDraft")),Qk=z.strictObject({id:Ea.optional().meta(v),title:ka.optional().meta(v),concept:rn.meta(v),family:hu.meta(v),metrics:z.array(rn).min(1).max(10).meta(v),group_by:z.array(rn).max(3).optional().meta(v),time:qy.optional().meta(v),filters_from:z.array(Ea).max(20).optional().meta(v),fixed_filters:z.array(dg).max(20).optional().meta(v),compare:cg.optional().meta(v),order_by:z.array(Oy).max(3).optional().meta(v),limit:z.number().int().min(1).max(1e3).optional().meta(v),render:z.union([z.literal("auto"),Dy]).optional().meta(v)}).meta(Qe("AnalyticsViewBlockDraft")),Xk=z.strictObject({id:Ea.optional().meta(v),label:ka.optional().meta(v),target:rn.meta(v),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).optional().meta(v)}).meta(Qe("AnalyticsViewHandoffDraft"));z.strictObject({kind:z.literal("revturbine.analytics-view-draft").meta(v),schema_version:My.meta(v),title:ka.meta(v),analytical_unit:ai.optional().meta(v),filters:z.union([z.literal("recommended"),z.array(Zk).max(20)]).optional().meta(v),layout:z.union([z.literal("auto"),Uy]).optional().meta(v),blocks:z.array(Qk).min(1).max(24).meta(v),handoffs:z.union([z.literal("recommended"),z.array(Xk).max(10)]).optional().meta(v),visibility:jk.optional().meta(v)}).meta(Qe("AnalyticsViewDraft"));var pg=z.string().regex(/^(\/[^/]*)*$/).max(300),eR=z.strictObject({op:z.enum(["add","replace","remove"]).meta(v),path:pg.meta(v),value:z.unknown().optional().meta(v)}).meta(Qe("AnalyticsSuggestedPatchOp")),Fy=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(v),message:z.string().min(1).max(500).meta(v)}).meta(Qe("AnalyticsWarning")),tR=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(v),path:pg.meta(v),message:z.string().min(1).max(500).meta(v),actual:z.unknown().optional().meta(v),allowed:z.array(Xp).max(50).optional().meta(v),suggested_patch:z.array(eR).max(10).optional().meta(v)}).meta(Qe("AnalyticsValidationIssue"));z.object({path:pg.meta(v),rule:z.string().min(1).max(120).meta(v),value:z.unknown().optional().meta(v)}).meta(Qe("AnalyticsCompileResolution"));z.object({valid:z.boolean().meta(v),errors:z.array(tR).default([]).meta(v),warnings:z.array(Fy).default([]).meta(v),catalog_version:z.string().min(1).max(64).meta(v)}).meta(Qe("AnalyticsValidationResult"));var nR=z.object({id:rn.meta(v),type:ug.meta(v),nullable:z.boolean().meta(v)}).meta(Qe("AnalyticsResultField")),rR=z.object({numerator:z.number().int().min(0).meta(v),denominator:z.number().int().min(0).meta(v),rate:z.number().min(0).max(1).meta(v)}).meta(Qe("AnalyticsCoverage")),aR=z.object({query_hash:z.string().min(1).max(128).meta(v),concept:rn.meta(v),analytical_unit:ai.meta(v),source_scope:Hs.meta(v),coverage:rR.optional().meta(v),as_of:z.string().datetime().meta(v),freshness_seconds:z.number().int().min(0).meta(v),applied_filters:z.array(dg).default([]).meta(v),next_cursor:z.string().max(500).optional().meta(v),warnings:z.array(Fy).default([]).meta(v)}).meta(Qe("AnalyticsResultMeta")),iR=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(v),fields:z.array(nR).meta(v),meta:aR.meta(v)}).meta(Qe("AnalyticsResult")),{Unrestricted:Hn}=bn,{Transient:sR}=An,{Internal:oR}=Tn,Fc=t=>({id:t,"x-revturbine-schema-persistence":sR,"x-revturbine-schema-exposure":oR}),lR=z.enum(["fixture","generated"]).meta(Fc("AnalyticsCatalogSource"));z.object({catalog_version:z.string().min(1).max(64).meta(Hn),source:lR.meta(Hn),generated_at:z.string().datetime().optional().meta(Hn),concepts:z.array(Fk).min(1).meta(Hn),dimensions:z.array(Uk).min(1).meta(Hn),metrics:z.array(Mk).min(1).meta(Hn)}).meta(Fc("AnalyticsCatalog"));var mR=z.enum(["concept","dimension","metric","query_family"]).meta(Fc("AnalyticsAgentCatalogEntryKind")),uR=z.object({id:va.meta(Hn),kind:mR.meta(Hn),label:z.string().min(1).max(120).meta(Hn),description:z.string().min(1).max(500).meta(Hn),when_to_use:z.string().max(500).optional().meta(Hn),do_not_use_for:z.string().max(500).optional().meta(Hn),value_type:ug.optional().meta(Hn),format:Ac.optional().meta(Hn),capabilities:z.array(jy).optional().meta(Hn),compatible_concepts:z.array(va).optional().meta(Hn),compatible_families:z.array(hu).optional().meta(Hn),analytical_units:z.array(ai).optional().meta(Hn),source_scope:Hs.optional().meta(Hn),example:z.string().max(2e3).optional().meta(Hn),deprecation:Dk.optional().meta(Hn)}).meta(Fc("AnalyticsAgentCatalogEntry"));z.object({catalog_version:z.string().min(1).max(64).meta(Hn),query:z.string().min(1).max(200).meta(Hn),entries:z.array(uR).max(50).meta(Hn)}).meta(Fc("AnalyticsCatalogSearchResult"));var {Unrestricted:cr}=bn,{Transient:pR}=An,{Internal:gR}=Tn,sl=t=>({id:t,"x-revturbine-schema-persistence":pR,"x-revturbine-schema-exposure":gR}),zs=z.string().regex(Ay),hR=z.strictObject({filter_id:zs.meta(cr),value:_u.nullable().meta(cr)}).meta(sl("AnalyticsFilterState"));z.strictObject({view_id:zs.meta(cr),revision:z.number().int().min(1).optional().meta(cr),block_ids:z.array(zs).min(1).max(24).optional().meta(cr),filter_state:z.array(hR).max(20).optional().meta(cr)}).meta(sl("AnalyticsQueryRequest"));var _R=z.object({block_id:zs.meta(cr),code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(cr),message:z.string().min(1).max(500).meta(cr)}).meta(sl("AnalyticsBlockError")),yR=z.object({block_id:zs.meta(cr),result:iR.meta(cr)}).meta(sl("AnalyticsBlockResult"));z.object({view_id:zs.meta(cr),revision:z.number().int().min(1).meta(cr),catalog_version:z.string().min(1).max(64).meta(cr),results:z.array(yR).meta(cr),errors:z.array(_R).default([]).meta(cr)}).meta(sl("AnalyticsQueryResponse"));var bR=z.object({id:zs.meta(cr),version:z.number().int().min(1).meta(cr),title:ka.meta(cr),description:ka.optional().meta(cr),block_count:z.number().int().min(1).meta(cr)}).meta(sl("AnalyticsTemplateSummary"));z.object({q:z.string().min(1).max(200),limit:z.coerce.number().int().min(1).max(50).optional()});({"/api/analytics/templates":{get:_({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:me(bR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:_({operationId:"getAnalyticsView",requestParams:{path:z.object({viewId:z.string()})},summary:"Load a system or saved view document",tags:["analytics-views"],responses:{200:{description:"Canonical view document",content:{"application/json":{schema:Jk}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var {Unrestricted:Hi}=bn,{Transient:SR}=An,{Internal:PR}=Tn,vu=t=>({id:t,"x-revturbine-schema-persistence":SR,"x-revturbine-schema-exposure":PR}),TR=z.enum(["analytics_execution","experiment_assignment","experiment_evidence","experiment_analysis","growth_signal","growth_benchmark","optimization"]).meta(vu("ProviderCapability")),Ly=z.enum(["available","stale","unavailable","unsupported","partial"]).meta(vu("ProviderAvailability")),Lc=z.object({provider_handle:Yt.meta(Hi),provider_type:z.string().min(1).max(100).meta(Hi),provider_version:z.string().min(1).max(100).meta(Hi),contract_version:z.number().int().min(1).meta(Hi),generated_at:z.string().datetime().meta(Hi),data_watermark:z.string().datetime().optional().meta(Hi),source_revision:z.string().min(1).max(200).optional().meta(Hi)}).meta(vu("ProviderProvenance")),Bp=z.object({provider_handle:Yt.meta(Hi),capability:TR.meta(Hi)}).meta(vu("ProviderBindingRef")),{Unrestricted:Fe}=bn,{Transient:IR}=An,{Internal:CR}=Tn,Yi=t=>({id:t,"x-revturbine-schema-persistence":IR,"x-revturbine-schema-exposure":CR}),ER=z.object({start:z.string().datetime().meta(Fe),end:z.string().datetime().meta(Fe),value:z.number().meta(Fe),numerator:z.number().optional().meta(Fe),denominator:z.number().optional().meta(Fe),sample_size:z.number().int().min(0).optional().meta(Fe)}).meta(Yi("GrowthSignalPoint")),kR=z.object({metric:va.meta(Fe),analytical_unit:ai.meta(Fe),source_scope:Hs.meta(Fe),dimensions:z.record(va,z.string()).meta(Fe),points:z.array(ER).meta(Fe),provenance:Lc.meta(Fe)}).meta(Yi("GrowthSignalSeries"));z.object({availability:Ly.meta(Fe),series:z.array(kR).meta(Fe),provenance:Lc.meta(Fe)}).meta(Yi("GrowthSignalBundle"));z.object({current:z.number().meta(Fe),baseline:z.number().meta(Fe),absolute_delta:z.number().meta(Fe),relative_delta:z.number().meta(Fe),short_window:z.number().meta(Fe),long_window:z.number().meta(Fe),slope:z.number().meta(Fe),acceleration:z.number().meta(Fe),volatility:z.number().meta(Fe),persistence:z.number().meta(Fe),seasonal_expected:z.number().optional().meta(Fe),seasonal_deviation:z.number().optional().meta(Fe),peer_value:z.number().optional().meta(Fe),peer_gap:z.number().optional().meta(Fe),sample_size:z.number().int().min(0).optional().meta(Fe)}).meta(Yi("TrendFeatures"));var RR=z.object({min_units:z.number().int().min(0).optional().meta(Fe),min_events:z.number().int().min(0).optional().meta(Fe),min_periods:z.number().int().min(0).optional().meta(Fe),min_denominator:z.number().min(0).optional().meta(Fe)}).meta(Yi("EvidenceRequirement")),AR=z.enum(["increase","decrease","level_shift","threshold","peer_gap","correlation"]).meta(Yi("OpportunityInterpretation")),Ny=z.object({metric:va.meta(Fe),current:z.number().meta(Fe),baseline:z.number().optional().meta(Fe),relative_delta:z.number().optional().meta(Fe),window:z.object({start:z.string().datetime().meta(Fe),end:z.string().datetime().meta(Fe)}).meta(Fe),sample_size:z.number().int().min(0).optional().meta(Fe),source_scope:Hs.meta(Fe),interpretation:AR.meta(Fe)}).meta(Yi("OpportunityEvidence"));z.object({required_metrics:z.array(va).min(1).meta(Fe),evidence:RR.meta(Fe)}).meta(Yi("DetectorRequirements"));var zp=z.record(z.string(),z.unknown());z.object({detector_id:z.string().min(1).meta(Fe),detector_version:z.number().int().min(1).meta(Fe),opportunity_type:z.string().min(1).meta(Fe),resource:z.object({type:z.string().min(1).meta(Fe),handle:z.string().min(1).meta(Fe)}).optional().meta(Fe),segment_handles:z.array(z.string().min(1)).optional().meta(Fe),evidence:z.array(Ny).min(1).meta(Fe),hypothesis:z.string().min(1).meta(Fe),confidence:z.number().min(0).max(1).meta(Fe),impact:zp.optional().meta(Fe),suggested_action:zp.optional().meta(Fe),suggested_experiment:zp.optional().meta(Fe)}).meta(Yi("OpportunityCandidate"));var {Unrestricted:xi}=bn,{Transient:Nc}=An,{External:Vc}=Tn,Vy=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":Vc}),wR=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":Vc}),jR=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(xi),surface:Vy.meta(xi),purpose:z.string().min(1).max(300).meta(xi),stability:wR.meta(xi)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":Vc}),OR=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(xi),surface:Vy.meta(xi),purpose:z.string().min(1).max(300).meta(xi)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":Vc});z.object({version:z.number().int().min(1).meta(xi),events:z.array(jR).min(1).meta(xi),prefix_families:z.array(OR).meta(xi)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":Vc});var By=["web_signed_up","web_signed_in","cli_signed_up","cli_signed_in","cli_command_executed","changeset_submitted","changeset_approved","changeset_rejected","changeset_deployed","changeset_launched","changeset_parked","changeset_resumed","changeset_discarded","changeset_archived","config_imported","config_exported","entity_created","entity_updated","entity_deleted","web_api_error"],gg=["placement_resolved","placement_rendered","placement_exposed","placement_outcome","placement_interaction","gate_evaluated","gate_attempted","gate_allowed","gate_denied","slot_evaluated","slot_filled","slot_empty","slot_suppressed","slot_error","segment_enrolled","segment_unenrolled","user_context_observed","page_view"],qR=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],DR=["area_viewed","feature_gated"],ty={web_signed_up:{purpose:"An operator created a control-plane account via the web app.",stability:"stable"},web_signed_in:{purpose:"An operator signed in to the web app.",stability:"stable"},cli_signed_up:{purpose:"An operator created an account through the CLI device flow.",stability:"stable"},cli_signed_in:{purpose:"An operator authenticated the CLI.",stability:"stable"},cli_command_executed:{purpose:"A CLI command ran; the command name rides on payload.command.",stability:"stable"},changeset_submitted:{purpose:"A playbook version was submitted for review.",stability:"stable"},changeset_approved:{purpose:"A playbook version was approved.",stability:"stable"},changeset_rejected:{purpose:"A playbook version was rejected.",stability:"stable"},changeset_deployed:{purpose:"A playbook version was compiled and activated.",stability:"stable"},changeset_launched:{purpose:"A deployed playbook version was launched to traffic.",stability:"stable"},changeset_parked:{purpose:"A playbook version was parked.",stability:"stable"},changeset_resumed:{purpose:"A parked playbook version resumed.",stability:"stable"},changeset_discarded:{purpose:"A draft playbook version was discarded.",stability:"stable"},changeset_archived:{purpose:"A playbook version was archived.",stability:"stable"},config_imported:{purpose:"A Playbook was imported as a staged change set.",stability:"stable"},config_exported:{purpose:"A Playbook was exported.",stability:"stable"},entity_created:{purpose:"A config entity was created; the resource rides on payload.resource.",stability:"stable"},entity_updated:{purpose:"A config entity was updated; the resource rides on payload.resource.",stability:"stable"},entity_deleted:{purpose:"A config entity was deleted; the resource rides on payload.resource.",stability:"stable"},web_api_error:{purpose:"A control-plane API request failed; internal telemetry only, never via the customer SDK.",stability:"internal"},area_viewed:{purpose:"An authenticated product area of the web app was viewed (dashboard, a studio).",stability:"internal"},feature_gated:{purpose:"A nav-gated section of the web app rendered its gate notice \u2014 the control plane\u2019s own paywall analog.",stability:"internal"},placement_resolved:{purpose:"The decision engine resolved a placement for a slot.",stability:"stable"},placement_rendered:{purpose:"A resolved placement's visual root rendered.",stability:"stable"},placement_exposed:{purpose:"A rendered placement met the exposure basis (render or viewport).",stability:"stable"},placement_outcome:{purpose:"A placement reached a terminal outcome (converted, dismissed, \u2026).",stability:"stable"},placement_interaction:{purpose:"A user interacted with a presented placement.",stability:"stable"},gate_evaluated:{purpose:"A gate was evaluated during render; the passive denominator signal.",stability:"stable"},gate_attempted:{purpose:"A user actively invoked a gated action.",stability:"stable"},gate_allowed:{purpose:"An actively invoked gated action was allowed.",stability:"stable"},gate_denied:{purpose:"An actively invoked gated action was denied.",stability:"stable"},slot_evaluated:{purpose:"A surface slot resolution ran; the funnel denominator.",stability:"stable"},slot_filled:{purpose:"A slot resolved to a payload and will render.",stability:"stable"},slot_empty:{purpose:"A slot resolved to nothing eligible.",stability:"stable"},slot_suppressed:{purpose:"A slot was eligible but suppressed by caps or cooldown.",stability:"stable"},slot_error:{purpose:"A slot resolution failed.",stability:"internal"},segment_enrolled:{purpose:"A user entered a targeting segment.",stability:"stable"},segment_unenrolled:{purpose:"A user left a targeting segment.",stability:"stable"},user_context_observed:{purpose:"Reserved: the NAMES of custom user-context fields set on identify/setUserContext. Names only, never values.",stability:"internal"},page_view:{purpose:"A route change tracked by the SDK router integration.",stability:"stable"},sdk_init:{purpose:"One anonymous adoption beacon per SDK startup.",stability:"internal"},sdk_error:{purpose:"The SDK itself malfunctioned; distinct from a decision producing nothing.",stability:"internal"},sdk_validation_warning:{purpose:"The SDK found a config or usage problem worth surfacing.",stability:"internal"},resolution_failure:{purpose:"A decision produced nothing; allow-listed handles and closed reason codes only.",stability:"internal"}};function ru(t,e){return t.map(n=>({name:n,surface:e,purpose:ty[n].purpose,stability:ty[n].stability}))}var zy=["impression"],hg=[{prefix:"engagement_",surface:"sdk_client",purpose:"Organic product-signal events under customer-declared engagement scopes."}],$y={events:[...ru(By,"control_plane"),...ru(DR,"control_plane"),...ru(gg,"sdk_client"),...ru(qR,"sdk_client")]};$y.events.map(t=>t.name);$y.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:L,Pii:nl}=bn,{Persisted:Ky,Transient:Ln}=An,{Internal:bs,External:Tr}=Tn,Hy=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr}),UR=Ee.extend({event_type:z.string().min(1).meta(L),source:Hy.default("sdk").meta(L),tenant_id:z.string().min(1).optional().meta(L),user_id:z.string().min(1).optional().meta(nl),session_id:z.string().min(1).optional().meta(nl),occurred_at:z.string().datetime().meta(L),request_id:z.string().min(1).meta(L),attributes:z.record(z.string(),z.unknown()).default({}).meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":bs}),MR=UR.extend({ingested_at:z.string().datetime().meta(L)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":Ky,"x-revturbine-schema-exposure":bs});z.array(z.object({id:z.string().min(1).optional().meta(L),event_type:z.string().min(1).meta(L),occurred_at:z.string().datetime().optional().meta(L),tenant_id:z.string().min(1).optional().meta(L),user_id:z.string().min(1).optional().meta(nl),session_id:z.string().min(1).optional().meta(nl),attributes:z.record(z.string(),z.unknown()).optional().meta(L),payload:z.record(z.string(),z.unknown()).optional().meta(L),message:z.string().optional().meta(L),level:z.string().optional().meta(L),path:z.string().optional().meta(L)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":bs});var FR=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({user_id:z.string().min(1).meta(nl),placement_id:z.string().min(1).meta(L),treatment_id:z.string().min(1).optional().meta(L),surface_slot_id:z.string().min(1).optional().meta(L),surface_template_id:z.string().min(1).optional().meta(L),payload_id:z.string().min(1).optional().meta(L),interaction_type:FR.meta(L),interaction_at:z.string().datetime().optional().meta(L),message_block_handle:z.string().min(1).optional().meta(L),message_block_id:z.string().min(1).optional().meta(L),experiment_id:z.string().min(1).optional().meta(L),variant_key:z.string().min(1).optional().meta(L),test:z.boolean().optional().meta(L),metadata:z.record(z.string(),z.unknown()).optional().meta(L)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.enum(["trial_midpoint","trial_expiring","trial_expired","usage_limit_approaching","usage_limit_reached","credit_balance_low","seat_limit_reached","feature_gated","cancel_intent","payment_failed","auto_renewal_reminder","onboarding_complete","invite_teammate_prompt","referral_offer","plan_upgrade_nudge"]).meta({id:"TriggerEventType","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({days_remaining:z.number().int().min(0).optional().meta(L)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({entitlement_handle:z.string().optional().meta(L),current_usage:z.number().min(0).optional().meta(L),usage_limit:z.number().min(0).optional().meta(L),usage_percent:z.number().min(0).max(100).optional().meta(L),threshold:z.number().min(0).optional().meta(L),balance:z.number().min(0).optional().meta(L),allocation:z.number().min(0).optional().meta(L),seats_used:z.number().int().min(0).optional().meta(L),seats_allowed:z.number().int().min(0).optional().meta(L)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({feature:z.string().min(1).meta(L)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({retry_count:z.number().int().min(0).optional().meta(L),renewal_date:z.string().optional().meta(L)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({event_type:z.string().min(1).meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});var NR=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr}),VR=z.enum(By).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({event_type:VR.meta(L),source:NR.meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({q:z.string().optional().meta(L),source:Hy.optional().meta(L),event_type:z.string().optional().meta(L),from:z.string().datetime().optional().meta(L),to:z.string().datetime().optional().meta(L),page:z.coerce.number().int().min(1).default(1).meta(L),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(L)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":bs});var BR=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":bs}),zR=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":bs}),$p=Ee.merge(Ge).merge(st).extend({event_id:z.string().min(1).meta(L),event_type:z.string().min(1).meta(L),source:BR.meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L),status:zR.default("processed").meta(L),processed_at:z.string().datetime().optional().meta(L),error_message:z.string().optional().meta(L)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":Ky,"x-revturbine-schema-exposure":bs});z.object({accepted:z.number().int().min(0).meta(L)}).meta({id:"null","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":bs});var $R=500,KR=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr}),HR=z.object({environment_id:z.string().min(1).meta(L),user_id:z.string().min(1).meta(nl),account_id:z.string().min(1).meta(L),event_name:z.string().min(1).max(120).meta(L),event_ts:z.string().datetime().meta(L),properties:z.string().optional().meta(L),surface_slot_id:z.string().nullable().optional().meta(L),placement_id:z.string().nullable().optional().meta(L),payload_id:z.string().nullable().optional().meta(L),request_id:z.string().optional().meta(L),experiment_id:z.string().nullable().optional().meta(L),variant_key:z.string().nullable().optional().meta(L),tenant_id:z.string().optional().meta(L),event_id:z.string().nullable().optional().meta(L),origin:KR.nullable().optional().meta(L),playbook_version:z.string().nullable().optional().meta(L),decision_id:z.string().nullable().optional().meta(L),test:z.boolean().optional().meta(L)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({events:z.array(HR).min(1).max($R).meta(L)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});var YR=10,WR=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr}),JR=z.object({plans:z.number().int().min(0).meta(L),entitlements:z.number().int().min(0).meta(L),entitlement_rules:z.number().int().min(0).meta(L),segments:z.number().int().min(0).meta(L),placements:z.number().int().min(0).meta(L),placement_payloads:z.number().int().min(0).meta(L),content_ui_paths:z.number().int().min(0).meta(L),surface_templates:z.number().int().min(0).meta(L)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr}),ZR=z.object({event_type:WR.meta(L),occurred_at:z.string().datetime().meta(L),request_id:z.string().min(1).optional().meta(L),config_hash_id:z.string().min(1).max(64).optional().meta(L),sdk_version:z.string().min(1).max(64).optional().meta(L),runtime_mode:z.string().min(1).max(64).optional().meta(L),schema_version:z.string().min(1).max(64).optional().meta(L),bundle_version:z.string().min(1).max(64).optional().meta(L),config_shape:JR.optional().meta(L),message:z.string().max(500).optional().meta(L),reason:z.string().min(1).max(64).optional().meta(L),placement_handle:z.string().min(1).max(64).optional().meta(L),slot_handle:z.string().min(1).max(64).optional().meta(L),surface:z.string().min(1).max(64).optional().meta(L),plan_handle:z.string().min(1).max(64).optional().meta(L),entitlement_handle:z.string().min(1).max(64).optional().meta(L)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});z.object({events:z.array(ZR).min(1).max(YR).meta(L)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Tr});({"/api/events/search":{get:_({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:ZC(MR)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:_({operationId:"listWebhookEvents",requestParams:{query:de},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:me($p)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:dt}=bn,{Persisted:Bc,Transient:zc}=An,{Internal:Ti}=Tn,Gy=gn(Vt.Playbook,{sdkInput:true}),Yy=gn(Vt.Playbook,{inConfig:false,sdkInput:true}),XR=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":zc,"x-revturbine-schema-exposure":Ti}),fg=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":zc,"x-revturbine-schema-exposure":Ti}),Wy=z.object({name:Yn.meta(dt),handle:Yt.meta(dt),plan_id:z.string().nullable().optional().meta(dt),segment_id:z.string().nullable().optional().meta(dt),trial_limit_type:fg.default("time").meta(dt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(dt),grace_period_days:z.number().int().min(0).default(0).meta(dt),usage_entitlement_handle:z.string().min(1).optional().meta(dt),usage_limit_value:z.number().int().min(1).optional().meta(dt),require_payment_method:z.boolean().default(false).meta(dt),auto_convert:z.boolean().default(true).meta(dt),convert_to_plan_id:z.string().optional().meta(dt),fallback_plan_id:z.string().optional().meta(dt),limit_per_customer:z.number().int().min(1).default(1).meta(dt),is_active:z.boolean().default(true).meta(dt),metadata:Wn.meta(dt)}),Lo=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true})}).merge(Wy).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Bc,"x-revturbine-schema-exposure":Ti,...Gy,...Fr()}),eA=mr("FreeTrialRuleAnchor"),tA=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":zc,"x-revturbine-schema-exposure":Ti}),Jy=z.object({name:Yn.meta(dt),handle:Yt.meta(dt),premium_plan_id:z.string().min(1).meta(dt),fallback_plan_id:z.string().min(1).meta(dt),segment_id:z.string().nullable().optional().meta(dt),trial_limit_type:fg.default("time").meta(dt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(dt),usage_entitlement_handle:z.string().min(1).optional().meta(dt),usage_limit_value:z.number().int().min(1).optional().meta(dt),start_policy:tA.default("signup").meta(dt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(dt),entitlements_during_trial:z.array(z.string()).default([]).meta(dt),is_active:z.boolean().default(true).meta(dt),metadata:Wn.meta(dt)}),No=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true})}).merge(Jy).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Bc,"x-revturbine-schema-exposure":Ti,...Gy,...Fr()}),nA=mr("ReverseTrialRuleAnchor"),Zy=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":zc,"x-revturbine-schema-exposure":Ti}),Qy=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":zc,"x-revturbine-schema-exposure":Ti}),Vo=Ee.merge(Ge).merge(st).extend({trial_limit_policy:Zy.default("1_per_lifetime").meta(dt),eligibility_scope:Qy.default("per_customer").meta(dt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Bc,"x-revturbine-schema-exposure":Ti,...Yy}),Bo=Ee.merge(Ge).merge(st).extend({trial_limit_policy:Zy.default("1_per_lifetime").meta(dt),eligibility_scope:Qy.default("per_customer").meta(dt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Bc,"x-revturbine-schema-exposure":Ti,...Yy}),au=Ee.merge(Ge).merge(st).extend({customer_id:z.string().min(1).meta(dt),rule_id:z.string().min(1).meta(dt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(dt),plan_id:z.string().min(1).meta(dt),status:XR.default("active").meta(dt),started_at:z.string().datetime().meta({...dt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(dt),trial_limit_type:fg.default("time").meta(dt),usage_entitlement_handle:z.string().min(1).optional().meta(dt),usage_limit_value:z.number().int().min(1).optional().meta(dt),converted_at:Fn.meta(dt),cancelled_at:Fn.meta(dt),metadata:Wn.meta(dt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Bc,"x-revturbine-schema-exposure":Ti});({"/api/free-trial-rule-anchors":{get:_({operationId:"listFreeTrialRuleAnchors",requestParams:{query:de},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:me(eA)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:_({operationId:"listFreeTrialRules",requestParams:{query:de},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:me(Lo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:_({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:Lo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:_({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Lo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Lo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:_({operationId:"listReverseTrialRuleAnchors",requestParams:{query:de},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:me(nA)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:_({operationId:"listReverseTrialRules",requestParams:{query:de},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:me(No)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:_({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:No}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:_({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:No.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:No}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:_({operationId:"listFreeTrialSettings",requestParams:{query:de},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:me(Vo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:_({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Vo}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:_({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Vo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Vo}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:_({operationId:"listReverseTrialSettings",requestParams:{query:de},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:me(Bo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:_({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:_({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Bo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:_({operationId:"listTrialInstances",requestParams:{query:de},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:me(au)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:_({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:au}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:_({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:au}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:_({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:au}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var{Unrestricted:j}=bn,{Persisted:xs,Transient:_g}=An,{Internal:ii}=Tn,bu=gn(Vt.Playbook,{inConfig:false,sdkInput:true}),Xy=gn(Vt.CustomerOperations,{sdkInput:false}),rA=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":_g,"x-revturbine-schema-exposure":ii}),aA=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":_g,"x-revturbine-schema-exposure":ii}),iA=z.enum(["managed","observed"]).meta({id:"ExperimentAllocationMode","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":ii}),sA=z.discriminatedUnion("kind",[z.object({kind:z.literal("placement"),placement_handle:z.string().min(1),placement_payload_handle:z.string().min(1).optional()}),z.object({kind:z.literal("entitlement"),entitlement_handle:z.string().min(1),rule_handle:z.string().min(1).optional()}),z.object({kind:z.literal("plan"),plan_handle:z.string().min(1),plan_variation_handle:z.string().min(1).optional()}),z.object({kind:z.literal("pricing"),plan_variation_handle:z.string().min(1),promotion_handle:z.string().min(1).optional()}),z.object({kind:z.literal("custom"),provider_payload:z.record(z.string(),z.json())})]).meta({id:"ExperimentVariantTarget","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":ii,...bu}),oA=z.object({variant_id:z.string().min(1),name:Yn,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),targets:z.array(sA).min(1).optional(),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":ii,...bu}),Hp=z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])),ev=z.object({methodology:z.enum(["frequentist","bayesian"]),analysis_unit:ai,sequential:Hp.optional(),multiple_comparisons:Hp.optional(),variance_reduction:z.object({method:z.literal("cuped"),covariate_metric:va,lookback_days:z.number().int().positive()}).optional(),practical_significance:Hp.optional()}).meta({id:"ExperimentAnalysisConfig","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":ii,...bu});var ia=t=>({id:t,"x-revturbine-schema-persistence":_g,"x-revturbine-schema-exposure":ii}),xu=z.object({variant_id:z.string().min(1).meta(j)}),lA=xu.extend({statistic_type:z.literal("mean").meta(j),n:z.number().int().min(0).meta(j),sum_y:z.number().meta(j),sum_y2:z.number().min(0).meta(j)}).meta(ia("MeanVariantStatisticalSummary")),cA=xu.extend({statistic_type:z.literal("binary").meta(j),n:z.number().int().min(0).meta(j),successes:z.number().int().min(0).meta(j)}).meta(ia("BinaryVariantStatisticalSummary")),mA=xu.extend({statistic_type:z.literal("ratio").meta(j),n:z.number().int().min(0).meta(j),sum_numerator:z.number().meta(j),sum_denominator:z.number().meta(j),sum_numerator2:z.number().min(0).meta(j),sum_denominator2:z.number().min(0).meta(j),sum_cross:z.number().meta(j)}).meta(ia("RatioVariantStatisticalSummary")),uA=xu.extend({statistic_type:z.literal("covariance").meta(j),n:z.number().int().min(0).meta(j),sum_x:z.number().meta(j),sum_y:z.number().meta(j),sum_x2:z.number().min(0).meta(j),sum_y2:z.number().min(0).meta(j),sum_xy:z.number().meta(j)}).meta(ia("CovarianceVariantStatisticalSummary")),dA=z.discriminatedUnion("statistic_type",[lA,cA,mA,uA]).meta(ia("VariantStatisticalSummary")),pA=z.object({start:z.string().datetime().meta(j),end:z.string().datetime().meta(j)}).meta(ia("ExperimentObservationWindow")),gA=z.object({schema_version:z.number().int().min(1).meta(j),experiment_handle:Yt.meta(j),experiment_version:z.number().int().min(1).meta(j),metric:va.meta(j),analysis_unit:ai.meta(j),variants:z.array(dA).min(1).meta(j),observation_window:pA.meta(j),data_watermark:z.string().datetime().meta(j),source_scope:Hs.meta(j),provider:Lc.meta(j)}).meta(ia("ExperimentEvidence")),hA=z.object({status:z.enum(["not_evaluated","pass","fail"]).meta(j),p_value:z.number().min(0).max(1).optional().meta(j),chi_squared:z.number().min(0).optional().meta(j),variants:z.array(z.object({variant_id:z.string().min(1).meta(j),observed_count:z.number().int().min(0).meta(j),expected_count:z.number().min(0).meta(j)})).default([]).meta(j),reason:z.string().min(1).max(500).optional().meta(j)}).meta(ia("ExperimentSampleRatioMismatch")),fA=z.object({status:z.enum(["healthy","warning","unhealthy","insufficient_data"]).meta(j),sample_ratio_mismatch:hA.optional().meta(j),issues:z.array(z.object({code:z.string().min(1).max(100).meta(j),message:z.string().min(1).max(500).meta(j)})).default([]).meta(j)}).meta(ia("ExperimentHealth")),_A=z.object({lower:z.number().meta(j),upper:z.number().meta(j),level:z.number().min(0).max(1).meta(j)}).meta(ia("ExperimentConfidenceInterval")),yA=z.object({status:z.string().min(1).max(100).meta(j),look_count:z.number().int().min(1).optional().meta(j),spending_state:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).optional().meta(j)}).meta(ia("ExperimentSequentialResult")),vA=z.object({metric:va.meta(j),control_variant_id:z.string().min(1).meta(j),variant_id:z.string().min(1).meta(j),estimator:z.string().min(1).max(100).meta(j),estimator_version:z.string().min(1).max(100).meta(j),estimate:z.number().meta(j),control_estimate:z.number().meta(j),absolute_effect:z.number().meta(j),relative_effect:z.number().optional().meta(j),standard_error:z.number().min(0).optional().meta(j),confidence_interval:_A.optional().meta(j),p_value:z.number().min(0).max(1).optional().meta(j),probability_positive:z.number().min(0).max(1).optional().meta(j),expected_loss:z.number().min(0).optional().meta(j),sequential:yA.optional().meta(j),sample_size:z.number().int().min(0).optional().meta(j)}).meta(ia("ExperimentMetricResult")),bA=z.object({metric:va.meta(j),summary_schema_version:z.number().int().min(1).meta(j),data_watermark:z.string().datetime().meta(j),provider:Lc.meta(j)}).meta(ia("ExperimentEvidenceProvenance")),xA=z.object({provider:Lc.meta(j),evidence:z.array(bA).min(1).meta(j)}).meta(ia("AnalysisProvenance")),SA=z.object({schema_version:z.number().int().min(1).meta(j),engine:z.string().min(1).max(100).meta(j),engine_version:z.string().min(1).max(100).meta(j),methodology:z.string().min(1).max(100).meta(j),metrics:z.array(vA).meta(j),health:fA.meta(j),provenance:xA.meta(j)}).meta(ia("ExperimentAnalysisResult")),tv=Ee.merge(st).extend({created_at:z.string().datetime().meta({...j,readOnly:true}),experiment_handle:Yt.meta(j),experiment_version:z.number().int().min(1).meta(j),metric_semantic_id:va.meta(j),metric_catalog_version:z.string().min(1).max(64).meta(j),endpoint_version:z.string().min(1).max(100).meta(j),query_hash:z.string().min(1).max(128).meta(j),evidence_provider_handle:Yt.meta(j),evidence_provider_type:z.string().min(1).max(100).meta(j),evidence_provider_version:z.string().min(1).max(100).meta(j),evidence_provider_contract_version:z.number().int().min(1).meta(j),summary_schema_version:z.number().int().min(1).meta(j),observation_window_start:z.string().datetime().meta(j),observation_window_end:z.string().datetime().meta(j),data_watermark:z.string().datetime().meta(j)}),PA=tv.extend({analysis_unit:ai.meta(j),evidence:gA.meta(j)}).meta({id:"ExperimentEvidenceSnapshot","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":ii,...Xy}),TA=tv.extend({evidence_snapshot_id:z.string().min(1).meta(j),analysis_provider_handle:Yt.meta(j),analysis_provider_type:z.string().min(1).max(100).meta(j),analysis_provider_version:z.string().min(1).max(100).meta(j),analysis_provider_contract_version:z.number().int().min(1).meta(j),engine:z.string().min(1).max(100).meta(j),engine_version:z.string().min(1).max(100).meta(j),estimator:z.string().min(1).max(100).meta(j),estimator_version:z.string().min(1).max(100).meta(j),analysis_config:ev.meta(j),result:SA.meta(j)}).meta({id:"ExperimentAnalysisResultRecord","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":ii,...Xy}),zi=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...j,readOnly:true}),name:Yn.meta(j),handle:Yt.meta(j),description:z.string().max(1e3).optional().meta(j),experiment_type:aA.meta(j),status:rA.default("draft").meta(j),target_resource_id:z.string().optional().meta(j),target_segments:z.array(z.string()).optional().meta(j),target_segment_ids:z.array(z.string()).default([]).meta(j),variants:z.array(oA).min(2).meta(j),primary_metric:va.meta(j),guardrail_metrics:z.array(va).optional().meta(j),assignment_unit:ai.optional().meta(j),assignment_provider_binding:Bp.extend({capability:z.literal("experiment_assignment"),allocation_mode:iA}).optional().meta(j),evidence_provider_binding:Bp.extend({capability:z.literal("experiment_evidence")}).optional().meta(j),analysis_provider_binding:Bp.extend({capability:z.literal("experiment_analysis")}).optional().meta(j),analysis_config:ev.optional().meta(j),metric_threshold:z.number().default(.05).meta(j),secondary_metrics:z.array(va).default([]).meta(j),traffic_allocation:z.number().min(0).max(1).default(1).meta(j),started_at:Fn.meta(j),ended_at:Fn.meta(j),confidence_threshold:z.number().min(0).max(1).default(.95).meta(j),winning_variant_id:z.string().nullable().default(null).meta(j),metadata:Wn.meta(j)}).meta({id:"Experiment","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":ii,...bu,...Fr()}),IA=mr("ExperimentAnchor"),CA=tg,ny=Ee.merge(Ge).merge(st).extend({experiment_id:z.string().optional().meta(j),resource_type:z.string().min(1).meta(j),resource_id:z.string().min(1).meta(j),severity:CA.default("info").meta(j),title:z.string().min(1).max(300).meta(j),description:z.string().max(2e3).meta(j),suggested_action:z.string().max(1e3).optional().meta(j),estimated_impact:z.number().optional().meta(j),detector_id:z.string().min(1).nullable().optional().meta(j),detector_version:z.number().int().min(1).nullable().optional().meta(j),opportunity_type:z.string().min(1).nullable().optional().meta(j),evidence:z.array(Ny).nullable().optional().meta(j),hypothesis:z.string().min(1).nullable().optional().meta(j),confidence:z.number().min(0).max(1).nullable().optional().meta(j),is_dismissed:z.boolean().default(false).meta(j),metadata:Wn.meta(j)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":ii});({"/api/experiment-evidence-snapshots":{get:_({operationId:"listExperimentEvidenceSnapshots",requestParams:{query:de},summary:"List immutable experiment evidence snapshots",tags:["experiments"],responses:{200:{description:"Experiment evidence snapshots",content:{"application/json":{schema:me(PA)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-evidence-snapshots",persistence:{table:"experimentEvidenceSnapshots",mode:"list"}}})},"/api/experiment-analysis-results":{get:_({operationId:"listExperimentAnalysisResults",requestParams:{query:de},summary:"List immutable experiment analysis results",tags:["experiments"],responses:{200:{description:"Experiment analysis results",content:{"application/json":{schema:me(TA)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-analysis-results",persistence:{table:"experimentAnalysisResults",mode:"list"}}})},"/api/experiment-anchors":{get:_({operationId:"listExperimentAnchors",requestParams:{query:de},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:me(IA)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:_({operationId:"listExperiments",requestParams:{query:de},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:me(zi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:_({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:_({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:zi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:_({operationId:"deleteExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:_({operationId:"startExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:_({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:_({operationId:"completeExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z.object({winning_variant_id:z.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:_({operationId:"listOptimizationSuggestions",requestParams:{query:de},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:me(ny)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:_({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:ny}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Er,Financial:ry}=bn,{Persisted:EA,Transient:nv}=An,{Internal:yg}=Tn,kA=gn(Vt.Playbook,{sdkInput:true}),RA=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":nv,"x-revturbine-schema-exposure":yg}),AA=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":nv,"x-revturbine-schema-exposure":yg}),gs=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...Er,readOnly:true}),name:Yn.meta(Er),handle:Yt.meta(Er),description:z.string().max(1e3).optional().meta(Er),rt_status:RA.default("draft").meta(Er),discount_type:AA.meta(Er),discount_value:z.number().min(0).meta(ry),currency:z.string().length(3).default("USD").meta(ry),applicable_plan_ids:z.array(z.string()).default([]).meta(Er),applicable_addon_ids:z.array(z.string()).default([]).meta(Er),target_segment_ids:z.array(z.string()).default([]).meta(Er),max_redemptions:z.number().int().min(0).nullable().default(null).meta(Er),current_redemptions:z.number().int().min(0).default(0).meta({...Er,readOnly:true}),coupon_code:z.string().max(100).optional().meta(Er),starts_at:Fn.meta(Er),ends_at:Fn.meta(Er),stripe_coupon_id:z.string().nullable().default(null).meta(Er),stripe_promotion_code_id:z.string().nullable().default(null).meta(Er),auto_sync_stripe:z.boolean().default(false).meta(Er),metadata:Wn.meta(Er)}).meta({id:"Promotion","x-revturbine-schema-persistence":EA,"x-revturbine-schema-exposure":yg,...kA,...Fr()}),wA=mr("PromotionAnchor");({"/api/promotion-anchors":{get:_({operationId:"listPromotionAnchors",requestParams:{query:de},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:me(wA)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:_({operationId:"listPromotions",requestParams:{query:de},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:me(gs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:_({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:gs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:_({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:gs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:gs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:_({operationId:"deletePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:_({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:gs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:_({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:gs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:p}=bn,{Persisted:ol,Transient:ft}=An,{Internal:Va,External:Ut}=Tn,Rt=gn(Vt.Playbook,{sdkInput:true}),Zo=gn(Vt.Playbook,{sdkInput:false}),fs=gn(Vt.Playbook,{inConfig:false,sdkInput:false}),rv=gn(Vt.Playbook,{inConfig:false,sdkInput:true}),zo=gn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ua.CodeConstant}),Gp=gn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ua.Runtime}),Yp=gn(Vt.Playbook,{inConfig:false,sdkInput:false,source:Ua.Runtime}),jA=gn(Vt.Billing,{sdkInput:false}),OA=gn(Vt.Metering,{sdkInput:false}),qA=gn(Vt.Branding,{inConfig:true,sdkInput:true}),DA=gn(Vt.Branding,{sdkInput:false}),UA="1.0.0",xc=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),name:Yn.meta(p),handle:Yt.meta(p),description:Ks.meta(p),is_default:z.boolean().default(false).meta(p),entitlement_ids:z.array(z.string()).default([]).meta(p),metadata:Wn.meta(p)}).meta({id:"SeatType","x-revturbine-schema-persistence":ol,"x-revturbine-schema-exposure":Va,...fs,...Fr()}),MA=mr("SeatTypeAnchor"),Sc=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:Yt.meta(p),label:z.string().min(1).meta(p),description:z.string().nullable().default(null).meta(p),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(p),data_source:z.string().nullable().default(null).meta(p),example_value:z.string().nullable().default(null).meta(p),value_map:z.record(z.string(),z.string()).default({}).meta(p),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(p),metadata:Wn.meta(p)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":ol,"x-revturbine-schema-exposure":Va,...fs,...Fr()}),FA=mr("PersonalizationTokenAnchor"),LA=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Va}),Wp=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({handle:Yt.meta({...p,readOnly:true}),stripe_account_id:z.string().min(1).meta(p),live_mode:z.boolean().default(false).meta(p),onboarding_state:LA.default("not_started").meta({...p,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...p,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...p,readOnly:true}),details_submitted:z.boolean().default(false).meta({...p,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...p,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...p,readOnly:true}),sync_products:z.boolean().default(true).meta(p),sync_prices:z.boolean().default(true).meta(p),sync_subscriptions:z.boolean().default(true).meta(p),sync_invoices:z.boolean().default(false).meta(p),default_currency:z.string().length(3).default("USD").meta(p),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(p),last_sync_at:z.string().optional().meta({...p,readOnly:true}),metadata:Wn.meta(p)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":ol,"x-revturbine-schema-exposure":Va,...jA,...La()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(p),workspace_name:z.string().optional().meta(p),logo_url:z.string().optional().meta(p),support_email:z.string().optional().meta(p)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...DA});var Pc=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({handle:Yt.meta({...p,readOnly:true}),entitlement_id:z.string().min(1).meta(p),meter_key:z.string().min(1).max(100).meta(p),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(p),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(p),stripe_meter_id:z.string().nullable().default(null).meta(p),is_active:z.boolean().default(true).meta(p),metadata:Wn.meta(p)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":ol,"x-revturbine-schema-exposure":Va,...OA,...La()}),ay=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Va}),Tc=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:Yt.meta({...p,readOnly:true}),entitlement_id:z.string().min(1).meta(p),soft_limit_percent:z.number().min(0).max(100).default(80).meta(p),hard_limit_percent:z.number().min(0).max(100).default(100).meta(p),soft_limit_action:ay.default("warn").meta(p),hard_limit_action:ay.default("block").meta(p),grace_period_hours:z.number().int().min(0).default(0).meta(p),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(p),is_active:z.boolean().default(true).meta(p)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":ol,"x-revturbine-schema-exposure":Va,...rv,...La()}),NA=mr("UsageEnforcementSettingsAnchor"),VA=z.object({kind:z.enum(["template","slot"]).meta(p),id:z.string().min(1).meta(p),label:z.string().min(1).optional().meta(p)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Va}),BA=z.object({id:z.string().min(1).meta(p),group:z.array(VA).min(1).meta(p),cap:z.object({count:z.number().int().min(1).meta(p),period:z.enum(["session","day","week","month"]).meta(p)}).meta(p)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Va}),zA=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Va}),av=z.object({capRules:z.array(BA).default([]).meta(p),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(p),remindLaterMinutes:z.number().int().min(0).default(60).meta(p),testMode:zA.default("off").meta(p)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Va}),Jp=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:Yt.meta({...p,readOnly:true}),global_frequency_cap:av.nullable().default(null).meta(p),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(p),suppress_for_paid:z.boolean().default(false).meta(p),suppress_for_trial:z.boolean().default(false).meta(p),allow_stacking:z.boolean().default(false).meta(p),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(p)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":ol,"x-revturbine-schema-exposure":Va,...rv,...La()}),$A=mr("PlacementSettingsAnchor"),KA=z.object({field:z.string().min(1).meta(p),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(p),value:z.string().meta(p)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),HA=z.object({name:z.string().min(1).meta(p),handle:z.string().min(1).meta(p),predicates:z.array(KA).optional().meta(p),dimension_id:z.string().optional().meta(p),experiment_handle:z.string().min(1).optional().meta(p),experiment_id:z.string().min(1).optional().meta(p)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),GA=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),tier_position:z.number().int().min(0).default(0).meta(p),sort_order:z.number().int().min(0).default(0).meta(p),visibility:_s.default("public").meta(p)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),YA=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),sort_order:z.number().int().min(0).default(0).meta(p),visibility:_s.default("public").meta(p)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Zo}),WA=z.object({handle:z.string().min(1).meta(p),plan_handle:z.string().min(1).meta(p),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(p),segment_handle:z.string().nullable().default(null).meta(p),price_amount:z.number().min(0).meta(p),pricing_model:Oc.meta(p),visibility:_s.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:du.meta(p)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...fs}),JA=z.object({handle:z.string().min(1).meta(p),addon_handle:z.string().min(1).meta(p),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(p),segment_handle:z.string().nullable().default(null).meta(p),price_amount:z.number().min(0).meta(p),pricing_model:Oc.meta(p),visibility:_s.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:du.meta(p)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...fs}),ZA=z.object({handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),description:z.string().nullable().default(null).meta(p),is_default:z.boolean().default(false).meta(p),entitlement_handles:z.array(z.string()).default([]).meta(p)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),QA=z.object({handle:z.string().min(1).meta(p),entitlement_handle:z.string().nullable().default(null).meta(p),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(p),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(p),soft_limit_action:z.string().meta(p),hard_limit_action:z.string().meta(p),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(p),notification_channels:z.array(z.string()).default([]).meta(p),is_active:z.boolean().default(true).meta(p)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),XA=z.object({handle:z.string().min(1).meta(p),global_frequency_cap:av.nullable().default(null).meta(p),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(p),suppress_for_paid:z.boolean().default(false).meta(p),suppress_for_trial:z.boolean().default(false).meta(p),allow_stacking:z.boolean().default(false).meta(p),priority_collision_strategy:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),ew=z.object({handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:z.string().nullable().default(null).meta(p),visibility_toggle:z.boolean().default(true).meta(p),source_type:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),tw=z.object({handle:z.string().min(1).meta(p),entitlement_handle:z.string().min(1).meta(p),meter_handle:z.string().min(1).meta(p),limit:z.number().int().min(0).nullable().default(null).meta(p),reset_period:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),nw=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),type:eg.meta(p),unit:z.string().optional().meta(p),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),rw=z.object({id:z.string().min(1).meta(p),entitlement_id:z.string().min(1).meta(p),targets:z.array(fy).min(1).meta(p),segment_ids:z.array(z.string()).default([]).meta(p),kind:eg.optional().meta({...p,readOnly:true}),unit:z.string().optional().meta({...p,readOnly:true}),tier_name:z.string().optional().meta({...p,readOnly:true}),tier_description:z.string().optional().meta({...p,readOnly:true}),...el.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(p),allocation:pu.optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),aw=z.object({slot_id:z.string().min(1).meta(p),active:z.boolean().meta(p),triggers:z.array(z.string()).meta(p)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),iw=z.object({id:z.string().min(1).meta(p),label:z.string().min(1).meta(p),description:z.string().meta(p),surface_type:z.string().meta(p),placement_handle:z.string().min(1).meta(p),template:z.string().optional().meta(p)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),sw=z.object({name:z.string().min(1).meta(p),type:z.string().optional().meta(p),required:z.boolean().optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),ow=z.object({id:z.string().min(1).meta(p),surface_type:z.string().meta(p),fields:z.array(sw).optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),lw=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),cw=z.object({name:z.string().min(1).meta(p),action_type:lw.meta(p),plan_handle:z.string().optional().meta(p),promotion_id:z.string().optional().meta(p),placement_handle:z.string().optional().meta(p),url:z.string().optional().meta(p),tour_id:z.string().optional().meta(p),target_billing_period:z.enum(["monthly","annual"]).optional().meta(p),description:z.string().optional().meta(p)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),mw=z.object({id:z.string().meta(p),name:z.string().meta(p),discount:z.string().meta(p),type:z.string().meta(p),status:z.string().meta(p)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),uw=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(p),label:z.string().min(1).meta(p),description:z.string().optional().meta(p),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(p),data_source:z.string().optional().meta(p),example_value:z.string().optional().meta(p),value_map:z.record(z.string(),z.string()).optional().meta(p),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(p)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),iy=z.object({header:z.string().optional().meta(p),body:z.string().optional().meta(p),cta_label:z.string().optional().meta(p),secondary_cta_label:z.string().optional().meta(p)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),dw=z.object({block_id:z.string().min(1).meta(p),tenant_id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),surface_template_id:z.string().optional().meta(p),default_content:iy.meta(p),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:iy})).optional().meta(p),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(p),tokens_used:z.array(z.string()).optional().meta(p),status:z.enum(["draft","active","archived"]).meta(p),created_at:z.string().datetime().meta({...p,readOnly:true}),updated_at:z.string().datetime().meta({...p,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),pw=z.object({label:z.string().meta(p),path:cy.meta(p),config:z.record(z.string(),z.string()).optional().meta(p)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),iv=z.object({template_id:z.string().min(1).meta(p),fields:z.record(z.string(),z.string()).meta(p),ctas:z.array(pw).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),sv=z.object({plan_ids:z.array(z.string()).meta(p),billing_cadences:z.array(z.string()).optional().meta(p),segment_chips:z.array(z.string()).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),gw=z.object({count:z.number().int().min(1).meta(p),period:z.enum(["session","day","week","month","lifetime"]).meta(p)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),ov=z.object({max_per_period:gw.optional().meta(p),cooldown_days:z.number().int().min(0).optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),hw=z.object({id:z.string().min(1).meta(p),target:sv.meta(p),surfaces:z.array(iv).meta(p),caps:ov.optional().meta(p),surface_slot_ids:z.array(z.string()).optional().meta(p),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(p),created_at:z.string().optional().meta({...p,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(p),recommendation_plan_override:z.string().optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),fw=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:kc}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:kc}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:kc}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),_w=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut}),yw=z.object({id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:_w.meta(p),trigger:fw.meta(p),payloads:z.array(hw).meta(p),order:z.number().int().min(0).meta(p)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),vw=z.object({payload_id:z.string().min(1).meta(p),placement_id:z.string().min(1).meta(p),target:sv.meta(p),caps:ov.optional().meta(p),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(p),created_at:z.string().meta({...p,readOnly:true}),updated_at:z.string().datetime().optional().meta({...p,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(p),surfaces:z.array(iv).optional().meta(p),surface_slot_ids:z.array(z.string()).optional().meta(p),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(p)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),bw=z.object({kind:z.string().min(1).meta(p),schema_version:z.number().int().nonnegative().meta(p),config:z.unknown().meta(p)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),xw=Ee.merge(Wy).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...fs}),Sw=Ee.merge(Jy).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...fs}),Pw=z.object({plans:z.array(GA).meta({...p,...Rt}),addons:z.array(YA).optional().meta({...p,...Zo}),entitlements:z.array(nw).meta({...p,...Rt}),entitlement_rules:z.array(rw).meta({...p,...Rt}),segments:z.array(HA).meta({...p,...Rt}),content_ui_paths:z.array(cw).meta({...p,...Rt}),slot_configs:z.array(aw).optional().meta({...p,...Rt,...Op({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...p,...Rt,...Op({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...p,...qA,...Op({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(iw).optional().meta({...p,...Rt}),message_blocks:z.array(dw).optional().meta({...p,...Rt}),placement_payloads:z.array(vw).optional().meta({...p,...Rt}),placements:z.array(yw).optional().meta({...p,...Rt}),content_promotions:z.array(mw).optional().meta({...p,...Rt}),personalization_tokens:z.array(uw).optional().meta({...p,...Rt}),surface_templates:z.array(ow).optional().meta({...p,...Rt}),free_trial_rules:z.array(xw).optional().meta({...p,...Zo}),reverse_trial_rules:z.array(Sw).optional().meta({...p,...Zo}),plan_variations:z.array(WA).optional().meta({...p,...Zo}),addon_variations:z.array(JA).optional().meta({...p,...Zo}),extension_rules:z.array(bw).optional().meta({...p,...Rt}),seat_types:z.array(ZA).optional().meta({...p,...Rt}),enforcement_defaults:z.array(QA).optional().meta({...p,...Rt}),placement_settings:z.array(XA).optional().meta({...p,...Rt}),segment_dimensions:z.array(ew).optional().meta({...p,...Rt}),meter_bindings:z.array(tw).optional().meta({...p,...Rt}),experiments:z.array(z.unknown()).max(0).optional().meta({...p,...fs}),signal_catalog:z.object({}).strict().optional().meta({...p,...fs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt}),Tw=z.object({artifact_type:z.literal("playbook").meta({...p,...zo,readOnly:true}),format_version:z.literal(UA).meta({...p,...zo,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...p,...zo}),playbook_version_id:z.string().nullable().default(null).meta({...p,...Gp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...p,...Yp,readOnly:true}),environment_id:z.string().min(1).optional().meta({...p,...Yp,readOnly:true}),project_id:z.string().min(1).optional().meta({...p,...Yp,readOnly:true}),exported_at:z.string().datetime().optional().meta({...p,...Gp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...p,...zo,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...p,...zo,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...p,...zo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Gp}),lv=Tw.extend(Pw.shape).meta({"x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt});function Iw(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function cv(t){if(!Iw(t))return t;let e={...t};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess(cv,lv).meta({id:"Playbook","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt});z.preprocess(cv,lv.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":ft,"x-revturbine-schema-exposure":Ut,...Rt});({"/api/seat-type-anchors":{get:_({operationId:"listSeatTypeAnchors",requestParams:{query:de},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:me(MA)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:_({operationId:"listSeatTypes",requestParams:{query:de},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:me(xc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:_({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(xc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:_({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:xc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:_({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:_({operationId:"listPersonalizationTokenAnchors",requestParams:{query:de},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:me(FA)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:_({operationId:"listPersonalizationTokens",requestParams:{query:de},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:me(Sc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:_({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(Sc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Sc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:_({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Sc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Sc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:_({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:_({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:kr(Wp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Wp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:_({operationId:"listMeteringConfigs",requestParams:{query:de},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:me(Pc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:_({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(Pc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Pc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:_({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Pc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Pc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:_({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:_({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:de},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:me(NA)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:_({operationId:"listUsageEnforcementSettings",requestParams:{query:de},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:me(Tc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:_({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(Tc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Tc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:_({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Tc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Tc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:_({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:_({operationId:"listPlacementSettingsAnchors",requestParams:{query:de},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:me($A)}}},default:{description:"Error response",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:_({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:kr(Jp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Jp}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:$i}=bn,{Persisted:mv}=An,{Internal:uv}=Tn,Cw=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":mv,"x-revturbine-schema-exposure":uv}),sy=Ee.merge(Ge).merge(st).extend({action:Cw.meta($i),resource_type:z.string().min(1).max(100).meta($i),resource_id:z.string().min(1).meta($i),resource_name:z.string().max(200).optional().meta($i),actor_id:z.string().min(1).meta($i),actor_email:z.string().email().optional().meta($i),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta($i),summary:z.string().max(1e3).optional().meta($i),metadata:Wn.meta($i)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":mv,"x-revturbine-schema-exposure":uv});({"/api/changelog":{get:_({operationId:"listChangeLogEntries",requestParams:{query:de},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:me(sy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:_({operationId:"getChangeLogEntry",requestParams:{path:z.object({entryId:z.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:sy}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:iu}=bn,{Persisted:Ew,Transient:kw}=An,{Internal:dv}=Tn,Rw=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":kw,"x-revturbine-schema-exposure":dv}),hs=Ee.merge(Ge).extend({name:Yn.meta(iu),handle:Yt.meta(iu),status:Rw.default("active").meta(iu),metadata:Wn.meta(iu)}).meta({id:"Tenant","x-revturbine-schema-persistence":Ew,"x-revturbine-schema-exposure":dv});({"/api/tenants":{get:_({operationId:"listTenants",requestParams:{query:de},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:me(hs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:_({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:hs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:_({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:hs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:hs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:_({operationId:"suspendTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:hs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:_({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:hs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Da}=bn,{Persisted:Aw,Transient:pv}=An,{Internal:vg}=Tn,ww=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":pv,"x-revturbine-schema-exposure":vg}),$o=Ee.merge(Ge).merge(st).extend({name:Yn.meta(Da),handle:Yt.meta(Da),description:Ks.meta(Da),is_production:z.boolean().default(false).meta({...Da,readOnly:true}),status:ww.default("active").meta(Da),cloned_from_environment_id:z.string().nullable().default(null).meta({...Da,readOnly:true}),cloned_at:Fn.meta({...Da,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Da,readOnly:true}),requires_approval:z.boolean().default(false).meta(Da),auto_deploy_on_approval:z.boolean().default(false).meta(Da),created_by:z.string().optional().meta(Da),metadata:Wn.meta(Da)}).meta({id:"Environment","x-revturbine-schema-persistence":Aw,"x-revturbine-schema-exposure":vg}),jw=z.object({source_environment_id:z.string().min(1),target_environment_id:z.string().min(1),playbook_version_ids:z.array(z.string()).optional(),strategy:z.enum(["all_current","selected_playbook_versions"]).default("all_current")}).meta({id:"EnvironmentPromotionRequest","x-revturbine-schema-persistence":pv,"x-revturbine-schema-exposure":vg});({"/api/environments":{get:_({operationId:"listEnvironments",requestParams:{query:de},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:me($o)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:_({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200),handle:z.string().min(1).max(100),description:z.string().max(500).optional(),clone_from_environment_id:z.string().optional(),requires_approval:z.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:$o}}},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:_({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:_({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:$o.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:_({operationId:"archiveEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:$o}}},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:_({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:jw}}},responses:{200:{description:"Promotion result",content:{"application/json":{schema:z.object({promoted_count:z.number().int(),conflict_count:z.number().int(),conflicts:z.array(z.object({handle:z.string(),resource_type:z.string(),source_sequence:z.number().int(),target_sequence:z.number().int()}))})}}},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:at,Pii:wc}=bn,{Transient:Ii,Persisted:Ow}=An,{External:si}=Tn,qw=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si});z.object({superseded_output_id:z.string().min(1).meta(at),superseded_by:z.string().min(1).meta(at),reason:qw.meta(at)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":Ow,"x-revturbine-schema-exposure":si,...bn.Operational});var Dw=z.enum(ly).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si}),gv=z.object({output_id:z.string().meta(at),category:z.string().meta(at),surface:z.object({template:z.string().optional().meta(at),type:mu.meta(at),slot_id:z.string().optional().meta(at)}).meta(at),content:z.record(z.string(),z.unknown()).meta(at),promotion:z.record(z.string(),z.unknown()).optional().meta(at),cta_path:z.record(z.string(),z.unknown()).optional().meta(at),ui_path:z.record(z.string(),z.unknown()).optional().meta(at),rule_id:z.string().meta(at),decision_id:z.string().meta(at),config_version:z.string().meta(at),present_upsell:z.boolean().meta(at),experiment_id:z.string().optional().meta(at),variant_key:z.string().optional().meta(at),experiment_version_id:z.string().optional().meta(at)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si}),Uw=z.object({status:Dw.meta(at),allowed:z.boolean().meta(at),reason:z.string().optional().meta(at),current_tier:z.string().optional().meta(at),limit:z.number().optional().meta(at),used:z.number().optional().meta(at),remaining:z.number().optional().meta(at),placement:gv.optional().meta(at)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si});z.object({id:z.string().meta(at),name:z.string().optional().meta(at),discount:z.string().optional().meta(at),type:z.string().optional().meta(at),status:z.string().optional().meta(at)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si});var Mw=z.object({id:z.string().meta(wc),anonymous_id:z.string().optional().meta(at),traits:z.record(z.string(),z.unknown()).optional().meta(wc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si}),Fw=z.object({slot_id:z.string().optional().meta(at),entitlement_handle:z.string().optional().meta(at),plan_handle:z.string().optional().meta(at),placement_handle:z.string().optional().meta(at),visible:z.boolean().meta(at),output:gv.optional().meta(at),reason_codes:z.array(z.string()).optional().meta(at)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si}),Lw=Uw,Nw=sg.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si}),Vw=z.object({segments:z.array(z.string()).optional().meta(at),traits:z.record(z.string(),z.unknown()).optional().meta(wc),usage_balances:z.record(z.string(),z.number()).optional().meta(at)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si});z.object({version:z.literal("1.0.0").meta(at),request_id:z.string().meta(at),tenant_id:z.string().meta(at),evaluated_at:z.string().datetime().meta(at),ttl_seconds:z.number().int().min(0).max(86400).meta(at),user:Mw.meta(wc),decisions:z.array(Fw).meta(at),entitlements:z.record(z.string(),Lw).optional().meta(at),theme:z.record(z.string(),z.unknown()).optional().meta(at),trial_status:Nw.optional().meta(at),user_context:Vw.optional().meta(wc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":si});var {Unrestricted:nn}=bn,{Persisted:Bw,Transient:Su}=An,{Internal:$c}=Tn,zw=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":Su,"x-revturbine-schema-exposure":$c}),Ic=Ee.merge(Ge).merge(st).extend({environment_id:z.string().min(1).meta(nn),name:Yn.meta(nn),description:z.string().max(2e3).optional().meta(nn),status:zw.default("draft").meta(nn),labels:z.array(z.string()).default([]).meta(nn),created_by:z.string().min(1).meta(nn),submitted_by:z.string().nullable().default(null).meta({...nn,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...nn,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...nn,readOnly:true}),submitted_at:Fn.meta({...nn,readOnly:true}),reviewed_at:Fn.meta({...nn,readOnly:true}),deployed_at:Fn.meta({...nn,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...nn,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...nn,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...nn,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(nn),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(nn),review_notes:z.string().max(2e3).optional().meta(nn),rejection_reason:z.string().max(2e3).optional().meta(nn),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...nn,readOnly:true}),bundle:z.string().nullable().default(null).meta({...nn,readOnly:true}),metadata:Wn.meta(nn)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":Bw,"x-revturbine-schema-exposure":$c}),hv=z.object({handle:z.string().meta(nn),resource_type:z.string().meta(nn),resource_name:z.string().optional().meta(nn),action:z.enum(["create","update","delete"]).meta(nn),has_conflict:z.boolean().meta(nn)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":Su,"x-revturbine-schema-exposure":$c}),$w=z.object({playbook_version_id:z.string().meta(nn),entries:z.array(hv).meta(nn),total_entries:z.number().int().min(0).meta(nn),total_conflicts:z.number().int().min(0).meta(nn),deployable:z.boolean().meta(nn)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":Su,"x-revturbine-schema-exposure":$c}),Kw=z.object({playbook_version_id:z.string().meta(nn),deployed_count:z.number().int().min(0).meta(nn),superseded_count:z.number().int().min(0).meta(nn),skipped_conflicts:z.number().int().min(0).meta(nn),deployed_at:z.string().datetime().meta(nn)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":Su,"x-revturbine-schema-exposure":$c});({"/api/playbook-versions/{playbookVersionId}/submit":{post:_({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:Ic}}},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:_({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:Ic}}},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:_({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:Ic}}},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:_({operationId:"deployPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({force:z.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:Kw}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:_({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:Ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:_({operationId:"previewPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Preview diff of all entries vs current state (dry-run deploy)",tags:["playbook-versions"],responses:{200:{description:"Diff preview",content:{"application/json":{schema:$w}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:_({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:de},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:me(hv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:_({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:Ic}}},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:_({operationId:"cherryPickEntries",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({handles:z.array(z.string()).min(1),target_playbook_version_id:z.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z.object({copied_count:z.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:Et}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Ke,Pii:Hw}=bn,{Persisted:Ba}=An,{Internal:za}=Tn,Gw=gn(Vt.CustomerOperations,{sdkInput:false,source:Ua.Customer}),Yw=365,Vs=Ee.merge(Ge).merge(st).extend({provider_handle:Yt.meta(Ke),provider_type:Yt.meta(Ke),endpoint:z.string().url().max(2048).nullable().default(null).meta(Ke),credential_reference:z.string().min(1).max(255).nullable().default(null).meta({...Ke,readOnly:true}),environment_id:z.string().min(1).max(200).default("production").meta(Ke),health_state:Ly.default("unavailable").meta({...Ke,readOnly:true}),last_health_check_at:Fn.meta({...Ke,readOnly:true}),supported_capability_versions:z.record(z.string().min(1).max(100),z.array(z.number().int().min(1)).min(1)).default({}).meta({...Ke,readOnly:true}),external_project_id:z.string().min(1).max(255).nullable().default(null).meta(Ke),external_workspace_id:z.string().min(1).max(255).nullable().default(null).meta(Ke),timeout_ms:z.number().int().min(1).max(12e4).default(1e4).meta(Ke),stale_after_ms:z.number().int().min(1).default(3e5).meta(Ke),unavailable_after_failures:z.number().int().min(1).max(100).default(3).meta(Ke)}).meta({id:"ProviderConnection","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za,...Gw}),Ww=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),su=Ee.merge(Ge).merge(st).extend({name:Yn.meta(Ke),key_hash:z.string().min(1).meta({...Hw,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...Ke,readOnly:true}),key_last4:z.string().length(4).meta({...Ke,readOnly:true}),status:Ww.default("active").meta(Ke),last_used_at:Fn.meta({...Ke,readOnly:true}),expires_at:Fn.meta(Ke)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),Jw=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),Bs=Ee.merge(Ge).merge(st).extend({key:z.string().min(1).max(100).meta(Ke),value_type:Jw.default("boolean").meta(Ke),value:z.string().max(4e3).default("false").meta(Ke),description:Ks.meta(Ke),enabled:z.boolean().default(true).meta(Ke)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),Zp=Ee.merge(Ge).merge(st).extend({workspace_name:z.string().min(1).max(200).meta(Ke),support_email:z.string().email().nullable().default(null).meta(Ke),timezone:z.string().max(50).default("UTC").meta(Ke),default_currency:z.string().length(3).default("USD").meta(Ke),logo_url:z.string().url().nullable().default(null).meta(Ke),activity_window_days:z.number().int().min(1).default(30).meta(Ke),activity_high_min:z.number().int().min(1).default(10).meta(Ke),activity_medium_min:z.number().int().min(1).default(3).meta(Ke),activity_low_min:z.number().int().min(1).default(1).meta(Ke),analytics_retention_days:z.number().int().min(1).default(Yw).meta(Ke)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),Qp=Ee.merge(Ge).merge(st).extend({server_url:z.string().url().max(500).meta(Ke),api_token_hint:z.string().max(50).nullable().default(null).meta(Ke),allow_write_actions:z.boolean().default(false).meta(Ke),enabled_tools:z.array(z.string().max(100)).default([]).meta(Ke),enabled:z.boolean().default(false).meta(Ke)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),ou=Ee.merge(Ge).merge(st).extend({step_key:z.string().min(1).max(100).meta(Ke),label:z.string().min(1).max(200).meta(Ke),done:z.boolean().default(false).meta(Ke),completed_at:Fn.meta({...Ke,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),Zw=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),Qw=Ee.merge(st).extend({environment_id:z.string().min(1).default("production").meta(Ke),actor_type:Zw.meta(Ke),actor_id:z.string().nullable().default(null).meta(Ke),action:z.string().min(1).max(120).meta(Ke),object_type:z.string().max(120).nullable().default(null).meta(Ke),object_id:z.string().max(200).nullable().default(null).meta(Ke),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(Ke),occurred_at:z.string().datetime().meta({...Ke,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),Xw=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za}),lu=Ee.merge(Ge).merge(st).merge(In).merge(kn).extend({handle:Yt.meta({...Ke,readOnly:true}),identifier:z.string().min(1).max(200).meta(Ke),identifier_type:Xw.default("user_id").meta(Ke),note:z.string().max(500).nullable().default(null).meta(Ke),added_by:z.string().meta(Ke)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Ba,"x-revturbine-schema-exposure":za,...La()});({"/api/settings/api-keys":{get:_({operationId:"listApiKeys",requestParams:{query:de},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:me(su)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:_({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(su)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:su}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:_({operationId:"revokeApiKey",requestParams:{path:z.object({keyId:z.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:su}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:_({operationId:"listFeatureFlags",requestParams:{query:de},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:me(Bs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:_({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(Bs)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:Bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:_({operationId:"getFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:Bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:_({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(Bs).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:Bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:_({operationId:"deleteFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:Bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:_({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(Zp).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:Zp}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:_({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(Qp).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Qp}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:_({operationId:"listOnboardingSteps",requestParams:{query:de},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:me(ou)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:_({operationId:"getOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:_({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(ou).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:_({operationId:"listAuditEvents",requestParams:{query:de},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:me(Qw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:_({operationId:"listPlacementTestUsers",requestParams:{query:de},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:me(lu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:_({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(lu)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:lu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:_({operationId:"deletePlacementTestUser",requestParams:{path:z.object({testUserId:z.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:lu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})},"/api/settings/provider-connections":{get:_({operationId:"listProviderConnections",requestParams:{query:de},summary:"List provider connections for the tenant",tags:["settings"],responses:{200:{description:"Provider connections",content:{"application/json":{schema:me(Vs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"list"}}}),post:_({operationId:"createProviderConnection",summary:"Create a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(Vs)}}},responses:{201:{description:"Provider connection created",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"create",writeSchema:"ProviderConnectionSchema#writable"}}})},"/api/settings/provider-connections/{connectionId}":{get:_({operationId:"getProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Get a provider connection",tags:["settings"],responses:{200:{description:"Provider connection",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"get"}}}),put:_({operationId:"updateProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Update a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(Vs).partial()}}},responses:{200:{description:"Provider connection updated",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"update",writeSchema:"ProviderConnectionSchema#writable"}}}),delete:_({operationId:"deleteProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Delete a provider connection",tags:["settings"],responses:{200:{description:"Provider connection deleted",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"delete"}}})}});var {Unrestricted:fe,Pii:Hr}=bn,{Persisted:sa,Transient:bg}=An,{Internal:Ar}=Tn,ej=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.merge(Ge).extend({name:Yn.meta(fe),email:z.string().email().meta(Hr),email_verified:z.boolean().default(false).meta(fe),image:z.string().url().nullable().default(null).meta(Hr),role:ej.default("user").meta(fe),banned:z.boolean().default(false).meta({...fe,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...fe,readOnly:true}),ban_expires:Fn.meta({...fe,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...fe,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.merge(Ge).extend({expires_at:z.string().datetime().meta(fe),token:z.string().min(1).meta({...Hr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Hr),user_agent:z.string().nullable().default(null).meta(Hr),user_id:z.string().min(1).meta({...fe,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(fe),impersonated_by:z.string().nullable().default(null).meta({...fe,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.merge(Ge).extend({account_id:z.string().min(1).meta(fe),provider_id:z.string().min(1).meta(fe),user_id:z.string().min(1).meta({...fe,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Hr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Hr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Hr,readOnly:true}),access_token_expires_at:Fn.meta({...fe,readOnly:true}),refresh_token_expires_at:Fn.meta({...fe,readOnly:true}),scope:z.string().nullable().default(null).meta(fe),password:z.string().nullable().default(null).meta({...Hr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.merge(Ge).extend({identifier:z.string().min(1).meta(Hr),value:z.string().min(1).meta({...Hr,readOnly:true}),expires_at:z.string().datetime().meta(fe)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.extend({secret:z.string().min(1).meta({...Hr,readOnly:true}),backup_codes:z.string().min(1).meta({...Hr,readOnly:true}),user_id:z.string().min(1).meta({...fe,readOnly:true}),verified:z.boolean().default(false).meta({...fe,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.extend({name:Yn.meta(fe),slug:z.string().min(1).max(100).nullable().default(null).meta(fe),logo:z.string().url().nullable().default(null).meta(fe),created_at:z.string().datetime().meta({...fe,readOnly:true}),metadata:z.string().nullable().default(null).meta(fe)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});var fv=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});var _v=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":bg,"x-revturbine-schema-exposure":Ar}),yv=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":bg,"x-revturbine-schema-exposure":Ar});z.object({resource:_v,action:yv}).meta({id:"Permission","x-revturbine-schema-persistence":bg,"x-revturbine-schema-exposure":Ar});var tj=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],nj=["plans","entitlements","placements","targeting","content","experiments"],rj=["plans","entitlements","placements","targeting","content","experiments"],aj=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],ij=["read","create","update","delete","publish","approve","invite","manage_roles"];function Pu(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var sj=Pu(tj,["read"]),oj=[...sj,...Pu(nj,["create","update"])];[...oj,...Pu(rj,["publish","approve","delete"])];Pu(aj,ij);var lj=_v.options.flatMap(t=>yv.options.map(e=>`${t}:${e}`));z.enum(lj).meta({id:"McpTokenScope","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.extend({organization_id:z.string().min(1).meta({...fe,readOnly:true}),user_id:z.string().min(1).meta({...fe,readOnly:true}),role:fv.default("viewer").meta(fe),created_at:z.string().datetime().meta({...fe,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});var cj=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.extend({organization_id:z.string().min(1).meta({...fe,readOnly:true}),email:z.string().email().meta(Hr),role:fv.nullable().default(null).meta(fe),status:cj.default("pending").meta(fe),expires_at:z.string().datetime().meta(fe),created_at:z.string().datetime().meta({...fe,readOnly:true}),inviter_id:z.string().min(1).meta({...fe,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.extend({name:z.string().max(200).nullable().default(null).meta(fe),public_key:z.string().min(1).meta({...Hr,readOnly:true}),user_id:z.string().min(1).meta({...fe,readOnly:true}),credential_id:z.string().min(1).meta({...fe,readOnly:true}),counter:z.number().int().default(0).meta({...fe,readOnly:true}),device_type:z.string().min(1).meta(fe),backed_up:z.boolean().default(false).meta(fe),transports:z.string().nullable().default(null).meta(fe),created_at:z.string().datetime().meta({...fe,readOnly:true}),aaguid:z.string().nullable().default(null).meta(fe)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.merge(Ge).extend({config_id:z.string().min(1).meta(fe),name:z.string().max(200).nullable().default(null).meta(fe),start:z.string().nullable().default(null).meta(fe),reference_id:z.string().min(1).meta(fe),prefix:z.string().nullable().default(null).meta(fe),key:z.string().min(1).meta({...Hr,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(fe),refill_amount:z.number().int().nullable().default(null).meta(fe),last_refill_at:Fn.meta({...fe,readOnly:true}),enabled:z.boolean().default(true).meta(fe),rate_limit_enabled:z.boolean().default(false).meta(fe),rate_limit_time_window:z.number().int().nullable().default(null).meta(fe),rate_limit_max:z.number().int().nullable().default(null).meta(fe),request_count:z.number().int().default(0).meta({...fe,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...fe,readOnly:true}),last_request:Fn.meta({...fe,readOnly:true}),expires_at:Fn.meta(fe),permissions:z.string().nullable().default(null).meta(fe),metadata:z.string().nullable().default(null).meta(fe)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});Ee.extend({issuer:z.string().min(1).meta(fe),oidc_config:z.string().nullable().default(null).meta(fe),saml_config:z.string().nullable().default(null).meta(fe),user_id:z.string().min(1).meta({...fe,readOnly:true}),provider_id:z.string().min(1).meta(fe),organization_id:z.string().nullable().default(null).meta(fe),domain:z.string().min(1).meta(fe)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Ar});var vv="0.7.2";var Tu=/^[a-z0-9._]{1,100}$/;var Be={Persisted:"persisted",Transient:"transient"},Le={Internal:"internal",External:"external"},De={Pii:{"x-revturbine-data-classification":"pii"},Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}};var bv="x-revturbine-schema-exposure",dj="readOnly",pj="x-revturbine-decision-only",Iu={[pj]:true},Yr={[bv]:Le.External},xg={[bv]:Le.Internal};function Nn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[dj]===true||(e[n]=r);}return z.object(e)}function Jn(t){let e=Nn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(Tu)}):e}var {Unrestricted:yr}=De,{Transient:Wr,Persisted:gj}=Be,{Internal:Gs,External:Ci}=Le;z.object({page:z.coerce.number().int().min(1).default(1).meta(yr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(yr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci});var Sg=t=>z.object({items:z.array(t).meta(yr),total:z.number().int().min(0).meta(yr),page:z.number().int().min(1).meta(yr),per_page:z.number().int().min(1).meta(yr),has_more:z.boolean().meta(yr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci}),ce=z.object({created_at:z.string().datetime().meta({...yr,readOnly:true}),updated_at:z.string().datetime().meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci}),J=z.object({id:z.string().min(1).meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci}),_e=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Gs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci});var Kc=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci}),Hc=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci});var ll=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci}),Pg=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Gs});var Wt=z.string().min(1).max(200),nt=z.string().min(1).max(100),xa=z.string().max(500).optional(),Kt=z.record(z.string(),z.unknown()).default({}),Ss=z.number().int().min(10).max(100).multipleOf(10),an=z.string().datetime().nullable().default(null),Mt=z.object({environment_id:z.string().min(1).default("production").meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Gs}),Bt=z.object({playbook_version_id:z.string().nullable().default(null).meta(yr),is_current:z.boolean().default(true).meta({...yr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...yr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...yr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...yr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Gs}),vj=J.merge(ce).merge(_e).merge(Mt).extend({handle:nt.meta({...yr,readOnly:true}),active:z.boolean().default(true).meta({...yr,readOnly:true})});function Sn(t){return vj.meta({id:t,"x-revturbine-schema-persistence":gj,"x-revturbine-schema-exposure":Gs})}var cl=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Gs}),Tg=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Gs}),ml=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ci});var rt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Lr={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},bj="x-revturbine-context",xj="x-revturbine-in-config",Sj="x-revturbine-sdk-input",Pj="x-revturbine-source",Tj="x-revturbine-deprecation",Ij={[rt.Playbook]:Lr.Customer,[rt.Branding]:Lr.Customer,[rt.Billing]:Lr.Stripe,[rt.Metering]:Lr.Customer,[rt.CustomerOperations]:Lr.Runtime,[rt.EventIngestion]:Lr.Runtime};function bt(t,e){return {[bj]:t,[xj]:e.inConfig??t===rt.Playbook,[Sj]:e.sdkInput,[Pj]:e.source??Ij[t]}}function Gc(t){return {deprecated:true,[Tj]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Ig={Named:"named",Minted:"minted"},xv="x-revturbine-schema-identity";function On(t="handle"){return {[xv]:{kind:Ig.Named,handleField:t}}}function vr(t="handle"){return {[xv]:{kind:Ig.Minted,handleField:t}}}var H=t=>z.object({items:z.array(t)}),ze=z.object({error:z.string(),code:z.string(),request_id:z.string()}),f=t=>t,Y=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()});var{Unrestricted:Qt,Financial:Cu}=De,{Persisted:Yc,Transient:Eu}=Be,{External:Wi}=Le,Cj=bt(rt.Playbook,{sdkInput:true}),Ej=bt(rt.Playbook,{sdkInput:false}),Cg=bt(rt.Billing,{sdkInput:false}),Ei=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Eu,"x-revturbine-schema-exposure":Wi}),Xs=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Eu,"x-revturbine-schema-exposure":Wi}),ul=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Eu,"x-revturbine-schema-exposure":Wi}),Ys=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),name:Wt.meta(Qt),handle:nt.meta(Qt),tier_position:z.number().int().min(0).default(0).meta(Qt),sort_order:z.number().int().default(0).meta(Qt),visibility:Ei.default("public").meta(Qt),metadata:Kt.meta(Qt)}).meta({id:"Plan","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wi,...Cj,...On()}),kj=Sn("PlanAnchor"),Ws=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),handle:nt.meta({...Qt,readOnly:true}),plan_id:z.string().min(1).meta(Qt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Qt),segment_id:z.string().nullable().default(null).meta(Qt),price_amount:z.number().min(0).meta(Cu),pricing_model:Xs.meta(Qt),visibility:Ei.default("public").meta(Qt),stripe_price_id:z.string().optional().meta(Qt),price_source:ul.default("static").meta(Qt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wi,...Cg,...vr()}),Rj=Sn("PlanVariationAnchor"),Js=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),name:Wt.meta(Qt),handle:nt.meta(Qt),sort_order:z.number().int().default(0).meta(Qt),visibility:Ei.default("public").meta(Qt),metadata:Kt.meta(Qt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wi,...Ej,...On()}),Aj=Sn("AddOnAnchor"),Zs=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),handle:nt.meta({...Qt,readOnly:true}),addon_id:z.string().min(1).meta(Qt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Qt),segment_id:z.string().nullable().default(null).meta(Qt),price_amount:z.number().min(0).meta(Cu),pricing_model:Xs.meta(Qt),visibility:Ei.default("public").meta(Qt),stripe_price_id:z.string().optional().meta(Qt),price_source:ul.default("static").meta(Qt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wi,...Cg,...vr()}),wj=Sn("AddOnVariationAnchor"),Sv=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Eu,"x-revturbine-schema-exposure":Wi}),Qs=J.merge(ce).merge(_e).extend({stripe_price_id:z.string().min(1).meta(Qt),stripe_product_id:z.string().min(1).meta(Qt),billing_period:Sv.meta(Qt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Cu),currency:Pg.meta(Cu),pricing_model:Xs.meta(Qt),nickname:z.string().nullable().default(null).meta(Qt),is_mock:z.boolean().default(false).meta(Qt),last_updated_from_stripe:an.meta(Qt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wi,...Cg});var jj=Nn(Ys),Oj=Nn(Ws),qj=Nn(Js),Dj=Nn(Zs),Uj=Nn(Qs);({"/api/plan-anchors":{get:f({operationId:"listPlanAnchors",requestParams:{query:Y},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:H(kj)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:f({operationId:"listPlans",requestParams:{query:Y},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:H(Ys)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:f({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Jn(Ys)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ys}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:f({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Ys}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:f({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:jj}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ys}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:f({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:f({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:f({operationId:"listPlanVariationAnchors",requestParams:{query:Y},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:H(Rj)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:f({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:Y},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:H(Ws)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:f({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Jn(Ws)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Ws}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:f({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:Ws}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:f({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Oj}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Ws}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:f({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:f({operationId:"listAddOnAnchors",requestParams:{query:Y},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:H(Aj)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:f({operationId:"listAddOns",requestParams:{query:Y},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:H(Js)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:f({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Jn(Js)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Js}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:f({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Js}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:f({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:qj}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Js}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:f({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:f({operationId:"listAddOnVariationAnchors",requestParams:{query:Y},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:H(wj)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:f({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:Y},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:H(Zs)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:f({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Jn(Zs)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:f({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:f({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Dj}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:f({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:f({operationId:"listStripePrices",requestParams:{query:Y},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:H(Qs)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:f({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Jn(Qs)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Qs}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:f({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Qs}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:f({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Uj}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Qs}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:f({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:Re}=De,{Persisted:kg,Transient:Sa}=Be,{Internal:Pv,External:oa}=Le,Tv=bt(rt.Playbook,{sdkInput:true}),Fj=bt(rt.Playbook,{inConfig:false,sdkInput:false}),Rg=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),dl=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),Iv=z.enum(Hc).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),Cv=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),Ag=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),to=z.object({entitlement_id:z.string().min(1).meta(Re),entitlement_handle:z.string().min(1).meta(Re),status:Iv.meta(Re),limit:z.number().optional().meta(Re),used:z.number().optional().meta(Re),allocation:dl.optional().meta(Re),enforcement:Ag.optional().meta(Re),source:Cv.optional().meta(Re),plan_id:z.string().optional().meta(Re),segment_id:z.string().optional().meta(Re),seat_type_id:z.string().optional().meta(Re),rule_id:z.string().optional().meta(Re)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa,...De.Operational});z.object({account:z.record(z.string(),to).optional().meta(Re),instance:z.record(z.string(),to).optional().meta(Re),user:z.record(z.string(),to).optional().meta(Re)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa,...De.Operational});var Ev=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),kv=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),Ru=z.object({kind:kv.meta(Re),id:z.string().min(1).meta(Re)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),Rv=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),eo=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),name:Wt.meta(Re),handle:nt.meta(Re),customer_facing_description:z.string().max(500).optional().meta(Re),type:ll.meta(Re),unit:z.string().max(100).optional().meta(Re),period_scope:Rg.optional().meta(Re),allocation:dl.optional().meta(Re),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Re),sort_order:z.number().int().default(0).meta(Re),metadata:Kt.meta(Re)}).meta({id:"Entitlement","x-revturbine-schema-persistence":kg,"x-revturbine-schema-exposure":oa,...Tv,...On()}),Nj=Sn("EntitlementAnchor"),Ps=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),handle:nt.meta({...Re,readOnly:true}),entitlement_id:z.string().min(1).meta(Re),targets:z.array(Ru).min(1).meta(Re),segment_ids:z.array(z.string()).default([]).meta(Re),visibility:Ev.default("public").meta(Re),period_scope:Rg.optional().meta(Re),instance:z.string().max(100).optional().meta(Re),reset_period:Rv.optional().meta(Re),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Re),enforcement:Ag.optional().meta(Re),warning_threshold_percent:Ss.optional().meta(Re),overage_price_ref:z.string().optional().meta(Re),grace_period_hours:z.number().int().min(0).optional().meta(Re),tier_value:z.string().optional().meta(Re),rate_value:z.number().optional().meta(Re),initial_grant:z.number().optional().meta(Re),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Re),rollover_enabled:z.boolean().optional().meta(Re),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Re),seat_type_id:z.string().optional().meta(Re),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Re),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Re),stripe_metered_price_id:z.string().optional().meta(Re),enabled:z.boolean().optional().meta(Re),allocation:dl.optional().meta(Re),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Re),amount_cents:z.number().int().optional().meta(Re),currency:z.string().optional().meta(Re)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":kg,"x-revturbine-schema-exposure":Pv,...Tv,...vr()}),Vj=Sn("EntitlementRuleAnchor");Ps.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var zj=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),$j=z.object({code:zj.meta(Re),message:z.string().min(1).meta(Re),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Re)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa}),Eg=Ps.extend({warnings:z.array($j).optional().meta(Re)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Sa,"x-revturbine-schema-exposure":oa});var ku=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({handle:nt.meta({...Re,readOnly:true}),rule_id:z.string().min(1).meta(Re),experiment_id:z.string().min(1).meta(Re),variant_name:z.string().min(1).max(200).meta(Re),is_control:z.boolean().default(false).meta(Re),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Re)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":kg,"x-revturbine-schema-exposure":Pv,...Fj,...vr()}),Kj=Nn(eo),Hj=Nn(Ps);({"/api/entitlement-anchors":{get:f({operationId:"listEntitlementAnchors",requestParams:{query:Y},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:H(Nj)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:f({operationId:"listEntitlementRuleAnchors",requestParams:{query:Y},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:H(Vj)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:f({operationId:"listEntitlements",requestParams:{query:Y},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:H(eo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:f({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Jn(eo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:f({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:f({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Kj}}},responses:{200:{description:"Updated",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:f({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:f({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:Y},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:H(Ps)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:f({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Jn(Ps)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Eg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:f({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hj}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Eg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:f({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Eg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:f({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:Y},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:H(ku)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:f({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Jn(ku)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ku}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Xe}=De,{Persisted:Au,Transient:Ts}=Be,{External:Ka}=Le,wv=bt(rt.Playbook,{sdkInput:true});bt(rt.Playbook,{inConfig:false,sdkInput:false});var Yj=bt(rt.Playbook,{inConfig:false,sdkInput:true}),Wj=bt(rt.Playbook,{inConfig:false,sdkInput:false,source:Lr.Runtime}),Jj=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var wg=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":Ka}),jg=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":Ka}),jv=z.object({count:z.number().int().positive().meta(Xe),period:jg.meta(Xe)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":Ka});z.object({surface_type:z.string().min(1).meta(Xe),rules:z.array(jv).meta(Xe),cooldown_ms:z.number().int().nonnegative().optional().meta(Xe)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Au,"x-revturbine-schema-exposure":Ka,...De.Operational,...Yj});var Ov=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":Ka}),no=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Xe,readOnly:true}),name:Wt.meta(Xe),handle:nt.meta(Xe),description:xa.meta(Xe),category:wg.meta(Xe),drag_order_in_category:z.number().int().default(0).meta(Xe),surface_slot_id:z.string().optional().meta(Xe),entitlement_id:z.string().optional().meta(Xe),tier_threshold:z.string().optional().meta(Xe),threshold_percent:Ss.optional().meta(Xe),trial_type:z.enum(["free","reverse"]).optional().meta(Xe),trigger_type:z.string().optional().meta(Xe),trial_progress_percent:z.number().min(0).max(100).optional().meta(Xe),days_before_end:z.number().int().min(0).optional().meta(Xe),qualifier:Jj.optional().meta(Xe),activation_window_start:z.string().datetime().optional().meta(Xe),activation_window_end:z.string().datetime().optional().meta(Xe),metadata:Kt.meta(Xe)}).meta({id:"Placement","x-revturbine-schema-persistence":Au,"x-revturbine-schema-exposure":Ka,...wv,...On()}),Qj=Sn("PlacementAnchor"),qv=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":Ka}),Dv=z.object({code:qv.meta(Xe),message:z.string().min(1).meta(Xe),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Xe)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":Ka}),Av=no.extend({warnings:z.array(Dv).optional().meta(Xe)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":Ka});var Uv=z.object({label:z.string().min(1).max(200).meta(Xe),cta_path_type:Ov.meta(Xe),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Xe)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":Ka}),pl=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Xe,readOnly:true}),handle:nt.meta({...Xe,readOnly:true}),placement_id:z.string().min(1).meta(Xe),drag_order:z.number().int().default(0).meta(Xe),target_plan_ids:z.array(z.string()).default([]).meta(Xe),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Xe),target_segments:z.array(z.string()).default([]).meta(Xe),surface_slot_ids:z.array(z.string()).default([]).meta(Xe),surface_template_id:z.string().min(1).meta(Xe),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Xe),cta_list:z.array(Uv).default([]).meta(Xe),max_per_period:z.number().int().min(0).nullable().default(null).meta(Xe),max_period_unit:jg.default("session").meta(Xe),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Xe),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Xe),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Xe),recommendation_plan_override:z.string().optional().meta(Xe)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Au,"x-revturbine-schema-exposure":Ka,...wv,...vr()}),Xj=Sn("PlacementPayloadAnchor"),Mv=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({surface_slot_handle:z.string().min(1).max(200).meta(Xe),surface_type:Kc.meta(Xe),surface_template_ids:z.array(z.string()).default([]).meta(Xe),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Xe),first_seen:z.string().datetime().meta({...Xe,readOnly:true}),last_seen:z.string().datetime().meta({...Xe,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Xe),placement_count:z.number().int().min(0).default(0).meta({...Xe,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Au,"x-revturbine-schema-exposure":Ka,...Wj,...On("surface_slot_handle")}),eO=Nn(no),tO=Nn(pl);({"/api/placement-anchors":{get:f({operationId:"listPlacementAnchors",requestParams:{query:Y},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:H(Qj)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:f({operationId:"listPlacements",requestParams:{query:Y},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:H(no)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:f({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Jn(no)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Av}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:f({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:f({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:eO}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Av}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:f({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:f({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:f({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:wg,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:f({operationId:"listPlacementPayloadAnchors",requestParams:{query:Y},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:H(Xj)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:f({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:Y},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:H(pl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:f({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Jn(pl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:pl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:f({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:tO}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:f({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:f({operationId:"listSurfaceSlots",requestParams:{query:Y},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:H(Mv)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Nr,Pii:gl}=De,{Persisted:qg,Transient:Dg}=Be,{Internal:hl}=Le,rO=bt(rt.CustomerOperations,{sdkInput:false}),Fv=z.object({external_id:z.string().min(1).meta(gl),traits:z.record(z.string(),z.unknown()).default({}).meta(gl),plan_id:z.string().optional().meta(Nr)}).meta({id:"Identity","x-revturbine-schema-persistence":qg,"x-revturbine-schema-exposure":hl}),wu=z.enum(["payment_failed","payment_method_missing"]),Og=J.merge(ce).merge(_e).extend({external_id:z.string().min(1).meta(gl),identity:Fv.meta(gl),stripe_customer_id:z.string().optional().meta(Nr),current_plan_id:z.string().optional().meta(Nr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Nr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Nr),billing_health_issues:z.array(wu).default([]).meta(Nr),metadata:Kt.meta(Nr)}).meta({id:"Customer","x-revturbine-schema-persistence":qg,"x-revturbine-schema-exposure":hl}),Lv=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Dg,"x-revturbine-schema-exposure":hl}),Nv=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Dg,"x-revturbine-schema-exposure":hl}),Vv=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Dg,"x-revturbine-schema-exposure":hl}),Ji=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({handle:nt.meta({...Nr,readOnly:true}),customer_id:z.string().min(1).meta(gl),customer_id_list:z.array(z.string()).optional().meta(gl),override_type:Nv.meta(Nr),target_id:z.string().min(1).meta(Nr),value:z.record(z.string(),z.unknown()).default({}).meta(Nr),duration_type:Lv.default("permanent").meta(Nr),duration_value:z.string().optional().meta(Nr),expiry_date:an.meta(Nr),status:Vv.default("active").meta(Nr),reason:z.string().max(500).optional().meta(Nr),created_by:z.string().optional().meta(Nr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":qg,"x-revturbine-schema-exposure":hl,...rO,...vr()});({"/api/customers":{get:f({operationId:"listCustomers",requestParams:{query:Y},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:H(Og)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:f({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:Og}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:f({operationId:"listCustomerOverrides",requestParams:{query:Y},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:H(Ji)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:f({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:Ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:f({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:Ji.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:f({operationId:"deleteCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:f({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:Ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:f({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:$e,Pii:Wc,Financial:Ug}=De,{Persisted:Bv,Transient:ki}=Be,{External:fl,Internal:Jc}=Le,Zc=z.object({in_trial:z.boolean().meta($e),trial_type:z.string().optional().meta($e),plan_handle:z.string().optional().meta($e),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta($e),trial_limit_type:z.enum(["time","usage"]).optional().meta($e),progress_percent:z.number().min(0).max(100).optional().meta($e),day_number:z.number().int().min(0).optional().meta($e),days_remaining:z.number().int().min(0).optional().meta($e),usage_entitlement_handle:z.string().optional().meta($e),usage_consumed:z.number().int().min(0).optional().meta($e),usage_remaining:z.number().int().min(0).optional().meta($e),usage_limit:z.number().int().min(0).optional().meta($e)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":fl}),Mg=z.object({entitlement_handle:z.string().min(1).meta($e),unit:z.string().min(1).meta($e),amount:z.number().min(0).meta($e),limit:z.number().min(0).optional().meta($e),reset_date:z.string().optional().meta($e)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":fl});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":fl});var Fg=z.object({handle:z.string().min(1).meta($e),name:z.string().min(1).meta($e),price:z.string().optional().meta($e),billing_period:z.enum(["monthly","annual","none"]).optional().meta($e)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":fl}),zv=z.object({product_instance_id:z.string().min(1).meta($e),user_id:z.string().min(1).meta(Wc),plan:Fg.optional().meta($e),usage:z.record(z.string(),Mg).default({}).meta($e),trial:Zc.optional().meta($e),entitlements:z.record(z.string(),z.union([z.boolean(),to])).default({}).meta($e)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":Bv,"x-revturbine-schema-exposure":fl}),ro=J.merge(_e).merge(ce).extend({user_id:z.string().min(1).meta(Wc),account_id:z.string().min(1).nullable().optional().meta(Wc),email:z.string().email().nullable().optional().meta(Wc),email_type:z.string().optional().meta($e),plan_handle:z.string().min(1).optional().meta($e),plan:Fg.optional().meta($e),usage:z.record(z.string(),Mg).default({}).meta($e),trial:Zc.optional().meta($e),payment_failed:z.boolean().optional().meta($e),payment_at_risk:z.boolean().optional().meta($e),tiers:z.record(z.string(),z.string()).optional().meta($e),entitlements:z.record(z.string(),z.union([z.boolean(),to])).default({}).meta($e),instances:z.array(zv).optional().meta($e),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Wc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...$e,"x-revturbine-schema-persistence":ki}),derived_config_version:z.string().nullable().optional().meta($e),context_hash:z.string().nullable().optional().meta($e),derived_computed_at:an.meta($e),activity_score:z.number().int().min(0).nullable().optional().meta($e),activity_score_computed_at:z.string().datetime().nullable().optional().meta($e),experiments:z.record(z.string(),z.string()).optional().meta($e)}).meta({id:"UserContext","x-revturbine-schema-persistence":Bv,"x-revturbine-schema-exposure":fl}),sO=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...$e,...Yr}),days_remaining:z.number().int().min(0).optional().meta({...$e,...Yr}),ends_at:z.string().optional().meta({...$e,...Yr})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":Jc}),oO=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...$e,...Yr}),failed_payment_reason:z.string().optional().meta({...Ug,...Iu}),issues:z.array(wu).optional().meta({...Ug,...Iu}),provider_subscription_id:z.string().optional().meta({...Ug,...xg})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":Jc}),lO=z.object({can_upgrade:z.boolean().optional().meta({...$e,...Yr}),can_manage_billing:z.boolean().optional().meta({...$e,...Yr})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":Jc}),cO=z.object({handle:z.string().min(1).optional().meta({...$e,...Yr}),name:z.string().min(1).optional().meta({...$e,...Yr})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":Jc});z.object({subject:z.string().min(1).meta({...$e,...Yr}),context_version:z.string().optional().meta({...$e,...Yr}),trial:sO.optional().meta({...$e,...Yr}),billing:oO.optional().meta({...$e,...Yr}),plan:cO.optional().meta({...$e,...Yr}),capabilities:lO.optional().meta({...$e,...Yr})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":Jc});({"/api/user-contexts":{get:f({operationId:"listUserContexts",requestParams:{query:Y},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:H(ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:f({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:f({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:ro.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:f({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:Zn}=De,{Persisted:Lg,Transient:$v}=Be,{Internal:Qc}=Le,dO=bt(rt.Playbook,{sdkInput:true}),Kv=bt(rt.Playbook,{inConfig:false,sdkInput:true}),Hv=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":$v,"x-revturbine-schema-exposure":Qc}),Gv=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":$v,"x-revturbine-schema-exposure":Qc}),ju=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Zn,readOnly:true}),name:Wt.meta(Zn),handle:nt.optional().meta(Zn),category:Hv.default("custom").meta(Zn),visibility_toggle:z.boolean().default(true).meta(Zn),source_type:Gv.default("system").meta(Zn),estimated_size:z.number().int().min(0).optional().meta(Zn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":Lg,"x-revturbine-schema-exposure":Qc,...Kv,...On()}),pO=Sn("SegmentDimensionAnchor"),Ou=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Zn,readOnly:true}),dimension_id:z.string().min(1).meta(Zn),name:Wt.meta(Zn),handle:nt.meta(Zn),description:xa.meta(Zn),definition_rule:z.record(z.string(),z.unknown()).optional().meta(Zn),used_in_count:z.number().int().min(0).default(0).meta({...Zn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":Lg,"x-revturbine-schema-exposure":Qc,...Kv,...On()}),gO=Sn("SegmentValueAnchor");J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Zn,readOnly:true}),name:Wt.meta(Zn),handle:nt.meta(Zn),description:xa.meta(Zn),rules:z.record(z.string(),z.unknown()).default({}).meta(Zn),experiment_handle:z.string().min(1).optional().meta(Zn),experiment_id:z.string().min(1).optional().meta(Zn),is_active:z.boolean().default(true).meta(Zn),estimated_size:z.number().int().min(0).nullable().default(null).meta(Zn),metadata:Kt.meta(Zn)}).meta({id:"Segment","x-revturbine-schema-persistence":Lg,"x-revturbine-schema-exposure":Qc,...dO,...On()});({"/api/segment-dimension-anchors":{get:f({operationId:"listSegmentDimensionAnchors",requestParams:{query:Y},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:H(pO)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:f({operationId:"listSegmentValueAnchors",requestParams:{query:Y},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:H(gO)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:f({operationId:"listSegmentDimensions",requestParams:{query:Y},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:H(ju)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:f({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),description:z.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:ju}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:f({operationId:"deleteCustomDimension",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:f({operationId:"toggleDimensionVisibility",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({visible:z.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ju}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:f({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:Y},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:H(Ou)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:f({operationId:"createSegmentValue",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),handle:z.string(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:f({operationId:"updateSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().optional(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:f({operationId:"deleteSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Delete segment value",tags:["segments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"delete"}}})}});var {Unrestricted:It}=De,{Persisted:_l,Transient:Yv}=Be,{External:Is}=Le,Ng=bt(rt.Playbook,{sdkInput:true}),_O=bt(rt.Playbook,{inConfig:false,sdkInput:false}),yO=bt(rt.Playbook,{inConfig:false,sdkInput:true}),vO=bt(rt.Playbook,{inConfig:false,sdkInput:true,source:Lr.CodeConstant});J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...It,readOnly:true}),handle:nt.meta({...It,readOnly:true}),name:Wt.meta(It),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(It),subject:z.string().max(500).optional().meta(It),body:z.string().meta(It),template_variables:z.array(z.string()).default([]).meta(It),metadata:Kt.meta(It)}).meta({id:"Message","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Is,..._O,...vr()});var qu=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...It,readOnly:true}),name:Wt.meta(It),handle:nt.meta(It),action_type:ml.meta(It),target_url:z.string().optional().meta(It),target_plan_id:z.string().optional().meta(It),config_fields:z.record(z.string(),z.unknown()).default({}).meta(It),metadata:Kt.meta(It)}).meta({id:"CtaPath","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Is,...Ng,...On()}),xO=Sn("CtaPathAnchor"),Wv=z.enum(["header","body","secondary_body","message","cta_label","secondary_label","image","toggle","duration","send_delay","entitlement","plan","dropdown","json"]).meta({id:"TemplateFieldType","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Is,...vO}),Jv=z.object({name:z.string().min(1),field_type:Wv,required:z.boolean().default(false),default_value:z.unknown().optional(),order:z.number().int().min(0).optional(),help_text:z.string().max(500).optional()}).meta({id:"FieldDefinition","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Is,...yO}),Du=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...It,readOnly:true}),name:Wt.meta(It),handle:nt.meta(It),surface_type:Tg.meta(It),field_definitions:z.array(Jv).default([]).meta(It),description:xa.meta(It)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Is,...Ng,...On()}),SO=Sn("SurfaceTemplateAnchor"),Uu=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...It,readOnly:true}),name:Wt.meta(It),handle:nt.meta(It),content_fields:z.record(z.string(),z.unknown()).default({}).meta(It),variation_dimension_id:z.string().optional().meta(It),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(It),notes:z.string().max(1e3).optional().meta(It),used_in_count:z.number().int().min(0).default(0).meta({...It,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Is,...Ng,...On()}),PO=Sn("MessageBlockRecordAnchor"),Zv=z.object({segment_id:z.string().min(1).meta(It),message_block_id:z.string().min(1).meta(It),ui_path_id:z.string().optional().meta(It),promotion_id:z.string().optional().meta(It)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":Yv,"x-revturbine-schema-exposure":Is});z.object({payload_id:z.string().min(1).meta(It),tenant_id:z.string().min(1).meta(It),name:Wt.meta(It),surface_template_id:z.string().min(1).meta(It),default_message_block_id:z.string().min(1).meta(It),segment_content_map:z.array(Zv).optional().meta(It),ui_path_id:z.string().optional().meta(It),promotion_id:z.string().optional().meta(It),status:z.enum(["draft","active","inactive"]).meta(It),created_at:z.string().datetime().optional().meta({...It,readOnly:true}),updated_at:z.string().datetime().optional().meta({...It,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":Yv,"x-revturbine-schema-exposure":Is});({"/api/surface-template-anchors":{get:f({operationId:"listSurfaceTemplateAnchors",requestParams:{query:Y},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:H(SO)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:f({operationId:"listSurfaceTemplates",requestParams:{query:Y},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:H(Du)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:f({operationId:"listMessageBlockRecordAnchors",requestParams:{query:Y},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:H(PO)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:f({operationId:"listMessageBlocks",requestParams:{query:Y},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:H(Uu)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:f({operationId:"listCtaPathAnchors",requestParams:{query:Y},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:H(xO)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:f({operationId:"listCtaPaths",requestParams:{query:Y},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:H(qu)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:yl,Pii:CO}=De,{Persisted:Qv}=Be,{Internal:EO,External:kO}=Le,RO=bt(rt.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...yl,readOnly:true}),name:z.string().min(1).max(120).meta(yl),mode:z.enum(["light","dark","system"]).default("system").meta(yl),tokens:z.record(z.string(),z.string()).default({}).meta(yl)}).meta({id:"Theme","x-revturbine-schema-persistence":Qv,"x-revturbine-schema-exposure":kO,...RO});var Vg=J.merge(ce).extend({user_id:z.string().min(1).meta(CO),scope:z.string().min(1).meta(yl),preferences:z.record(z.string(),z.unknown()).default({}).meta(yl)}).meta({id:"UiPreference","x-revturbine-schema-persistence":Qv,"x-revturbine-schema-exposure":EO});({"/api/ui-preferences":{get:f({operationId:"listUiPreferences",requestParams:{query:Y},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:H(Vg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:f({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Nn(Vg))}}},responses:{200:{description:"UI preferences upsert response",content:{"application/json":{schema:z.object({updated:z.number().int().min(0)})}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"upsert",writeSchema:"UiPreferenceSchema#writable"}}})}});var {Unrestricted:wt,Financial:Ri}=De,{Persisted:Xv,Transient:Xc}=Be,{External:em,Internal:eb}=Le,tb=z.object({month:z.string().meta(wt),cohort_size:z.number().int().min(0).meta(wt),retained:z.number().int().min(0).meta(wt),retention_rate:z.number().min(0).max(1).meta(wt),revenue_cents:z.number().int().min(0).meta(Ri)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Xc,"x-revturbine-schema-exposure":em}),nb=z.object({step:z.string().meta(wt),label:z.string().meta(wt),count:z.number().int().min(0).meta(wt),conversion_rate:z.number().min(0).max(1).meta(wt),drop_off_rate:z.number().min(0).max(1).meta(wt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Xc,"x-revturbine-schema-exposure":em}),rb=z.object({placement_id:z.string().meta(wt),placement_name:z.string().meta(wt),impressions:z.number().int().min(0).meta(wt),clicks:z.number().int().min(0).meta(wt),conversions:z.number().int().min(0).meta(wt),ctr:z.number().min(0).meta(wt),conversion_rate:z.number().min(0).meta(wt),revenue_cents:z.number().int().min(0).meta(Ri)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Xc,"x-revturbine-schema-exposure":em}),ab=z.object({date:z.string().meta(wt),mrr_cents:z.number().int().min(0).meta(Ri),arr_cents:z.number().int().min(0).meta(Ri),new_mrr_cents:z.number().int().min(0).meta(Ri),churned_mrr_cents:z.number().int().min(0).meta(Ri),expansion_mrr_cents:z.number().int().min(0).meta(Ri),net_new_mrr_cents:z.number().int().meta(Ri)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Xc,"x-revturbine-schema-exposure":em}),ib=z.object({metric_key:z.string().min(1).meta(wt),label:z.string().meta(wt),current_value:z.number().meta(Ri),previous_value:z.number().nullable().default(null).meta(Ri),change_percent:z.number().nullable().default(null).meta(wt),period:z.string().meta(wt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(wt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Xc,"x-revturbine-schema-exposure":em}),Bg=J.merge(ce).merge(_e).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(wt),severity:cl.meta(wt),resource_type:z.string().min(1).meta(wt),resource_id:z.string().min(1).meta(wt),summary:z.string().max(1e3).meta(wt),expected_value:z.unknown().optional().meta(wt),actual_value:z.unknown().optional().meta(wt),affected_customer_count:z.number().int().min(0).default(0).meta(wt),is_resolved:z.boolean().default(false).meta(wt),resolved_at:an.meta(wt),metadata:Kt.meta(wt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":Xv,"x-revturbine-schema-exposure":eb}),zg=J.merge(ce).merge(_e).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(wt),severity:cl.meta(wt),title:z.string().min(1).max(300).meta(wt),description:z.string().max(2e3).meta(wt),resource_type:z.string().optional().meta(wt),resource_id:z.string().optional().meta(wt),is_acknowledged:z.boolean().default(false).meta(wt),acknowledged_at:an.meta(wt),acknowledged_by:z.string().nullable().default(null).meta(wt),metadata:Kt.meta(wt)}).meta({id:"Alert","x-revturbine-schema-persistence":Xv,"x-revturbine-schema-exposure":eb});({"/api/analytics/kpis":{get:f({operationId:"listKpiAggregates",requestParams:{query:Y},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:H(ib)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:f({operationId:"listPlacementPerformance",requestParams:{query:Y},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:H(rb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:f({operationId:"listRevenueMetrics",requestParams:{query:Y},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:H(ab)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:f({operationId:"listCohortMetrics",requestParams:{query:Y},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:H(tb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:f({operationId:"listFunnelSteps",requestParams:{query:Y},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:H(nb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:f({operationId:"listDriftReports",requestParams:{query:Y},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:H(Bg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:f({operationId:"resolveDriftReport",requestParams:{path:z.object({reportId:z.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:Bg}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:f({operationId:"listAlerts",requestParams:{query:Y},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:H(zg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:f({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:zg}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var{Unrestricted:b}=De,{Transient:OO}=Be,{Internal:qO}=Le,et=t=>({id:t,"x-revturbine-schema-persistence":OO,"x-revturbine-schema-exposure":qO}),sb=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,Mu=/^[a-z][a-z0-9_-]{0,99}$/,sn=z.string().regex(sb).max(120),Ra=z.string().regex(Mu),wr=sn.meta(et("AnalyticsSemanticId")),ma=z.enum(["account","user","billing_unit","organization"]).meta(et("AnalyticsAnalyticalUnit")),vl=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(et("AnalyticsQueryFamily")),oi=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(et("AnalyticsSourceScope")),Hg=z.enum(["as_of_event","current"]).meta(et("AnalyticsHistoricalMode")),ob=z.enum(["hour","day","week","month","quarter"]).meta(et("AnalyticsTimeGrain")),Fu=z.enum(["none","previous_period","previous_year"]).meta(et("AnalyticsCompareMode")),tm=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(et("AnalyticsFilterOperator")),Lu=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(et("AnalyticsFilterControl")),lb=z.enum(["low","medium","high"]).meta(et("AnalyticsCardinalityClass")),nm=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(et("AnalyticsFieldType")),cb=z.enum(["increase","decrease","neutral"]).meta(et("AnalyticsMetricDirection")),mb=z.enum(["binary","count","continuous","ratio","revenue"]).meta(et("AnalyticsMetricStatisticalType")),ub=z.enum(["additive","semi_additive","non_additive"]).meta(et("AnalyticsMetricAggregationSemantics")),db=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(et("AnalyticsDimensionType")),Nu=z.enum(["filter","group","split","sort"]).meta(et("AnalyticsDimensionCapability")),pb=z.enum(["private","team","tenant"]).meta(et("AnalyticsViewVisibility")),$g=z.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta(et("AnalyticsCustomizationCapability")),gb=z.enum(["unrestricted","pii","financial","operational"]).meta(et("AnalyticsClassification")),ca=z.strictObject({value:z.string().min(1).max(300).meta(b),key:z.string().max(120).optional().meta(b)}).meta(et("LocalizedText")),Kg=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),bl=z.union([Kg,z.array(Kg).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(b),compare:Fu.optional().meta(b)}),z.strictObject({min:z.number().optional().meta(b),max:z.number().optional().meta(b)})]).meta(et("AnalyticsFilterValue")),Vu=z.strictObject({dimension:sn.meta(b),operator:tm.meta(b),value:bl.optional().meta(b)}).meta(et("AnalyticsSemanticFilter")),ao=z.strictObject({type:z.enum(["number","currency","percent","duration"]).meta(b),decimals:z.number().int().min(0).max(6).optional().meta(b),compact:z.boolean().optional().meta(b)}).meta(et("AnalyticsFormatSpec")),hb=z.strictObject({legend:z.enum(["none","top","right","bottom","left"]).optional().meta(b),value_labels:z.boolean().optional().meta(b),reference_lines:z.array(z.strictObject({value:z.number().meta(b),label:ca.optional().meta(b)})).max(5).optional().meta(b),x_axis_format:ao.optional().meta(b),y_axis_format:ao.optional().meta(b),empty_state:z.enum(["blank","message"]).optional().meta(b)}).meta(et("AnalyticsSafeChartOptions")),Bu=z.object({deprecated:z.boolean().meta(b),replaced_by:sn.optional().meta(b)}).meta(et("AnalyticsCatalogDeprecation")),Gg=Bu,Yg=z.object({id:sn.meta(b),label:z.string().min(1).max(120).meta(b),description:z.string().max(500).optional().meta(b),when_to_use:z.string().max(500).optional().meta(b),do_not_use_for:z.string().max(500).optional().meta(b),type:db.meta(b),operators:z.array(tm).min(1).meta(b),control:Lu.meta(b),capabilities:z.array(Nu).min(1).meta(b),cardinality:lb.meta(b),classification:gb.default("unrestricted").meta(b),historical_mode:Hg.optional().meta(b),allowed_concepts:z.array(sn).optional().meta(b),exclude_from_segment_picker:z.boolean().default(false).meta(b),deprecation:Bu.optional().meta(b)}).meta(et("AnalyticsCatalogDimension")),Wg=z.object({id:sn.meta(b),label:z.string().min(1).max(120).meta(b),description:z.string().max(500).optional().meta(b),when_to_use:z.string().max(500).optional().meta(b),do_not_use_for:z.string().max(500).optional().meta(b),value_type:nm.meta(b),format:ao.optional().meta(b),source_scope:oi.optional().meta(b),direction:cb.optional().meta(b),statistical_type:mb.optional().meta(b),aggregation_semantics:ub.optional().meta(b),preferred_analysis_unit:ma.optional().meta(b),deprecation:Bu.optional().meta(b)}).meta(et("AnalyticsCatalogMetric")),Jg=z.object({id:sn.meta(b),version:z.number().int().min(1).meta(b),label:z.string().min(1).max(120).meta(b),description:z.string().max(500).optional().meta(b),when_to_use:z.string().max(500).optional().meta(b),do_not_use_for:z.string().max(500).optional().meta(b),grain:z.array(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/)).min(1).meta(b),analytical_units:z.array(ma).min(1).meta(b),primary_time_dimension:sn.meta(b),historical_mode:Hg.meta(b),dimensions:z.array(sn).min(1).meta(b),metrics:z.array(sn).min(1).meta(b),query_families:z.array(vl).min(1).meta(b),source_scope:oi.meta(b),coverage_metric:sn.optional().meta(b),deprecation:Bu.optional().meta(b)}).meta(et("AnalyticsCatalogConcept")),fb=z.strictObject({field:sn.meta(b),direction:z.enum(["asc","desc"]).meta(b)}),_b=z.strictObject({dimension:sn.meta(b),grain:ob.meta(b)}),yb=z.strictObject({concept:sn.meta(b),family:vl.meta(b),metrics:z.array(sn).min(1).max(10).meta(b),group_by:z.array(sn).max(3).optional().meta(b),time:_b.optional().meta(b),filters_from:z.array(Ra).max(20).optional().meta(b),fixed_filters:z.array(Vu).max(20).optional().meta(b),compare:Fu.optional().meta(b),order_by:z.array(fb).max(3).optional().meta(b),limit:z.number().int().min(1).max(1e3).optional().meta(b)}).meta(et("AnalyticsViewQuery")),vb=z.strictObject({type:z.literal("metric").meta(b),value:sn.meta(b),comparison:sn.optional().meta(b),format:ao.optional().meta(b)}).meta(et("AnalyticsRenderMetric")),bb=z.strictObject({type:z.literal("cartesian").meta(b),mark:z.enum(["line","area","bar","stacked_bar","scatter"]).meta(b),encoding:z.strictObject({x:sn.meta(b),y:z.union([sn,z.array(sn).min(1).max(5)]).meta(b),color:sn.optional().meta(b),facet:sn.optional().meta(b)}).meta(b),options:hb.optional().meta(b)}).meta(et("AnalyticsRenderCartesian")),xb=z.strictObject({type:z.literal("funnel").meta(b),stages:z.array(sn).min(2).max(10).meta(b),split_by:sn.optional().meta(b)}).meta(et("AnalyticsRenderFunnel")),Sb=z.strictObject({type:z.literal("table").meta(b),columns:z.array(sn).min(1).max(20).meta(b)}).meta(et("AnalyticsRenderTable")),Pb=z.strictObject({type:z.literal("timeline").meta(b),timestamp:sn.meta(b),event_type:sn.meta(b)}).meta(et("AnalyticsRenderTimeline")),Tb=z.strictObject({type:z.literal("recommendations").meta(b),presentation:z.enum(["list","ranked_cards"]).meta(b)}).meta(et("AnalyticsRenderRecommendations")),Zg=z.discriminatedUnion("type",[vb,bb,xb,Sb,Pb,Tb]).meta(et("AnalyticsRenderSpec")),Ib=z.strictObject({id:Ra.meta(b),dimension:sn.meta(b),control:Lu.meta(b),label:ca.optional().meta(b),operators:z.array(tm).min(1).meta(b),default_value:bl.optional().meta(b),required:z.boolean().default(false).meta(b),pinned:z.boolean().default(false).meta(b),applies_to:z.union([z.literal("all"),z.array(Ra).min(1).max(24)]).default("all").meta(b)}).meta(et("AnalyticsViewFilter")),Qg=z.strictObject({type:z.literal("grid").meta(b),columns:z.number().int().min(1).max(24).default(12).meta(b),items:z.array(z.strictObject({block_id:Ra.meta(b),x:z.number().int().min(0).meta(b),y:z.number().int().min(0).meta(b),w:z.number().int().min(1).max(24).meta(b),h:z.number().int().min(1).max(24).meta(b)})).max(24).meta(b)}).meta(et("AnalyticsViewLayout")),Cb=z.strictObject({id:Ra.meta(b),title:ca.optional().meta(b),description:ca.optional().meta(b),query:yb.meta(b),render:Zg.meta(b)}).meta(et("AnalyticsViewBlock")),Eb=z.strictObject({id:Ra.meta(b),label:ca.meta(b),target:sn.meta(b),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).default({}).meta(b)}).meta(et("AnalyticsViewHandoff")),kb=z.strictObject({allow:z.array($g).default([]).meta(b),deny:z.array($g).default([]).meta(b)}).meta(et("AnalyticsCustomizationPolicy"));var Rb=z.string().regex(/^\d+\.\d+$/),zu=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(b),schema_version:Rb.meta(b),id:Ra.meta(b),revision:z.number().int().min(1).meta(b),title:ca.meta(b),description:ca.optional().meta(b),analytical_unit:ma.meta(b),base_template:z.strictObject({id:Ra.meta(b),version:z.number().int().min(1).meta(b)}).optional().meta(b),catalog_version:z.string().min(1).max(64).meta(b),filters:z.array(Ib).max(20).meta(b),layout:Qg.meta(b),blocks:z.array(Cb).min(1).max(24).meta(b),handoffs:z.array(Eb).max(10).optional().meta(b),customization_policy:kb.meta(b)}).meta(et("AnalyticsView")),Ab=z.strictObject({id:Ra.optional().meta(b),dimension:sn.meta(b),control:Lu.optional().meta(b),label:ca.optional().meta(b),operators:z.array(tm).min(1).optional().meta(b),default_value:bl.optional().meta(b),required:z.boolean().optional().meta(b),pinned:z.boolean().optional().meta(b),applies_to:z.union([z.literal("all"),z.array(Ra).min(1).max(24)]).optional().meta(b)}).meta(et("AnalyticsViewFilterDraft")),wb=z.strictObject({id:Ra.optional().meta(b),title:ca.optional().meta(b),concept:sn.meta(b),family:vl.meta(b),metrics:z.array(sn).min(1).max(10).meta(b),group_by:z.array(sn).max(3).optional().meta(b),time:_b.optional().meta(b),filters_from:z.array(Ra).max(20).optional().meta(b),fixed_filters:z.array(Vu).max(20).optional().meta(b),compare:Fu.optional().meta(b),order_by:z.array(fb).max(3).optional().meta(b),limit:z.number().int().min(1).max(1e3).optional().meta(b),render:z.union([z.literal("auto"),Zg]).optional().meta(b)}).meta(et("AnalyticsViewBlockDraft")),jb=z.strictObject({id:Ra.optional().meta(b),label:ca.optional().meta(b),target:sn.meta(b),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).optional().meta(b)}).meta(et("AnalyticsViewHandoffDraft"));z.strictObject({kind:z.literal("revturbine.analytics-view-draft").meta(b),schema_version:Rb.meta(b),title:ca.meta(b),analytical_unit:ma.optional().meta(b),filters:z.union([z.literal("recommended"),z.array(Ab).max(20)]).optional().meta(b),layout:z.union([z.literal("auto"),Qg]).optional().meta(b),blocks:z.array(wb).min(1).max(24).meta(b),handoffs:z.union([z.literal("recommended"),z.array(jb).max(10)]).optional().meta(b),visibility:pb.optional().meta(b)}).meta(et("AnalyticsViewDraft"));var Xg=z.string().regex(/^(\/[^/]*)*$/).max(300),Ob=z.strictObject({op:z.enum(["add","replace","remove"]).meta(b),path:Xg.meta(b),value:z.unknown().optional().meta(b)}).meta(et("AnalyticsSuggestedPatchOp")),eh=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(b),message:z.string().min(1).max(500).meta(b)}).meta(et("AnalyticsWarning")),qb=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(b),path:Xg.meta(b),message:z.string().min(1).max(500).meta(b),actual:z.unknown().optional().meta(b),allowed:z.array(Kg).max(50).optional().meta(b),suggested_patch:z.array(Ob).max(10).optional().meta(b)}).meta(et("AnalyticsValidationIssue"));z.object({path:Xg.meta(b),rule:z.string().min(1).max(120).meta(b),value:z.unknown().optional().meta(b)}).meta(et("AnalyticsCompileResolution"));z.object({valid:z.boolean().meta(b),errors:z.array(qb).default([]).meta(b),warnings:z.array(eh).default([]).meta(b),catalog_version:z.string().min(1).max(64).meta(b)}).meta(et("AnalyticsValidationResult"));var Db=z.object({id:sn.meta(b),type:nm.meta(b),nullable:z.boolean().meta(b)}).meta(et("AnalyticsResultField")),Ub=z.object({numerator:z.number().int().min(0).meta(b),denominator:z.number().int().min(0).meta(b),rate:z.number().min(0).max(1).meta(b)}).meta(et("AnalyticsCoverage")),Mb=z.object({query_hash:z.string().min(1).max(128).meta(b),concept:sn.meta(b),analytical_unit:ma.meta(b),source_scope:oi.meta(b),coverage:Ub.optional().meta(b),as_of:z.string().datetime().meta(b),freshness_seconds:z.number().int().min(0).meta(b),applied_filters:z.array(Vu).default([]).meta(b),next_cursor:z.string().max(500).optional().meta(b),warnings:z.array(eh).default([]).meta(b)}).meta(et("AnalyticsResultMeta")),th=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(b),fields:z.array(Db).meta(b),meta:Mb.meta(b)}).meta(et("AnalyticsResult"));var {Unrestricted:Qn}=De,{Transient:FO}=Be,{Internal:LO}=Le,rm=t=>({id:t,"x-revturbine-schema-persistence":FO,"x-revturbine-schema-exposure":LO}),Fb=z.enum(["fixture","generated"]).meta(rm("AnalyticsCatalogSource"));z.object({catalog_version:z.string().min(1).max(64).meta(Qn),source:Fb.meta(Qn),generated_at:z.string().datetime().optional().meta(Qn),concepts:z.array(Jg).min(1).meta(Qn),dimensions:z.array(Yg).min(1).meta(Qn),metrics:z.array(Wg).min(1).meta(Qn)}).meta(rm("AnalyticsCatalog"));var Lb=z.enum(["concept","dimension","metric","query_family"]).meta(rm("AnalyticsAgentCatalogEntryKind")),Nb=z.object({id:wr.meta(Qn),kind:Lb.meta(Qn),label:z.string().min(1).max(120).meta(Qn),description:z.string().min(1).max(500).meta(Qn),when_to_use:z.string().max(500).optional().meta(Qn),do_not_use_for:z.string().max(500).optional().meta(Qn),value_type:nm.optional().meta(Qn),format:ao.optional().meta(Qn),capabilities:z.array(Nu).optional().meta(Qn),compatible_concepts:z.array(wr).optional().meta(Qn),compatible_families:z.array(vl).optional().meta(Qn),analytical_units:z.array(ma).optional().meta(Qn),source_scope:oi.optional().meta(Qn),example:z.string().max(2e3).optional().meta(Qn),deprecation:Gg.optional().meta(Qn)}).meta(rm("AnalyticsAgentCatalogEntry"));z.object({catalog_version:z.string().min(1).max(64).meta(Qn),query:z.string().min(1).max(200).meta(Qn),entries:z.array(Nb).max(50).meta(Qn)}).meta(rm("AnalyticsCatalogSearchResult"));var {Unrestricted:ur}=De,{Transient:$O}=Be,{Internal:KO}=Le,xl=t=>({id:t,"x-revturbine-schema-persistence":$O,"x-revturbine-schema-exposure":KO}),io=z.string().regex(Mu),Bb=z.strictObject({filter_id:io.meta(ur),value:bl.nullable().meta(ur)}).meta(xl("AnalyticsFilterState"));z.strictObject({view_id:io.meta(ur),revision:z.number().int().min(1).optional().meta(ur),block_ids:z.array(io).min(1).max(24).optional().meta(ur),filter_state:z.array(Bb).max(20).optional().meta(ur)}).meta(xl("AnalyticsQueryRequest"));var $b=z.object({block_id:io.meta(ur),code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(ur),message:z.string().min(1).max(500).meta(ur)}).meta(xl("AnalyticsBlockError")),Kb=z.object({block_id:io.meta(ur),result:th.meta(ur)}).meta(xl("AnalyticsBlockResult"));z.object({view_id:io.meta(ur),revision:z.number().int().min(1).meta(ur),catalog_version:z.string().min(1).max(64).meta(ur),results:z.array(Kb).meta(ur),errors:z.array($b).default([]).meta(ur)}).meta(xl("AnalyticsQueryResponse"));var Gb=z.object({id:io.meta(ur),version:z.number().int().min(1).meta(ur),title:ca.meta(ur),description:ca.optional().meta(ur),block_count:z.number().int().min(1).meta(ur)}).meta(xl("AnalyticsTemplateSummary"));z.object({q:z.string().min(1).max(200),limit:z.coerce.number().int().min(1).max(50).optional()});({"/api/analytics/templates":{get:f({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:H(Gb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:f({operationId:"getAnalyticsView",requestParams:{path:z.object({viewId:z.string()})},summary:"Load a system or saved view document",tags:["analytics-views"],responses:{200:{description:"Canonical view document",content:{"application/json":{schema:zu}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var{Unrestricted:Zi}=De,{Transient:YO}=Be,{Internal:WO}=Le,Ku=t=>({id:t,"x-revturbine-schema-persistence":YO,"x-revturbine-schema-exposure":WO}),Yb=z.enum(["analytics_execution","experiment_assignment","experiment_evidence","experiment_analysis","growth_signal","growth_benchmark","optimization"]).meta(Ku("ProviderCapability")),am=z.enum(["available","stale","unavailable","unsupported","partial"]).meta(Ku("ProviderAvailability")),Cs=z.object({provider_handle:nt.meta(Zi),provider_type:z.string().min(1).max(100).meta(Zi),provider_version:z.string().min(1).max(100).meta(Zi),contract_version:z.number().int().min(1).meta(Zi),generated_at:z.string().datetime().meta(Zi),data_watermark:z.string().datetime().optional().meta(Zi),source_revision:z.string().min(1).max(200).optional().meta(Zi)}).meta(Ku("ProviderProvenance")),im=z.object({provider_handle:nt.meta(Zi),capability:Yb.meta(Zi)}).meta(Ku("ProviderBindingRef"));var {Unrestricted:Ne}=De,{Transient:JO}=Be,{Internal:ZO}=Le,Qi=t=>({id:t,"x-revturbine-schema-persistence":JO,"x-revturbine-schema-exposure":ZO}),Wb=z.object({start:z.string().datetime().meta(Ne),end:z.string().datetime().meta(Ne),value:z.number().meta(Ne),numerator:z.number().optional().meta(Ne),denominator:z.number().optional().meta(Ne),sample_size:z.number().int().min(0).optional().meta(Ne)}).meta(Qi("GrowthSignalPoint")),Jb=z.object({metric:wr.meta(Ne),analytical_unit:ma.meta(Ne),source_scope:oi.meta(Ne),dimensions:z.record(wr,z.string()).meta(Ne),points:z.array(Wb).meta(Ne),provenance:Cs.meta(Ne)}).meta(Qi("GrowthSignalSeries"));z.object({availability:am.meta(Ne),series:z.array(Jb).meta(Ne),provenance:Cs.meta(Ne)}).meta(Qi("GrowthSignalBundle"));z.object({current:z.number().meta(Ne),baseline:z.number().meta(Ne),absolute_delta:z.number().meta(Ne),relative_delta:z.number().meta(Ne),short_window:z.number().meta(Ne),long_window:z.number().meta(Ne),slope:z.number().meta(Ne),acceleration:z.number().meta(Ne),volatility:z.number().meta(Ne),persistence:z.number().meta(Ne),seasonal_expected:z.number().optional().meta(Ne),seasonal_deviation:z.number().optional().meta(Ne),peer_value:z.number().optional().meta(Ne),peer_gap:z.number().optional().meta(Ne),sample_size:z.number().int().min(0).optional().meta(Ne)}).meta(Qi("TrendFeatures"));var Zb=z.object({min_units:z.number().int().min(0).optional().meta(Ne),min_events:z.number().int().min(0).optional().meta(Ne),min_periods:z.number().int().min(0).optional().meta(Ne),min_denominator:z.number().min(0).optional().meta(Ne)}).meta(Qi("EvidenceRequirement")),Qb=z.enum(["increase","decrease","level_shift","threshold","peer_gap","correlation"]).meta(Qi("OpportunityInterpretation")),Hu=z.object({metric:wr.meta(Ne),current:z.number().meta(Ne),baseline:z.number().optional().meta(Ne),relative_delta:z.number().optional().meta(Ne),window:z.object({start:z.string().datetime().meta(Ne),end:z.string().datetime().meta(Ne)}).meta(Ne),sample_size:z.number().int().min(0).optional().meta(Ne),source_scope:oi.meta(Ne),interpretation:Qb.meta(Ne)}).meta(Qi("OpportunityEvidence"));z.object({required_metrics:z.array(wr).min(1).meta(Ne),evidence:Zb.meta(Ne)}).meta(Qi("DetectorRequirements"));var rh=z.record(z.string(),z.unknown());z.object({detector_id:z.string().min(1).meta(Ne),detector_version:z.number().int().min(1).meta(Ne),opportunity_type:z.string().min(1).meta(Ne),resource:z.object({type:z.string().min(1).meta(Ne),handle:z.string().min(1).meta(Ne)}).optional().meta(Ne),segment_handles:z.array(z.string().min(1)).optional().meta(Ne),evidence:z.array(Hu).min(1).meta(Ne),hypothesis:z.string().min(1).meta(Ne),confidence:z.number().min(0).max(1).meta(Ne),impact:rh.optional().meta(Ne),suggested_action:rh.optional().meta(Ne),suggested_experiment:rh.optional().meta(Ne)}).meta(Qi("OpportunityCandidate"));var {Unrestricted:wi}=De,{Transient:sm}=Be,{External:om}=Le,ah=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":om}),ex=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":om}),tx=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(wi),surface:ah.meta(wi),purpose:z.string().min(1).max(300).meta(wi),stability:ex.meta(wi)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":om}),nx=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(wi),surface:ah.meta(wi),purpose:z.string().min(1).max(300).meta(wi)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":om});z.object({version:z.number().int().min(1).meta(wi),events:z.array(tx).min(1).meta(wi),prefix_families:z.array(nx).meta(wi)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":om});var Yu=["web_signed_up","web_signed_in","cli_signed_up","cli_signed_in","cli_command_executed","changeset_submitted","changeset_approved","changeset_rejected","changeset_deployed","changeset_launched","changeset_parked","changeset_resumed","changeset_discarded","changeset_archived","config_imported","config_exported","entity_created","entity_updated","entity_deleted","web_api_error"],rx=["placement_resolved","placement_rendered","placement_exposed","placement_outcome","placement_interaction","gate_evaluated","gate_attempted","gate_allowed","gate_denied","slot_evaluated","slot_filled","slot_empty","slot_suppressed","slot_error","segment_enrolled","segment_unenrolled","user_context_observed","page_view"],ax=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],ix=["area_viewed","feature_gated"],Xb={web_signed_up:{purpose:"An operator created a control-plane account via the web app.",stability:"stable"},web_signed_in:{purpose:"An operator signed in to the web app.",stability:"stable"},cli_signed_up:{purpose:"An operator created an account through the CLI device flow.",stability:"stable"},cli_signed_in:{purpose:"An operator authenticated the CLI.",stability:"stable"},cli_command_executed:{purpose:"A CLI command ran; the command name rides on payload.command.",stability:"stable"},changeset_submitted:{purpose:"A playbook version was submitted for review.",stability:"stable"},changeset_approved:{purpose:"A playbook version was approved.",stability:"stable"},changeset_rejected:{purpose:"A playbook version was rejected.",stability:"stable"},changeset_deployed:{purpose:"A playbook version was compiled and activated.",stability:"stable"},changeset_launched:{purpose:"A deployed playbook version was launched to traffic.",stability:"stable"},changeset_parked:{purpose:"A playbook version was parked.",stability:"stable"},changeset_resumed:{purpose:"A parked playbook version resumed.",stability:"stable"},changeset_discarded:{purpose:"A draft playbook version was discarded.",stability:"stable"},changeset_archived:{purpose:"A playbook version was archived.",stability:"stable"},config_imported:{purpose:"A Playbook was imported as a staged change set.",stability:"stable"},config_exported:{purpose:"A Playbook was exported.",stability:"stable"},entity_created:{purpose:"A config entity was created; the resource rides on payload.resource.",stability:"stable"},entity_updated:{purpose:"A config entity was updated; the resource rides on payload.resource.",stability:"stable"},entity_deleted:{purpose:"A config entity was deleted; the resource rides on payload.resource.",stability:"stable"},web_api_error:{purpose:"A control-plane API request failed; internal telemetry only, never via the customer SDK.",stability:"internal"},area_viewed:{purpose:"An authenticated product area of the web app was viewed (dashboard, a studio).",stability:"internal"},feature_gated:{purpose:"A nav-gated section of the web app rendered its gate notice \u2014 the control plane\u2019s own paywall analog.",stability:"internal"},placement_resolved:{purpose:"The decision engine resolved a placement for a slot.",stability:"stable"},placement_rendered:{purpose:"A resolved placement's visual root rendered.",stability:"stable"},placement_exposed:{purpose:"A rendered placement met the exposure basis (render or viewport).",stability:"stable"},placement_outcome:{purpose:"A placement reached a terminal outcome (converted, dismissed, \u2026).",stability:"stable"},placement_interaction:{purpose:"A user interacted with a presented placement.",stability:"stable"},gate_evaluated:{purpose:"A gate was evaluated during render; the passive denominator signal.",stability:"stable"},gate_attempted:{purpose:"A user actively invoked a gated action.",stability:"stable"},gate_allowed:{purpose:"An actively invoked gated action was allowed.",stability:"stable"},gate_denied:{purpose:"An actively invoked gated action was denied.",stability:"stable"},slot_evaluated:{purpose:"A surface slot resolution ran; the funnel denominator.",stability:"stable"},slot_filled:{purpose:"A slot resolved to a payload and will render.",stability:"stable"},slot_empty:{purpose:"A slot resolved to nothing eligible.",stability:"stable"},slot_suppressed:{purpose:"A slot was eligible but suppressed by caps or cooldown.",stability:"stable"},slot_error:{purpose:"A slot resolution failed.",stability:"internal"},segment_enrolled:{purpose:"A user entered a targeting segment.",stability:"stable"},segment_unenrolled:{purpose:"A user left a targeting segment.",stability:"stable"},user_context_observed:{purpose:"Reserved: the NAMES of custom user-context fields set on identify/setUserContext. Names only, never values.",stability:"internal"},page_view:{purpose:"A route change tracked by the SDK router integration.",stability:"stable"},sdk_init:{purpose:"One anonymous adoption beacon per SDK startup.",stability:"internal"},sdk_error:{purpose:"The SDK itself malfunctioned; distinct from a decision producing nothing.",stability:"internal"},sdk_validation_warning:{purpose:"The SDK found a config or usage problem worth surfacing.",stability:"internal"},resolution_failure:{purpose:"A decision produced nothing; allow-listed handles and closed reason codes only.",stability:"internal"}};function Gu(t,e){return t.map(n=>({name:n,surface:e,purpose:Xb[n].purpose,stability:Xb[n].stability}))}var ih={events:[...Gu(Yu,"control_plane"),...Gu(ix,"control_plane"),...Gu(rx,"sdk_client"),...Gu(ax,"sdk_client")]};ih.events.map(t=>t.name);ih.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:N,Pii:Sl}=De,{Persisted:ox,Transient:Vn}=Be,{Internal:Es,External:Ir}=Le,oh=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),lx=J.extend({event_type:z.string().min(1).meta(N),source:oh.default("sdk").meta(N),tenant_id:z.string().min(1).optional().meta(N),user_id:z.string().min(1).optional().meta(Sl),session_id:z.string().min(1).optional().meta(Sl),occurred_at:z.string().datetime().meta(N),request_id:z.string().min(1).meta(N),attributes:z.record(z.string(),z.unknown()).default({}).meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Es}),cx=lx.extend({ingested_at:z.string().datetime().meta(N)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":ox,"x-revturbine-schema-exposure":Es});z.array(z.object({id:z.string().min(1).optional().meta(N),event_type:z.string().min(1).meta(N),occurred_at:z.string().datetime().optional().meta(N),tenant_id:z.string().min(1).optional().meta(N),user_id:z.string().min(1).optional().meta(Sl),session_id:z.string().min(1).optional().meta(Sl),attributes:z.record(z.string(),z.unknown()).optional().meta(N),payload:z.record(z.string(),z.unknown()).optional().meta(N),message:z.string().optional().meta(N),level:z.string().optional().meta(N),path:z.string().optional().meta(N)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Es});var mx=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({user_id:z.string().min(1).meta(Sl),placement_id:z.string().min(1).meta(N),treatment_id:z.string().min(1).optional().meta(N),surface_slot_id:z.string().min(1).optional().meta(N),surface_template_id:z.string().min(1).optional().meta(N),payload_id:z.string().min(1).optional().meta(N),interaction_type:mx.meta(N),interaction_at:z.string().datetime().optional().meta(N),message_block_handle:z.string().min(1).optional().meta(N),message_block_id:z.string().min(1).optional().meta(N),experiment_id:z.string().min(1).optional().meta(N),variant_key:z.string().min(1).optional().meta(N),test:z.boolean().optional().meta(N),metadata:z.record(z.string(),z.unknown()).optional().meta(N)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.enum(["trial_midpoint","trial_expiring","trial_expired","usage_limit_approaching","usage_limit_reached","credit_balance_low","seat_limit_reached","feature_gated","cancel_intent","payment_failed","auto_renewal_reminder","onboarding_complete","invite_teammate_prompt","referral_offer","plan_upgrade_nudge"]).meta({id:"TriggerEventType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({days_remaining:z.number().int().min(0).optional().meta(N)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({entitlement_handle:z.string().optional().meta(N),current_usage:z.number().min(0).optional().meta(N),usage_limit:z.number().min(0).optional().meta(N),usage_percent:z.number().min(0).max(100).optional().meta(N),threshold:z.number().min(0).optional().meta(N),balance:z.number().min(0).optional().meta(N),allocation:z.number().min(0).optional().meta(N),seats_used:z.number().int().min(0).optional().meta(N),seats_allowed:z.number().int().min(0).optional().meta(N)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({feature:z.string().min(1).meta(N)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({retry_count:z.number().int().min(0).optional().meta(N),renewal_date:z.string().optional().meta(N)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({event_type:z.string().min(1).meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});var dx=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),px=z.enum(Yu).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({event_type:px.meta(N),source:dx.meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({q:z.string().optional().meta(N),source:oh.optional().meta(N),event_type:z.string().optional().meta(N),from:z.string().datetime().optional().meta(N),to:z.string().datetime().optional().meta(N),page:z.coerce.number().int().min(1).default(1).meta(N),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(N)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Es});var gx=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Es}),hx=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Es}),Wu=J.merge(ce).merge(_e).extend({event_id:z.string().min(1).meta(N),event_type:z.string().min(1).meta(N),source:gx.meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N),status:hx.default("processed").meta(N),processed_at:z.string().datetime().optional().meta(N),error_message:z.string().optional().meta(N)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":ox,"x-revturbine-schema-exposure":Es});z.object({accepted:z.number().int().min(0).meta(N)}).meta({id:"null","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Es});var g1=500,h1=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),fx=z.object({environment_id:z.string().min(1).meta(N),user_id:z.string().min(1).meta(Sl),account_id:z.string().min(1).meta(N),event_name:z.string().min(1).max(120).meta(N),event_ts:z.string().datetime().meta(N),properties:z.string().optional().meta(N),surface_slot_id:z.string().nullable().optional().meta(N),placement_id:z.string().nullable().optional().meta(N),payload_id:z.string().nullable().optional().meta(N),request_id:z.string().optional().meta(N),experiment_id:z.string().nullable().optional().meta(N),variant_key:z.string().nullable().optional().meta(N),tenant_id:z.string().optional().meta(N),event_id:z.string().nullable().optional().meta(N),origin:h1.nullable().optional().meta(N),playbook_version:z.string().nullable().optional().meta(N),decision_id:z.string().nullable().optional().meta(N),test:z.boolean().optional().meta(N)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({events:z.array(fx).min(1).max(g1).meta(N)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});var f1=10,yx=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),vx=z.object({plans:z.number().int().min(0).meta(N),entitlements:z.number().int().min(0).meta(N),entitlement_rules:z.number().int().min(0).meta(N),segments:z.number().int().min(0).meta(N),placements:z.number().int().min(0).meta(N),placement_payloads:z.number().int().min(0).meta(N),content_ui_paths:z.number().int().min(0).meta(N),surface_templates:z.number().int().min(0).meta(N)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),bx=z.object({event_type:yx.meta(N),occurred_at:z.string().datetime().meta(N),request_id:z.string().min(1).optional().meta(N),config_hash_id:z.string().min(1).max(64).optional().meta(N),sdk_version:z.string().min(1).max(64).optional().meta(N),runtime_mode:z.string().min(1).max(64).optional().meta(N),schema_version:z.string().min(1).max(64).optional().meta(N),bundle_version:z.string().min(1).max(64).optional().meta(N),config_shape:vx.optional().meta(N),message:z.string().max(500).optional().meta(N),reason:z.string().min(1).max(64).optional().meta(N),placement_handle:z.string().min(1).max(64).optional().meta(N),slot_handle:z.string().min(1).max(64).optional().meta(N),surface:z.string().min(1).max(64).optional().meta(N),plan_handle:z.string().min(1).max(64).optional().meta(N),entitlement_handle:z.string().min(1).max(64).optional().meta(N)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({events:z.array(bx).min(1).max(f1).meta(N)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});({"/api/events/search":{get:f({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:Sg(cx)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:f({operationId:"listWebhookEvents",requestParams:{query:Y},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:H(Wu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:pt}=De,{Persisted:cm,Transient:mm}=Be,{Internal:ji}=Le,Sx=bt(rt.Playbook,{sdkInput:true}),Px=bt(rt.Playbook,{inConfig:false,sdkInput:true}),Tx=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":ji}),lh=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":ji}),ch=z.object({name:Wt.meta(pt),handle:nt.meta(pt),plan_id:z.string().nullable().optional().meta(pt),segment_id:z.string().nullable().optional().meta(pt),trial_limit_type:lh.default("time").meta(pt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(pt),grace_period_days:z.number().int().min(0).default(0).meta(pt),usage_entitlement_handle:z.string().min(1).optional().meta(pt),usage_limit_value:z.number().int().min(1).optional().meta(pt),require_payment_method:z.boolean().default(false).meta(pt),auto_convert:z.boolean().default(true).meta(pt),convert_to_plan_id:z.string().optional().meta(pt),fallback_plan_id:z.string().optional().meta(pt),limit_per_customer:z.number().int().min(1).default(1).meta(pt),is_active:z.boolean().default(true).meta(pt),metadata:Kt.meta(pt)}),so=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...pt,readOnly:true})}).merge(ch).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":ji,...Sx,...On()}),y1=Sn("FreeTrialRuleAnchor"),Ix=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":ji}),mh=z.object({name:Wt.meta(pt),handle:nt.meta(pt),premium_plan_id:z.string().min(1).meta(pt),fallback_plan_id:z.string().min(1).meta(pt),segment_id:z.string().nullable().optional().meta(pt),trial_limit_type:lh.default("time").meta(pt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(pt),usage_entitlement_handle:z.string().min(1).optional().meta(pt),usage_limit_value:z.number().int().min(1).optional().meta(pt),start_policy:Ix.default("signup").meta(pt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(pt),entitlements_during_trial:z.array(z.string()).default([]).meta(pt),is_active:z.boolean().default(true).meta(pt),metadata:Kt.meta(pt)}),oo=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...pt,readOnly:true})}).merge(mh).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":ji,...Sx,...On()}),v1=Sn("ReverseTrialRuleAnchor"),uh=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":ji}),dh=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":ji}),lo=J.merge(ce).merge(_e).extend({trial_limit_policy:uh.default("1_per_lifetime").meta(pt),eligibility_scope:dh.default("per_customer").meta(pt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":ji,...Px}),co=J.merge(ce).merge(_e).extend({trial_limit_policy:uh.default("1_per_lifetime").meta(pt),eligibility_scope:dh.default("per_customer").meta(pt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":ji,...Px}),lm=J.merge(ce).merge(_e).extend({customer_id:z.string().min(1).meta(pt),rule_id:z.string().min(1).meta(pt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(pt),plan_id:z.string().min(1).meta(pt),status:Tx.default("active").meta(pt),started_at:z.string().datetime().meta({...pt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(pt),trial_limit_type:lh.default("time").meta(pt),usage_entitlement_handle:z.string().min(1).optional().meta(pt),usage_limit_value:z.number().int().min(1).optional().meta(pt),converted_at:an.meta(pt),cancelled_at:an.meta(pt),metadata:Kt.meta(pt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":ji});({"/api/free-trial-rule-anchors":{get:f({operationId:"listFreeTrialRuleAnchors",requestParams:{query:Y},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:H(y1)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:f({operationId:"listFreeTrialRules",requestParams:{query:Y},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:H(so)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:f({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:so}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:f({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:so.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:so}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:f({operationId:"listReverseTrialRuleAnchors",requestParams:{query:Y},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:H(v1)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:f({operationId:"listReverseTrialRules",requestParams:{query:Y},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:H(oo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:f({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:oo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:f({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:oo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:oo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:f({operationId:"listFreeTrialSettings",requestParams:{query:Y},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:H(lo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:f({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:f({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:lo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:f({operationId:"listReverseTrialSettings",requestParams:{query:Y},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:H(co)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:f({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:co}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:f({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:co.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:co}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:f({operationId:"listTrialInstances",requestParams:{query:Y},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:H(lm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:f({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:lm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:f({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:lm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:f({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:lm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var{Unrestricted:O}=De,{Persisted:ks,Transient:hh}=Be,{Internal:li}=Le,Ju=bt(rt.Playbook,{inConfig:false,sdkInput:true}),Cx=bt(rt.CustomerOperations,{sdkInput:false}),Ex=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":hh,"x-revturbine-schema-exposure":li}),kx=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":hh,"x-revturbine-schema-exposure":li}),x1=z.enum(["managed","observed"]).meta({id:"ExperimentAllocationMode","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":li}),Rx=z.discriminatedUnion("kind",[z.object({kind:z.literal("placement"),placement_handle:z.string().min(1),placement_payload_handle:z.string().min(1).optional()}),z.object({kind:z.literal("entitlement"),entitlement_handle:z.string().min(1),rule_handle:z.string().min(1).optional()}),z.object({kind:z.literal("plan"),plan_handle:z.string().min(1),plan_variation_handle:z.string().min(1).optional()}),z.object({kind:z.literal("pricing"),plan_variation_handle:z.string().min(1),promotion_handle:z.string().min(1).optional()}),z.object({kind:z.literal("custom"),provider_payload:z.record(z.string(),z.json())})]).meta({id:"ExperimentVariantTarget","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":li,...Ju}),Ax=z.object({variant_id:z.string().min(1),name:Wt,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),targets:z.array(Rx).min(1).optional(),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":li,...Ju}),ph=z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])),fh=z.object({methodology:z.enum(["frequentist","bayesian"]),analysis_unit:ma,sequential:ph.optional(),multiple_comparisons:ph.optional(),variance_reduction:z.object({method:z.literal("cuped"),covariate_metric:wr,lookback_days:z.number().int().positive()}).optional(),practical_significance:ph.optional()}).meta({id:"ExperimentAnalysisConfig","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":li,...Ju});var ua=t=>({id:t,"x-revturbine-schema-persistence":hh,"x-revturbine-schema-exposure":li}),Zu=z.object({variant_id:z.string().min(1).meta(O)}),S1=Zu.extend({statistic_type:z.literal("mean").meta(O),n:z.number().int().min(0).meta(O),sum_y:z.number().meta(O),sum_y2:z.number().min(0).meta(O)}).meta(ua("MeanVariantStatisticalSummary")),P1=Zu.extend({statistic_type:z.literal("binary").meta(O),n:z.number().int().min(0).meta(O),successes:z.number().int().min(0).meta(O)}).meta(ua("BinaryVariantStatisticalSummary")),T1=Zu.extend({statistic_type:z.literal("ratio").meta(O),n:z.number().int().min(0).meta(O),sum_numerator:z.number().meta(O),sum_denominator:z.number().meta(O),sum_numerator2:z.number().min(0).meta(O),sum_denominator2:z.number().min(0).meta(O),sum_cross:z.number().meta(O)}).meta(ua("RatioVariantStatisticalSummary")),I1=Zu.extend({statistic_type:z.literal("covariance").meta(O),n:z.number().int().min(0).meta(O),sum_x:z.number().meta(O),sum_y:z.number().meta(O),sum_x2:z.number().min(0).meta(O),sum_y2:z.number().min(0).meta(O),sum_xy:z.number().meta(O)}).meta(ua("CovarianceVariantStatisticalSummary")),wx=z.discriminatedUnion("statistic_type",[S1,P1,T1,I1]).meta(ua("VariantStatisticalSummary")),C1=z.object({start:z.string().datetime().meta(O),end:z.string().datetime().meta(O)}).meta(ua("ExperimentObservationWindow")),jx=z.object({schema_version:z.number().int().min(1).meta(O),experiment_handle:nt.meta(O),experiment_version:z.number().int().min(1).meta(O),metric:wr.meta(O),analysis_unit:ma.meta(O),variants:z.array(wx).min(1).meta(O),observation_window:C1.meta(O),data_watermark:z.string().datetime().meta(O),source_scope:oi.meta(O),provider:Cs.meta(O)}).meta(ua("ExperimentEvidence")),E1=z.object({status:z.enum(["not_evaluated","pass","fail"]).meta(O),p_value:z.number().min(0).max(1).optional().meta(O),chi_squared:z.number().min(0).optional().meta(O),variants:z.array(z.object({variant_id:z.string().min(1).meta(O),observed_count:z.number().int().min(0).meta(O),expected_count:z.number().min(0).meta(O)})).default([]).meta(O),reason:z.string().min(1).max(500).optional().meta(O)}).meta(ua("ExperimentSampleRatioMismatch")),Ox=z.object({status:z.enum(["healthy","warning","unhealthy","insufficient_data"]).meta(O),sample_ratio_mismatch:E1.optional().meta(O),issues:z.array(z.object({code:z.string().min(1).max(100).meta(O),message:z.string().min(1).max(500).meta(O)})).default([]).meta(O)}).meta(ua("ExperimentHealth")),k1=z.object({lower:z.number().meta(O),upper:z.number().meta(O),level:z.number().min(0).max(1).meta(O)}).meta(ua("ExperimentConfidenceInterval")),R1=z.object({status:z.string().min(1).max(100).meta(O),look_count:z.number().int().min(1).optional().meta(O),spending_state:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).optional().meta(O)}).meta(ua("ExperimentSequentialResult")),qx=z.object({metric:wr.meta(O),control_variant_id:z.string().min(1).meta(O),variant_id:z.string().min(1).meta(O),estimator:z.string().min(1).max(100).meta(O),estimator_version:z.string().min(1).max(100).meta(O),estimate:z.number().meta(O),control_estimate:z.number().meta(O),absolute_effect:z.number().meta(O),relative_effect:z.number().optional().meta(O),standard_error:z.number().min(0).optional().meta(O),confidence_interval:k1.optional().meta(O),p_value:z.number().min(0).max(1).optional().meta(O),probability_positive:z.number().min(0).max(1).optional().meta(O),expected_loss:z.number().min(0).optional().meta(O),sequential:R1.optional().meta(O),sample_size:z.number().int().min(0).optional().meta(O)}).meta(ua("ExperimentMetricResult")),A1=z.object({metric:wr.meta(O),summary_schema_version:z.number().int().min(1).meta(O),data_watermark:z.string().datetime().meta(O),provider:Cs.meta(O)}).meta(ua("ExperimentEvidenceProvenance")),Dx=z.object({provider:Cs.meta(O),evidence:z.array(A1).min(1).meta(O)}).meta(ua("AnalysisProvenance")),Ux=z.object({schema_version:z.number().int().min(1).meta(O),engine:z.string().min(1).max(100).meta(O),engine_version:z.string().min(1).max(100).meta(O),methodology:z.string().min(1).max(100).meta(O),metrics:z.array(qx).meta(O),health:Ox.meta(O),provenance:Dx.meta(O)}).meta(ua("ExperimentAnalysisResult")),Mx=J.merge(_e).extend({created_at:z.string().datetime().meta({...O,readOnly:true}),experiment_handle:nt.meta(O),experiment_version:z.number().int().min(1).meta(O),metric_semantic_id:wr.meta(O),metric_catalog_version:z.string().min(1).max(64).meta(O),endpoint_version:z.string().min(1).max(100).meta(O),query_hash:z.string().min(1).max(128).meta(O),evidence_provider_handle:nt.meta(O),evidence_provider_type:z.string().min(1).max(100).meta(O),evidence_provider_version:z.string().min(1).max(100).meta(O),evidence_provider_contract_version:z.number().int().min(1).meta(O),summary_schema_version:z.number().int().min(1).meta(O),observation_window_start:z.string().datetime().meta(O),observation_window_end:z.string().datetime().meta(O),data_watermark:z.string().datetime().meta(O)}),Fx=Mx.extend({analysis_unit:ma.meta(O),evidence:jx.meta(O)}).meta({id:"ExperimentEvidenceSnapshot","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":li,...Cx}),Lx=Mx.extend({evidence_snapshot_id:z.string().min(1).meta(O),analysis_provider_handle:nt.meta(O),analysis_provider_type:z.string().min(1).max(100).meta(O),analysis_provider_version:z.string().min(1).max(100).meta(O),analysis_provider_contract_version:z.number().int().min(1).meta(O),engine:z.string().min(1).max(100).meta(O),engine_version:z.string().min(1).max(100).meta(O),estimator:z.string().min(1).max(100).meta(O),estimator_version:z.string().min(1).max(100).meta(O),analysis_config:fh.meta(O),result:Ux.meta(O)}).meta({id:"ExperimentAnalysisResultRecord","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":li,...Cx}),Oi=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...O,readOnly:true}),name:Wt.meta(O),handle:nt.meta(O),description:z.string().max(1e3).optional().meta(O),experiment_type:kx.meta(O),status:Ex.default("draft").meta(O),target_resource_id:z.string().optional().meta(O),target_segments:z.array(z.string()).optional().meta(O),target_segment_ids:z.array(z.string()).default([]).meta(O),variants:z.array(Ax).min(2).meta(O),primary_metric:wr.meta(O),guardrail_metrics:z.array(wr).optional().meta(O),assignment_unit:ma.optional().meta(O),assignment_provider_binding:im.extend({capability:z.literal("experiment_assignment"),allocation_mode:x1}).optional().meta(O),evidence_provider_binding:im.extend({capability:z.literal("experiment_evidence")}).optional().meta(O),analysis_provider_binding:im.extend({capability:z.literal("experiment_analysis")}).optional().meta(O),analysis_config:fh.optional().meta(O),metric_threshold:z.number().default(.05).meta(O),secondary_metrics:z.array(wr).default([]).meta(O),traffic_allocation:z.number().min(0).max(1).default(1).meta(O),started_at:an.meta(O),ended_at:an.meta(O),confidence_threshold:z.number().min(0).max(1).default(.95).meta(O),winning_variant_id:z.string().nullable().default(null).meta(O),metadata:Kt.meta(O)}).meta({id:"Experiment","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":li,...Ju,...On()}),w1=Sn("ExperimentAnchor"),Nx=cl,gh=J.merge(ce).merge(_e).extend({experiment_id:z.string().optional().meta(O),resource_type:z.string().min(1).meta(O),resource_id:z.string().min(1).meta(O),severity:Nx.default("info").meta(O),title:z.string().min(1).max(300).meta(O),description:z.string().max(2e3).meta(O),suggested_action:z.string().max(1e3).optional().meta(O),estimated_impact:z.number().optional().meta(O),detector_id:z.string().min(1).nullable().optional().meta(O),detector_version:z.number().int().min(1).nullable().optional().meta(O),opportunity_type:z.string().min(1).nullable().optional().meta(O),evidence:z.array(Hu).nullable().optional().meta(O),hypothesis:z.string().min(1).nullable().optional().meta(O),confidence:z.number().min(0).max(1).nullable().optional().meta(O),is_dismissed:z.boolean().default(false).meta(O),metadata:Kt.meta(O)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":li});({"/api/experiment-evidence-snapshots":{get:f({operationId:"listExperimentEvidenceSnapshots",requestParams:{query:Y},summary:"List immutable experiment evidence snapshots",tags:["experiments"],responses:{200:{description:"Experiment evidence snapshots",content:{"application/json":{schema:H(Fx)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-evidence-snapshots",persistence:{table:"experimentEvidenceSnapshots",mode:"list"}}})},"/api/experiment-analysis-results":{get:f({operationId:"listExperimentAnalysisResults",requestParams:{query:Y},summary:"List immutable experiment analysis results",tags:["experiments"],responses:{200:{description:"Experiment analysis results",content:{"application/json":{schema:H(Lx)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-analysis-results",persistence:{table:"experimentAnalysisResults",mode:"list"}}})},"/api/experiment-anchors":{get:f({operationId:"listExperimentAnchors",requestParams:{query:Y},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:H(w1)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:f({operationId:"listExperiments",requestParams:{query:Y},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:H(Oi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:f({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:f({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Oi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:f({operationId:"deleteExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:f({operationId:"startExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:f({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:f({operationId:"completeExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z.object({winning_variant_id:z.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:f({operationId:"listOptimizationSuggestions",requestParams:{query:Y},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:H(gh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:f({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:gh}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:jr,Financial:Vx}=De,{Persisted:O1,Transient:Bx}=Be,{Internal:_h}=Le,q1=bt(rt.Playbook,{sdkInput:true}),zx=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Bx,"x-revturbine-schema-exposure":_h}),$x=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Bx,"x-revturbine-schema-exposure":_h}),Xi=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...jr,readOnly:true}),name:Wt.meta(jr),handle:nt.meta(jr),description:z.string().max(1e3).optional().meta(jr),rt_status:zx.default("draft").meta(jr),discount_type:$x.meta(jr),discount_value:z.number().min(0).meta(Vx),currency:z.string().length(3).default("USD").meta(Vx),applicable_plan_ids:z.array(z.string()).default([]).meta(jr),applicable_addon_ids:z.array(z.string()).default([]).meta(jr),target_segment_ids:z.array(z.string()).default([]).meta(jr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(jr),current_redemptions:z.number().int().min(0).default(0).meta({...jr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(jr),starts_at:an.meta(jr),ends_at:an.meta(jr),stripe_coupon_id:z.string().nullable().default(null).meta(jr),stripe_promotion_code_id:z.string().nullable().default(null).meta(jr),auto_sync_stripe:z.boolean().default(false).meta(jr),metadata:Kt.meta(jr)}).meta({id:"Promotion","x-revturbine-schema-persistence":O1,"x-revturbine-schema-exposure":_h,...q1,...On()}),D1=Sn("PromotionAnchor");({"/api/promotion-anchors":{get:f({operationId:"listPromotionAnchors",requestParams:{query:Y},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:H(D1)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:f({operationId:"listPromotions",requestParams:{query:Y},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:H(Xi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:f({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Xi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:f({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Xi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:f({operationId:"deletePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:f({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:Xi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:f({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Xi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:g}=De,{Persisted:Rl,Transient:_t}=Be,{Internal:Ga,External:Ft}=Le,jt=bt(rt.Playbook,{sdkInput:true}),Tl=bt(rt.Playbook,{sdkInput:false}),Rs=bt(rt.Playbook,{inConfig:false,sdkInput:false}),Kx=bt(rt.Playbook,{inConfig:false,sdkInput:true}),Pl=bt(rt.Playbook,{inConfig:false,sdkInput:true,source:Lr.CodeConstant}),yh=bt(rt.Playbook,{inConfig:false,sdkInput:true,source:Lr.Runtime}),vh=bt(rt.Playbook,{inConfig:false,sdkInput:false,source:Lr.Runtime}),M1=bt(rt.Billing,{sdkInput:false}),F1=bt(rt.Metering,{sdkInput:false}),L1=bt(rt.Branding,{inConfig:true,sdkInput:true}),N1=bt(rt.Branding,{sdkInput:false}),Hx="1.0.0",Il=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),name:Wt.meta(g),handle:nt.meta(g),description:xa.meta(g),is_default:z.boolean().default(false).meta(g),entitlement_ids:z.array(z.string()).default([]).meta(g),metadata:Kt.meta(g)}).meta({id:"SeatType","x-revturbine-schema-persistence":Rl,"x-revturbine-schema-exposure":Ga,...Rs,...On()}),V1=Sn("SeatTypeAnchor"),Cl=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:nt.meta(g),label:z.string().min(1).meta(g),description:z.string().nullable().default(null).meta(g),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(g),data_source:z.string().nullable().default(null).meta(g),example_value:z.string().nullable().default(null).meta(g),value_map:z.record(z.string(),z.string()).default({}).meta(g),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(g),metadata:Kt.meta(g)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Rl,"x-revturbine-schema-exposure":Ga,...Rs,...On()}),B1=Sn("PersonalizationTokenAnchor"),Gx=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ga}),Qu=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({handle:nt.meta({...g,readOnly:true}),stripe_account_id:z.string().min(1).meta(g),live_mode:z.boolean().default(false).meta(g),onboarding_state:Gx.default("not_started").meta({...g,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...g,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...g,readOnly:true}),details_submitted:z.boolean().default(false).meta({...g,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...g,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...g,readOnly:true}),sync_products:z.boolean().default(true).meta(g),sync_prices:z.boolean().default(true).meta(g),sync_subscriptions:z.boolean().default(true).meta(g),sync_invoices:z.boolean().default(false).meta(g),default_currency:z.string().length(3).default("USD").meta(g),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(g),last_sync_at:z.string().optional().meta({...g,readOnly:true}),metadata:Kt.meta(g)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Rl,"x-revturbine-schema-exposure":Ga,...M1,...vr()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(g),workspace_name:z.string().optional().meta(g),logo_url:z.string().optional().meta(g),support_email:z.string().optional().meta(g)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...N1});var El=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({handle:nt.meta({...g,readOnly:true}),entitlement_id:z.string().min(1).meta(g),meter_key:z.string().min(1).max(100).meta(g),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(g),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(g),stripe_meter_id:z.string().nullable().default(null).meta(g),is_active:z.boolean().default(true).meta(g),metadata:Kt.meta(g)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Rl,"x-revturbine-schema-exposure":Ga,...F1,...vr()}),bh=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ga}),kl=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:nt.meta({...g,readOnly:true}),entitlement_id:z.string().min(1).meta(g),soft_limit_percent:z.number().min(0).max(100).default(80).meta(g),hard_limit_percent:z.number().min(0).max(100).default(100).meta(g),soft_limit_action:bh.default("warn").meta(g),hard_limit_action:bh.default("block").meta(g),grace_period_hours:z.number().int().min(0).default(0).meta(g),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(g),is_active:z.boolean().default(true).meta(g)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Rl,"x-revturbine-schema-exposure":Ga,...Kx,...vr()}),$1=Sn("UsageEnforcementSettingsAnchor"),Yx=z.object({kind:z.enum(["template","slot"]).meta(g),id:z.string().min(1).meta(g),label:z.string().min(1).optional().meta(g)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ga}),Wx=z.object({id:z.string().min(1).meta(g),group:z.array(Yx).min(1).meta(g),cap:z.object({count:z.number().int().min(1).meta(g),period:z.enum(["session","day","week","month"]).meta(g)}).meta(g)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ga}),Jx=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ga}),Sh=z.object({capRules:z.array(Wx).default([]).meta(g),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(g),remindLaterMinutes:z.number().int().min(0).default(60).meta(g),testMode:Jx.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ga}),Xu=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:nt.meta({...g,readOnly:true}),global_frequency_cap:Sh.nullable().default(null).meta(g),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z.boolean().default(false).meta(g),suppress_for_trial:z.boolean().default(false).meta(g),allow_stacking:z.boolean().default(false).meta(g),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(g)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Rl,"x-revturbine-schema-exposure":Ga,...Kx,...vr()}),K1=Sn("PlacementSettingsAnchor"),Ph=z.object({field:z.string().min(1).meta(g),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(g),value:z.string().meta(g)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),Th=z.object({name:z.string().min(1).meta(g),handle:z.string().min(1).meta(g),predicates:z.array(Ph).optional().meta(g),dimension_id:z.string().optional().meta(g),experiment_handle:z.string().min(1).optional().meta(g),experiment_id:z.string().min(1).optional().meta(g)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),Zx=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),tier_position:z.number().int().min(0).default(0).meta(g),sort_order:z.number().int().min(0).default(0).meta(g),visibility:Ei.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),Qx=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),sort_order:z.number().int().min(0).default(0).meta(g),visibility:Ei.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...Tl}),Xx=z.object({handle:z.string().min(1).meta(g),plan_handle:z.string().min(1).meta(g),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z.string().nullable().default(null).meta(g),price_amount:z.number().min(0).meta(g),pricing_model:Xs.meta(g),visibility:Ei.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:ul.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...Rs}),eS=z.object({handle:z.string().min(1).meta(g),addon_handle:z.string().min(1).meta(g),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z.string().nullable().default(null).meta(g),price_amount:z.number().min(0).meta(g),pricing_model:Xs.meta(g),visibility:Ei.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:ul.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...Rs}),tS=z.object({handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),description:z.string().nullable().default(null).meta(g),is_default:z.boolean().default(false).meta(g),entitlement_handles:z.array(z.string()).default([]).meta(g)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),nS=z.object({handle:z.string().min(1).meta(g),entitlement_handle:z.string().nullable().default(null).meta(g),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(g),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(g),soft_limit_action:z.string().meta(g),hard_limit_action:z.string().meta(g),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(g),notification_channels:z.array(z.string()).default([]).meta(g),is_active:z.boolean().default(true).meta(g)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),rS=z.object({handle:z.string().min(1).meta(g),global_frequency_cap:Sh.nullable().default(null).meta(g),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z.boolean().default(false).meta(g),suppress_for_trial:z.boolean().default(false).meta(g),allow_stacking:z.boolean().default(false).meta(g),priority_collision_strategy:z.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),aS=z.object({handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:z.string().nullable().default(null).meta(g),visibility_toggle:z.boolean().default(true).meta(g),source_type:z.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),iS=z.object({handle:z.string().min(1).meta(g),entitlement_handle:z.string().min(1).meta(g),meter_handle:z.string().min(1).meta(g),limit:z.number().int().min(0).nullable().default(null).meta(g),reset_period:z.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),sS=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),type:ll.meta(g),unit:z.string().optional().meta(g),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),oS=z.object({id:z.string().min(1).meta(g),entitlement_id:z.string().min(1).meta(g),targets:z.array(Ru).min(1).meta(g),segment_ids:z.array(z.string()).default([]).meta(g),kind:ll.optional().meta({...g,readOnly:true}),unit:z.string().optional().meta({...g,readOnly:true}),tier_name:z.string().optional().meta({...g,readOnly:true}),tier_description:z.string().optional().meta({...g,readOnly:true}),...Ps.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(g),allocation:dl.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),lS=z.object({slot_id:z.string().min(1).meta(g),active:z.boolean().meta(g),triggers:z.array(z.string()).meta(g)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),cS=z.object({id:z.string().min(1).meta(g),label:z.string().min(1).meta(g),description:z.string().meta(g),surface_type:z.string().meta(g),placement_handle:z.string().min(1).meta(g),template:z.string().optional().meta(g)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),mS=z.object({name:z.string().min(1).meta(g),type:z.string().optional().meta(g),required:z.boolean().optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),uS=z.object({id:z.string().min(1).meta(g),surface_type:z.string().meta(g),fields:z.array(mS).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),Ih=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),dS=z.object({name:z.string().min(1).meta(g),action_type:Ih.meta(g),plan_handle:z.string().optional().meta(g),promotion_id:z.string().optional().meta(g),placement_handle:z.string().optional().meta(g),url:z.string().optional().meta(g),tour_id:z.string().optional().meta(g),target_billing_period:z.enum(["monthly","annual"]).optional().meta(g),description:z.string().optional().meta(g)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),pS=z.object({id:z.string().meta(g),name:z.string().meta(g),discount:z.string().meta(g),type:z.string().meta(g),status:z.string().meta(g)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),gS=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(g),label:z.string().min(1).meta(g),description:z.string().optional().meta(g),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(g),data_source:z.string().optional().meta(g),example_value:z.string().optional().meta(g),value_map:z.record(z.string(),z.string()).optional().meta(g),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(g)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),xh=z.object({header:z.string().optional().meta(g),body:z.string().optional().meta(g),cta_label:z.string().optional().meta(g),secondary_cta_label:z.string().optional().meta(g)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),hS=z.object({block_id:z.string().min(1).meta(g),tenant_id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),surface_template_id:z.string().optional().meta(g),default_content:xh.meta(g),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:xh})).optional().meta(g),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(g),tokens_used:z.array(z.string()).optional().meta(g),status:z.enum(["draft","active","archived"]).meta(g),created_at:z.string().datetime().meta({...g,readOnly:true}),updated_at:z.string().datetime().meta({...g,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),fS=z.object({label:z.string().meta(g),path:ml.meta(g),config:z.record(z.string(),z.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),Ch=z.object({template_id:z.string().min(1).meta(g),fields:z.record(z.string(),z.string()).meta(g),ctas:z.array(fS).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),Eh=z.object({plan_ids:z.array(z.string()).meta(g),billing_cadences:z.array(z.string()).optional().meta(g),segment_chips:z.array(z.string()).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),_S=z.object({count:z.number().int().min(1).meta(g),period:z.enum(["session","day","week","month","lifetime"]).meta(g)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),kh=z.object({max_per_period:_S.optional().meta(g),cooldown_days:z.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),yS=z.object({id:z.string().min(1).meta(g),target:Eh.meta(g),surfaces:z.array(Ch).meta(g),caps:kh.optional().meta(g),surface_slot_ids:z.array(z.string()).optional().meta(g),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(g),created_at:z.string().optional().meta({...g,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(g),recommendation_plan_override:z.string().optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),vS=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ss}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ss}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ss}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),bS=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft}),Rh=z.object({id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:bS.meta(g),trigger:vS.meta(g),payloads:z.array(yS).meta(g),order:z.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),xS=z.object({payload_id:z.string().min(1).meta(g),placement_id:z.string().min(1).meta(g),target:Eh.meta(g),caps:kh.optional().meta(g),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(g),created_at:z.string().meta({...g,readOnly:true}),updated_at:z.string().datetime().optional().meta({...g,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(g),surfaces:z.array(Ch).optional().meta(g),surface_slot_ids:z.array(z.string()).optional().meta(g),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(g)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),H1=z.object({kind:z.string().min(1).meta(g),schema_version:z.number().int().nonnegative().meta(g),config:z.unknown().meta(g)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),G1=J.merge(ch).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...Rs}),Y1=J.merge(mh).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...Rs}),SS=z.object({plans:z.array(Zx).meta({...g,...jt}),addons:z.array(Qx).optional().meta({...g,...Tl}),entitlements:z.array(sS).meta({...g,...jt}),entitlement_rules:z.array(oS).meta({...g,...jt}),segments:z.array(Th).meta({...g,...jt}),content_ui_paths:z.array(dS).meta({...g,...jt}),slot_configs:z.array(lS).optional().meta({...g,...jt,...Gc({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...g,...jt,...Gc({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...g,...L1,...Gc({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(cS).optional().meta({...g,...jt}),message_blocks:z.array(hS).optional().meta({...g,...jt}),placement_payloads:z.array(xS).optional().meta({...g,...jt}),placements:z.array(Rh).optional().meta({...g,...jt}),content_promotions:z.array(pS).optional().meta({...g,...jt}),personalization_tokens:z.array(gS).optional().meta({...g,...jt}),surface_templates:z.array(uS).optional().meta({...g,...jt}),free_trial_rules:z.array(G1).optional().meta({...g,...Tl}),reverse_trial_rules:z.array(Y1).optional().meta({...g,...Tl}),plan_variations:z.array(Xx).optional().meta({...g,...Tl}),addon_variations:z.array(eS).optional().meta({...g,...Tl}),extension_rules:z.array(H1).optional().meta({...g,...jt}),seat_types:z.array(tS).optional().meta({...g,...jt}),enforcement_defaults:z.array(nS).optional().meta({...g,...jt}),placement_settings:z.array(rS).optional().meta({...g,...jt}),segment_dimensions:z.array(aS).optional().meta({...g,...jt}),meter_bindings:z.array(iS).optional().meta({...g,...jt}),experiments:z.array(z.unknown()).max(0).optional().meta({...g,...Rs}),signal_catalog:z.object({}).strict().optional().meta({...g,...Rs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt}),PS=z.object({artifact_type:z.literal("playbook").meta({...g,...Pl,readOnly:true}),format_version:z.literal(Hx).meta({...g,...Pl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...g,...Pl}),playbook_version_id:z.string().nullable().default(null).meta({...g,...yh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...g,...vh,readOnly:true}),environment_id:z.string().min(1).optional().meta({...g,...vh,readOnly:true}),project_id:z.string().min(1).optional().meta({...g,...vh,readOnly:true}),exported_at:z.string().datetime().optional().meta({...g,...yh,readOnly:true}),schema_version:z.string().min(1).optional().meta({...g,...Pl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...g,...Pl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...g,...Pl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...yh}),ed=PS.extend(SS.shape).meta({"x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt});function W1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function TS(t){if(!W1(t))return t;let e={...t};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess(TS,ed).meta({id:"Playbook","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt});z.preprocess(TS,ed.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ft,...jt});({"/api/seat-type-anchors":{get:f({operationId:"listSeatTypeAnchors",requestParams:{query:Y},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:H(V1)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:f({operationId:"listSeatTypes",requestParams:{query:Y},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:H(Il)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:f({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Jn(Il)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Il}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:f({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Il.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Il}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:f({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:f({operationId:"listPersonalizationTokenAnchors",requestParams:{query:Y},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:H(B1)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:f({operationId:"listPersonalizationTokens",requestParams:{query:Y},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:H(Cl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:f({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Jn(Cl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:f({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:f({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:f({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Nn(Qu)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Qu}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:f({operationId:"listMeteringConfigs",requestParams:{query:Y},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:H(El)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:f({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Jn(El)}}},responses:{201:{description:"Created",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:f({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:El.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:f({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:f({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:Y},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:H($1)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:f({operationId:"listUsageEnforcementSettings",requestParams:{query:Y},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:H(kl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:f({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Jn(kl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:kl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:f({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:kl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:kl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:f({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:f({operationId:"listPlacementSettingsAnchors",requestParams:{query:Y},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:H(K1)}}},default:{description:"Error response",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:f({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Nn(Xu)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Xu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:es}=De,{Persisted:IS}=Be,{Internal:CS}=Le,ES=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":IS,"x-revturbine-schema-exposure":CS}),Ah=J.merge(ce).merge(_e).extend({action:ES.meta(es),resource_type:z.string().min(1).max(100).meta(es),resource_id:z.string().min(1).meta(es),resource_name:z.string().max(200).optional().meta(es),actor_id:z.string().min(1).meta(es),actor_email:z.string().email().optional().meta(es),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(es),summary:z.string().max(1e3).optional().meta(es),metadata:Kt.meta(es)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":IS,"x-revturbine-schema-exposure":CS});({"/api/changelog":{get:f({operationId:"listChangeLogEntries",requestParams:{query:Y},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:H(Ah)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:f({operationId:"getChangeLogEntry",requestParams:{path:z.object({entryId:z.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:Ah}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:td}=De,{Persisted:eq,Transient:tq}=Be,{Internal:kS}=Le,RS=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":tq,"x-revturbine-schema-exposure":kS}),ns=J.merge(ce).extend({name:Wt.meta(td),handle:nt.meta(td),status:RS.default("active").meta(td),metadata:Kt.meta(td)}).meta({id:"Tenant","x-revturbine-schema-persistence":eq,"x-revturbine-schema-exposure":kS});({"/api/tenants":{get:f({operationId:"listTenants",requestParams:{query:Y},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:H(ns)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:f({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:f({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:ns.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:f({operationId:"suspendTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:f({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Ya}=De,{Persisted:rq,Transient:AS}=Be,{Internal:wh}=Le,wS=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":AS,"x-revturbine-schema-exposure":wh}),mo=J.merge(ce).merge(_e).extend({name:Wt.meta(Ya),handle:nt.meta(Ya),description:xa.meta(Ya),is_production:z.boolean().default(false).meta({...Ya,readOnly:true}),status:wS.default("active").meta(Ya),cloned_from_environment_id:z.string().nullable().default(null).meta({...Ya,readOnly:true}),cloned_at:an.meta({...Ya,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Ya,readOnly:true}),requires_approval:z.boolean().default(false).meta(Ya),auto_deploy_on_approval:z.boolean().default(false).meta(Ya),created_by:z.string().optional().meta(Ya),metadata:Kt.meta(Ya)}).meta({id:"Environment","x-revturbine-schema-persistence":rq,"x-revturbine-schema-exposure":wh}),jS=z.object({source_environment_id:z.string().min(1),target_environment_id:z.string().min(1),playbook_version_ids:z.array(z.string()).optional(),strategy:z.enum(["all_current","selected_playbook_versions"]).default("all_current")}).meta({id:"EnvironmentPromotionRequest","x-revturbine-schema-persistence":AS,"x-revturbine-schema-exposure":wh});({"/api/environments":{get:f({operationId:"listEnvironments",requestParams:{query:Y},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:H(mo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:f({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200),handle:z.string().min(1).max(100),description:z.string().max(500).optional(),clone_from_environment_id:z.string().optional(),requires_approval:z.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:mo}}},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:f({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:f({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:mo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:f({operationId:"archiveEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:mo}}},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:f({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:jS}}},responses:{200:{description:"Promotion result",content:{"application/json":{schema:z.object({promoted_count:z.number().int(),conflict_count:z.number().int(),conflicts:z.array(z.object({handle:z.string(),resource_type:z.string(),source_sequence:z.number().int(),target_sequence:z.number().int()}))})}}},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:it,Pii:um}=De,{Transient:qi,Persisted:iq}=Be,{External:ci}=Le,OS=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci});z.object({superseded_output_id:z.string().min(1).meta(it),superseded_by:z.string().min(1).meta(it),reason:OS.meta(it)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":iq,"x-revturbine-schema-exposure":ci,...De.Operational});var qS=z.enum(Hc).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci}),jh=z.object({output_id:z.string().meta(it),category:z.string().meta(it),surface:z.object({template:z.string().optional().meta(it),type:Kc.meta(it),slot_id:z.string().optional().meta(it)}).meta(it),content:z.record(z.string(),z.unknown()).meta(it),promotion:z.record(z.string(),z.unknown()).optional().meta(it),cta_path:z.record(z.string(),z.unknown()).optional().meta(it),ui_path:z.record(z.string(),z.unknown()).optional().meta(it),rule_id:z.string().meta(it),decision_id:z.string().meta(it),config_version:z.string().meta(it),present_upsell:z.boolean().meta(it),experiment_id:z.string().optional().meta(it),variant_key:z.string().optional().meta(it),experiment_version_id:z.string().optional().meta(it)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci}),DS=z.object({status:qS.meta(it),allowed:z.boolean().meta(it),reason:z.string().optional().meta(it),current_tier:z.string().optional().meta(it),limit:z.number().optional().meta(it),used:z.number().optional().meta(it),remaining:z.number().optional().meta(it),placement:jh.optional().meta(it)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci});z.object({id:z.string().meta(it),name:z.string().optional().meta(it),discount:z.string().optional().meta(it),type:z.string().optional().meta(it),status:z.string().optional().meta(it)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci});var US=z.object({id:z.string().meta(um),anonymous_id:z.string().optional().meta(it),traits:z.record(z.string(),z.unknown()).optional().meta(um)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci}),MS=z.object({slot_id:z.string().optional().meta(it),entitlement_handle:z.string().optional().meta(it),plan_handle:z.string().optional().meta(it),placement_handle:z.string().optional().meta(it),visible:z.boolean().meta(it),output:jh.optional().meta(it),reason_codes:z.array(z.string()).optional().meta(it)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci}),FS=DS,LS=Zc.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci}),NS=z.object({segments:z.array(z.string()).optional().meta(it),traits:z.record(z.string(),z.unknown()).optional().meta(um),usage_balances:z.record(z.string(),z.number()).optional().meta(it)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci});z.object({version:z.literal("1.0.0").meta(it),request_id:z.string().meta(it),tenant_id:z.string().meta(it),evaluated_at:z.string().datetime().meta(it),ttl_seconds:z.number().int().min(0).max(86400).meta(it),user:US.meta(um),decisions:z.array(MS).meta(it),entitlements:z.record(z.string(),FS).optional().meta(it),theme:z.record(z.string(),z.unknown()).optional().meta(it),trial_status:LS.optional().meta(it),user_context:NS.optional().meta(um)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":qi,"x-revturbine-schema-exposure":ci});var {Unrestricted:on}=De,{Persisted:cq,Transient:nd}=Be,{Internal:dm}=Le,VS=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":nd,"x-revturbine-schema-exposure":dm}),Al=J.merge(ce).merge(_e).extend({environment_id:z.string().min(1).meta(on),name:Wt.meta(on),description:z.string().max(2e3).optional().meta(on),status:VS.default("draft").meta(on),labels:z.array(z.string()).default([]).meta(on),created_by:z.string().min(1).meta(on),submitted_by:z.string().nullable().default(null).meta({...on,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...on,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...on,readOnly:true}),submitted_at:an.meta({...on,readOnly:true}),reviewed_at:an.meta({...on,readOnly:true}),deployed_at:an.meta({...on,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...on,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...on,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...on,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(on),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(on),review_notes:z.string().max(2e3).optional().meta(on),rejection_reason:z.string().max(2e3).optional().meta(on),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...on,readOnly:true}),bundle:z.string().nullable().default(null).meta({...on,readOnly:true}),metadata:Kt.meta(on)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":cq,"x-revturbine-schema-exposure":dm}),Oh=z.object({handle:z.string().meta(on),resource_type:z.string().meta(on),resource_name:z.string().optional().meta(on),action:z.enum(["create","update","delete"]).meta(on),has_conflict:z.boolean().meta(on)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":nd,"x-revturbine-schema-exposure":dm}),BS=z.object({playbook_version_id:z.string().meta(on),entries:z.array(Oh).meta(on),total_entries:z.number().int().min(0).meta(on),total_conflicts:z.number().int().min(0).meta(on),deployable:z.boolean().meta(on)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":nd,"x-revturbine-schema-exposure":dm}),zS=z.object({playbook_version_id:z.string().meta(on),deployed_count:z.number().int().min(0).meta(on),superseded_count:z.number().int().min(0).meta(on),skipped_conflicts:z.number().int().min(0).meta(on),deployed_at:z.string().datetime().meta(on)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":nd,"x-revturbine-schema-exposure":dm});({"/api/playbook-versions/{playbookVersionId}/submit":{post:f({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:Al}}},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:f({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:Al}}},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:f({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:Al}}},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:f({operationId:"deployPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({force:z.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:zS}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:f({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:Al}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:f({operationId:"previewPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Preview diff of all entries vs current state (dry-run deploy)",tags:["playbook-versions"],responses:{200:{description:"Diff preview",content:{"application/json":{schema:BS}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:f({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:Y},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:H(Oh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:f({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:Al}}},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:f({operationId:"cherryPickEntries",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({handles:z.array(z.string()).min(1),target_playbook_version_id:z.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z.object({copied_count:z.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:ze}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:We,Pii:uq}=De,{Persisted:Wa}=Be,{Internal:Ja}=Le,dq=bt(rt.CustomerOperations,{sdkInput:false,source:Lr.Customer}),$S=365,As=J.merge(ce).merge(_e).extend({provider_handle:nt.meta(We),provider_type:nt.meta(We),endpoint:z.string().url().max(2048).nullable().default(null).meta(We),credential_reference:z.string().min(1).max(255).nullable().default(null).meta({...We,readOnly:true}),environment_id:z.string().min(1).max(200).default("production").meta(We),health_state:am.default("unavailable").meta({...We,readOnly:true}),last_health_check_at:an.meta({...We,readOnly:true}),supported_capability_versions:z.record(z.string().min(1).max(100),z.array(z.number().int().min(1)).min(1)).default({}).meta({...We,readOnly:true}),external_project_id:z.string().min(1).max(255).nullable().default(null).meta(We),external_workspace_id:z.string().min(1).max(255).nullable().default(null).meta(We),timeout_ms:z.number().int().min(1).max(12e4).default(1e4).meta(We),stale_after_ms:z.number().int().min(1).default(3e5).meta(We),unavailable_after_failures:z.number().int().min(1).max(100).default(3).meta(We)}).meta({id:"ProviderConnection","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja,...dq}),KS=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),pm=J.merge(ce).merge(_e).extend({name:Wt.meta(We),key_hash:z.string().min(1).meta({...uq,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...We,readOnly:true}),key_last4:z.string().length(4).meta({...We,readOnly:true}),status:KS.default("active").meta(We),last_used_at:an.meta({...We,readOnly:true}),expires_at:an.meta(We)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),HS=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),ws=J.merge(ce).merge(_e).extend({key:z.string().min(1).max(100).meta(We),value_type:HS.default("boolean").meta(We),value:z.string().max(4e3).default("false").meta(We),description:xa.meta(We),enabled:z.boolean().default(true).meta(We)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),rd=J.merge(ce).merge(_e).extend({workspace_name:z.string().min(1).max(200).meta(We),support_email:z.string().email().nullable().default(null).meta(We),timezone:z.string().max(50).default("UTC").meta(We),default_currency:z.string().length(3).default("USD").meta(We),logo_url:z.string().url().nullable().default(null).meta(We),activity_window_days:z.number().int().min(1).default(30).meta(We),activity_high_min:z.number().int().min(1).default(10).meta(We),activity_medium_min:z.number().int().min(1).default(3).meta(We),activity_low_min:z.number().int().min(1).default(1).meta(We),analytics_retention_days:z.number().int().min(1).default($S).meta(We)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),ad=J.merge(ce).merge(_e).extend({server_url:z.string().url().max(500).meta(We),api_token_hint:z.string().max(50).nullable().default(null).meta(We),allow_write_actions:z.boolean().default(false).meta(We),enabled_tools:z.array(z.string().max(100)).default([]).meta(We),enabled:z.boolean().default(false).meta(We)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),gm=J.merge(ce).merge(_e).extend({step_key:z.string().min(1).max(100).meta(We),label:z.string().min(1).max(200).meta(We),done:z.boolean().default(false).meta(We),completed_at:an.meta({...We,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),GS=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),YS=J.merge(_e).extend({environment_id:z.string().min(1).default("production").meta(We),actor_type:GS.meta(We),actor_id:z.string().nullable().default(null).meta(We),action:z.string().min(1).max(120).meta(We),object_type:z.string().max(120).nullable().default(null).meta(We),object_id:z.string().max(200).nullable().default(null).meta(We),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(We),occurred_at:z.string().datetime().meta({...We,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),WS=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja}),hm=J.merge(ce).merge(_e).merge(Mt).merge(Bt).extend({handle:nt.meta({...We,readOnly:true}),identifier:z.string().min(1).max(200).meta(We),identifier_type:WS.default("user_id").meta(We),note:z.string().max(500).nullable().default(null).meta(We),added_by:z.string().meta(We)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Ja,...vr()});({"/api/settings/api-keys":{get:f({operationId:"listApiKeys",requestParams:{query:Y},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:H(pm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:f({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Jn(pm)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:pm}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:f({operationId:"revokeApiKey",requestParams:{path:z.object({keyId:z.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:pm}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:f({operationId:"listFeatureFlags",requestParams:{query:Y},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:H(ws)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:f({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Jn(ws)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:f({operationId:"getFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:f({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Nn(ws).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:f({operationId:"deleteFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:f({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Nn(rd).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:rd}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:f({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Nn(ad).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:ad}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:f({operationId:"listOnboardingSteps",requestParams:{query:Y},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:H(gm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:f({operationId:"getOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:gm}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:f({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Nn(gm).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:gm}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:f({operationId:"listAuditEvents",requestParams:{query:Y},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:H(YS)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:f({operationId:"listPlacementTestUsers",requestParams:{query:Y},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:H(hm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:f({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Jn(hm)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:hm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:f({operationId:"deletePlacementTestUser",requestParams:{path:z.object({testUserId:z.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:hm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})},"/api/settings/provider-connections":{get:f({operationId:"listProviderConnections",requestParams:{query:Y},summary:"List provider connections for the tenant",tags:["settings"],responses:{200:{description:"Provider connections",content:{"application/json":{schema:H(As)}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"list"}}}),post:f({operationId:"createProviderConnection",summary:"Create a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Jn(As)}}},responses:{201:{description:"Provider connection created",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"create",writeSchema:"ProviderConnectionSchema#writable"}}})},"/api/settings/provider-connections/{connectionId}":{get:f({operationId:"getProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Get a provider connection",tags:["settings"],responses:{200:{description:"Provider connection",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"get"}}}),put:f({operationId:"updateProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Update a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Nn(As).partial()}}},responses:{200:{description:"Provider connection updated",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"update",writeSchema:"ProviderConnectionSchema#writable"}}}),delete:f({operationId:"deleteProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Delete a provider connection",tags:["settings"],responses:{200:{description:"Provider connection deleted",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"delete"}}})}});var {Unrestricted:ye,Pii:Zr}=De,{Persisted:da,Transient:qh}=Be,{Internal:Or}=Le,JS=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.merge(ce).extend({name:Wt.meta(ye),email:z.string().email().meta(Zr),email_verified:z.boolean().default(false).meta(ye),image:z.string().url().nullable().default(null).meta(Zr),role:JS.default("user").meta(ye),banned:z.boolean().default(false).meta({...ye,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...ye,readOnly:true}),ban_expires:an.meta({...ye,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ye,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.merge(ce).extend({expires_at:z.string().datetime().meta(ye),token:z.string().min(1).meta({...Zr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Zr),user_agent:z.string().nullable().default(null).meta(Zr),user_id:z.string().min(1).meta({...ye,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(ye),impersonated_by:z.string().nullable().default(null).meta({...ye,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.merge(ce).extend({account_id:z.string().min(1).meta(ye),provider_id:z.string().min(1).meta(ye),user_id:z.string().min(1).meta({...ye,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Zr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Zr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Zr,readOnly:true}),access_token_expires_at:an.meta({...ye,readOnly:true}),refresh_token_expires_at:an.meta({...ye,readOnly:true}),scope:z.string().nullable().default(null).meta(ye),password:z.string().nullable().default(null).meta({...Zr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.merge(ce).extend({identifier:z.string().min(1).meta(Zr),value:z.string().min(1).meta({...Zr,readOnly:true}),expires_at:z.string().datetime().meta(ye)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.extend({secret:z.string().min(1).meta({...Zr,readOnly:true}),backup_codes:z.string().min(1).meta({...Zr,readOnly:true}),user_id:z.string().min(1).meta({...ye,readOnly:true}),verified:z.boolean().default(false).meta({...ye,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.extend({name:Wt.meta(ye),slug:z.string().min(1).max(100).nullable().default(null).meta(ye),logo:z.string().url().nullable().default(null).meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true}),metadata:z.string().nullable().default(null).meta(ye)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});var Dh=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});var Uh=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":qh,"x-revturbine-schema-exposure":Or}),Mh=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":qh,"x-revturbine-schema-exposure":Or});z.object({resource:Uh,action:Mh}).meta({id:"Permission","x-revturbine-schema-persistence":qh,"x-revturbine-schema-exposure":Or});var xq=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],Sq=["plans","entitlements","placements","targeting","content","experiments"],Pq=["plans","entitlements","placements","targeting","content","experiments"],Tq=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],Iq=["read","create","update","delete","publish","approve","invite","manage_roles"];function id(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var Cq=id(xq,["read"]),Eq=[...Cq,...id(Sq,["create","update"])];[...Eq,...id(Pq,["publish","approve","delete"])];id(Tq,Iq);var kq=Uh.options.flatMap(t=>Mh.options.map(e=>`${t}:${e}`));z.enum(kq).meta({id:"McpTokenScope","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.extend({organization_id:z.string().min(1).meta({...ye,readOnly:true}),user_id:z.string().min(1).meta({...ye,readOnly:true}),role:Dh.default("viewer").meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});var ZS=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.extend({organization_id:z.string().min(1).meta({...ye,readOnly:true}),email:z.string().email().meta(Zr),role:Dh.nullable().default(null).meta(ye),status:ZS.default("pending").meta(ye),expires_at:z.string().datetime().meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true}),inviter_id:z.string().min(1).meta({...ye,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.extend({name:z.string().max(200).nullable().default(null).meta(ye),public_key:z.string().min(1).meta({...Zr,readOnly:true}),user_id:z.string().min(1).meta({...ye,readOnly:true}),credential_id:z.string().min(1).meta({...ye,readOnly:true}),counter:z.number().int().default(0).meta({...ye,readOnly:true}),device_type:z.string().min(1).meta(ye),backed_up:z.boolean().default(false).meta(ye),transports:z.string().nullable().default(null).meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true}),aaguid:z.string().nullable().default(null).meta(ye)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.merge(ce).extend({config_id:z.string().min(1).meta(ye),name:z.string().max(200).nullable().default(null).meta(ye),start:z.string().nullable().default(null).meta(ye),reference_id:z.string().min(1).meta(ye),prefix:z.string().nullable().default(null).meta(ye),key:z.string().min(1).meta({...Zr,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(ye),refill_amount:z.number().int().nullable().default(null).meta(ye),last_refill_at:an.meta({...ye,readOnly:true}),enabled:z.boolean().default(true).meta(ye),rate_limit_enabled:z.boolean().default(false).meta(ye),rate_limit_time_window:z.number().int().nullable().default(null).meta(ye),rate_limit_max:z.number().int().nullable().default(null).meta(ye),request_count:z.number().int().default(0).meta({...ye,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...ye,readOnly:true}),last_request:an.meta({...ye,readOnly:true}),expires_at:an.meta(ye),permissions:z.string().nullable().default(null).meta(ye),metadata:z.string().nullable().default(null).meta(ye)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});J.extend({issuer:z.string().min(1).meta(ye),oidc_config:z.string().nullable().default(null).meta(ye),saml_config:z.string().nullable().default(null).meta(ye),user_id:z.string().min(1).meta({...ye,readOnly:true}),provider_id:z.string().min(1).meta(ye),organization_id:z.string().nullable().default(null).meta(ye),domain:z.string().min(1).meta(ye)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Or});var Uq=15,Mq=11;async function eP(t){let e=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(e),n=>n.toString(16).padStart(2,"0")).join("")}function QS(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var wl=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function Fq(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new wl("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!QS(n))throw new wl("missing_schema_version",'Playbook payload: missing non-negative integer "bundle_schema_version" \u2014 refusing an unversioned payload');let r=e.bundle_min_readable_schema_version;if(r===void 0)return {schemaVersion:n,minReadableSchemaVersion:n};if(!QS(r)||r>n)throw new wl("malformed_envelope",`Playbook payload: "bundle_min_readable_schema_version" (${String(r)}) must be a non-negative integer \u2264 bundle_schema_version (${n})`);return {schemaVersion:n,minReadableSchemaVersion:r}}function tP(t,e){let n=Uq,r=Mq,a=Fq(t);if(a.minReadableSchemaVersion>n)throw new wl("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${a.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(a.schemaVersion>n)throw new wl("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${a.schemaVersion} (reader supports ${r}..${n})`);if(a.schemaVersion<r)throw new wl("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${a.schemaVersion} (reader supports ${r}..${n})`);return a}var nP=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),XS=z.string().datetime({offset:true}),Lq=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),Fh=z.object({url:z.string().min(1),sha256:nP,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),Nq=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:Lq}).strict(),Vq=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z.object({manifest_version:Vq,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:Fh,standby:Fh.optional(),previous:Fh.optional(),not_before:XS,expires_at:XS,rollback_to:nP.optional(),signature:Nq.optional()}).strict().refine(t=>Date.parse(t.not_before)<=Date.parse(t.expires_at),{message:"not_before must be <= expires_at",path:["expires_at"]});var Bq=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]),jl=class{constructor(){A(this,"types",new Map);A(this,"surfaceIndex",new Map);}register(e){let n=this.types.get(e.id);n&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousSurfaceType:n.surfaceType,nextSurfaceType:e.surfaceType});let r={...e,priority:e.priority??0,accepts:e.accepts??(i=>i.surface.type===e.surfaceType)};this.types.set(r.id,r);let a=this.surfaceIndex.get(r.surfaceType)??[];a.includes(r.id)||(a.push(r.id),this.surfaceIndex.set(r.surfaceType,a));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.surfaceIndex.get(n.surfaceType);if(r){let a=r.filter(i=>i!==e);a.length>0?this.surfaceIndex.set(n.surfaceType,a):this.surfaceIndex.delete(n.surfaceType);}return true}get(e){return this.types.get(e)}resolve(e){if(e.surface.template){let a=this.types.get(e.surface.template);if(a)return a}let r=(this.surfaceIndex.get(e.surface.type)??[]).map(a=>this.types.get(a)).filter(a=>a!=null).sort((a,i)=>i.priority-a.priority);for(let a of r)if(a.accepts?.(e))return a;return this.types.get("custom")}listAll(){return Array.from(this.types.values())}listBySurfaceType(e){return (this.surfaceIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}has(e){return this.types.has(e)}};function rP(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=i=>{if(typeof i=="number"&&Number.isFinite(i))return i;if(typeof i=="string"&&i.trim().length>0){let s=Number(i);if(Number.isFinite(s))return s}},a=i=>{let s="_usage_remaining";if(i==="usage_remaining"){let I=r(e.usage_current??e.current_usage),R=r(e.usage_limit);return I!==void 0&&R!==void 0?Math.max(0,R-I):void 0}if(!i.endsWith(s))return;let u=i.slice(0,-s.length);if(!u)return;let y=r(e[`${u}_usage_current`]),C=r(e[`${u}_usage_limit`]);if(!(y===void 0||C===void 0))return Math.max(0,C-y)};return t.replace(/\{\{(\w+)\}\}/g,(i,s)=>{let u=n[s]??s,y=e[u];if(y!=null)return String(y);let C=a(u);return C!=null?String(C):`{{${s}}}`})}function zq(t,e){let n={};for(let[r,a]of Object.entries(t))typeof a=="string"?n[r]=rP(a,e):n[r]=a;return n}function $q(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,a]of Object.entries(t))Bq.has(r)||(n[r]=a);return {type:e,plan_handle:typeof t.plan_handle=="string"?t.plan_handle:void 0,promotion_id:typeof t.promotion_id=="string"?t.promotion_id:void 0,placement_handle:typeof t.placement_handle=="string"?t.placement_handle:void 0,url:typeof t.url=="string"?t.url:void 0,tour_id:typeof t.tour_id=="string"?t.tour_id:void 0,...Object.keys(n).length>0?{params:n}:{}}}function Kq(t){if(t)return {id:typeof t.id=="string"?t.id:"",name:typeof t.name=="string"?t.name:void 0,discount:typeof t.discount=="string"?t.discount:void 0,type:typeof t.type=="string"?t.type:void 0,status:typeof t.status=="string"?t.status:void 0}}var fm=null,Lh=null;function iP(t){}function Hq(){return fm||(fm=new jl,Lh),fm}function Gq(){fm=null;}var Vh=class{constructor(){A(this,"resolvers",new Map);}register(e,n){this.resolvers.has(e)&&console.warn(`[RevTurbine] Replacing existing CTA resolver for action type "${e}".`),this.resolvers.set(e,n);}unregister(e){return this.resolvers.delete(e)}get(e){return this.resolvers.get(e)}has(e){return this.resolvers.has(e)}clear(){this.resolvers.clear();}},Nh=null;function sP(){return Nh||(Nh=new Vh),Nh}function oP(t,e=sP()){let n=new Map;for(let[r,a]of Object.entries(t)){if(e.has(r))continue;let i=(s,u)=>{let y=u.placement.cta_path??u.placement.ui_path??{};Promise.resolve().then(()=>a(y)).catch(C=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,C);});};e.register(r,i),n.set(r,i);}return ()=>{for(let[r,a]of n)e.get(r)===a&&e.unregister(r);}}function lP(t,e=sP()){if(e.has("snooze"))return ()=>{};let n=(r,a)=>{let i=a.placement,s=typeof i.remind_later_minutes=="number"?i.remind_later_minutes:void 0;t(a.placement.output_id,s!==void 0?s*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}var _m={recommended_plan_handle:"",recommended_plan_name:""};function cP(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:a}=t;if(a.length===0)return _m;if(e==="custom"){let u=n??"";if(u===""||u===r)return _m;let y=a.find(C=>C.unique_handle===u);return y?{recommended_plan_handle:y.unique_handle,recommended_plan_name:y.name}:_m}if(r==="")return _m;let i=Md(r,a);if(i===null)return _m;let s=a.find(u=>u.unique_handle===i);return {recommended_plan_handle:i,recommended_plan_name:s?.name??i}}var Bh="0123456789ABCDEFGHJKMNPQRSTVWXYZ",od=Bh.length,Yq=od-1,Wq=10,sd=16;function Jq(t){let e=t,n="";for(let r=0;r<Wq;r+=1){let a=e%od;n=Bh[a]+n,e=Math.floor(e/od);}return n}function mP(){let t=new Uint8Array(sd);crypto.getRandomValues(t);let e=new Array(sd);for(let n=0;n<sd;n+=1)e[n]=t[n]%od;return e}function Zq(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<Yq)return t[e]+=1,true;t[e]=0;}return false}function uP(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===sd?Zq(e)||(t+=1,e=mP()):(t=n,e=mP());let r=Jq(t);for(let a=0;a<e.length;a+=1)r+=Bh[e[a]];return r}}}var zh=uP();var Qq=new Set([408,429,500,502,503,504]);function Xq(t){return new Promise(e=>setTimeout(e,t))}async function $h(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,a=e.sleep??Xq,i;for(let s=0;s<=n;s+=1){try{let u=await t();if(u.ok)return {delivered:!0,status:u.status,attempts:s+1};if(!Qq.has(u.status))return {delivered:!1,status:u.status,attempts:s+1};i=new Error(`ingest_status_${u.status}`);}catch(u){i=u instanceof Error?u:new Error(String(u));}s<n&&await a(r*(s+1));}return {delivered:false,error:i,attempts:n+1}}function Kh(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function dP(){let t=typeof IntersectionObserver<"u",e=new Map;function n(a,i,s,u){s.fired||(s.fired=true,s.timer!==null&&(clearTimeout(s.timer),s.timer=null),a.io.unobserve(i),a.tracked.delete(i),s.onExposed(u));}function r(a,i){let s=`${a}|${i}`,u=e.get(s);if(u)return u;let y=new Map,I={io:new IntersectionObserver(R=>{let w=e.get(s);if(w)for(let E of R){let k=y.get(E.target);!k||k.fired||(E.isIntersecting?k.minVisibleMs<=0?n(w,E.target,k,"viewport"):k.timer===null&&(k.timer=setTimeout(()=>n(w,E.target,k,"viewport"),k.minVisibleMs)):k.timer!==null&&(clearTimeout(k.timer),k.timer=null));}},{threshold:a,rootMargin:i}),tracked:y};return e.set(s,I),I}return {supported:t,observe(a,i,s){if(!t){let R=false;return Promise.resolve().then(()=>{R||s("render_fallback");}),()=>{R=true;}}let u=i.threshold??.5,y=i.rootMargin??"0px",C=r(u,y),I={onExposed:s,minVisibleMs:i.minVisibleMs??0,timer:null,fired:false};return C.tracked.set(a,I),C.io.observe(a),()=>{I.fired||(I.timer!==null&&(clearTimeout(I.timer),I.timer=null),C.io.unobserve(a),C.tracked.delete(a));}},disconnect(){for(let a of e.values())a.io.disconnect();e.clear();}}}var Hh=dP();var yP=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],eD=new Set(yP),tD=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,nD=Ms();function rD(t){nD&&console.warn(t);}var vP=new Set(mu.options),bP=["usage","account_id","email","email_type","plan_handle","plan","trial","payment_failed","payment_at_risk","tiers","entitlements","instances","custom","personalization","derived_config_version","context_hash","derived_computed_at"],pP=new Set(bP);function i6(t,e){return md(e,"defineUiPathResolvers(resolvers)")}function md(t,e){if(!t)return {};let n={};for(let[r,a]of Object.entries(t)){let i=String(r||"").trim();if(!i)throw new Error(`[RevTurbine] ${e} contains an empty action_type key.`);if(typeof a!="function")throw new Error(`[RevTurbine] ${e} contains a non-function resolver for action_type '${i}'.`);n[i]=a;}return n}var ym={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function dd(t){return t?.playbook??t?.exportedConfig}function s6(t){return {...t,runtimeMode:"revturbine_server"}}function o6(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function aD(t){let e=md(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function l6(t){return aD(t)}function c6(t,e,n={}){return {slotId:t,surfaceType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function m6(t,e={}){return {entitlementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,planHandle:e.planHandle,placementHandle:e.placementHandle}}function u6(t,e={}){return {placementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function js(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function d6(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function p6(t,e,n){return {eventType:t,payload:e,options:n}}var gP="revturbine:sdk-route-change",rs="sdk_validation_warning",iD="revturbine:decision-cache",sD="revturbine:interaction-state",oD="revturbine:presentation-caps",lD="/api/track",cD="/api/sdk/meta",mD="/api/events/interactions",uD="/api/placements/interactions",dD="revturbine-web-sdk",hP="user_context_observed",pD=20,gD=5e3;function xP(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=SP(t);if(r){let a=r[e];if(typeof a=="string"&&a.trim().length>0)return a}return null}function SP(t){return be(t.payload)?t.payload:null}var hD=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function fD(t){let e={};for(let n of hD)e[n]=xP(t,n);return e}var _D=hg.map(t=>t.prefix),yD=new Set([...gg,...zy]);function vD(t){let e=Zl(t);return e===rs?"derived":yD.has(e)||_D.some(n=>e.startsWith(n))?"automatic":"explicit"}var bD=["decision_id"];function xD(t){let e={};for(let n of bD)e[n]=xP(t,n);return e}function SD(t){return Od(t,Xh(8))}async function fP(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Bm(new Uint8Array(e))}function Xh(t){let e=Math.ceil(t/2),n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let a=0;a<n.length;a+=1){let i=n[a].toString(16).padStart(2,"0");r+=i;}return r.slice(0,t)}function qr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Xh(16)}`}function ld(){return Uo()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function _P(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function PD(t,e){let n={};for(let[r,a]of Object.entries(e))(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(n[r]=a);return Wd(t,n)}function TD(t,e,n){if(t.length===0)return true;let r=new Map;for(let a of t){let i=n.get(a)??"__no_dim__",s=r.get(i)??[];s.push(a),r.set(i,s);}for(let a of r.values())if(!a.some(i=>e.has(i)))return false;return true}var Yh=class{constructor(e){A(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},ud=class ud{constructor(e,n,r,a){A(this,"endpoint",e);A(this,"tenantId",n);A(this,"token",r);A(this,"legacyTargetDefaults",a);A(this,"cached");A(this,"etag");A(this,"lastFetchedAt",0);}getExportedConfig(){return this.cached}async refresh(){let e=Date.now();if(this.cached&&e-this.lastFetchedAt<ud.REFRESH_TTL_MS)return this.cached;try{let n=await fetch(`${this.endpoint}/api/sdk/config`,{method:"GET",headers:{accept:"application/json",authorization:`Bearer ${this.token}`,"x-tenant-id":this.tenantId,...this.etag?{"if-none-match":this.etag}:{}}});if(this.lastFetchedAt=e,n.status===304||!n.ok)return this.cached;let r=await n.text(),a=n.headers.get("x-bundle-sha256");if(a&&await eP(new TextEncoder().encode(r))!==a)return this.cached;let i=JSON.parse(r);tP(i);let s=Fi(i,"GET /api/sdk/config",this.legacyTargetDefaults);return s&&(this.cached=s,this.etag=n.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};A(ud,"REFRESH_TTL_MS",6e4);var Wh=ud,Jh=class{constructor(e,n,r){A(this,"cached");A(this,"resolver");A(this,"legacyTargetDefaults");this.resolver=e,this.cached=r,this.legacyTargetDefaults=n;}getExportedConfig(){return this.cached}async refresh(){let e=Fi(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},Zh=class{constructor(e,n){A(this,"source");A(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return Fi(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return Fi(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},vm=class vm{constructor(e){A(this,"tenantId");A(this,"apiKey");A(this,"ingestPublicKey");A(this,"environmentId");A(this,"testTraffic");A(this,"analyticsEnabled");A(this,"anonymousTelemetryEnabled");A(this,"previewMode");A(this,"telemetryConsent");A(this,"telemetryCounters",Kh());A(this,"maxBatchSize");A(this,"flushIntervalMs");A(this,"flushTimer");A(this,"batchingTeardown",[]);A(this,"anonTelemetryNoticeShown",false);A(this,"piiRedactionWarned",false);A(this,"endpoint");A(this,"runtimeMode");A(this,"endpointOverrides");A(this,"localRuntime");A(this,"localStorageKey");A(this,"mode");A(this,"policy");A(this,"extensionEnabled");A(this,"placementBehaviorOverrides");A(this,"derivedPlacementBehaviorMemo",null);A(this,"providerFailureSlotBehavior");A(this,"uiPathResolvers");A(this,"unbridgeUiPathCtaResolvers",()=>{});A(this,"unregisterBuiltinSnoozeResolver",()=>{});A(this,"persistentStore");A(this,"sessionStore");A(this,"anonymousId");A(this,"sessionId");A(this,"decisionCache",new Map);A(this,"interactionState",new Map);A(this,"interactionQueue",[]);A(this,"defaultDecisionTtlMs",6e4);A(this,"defaultDismissCooldownMs",1440*60*1e3);A(this,"dismissCooldownDefaultMs",10080*60*1e3);A(this,"defaultRemindLaterMs",3600*1e3);A(this,"defaultUsageWarningPercent",80);A(this,"defaultTrialExpiringDays",3);A(this,"events",[]);A(this,"placements",new Map);A(this,"syncedSurfaceSlotIds",new Set);A(this,"userContext");A(this,"pageContext");A(this,"clientContextToken");A(this,"clientSessionProvider");A(this,"retriedClientContextAfterMint",false);A(this,"serverUserContextProvider");A(this,"lastServerContextHash");A(this,"usageBalances",{});A(this,"localDecisionsByPlacementId",new Map);A(this,"localPlacementsByLookupKey",new Map);A(this,"localEntitlementsByHandle",new Map);A(this,"localUserContextsByUserId",new Map);A(this,"localTrialStatus",{in_trial:false});A(this,"presentationCapsByKey",new Map);A(this,"usageLimitByEntitlement",new Map);A(this,"usageTokenPrefixByEntitlement",new Map);A(this,"segmentIdsByPredicateField",new Map);A(this,"configuredSegmentsById",new Map);A(this,"dirtySegmentIds",new Set);A(this,"segmentMembershipBySegmentId",new Map);A(this,"segmentMembershipUserId");A(this,"lastTrialTriggerStage","none");A(this,"configProvider");A(this,"branding");A(this,"apiBranding");A(this,"cachedPlacementResolver");A(this,"cachedPlacementResolverConfig");A(this,"sdkDisabledByProviderFailure",false);A(this,"sdkDisabledReason");A(this,"providerRegistry");A(this,"placementTypeRegistry");A(this,"impressionHistory");A(this,"emittedResolutionDiagnostics",new Set);A(this,"emittedSdkErrors",new Set);A(this,"reportedUnrecognizedContextKeys",new Set);A(this,"userContextListeners",new Set);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.testTraffic=e.test===true,this.analyticsEnabled=e.analytics!==false,this.anonymousTelemetryEnabled=e.anonymousTelemetry!==false,this.previewMode=e.previewMode===true,this.telemetryConsent=e.telemetry?.consent??"granted",this.maxBatchSize=Math.max(1,e.eventBatching?.maxBatchSize??pD),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??gD),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??ym.Server,this.endpointOverrides=e.endpointOverrides??{},this.localRuntime=e.localRuntime,this.clientSessionProvider=e.clientSession,this.branding=e.branding,this.apiBranding=e.apiBranding,this.configProvider=this.resolveConfigProvider(e),this.localStorageKey=e.localRuntime?.storageKey??`revturbine:${this.tenantId}:local-runtime`,this.mode=e.mode,this.policy={inferUser:e.contextPolicy?.inferUser??true,inferPage:e.contextPolicy?.inferPage??true,routerAutoTrack:e.contextPolicy?.routerAutoTrack??true},this.extensionEnabled=!!e.extension?.enabled,this.placementBehaviorOverrides={...e.placementBehavior},this.providerFailureSlotBehavior=e.providerFailureSlotBehavior??"invisible",this.uiPathResolvers=md(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.persistentStore=ds(e.persistentStorage),this.sessionStore=jp(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?_P():{},...e.user||{}},this.pageContext={...this.policy.inferPage?ld():{},...e.page||{},tags:Jl(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),be(e.user)&&"id"in e.user&&(typeof e.user.id!="string"||e.user.id.trim()==="")){console.error("[RevTurbine] init() received a `user` with a blank id; falling back to an anonymous id. Caps, usage attribution and analytics identity will key to that anonymous id, not to your user. Pass a stable internal user id, or omit `user` entirely if the visitor really is signed out.");try{this.capture(rs,{reason:"init received a blank user id"});}catch{}}if(this.sessionId=qr(),this.providerRegistry=new yc,this.placementTypeRegistry=new jl,this.impressionHistory=new Cp({store:new nu({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),iP(this.placementTypeRegistry),e.domainProviders)for(let n of e.domainProviders)this.providerRegistry.register(n);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=oP(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=lP((n,r)=>{this.snooze(n,r);}),this.hydrateDecisionCache(),this.hydrateInteractionState(),this.hydratePresentationCaps(),this.hydrateLocalRuntimeState(),this.impressionHistory.hydrate(),this.rebuildSegmentPredicateFieldIndex(),this.refreshExportedConfigSnapshot(),this.recalculateDerivedUsageTraits(),$r()&&this.policy.routerAutoTrack&&this.installRouteTracking(),$r()&&this.extensionEnabled&&this.installBridge(),this.capture("page_view",{mode:this.mode,runtime_mode:this.runtimeMode,source:"sdk_init",placement_behavior_flags:this.placementBehavior}),this.startEventBatchFlushing(),this.emitSdkInitTelemetry(),this.autoFetchClientContext();}isLocalOnlyMode(){return this.runtimeMode===ym.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new Zh(e.configProvider,n);let r=Fi(dd(e.localRuntime),"localRuntime.playbook",n),a=e.localRuntime?.resolvers?.resolveExportedConfig;if(a)return new Jh(a,n,r);if(r)return new Yh(r);let i=e.runtimeMode??ym.Server,s=e.ingestPublicKey??e.apiKey;if(i!==ym.LocalOnly&&e.endpoint&&s)return new Wh(e.endpoint,e.tenantId,s,n)}async refreshExportedConfigSnapshot(){try{await this.configProvider?.refresh?.(),this.rebuildSegmentPredicateFieldIndex();}catch{}}getConfiguredExportedConfig(){return this.configProvider?.getExportedConfig()}get placementBehavior(){let e=this.derivePlacementBehaviorFromPlaybook();return {enableClientCapsEnforcement:this.placementBehaviorOverrides.enableClientCapsEnforcement??e.enableClientCapsEnforcement,enableAutoGatedPlacement:this.placementBehaviorOverrides.enableAutoGatedPlacement??e.enableAutoGatedPlacement,enableTrialAutoTriggers:this.placementBehaviorOverrides.enableTrialAutoTriggers??e.enableTrialAutoTriggers}}derivePlacementBehaviorFromPlaybook(){let e=this.getConfiguredExportedConfig();if(this.derivedPlacementBehaviorMemo&&this.derivedPlacementBehaviorMemo.config===e)return this.derivedPlacementBehaviorMemo.flags;let n=e?.placements??[],i={enableClientCapsEnforcement:[...n.flatMap(s=>s.payloads??[]),...e?.placement_payloads??[]].some(s=>s.caps?.max_per_period!==void 0||s.caps?.cooldown_days!==void 0||s.remind_later_minutes!==void 0&&s.remind_later_minutes!==null),enableAutoGatedPlacement:n.some(s=>s.category==="gated"),enableTrialAutoTriggers:n.some(s=>s.category==="trials")};return this.derivedPlacementBehaviorMemo={config:e,flags:i},i}rebuildSegmentPredicateFieldIndex(){this.segmentIdsByPredicateField.clear(),this.configuredSegmentsById.clear();let n=this.getConfiguredExportedConfig()?.segments??[];for(let r of n)if(this.configuredSegmentsById.set(r.handle,r),!(!r.predicates||r.predicates.length===0))for(let a of r.predicates){let i=String(a.field||"").trim();if(!i)continue;let s=this.segmentIdsByPredicateField.get(i)??new Set;s.add(r.handle),this.segmentIdsByPredicateField.set(i,s);}this.markAllSegmentsDirty();}getOrBuildPlacementResolver(){if(this.localRuntime?.resolvers?.getPlacementDecision)return this.localRuntime.resolvers.getPlacementDecision;let e=this.getConfiguredExportedConfig();if(!e)return;if(this.cachedPlacementResolver&&this.cachedPlacementResolverConfig===e)return this.cachedPlacementResolver;let n=this.localRuntime?.placements??(Array.isArray(e.placements)?{placements:e.placements}:void 0);if(n)return this.cachedPlacementResolver=bo({placements:n,exportedConfig:e,impressionHistory:this.impressionHistory}),this.cachedPlacementResolverConfig=e,this.cachedPlacementResolver}synthesizeProviderContext(){let e=this.userContext.plan,n=this.resolveContextPlanRaw(),r=this.userContext.usage,a=this.localTrialStatus,i=this.userContext.payment_failed,s=this.userContext.payment_at_risk,u=this.userContext.tiers,y=u!==void 0&&Object.keys(u).length>0,C=this.userContext.experiments,I=C!==void 0&&Object.keys(C).length>0;if(!e&&!n&&!r&&!y&&!I)return;let R={};if(r&&typeof r=="object"){let E=gi(r);for(let[k,U]of Object.entries(r)){if(!U||typeof U!="object")continue;let ie=typeof U.amount=="number"?U.amount:E[k]??0,Z=typeof U.limit=="number"?U.limit:0,ve=Z>0?Math.max(0,Z-ie):0;R[k]={used:ie,limit:Z,remaining:ve,unit:typeof U.unit=="string"?U.unit:void 0,reset_date:typeof U.reset_date=="string"?U.reset_date:void 0};}}let w={...a.in_trial!==void 0?{trialActive:a.in_trial}:{},...a.trial_limit_type!==void 0?{trialLimitType:a.trial_limit_type}:{},...a.progress_percent!==void 0?{trialProgressPercent:a.progress_percent}:{},...a.days_remaining!==void 0?{trialDaysRemaining:a.days_remaining}:{},...a.day_number!==void 0&&a.days_remaining!==void 0?{trialDaysTotal:a.day_number+a.days_remaining}:{},...a.state!==void 0?{trialState:a.state}:{},...a.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:a.usage_entitlement_handle}:{},...a.usage_consumed!==void 0?{trialUsageConsumed:a.usage_consumed}:{},...a.usage_limit!==void 0?{trialUsageLimit:a.usage_limit}:{}};return {...e||n?{plan:{currentPlanHandle:n||(e?.handle??""),...e?.name!==void 0?{currentPlanName:e.name}:{},...w,...i!==void 0?{paymentFailed:i}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(R).length>0||y?{entitlements:{entries:{},usage:R,...y?{tiers:u}:{}}}:{},...I?{experiments:{assignments:C}}:{}}}markAllSegmentsDirty(){this.dirtySegmentIds.clear();for(let e of this.configuredSegmentsById.keys())this.dirtySegmentIds.add(e);this.segmentMembershipBySegmentId.clear();}markSegmentsDirtyForFields(e){for(let n of e){let r=this.segmentIdsByPredicateField.get(n);if(r)for(let a of r)this.dirtySegmentIds.add(a);}}toSegmentEvaluationTraits(e,n,r){return Wm(e,n,r)}buildTargetingState(e){return Jm(e,this.getConfiguredExportedConfig(),this.usageBalances)}markSegmentsDirtyFromContextChange(e,n){if(this.configuredSegmentsById.size===0)return;let r=e.id||this.anonymousId,a=n.id||this.anonymousId;if(r!==a){this.segmentMembershipUserId=a,this.markAllSegmentsDirty();return}let i=this.buildTargetingState(e),s=this.buildTargetingState(n),u=new Set,y=new Set([...Object.keys(i.segmentTraits),...Object.keys(s.segmentTraits)]);for(let C of y)i.segmentTraits[C]!==s.segmentTraits[C]&&u.add(C);this.markSegmentsDirtyForFields(u);}currentPathname(){if(this.pageContext.url)try{return new URL(this.pageContext.url).pathname}catch{}return $r()?window.location.pathname:"/"}disableForProviderFailure(e){this.sdkDisabledByProviderFailure||(this.sdkDisabledByProviderFailure=true,this.sdkDisabledReason=e,this.decisionCache.clear(),this.persistDecisionCache(),console.warn(`[RevTurbine] SDK disabled after provider fallback chain failed: ${e}`));}isDisabledByProviderFailure(){return this.sdkDisabledByProviderFailure}disabledDecisionForPlacement(e,n){let r=this.providerFailureSlotBehavior==="placeholder",a=r?`${n??e} temporarily unavailable`:`${n??e} unavailable`,i=r?"This placement is in safe fallback mode because all configured providers failed.":"This placement is currently hidden because provider fallback resolution failed.";return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",placement_handle:e}),{placementId:e,requestId:qr(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:js(a,i,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let n=`disabled_output_${qr()}`,r=e.slotId?`${e.slotId} temporarily unavailable`:"Placement temporarily unavailable";return {output_id:n,category:"fallback",surface:{type:e.surfaceType??"banner",slot_id:e.slotId},content:{title:r,header:r,body:"This placement is in safe fallback mode because all configured providers failed.",cta_label:"Retry later"},rule_id:"sdk_disabled_provider_failure",decision_id:n,config_version:"sdk-fallback",present_upsell:false}}hasEndpointOverride(e){let n=this.endpointOverrides[e];return typeof n=="string"&&n.trim().length>0}endpointFor(e,n){let r=this.endpointOverrides[e];return r&&r.trim().length>0?/^https?:\/\//i.test(r)?r:`${this.endpoint}${r.startsWith("/")?"":"/"}${r}`:`${this.endpoint}${n}`}localPlacementLookupKey(e){return ep(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId||n.surfaceType&&e.surfaceType&&e.surfaceType!==n.surfaceType)return false;let r=(a,i)=>!a||!i?true:a===i;return r(n.entitlementHandle,e.entitlementHandle)&&r(n.planHandle,e.planHandle)&&r(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return Ud(e,n.planHandle)}applyCategoryConflictSuppression(e){return $m(e)}resolveLocalPlacementFromCandidates(e,n){return np(e,true,{fixedOnly:n?.fixedOnly??false})}localPlacementForConfig(e){let n=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey(e));if(n&&!this.localOutputMatchesConfig(n,e))return null;let r=[];for(let[a,i]of this.localPlacementsByLookupKey.entries()){if(!i)continue;let s=Dd(a);this.localLookupMatchesConfig(s,e)&&this.localOutputMatchesConfig(i,e)&&r.push(i);}return n&&!r.some(a=>a.output_id===n.output_id)&&r.push(n),this.resolveLocalPlacementFromCandidates(r,e)}hydrateLocalRuntimeState(){if(!this.isLocalOnlyMode())return;let e=this.localRuntime?.initialData;if(e?.placementDecisionsByPlacementId)for(let[r,a]of Object.entries(e.placementDecisionsByPlacementId))this.localDecisionsByPlacementId.set(r,a);if(e?.placementsByLookupKey)for(let[r,a]of Object.entries(e.placementsByLookupKey))this.localPlacementsByLookupKey.set(r,a);if(e?.entitlementByHandle)for(let[r,a]of Object.entries(e.entitlementByHandle))this.localEntitlementsByHandle.set(r,a);if(e?.userContextByUserId)for(let[r,a]of Object.entries(e.userContextByUserId))this.localUserContextsByUserId.set(r,a);e?.trialStatus&&(this.localTrialStatus=e.trialStatus);let n=this.persistentStore.getItem(this.localStorageKey);if(!n){this.persistLocalRuntimeState();return}try{let r=JSON.parse(n);r.userContext&&(this.userContext=this.mergeUserContext(r.userContext)),r.pageContext&&(this.pageContext=this.mergePageContext(r.pageContext)),r.usageBalances&&(this.usageBalances={...this.usageBalances,...r.usageBalances});for(let a of r.placements||[])this.placements.set(a.id,a);for(let[a,i]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(a,i);for(let[a,i]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(a,i);for(let[a,i]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(a,i);for(let[a,i]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(a,i);r.trialStatus&&(this.localTrialStatus=r.trialStatus);}catch{this.persistentStore.removeItem(this.localStorageKey),this.persistLocalRuntimeState();}}persistLocalRuntimeState(){if(this.isLocalOnlyMode())try{let e={userContext:this.userContext,pageContext:this.pageContext,usageBalances:this.usageBalances,placements:Array.from(this.placements.values()),decisions:Object.fromEntries(this.localDecisionsByPlacementId.entries()),placementLookup:Object.fromEntries(this.localPlacementsByLookupKey.entries()),entitlements:Object.fromEntries(this.localEntitlementsByHandle.entries()),userContexts:Object.fromEntries(this.localUserContextsByUserId.entries()),trialStatus:this.localTrialStatus};this.persistentStore.setItem(this.localStorageKey,JSON.stringify(e));}catch{}}decisionCacheStorageKey(){return `${iD}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${sD}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${oD}:${this.tenantId}:${this.anonymousId}`}hydrateDecisionCache(){let e=this.sessionStore.getItem(this.decisionCacheStorageKey());if(e)try{let n=JSON.parse(e),r=Date.now();Object.entries(n).forEach(([a,i])=>{!i||typeof i!="object"||!Number.isFinite(i.expiresAt)||i.expiresAt<=r||this.decisionCache.set(a,i);});}catch{this.sessionStore.removeItem(this.decisionCacheStorageKey());}}persistDecisionCache(){let e=Date.now(),n=Object.fromEntries(Array.from(this.decisionCache.entries()).filter(([,r])=>r.expiresAt>e));try{this.sessionStore.setItem(this.decisionCacheStorageKey(),JSON.stringify(n));}catch{}}hydrateInteractionState(){let e=this.persistentStore.getItem(this.interactionStateStorageKey());if(e)try{let n=JSON.parse(e);Object.entries(n).forEach(([r,a])=>{!a||typeof a!="object"||this.interactionState.set(r,a);});}catch{this.persistentStore.removeItem(this.interactionStateStorageKey());}}persistInteractionState(){let e=Object.fromEntries(this.interactionState.entries());try{this.persistentStore.setItem(this.interactionStateStorageKey(),JSON.stringify(e));}catch{}}hydratePresentationCaps(){let e=this.persistentStore.getItem(this.presentationCapsStorageKey());if(e)try{let n=JSON.parse(e);for(let[r,a]of Object.entries(n)){if(!a||typeof a!="object")continue;let i=Array.isArray(a.seenAt)?a.seenAt.filter(u=>Number.isFinite(u)&&u>0):[],s=Number.isFinite(a.cooldownUntil)?a.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:i,cooldownUntil:s});}}catch{this.persistentStore.removeItem(this.presentationCapsStorageKey());}}persistPresentationCaps(){try{let e=Object.fromEntries(this.presentationCapsByKey.entries());this.persistentStore.setItem(this.presentationCapsStorageKey(),JSON.stringify(e));}catch{}}resolveContextPlanRaw(){let e=this.userContext.plan_handle;if(typeof e=="string"&&e.trim())return e.trim();let n=this.userContext.plan;return be(n)&&typeof n.handle=="string"&&n.handle.trim()?n.handle.trim():""}activePlanIdentifiers(e){let n=this.resolveContextPlanRaw(),r=String(n||"").toLowerCase(),a=new Set;if(!r)return a;a.add(r);for(let i of e.plans??[]){let s=typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"";s===r&&a.add(s);}return a}ruleTargetsActivePlan(e,n){let a=(Array.isArray(e.targets)?e.targets:[]).filter(i=>be(i)&&i.kind==="plan");return a.length===0?true:a.some(i=>typeof i.id=="string"&&n.has(i.id.toLowerCase()))}hydrateUsageLimitRulesFromExportedConfig(){let e=this.getConfiguredExportedConfig();if(!e)return;this.usageLimitByEntitlement.clear();let n=this.activePlanIdentifiers(e),r=new Map,a=e.entitlements??[];for(let s of a){let u=typeof s.unique_handle=="string"?s.unique_handle:"";u&&r.set(u,u);}let i=e.entitlement_rules??[];for(let s of i){if(!be(s))continue;let u=typeof s.entitlement_id=="string"?s.entitlement_id:"";if(!u)continue;let y=typeof s.kind=="string"?s.kind:"";if(!(y==="usage_limit"||y==="credits"||y==="seat"))continue;let I=r.get(u)??"",R=typeof s.unit=="string"?s.unit:"",w=Fd(R),E=w&&!Ld(w)?w:fo(I||u);E&&(this.usageTokenPrefixByEntitlement.set(u,E),I&&this.usageTokenPrefixByEntitlement.set(I,E));let k=Number(s.limit_value??s.allowance_value);if(!Number.isFinite(k)||k<=0||!this.ruleTargetsActivePlan(s,n))continue;let U=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(u,{limit:k,warningPercent:U}),I&&this.usageLimitByEntitlement.set(I,{limit:k,warningPercent:U});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=up({context:this.userContext,exportedConfig:e,usageBalances:this.usageBalances,usageTokenPrefixByEntitlement:this.usageTokenPrefixByEntitlement,usageThresholdLookup:a=>this.usageThresholdForEntitlement(a)}),r=this.deriveRecommendedPlanTokens(e);this.userContext={...this.userContext,personalization:{...n,...r}};}deriveRecommendedPlanTokens(e,n){let r={recommended_plan_handle:"",recommended_plan_name:""};if(!e?.plans?.length)return r;let a=this.resolveContextPlanRaw(),i=String(a||"").toLowerCase(),s=e.plans.map(u=>({source_id:u.unique_handle,unique_handle:u.unique_handle,name:u.name,tier_position:u.tier_position??0,sort_order:u.sort_order??0}));return cP({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:i,plans:s})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[a,i]of Object.entries(r))a!=="user_id"&&(typeof i=="string"||typeof i=="number")&&(n[a]=i);if(n.plan_name===void 0){let a=Fs(this.getConfiguredExportedConfig(),this.userContext.plan);a?n.plan_name=a:typeof this.userContext.plan=="object"&&this.userContext.plan?.name&&(n.plan_name=this.userContext.plan.name);}if(e?.recommendation_strategy){let a=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig(),{strategy:e.recommendation_strategy,planOverride:e.recommendation_plan_override??void 0});n.recommended_plan_handle=a.recommended_plan_handle,n.recommended_plan_name=a.recommended_plan_name;}return n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...gi(this.userContext.usage),...this.usageBalances},n={};for(let[r,a]of Object.entries(e)){if(!Number.isFinite(a))continue;let i=this.usageTokenPrefixByEntitlement.get(r)??fo(r)??r,s=this.usageThresholdForEntitlement(r);n[i]={current:a,...s?.limit!==void 0?{limit:s.limit}:{}};}return n}getPolicy(){let e=this.getConfiguredExportedConfig();return {contextPolicy:this.policy,placementBehavior:this.placementBehavior,runtimeMode:this.runtimeMode,...typeof e?.format_version=="string"?{exportedConfigVersion:e.format_version}:{}}}getBranding(){return kp({explicit:this.branding,legacyConfigTheme:this.getConfiguredExportedConfig()?.theme,apiBranding:this.apiBranding})}setApiBranding(e){this.apiBranding=e;}deriveLocalEntitlementFromConfiguredRules(e,n){let r=this.getConfiguredExportedConfig();if(!r)return null;let a=this.resolveContextPlanRaw(),i=String(a||"").toLowerCase(),s=this.getTargeting(),u=new Set(s.segmentIds??[]),{trialGrantedEntitlementHandles:y,effectivePlanHandle:C}=this.resolveReverseTrialGrants(r);return tc({handle:e,context:n,currentPlanHandle:i,segmentIds:u,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,...y!==void 0?{trialGrantedEntitlementHandles:y}:{},...C!==void 0?{effectivePlanHandle:C}:{}})}resolveReverseTrialGrants(e){let n=this.localTrialStatus;if(!n.in_trial||n.trial_type!=="reverse")return {};let r=n.plan_handle;if(!r)return {};let i=(e.reverse_trial_rules??[]).find(s=>s.fallback_plan_id===r&&s.is_active!==false);return !i||i.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(i.entitlements_during_trial),effectivePlanHandle:i.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),a=Fs(r,this.userContext.plan),i=a??n?.plan??(this.resolveContextPlanRaw()||void 0),s=[...r?.segments??[]],u=Array.from(new Set(s.flatMap(w=>(w.predicates??[]).map(E=>E.field)))).sort((w,E)=>w.localeCompare(E)),y={...n?.traits??{},...this.userContext.custom??{}};for(let[w,E]of Object.entries(this.userContext.entitlements??{}))y[w]===void 0&&(y[w]=E);a&&y.plan_name===void 0&&(y.plan_name=a),i&&y.plan===void 0&&(y.plan=i);let C={...n?.usage??{},...gi(this.userContext.usage),...this.usageBalances};for(let[w,E]of Object.entries(C))y[w]===void 0&&(y[w]=E);let I={};for(let[w,E]of Object.entries(y))(typeof E=="string"||typeof E=="number"||typeof E=="boolean")&&(I[w]=E);if(this.segmentMembershipUserId!==e&&(this.segmentMembershipUserId=e,this.markAllSegmentsDirty()),s.length>0&&this.segmentIdsByPredicateField.size===0&&this.rebuildSegmentPredicateFieldIndex(),s.length>0&&this.dirtySegmentIds.size>0){for(let w of this.dirtySegmentIds){let E=this.configuredSegmentsById.get(w)??s.find(U=>U.handle===w);if(!E){this.segmentMembershipBySegmentId.delete(w);continue}let k=rc([E],I).length>0;this.segmentMembershipBySegmentId.set(w,k);}this.dirtySegmentIds.clear();}let R=s.length>0?s.filter(w=>this.segmentMembershipBySegmentId.get(w.handle)===true).map(w=>w.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:R,traits:y,...i?{plan:i}:{},...Object.keys(C).length>0?{usage:C}:{},configuredSegments:s,configuredTraitFields:u}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),a=this.getEntitlements(),i=this.getPolicy(),s=this.getConfiguredExportedConfig(),u=new Set(r.segmentIds),y=r.configuredSegments.map(le=>{let tn=Array.isArray(le.predicates)?le.predicates.map(_n=>PD(_n,r.traits)):[],fn=tn.length>0?tn.every(_n=>_n.matched):u.has(le.handle);return {segmentId:le.handle,...le.name?{segmentName:le.name}:{},matched:fn,predicates:tn}}),C=new Map,I=new Map;if(Array.isArray(s?.entitlements))for(let le of s.entitlements){let tn=er(le.unique_handle),fn=tn;fn&&tn&&C.set(fn,tn);let _n=er(le.type);fn&&_n&&I.set(fn,_n);}let R=new Map;if(Array.isArray(s?.plans))for(let le of s.plans){let tn=er(le.unique_handle),fn=tn;fn&&tn&&R.set(fn,tn);}let E=(er(r.traits.plan_handle,r.plan)??"").toLowerCase(),k=new Map;if(Array.isArray(s?.segments))for(let le of s.segments){let tn=er(le.handle),fn=er(le.dimension_id);tn&&fn&&k.set(tn,fn);}let U=Array.isArray(s?.entitlement_rules)?s.entitlement_rules.map((le,tn)=>{let fn=er(le.id)??`entitlement_rule_${tn}`,_n=er(le.entitlement_id),Ct=_n?C.get(_n):void 0,Dn=Array.isArray(le.targets)?le.targets.filter(lt=>lt.kind==="plan").map(lt=>lt.id):[],or=Dn.map(lt=>R.get(lt)??lt),Nt=Array.isArray(le.segment_ids)?le.segment_ids.filter(lt=>typeof lt=="string"):[],yn=er(le.kind),$n=!E||Dn.some(lt=>lt.toLowerCase()===E),Dr=TD(Nt,u,k),vn=$n&&Dr,dn=Ct?a[Ct]:_n?a[_n]:void 0,Sr=vn?dn?.status??"unknown":"unknown",Cn;if(vn)switch(yn){case "feature":Cn=le.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let lt=er(le.tier_name);Cn=lt?`unlocks ${lt} tier`:"unlocks capability tier";break}case "usage_limit":{let lt=typeof le.limit_value=="number"?le.limit_value:void 0,gr=er(le.unit)??"",Ia=er(le.period_scope)??"",qt=Ia?` / ${Ia.replace("per_","")}`:"";Cn=lt!=null?`sets limit to ${lt.toLocaleString()}${gr?` ${gr}`:""}${qt}`:"sets usage limit";break}case "credits":{let lt=le.allowance_value,gr=typeof lt=="number"?lt:void 0,Ia=er(le.unit)??"credits",qt=er(le.reset_period)??"",Ur=qt?` / ${qt.replace("per_","")}`:"";Cn=gr!=null?`grants ${gr.toLocaleString()} ${Ia}${Ur}`:"grants credit allowance";break}case "seat":{let lt=le.included_count,gr=typeof lt=="number"?lt:void 0;Cn=gr!=null?`includes ${gr} seat${gr===1?"":"s"}`:"includes seats";break}default:if(_n){let lt=I.get(_n);lt==="feature"?Cn="grants access":lt&&(Cn=`${lt.replace(/_/g," ")} entitlement`);}break}return {ruleId:fn,..._n?{entitlementId:_n}:{},...Ct?{entitlementHandle:Ct}:{},...yn?{kind:yn}:{},planScopes:or,planIds:Dn,...Nt.length>0?{segmentIds:Nt}:{},matchesPlan:$n,matchesSegment:Dr,matched:vn,outcome:Sr,...Cn?{outcomeDescription:Cn}:{},...dn?.reason?{reason:dn.reason}:{}}}):[],ie=er(n.output?.output_id),Z=this.placements.get(e.placementId),ve=er(Z?.name)??"",qe=Array.isArray(Z?.metadata?.surface_template_ids)?Z.metadata.surface_template_ids:[],ne=[],W=new Set;if(Array.isArray(s?.placements))for(let le of s.placements){if(!le||typeof le!="object")continue;let tn=er(le.id)??"",fn=er(le.name)??"";if(W.has(tn))continue;let _n=er(n.output?.rule_id);if(_n&&tn===_n){W.add(tn),ne.push(le);continue}if(ve&&(tn===ve||fn===ve||tn===`pl_${ve}`||fn===`pl_${ve}`)){W.add(tn),ne.push(le);continue}qe.length>0&&(le.payloads??[]).some(or=>(or.surfaces??[]).some(yn=>{let $n=er(yn.template_id);return $n?qe.includes($n):false}))&&(W.add(tn),ne.push(le));}let ot=ne.flatMap(le=>(le.payloads??[]).map(fn=>{let _n=fn.target,Ct=_n?.plan_ids??[],Dn=Ct.map(Sr=>R.get(Sr)??Sr),or=_n?.segment_chips??[],yn=(fn.surfaces??[]).map(Sr=>er(Sr.template_id)).filter(Sr=>typeof Sr=="string"),$n=Ct.length===0||!E||Ct.some(Sr=>Sr.toLowerCase()===E),Dr=or.length===0||or.some(Sr=>u.has(Sr)),vn="active",dn=vn==="active"&&$n&&Dr;return {payloadId:String(fn.id??""),placementId:String(le.id??""),placementName:String(le.name??""),status:vn,planIds:Ct,planScopes:Dn,segmentChips:or,surfaceTemplateIds:yn,matchesPlan:$n,matchesSegment:Dr,eligible:dn,selected:!!ie&&ie===String(fn.id??"")}})),en=n.output?this.extractPlacementCapPolicies(n.output).flatMap(le=>le.rules.length===0&&le.cooldownMs===void 0?[]:le.rules.length===0?[{count:0,period:"session",cooldownMs:le.cooldownMs}]:le.rules.map(tn=>({count:tn.count,period:tn.period,...le.cooldownMs!==void 0?{cooldownMs:le.cooldownMs}:{}}))):[],pr={ruleId:n.output?.rule_id,decisionId:n.output?.decision_id,category:n.output?.category,suppressionReason:n.suppressionReason,reasonCodes:n.reasonCodes,capPolicies:en};return {generatedAt:new Date().toISOString(),input:e,decision:n,targeting:r,policy:i,entitlements:a,segments:y,entitlementRules:U,eligiblePayloads:ot,placementRules:pr}}usageThresholdForEntitlement(e){return Gd(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return dp(e,n,a=>this.usageThresholdForEntitlement(a)).map(a=>this.emitTrigger(a.type,{entitlement_handle:a.entitlement_handle,current_usage:a.current_usage,usage_limit:a.usage_limit,usage_percent:a.usage_percent,threshold:a.threshold}))}deriveTrialTriggerStage(e){return pp(e,this.lastTrialTriggerStage,this.defaultTrialExpiringDays)}async evaluateTrialLifecycleTriggers(e){let n=this.deriveTrialTriggerStage(e);if(!this.placementBehavior.enableTrialAutoTriggers){this.lastTrialTriggerStage=n;return}if(n!==this.lastTrialTriggerStage){if(this.lastTrialTriggerStage=n,n==="midpoint"){await this.emitTrigger("trial_midpoint",{days_remaining:e.days_remaining});return}if(n==="expiring"){await this.emitTrigger("trial_expiring",{days_remaining:e.days_remaining});return}n==="expired"&&await this.emitTrigger("trial_expired",{days_remaining:0});}}resolveAnonymousId(){let e=`revturbine:${this.tenantId}:anon`;try{let n=this.persistentStore.getItem(e);if(n)return n;let r=qr();return this.persistentStore.setItem(e,r),r}catch{return qr()}}installBridge(){let e={getSnapshot:()=>({tenantId:this.tenantId,user:this.userContext,page:this.pageContext,placements:Array.from(this.placements.values())}),setPageContext:n=>{this.setPageContext(n);},setUserContext:n=>{this.setUserContext(n);}};window.__RT_SDK_BRIDGE__=e;}installRouteTracking(){if(Uo())return;let e=window.history;if(e.__rtPatched)return;let n=()=>{window.dispatchEvent(new CustomEvent(gP,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...i)=>{r(...i),n();});let a=e.replaceState.bind(e);e.replaceState=((...i)=>{a(...i),n();}),window.addEventListener("popstate",n),window.addEventListener(gP,i=>{let s=i.detail;this.onRouteChange({path:s.path,title:s.title,tags:s.tags});}),e.__rtPatched=true;}mergeUserContext(e,n="setUserContext"){let r="plan"in e?{...e,plan:this.rejectLegacyPlanId(n,e.plan)}:e;return cp(this.userContext,r)}mergePageContext(e){return {...this.pageContext,...e,tags:Jl(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?ld():{},...this.pageContext},r=String(n.url||"").trim();if(!r)e.push({code:"invalid_page_context_url",reason:"Page context URL is missing."});else try{new URL(r);}catch{e.push({code:"invalid_page_context_url",reason:"Page context URL is not a valid absolute URL.",details:{value:r}});}return n.tags&&!Array.isArray(n.tags)&&e.push({code:"invalid_page_context_tags",reason:"Page tags must be an array of strings."}),e}collectPayloadIssues(e){let n=[];if(!be(e))return n.push({code:"invalid_event_payload",reason:"Event payload must be a plain object."}),n;let r=SP(e),a=typeof e.placement_id=="string"&&e.placement_id.trim()?e.placement_id:typeof r?.placement_id=="string"?r.placement_id:null;return typeof a=="string"&&a.trim()&&(this.placements.has(a)||n.push({code:"unknown_placement_id",reason:"Payload placement_id is not registered in SDK runtime.",details:{placement_id:a}})),n}buildValidationWarningEvent(e,n,r){return this.toEventEnvelope(rs,{source_event_type:e,warning_count:n.length,warning_codes:n.map(a=>a.code),warnings:n,page_context:{url:this.pageContext.url??null,title:this.pageContext.title??null},payload_snapshot:be(r)?r:null})}toEventEnvelope(e,n){let r={...this.policy.inferPage?ld():{},...this.pageContext},a=r.url||($r()?window.location.href:""),i=(()=>{try{return new URL(a).pathname}catch{return $r()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:a,path:i,page_title:r.title||($r()?document.title:""),event_time:new Date().toISOString(),anonymous_id:this.anonymousId,user_id:this.userContext.id||null,session_id:this.sessionId,tags:Jl(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===hP?{}:{...this.userContext.custom||{}}},properties:n}}warnPiiRedactedOnce(){this.piiRedactionWarned||(this.piiRedactionWarned=true,console.warn("[RevTurbine] Detected and redacted PII-shaped values (emails / card numbers) from event data before sending. Do not put PII in event properties or traits; this is best-effort redaction, not a guarantee."));}anonymousTelemetryActive(){return !this.ingestPublicKey&&this.anonymousTelemetryEnabled&&!this.previewMode&&$r()}diagnosticTelemetryActive(){return this.anonymousTelemetryEnabled&&this.analyticsEnabled&&!this.previewMode&&$r()}emitResolutionFailure(e){if(!this.diagnosticTelemetryActive())return;let n=`${e.reason}|${e.placement_handle??e.entitlement_handle??""}`;this.emittedResolutionDiagnostics.has(n)||this.emittedResolutionDiagnostics.size>=vm.RESOLUTION_DIAGNOSTIC_SESSION_CAP||(this.emittedResolutionDiagnostics.add(n),this.postAnonMeta("resolution_failure",e));}reportSdkError(e,n){if(this.diagnosticTelemetryActive()&&!this.emittedSdkErrors.has(e)&&!(this.emittedSdkErrors.size>=vm.RESOLUTION_DIAGNOSTIC_SESSION_CAP)){this.emittedSdkErrors.add(e);try{this.postAnonMeta("sdk_error",n?{reason:e,message:n}:{reason:e});}catch{}}}async emitSdkInitTelemetry(){this.anonymousTelemetryActive()&&await this.emitAnonMeta("sdk_init",{config_shape:this.computeConfigShape()});}computeConfigShape(){let e=this.getConfiguredExportedConfig();if(!e)return;let n=e.placements??[],r=n.reduce((a,i)=>a+(i.payloads?.length??0),0);return {plans:e.plans?.length??0,entitlements:e.entitlements?.length??0,entitlement_rules:e.entitlement_rules?.length??0,segments:e.segments?.length??0,placements:n.length,placement_payloads:r,content_ui_paths:e.content_ui_paths?.length??0,surface_templates:e.surface_templates?.length??0}}async emitAnonMeta(e,n={}){this.anonymousTelemetryActive()&&(this.showAnonTelemetryNoticeOnce(),await this.postAnonMeta(e,n));}async postAnonMeta(e,n={}){try{let r=this.getConfiguredExportedConfig(),a=r?.format_version!=null?String(r.format_version):void 0,i=a?`${this.tenantId}:${a}`:this.tenantId,s=(await fP(i)).slice(0,64),y={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:qr(),config_hash_id:s,sdk_version:vv,runtime_mode:this.runtimeMode,...a?{bundle_version:a}:{},...n.config_shape?{config_shape:n.config_shape}:{},...n.message?{message:n.message.slice(0,500)}:{},...n.reason?{reason:n.reason.slice(0,64)}:{},...n.placement_handle?{placement_handle:n.placement_handle.slice(0,64)}:{},...n.slot_handle?{slot_handle:n.slot_handle.slice(0,64)}:{},...n.surface?{surface:n.surface.slice(0,64)}:{},...n.plan_handle?{plan_handle:n.plan_handle.slice(0,64)}:{},...n.entitlement_handle?{entitlement_handle:n.entitlement_handle.slice(0,64)}:{}}]};await fetch(this.endpointFor("ingestSdkMeta",cD),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(y),keepalive:!0});}catch{}}showAnonTelemetryNoticeOnce(){this.anonTelemetryNoticeShown||(this.anonTelemetryNoticeShown=true,console.info("[RevTurbine] Sending anonymous SDK telemetry (config-shape counts and SDK version only \u2014 no user data or PII). Disable it by setting `anonymousTelemetry: false` in your initRevTurbine() options."));}async sendEvents(e){if(e.length===0)return;if(!this.telemetryConsented()){this.telemetryCounters.dropped+=e.length;return}let n=0,r=e.map(R=>{let w=K_(R);return n+=w.redactions,w.value}),a=this.providerRegistry.has("events")||!this.isLocalOnlyMode()&&this.analyticsEnabled;if(n>0&&a&&this.warnPiiRedactedOnce(),this.telemetryCounters.redacted+=n,this.dispatchToEventConsumers(r),this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}if(!this.analyticsEnabled)return;let i=qr(),s=this.getConfiguredExportedConfig()?.playbook_version_id,u=r.map(R=>{let w=R.user_id||R.anonymous_id,E=Ap(this.userContext.account_id||w),k=Rp({level:R.level,message:R.message,path:R.path,url:R.url,page_title:R.page_title,session_id:R.session_id,anonymous_id:R.anonymous_id,tags:R.tags,traits:R.identity.traits??null,payload:R.properties,source:dD});return n+=k.redactions+(E.redacted?1:0),{environment_id:this.environmentId,user_id:w,account_id:E.value,event_name:Zl(R.type).slice(0,120),event_ts:R.event_time,properties:JSON.stringify(k.value),...fD(R.properties),...xD(R.properties),origin:vD(R.type),playbook_version:typeof s=="string"&&s.length>0?s:null,event_id:zh.next(),request_id:qr(),tenant_id:R.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let y=this.endpointFor("ingestEvents",lD),C={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":i},body:JSON.stringify({events:u}),keepalive:true};(await $h(()=>fetch(y,C))).delivered?this.telemetryCounters.sent+=u.length:this.telemetryCounters.failed+=u.length;}dispatchToEventConsumers(e){this.providerRegistry.has("events")&&this.providerRegistry.get("events").then(n=>{let r=n?.consumers;if(!(!r||r.length===0))for(let a of r)try{Promise.resolve(a.consume(e)).catch(()=>{});}catch{}}).catch(()=>{});}telemetryConsented(){return this.telemetryConsent==="granted"}setTelemetryConsent(e){this.telemetryConsent=e;}getTelemetryConsent(){return this.telemetryConsent}getTelemetryCounters(){return {...this.telemetryCounters}}async capture(e,n,r){if(!this.telemetryConsented()){this.telemetryCounters.dropped+=1;return}let a=Zl(e),i=this.toEventEnvelope(a,n),s=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],u=[i];if(s.length>0&&u.push(this.buildValidationWarningEvent(a,s,n)),this.telemetryCounters.created+=u.length,r?.immediate){await this.sendEvents(u);return}this.events.push(...u),this.telemetryCounters.queued+=u.length,this.events.length>=this.maxBatchSize&&await this.flushEvents();}async trackControlPlaneEvent(e,n={},r){let{eventName:a,properties:i}=wp(e,n);await this.capture(a,i,r);}async flushEvents(){if(this.events.length===0)return;let e=[...this.events];this.events.length=0,await this.sendEvents(e);}startEventBatchFlushing(){if(!$r()||this.isLocalOnlyMode())return;this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flushEvents();},this.flushIntervalMs),this.flushTimer.unref?.());let e=()=>{this.flushEvents();},n=()=>{document.visibilityState==="hidden"&&this.flushEvents();};window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",n),this.batchingTeardown.push(()=>window.removeEventListener("pagehide",e),()=>document.removeEventListener("visibilitychange",n));}dispose(){this.unbridgeUiPathCtaResolvers(),this.unregisterBuiltinSnoozeResolver(),this.flushTimer!==void 0&&(clearInterval(this.flushTimer),this.flushTimer=void 0);for(let e of this.batchingTeardown.splice(0))try{e();}catch{}this.flushEvents();}async emitSemantic(e,n,r){let a=be(n)?n:{};await this.capture(e,{semantic:true,payload:a},r);}async evaluateUserSegmentsAndUsage(e,n=false){let r=await this.fetchUserContext(this.userContext.id||""),a={...this.userContext,...e,custom:{...this.userContext.custom||{},...e.custom||{}}},i=await this.fetchUserContext(a.id||""),s=new Set(r.segmentIds||[]),u=new Set(i.segmentIds||[]),y=Array.from(u).filter(I=>!s.has(I)),C=Array.from(s).filter(I=>!u.has(I));for(let I of y)await this.emitSemantic("segment_enrolled",{segment_id:I,user_id:a.id??null});for(let I of C)await this.emitSemantic("segment_unenrolled",{segment_id:I,user_id:a.id??null});if(n){let I=r.usage||{},R={...I,...this.usageBalances},w=this.evaluateUsageThresholdCrossings(I,R);await Promise.all(w);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(hP,{context_fields:n});}setUserContext(e){let n=this.userContext;this.userContext=this.mergeUserContext(e),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(e,false),this.emitObservedContextFields(e.custom),this.notifyUserContextChanged();}onUserContextChange(e){return this.userContextListeners.add(e),()=>{this.userContextListeners.delete(e);}}notifyUserContextChanged(){for(let e of [...this.userContextListeners])try{e();}catch{}}setPageContext(e){this.pageContext=this.mergePageContext(e),this.persistLocalRuntimeState();}refreshPageContext(){this.pageContext=this.mergePageContext(ld());}hydrate(e){if(e.version!=="1.0.0"){console.warn(`[RevTurbine] Unknown hydration payload version: ${e.version}. Skipping.`);return}let n=this.userContext;e.user&&(this.userContext=this.mergeUserContext({id:e.user.id,custom:e.user.traits,usage:{}}),this.recalculateDerivedUsageTraits());let r=(e.ttl_seconds??60)*1e3,a=Date.now()+r;for(let i of e.decisions??[]){if(!i.output)continue;let s=[this.tenantId,i.slot_id??i.entitlement_handle??i.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),u=be(i.output?.content)?i.output.content:{};this.decisionCache.set(s,{value:{placementId:i.slot_id??i.entitlement_handle??i.placement_handle??"unknown",requestId:e.request_id,visible:i.visible,decisionSource:"cache",reasonCodes:i.reason_codes??[],content:js(String(u.header??""),String(u.body??""),String(u.cta_label??"")),output:i.output},expiresAt:a});}if(this.persistDecisionCache(),e.entitlements)for(let[i,s]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(i,{status:s.status,allowed:s.allowed,reason:s.reason,current_tier:s.current_tier,placement:s.placement});e.trial_status&&(this.localTrialStatus={in_trial:e.trial_status.in_trial,trial_type:e.trial_status.trial_type,plan_handle:e.trial_status.plan_handle,day_number:e.trial_status.day_number,days_remaining:e.trial_status.days_remaining}),e.user_context?.usage_balances&&(this.usageBalances={...this.usageBalances,...e.user_context.usage_balances},this.recalculateDerivedUsageTraits()),this.markSegmentsDirtyFromContextChange(n,this.userContext);}async generatePlacementId(e){return Xd({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:fP,randomHex:Xh})}async registerPlacement(e){let n=String(e.placementScopeKey||e.name||"").trim();return this.registerSurfaceSlot({id:n||String(e.name||"surface_slot").trim(),name:e.name,metadata:be(e.metadata)?e.metadata:void 0})}async upsertSurfaceSlot(e){if(this.isLocalOnlyMode())return;let n=qr(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),a=SD(e.placementScopeKey||e.id||e.name),i={...be(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},s={name:e.name,slug:a,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:i},u={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},y=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:u,body:JSON.stringify(s)});if(y.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(y.status!==404)throw new Error(`surface_slot_upsert_failed:${y.status}`);let C=await fetch(r,{method:"POST",headers:u,body:JSON.stringify(s)});if(!C.ok)throw new Error(`surface_slot_create_failed:${C.status}`);this.syncedSurfaceSlotIds.add(e.id);}async registerSurfaceSlot(e){let n=ho(this.currentPathname()),r=String(e?.id||"").trim(),a=String(e?.name||r).trim(),i=[];r||i.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),a||i.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!be(e.metadata)&&i.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let s=await this.generatePlacementId({placementName:a||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),u={id:s,route:n,name:a||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...be(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},y=this.placements.get(s),C=y?this.stableStringify(y):null,I=this.stableStringify(u);return (!y||C!==I)&&(this.placements.set(s,u),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(s)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(s)&&await this.upsertSurfaceSlot(u),i.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",i,{surface_slot_id:r||null,placement_id:s,route:n,placement_name:a||null})]),s}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;if(!this.hasEndpointOverride("placementTypes")){Ms()&&console.warn("[RevTurbine] persistPlacementTypes() was called but no `endpointOverrides.placementTypes` is configured. RevTurbine hosts no default route for this verb, so the call was skipped. Configure an endpoint if you need placement types persisted.");return}let n=(Array.isArray(e)?e:[]).map(i=>CD(i)).filter(i=>i!==null);if(n.length===0)return;let r=qr(),a=await fetch(this.endpointFor("placementTypes","/api/sdk/placement-types"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":r},body:JSON.stringify({request_id:r,tenant_id:this.tenantId,types:n})});if(!a.ok)throw new Error(`persist_placement_types_failed:${a.status}`)}stableStringify(e){return Li(e)}decisionCacheKey(e,n){return tp({tenantId:this.tenantId,placementId:e.placementId,userId:e.userId,contextMode:e.contextMode??"auto",overrides:e.overrides??{},traits:e.traits??{},route:this.currentPathname(),...n?{runtimeContextFingerprint:n}:{}})}interactionStateKey(e){return D_({tenantId:this.tenantId,...e})}readDecisionCache(e){let n=this.decisionCache.get(e);return n?n.expiresAt<=Date.now()?(this.decisionCache.delete(e),this.persistDecisionCache(),null):{...n.value,decisionSource:"cache"}:null}writeDecisionCache(e,n,r){let a=Date.now()+Math.max(5e3,r??this.defaultDecisionTtlMs);this.decisionCache.set(e,{expiresAt:a,value:n}),this.persistDecisionCache();}suppressionForState(e){return U_(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return Km(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,a=this.placementCapKey(e),i=this.presentationCapsByKey.get(a),s=ap(e,a,i,Date.now());return s.updatedState&&r&&(this.presentationCapsByKey.set(a,s.updatedState),s.allowed&&this.persistPresentationCaps()),{allowed:s.allowed,reason:s.reason}}gateDecisionByCaps(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement||!e.visible||!e.output)return e;let r=this.applyPlacementCapsIfNeeded(e.output,{tick:n.tick??true});if(r.allowed)return e;let a=r.reason??"cap_exceeded";return {...e,visible:false,reasonCodes:[...e.reasonCodes??[],a],suppressionReason:a}}normalizeDecisionFromResponse(e,n,r,a){return rp(e,n,r,a)}async getPlacementDecision(e){let n=this.placements.get(e.placementId),r=qr();if(this.isDisabledByProviderFailure())return this.disabledDecisionForPlacement(e.placementId,n?.name);if(!n)return this.emitResolutionFailure({reason:"placement_not_registered",placement_handle:e.placementId}),{placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["placement_not_registered"],suppressionReason:"placement_not_registered",content:js("Placement not found","Register the placement before requesting a decision.","Register placement")};let a=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),i=this.suppressionForState(this.interactionState.get(a));if(i.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:i.reason?[i.reason]:[],suppressionReason:i.reason,content:js(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let s,u=await this.localRuntime?.getContext?.(),y=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(u||y)&&(s=this.stableStringify({legacyCtx:u??{},providerCtx:y??{}}));let C=this.decisionCacheKey(e,s),I=this.readDecisionCache(C);if(I)return this.gateDecisionByCaps(I,{tick:false});{let w=this.getOrBuildPlacementResolver();if(w){let k={...u,...y?{__providers:y}:{}},U=this.gateDecisionByCaps(await w(e,n,k));return this.localDecisionsByPlacementId.set(e.placementId,U),this.writeDecisionCache(C,U,e.ttlMs),this.persistLocalRuntimeState(),U}let E=this.localDecisionsByPlacementId.get(e.placementId);if(E){let k=this.gateDecisionByCaps({...E,decisionSource:"fallback"});return this.writeDecisionCache(C,k,e.ttlMs),this.persistLocalRuntimeState(),k}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let R={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:js(`${n.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),R}async preloadPlacementDecisions(e){let n=new Map;for(let r of e)n.set(this.decisionCacheKey(r),r);await Promise.allSettled(Array.from(n.values()).map(r=>this.getPlacementDecision(r)));}async bootstrapPlacementDecisions(e){if(this.isDisabledByProviderFailure()){await Promise.all(e.map(async r=>{let a=await this.getPlacementDecision(r),i=this.decisionCacheKey(r);this.writeDecisionCache(i,a,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let i=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),s=n.get(i);if(s){s.placementIds.push(r.placementId);continue}n.set(i,{userId:r.userId,contextMode:r.contextMode,overrides:r.overrides,traits:r.traits,ttlMs:r.ttlMs,placementIds:[r.placementId]});}for(let r of n.values()){let a=e.filter(i=>r.placementIds.includes(i.placementId)&&i.userId===r.userId);await Promise.allSettled(a.map(i=>this.getPlacementDecision(i)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),a=e.metadata??{},s={...this.interactionState.get(n)??{updatedAt:new Date(r).toISOString()},lastInteractionType:e.interactionType,updatedAt:e.interactionAt??new Date(r).toISOString()};if(e.interactionType==="dismiss"){let u=Number(a.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let u=Number(a.remind_after_seconds);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let u=Number(a.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.dismissCooldownDefaultMs);}if(e.interactionType==="cta_completed"&&(s.suppressedUntil=r+300*1e3),e.interactionType==="suppress"){let u=Number(a.suppress_duration_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.defaultDismissCooldownMs);}this.interactionState.set(n,s),this.persistInteractionState();}async flushInteractionQueue(){if(this.interactionQueue.length===0)return;let e=[...this.interactionQueue];if(this.interactionQueue.length=0,this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}let n=e.map(r=>({user_id:r.userId,placement_id:r.placementId,treatment_id:r.treatmentId,interaction_type:r.interactionType,interaction_at:r.interactionAt,surface_slot_id:r.surfaceSlotId,surface_template_id:r.surfaceTemplateId,payload_id:r.payloadId,...r.experimentId?{experiment_id:r.experimentId}:{},...r.variantKey?{variant_key:r.variantKey}:{},metadata:r.metadata??{},tenant_id:this.tenantId,...this.testTraffic?{test:true}:{}}));try{(await fetch(this.endpointFor("touchpointTransition",mD),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":qr()},body:JSON.stringify(n.length===1?n[0]:n)})).ok||(await fetch(this.endpointFor("legacyInteractions",uD),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":qr()},body:JSON.stringify(e.length===1?e[0]:e)})).ok||this.interactionQueue.unshift(...e);}catch{this.interactionQueue.unshift(...e);}}async trackTreatmentInteraction(e){let n={...e,interactionAt:e.interactionAt??new Date().toISOString()};this.updateInteractionState(n),this.interactionQueue.push(n),this.flushInteractionQueue();let r=n.placementId,a=n.treatmentId,i=n.metadata??{},s=Number(i.cooldown_ms),u=Number.isFinite(s)&&s>0?s:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,a,void 0,void 0,u);else if(n.interactionType==="cta_completed")this.impressionHistory.recordConversion(r,a);else if(n.interactionType==="cta_clicked")this.impressionHistory.recordClickThru(r,a,void 0,void 0,u);else if(n.interactionType==="suppress"){let I=Number(i.suppress_duration_ms);this.impressionHistory.recordSuppression(r,a,void 0,i,Number.isFinite(I)&&I>0?I:void 0);}let y=n.metadata??{},C=typeof y.decision_id=="string"?y.decision_id:null;await this.emitSemantic("placement_interaction",{user_id:n.userId,placement_id:n.placementId,treatment_id:n.treatmentId??null,interaction_type:n.interactionType,interaction_at:n.interactionAt??null,...C?{decision_id:C}:{},...n.experimentId?{experiment_id:n.experimentId}:{},...n.variantKey?{variant_key:n.variantKey}:{},metadata:y},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),a=qr();if(this.isDisabledByProviderFailure()){let u=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:a,decisionSource:"fallback",content:u.content}}if(this.isLocalOnlyMode()){let u=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:a,decisionSource:u?"remote":"fallback",content:js(typeof u?.content?.title=="string"?String(u.content.title):`${r?.name??e} treatment`,typeof u?.content?.body=="string"?String(u.content.body):"Local runtime placement content.",typeof u?.content?.cta=="string"?String(u.content.cta):"Continue")}}if(!r)return {placementId:e,requestId:a,decisionSource:"fallback",content:js("Placement not found","Register the placement before requesting content.","Register placement")};let i=this.userContext.id??this.anonymousId,s=await this.getPlacementDecision({placementId:e,userId:i});return {placementId:e,requestId:a,decisionSource:s.decisionSource==="fallback"?"fallback":"remote",content:s.content??js(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}rejectLegacyPlanId(e,n){if(!be(n)||!("id"in n))return n;let{id:r,...a}=n,i=typeof a.handle=="string"&&a.handle.trim()!=="",s=`${e}:plan.id`;if(!this.reportedUnrecognizedContextKeys.has(s)){this.reportedUnrecognizedContextKeys.add(s),console.error(`[RevTurbine] ${e}() received a removed \`plan.id\` key and dropped it. Plan identity is the unique_handle: pass { plan: { handle: "\u2026" } } (or the flat plan_handle). `+(i?"A handle was also supplied, so plan matching is unaffected.":"No handle was supplied, so this user has NO plan for entitlement-rule matching and plan-targeted rules will not match."));try{this.capture(rs,{reason:`${e} received removed plan.id key`,unrecognized_keys:"plan.id",plan_handle_present:i?"1":"0"});}catch{}}return a}reportUnrecognizedContextKeys(e,n,r,a){if(n.length===0)return;let i=`${e}:${[...n].sort().join(",")}`;if(this.reportedUnrecognizedContextKeys.has(i))return;this.reportedUnrecognizedContextKeys.add(i);let s=a?` ${a}`:"";console.warn(`[RevTurbine] ${e}() dropped unrecognized user-context key(s): ${n.join(", ")}. Recognized keys: ${r.join(", ")}. Pass free-form values under { custom: { \u2026 } }.${s}`);try{this.capture(rs,{reason:`${e} received unrecognized user-context key(s)`,unrecognized_keys:n.join(",")});}catch{}}normalizePlacementOutput(e){let n=Nm(e,qr);return n&&be(e)&&typeof e.decision_id!="string"&&this.capture(rs,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return $d(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=e.surfaceType;if(r&&!vP.has(r))return this.capture(rs,{reason:`getPlacement called with unknown surfaceType: ${String(r)}`,slot_id:n??null}),null;qr();if(this.isLocalOnlyMode()&&this.localRuntime?.resolvers?.getPlacement){let u=await this.localRuntime.resolvers.getPlacement(e);return u&&this.applyPlacementCapsIfNeeded(u).allowed?u:null}if(!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode())return this.refreshExportedConfigSnapshot(),null;let i=this.localPlacementForConfig(e);return i&&this.applyPlacementCapsIfNeeded(i).allowed?i:null}async checkEntitlement(e,n){if(this.isDisabledByProviderFailure())return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.sdkDisabledReason??"sdk_disabled_provider_failure"};if(this.isLocalOnlyMode()){let i=this.localRuntime?.resolvers?.checkEntitlement;if(i){let s=await i(e,n);return this.localEntitlementsByHandle.set(e,s),this.persistLocalRuntimeState(),s}}else this.getConfiguredExportedConfig()||await this.refreshExportedConfigSnapshot();let r=this.deriveLocalEntitlementFromConfiguredRules(e,n);if(r)return this.localEntitlementsByHandle.set(e,r),this.persistLocalRuntimeState(),r;let a=this.localEntitlementsByHandle.get(e);return a||(this.isLocalOnlyMode()||this.emitResolutionFailure({reason:"config_unavailable",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.isLocalOnlyMode()?"entitlement_not_in_playbook":"config_unavailable"})}updateUsage(e){let n=this.userContext,r=gi(e);this.reportUnusableUsageValues(e,r),this.reportUnmatchedUsageKeys(Object.keys(r)),this.usageBalances={...this.usageBalances,...r},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage({},true),this.notifyUserContextChanged();}reportUnusableUsageValues(e,n){let r=Object.keys(e).filter(i=>!(i in n));if(r.length===0)return;let a=`usage:unusable:${[...r].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(a)){this.reportedUnrecognizedContextKeys.add(a),console.warn(`[RevTurbine] updateUsage() dropped usage value(s) it could not read: ${r.join(", ")}. A usage balance is a number \u2014 \`update({ usage: { <entitlement_handle>: 42 } })\` \u2014 or an entry object carrying a numeric \`amount\`. The reported balance was NOT applied, so any limit on these entitlements is still evaluating the previous value.`);try{this.capture(rs,{reason:"updateUsage received unusable usage value(s)",unrecognized_keys:r.join(",")});}catch{}}}reportUnmatchedUsageKeys(e){if(e.length===0)return;let r=this.getConfiguredExportedConfig()?.entitlements;if(!Array.isArray(r)||r.length===0)return;let a=new Set(r.map(u=>be(u)&&typeof u.unique_handle=="string"?u.unique_handle:null).filter(u=>u!==null));if(a.size===0)return;let i=e.filter(u=>!a.has(u));if(i.length===0)return;let s=`usage:unmatched:${[...i].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(s)){this.reportedUnrecognizedContextKeys.add(s),console.warn(`[RevTurbine] updateUsage() received usage key(s) matching no entitlement in the Playbook: ${i.join(", ")}. The balance is stored but nothing reads it, so any limit on the entitlement you meant is still evaluating zero consumed. Usage keys are entitlement unique_handles \u2014 check for a typo. Known handles: ${[...a].sort().join(", ")}.`);try{this.capture(rs,{reason:"updateUsage received usage key(s) matching no entitlement handle",unrecognized_keys:i.join(",")});}catch{}}}getUserContext(){let e=this.userContext.id||this.anonymousId,n=new Date().toISOString();return {id:e,tenant_id:this.tenantId,user_id:e,created_at:n,updated_at:n,account_id:this.userContext.account_id,email:this.userContext.email,plan:this.userContext.plan,usage:this.userContext.usage??{},entitlements:this.userContext.entitlements??{},custom:Object.fromEntries(Object.entries(this.userContext.custom??{}).filter(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)),personalization:Object.fromEntries(Object.entries(this.userContext.personalization??{}).filter(([,r])=>typeof r=="string"||typeof r=="number")),derived_computed_at:null}}async fetchUserContext(e){let n=qr();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let i=await r(e);return this.localUserContextsByUserId.set(e,i),this.persistLocalRuntimeState(),i}let a=this.localUserContextsByUserId.get(e);return a||{userId:e,segmentIds:[],traits:{},plan:void 0,usage:this.usageBalances}}try{let r=await fetch(this.endpointFor("userContext","/api/sdk/user-context"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},body:JSON.stringify({request_id:n,tenant_id:this.tenantId,user_id:e,context:{user:this.userContext,page:this.pageContext}})});if(!r.ok)return {userId:e,segmentIds:[],traits:{}};let a=await r.json(),i={userId:e,segmentIds:Array.isArray(a.segment_ids)?a.segment_ids.filter(s=>typeof s=="string"):[],traits:be(a.traits)?a.traits:{},plan:typeof a.plan=="string"?a.plan:void 0,usage:be(a.usage)?Object.fromEntries(Object.entries(a.usage).filter(([,s])=>typeof s=="number")):void 0};return this.localUserContextsByUserId.set(e,i),this.persistLocalRuntimeState(),i}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new vc,this.providerRegistry.register(this.serverUserContextProvider)),this.serverUserContextProvider}async fetchClientContext(e){typeof e=="string"&&e.length>0&&(this.clientContextToken=e),this.clientContextToken||(this.clientContextToken=await this.mintClientSessionToken());let n=this.clientContextToken;if(n)try{let r=await fetch(this.endpointFor("clientContext","/api/sdk/client-context"),{method:"GET",headers:{authorization:`Bearer ${n}`}});if(!r.ok){if(r.status===401&&(this.clientContextToken=void 0,this.clientSessionProvider&&!this.retriedClientContextAfterMint)){let y=await this.mintClientSessionToken();if(y){this.retriedClientContextAfterMint=!0;try{await this.fetchClientContext(y);}finally{this.retriedClientContextAfterMint=!1;}}}return}let a=await r.json(),i=this.mapClientSafeContext(a);if(Object.keys(i).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:i.trial?{in_trial:i.trial.in_trial,state:i.trial.state,days_remaining:i.trial.days_remaining}:void 0,payment_at_risk:i.payment_at_risk});let s=JSON.parse(JSON.stringify({trial:i.trial??null,plan_handle:i.plan_handle??null,plan:i.plan??null})),u=await mp(s)+`:${i.payment_at_risk===!0?1:0}`;if(u===this.lastServerContextHash)return;this.lastServerContextHash=u,this.applyServerContextPatch(i);}catch{}}async mintClientSessionToken(){if(this.clientSessionProvider)try{let e=await this.clientSessionProvider();return typeof e=="string"&&e.length>0?e:void 0}catch{return}}autoFetchClientContext(){this.clientSessionProvider&&this.fetchClientContext().catch(()=>{});}mapClientSafeContext(e){let n={},a=["active","running_out","expired","converted","none"].find(s=>s===e.trial?.status);a&&(n.trial={in_trial:a==="active"||a==="running_out",state:a,...typeof e.trial?.days_remaining=="number"?{days_remaining:e.trial.days_remaining}:{}}),e.billing?.health==="attention_required"&&(n.payment_at_risk=true);let i=e.plan?.handle;return typeof i=="string"&&i.length>0&&(n.plan_handle=i,n.plan={handle:i,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:i}),n}applyServerContextPatch(e){let n=this.userContext;this.userContext=this.mergeUserContext(e,"update"),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(this.userContext,false);}async recordImpression(e,n,r,a){await this.impressionHistory.recordImpression(e,n,r,a);}async recordDismissal(e,n,r,a,i){await this.impressionHistory.recordDismissal(e,n,r,a,i);}async recordClickThru(e,n,r,a,i){await this.impressionHistory.recordClickThru(e,n,r,a,i);}async recordConversion(e,n,r,a){await this.impressionHistory.recordConversion(e,n,r,a);}async getTrialStatus(){let e=qr();if(this.isLocalOnlyMode()){let n=this.localRuntime?.resolvers?.getTrialStatus;if(n){let r=await n();return this.localTrialStatus=r,await this.evaluateTrialLifecycleTriggers(r),this.persistLocalRuntimeState(),r}return await this.evaluateTrialLifecycleTriggers(this.localTrialStatus),this.localTrialStatus}try{let n=await fetch(this.endpointFor("trialStatus","/api/sdk/trial-status"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify({request_id:e,tenant_id:this.tenantId,user_id:this.userContext.id})});if(!n.ok)return {in_trial:!1};let r=await n.json(),a=this.validateTrialStatusShape(r);return this.localTrialStatus=a,await this.evaluateTrialLifecycleTriggers(a),this.persistLocalRuntimeState(),a}catch{return {in_trial:false}}}async setTrialInstances(e,n){let r=this.getConfiguredExportedConfig(),a=n?.nowIso??new Date().toISOString(),{trial:i}=Om({...r?.free_trial_rules!==void 0?{freeTrialRules:r.free_trial_rules}:{},...r?.reverse_trial_rules!==void 0?{reverseTrialRules:r.reverse_trial_rules}:{},instances:e,nowIso:a,usageBalances:this.usageBalances,...n?.basePlanHandle!==void 0?{basePlanHandle:n.basePlanHandle}:{}}),s=i??{in_trial:false};return this.localTrialStatus=s,await this.evaluateTrialLifecycleTriggers(s),this.persistLocalRuntimeState(),s}getExportedConfig(){return this.getConfiguredExportedConfig()}async validateUiPathResolvers(e={}){await this.refreshExportedConfigSnapshot();let n=this.getConfiguredExportedConfig(),r=Array.isArray(e.uiPaths)?e.uiPaths:be(n)&&Array.isArray(n.content_ui_paths)?n.content_ui_paths:[],a=e.includeProviderHandlers??true,i=md(e.resolvers,"validateUiPathResolvers(options.resolvers)"),s={...this.uiPathResolvers,...i};if(a&&this.providerRegistry.has("cta"))try{let I=await this.providerRegistry.resolveAll();be(I.cta)&&be(I.cta.handlers)&&Object.assign(s,I.cta.handlers);}catch{}let u=[],y=0;for(let I of r){let R=be(I)?I:{},w=typeof R.action_type=="string"?R.action_type.trim():"";if(!w){u.push({actionType:"unknown",reason:"missing_action_type",...typeof R.id=="string"?{uiPathId:R.id}:{},...typeof R.name=="string"?{name:R.name}:{}});continue}if(typeof s[w]=="function"){y+=1;continue}u.push({actionType:w,reason:"missing_resolver",...typeof R.id=="string"?{uiPathId:R.id}:{},...typeof R.name=="string"?{name:R.name}:{}});}let C={valid:u.length===0,totalUiPaths:r.length,resolvedUiPaths:y,issues:u};if(!C.valid&&e.throwOnMissing){let I=C.issues.filter(w=>w.reason==="missing_resolver").map(w=>w.actionType),R=I.length>0?` Missing resolver(s) for action_type: ${Array.from(new Set(I)).join(", ")}.`:"";throw new Error(`[RevTurbine] UI path resolver validation failed with ${C.issues.length} issue(s).${R}`)}return C}warnOnUiPathResolverCoverageGaps(){let e=this.getConfiguredExportedConfig(),n=be(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(n.length===0)return;let r=[],a=0;for(let u of n){let C=(be(u)?u:{}).action_type,I=typeof C=="string"?C.trim():"";if(!I){a+=1;continue}typeof this.uiPathResolvers[I]!="function"&&r.push(I);}if(a===0&&r.length===0)return;let i=Array.from(new Set(r)),s=[];i.length>0&&s.push(`missing resolvers for action_type: ${i.join(", ")}`),a>0&&s.push(`content_ui_paths with missing action_type: ${a}`),console.warn(`[RevTurbine] uiPathResolvers coverage gap: ${s.join("; ")}. Affected CTAs will track the click and fall back to onCtaClick until a resolver is supplied.`);}async dismiss(e){await this.emitSemantic("placement_interaction",{interaction_type:"dismiss",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async snooze(e,n=3600){await this.emitSemantic("placement_interaction",{interaction_type:"remind_me_later",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString(),remind_after_seconds:n},{immediate:false});}async convert(e){await this.emitSemantic("placement_interaction",{interaction_type:"cta_completed",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async emitTrigger(e,n,r){await this.emitSemantic(e,{...n,user_id:this.userContext.id??null,plan_handle:this.userContext.personalization?.plan_name??null,triggered_at:new Date().toISOString(),source:"sdk"},r);}async trackEvent(e,n){await this.capture(e,n??{});}identify(e,n){if(typeof e!="string"||e.trim()===""){console.error("[RevTurbine] identify() requires a non-empty user id; call ignored. Pass your stable internal user id.");return}tD.test(e)&&rD(`[RevTurbine] identify() received an email-shaped user id ("${e}"). Use an opaque stable id and pass the email as { email } instead.`);let r=this.userContext,a=be(n)?n:{};be(n)&&this.reportUnrecognizedContextKeys("identify",Object.keys(n).filter(i=>!eD.has(i)),yP),a.usage&&(this.usageBalances={...this.usageBalances,...gi(a.usage)}),this.userContext=this.mergeUserContext({id:e,account_id:a.account_id,email:a.email,plan_handle:typeof a.plan_handle=="string"&&a.plan_handle.trim()!==""?a.plan_handle.trim():void 0,plan:a.plan,usage:a.usage,entitlements:a.entitlements,custom:a.custom,personalization:a.personalization},"identify"),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(r,this.userContext),this.decisionCache.clear(),this.persistDecisionCache(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(e),this.impressionHistory.hydrate(),this.clientSessionProvider&&(this.clientContextToken=void 0,this.autoFetchClientContext()),this.emitObservedContextFields(a.custom),this.notifyUserContextChanged();}resetIdentity(){this.clearAllUserState({reinfer:true});}resetUserContext(){this.clearAllUserState({reinfer:false});}clearAllUserState({reinfer:e}){let n=this.userContext;this.userContext={usage:{},...e&&this.policy.inferUser?_P():{},id:void 0,custom:{},entitlements:{},personalization:{}},this.usageBalances={},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.decisionCache.clear(),this.interactionState.clear(),this.persistDecisionCache(),this.persistInteractionState(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(this.anonymousId),this.impressionHistory.hydrate(),this.notifyUserContextChanged();}can(e,n){return this.checkEntitlement(e,n)}async gate(e,n,r){this.emitSemantic("gate_attempted",{entitlement_handle:e},{immediate:false});let a=await this.checkEntitlement(e,r);return a.allowed?(this.emitSemantic("gate_allowed",{entitlement_handle:e},{immediate:false}),{ran:true,result:await n(),entitlement:a}):(this.emitSemantic("gate_denied",{entitlement_handle:e,reason:a.reason??null},{immediate:false}),{ran:false,entitlement:a})}track(e,n){return this.trackEvent(e,n)}update(e){let{usage:n,...r}=e??{},a=Object.entries(r).filter(([i])=>pP.has(i));this.reportUnrecognizedContextKeys("update",Object.keys(r).filter(i=>!pP.has(i)),bP,"A bare entitlement handle is not a usage report \u2014 use update({ usage: { <unit>: n } }); to (re)establish identity use identify()."),a.length>0&&this.setUserContext(Object.fromEntries(a)),n&&this.updateUsage(n);}reset(){this.resetIdentity();}onRouteChange(e){this.setPageContext({url:`${$r()?window.location.origin:""}${e.path}`,title:e.title,tags:e.tags}),this.capture("page_view",{source:"router_auto_track",path:e.path});}};A(vm,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var Qh=vm;function ef(t){let e=ID(t),n=new Qh(e);if(!e.provider)return n;let r=(I,R)=>{try{return typeof I=="function"?I(e):I}catch(w){return console.warn(`[RevTurbine] Provider factory failed at chain index ${R}.`,w),null}},a=[r(e.provider,0),...(e.providerFallbacks??[]).map((I,R)=>r(I,R+1))].filter(I=>I!==null);if(a.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let i=async(I,R,w)=>{let E=[];for(let k=0;k<a.length;k+=1){let ie=a[k][I];if(ie){E.push(k);try{return await ie(...R)}catch(Z){let ve=a.slice(k+1).some(qe=>typeof qe[I]=="function");console.warn(k===0&&ve?`[RevTurbine] Primary provider ${I} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${I} failed at chain index ${k}.`,Z);}}}return E.length===0||n.disableForProviderFailure(`provider_${I}_chain_failed`),w()},s=n.getPlacement.bind(n),u=n.checkEntitlement.bind(n),y=n.persistPlacementTypes.bind(n),C=n.identify.bind(n);return n.getPlacement=async I=>i("getPlacement",[I],()=>s(I)),n.checkEntitlement=async(I,R)=>i("checkEntitlement",[I,R],()=>u(I,R)),n.persistPlacementTypes=async I=>i("persistPlacementTypes",[I],()=>y(I)),n.identify=(I,R)=>{let w=0;for(let E=0;E<a.length;E+=1){let k=a[E];if(k.identify){w+=1;try{k.identify(I,R);return}catch(U){let ie=a.slice(E+1).some(Z=>typeof Z.identify=="function");console.warn(E===0&&ie?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${E}.`,U);}}}if(w>0){n.disableForProviderFailure("provider_identify_chain_failed"),C(I,R);return}C(I,R);},n}var cd={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function Gh(t){return typeof t=="string"&&t.trim().length>0}function ID(t){return dd(t.localRuntime)!==void 0?{...t,tenantId:Gh(t.tenantId)?t.tenantId:cd.tenantId,apiKey:Gh(t.apiKey)?t.apiKey:cd.apiKey,endpoint:Gh(t.endpoint)?t.endpoint:cd.endpoint,mode:t.mode??cd.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function CD(t){if(!be(t))return null;let e=(y,C)=>String(y??"").trim().slice(0,C),n=e(t.id,256),r=e(t.label,256),a=e(t.description,1024),i=e(t.surfaceType,64);if(!n||!r||!a||!vP.has(i))return null;let s=Number(t.priority),u=Number.isFinite(s)?Math.max(0,Math.floor(s)):0;return {id:n,label:r,description:a,surfaceType:i,priority:u}}typeof window<"u"&&(window.RevTurbine={init:ef});var mi=Object.freeze({colors:{primary:"#1e40af",primaryText:"#ffffff",secondary:"#f3f4f6",secondaryText:"#1f2937",accent:"#7c3aed",accentText:"#ffffff",background:"#ffffff",surface:"#f8fafc",surfaceBorder:"#e2e8f0",text:"#111827",textSecondary:"#4b5563",textMuted:"#6b7280",overlay:"rgba(0, 0, 0, 0.5)",success:"#16a34a",warning:"#f59e0b",danger:"#dc2626",info:"#60a5fa",toastBackground:"#1f2937",toastText:"#ffffff",cliBackground:"#1e1e1e",cliText:"#d4d4d4",cliLink:"#569cd6",track:"#e5e7eb"},typography:{fontFamily:"system-ui, -apple-system, sans-serif",fontFamilyMono:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',fontSize:"14px",fontSizeSmall:"13px",fontSizeHeader:"20px",fontSizeLargeHeader:"28px"},shape:{borderRadiusSmall:"6px",borderRadius:"8px",borderRadiusLarge:"12px"},shadows:{medium:"0 10px 40px rgba(0, 0, 0, 0.25)",large:"0 20px 60px rgba(0, 0, 0, 0.3)"}});function Ol(t){return t?{id:t.id??mi.id,name:t.name??mi.name,version:t.version??mi.version,colors:{...mi.colors,...t.colors},typography:{...mi.typography,...t.typography},shape:{...mi.shape,...t.shape},shadows:{...mi.shadows,...t.shadows}}:{...mi}}var ED="revturbine:theme";function tf(t){return `${ED}:${t}`}function kD(t,e){try{let n=e.getItem(tf(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function RD(t,e,n){try{n.setItem(tf(t),JSON.stringify(e));}catch{}}function AD(t,e){let n=e??ds();try{n.removeItem(tf(t));}catch{}}async function nf(t,e){let{tenantId:n,endpoint:r,apiKey:a,base:i}=t,s=t.storage??ds(),u=kD(n,s),y=Ol({...i,...u});return t.onOverride?.(u),wD(r,n,a).then(C=>{C&&(u?.version&&C.version===u.version||(RD(n,C,s),t.onOverride?.(C),e?.(Ol({...i,...C}))));}).catch(()=>{}),y}async function wD(t,e,n){let r=t.replace(/\/$/,""),a=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,i=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":a}});if(!i.ok)return null;let s=await i.json();return typeof s!="object"||s===null?null:s}var pd=class{constructor(e,n){A(this,"sdk");A(this,"options");A(this,"listeners",new Set);A(this,"_placementId","");A(this,"_decision",null);A(this,"_isLoading",false);A(this,"_error","");A(this,"_impressionTracked",false);A(this,"_loadSeq",0);A(this,"_rendered",false);A(this,"_exposed",false);A(this,"_exposureBasis",null);A(this,"_lastSlotKey",null);this.sdk=e,this.options=n;}get state(){return {isLoading:this._isLoading,error:this._error,placementId:this._placementId,visible:!!this._decision?.visible,decision:this._decision,content:this._decision?.content??null,exposureBasis:this._exposureBasis}}get exposureMode(){return this.options.placementExposure??"legacy_resolution"}markRendered(){this._rendered||(this._rendered=true,this.emitPlacementLifecycle("placement_rendered",null),this.exposureMode==="render"&&this.fireImpression("render"),this.notify());}markVisible(e="viewport"){this._exposed||(this._exposed=true,this._exposureBasis=e,this.emitPlacementLifecycle("placement_exposed",e),this.exposureMode==="viewport"&&e==="viewport"&&this.fireImpression("viewport"),this.notify());}fireImpression(e){let n=this._decision;if(!n?.visible||this._impressionTracked||this.options.autoTrackImpression===false)return;let r=this.options.userId||this.sdk.getUserContext().user_id;if(!r)return;this._impressionTracked=true;let a=n.output;this.sdk.trackTreatmentInteraction({userId:r,placementId:this._placementId,interactionType:"impression",surfaceSlotId:n.output?.surface?.slot_id,surfaceTemplateId:n.output?.surface?.template,payloadId:n.output?.output_id,messageBlockHandle:a?.message_block_handle,messageBlockId:a?.message_block_id,experimentId:n.output?.experiment_id,variantKey:n.output?.variant_key,metadata:{decision_source:n.decisionSource,exposure_basis:e,decision_id:n.output?.decision_id??null}});}emitPlacementLifecycle(e,n){let r=this._decision;try{this.sdk.emitSemantic(e,{placement_id:this._placementId,surface_slot_id:r?.output?.surface?.slot_id??null,payload_id:r?.output?.output_id??null,decision_id:r?.output?.decision_id??null,decision_source:r?.decisionSource??null,...n?{exposure_basis:n}:{}},{immediate:!1});}catch{}}slotContext(){let e=this._decision,n=this.options.surfaceSlot;return {surface_slot_id:e?.output?.surface?.slot_id??n?.id??null,slot_name:n?.name??null,template_ids:n?.surfaceTemplateIds??null,template_id:e?.output?.surface?.template??null,surface_type:e?.output?.surface?.type??null,category:e?.output?.category??null,decision_source:e?.decisionSource??null,reason_codes:e?.reasonCodes??[],decision_id:e?.output?.decision_id??null}}emitSlotResolution(){let e=this._decision,n=e?.visible?"slot_filled":e?.suppressionReason?"slot_suppressed":"slot_empty",r=`${this._placementId}|${e?.output?.decision_id??e?.requestId??""}|${n}`;if(this._lastSlotKey===r)return;this._lastSlotKey=r;let a=this.slotContext();this.emitSlotEvent("slot_evaluated",a),this.emitSlotEvent(n,a);}emitSlotError(e){let n=`${this._placementId}|slot_error`;this._lastSlotKey!==n&&(this._lastSlotKey=n,this.emitSlotEvent("slot_error",{...this.slotContext(),error:e}));}emitSlotEvent(e,n){try{this.sdk.emitSemantic(e,n,{immediate:!1});}catch{}}emitPlacementOutcome(e){let n=this._decision;try{this.sdk.emitSemantic("placement_outcome",{placement_id:this._placementId,surface_slot_id:n?.output?.surface?.slot_id??null,payload_id:n?.output?.output_id??null,decision_id:n?.output?.decision_id??null,decision_source:n?.decisionSource??null,outcome:"cta_completed",cta_target:e},{immediate:!1});}catch{}}get visible(){return !!this._decision?.visible}get content(){return this._decision?.content??null}get decision(){return this._decision}get placementId(){return this._placementId}async load(){let e=this.options,n=e.userId||this.sdk.getUserContext().user_id;if(!n)return this._error="Cannot load placement: no userId available.",this.notify(),null;let r=++this._loadSeq;this._isLoading=true,this._error="",this.notify();try{if(!this._placementId)if(e.surfaceSlot)this._placementId=await this.sdk.registerSurfaceSlot(e.surfaceSlot);else if(e.placement)this._placementId=await this.sdk.registerPlacement(e.placement);else return this._error="Either placement or surfaceSlot must be provided.",this._isLoading=!1,this.notify(),null;if(r!==this._loadSeq)return this._decision;let a=await this.sdk.getPlacementDecision({placementId:this._placementId,userId:n,contextMode:e.contextMode,overrides:e.overrides,traits:e.traits,ttlMs:e.ttlMs});if(r!==this._loadSeq)return this._decision;this._decision=a,this.emitPlacementLifecycle("placement_resolved",null),this.emitSlotResolution();let i=this.exposureMode;return i==="legacy_resolution"?this.fireImpression("legacy_resolution"):i==="viewport"&&!Hh.supported&&this.fireImpression("render_fallback"),a}catch(a){return r===this._loadSeq&&(this._error=a instanceof Error?a.message:"Failed to load placement decision.",this.emitSlotError(this._error)),null}finally{r===this._loadSeq&&(this._isLoading=false,this.notify());}}async refresh(){return this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this.load()}async dismiss(e=1440*60*1e3){await this.trackInteraction("dismiss",{cooldown_ms:e});}async snooze(e=3600){await this.trackInteraction("remind_me_later",{remind_after_seconds:e});}async remindMeLater(e=3600){await this.snooze(e);}async ctaClick(e){await this.trackInteraction("cta_clicked",{cta_target:e||null});}async ctaComplete(e){await this.trackInteraction("cta_completed",{cta_target:e||null}),this.emitPlacementOutcome(e||null);}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}reset(){this._placementId="",this._decision=null,this._isLoading=false,this._error="",this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this._lastSlotKey=null,this._loadSeq++,this.notify();}async trackInteraction(e,n){let r=this.options.userId||this.sdk.getUserContext().user_id;if(!this._placementId||!r)return;let a=this._decision?.output?.decision_id??null,i=this._decision?.output;await this.sdk.trackTreatmentInteraction({userId:r,placementId:this._placementId,treatmentId:this._decision?.placementId,interactionType:e,surfaceSlotId:this._decision?.output?.surface?.slot_id,surfaceTemplateId:this._decision?.output?.surface?.template,payloadId:this._decision?.output?.output_id,messageBlockHandle:i?.message_block_handle,messageBlockId:i?.message_block_id,experimentId:this._decision?.output?.experiment_id,variantKey:this._decision?.output?.variant_key,metadata:a?{...n,decision_id:a}:n}),(e==="dismiss"||e==="remind_me_later"||e==="cta_completed")&&this._decision&&(this._decision={...this._decision,visible:false},this.notify());}notify(){for(let e of this.listeners)e();}};function bm(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var gd=class{constructor(e,n){A(this,"sdk");A(this,"options");A(this,"listeners",new Set);A(this,"_isLoading",false);A(this,"_error",null);A(this,"_result",null);A(this,"_gatedPlacement",null);A(this,"_lastEvaluatedKey",null);this.sdk=e,this.options=n;}get state(){return {isLoading:this._isLoading,error:this._error,result:this._result,allowed:this._result?.status==="allowed",limited:this._result?.status==="limited",denied:bm(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return bm(this._result)}get result(){return this._result}get gatedPlacement(){return this._gatedPlacement}async check(){let{handle:e,context:n,autoGate:r,gatePlacementRequest:a}=this.options;this._isLoading=true,this._error=null,this.notify();try{let i=await this.sdk.checkEntitlement(e,n);if(this._result=i,this.emitGateEvaluated(e,i),!r||!bm(i))this._gatedPlacement=null;else if(i.placement)this._gatedPlacement=i.placement;else {let s=await this.sdk.getPlacement({...a,entitlementHandle:e});this._gatedPlacement=s;}return i}catch(i){return this._error=i instanceof Error?i.message:String(i),this._gatedPlacement=null,null}finally{this._isLoading=false,this.notify();}}async recheck(){return this.check()}emitGateEvaluated(e,n){let r=`${e}|${n.status}`;if(this._lastEvaluatedKey!==r){this._lastEvaluatedKey=r;try{this.sdk.emitSemantic("gate_evaluated",{entitlement_handle:e,outcome:n.status,gated:bm(n),reason:n.reason??null,limit:n.limit??null,used:n.used??null,remaining:n.remaining??null},{immediate:!1});}catch{}}}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}watchUserContext(){let e=this.sdk.onUserContextChange;return typeof e!="function"?()=>{}:e.call(this.sdk,()=>{this._result===null&&!this._isLoading||this.check();})}notify(){for(let e of this.listeners)e();}},hd=class{constructor(e,n){A(this,"sdk");A(this,"theme");this.sdk=e,this.theme=n;}identify(e,n){this.sdk.identify(e,n);}resetIdentity(){this.sdk.resetIdentity();}resetUserContext(){this.sdk.resetUserContext();}setUserContext(e){this.sdk.setUserContext(e);}getUserContext(){return this.sdk.getUserContext()}updateUsage(e){this.sdk.updateUsage(e);}update(e){this.sdk.update(e);}async fetchUserContext(e){return this.sdk.fetchUserContext(e)}async getTrialStatus(){return this.sdk.getTrialStatus()}getUsage(){return this.sdk.getUsage()}placement(e){return new pd(this.sdk,e)}async getPlacementBySlotId(e,n){return this.placement({...n,surfaceSlot:{id:e,name:e}}).load()}async getPlacement(e){return this.sdk.getPlacement(e)}entitlement(e){return new gd(this.sdk,e)}async checkEntitlement(e,n){return this.sdk.checkEntitlement(e,n)}async can(e,n){return this.sdk.checkEntitlement(e,n)}async trackEvent(e,n){return this.sdk.trackEvent(e,n)}track(e,n){return this.sdk.track(e,n)}async flushEvents(){return this.sdk.flushEvents()}};async function jD(t){let{bootstrapPlacements:e,...n}=t,r=n,a=ef(r),i=r.user;i&&typeof i=="object"&&i.id&&a.identify(i.id,i);let s=mi,y=dd(r.localRuntime)?.theme;if(y&&typeof y=="object"?s=Ol(y):s=await nf({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let C=a.getUserContext().user_id,I=[];for(let R of e){let w=await a.registerPlacement(R.placement),E=R.userId||C;E&&I.push({placementId:w,userId:E,contextMode:R.contextMode,overrides:R.overrides,traits:R.traits,ttlMs:R.ttlMs});}I.length>0&&await a.bootstrapPlacementDecisions(I);}return new hd(a,s)}var OD=/\{[^{}]+\}/g,qD=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function DD(){return Math.random().toString(36).slice(2,11)}function CP(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:a,bodySerializer:i,pathSerializer:s,headers:u,requestInitExt:y=void 0,...C}={...t};y=qD()?y:void 0,e=IP(e);let I=[];async function R(w,E){let{baseUrl:k,fetch:U=r,Request:ie=n,headers:Z,params:ve={},parseAs:qe="json",querySerializer:ne,bodySerializer:W=i??MD,pathSerializer:ot,body:en,middleware:pr=[],...le}=E||{},tn=e;k&&(tn=IP(k)??e);let fn=typeof a=="function"?a:PP(a);ne&&(fn=typeof ne=="function"?ne:PP({...typeof a=="object"?a:{},...ne}));let _n=ot||s||UD,Ct=en===void 0?void 0:W(en,TP(u,Z,ve.header)),Dn=TP(Ct===void 0||Ct instanceof FormData?{}:{"Content-Type":"application/json"},u,Z,ve.header),or=[...I,...pr],Nt={redirect:"follow",...C,...le,body:Ct,headers:Dn},yn,$n,Dr=new ie(FD(w,{baseUrl:tn,params:ve,querySerializer:fn,pathSerializer:_n}),Nt),vn;for(let Cn in le)Cn in Dr||(Dr[Cn]=le[Cn]);if(or.length){yn=DD(),$n=Object.freeze({baseUrl:tn,fetch:U,parseAs:qe,querySerializer:fn,bodySerializer:W,pathSerializer:_n});for(let Cn of or)if(Cn&&typeof Cn=="object"&&typeof Cn.onRequest=="function"){let lt=await Cn.onRequest({request:Dr,schemaPath:w,params:ve,options:$n,id:yn});if(lt)if(lt instanceof ie)Dr=lt;else if(lt instanceof Response){vn=lt;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!vn){try{vn=await U(Dr,y);}catch(Cn){let lt=Cn;if(or.length)for(let gr=or.length-1;gr>=0;gr--){let Ia=or[gr];if(Ia&&typeof Ia=="object"&&typeof Ia.onError=="function"){let qt=await Ia.onError({request:Dr,error:lt,schemaPath:w,params:ve,options:$n,id:yn});if(qt){if(qt instanceof Response){lt=void 0,vn=qt;break}if(qt instanceof Error){lt=qt;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(lt)throw lt}if(or.length)for(let Cn=or.length-1;Cn>=0;Cn--){let lt=or[Cn];if(lt&&typeof lt=="object"&&typeof lt.onResponse=="function"){let gr=await lt.onResponse({request:Dr,response:vn,schemaPath:w,params:ve,options:$n,id:yn});if(gr){if(!(gr instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");vn=gr;}}}}let dn=vn.headers.get("Content-Length");if(vn.status===204||Dr.method==="HEAD"||dn==="0"&&!vn.headers.get("Transfer-Encoding")?.includes("chunked"))return vn.ok?{data:void 0,response:vn}:{error:void 0,response:vn};if(vn.ok)return {data:await(async()=>{if(qe==="stream")return vn.body;if(qe==="json"&&!dn){let lt=await vn.text();return lt?JSON.parse(lt):void 0}return await vn[qe]()})(),response:vn};let Sr=await vn.text();try{Sr=JSON.parse(Sr);}catch{}return {error:Sr,response:vn}}return {request(w,E,k){return R(E,{...k,method:w.toUpperCase()})},GET(w,E){return R(w,{...E,method:"GET"})},PUT(w,E){return R(w,{...E,method:"PUT"})},POST(w,E){return R(w,{...E,method:"POST"})},DELETE(w,E){return R(w,{...E,method:"DELETE"})},OPTIONS(w,E){return R(w,{...E,method:"OPTIONS"})},HEAD(w,E){return R(w,{...E,method:"HEAD"})},PATCH(w,E){return R(w,{...E,method:"PATCH"})},TRACE(w,E){return R(w,{...E,method:"TRACE"})},use(...w){for(let E of w)if(E){if(typeof E!="object"||!("onRequest"in E||"onResponse"in E||"onError"in E))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");I.push(E);}},eject(...w){for(let E of w){let k=I.indexOf(E);k!==-1&&I.splice(k,1);}}}}function fd(t,e,n){if(e==null)return "";if(typeof e=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return `${t}=${n?.allowReserved===true?e:encodeURIComponent(e)}`}function EP(t,e,n){if(!e||typeof e!="object")return "";let r=[],a={simple:",",label:".",matrix:";"}[n.style]||"&";if(n.style!=="deepObject"&&n.explode===false){for(let u in e)r.push(u,n.allowReserved===true?e[u]:encodeURIComponent(e[u]));let s=r.join(",");switch(n.style){case "form":return `${t}=${s}`;case "label":return `.${s}`;case "matrix":return `;${t}=${s}`;default:return s}}for(let s in e){let u=n.style==="deepObject"?`${t}[${s}]`:s;r.push(fd(u,e[s],n));}let i=r.join(a);return n.style==="label"||n.style==="matrix"?`${a}${i}`:i}function kP(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let i={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",s=(n.allowReserved===true?e:e.map(u=>encodeURIComponent(u))).join(i);switch(n.style){case "simple":return s;case "label":return `.${s}`;case "matrix":return `;${t}=${s}`;default:return `${t}=${s}`}}let r={simple:",",label:".",matrix:";"}[n.style]||"&",a=[];for(let i of e)n.style==="simple"||n.style==="label"?a.push(n.allowReserved===true?i:encodeURIComponent(i)):a.push(fd(t,i,n));return n.style==="label"||n.style==="matrix"?`${r}${a.join(r)}`:a.join(r)}function PP(t){return function(n){let r=[];if(n&&typeof n=="object")for(let a in n){let i=n[a];if(i!=null){if(Array.isArray(i)){if(i.length===0)continue;r.push(kP(a,i,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof i=="object"){r.push(EP(a,i,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(fd(a,i,t));}}return r.join("&")}}function UD(t,e){let n=t;for(let r of t.match(OD)??[]){let a=r.substring(1,r.length-1),i=false,s="simple";if(a.endsWith("*")&&(i=true,a=a.substring(0,a.length-1)),a.startsWith(".")?(s="label",a=a.substring(1)):a.startsWith(";")&&(s="matrix",a=a.substring(1)),!e||e[a]===void 0||e[a]===null)continue;let u=e[a];if(Array.isArray(u)){n=n.replace(r,kP(a,u,{style:s,explode:i}));continue}if(typeof u=="object"){n=n.replace(r,EP(a,u,{style:s,explode:i}));continue}if(s==="matrix"){n=n.replace(r,`;${fd(a,u)}`);continue}n=n.replace(r,s==="label"?`.${encodeURIComponent(u)}`:encodeURIComponent(u));}return n}function MD(t,e){return t instanceof FormData?t:e&&(e.get instanceof Function?e.get("Content-Type")??e.get("content-type"):e["Content-Type"]??e["content-type"])==="application/x-www-form-urlencoded"?new URLSearchParams(t).toString():JSON.stringify(t)}function FD(t,e){let n=`${e.baseUrl}${t}`;e.params?.path&&(n=e.pathSerializer(n,e.params.path));let r=e.querySerializer(e.params.query??{});return r.startsWith("?")&&(r=r.substring(1)),r&&(n+=`?${r}`),n}function TP(...t){let e=new Headers;for(let n of t){if(!n||typeof n!="object")continue;let r=n instanceof Headers?n.entries():Object.entries(n);for(let[a,i]of r)if(i===null)e.delete(a);else if(Array.isArray(i))for(let s of i)e.append(a,s);else i!==void 0&&e.set(a,i);}return e}function IP(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function LD(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),CP({baseUrl:t.baseUrl,headers:e})}var rf=class extends Error{constructor(n,r){super(r);A(this,"status",n);this.name="ApiError";}};var af=class extends N_{constructor(n){let{exportedConfig:r,environmentId:a,...i}=n,s=Fi(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:a??"default"});if(!s)throw new Error("BrowserRuntime requires exportedConfig");let u=ds(n.storage),y=new nu({storage:u,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...i,exportedConfig:s,storage:u,impressionStore:y});A(this,"_hydratePromise");let C=n.autoHydrate??true;this._hydratePromise=C?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};var _d=class extends Error{constructor(n,r,a){super(`Experiment "${n}" requests assignment unit "${r}", but this native provider is configured for "${a}"; refuse launch instead of substituting an assignment unit.`);A(this,"experimentHandle");A(this,"requestedUnit");A(this,"subjectUnit");this.name="UnsupportedExperimentAssignmentUnitError",this.experimentHandle=n,this.requestedUnit=r,this.subjectUnit=a;}};function ND(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=Math.imul(e,16777619)>>>0;return e>>>0}function RP(t){return ND(t)/4294967296}function VD(t){return Array.isArray(t)?t.map(e=>[e,1]):Object.entries(t).filter(([,e])=>Number.isFinite(e)&&e>0).map(([e,n])=>[e,n])}function AP(t,e,n){if(!t)return;let r=VD(n.variants);if(r.length===0)return;let{exposure:a}=n;if(a!==void 0&&(!(a>0)||a<1&&RP(`${t}:${e}:exposure`)>=a))return;let i=r.reduce((u,[,y])=>u+y,0),s=RP(`${t}:${e}:variant`)*i;for(let[u,y]of r)if(s-=y,s<0)return u;return r[r.length-1][0]}function wP(t){let e={};for(let a of t.variants)!Number.isFinite(a.weight)||a.weight<=0||(e[a.variant_id]=(e[a.variant_id]??0)+a.weight);let n=Object.values(e).reduce((a,i)=>a+i,0),r=Number.isFinite(t.traffic_allocation)?Math.min(1,Math.max(0,t.traffic_allocation)):0;return {variants:e,exposure:r*Math.min(1,n)}}function BD(t){let e=t.subjectUnit??"user",n={};for(let r of t.experiments){let a=r.assignment_unit??"user";if(a!==e)throw new _d(r.handle,a,e);n[r.handle]=wP(r);}return jP({experiments:n,subject:t.subject})}function jP(t){let{experiments:e,subject:n}=t;return {domain:"experiments",resolve(){let r=typeof n=="function"?n():n;if(!r)return {assignments:{}};let a={};for(let[i,s]of Object.entries(e)){let u=AP(r,i,s);u!==void 0&&(a[i]=u);}return {assignments:a}}}}var zD=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function $D(t){let e={};for(let[n,r]of Object.entries(t.properties))e[zD.has(n)?`rt_prop_${n}`:n]=r;return {...e,tenant_id:t.tenant_id,user_id:t.user_id,anonymous_id:t.anonymous_id,session_id:t.session_id,url:t.url,path:t.path,page_title:t.page_title,event_time:t.event_time}}var sf=class{constructor(e){A(this,"name");A(this,"handler");A(this,"transform");A(this,"filterSet");this.name=e.name??"analytics",this.handler=e.handler,this.transform=e.transform,this.filterSet=e.filter?new Set(e.filter):void 0;}consume(e){for(let n of e){if(this.filterSet&&!this.filterSet.has(n.type))continue;let r=n.type,a=$D(n);if(this.transform){let i=this.transform(r,a);if(i===null)continue;r=i.eventName,a=i.properties;}try{this.handler(r,a);}catch{}}}};function OP(t){let e=new sf(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function qP(t){let{posthog:e,filter:n,transform:r,name:a}=t;return OP({name:a??"posthog",filter:n,transform:r,handler:(i,s)=>{e.capture(i,s);}})}function KD(t){let{posthog:e,filter:n,transform:r,name:a,syncIdentity:i=false,syncAccountGroup:s=false,mirrorNavigation:u=false}=t,y=a??"posthog",C=qP({posthog:e,filter:n,transform:r,name:y}),I=null,R=null,w=E=>{try{if(i){let k=E.user_id;k&&k!==I?(e.identify?.(k,E.identity.traits),I=k):!k&&I!==null&&(e.reset?.(),I=null);}if(s){let k=E.identity.traits.account_id;typeof k=="string"&&k&&k!==R&&(e.group?.("account",k),R=k);}u&&E.type==="page_view"&&e.capture("$pageview",{$current_url:E.url});}catch{}};return {domain:"events",async resolve(){let k=(await C.resolve())?.consumers??[];return {consumers:[{name:y,consume(ie){for(let Z of ie)w(Z);for(let Z of k)Z.consume(ie);}}]}}}}var HD=["banner_placement"],GD=["banner_placement","in_page_card"],YD=["toast_message"],WD=["modal_overlay"];var JD=["banner_placement","in_page_card","usage_counter","button"],ZD=["modal_overlay","inline_gate_message"],QD=["toast_message","modal_overlay","banner_placement"];function XD(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var yd=class extends Error{constructor(n,r){super(`RevTurbine client-session mint failed (status ${n})`);A(this,"status",n);A(this,"requestId",r);this.name="RevTurbineClientSessionError";}},vd=class{constructor(e){A(this,"tenantId");A(this,"apiKey");A(this,"endpoint");A(this,"defaultTtlSeconds");A(this,"fetchFn");this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.endpoint=e.endpoint.replace(/\/$/,""),this.defaultTtlSeconds=e.defaultTtlSeconds??60,this.fetchFn=e.fetch??globalThis.fetch;}get clientSessions(){return {create:e=>this.createClientSession(e)}}async createClientSession(e){let n=XD(),r=await this.apiCall(n,"/api/sdk/client-sessions",{subject:e.subject,surface:e.surface,capabilities:e.capabilities??["context:read"]});if(!r.ok)throw new yd(r.status,n);let a=await r.json();return {client_token:a.client_token,expires_at:a.expires_at}}async apiCall(e,n,r){return this.fetchFn(`${this.endpoint}${n}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify(r)})}async apiGet(e,n){return this.fetchFn(`${this.endpoint}${n}`,{method:"GET",headers:{authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e}})}};var tU=/^[a-z0-9._]{1,100}$/,Os={Persisted:"persisted",Transient:"transient"},Di={Internal:"internal",External:"external"},ui={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},nU="readOnly";function Pa(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[nU]===true||(e[n]=r);}return z.object(e)}function Qr(t){let e=Pa(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(tU)}):e}var {Unrestricted:pa}=ui,{Transient:ga,Persisted:aU}=Os,{Internal:uo,External:as}=Di;z.object({page:z.coerce.number().int().min(1).default(1).meta(pa),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(pa)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as});var Bn=z.object({created_at:z.string().datetime().meta({...pa,readOnly:true}),updated_at:z.string().datetime().meta({...pa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as}),qn=z.object({id:z.string().min(1).meta({...pa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as}),zn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...pa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":uo});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as});var lf=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as}),UP=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as});var bd=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as}),MP=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":uo});var is=z.string().min(1).max(200),br=z.string().min(1).max(100),xd=z.string().max(500).optional(),Aa=z.record(z.string(),z.unknown()).default({}),po=z.number().int().min(10).max(100).multipleOf(10),Sd=z.string().datetime().nullable().default(null),dr=z.object({environment_id:z.string().min(1).default("production").meta({...pa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":uo}),xr=z.object({playbook_version_id:z.string().nullable().default(null).meta(pa),is_current:z.boolean().default(true).meta({...pa,readOnly:true}),is_deleted:z.boolean().default(false).meta({...pa,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...pa,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...pa,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...pa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":uo}),iU=qn.merge(Bn).merge(zn).merge(dr).extend({handle:br.meta({...pa,readOnly:true}),active:z.boolean().default(true).meta({...pa,readOnly:true})});function Xr(t){return iU.meta({id:t,"x-revturbine-schema-persistence":aU,"x-revturbine-schema-exposure":uo})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":uo});z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":uo});var FP=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":ga,"x-revturbine-schema-exposure":as});new Set(lf.options);var LP=z.enum(["session","day","week","month"]),NP=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(NP),cap:z.object({count:z.number().int().min(1),period:LP})});z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var BP={Named:"named",Minted:"minted"},zP="x-revturbine-schema-identity";function di(t="handle"){return {[zP]:{kind:BP.Named,handleField:t}}}function pi(t="handle"){return {[zP]:{kind:BP.Minted,handleField:t}}}var Pn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Za={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},uU="x-revturbine-context",dU="x-revturbine-in-config",pU="x-revturbine-sdk-input",gU="x-revturbine-source",hU="x-revturbine-deprecation",fU={[Pn.Playbook]:Za.Customer,[Pn.Branding]:Za.Customer,[Pn.Billing]:Za.Stripe,[Pn.Metering]:Za.Customer,[Pn.CustomerOperations]:Za.Runtime,[Pn.EventIngestion]:Za.Runtime};function Xn(t,e){return {[uU]:t,[dU]:e.inConfig??t===Pn.Playbook,[pU]:e.sdkInput,[gU]:e.source??fU[t]}}function Pd(t){return {deprecated:true,[hU]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var mn=t=>z.object({items:z.array(t)}),ar=z.object({error:z.string(),code:z.string(),request_id:z.string()}),F=t=>t,un=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()});var {Unrestricted:tt}=ui,{Persisted:Td,Transient:qs}=Os,{External:Xa}=Di,GP=Xn(Pn.Playbook,{sdkInput:true});Xn(Pn.Playbook,{inConfig:false,sdkInput:false});var RU=Xn(Pn.Playbook,{inConfig:false,sdkInput:true}),AU=Xn(Pn.Playbook,{inConfig:false,sdkInput:false,source:Za.Runtime}),wU=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var YP=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":qs,"x-revturbine-schema-exposure":Xa}),WP=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":qs,"x-revturbine-schema-exposure":Xa}),jU=z.object({count:z.number().int().positive().meta(tt),period:WP.meta(tt)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":qs,"x-revturbine-schema-exposure":Xa});z.object({surface_type:z.string().min(1).meta(tt),rules:z.array(jU).meta(tt),cooldown_ms:z.number().int().nonnegative().optional().meta(tt)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Td,"x-revturbine-schema-exposure":Xa,...ui.Operational,...RU});var OU=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":qs,"x-revturbine-schema-exposure":Xa}),Dl=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...tt,readOnly:true}),name:is.meta(tt),handle:br.meta(tt),description:xd.meta(tt),category:YP.meta(tt),drag_order_in_category:z.number().int().default(0).meta(tt),surface_slot_id:z.string().optional().meta(tt),entitlement_id:z.string().optional().meta(tt),tier_threshold:z.string().optional().meta(tt),threshold_percent:po.optional().meta(tt),trial_type:z.enum(["free","reverse"]).optional().meta(tt),trigger_type:z.string().optional().meta(tt),trial_progress_percent:z.number().min(0).max(100).optional().meta(tt),days_before_end:z.number().int().min(0).optional().meta(tt),qualifier:wU.optional().meta(tt),activation_window_start:z.string().datetime().optional().meta(tt),activation_window_end:z.string().datetime().optional().meta(tt),metadata:Aa.meta(tt)}).meta({id:"Placement","x-revturbine-schema-persistence":Td,"x-revturbine-schema-exposure":Xa,...GP,...di()}),qU=Xr("PlacementAnchor"),DU=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":qs,"x-revturbine-schema-exposure":Xa}),UU=z.object({code:DU.meta(tt),message:z.string().min(1).meta(tt),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(tt)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":qs,"x-revturbine-schema-exposure":Xa}),$P=Dl.extend({warnings:z.array(UU).optional().meta(tt)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":qs,"x-revturbine-schema-exposure":Xa}),MU=z.object({label:z.string().min(1).max(200).meta(tt),cta_path_type:OU.meta(tt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(tt)}).meta({id:"CtaObject","x-revturbine-schema-persistence":qs,"x-revturbine-schema-exposure":Xa}),xm=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...tt,readOnly:true}),handle:br.meta({...tt,readOnly:true}),placement_id:z.string().min(1).meta(tt),drag_order:z.number().int().default(0).meta(tt),target_plan_ids:z.array(z.string()).default([]).meta(tt),target_plan_billing_cadences:z.array(z.string()).default([]).meta(tt),target_segments:z.array(z.string()).default([]).meta(tt),surface_slot_ids:z.array(z.string()).default([]).meta(tt),surface_template_id:z.string().min(1).meta(tt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(tt),cta_list:z.array(MU).default([]).meta(tt),max_per_period:z.number().int().min(0).nullable().default(null).meta(tt),max_period_unit:WP.default("session").meta(tt),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(tt),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(tt),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(tt),recommendation_plan_override:z.string().optional().meta(tt)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Td,"x-revturbine-schema-exposure":Xa,...GP,...pi()}),FU=Xr("PlacementPayloadAnchor"),LU=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({surface_slot_handle:z.string().min(1).max(200).meta(tt),surface_type:lf.meta(tt),surface_template_ids:z.array(z.string()).default([]).meta(tt),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(tt),first_seen:z.string().datetime().meta({...tt,readOnly:true}),last_seen:z.string().datetime().meta({...tt,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(tt),placement_count:z.number().int().min(0).default(0).meta({...tt,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Td,"x-revturbine-schema-exposure":Xa,...AU,...di("surface_slot_handle")}),NU=Pa(Dl),VU=Pa(xm);({"/api/placement-anchors":{get:F({operationId:"listPlacementAnchors",requestParams:{query:un},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:mn(qU)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:F({operationId:"listPlacements",requestParams:{query:un},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:mn(Dl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:F({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Qr(Dl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:$P}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:F({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Dl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:F({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:NU}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$P}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:F({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:F({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Dl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:F({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:YP,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:F({operationId:"listPlacementPayloadAnchors",requestParams:{query:un},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:mn(FU)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:F({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:un},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:mn(xm)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:F({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Qr(xm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xm}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:F({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:VU}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xm}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:F({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:F({operationId:"listSurfaceSlots",requestParams:{query:un},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:mn(LU)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var GU="__self__",YU={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},JP={plans:{sortKey:"unique_handle",indexBy:["unique_handle"],fields:{unique_handle:{},name:{},tier_position:{},sort_order:{},visibility:{}}},entitlements:{sortKey:"unique_handle",indexBy:["unique_handle"],fields:{unique_handle:{},name:{},type:{},unit:{},tier_definitions:{}}},entitlement_rules:{sortKey:"id",fields:{id:{},entitlement_id:{reference:{table:"entitlements",by:"unique_handle",kind:"one",onDelete:"cascade"}},targets:{},segment_ids:{reference:{table:"segments",by:"handle",kind:"list",onDelete:"restrict"}},kind:{include:"never"},unit:{include:"never"},tier_name:{include:"never"},tier_description:{include:"never"},enabled:{},limit_value:{},enforcement:{},tier_value:{},period_scope:{},included_count:{},seat_type_id:{},initial_grant:{},allowance_value:{},rollover_enabled:{},max_balance:{},reset_period:{},max_seats:{},rate_value:{},amount_cents:{},currency:{},current_usage:{include:"never"},allocation:{}}},segments:{sortKey:"handle",indexBy:["handle"],fields:{name:{},handle:{},predicates:{},dimension_id:{},experiment_handle:{},experiment_id:{}}},placement_slots:{sortKey:"id",indexBy:["id","placement_handle"],fields:{id:{},label:{},description:{},surface_type:{},placement_handle:{},template:{}}},slot_configs:{sortKey:"slot_id",fields:{slot_id:{reference:{table:"placement_slots",by:"id",kind:"one",onDelete:"cascade"}},active:{},triggers:{}}},surface_templates:{sortKey:"id",indexBy:["id"],fields:{id:{},surface_type:{},fields:{}}},placements:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},category:{},trigger:{discriminator:{keyed_on:{table:GU,via:"__self__",field:"trigger.type"},variants:{surface_render:["type","slot_id"],entitlement_gate:["type","entitlement_handle","tier_threshold"],usage_threshold:["type","entitlement_handle","threshold_percent"],credit_threshold:["type","entitlement_handle","threshold_percent"],seat_threshold:["type","entitlement_handle","threshold_percent"],trial_started:["type","trial_type"],trial_progress:["type","progress_percent"],trial_ending:["type","days_before_end"],trial_ended:["type"],trial_converted:["type"],qualifier:["type","qualifier"]}}},payloads:{},order:{}}},placement_payloads:{sortKey:"payload_id",fields:{payload_id:{},placement_id:{reference:{table:"placements",by:"id",kind:"one",onDelete:"cascade"}},target:{chipResolution:YU},caps:{},created_at:{},updated_at:{},source_mode:{},surfaces:{},content_link:{},surface_slot_ids:{},remind_later_minutes:{}}},content_ui_paths:{sortKey:"name",fields:{name:{},action_type:{},plan_handle:{reference:{table:"plans",by:"unique_handle",kind:"optional",onDelete:"detach"}},promotion_id:{reference:{table:"content_promotions",by:"id",kind:"optional",onDelete:"detach"}},placement_handle:{reference:{table:"placement_slots",by:"placement_handle",kind:"optional",onDelete:"detach"}},url:{},tour_id:{},target_billing_period:{},description:{}}},content_promotions:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},discount:{},type:{},status:{}}},personalization_tokens:{sortKey:"token",indexBy:["token"],fields:{token:{},label:{},description:{},category:{},data_source:{},example_value:{},value_map:{},format:{}}},message_blocks:{sortKey:"block_id",indexBy:["block_id"],fields:{block_id:{},tenant_id:{},name:{},surface_template_id:{reference:{table:"surface_templates",by:"id",kind:"optional",onDelete:"detach"}},default_content:{},segment_overrides:{},child_blocks:{},tokens_used:{},status:{},created_at:{},updated_at:{}}}};var ZP=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(ZP).default([]),days_before_end:z.number().int().min(0).max(365).nullable().default(null),trial_type:z.enum(["free","reverse"]).nullable().default(null)});z.object({threshold_percent:z.number().int().min(0).max(100),trial_type:z.enum(["free","reverse"]).nullable().default(null)});var {Unrestricted:je}=ui,{Persisted:_f,Transient:Ta}=Os,{Internal:eT,External:ha}=Di,tT=Xn(Pn.Playbook,{sdkInput:true}),QU=Xn(Pn.Playbook,{inConfig:false,sdkInput:false}),nT=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),Ed=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),XU=z.enum(UP).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),eM=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),rT=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),mf=z.object({entitlement_id:z.string().min(1).meta(je),entitlement_handle:z.string().min(1).meta(je),status:XU.meta(je),limit:z.number().optional().meta(je),used:z.number().optional().meta(je),allocation:Ed.optional().meta(je),enforcement:rT.optional().meta(je),source:eM.optional().meta(je),plan_id:z.string().optional().meta(je),segment_id:z.string().optional().meta(je),seat_type_id:z.string().optional().meta(je),rule_id:z.string().optional().meta(je)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha,...ui.Operational});z.object({account:z.record(z.string(),mf).optional().meta(je),instance:z.record(z.string(),mf).optional().meta(je),user:z.record(z.string(),mf).optional().meta(je)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha,...ui.Operational});var tM=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),nM=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),aT=z.object({kind:nM.meta(je),id:z.string().min(1).meta(je)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),rM=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),Vl=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...je,readOnly:true}),name:is.meta(je),handle:br.meta(je),customer_facing_description:z.string().max(500).optional().meta(je),type:bd.meta(je),unit:z.string().max(100).optional().meta(je),period_scope:nT.optional().meta(je),allocation:Ed.optional().meta(je),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(je),sort_order:z.number().int().default(0).meta(je),metadata:Aa.meta(je)}).meta({id:"Entitlement","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":ha,...tT,...di()}),aM=Xr("EntitlementAnchor"),Yl=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...je,readOnly:true}),handle:br.meta({...je,readOnly:true}),entitlement_id:z.string().min(1).meta(je),targets:z.array(aT).min(1).meta(je),segment_ids:z.array(z.string()).default([]).meta(je),visibility:tM.default("public").meta(je),period_scope:nT.optional().meta(je),instance:z.string().max(100).optional().meta(je),reset_period:rM.optional().meta(je),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(je),enforcement:rT.optional().meta(je),warning_threshold_percent:po.optional().meta(je),overage_price_ref:z.string().optional().meta(je),grace_period_hours:z.number().int().min(0).optional().meta(je),tier_value:z.string().optional().meta(je),rate_value:z.number().optional().meta(je),initial_grant:z.number().optional().meta(je),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(je),rollover_enabled:z.boolean().optional().meta(je),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(je),seat_type_id:z.string().optional().meta(je),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(je),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(je),stripe_metered_price_id:z.string().optional().meta(je),enabled:z.boolean().optional().meta(je),allocation:Ed.optional().meta(je),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(je),amount_cents:z.number().int().optional().meta(je),currency:z.string().optional().meta(je)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":eT,...tT,...pi()}),iM=Xr("EntitlementRuleAnchor");Yl.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var sM=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),oM=z.object({code:sM.meta(je),message:z.string().min(1).meta(je),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(je)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),uf=Yl.extend({warnings:z.array(oM).optional().meta(je)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ta,"x-revturbine-schema-exposure":ha}),df=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({handle:br.meta({...je,readOnly:true}),rule_id:z.string().min(1).meta(je),experiment_id:z.string().min(1).meta(je),variant_name:z.string().min(1).max(200).meta(je),is_control:z.boolean().default(false).meta(je),override_fields:z.record(z.string(),z.unknown()).default({}).meta(je)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":eT,...QU,...pi()}),lM=Pa(Vl),cM=Pa(Yl);({"/api/entitlement-anchors":{get:F({operationId:"listEntitlementAnchors",requestParams:{query:un},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:mn(aM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:F({operationId:"listEntitlementRuleAnchors",requestParams:{query:un},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:mn(iM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:F({operationId:"listEntitlements",requestParams:{query:un},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:mn(Vl)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:F({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Qr(Vl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Vl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:F({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Vl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:F({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:lM}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Vl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:F({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:F({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:un},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:mn(Yl)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:F({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Qr(Yl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:uf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:F({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:cM}}},responses:{200:{description:"Updated",content:{"application/json":{schema:uf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:F({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:F({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:uf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:F({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:un},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:mn(df)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:F({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Qr(df)}}},responses:{201:{description:"Created",content:{"application/json":{schema:df}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:gt}=ui,{Persisted:Em,Transient:km}=Os,{Internal:Mi}=Di,iT=Xn(Pn.Playbook,{sdkInput:true}),sT=Xn(Pn.Playbook,{inConfig:false,sdkInput:true}),mM=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":km,"x-revturbine-schema-exposure":Mi}),yf=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":km,"x-revturbine-schema-exposure":Mi}),oT=z.object({name:is.meta(gt),handle:br.meta(gt),plan_id:z.string().nullable().optional().meta(gt),segment_id:z.string().nullable().optional().meta(gt),trial_limit_type:yf.default("time").meta(gt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(gt),grace_period_days:z.number().int().min(0).default(0).meta(gt),usage_entitlement_handle:z.string().min(1).optional().meta(gt),usage_limit_value:z.number().int().min(1).optional().meta(gt),require_payment_method:z.boolean().default(false).meta(gt),auto_convert:z.boolean().default(true).meta(gt),convert_to_plan_id:z.string().optional().meta(gt),fallback_plan_id:z.string().optional().meta(gt),limit_per_customer:z.number().int().min(1).default(1).meta(gt),is_active:z.boolean().default(true).meta(gt),metadata:Aa.meta(gt)}),Ul=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...gt,readOnly:true})}).merge(oT).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Mi,...iT,...di()}),uM=Xr("FreeTrialRuleAnchor"),dM=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":km,"x-revturbine-schema-exposure":Mi}),lT=z.object({name:is.meta(gt),handle:br.meta(gt),premium_plan_id:z.string().min(1).meta(gt),fallback_plan_id:z.string().min(1).meta(gt),segment_id:z.string().nullable().optional().meta(gt),trial_limit_type:yf.default("time").meta(gt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(gt),usage_entitlement_handle:z.string().min(1).optional().meta(gt),usage_limit_value:z.number().int().min(1).optional().meta(gt),start_policy:dM.default("signup").meta(gt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(gt),entitlements_during_trial:z.array(z.string()).default([]).meta(gt),is_active:z.boolean().default(true).meta(gt),metadata:Aa.meta(gt)}),Ml=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...gt,readOnly:true})}).merge(lT).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Mi,...iT,...di()}),pM=Xr("ReverseTrialRuleAnchor"),cT=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":km,"x-revturbine-schema-exposure":Mi}),mT=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":km,"x-revturbine-schema-exposure":Mi}),Fl=qn.merge(Bn).merge(zn).extend({trial_limit_policy:cT.default("1_per_lifetime").meta(gt),eligibility_scope:mT.default("per_customer").meta(gt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Mi,...sT}),Ll=qn.merge(Bn).merge(zn).extend({trial_limit_policy:cT.default("1_per_lifetime").meta(gt),eligibility_scope:mT.default("per_customer").meta(gt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Mi,...sT}),Id=qn.merge(Bn).merge(zn).extend({customer_id:z.string().min(1).meta(gt),rule_id:z.string().min(1).meta(gt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(gt),plan_id:z.string().min(1).meta(gt),status:mM.default("active").meta(gt),started_at:z.string().datetime().meta({...gt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(gt),trial_limit_type:yf.default("time").meta(gt),usage_entitlement_handle:z.string().min(1).optional().meta(gt),usage_limit_value:z.number().int().min(1).optional().meta(gt),converted_at:Sd.meta(gt),cancelled_at:Sd.meta(gt),metadata:Aa.meta(gt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Mi});({"/api/free-trial-rule-anchors":{get:F({operationId:"listFreeTrialRuleAnchors",requestParams:{query:un},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:mn(uM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:F({operationId:"listFreeTrialRules",requestParams:{query:un},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:mn(Ul)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:F({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:Ul}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:F({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ul.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ul}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:F({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:F({operationId:"listReverseTrialRuleAnchors",requestParams:{query:un},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:mn(pM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:F({operationId:"listReverseTrialRules",requestParams:{query:un},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:mn(Ml)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:F({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:Ml}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:F({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ml.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ml}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:F({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:F({operationId:"listFreeTrialSettings",requestParams:{query:un},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:mn(Fl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:F({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Fl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:F({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Fl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:F({operationId:"listReverseTrialSettings",requestParams:{query:un},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:mn(Ll)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:F({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Ll}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:F({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ll.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ll}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:F({operationId:"listTrialInstances",requestParams:{query:un},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:mn(Id)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:F({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Id}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:F({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Id}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:F({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:Id}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Xt,Financial:Cd}=ui,{Persisted:Rm,Transient:kd}=Os,{External:ss}=Di,gM=Xn(Pn.Playbook,{sdkInput:true}),hM=Xn(Pn.Playbook,{sdkInput:false}),vf=Xn(Pn.Billing,{sdkInput:false}),Us=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":ss}),Am=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":ss}),Rd=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":ss}),Bl=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),name:is.meta(Xt),handle:br.meta(Xt),tier_position:z.number().int().min(0).default(0).meta(Xt),sort_order:z.number().int().default(0).meta(Xt),visibility:Us.default("public").meta(Xt),metadata:Aa.meta(Xt)}).meta({id:"Plan","x-revturbine-schema-persistence":Rm,"x-revturbine-schema-exposure":ss,...gM,...di()}),fM=Xr("PlanAnchor"),zl=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),handle:br.meta({...Xt,readOnly:true}),plan_id:z.string().min(1).meta(Xt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Xt),segment_id:z.string().nullable().default(null).meta(Xt),price_amount:z.number().min(0).meta(Cd),pricing_model:Am.meta(Xt),visibility:Us.default("public").meta(Xt),stripe_price_id:z.string().optional().meta(Xt),price_source:Rd.default("static").meta(Xt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Rm,"x-revturbine-schema-exposure":ss,...vf,...pi()}),_M=Xr("PlanVariationAnchor"),$l=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),name:is.meta(Xt),handle:br.meta(Xt),sort_order:z.number().int().default(0).meta(Xt),visibility:Us.default("public").meta(Xt),metadata:Aa.meta(Xt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Rm,"x-revturbine-schema-exposure":ss,...hM,...di()}),yM=Xr("AddOnAnchor"),Kl=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),handle:br.meta({...Xt,readOnly:true}),addon_id:z.string().min(1).meta(Xt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Xt),segment_id:z.string().nullable().default(null).meta(Xt),price_amount:z.number().min(0).meta(Cd),pricing_model:Am.meta(Xt),visibility:Us.default("public").meta(Xt),stripe_price_id:z.string().optional().meta(Xt),price_source:Rd.default("static").meta(Xt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Rm,"x-revturbine-schema-exposure":ss,...vf,...pi()}),vM=Xr("AddOnVariationAnchor"),bM=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":ss}),Hl=qn.merge(Bn).merge(zn).extend({stripe_price_id:z.string().min(1).meta(Xt),stripe_product_id:z.string().min(1).meta(Xt),billing_period:bM.meta(Xt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Cd),currency:MP.meta(Cd),pricing_model:Am.meta(Xt),nickname:z.string().nullable().default(null).meta(Xt),is_mock:z.boolean().default(false).meta(Xt),last_updated_from_stripe:Sd.meta(Xt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Rm,"x-revturbine-schema-exposure":ss,...vf}),xM=Pa(Bl),SM=Pa(zl),PM=Pa($l),TM=Pa(Kl),IM=Pa(Hl);({"/api/plan-anchors":{get:F({operationId:"listPlanAnchors",requestParams:{query:un},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:mn(fM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:F({operationId:"listPlans",requestParams:{query:un},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:mn(Bl)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:F({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qr(Bl)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Bl}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:F({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Bl}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:F({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:xM}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Bl}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:F({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:F({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:F({operationId:"listPlanVariationAnchors",requestParams:{query:un},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:mn(_M)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:F({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:un},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:mn(zl)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:F({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qr(zl)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:F({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:F({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:SM}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:F({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:F({operationId:"listAddOnAnchors",requestParams:{query:un},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:mn(yM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:F({operationId:"listAddOns",requestParams:{query:un},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:mn($l)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:F({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qr($l)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:$l}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:F({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:$l}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:F({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:PM}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:$l}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:F({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:F({operationId:"listAddOnVariationAnchors",requestParams:{query:un},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:mn(vM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:F({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:un},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:mn(Kl)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:F({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qr(Kl)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Kl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:F({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Kl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:F({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:TM}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Kl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:F({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:F({operationId:"listStripePrices",requestParams:{query:un},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:mn(Hl)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:F({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qr(Hl)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Hl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:F({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Hl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:F({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:IM}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Hl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:F({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:h}=ui,{Persisted:Wl,Transient:yt}=Os,{Internal:ei,External:Lt}=Di,Ot=Xn(Pn.Playbook,{sdkInput:true}),Gl=Xn(Pn.Playbook,{sdkInput:false}),Ds=Xn(Pn.Playbook,{inConfig:false,sdkInput:false}),uT=Xn(Pn.Playbook,{inConfig:false,sdkInput:true}),Nl=Xn(Pn.Playbook,{inConfig:false,sdkInput:true,source:Za.CodeConstant}),pf=Xn(Pn.Playbook,{inConfig:false,sdkInput:true,source:Za.Runtime}),gf=Xn(Pn.Playbook,{inConfig:false,sdkInput:false,source:Za.Runtime}),CM=Xn(Pn.Billing,{sdkInput:false}),EM=Xn(Pn.Metering,{sdkInput:false}),kM=Xn(Pn.Branding,{inConfig:true,sdkInput:true}),RM=Xn(Pn.Branding,{sdkInput:false}),AM="1.0.0",Pm=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:is.meta(h),handle:br.meta(h),description:xd.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:Aa.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":Wl,"x-revturbine-schema-exposure":ei,...Ds,...di()}),wM=Xr("SeatTypeAnchor"),Tm=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:br.meta(h),label:z.string().min(1).meta(h),description:z.string().nullable().default(null).meta(h),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(h),data_source:z.string().nullable().default(null).meta(h),example_value:z.string().nullable().default(null).meta(h),value_map:z.record(z.string(),z.string()).default({}).meta(h),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(h),metadata:Aa.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Wl,"x-revturbine-schema-exposure":ei,...Ds,...di()}),jM=Xr("PersonalizationTokenAnchor"),OM=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":ei}),hf=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({handle:br.meta({...h,readOnly:true}),stripe_account_id:z.string().min(1).meta(h),live_mode:z.boolean().default(false).meta(h),onboarding_state:OM.default("not_started").meta({...h,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...h,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...h,readOnly:true}),details_submitted:z.boolean().default(false).meta({...h,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...h,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...h,readOnly:true}),sync_products:z.boolean().default(true).meta(h),sync_prices:z.boolean().default(true).meta(h),sync_subscriptions:z.boolean().default(true).meta(h),sync_invoices:z.boolean().default(false).meta(h),default_currency:z.string().length(3).default("USD").meta(h),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(h),last_sync_at:z.string().optional().meta({...h,readOnly:true}),metadata:Aa.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Wl,"x-revturbine-schema-exposure":ei,...CM,...pi()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(h),workspace_name:z.string().optional().meta(h),logo_url:z.string().optional().meta(h),support_email:z.string().optional().meta(h)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...RM});var Im=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({handle:br.meta({...h,readOnly:true}),entitlement_id:z.string().min(1).meta(h),meter_key:z.string().min(1).max(100).meta(h),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(h),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(h),stripe_meter_id:z.string().nullable().default(null).meta(h),is_active:z.boolean().default(true).meta(h),metadata:Aa.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Wl,"x-revturbine-schema-exposure":ei,...EM,...pi()}),QP=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":ei}),Cm=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:br.meta({...h,readOnly:true}),entitlement_id:z.string().min(1).meta(h),soft_limit_percent:z.number().min(0).max(100).default(80).meta(h),hard_limit_percent:z.number().min(0).max(100).default(100).meta(h),soft_limit_action:QP.default("warn").meta(h),hard_limit_action:QP.default("block").meta(h),grace_period_hours:z.number().int().min(0).default(0).meta(h),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(h),is_active:z.boolean().default(true).meta(h)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Wl,"x-revturbine-schema-exposure":ei,...uT,...pi()}),qM=Xr("UsageEnforcementSettingsAnchor"),DM=z.object({kind:z.enum(["template","slot"]).meta(h),id:z.string().min(1).meta(h),label:z.string().min(1).optional().meta(h)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":ei}),UM=z.object({id:z.string().min(1).meta(h),group:z.array(DM).min(1).meta(h),cap:z.object({count:z.number().int().min(1).meta(h),period:z.enum(["session","day","week","month"]).meta(h)}).meta(h)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":ei}),MM=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":ei}),dT=z.object({capRules:z.array(UM).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:MM.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":ei}),ff=qn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:br.meta({...h,readOnly:true}),global_frequency_cap:dT.nullable().default(null).meta(h),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(h),suppress_for_paid:z.boolean().default(false).meta(h),suppress_for_trial:z.boolean().default(false).meta(h),allow_stacking:z.boolean().default(false).meta(h),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(h)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Wl,"x-revturbine-schema-exposure":ei,...uT,...pi()}),FM=Xr("PlacementSettingsAnchor"),LM=z.object({field:z.string().min(1).meta(h),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(h),value:z.string().meta(h)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),NM=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(LM).optional().meta(h),dimension_id:z.string().optional().meta(h),experiment_handle:z.string().min(1).optional().meta(h),experiment_id:z.string().min(1).optional().meta(h)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),VM=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),tier_position:z.number().int().min(0).default(0).meta(h),sort_order:z.number().int().min(0).default(0).meta(h),visibility:Us.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),BM=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),sort_order:z.number().int().min(0).default(0).meta(h),visibility:Us.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Gl}),zM=z.object({handle:z.string().min(1).meta(h),plan_handle:z.string().min(1).meta(h),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z.string().nullable().default(null).meta(h),price_amount:z.number().min(0).meta(h),pricing_model:Am.meta(h),visibility:Us.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:Rd.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ds}),$M=z.object({handle:z.string().min(1).meta(h),addon_handle:z.string().min(1).meta(h),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z.string().nullable().default(null).meta(h),price_amount:z.number().min(0).meta(h),pricing_model:Am.meta(h),visibility:Us.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:Rd.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ds}),KM=z.object({handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),description:z.string().nullable().default(null).meta(h),is_default:z.boolean().default(false).meta(h),entitlement_handles:z.array(z.string()).default([]).meta(h)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),HM=z.object({handle:z.string().min(1).meta(h),entitlement_handle:z.string().nullable().default(null).meta(h),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(h),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(h),soft_limit_action:z.string().meta(h),hard_limit_action:z.string().meta(h),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(h),notification_channels:z.array(z.string()).default([]).meta(h),is_active:z.boolean().default(true).meta(h)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),GM=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:dT.nullable().default(null).meta(h),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(h),suppress_for_paid:z.boolean().default(false).meta(h),suppress_for_trial:z.boolean().default(false).meta(h),allow_stacking:z.boolean().default(false).meta(h),priority_collision_strategy:z.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),YM=z.object({handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:z.string().nullable().default(null).meta(h),visibility_toggle:z.boolean().default(true).meta(h),source_type:z.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),WM=z.object({handle:z.string().min(1).meta(h),entitlement_handle:z.string().min(1).meta(h),meter_handle:z.string().min(1).meta(h),limit:z.number().int().min(0).nullable().default(null).meta(h),reset_period:z.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),JM=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:bd.meta(h),unit:z.string().optional().meta(h),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),ZM=z.object({id:z.string().min(1).meta(h),entitlement_id:z.string().min(1).meta(h),targets:z.array(aT).min(1).meta(h),segment_ids:z.array(z.string()).default([]).meta(h),kind:bd.optional().meta({...h,readOnly:true}),unit:z.string().optional().meta({...h,readOnly:true}),tier_name:z.string().optional().meta({...h,readOnly:true}),tier_description:z.string().optional().meta({...h,readOnly:true}),...Yl.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(h),allocation:Ed.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),QM=z.object({slot_id:z.string().min(1).meta(h),active:z.boolean().meta(h),triggers:z.array(z.string()).meta(h)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),XM=z.object({id:z.string().min(1).meta(h),label:z.string().min(1).meta(h),description:z.string().meta(h),surface_type:z.string().meta(h),placement_handle:z.string().min(1).meta(h),template:z.string().optional().meta(h)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),eF=z.object({name:z.string().min(1).meta(h),type:z.string().optional().meta(h),required:z.boolean().optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),tF=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(eF).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),nF=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),rF=z.object({name:z.string().min(1).meta(h),action_type:nF.meta(h),plan_handle:z.string().optional().meta(h),promotion_id:z.string().optional().meta(h),placement_handle:z.string().optional().meta(h),url:z.string().optional().meta(h),tour_id:z.string().optional().meta(h),target_billing_period:z.enum(["monthly","annual"]).optional().meta(h),description:z.string().optional().meta(h)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),aF=z.object({id:z.string().meta(h),name:z.string().meta(h),discount:z.string().meta(h),type:z.string().meta(h),status:z.string().meta(h)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),iF=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(h),label:z.string().min(1).meta(h),description:z.string().optional().meta(h),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(h),data_source:z.string().optional().meta(h),example_value:z.string().optional().meta(h),value_map:z.record(z.string(),z.string()).optional().meta(h),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(h)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),XP=z.object({header:z.string().optional().meta(h),body:z.string().optional().meta(h),cta_label:z.string().optional().meta(h),secondary_cta_label:z.string().optional().meta(h)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),sF=z.object({block_id:z.string().min(1).meta(h),tenant_id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),surface_template_id:z.string().optional().meta(h),default_content:XP.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:XP})).optional().meta(h),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(h),tokens_used:z.array(z.string()).optional().meta(h),status:z.enum(["draft","active","archived"]).meta(h),created_at:z.string().datetime().meta({...h,readOnly:true}),updated_at:z.string().datetime().meta({...h,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),oF=z.object({label:z.string().meta(h),path:FP.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),pT=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array(oF).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),gT=z.object({plan_ids:z.array(z.string()).meta(h),billing_cadences:z.array(z.string()).optional().meta(h),segment_chips:z.array(z.string()).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),lF=z.object({count:z.number().int().min(1).meta(h),period:z.enum(["session","day","week","month","lifetime"]).meta(h)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),hT=z.object({max_per_period:lF.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),cF=z.object({id:z.string().min(1).meta(h),target:gT.meta(h),surfaces:z.array(pT).meta(h),caps:hT.optional().meta(h),surface_slot_ids:z.array(z.string()).optional().meta(h),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(h),created_at:z.string().optional().meta({...h,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(h),recommendation_plan_override:z.string().optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),mF=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:po}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:po}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:po}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),uF=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt}),dF=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:uF.meta(h),trigger:mF.meta(h),payloads:z.array(cF).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),pF=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:gT.meta(h),caps:hT.optional().meta(h),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(h),created_at:z.string().meta({...h,readOnly:true}),updated_at:z.string().datetime().optional().meta({...h,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(h),surfaces:z.array(pT).optional().meta(h),surface_slot_ids:z.array(z.string()).optional().meta(h),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(h)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),gF=z.object({kind:z.string().min(1).meta(h),schema_version:z.number().int().nonnegative().meta(h),config:z.unknown().meta(h)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),hF=qn.merge(oT).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ds}),fF=qn.merge(lT).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ds}),_F=z.object({plans:z.array(VM).meta({...h,...Ot}),addons:z.array(BM).optional().meta({...h,...Gl}),entitlements:z.array(JM).meta({...h,...Ot}),entitlement_rules:z.array(ZM).meta({...h,...Ot}),segments:z.array(NM).meta({...h,...Ot}),content_ui_paths:z.array(rF).meta({...h,...Ot}),slot_configs:z.array(QM).optional().meta({...h,...Ot,...Pd({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...h,...Ot,...Pd({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...h,...kM,...Pd({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(XM).optional().meta({...h,...Ot}),message_blocks:z.array(sF).optional().meta({...h,...Ot}),placement_payloads:z.array(pF).optional().meta({...h,...Ot}),placements:z.array(dF).optional().meta({...h,...Ot}),content_promotions:z.array(aF).optional().meta({...h,...Ot}),personalization_tokens:z.array(iF).optional().meta({...h,...Ot}),surface_templates:z.array(tF).optional().meta({...h,...Ot}),free_trial_rules:z.array(hF).optional().meta({...h,...Gl}),reverse_trial_rules:z.array(fF).optional().meta({...h,...Gl}),plan_variations:z.array(zM).optional().meta({...h,...Gl}),addon_variations:z.array($M).optional().meta({...h,...Gl}),extension_rules:z.array(gF).optional().meta({...h,...Ot}),seat_types:z.array(KM).optional().meta({...h,...Ot}),enforcement_defaults:z.array(HM).optional().meta({...h,...Ot}),placement_settings:z.array(GM).optional().meta({...h,...Ot}),segment_dimensions:z.array(YM).optional().meta({...h,...Ot}),meter_bindings:z.array(WM).optional().meta({...h,...Ot}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...Ds}),signal_catalog:z.object({}).strict().optional().meta({...h,...Ds})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot}),yF=z.object({artifact_type:z.literal("playbook").meta({...h,...Nl,readOnly:true}),format_version:z.literal(AM).meta({...h,...Nl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Nl}),playbook_version_id:z.string().nullable().default(null).meta({...h,...pf,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...gf,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...gf,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...gf,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...pf,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Nl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Nl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...h,...Nl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...pf}),fT=yF.extend(_F.shape).meta({"x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot});function vF(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function _T(t){if(!vF(t))return t;let e={...t};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess(_T,fT).meta({id:"Playbook","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot});z.preprocess(_T,fT.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Lt,...Ot});({"/api/seat-type-anchors":{get:F({operationId:"listSeatTypeAnchors",requestParams:{query:un},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:mn(wM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:F({operationId:"listSeatTypes",requestParams:{query:un},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:mn(Pm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:F({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qr(Pm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Pm}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:F({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Pm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Pm}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:F({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:F({operationId:"listPersonalizationTokenAnchors",requestParams:{query:un},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:mn(jM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:F({operationId:"listPersonalizationTokens",requestParams:{query:un},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:mn(Tm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:F({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qr(Tm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Tm}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:F({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Tm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Tm}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:F({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:F({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Pa(hf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:hf}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:F({operationId:"listMeteringConfigs",requestParams:{query:un},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:mn(Im)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:F({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qr(Im)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Im}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:F({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Im.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Im}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:F({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:F({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:un},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:mn(qM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:F({operationId:"listUsageEnforcementSettings",requestParams:{query:un},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:mn(Cm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:F({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qr(Cm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cm}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:F({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cm}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:F({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:F({operationId:"listPlacementSettingsAnchors",requestParams:{query:un},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:mn(FM)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:F({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Pa(ff)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:ff}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var xF=["web-client"],SF=z.enum(xF),PF=["method","meta","component"],TF=z.enum(PF),IF=["ts","python","java","csharp","rust"];z.enum(IF);var CF=z.object({ts:z.string().min(1).optional(),python:z.string().min(1).optional(),java:z.string().min(1).optional(),csharp:z.string().min(1).optional(),rust:z.string().min(1).optional()}).strict(),EF=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:TF,appliesTo:z.array(SF).min(1),composes:z.string().min(1).optional(),perLanguage:CF.optional(),description:z.string().min(1)}).strict().refine(t=>t.kind!=="meta"||t.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),kF=z.object({version:z.number().int().positive(),functions:z.array(EF).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let a of [r.canonical,...r.aliases]){let i=n.get(a);i!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${a}" (also on "${i}")`,path:["functions"]}),n.set(a,r.canonical);}});kF.parse({version:3,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client"],description:"Check whether the user is entitled to a feature/handle; returns the rich EntitlementResult (allowed, status, reason, limits, enforcement)."},{canonical:"gate",aliases:[],kind:"meta",appliesTo:["web-client"],composes:"checkEntitlement",description:"Gate an action behind an entitlement: checks the handle, runs fn when allowed, otherwise returns the entitlement so the caller can surface a paywall."},{canonical:"trackEvent",aliases:["track"],kind:"method",appliesTo:["web-client"],description:"Emit a product/analytics event powering frequency caps, attribution, and experiments."},{canonical:"updateUsage",aliases:["update"],kind:"method",appliesTo:["web-client"],description:"Patch customer-reported usage balances for client-side metering display (the advertised update({ usage }) verb)."},{canonical:"resetIdentity",aliases:["reset"],kind:"method",appliesTo:["web-client"],description:"Clear the current user and revert to the anonymous identity (e.g. on sign-out)."},{canonical:"identify",aliases:[],kind:"method",appliesTo:["web-client"],description:"Associate the session with a known user id and optional traits/context."},{canonical:"getPlacement",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a single placement decision for a surface."},{canonical:"getPlacementDecision",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a placement decision from an explicit decision input (headless)."},{canonical:"SurfaceSlotComponent",aliases:["Slot","RTSlot"],kind:"component",appliesTo:["web-client"],description:"React slot component that renders the resolved placement; advertised as <Slot> (<RTSlot> is the deprecated prior name)."},{canonical:"AccessGateSurfaceSlot",aliases:["Gate"],kind:"component",appliesTo:["web-client"],description:"React component that gates content behind an entitlement, rendering an upsell placement when denied; advertised as <Gate>."}]});var RF=[{from:"entitlement_rules",field:"targets[].id",to:"plans",by:"unique_handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"plan",note:"Entry-level; a rule losing its last target is swept whole (targets.min(1))."},{from:"entitlement_rules",field:"targets[].id",to:"addons",by:"unique_handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"addon",note:"Entry-level; a rule losing its last target is swept whole (targets.min(1))."},{from:"entitlement_rules",field:"targets[].id",to:"plan_variations",by:"handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"plan_variation",note:"Variation-level targeting is dead per the plan-125 audit; declared for kind-enum totality."},{from:"entitlement_rules",field:"targets[].id",to:"addon_variations",by:"handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"addon_variation",note:"Variation-level targeting is dead per the plan-125 audit; declared for kind-enum totality."},{from:"plan_variations",field:"plan_handle",to:"plans",by:"unique_handle",kind:"one",onDelete:"cascade",resolution:"playbook"},{from:"addon_variations",field:"addon_handle",to:"addons",by:"unique_handle",kind:"one",onDelete:"cascade",resolution:"playbook"},{from:"plan_variations",field:"segment_handle",to:"segments",by:"handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"Detach would silently widen variation availability \u2014 restrict pending Q-1 ratification."},{from:"addon_variations",field:"segment_handle",to:"segments",by:"handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"Detach would silently widen variation availability \u2014 restrict pending Q-1 ratification."},{from:"free_trial_rules",field:"plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:'null means "All plans" and never blocks.'},{from:"free_trial_rules",field:"convert_to_plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook"},{from:"free_trial_rules",field:"fallback_plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook"},{from:"reverse_trial_rules",field:"premium_plan_id",to:"plans",by:"unique_handle",kind:"one",onDelete:"restrict",resolution:"playbook"},{from:"reverse_trial_rules",field:"fallback_plan_id",to:"plans",by:"unique_handle",kind:"one",onDelete:"restrict",resolution:"playbook"},{from:"placements",field:"trigger.entitlement_handle",to:"entitlements",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"entitlement_gate / usage_threshold / credit_threshold / seat_threshold trigger variants."},{from:"placements",field:"trigger.slot_id",to:"placement_slots",by:"id",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"surface_render trigger variant."},{from:"placement_payloads",field:"target.segment_chips[]",to:"segments",by:"handle",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry",note:"Chip resolution falls back segment \u2192 plan \u2192 literal; stale chips degrade to literals."},{from:"placement_payloads",field:"target.segment_chips[]",to:"plans",by:"unique_handle",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry",note:"Chip resolution falls back segment \u2192 plan \u2192 literal; stale chips degrade to literals."},{from:"placement_payloads",field:"surface_slot_ids[]",to:"placement_slots",by:"id",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry"},{from:"customer_overrides",field:"plan_handle",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Grant-Plan overrides (Q-1 restrict class)."},{from:"subscriptions",field:"variation_handle",to:"plan_variations",by:"handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Active-subscriber variations (Q-1 restrict class)."},{from:"subscriptions",field:"variation_handle",to:"addon_variations",by:"handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Active-subscriber add-on variations (Q-1 restrict class)."}];function AF(){let t=[];for(let[e,n]of Object.entries(JP))for(let[r,a]of Object.entries(n.fields)){let i=a.reference;if(i){if(!i.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${i.table} has no onDelete policy`);t.push({from:e,field:r,to:i.table,by:i.by,kind:i.kind,onDelete:i.onDelete,resolution:"playbook"});}}return t}function wF(t){return [...t].sort((e,n)=>e.from.localeCompare(n.from)||e.field.localeCompare(n.field)||e.to.localeCompare(n.to)||(e.targetKind??"").localeCompare(n.targetKind??""))}Object.freeze(wF([...AF(),...RF]));
|
|
2
|
-
export{
|
|
1
|
+
import {z}from'zod';var HT=Object.defineProperty;var GT=(t,e,n)=>e in t?HT(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var j=(t,e,n)=>GT(t,typeof e!="symbol"?e+"":e,n);function YT(){try{return "production"}catch{return}}function WT(){try{return typeof process<"u"}catch{return false}}function Vs(){let t=YT();if(t!==void 0)return t!=="production";if(WT())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}var Lm="1.0.0",Ff=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],JT=["slot_configs","content_overrides"];function ZT(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function QT(t,e){if(!Vs())return;let n=JT.filter(r=>r in t);n.length!==0&&console.warn(`[RevTurbine] ${e} uses deprecated Playbook projection(s): ${n.join(", ")}. Move activation/triggers to local runtime state and content to Message Blocks/Placement Payloads.`);}function XT(t,e){for(let n of Ff)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function eI(t){return t.artifact_type==="playbook"&&t.format_version===Lm&&typeof t.playbook_handle=="string"&&t.playbook_handle.length>0&&(t.playbook_version_id===null||typeof t.playbook_version_id=="string")&&typeof t.tenant_id=="string"&&t.tenant_id.length>0&&typeof t.environment_id=="string"&&t.environment_id.length>0&&Ff.every(e=>Array.isArray(t[e]))}function tI(t){return (t.project_id===void 0||typeof t.project_id=="string"&&t.project_id.length>0)&&(t.exported_at===void 0||typeof t.exported_at=="string")&&(t.schema_version===void 0||typeof t.schema_version=="string"&&t.schema_version.length>0)&&(t.bundle_schema_version===void 0||Number.isInteger(t.bundle_schema_version)&&Number(t.bundle_schema_version)>=0)}function Lf(t,e,n){if(t===void 0)return;if(!ZT(t))throw new Error(`Invalid ${e}: expected top-level object`);QT(t,e),XT(t,e);let r="artifact_type"in t||"format_version"in t;if(r&&t.artifact_type!=="playbook")throw new Error(`Invalid ${e}: unsupported "artifact_type"`);if(r&&t.format_version!==Lm)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==Lm)throw new Error(`Invalid ${e}: unsupported legacy "version" ${String(t.version)}`);let a=typeof t.tenant_id=="string"&&t.tenant_id.length>0?t.tenant_id:r?void 0:n?.tenantId,i=typeof t.environment_id=="string"&&t.environment_id.length>0?t.environment_id:r?void 0:n?.environmentId;if(!a)throw new Error(`Invalid ${e}: missing non-empty string "tenant_id"`);if(!i)throw new Error(`Invalid ${e}: missing non-empty string "environment_id"`);if(t.playbook_handle!==void 0&&(typeof t.playbook_handle!="string"||t.playbook_handle.length===0))throw new Error(`Invalid ${e}: malformed "playbook_handle"`);if(!tI(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:s,change_set_id:u,...y}=t,k=r?t.playbook_version_id??null:u??null,I={...y,artifact_type:"playbook",format_version:Lm,playbook_handle:t.playbook_handle??"default",playbook_version_id:k,tenant_id:a,environment_id:i};if(!eI(I))throw new Error(`Invalid ${e}: malformed Playbook header`);return I}function zi(t,e,n){return Lf(t,e,n)}var Kd=864e5,nI=75;function Nf(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function rI(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=nI?"running_out":"active"}function aI(t,e,n){let r=Math.max(0,e-t),a=Math.max(0,n-t),i=Math.max(0,e-n),s=Math.max(1,Math.round(r/Kd)),u=Math.min(s,Math.floor(a/Kd)),y=Math.max(0,Math.ceil(i/Kd)),k=Math.min(100,Math.max(0,a/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:u,daysRemaining:y,daysTotal:s,progressPercent:k}}function iI(t,e){let n=Math.max(1,e),r=Math.max(0,t),a=Math.max(0,n-r),i=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:a,usageLimit:n,progressPercent:i}}function Nm(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:a,usageBalances:i}=t,s=Date.parse(e.started_at),u=Date.parse(r);if(Number.isNaN(s)||Number.isNaN(u)||e.status==="not_started"||u<s)return;let y=e.trial_limit_type??"time",k=0,I=false,w,O,R,A,U,oe;if(y==="usage"){let J=e.usage_entitlement_handle??(n&&"usage_entitlement_handle"in n?n.usage_entitlement_handle:void 0),ot=e.usage_limit_value??(n&&"usage_limit_value"in n?n.usage_limit_value:void 0);if(typeof J!="string"||typeof ot!="number"||ot<1)return;let Pn=i?.[J]??0,An=iI(Pn,ot);k=An.progressPercent,I=An.isExpiredByBounds,R=An.usageConsumed,A=An.usageRemaining,U=An.usageLimit,oe=J;}else {let J=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(J))return;let ot=aI(s,J,u);k=ot.progressPercent,I=ot.isExpiredByBounds,w=ot.dayNumber,O=ot.daysRemaining;}let Z=Nf(e.status,I),_e=rI(Z,k),De;e.rule_type==="reverse_trial"?De=a:e.rule_type==="free_trial"&&n&&"plan_id"in n&&typeof n.plan_id=="string"&&(De=n.plan_id);let ne=e.rule_type==="reverse_trial"?"reverse":"free";return {in_trial:Z==="active",trial_type:ne,...De!==void 0?{plan_handle:De}:{},state:_e,trial_limit_type:y,progress_percent:k,...w!==void 0?{day_number:w}:{},...O!==void 0?{days_remaining:O}:{},...oe!==void 0?{usage_entitlement_handle:oe}:{},...R!==void 0?{usage_consumed:R}:{},...A!==void 0?{usage_remaining:A}:{},...U!==void 0?{usage_limit:U}:{}}}function Vf(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let a,i=-1/0;for(let s of t){let u=Date.parse(s.started_at);if(Number.isNaN(u)||r<u)continue;let y=false;if((s.trial_limit_type??"time")==="usage")n&&typeof s.usage_entitlement_handle=="string"&&typeof s.usage_limit_value=="number"&&(y=(n[s.usage_entitlement_handle]??0)>=s.usage_limit_value);else if(s.expires_at){let I=Date.parse(s.expires_at);Number.isNaN(I)||(y=r>=I);}let k=Nf(s.status,y);k!=="active"&&k!=="converted"||u>i&&(a=s,i=u);}return a}function $d(t,e){return t.rule_type!=="reverse_trial"||t.rule_id!==e.id||!e.entitlements_during_trial||e.entitlements_during_trial.length===0?null:{trialGrantedEntitlementHandles:new Set(e.entitlements_during_trial),effectivePlanHandle:e.premium_plan_id}}function Hd(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,a=-1/0;for(let i of t){if(i.status!=="active"&&i.status!=="expired"&&i.status!=="converted")continue;let s=Date.parse(i.started_at);Number.isNaN(s)||n<s||s>a&&(r=i,a=s);}return r}function Vm(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:a,usageBalances:i,basePlanHandle:s}=t,u=Hd(r,a);if(!u)return {trial:void 0,reverseGrants:null};if(u.rule_type==="reverse_trial"){let I=(n??[]).find(R=>R.id===u.rule_id),w=Nm({instance:u,...I!==void 0?{rule:I}:{},nowIso:a,...s!==void 0?{basePlanHandle:s}:{},...i!==void 0?{usageBalances:i}:{}}),O=I!==void 0?$d(u,I):null;return {trial:w,reverseGrants:O}}let y=(e??[]).find(I=>I.id===u.rule_id);return {trial:Nm({instance:u,...y!==void 0?{rule:y}:{},nowIso:a,...s!==void 0?{basePlanHandle:s}:{},...i!==void 0?{usageBalances:i}:{}}),reverseGrants:null}}function xe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function ac(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function ar(...t){for(let e of t)if(typeof e=="string"&&e.trim().length>0)return e}function In(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"){let e=Number(t);return Number.isFinite(e)?e:null}return null}function xo(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function Gd(t,e){return String(t||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function ic(t){let e=String(t||"").trim().toLowerCase().replace(/\s+/g,"_").replace(/-+/g,"_");if(!e)return "unknown_event";switch(e){case "pageview":case "page_view":return "clickstream_page_view";case "click":return "clickstream_click";case "doc_view":return "clickstream_doc_view";case "checkout_started":return "clickstream_checkout_started";case "checkout_completed":return "clickstream_checkout_completed";case "payment_failed":return "clickstream_payment_failed";default:return e}}function Yd(t){if(!xe(t))return null;let e=Number(t.count),n=typeof t.period=="string"?t.period:"";return !Number.isFinite(e)||e<=0||n!=="session"&&n!=="day"&&n!=="week"&&n!=="month"&&n!=="lifetime"?null:{count:e,period:n}}function Wd(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function Bf(t){let e=t.trim().toLowerCase();return e?e==="starter"||e==="free"?["starter","free"]:e==="professional"||e==="pro"?["professional","pro"]:e==="enterprise"?["enterprise"]:[e]:[]}function zf(t){let e=t,n=xe(e.target)?e.target:void 0,r=Array.isArray(n?.plan_ids)?n.plan_ids.filter(s=>typeof s=="string"):[];if(r.length>0)return r;let a=xe(t.content)?t.content:{};return Array.isArray(a.__target_plan_ids)?a.__target_plan_ids.filter(s=>typeof s=="string"):[]}function Jd(t,e){let n=zf(t);if(n.length===0||!e)return true;let r=Bf(e);return r.length===0?true:n.some(a=>{let i=a.toLowerCase();return r.some(s=>i===s||i.endsWith(`_${s}`)||i.includes(s))})}function Zd(t,e){if(e.length===0)return null;let n=[...e].sort((a,i)=>a.tier_position!==i.tier_position?a.tier_position-i.tier_position:a.sort_order!==i.sort_order?a.sort_order-i.sort_order:a.source_id.localeCompare(i.source_id)),r=n.findIndex(a=>a.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function So(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function Qd(t){return t.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function Xd(t){return t==="minutes"||t==="minute"||t==="credits"||t==="credit"||t==="seats"||t==="seat"||t==="units"||t==="unit"}function vi(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t))xe(r)&&typeof r.amount=="number"?e[n]=r.amount:typeof r=="number"&&(e[n]=r);return e}function Bm(t){if(typeof t.plan_handle=="string"&&t.plan_handle.trim().length>0)return t.plan_handle.trim();if(typeof t.plan=="string"&&t.plan.trim().length>0)return t.plan.trim();if(xe(t.plan)&&typeof t.plan.handle=="string"&&t.plan.handle.trim().length>0)return t.plan.handle.trim()}function Bs(t,e){if(!t||!Array.isArray(t.plans))return;let n;if(typeof e=="string"&&e.trim().length>0&&(n=e.trim()),!n)return;let r=n.toLowerCase();for(let a of t.plans){if(!xe(a))continue;if((typeof a.unique_handle=="string"?a.unique_handle.toLowerCase():"")===r){let s=typeof a.name=="string"?a.name.trim():"";if(s.length>0)return s}}}function zm(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function us(t){let e=String(t||"").trim().toLowerCase();return e?e.includes("gated")||e.includes("entitlement")?0:e.includes("fixed")?1:e.includes("usage")||e.includes("credit")||e.includes("seat")||e.includes("quota")||e.includes("trial")?2:e.includes("conversion")||e.includes("expansion")||e.includes("upsell")||e.includes("retention")||e.includes("winback")||e.includes("churn")?4:99:99}function sc(t){let e=t,n=xe(t.content)?t.content:{};return [In(e.score),In(e.ltv_propensity_score),In(n.score),In(n.ltv_propensity_score),In(n.ranking_score)].find(a=>a!==null)??0}function Km(t){let e=t,n=xe(t.content)?t.content:{};return [In(e.priority),In(e.placement_priority),In(n.priority),In(n.placement_priority)].find(a=>a!==null)??0}function ep(t){let e=xe(t.content)?t.content:{};return [In(e.usage_percent),In(e.trial_percent_elapsed),In(e.threshold_percent)].find(r=>r!==null)??sc(t)}var sI=new Set(["trial_started","trial_ended","trial_converted"]),oI=new Set(["trial_progress","trial_ending"]);function tp(t){let e=xe(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&sI.has(n))return 1;if(n&&oI.has(n))return 3;let r=[In(e.usage_percent),In(e.threshold_percent)].find(a=>a!==null);return r!=null&&r>=100?2:3}function oc(t){let e=t,n=xe(t.content)?t.content:{};return [In(e.server_order),In(e.order),In(e.rank),In(e.order_index),In(n.server_order),In(n.order),In(n.rank),In(n.order_index)].find(a=>a!==null)??null}function np(t){let e=xe(t.content)?t.content:{},n=e.template_version;if(typeof n=="string"&&n.trim().length>0)return n.trim();let r=In(n);if(r!==null)return String(r);let a=e.milestone_version;if(typeof a=="string"&&a.trim().length>0)return a.trim();let i=In(a);return i!==null?String(i):null}function rp(t){let n=(xe(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(a=>typeof a=="string"?a.trim():In(a)).filter(a=>a!==null&&a!=="").map(a=>String(a));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=In(n);return r!==null?[String(r)]:[]}function rc(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>rc(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${rc(r)}`).join(",")}}`}function ap(t){return xe(t)?{in_trial:typeof t.in_trial=="boolean"?t.in_trial:false,...typeof t.trial_type=="string"?{trial_type:t.trial_type}:{},...typeof t.plan_handle=="string"?{plan_handle:t.plan_handle}:{},...typeof t.day_number=="number"?{day_number:t.day_number}:{},...typeof t.days_remaining=="number"?{days_remaining:t.days_remaining}:{}}:{in_trial:false}}var cI=/^[a-z0-9._]{1,100}$/,ds={Persisted:"persisted",Transient:"transient"},bi={Internal:"internal",External:"external"},oi={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},mI="readOnly";function Sa(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[mI]===true||(e[n]=r);}return z.object(e)}function Hr(t){let e=Sa(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(cI)}):e}var {Unrestricted:oa}=oi,{Transient:la,Persisted:dI}=ds,{Internal:zs,External:Ki}=bi;z.object({page:z.coerce.number().int().min(1).default(1).meta(oa),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(oa)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki});var Bn=z.object({created_at:z.string().datetime().meta({...oa,readOnly:true}),updated_at:z.string().datetime().meta({...oa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki}),Mn=z.object({id:z.string().min(1).meta({...oa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki}),zn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...oa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":zs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki});var $m=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki}),$f=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki});var Hm=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki}),Hf=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":zs});var $i=z.string().min(1).max(200),_r=z.string().min(1).max(100),Gm=z.string().max(500).optional(),Aa=z.record(z.string(),z.unknown()).default({}),Ks=z.number().int().min(10).max(100).multipleOf(10),Ym=z.string().datetime().nullable().default(null),mr=z.object({environment_id:z.string().min(1).default("production").meta({...oa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":zs}),yr=z.object({playbook_version_id:z.string().nullable().default(null).meta(oa),is_current:z.boolean().default(true).meta({...oa,readOnly:true}),is_deleted:z.boolean().default(false).meta({...oa,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...oa,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...oa,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...oa,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":zs}),pI=Mn.merge(Bn).merge(zn).merge(mr).extend({handle:_r.meta({...oa,readOnly:true}),active:z.boolean().default(true).meta({...oa,readOnly:true})});function Gr(t){return pI.meta({id:t,"x-revturbine-schema-persistence":dI,"x-revturbine-schema-exposure":zs})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":zs});z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":zs});var Gf=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ki});var gI=new Set($m.options);function Wm(t,e){if(!xe(t))return null;let n=typeof t.output_id=="string"?t.output_id:"";if(!n)return null;let r=xe(t.surface)?t.surface:{},a=gI.has(r.type)?r.type:"custom",i=xe(t.cta_path)?t.cta_path:xe(t.ui_path)?t.ui_path:{};return {output_id:n,category:typeof t.category=="string"?t.category:"unknown",surface:{...typeof r.template=="string"?{template:r.template}:{},type:a,...typeof r.slot_id=="string"?{slot_id:r.slot_id}:{}},content:xe(t.content)?t.content:{},...xe(t.promotion)?{promotion:t.promotion}:{},cta_path:i,ui_path:i,rule_id:typeof t.rule_id=="string"?t.rule_id:"",decision_id:typeof t.decision_id=="string"?t.decision_id:e(),config_version:typeof t.config_version=="string"?t.config_version:"unknown",present_upsell:typeof t.present_upsell=="boolean"?t.present_upsell:false}}var hI="__no_dim__";function Jf(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),a=new Map;for(let i of t){let s=n(i)??hI,u=a.get(s)??[];u.push(i),a.set(s,u);}for(let i of a.values())if(!i.some(s=>r.has(s)))return false;return true}var fI=999999;function _I(t){return t==null||t==="unlimited"||t===fI}function lc(t){return _I(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function yI(t,e){switch(t.kind){case "plan":return e.currentPlanId!=null&&t.id===e.currentPlanId||e.currentPlanHandle!=null&&t.id===e.currentPlanHandle;case "plan_variation":return e.currentPlanVariationId!=null&&t.id===e.currentPlanVariationId;case "addon":return e.addonIds?.includes(t.id)??false;case "addon_variation":return e.addonVariationIds?.includes(t.id)??false;default:return false}}function Zf(t,e,n){return t.map(r=>{let a=r.targets!=null&&r.targets.length>0?r.targets.some(s=>yI(s,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),i=Jf(r.segmentIds,e.segmentIds,s=>n?.[s]);return {rule:r,matchesPlan:a,matchesSegment:i,matched:a&&i}})}function Qf(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return lc(e.limit_value)??0;case "credits":return lc(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return lc(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function Xf(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let a of t){let i=e(a);(n===void 0||i>r)&&(n=a,r=i);}return n}function vI(t){return Xf(t,e=>Qf(e.rule))?.rule}function ip(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let a=Zf(r,n,t.segmentDimensions);return vI(a.filter(i=>i.matched))}function bI(t){let e=t.segment_ids;if(Array.isArray(e))return e.filter(r=>typeof r=="string");let n=t.segment_id??t.segmentId;return typeof n=="string"&&n!=="all"?[n]:[]}function xI(t,e,n){let r=new Map;for(let a of n)typeof a.handle=="string"&&r.set(a.handle,typeof a.dimension_id=="string"?a.dimension_id:void 0);return Jf(bI(t),e,a=>r.get(a))}function Yf(t,e,n){if(!t)return {status:"allowed",allowed:true};switch(e){case "hard_block":return {status:"denied",allowed:false,reason:n};case "block_with_upsell":case "soft_block":return {status:"denied",allowed:false,reason:`${n}_block_with_upsell`};case "degrade":return {status:"limited",allowed:true,reason:`${n}_degraded`};case "allow_overage":return {status:"allowed",allowed:true,reason:`${n}_overage`};default:return {status:"limited",allowed:false,reason:n}}}function cc(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:a,segmentIds:i,usageBalances:s,userUsage:u,trialGrantedEntitlementHandles:y,effectivePlanHandle:k}=t,w=(r.entitlements??[]).find(lt=>typeof lt?.unique_handle=="string"&<.unique_handle===e),O=typeof w?.unique_handle=="string"?w.unique_handle:e,R=typeof w?.unique_handle=="string"?w.unique_handle:void 0,A=!!(y&&y.size>0&&(y.has(e)||y.has(O)||R!==void 0&&y.has(R)));if(A&&(k===void 0||k===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let oe=String((A&&k?k:a)||"").trim().toLowerCase(),_e=(r.plans??[]).find(lt=>typeof lt.unique_handle=="string"&<.unique_handle.toLowerCase()===oe),De=typeof _e?.unique_handle=="string"?_e.unique_handle:oe||void 0;if(De===void 0)return {status:"denied",allowed:false,reason:"no_plan_identity"};let J=(r.entitlement_rules??[]).filter(lt=>!((typeof lt.entitlement_id=="string"?lt.entitlement_id:typeof lt.entitlementId=="string"?lt.entitlementId:"")!==O||!(Array.isArray(lt.targets)?lt.targets.filter(Jn=>xe(Jn)&&Jn.kind==="plan"&&typeof Jn.id=="string").map(Jn=>Jn.id):Array.isArray(lt.plan_ids)?lt.plan_ids.filter(Jn=>typeof Jn=="string"):Array.isArray(lt.planIds)?lt.planIds.filter(Jn=>typeof Jn=="string"):[]).includes(De)||!xI(lt,i,r.segments??[])));if(J.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let ot=(()=>{let lt=(r.entitlements??[]).find(Nn=>Nn.unique_handle===O);return lt&&typeof lt.type=="string"?lt.type:void 0})(),Pn=lt=>{let Nn=xe(lt)?lt:{},Jn={...xe(Nn.type_fields)?Nn.type_fields:xe(Nn.typeFields)?Nn.typeFields:{},...Nn};return typeof Jn.kind!="string"&&ot&&(Jn.kind=ot),Jn},An=Xf(J,lt=>{let Nn=Pn(lt);return Qf({kind:typeof Nn.kind=="string"?Nn.kind:"",fields:Nn})})??J[0],be=Pn(An);typeof be.kind=="string"?be.kind:void 0;let gn=lt=>{let Nn=u?.[lt];if(xe(Nn)&&typeof Nn.amount=="number")return Nn.amount},wn=n?.used??(Number.isFinite(s[e])?s[e]:void 0)??(Number.isFinite(s[O])?s[O]:void 0)??gn(e)??gn(O)??0;return Jm(be,wn)}function Wf(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function e_(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function Jm(t,e){let n=typeof t.kind=="string"?t.kind:void 0;if(n==="feature"){let r=t.enabled!==false;return {status:r?"allowed":"denied",allowed:r,reason:r?void 0:"feature_not_enabled_for_plan"}}if(n==="usage_limit"||n==="limit"){let r=lc(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?Wf(Yf(e>=r,t.enforcement,"usage_limit_reached"),r,e):{status:"allowed",allowed:true}}if(n==="credits"){let r=t.allowance_value!==void 0?t.allowance_value:t.allowance,a=r===void 0?void 0:lc(r),i=Number(t.initial_grant),s=a!==void 0&&a>=0?a:Number.isFinite(i)&&i>=0?i:void 0;return s!==void 0&&Number.isFinite(s)?Wf(Yf(e>=s,t.enforcement,"credit_balance_exhausted"),s,e):{status:"allowed",allowed:true}}if(n==="capability_tier"){let r=typeof t.tier_name=="string"?t.tier_name:void 0;return {status:"allowed",allowed:true,...r?{current_tier:r}:{}}}return {status:"allowed",allowed:true}}function sp(t,e,n,r,a=80){let i=e.get(t);if(i)return i;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let u=Number(r[t]);if(u>0)return {limit:u,warningPercent:a}}return null}var SI=0;function PI(){return `core_${Date.now()}_${++SI}`}function t_(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var op=class{constructor(t){this.registry=t.registry,this.interactionTracker=t.interactionTracker,this.capEnforcer=t.capEnforcer,this.options=t.options??{},this.placements=t.placements??new Map,this.placementResolver=t.placementResolver;}async evaluate(t){let e=PI(),n=this.placements.get(t.placementId);if(this.interactionTracker){let i=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(i.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:i.reason?[i.reason]:[],suppressionReason:i.reason,content:t_(`${n?.name??t.placementId} suppressed`,"Suppressed due to recent interaction state.","Continue")}}let a={__providers:await this.registry.resolveAll()};if(t.traits&&(a.traits=t.traits),this.placementResolver){let i=await this.placementResolver(t,n,a);if(i.visible&&i.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let s=this.capEnforcer.enforce(i.output);if(!s.allowed)return {...i,visible:false,reasonCodes:[...i.reasonCodes,s.reason??"suppressed_by_cap"],suppressionReason:s.reason}}return i}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:t_("No resolver","No placement resolver configured.","")}}async evaluateBatch(t){return Promise.all(t.map(e=>this.evaluate(e)))}async checkEntitlement(t,e){let n=await this.registry.resolveAll();return this.deriveEntitlementResult(t,n,e)}trackInteraction(t){this.interactionTracker?.track(t);}async resolveProviders(){return this.registry.resolveAll()}deriveEntitlementResult(t,e,n){let r=this.options.defaultEntitlementPolicy??"allow",a=e.entitlements;if(!a)return r==="allow"?{status:"allowed",allowed:true,reason:"no_entitlement_provider"}:{status:"denied",allowed:false,reason:"no_entitlement_provider_default_deny"};let i=a.entries[t];if(!i)return r==="allow"?{status:"allowed",allowed:true,reason:"entitlement_not_found_default_allow"}:{status:"denied",allowed:false,reason:"entitlement_not_found_default_deny"};let s=a.usage?.[t];if(e.rules){let u=ip(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(u){let y={kind:u.kind,...u.fields};if(e_(y.kind))return Jm(y,n?.used??s?.used??0)}else return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"}}return s&&n?.used!==void 0&&s.limit>0&&n.used>=s.limit?{status:"denied",allowed:false,reason:"usage_limit_exceeded",limit:s.limit,used:n.used,remaining:Math.max(0,s.limit-n.used)}:{status:i.status,allowed:i.status==="allowed",reason:i.reason,limit:s?.limit,used:s?.used,remaining:s?.remaining}}};var n_=["high","medium","low"];function mc(t,e){return t==="active"?n_.includes(e):t===e}var II="activity_level";function r_(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),a=t.value,i=t.field===II;switch(t.operator){case "eq":return i?mc(a,r):r===a;case "neq":return i?!mc(a,r):r!==a;case "gt":return Number(r)>Number(a);case "lt":return Number(r)<Number(a);case "gte":return Number(r)>=Number(a);case "lte":return Number(r)<=Number(a);case "contains":return r.includes(a);case "in":{let s=a.split(",").map(u=>u.trim());return i?s.some(u=>mc(u,r)):s.includes(r)}default:return false}}function uc(t,e,n={}){return t.filter(r=>{let a=!!(r.predicates&&r.predicates.length>0),i=r.experiment_handle??r.experiment_id;if(i){if(!Object.prototype.hasOwnProperty.call(n,i))return false;if(!a)return true}else if(!a)return false;return r.predicates.every(s=>r_(s,e))}).map(r=>r.handle)}function a_(t){let e={};for(let n of t){let r=n.experiment_handle??n.experiment_id;r&&(e[n.handle]=r);}return e}function i_(t,e,n={}){for(let r of e){let a=t[r];if(!a)continue;let i=n[a];if(typeof i=="string")return {experiment_id:a,variant_key:i}}}function lp(t,e){let n=String(t.field||""),r=String(t.operator||""),a=String(t.value||""),i=e[n],s=typeof i=="string"||typeof i=="number"||typeof i=="boolean"?i:null,u=r_(t,e);return {field:n,operator:r,expected:a,actual:s,matched:u}}function Zm(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function dc(t){let e=2166136261;for(let a=0;a<t.length;a+=1)e^=t.charCodeAt(a),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);let n=new Uint8Array(8),r=new DataView(n.buffer);return r.setUint32(0,e>>>0),r.setUint32(4,e*1103515245>>>0),Zm(n)}var cp={async sha256Base64Url(t){return dc(t)},randomHex(t){let e="0123456789abcdef",n="";for(let r=0;r<t;r+=1)n+=e[Math.floor(Math.random()*16)];return n}};function Qm(t){if(t===null)return "null";if(typeof t=="number"){if(!Number.isFinite(t))throw new Error(`canonicalizeJson: non-finite number ${t} not representable in JSON`);return JSON.stringify(t)}if(typeof t=="string"||typeof t=="boolean")return JSON.stringify(t);if(Array.isArray(t))return "["+t.map(e=>Qm(e)).join(",")+"]";if(typeof t=="object"){let e=Object.getPrototypeOf(t);if(e!==Object.prototype&&e!==null)throw new Error(`canonicalizeJson: unsupported object ${t.constructor?.name??"instance"} \u2014 convert to a plain JSON value before canonicalizing`);let n=t,r=Object.keys(n).sort(),a=[];for(let i of r){let s=n[i];s!==void 0&&a.push(JSON.stringify(i)+":"+Qm(s));}return "{"+a.join(",")+"}"}throw new Error(`canonicalizeJson: unsupported value type ${typeof t}`)}function pc(t){return Qm(t)}var s_=z.enum(["session","day","week","month"]),o_=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(o_),cap:z.object({count:z.number().int().min(1),period:s_})});function CI(t,e){switch(t){case "session":case "lifetime":return 0;case "day":return e-1440*60*1e3;case "week":return e-10080*60*1e3;case "month":return e-720*60*60*1e3;default:return 0}}function c_(t,e){return `${t}:${e}`}function gc(t){let{now:e}=t;if(t.sessionCooldownMinutes!=null&&t.sessionCooldownMinutes>0&&t.lastSessionPresentationAt!=null&&e-t.lastSessionPresentationAt<t.sessionCooldownMinutes*6e4)return {allowed:false,reason:"session_cooldown"};if(t.rules&&t.candidate){let n=t.candidate,r=t.counters??new Map;for(let a of t.rules){if(!a.group.some(y=>y.kind==="template"?y.id===n.templateId:y.kind==="slot"?y.id===n.slotId:false))continue;let s=c_(a.id,a.cap.period);if((r.get(s)??0)>=a.cap.count)return {allowed:false,reason:"cap_hit",matchedRuleId:a.id}}}if(t.perPayload){let{policies:n,seenAt:r,cooldownUntil:a}=t.perPayload;if(a!=null&&Number.isFinite(a)&&a>e)return {allowed:false,reason:"suppressed_by_payload_cooldown"};for(let i of n)for(let s of i.rules){let u=CI(s.period,e);if(r.filter(k=>k>=u&&k<=e).length>=s.count)return {allowed:false,reason:`suppressed_by_payload_cap_${s.period}`}}}return {allowed:true}}z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});function mp(t,e){return t.target_plan_ids.length>0&&e.currentPlanId&&!t.target_plan_ids.includes(e.currentPlanId)?{eligible:false,reason:"plan_mismatch"}:t.target_billing_periods.length>0&&e.billingPeriod&&!t.target_billing_periods.includes(e.billingPeriod)?{eligible:false,reason:"billing_period_mismatch"}:(t.category==="upsell"||t.category==="trial_conversion")&&e.planHandle==="enterprise"?{eligible:false,reason:"enterprise_upsell_suppressed"}:{eligible:true}}var m_={Named:"named",Minted:"minted"},u_="x-revturbine-schema-identity";function li(t="handle"){return {[u_]:{kind:m_.Named,handleField:t}}}function ci(t="handle"){return {[u_]:{kind:m_.Minted,handleField:t}}}var yn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ma={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},kI="x-revturbine-context",RI="x-revturbine-in-config",AI="x-revturbine-sdk-input",wI="x-revturbine-source",jI="x-revturbine-deprecation",OI={[yn.Playbook]:Ma.Customer,[yn.Branding]:Ma.Customer,[yn.Billing]:Ma.Stripe,[yn.Metering]:Ma.Customer,[yn.CustomerOperations]:Ma.Runtime,[yn.EventIngestion]:Ma.Runtime};function Zn(t,e){return {[kI]:t,[RI]:e.inConfig??t===yn.Playbook,[AI]:e.sdkInput,[wI]:e.source??OI[t]}}function Xm(t){return {deprecated:true,[jI]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var sn=t=>z.object({items:z.array(t)}),ir=z.object({error:z.string(),code:z.string(),request_id:z.string()}),M=t=>t,on=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()});async function dp(t,e){let n=xo(t.pageRoute),r=[t.tenantId,n,t.placementName.trim().toLowerCase(),String(t.placementScopeKey||"").trim().toLowerCase()].join("::");if(e)try{return (await e.sha256Base64Url(r)).slice(0,22)}catch{}return dc(r).slice(0,22)}function pp(t){return [t.slotId||"",t.surfaceType||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function gp(t){let e=pc({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:xo(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${dc(e)}`}function y_(t){if(t.length<=1)return t;let e=new Set;for(let r of t){let a=r.surface.template;if(!a)continue;let i=rp(r);if(i.length!==0)for(let s of t){if(s.output_id===r.output_id||s.surface.template!==a)continue;let u=np(s);u&&i.includes(u)&&e.add(s.output_id);}}let n=new Map;for(let r of t){if(!r.surface.template)continue;let a=n.get(r.surface.template)??[];a.push(r),n.set(r.surface.template,a);}for(let r of n.values()){if(r.length<=1)continue;let a=r.map(s=>{let u=xe(s.content)?s.content:{};return {output:s,order:In(u.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(s=>Number.isFinite(s.order));if(a.length<=1)continue;let i=a.reduce((s,u)=>u.order>s.order?u:s);for(let s of a)s.output.output_id!==i.output.output_id&&e.add(s.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function d_(t){let n=(xe(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function qI(t,e,n){if(n===1){let r=t.surface.slot_id,a=e.surface.slot_id;if(typeof r=="string"&&r&&typeof a=="string"&&a)return {leftKey:r,rightKey:a}}else if(n===0){let r=d_(t),a=d_(e);if(r&&a)return {leftKey:r,rightKey:a}}return {leftKey:t.surface.type??"",rightKey:e.surface.type??""}}function eu(t){if(t.length<=1)return t;let e=new Set;for(let n=0;n<t.length;n+=1)for(let r=n+1;r<t.length;r+=1){let a=t[n],i=t[r];if(a.surface.type!==i.surface.type)continue;let s=us(a.category),u=us(i.category);if(s!==u){s<u?e.add(i.output_id):e.add(a.output_id);continue}if(s===0||s===1){let{leftKey:y,rightKey:k}=qI(a,i,s);y===k&&e.add(i.output_id);}}return t.filter(n=>!e.has(n.output_id))}function hp(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(y=>us(y.category)===1)),r.length===0)return null;let a=y_(r);if(a.length===0)return null;let i=a.some(y=>oc(y)!==null),s=i?a:eu(a);return s.length===0?null:[...s].sort((y,k)=>{if(i){let U=oc(y),oe=oc(k);if(U!==null&&oe!==null&&U!==oe)return U-oe;if(U!==null&&oe===null)return -1;if(U===null&&oe!==null)return 1}let I=us(y.category),w=us(k.category),O=I-w;if(O!==0)return O;if(I===2){let U=tp(y)-tp(k);if(U!==0)return U;let oe=ep(k)-ep(y);if(oe!==0)return oe}let R=sc(k)-sc(y);if(R!==0)return R;let A=Km(k)-Km(y);return A!==0?A:y.output_id.localeCompare(k.output_id)})[0]??null}function DI(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function fp(t,e,n,r){let a=xe(r)?r:{},i=xe(a.decision)?a.decision:{},s=xe(a.content)?a.content:xe(i.content)?i.content:{},u=typeof i.visible=="boolean"?i.visible:typeof a.visible=="boolean"?a.visible:true;return {placementId:t,requestId:typeof a.request_id=="string"?a.request_id:e,visible:u,decisionSource:"remote",reasonCodes:Array.isArray(a.reason_codes)?a.reason_codes.filter(y=>typeof y=="string"):[],content:DI(typeof s.title=="string"?s.title:`${n} recommendation`,typeof s.body=="string"?s.body:"Treatment selected by RevTurbine decisioning.",typeof s.cta=="string"?s.cta:"Continue")}}function tu(t){let e=[],n=[t,t.content,xe(t.content)?t.content.payload:void 0,xe(t.content)?t.content.placement:void 0,xe(t.content)?t.content.surface:void 0];for(let r of n){if(!xe(r))continue;let a=xe(r.caps)?r.caps:void 0;if(!a)continue;let i=[],s=Yd(a.max_per_period);s&&i.push(s);let u=Number(a.cooldown_days),y=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:i,...y!==void 0?{cooldownMs:y}:{}});}return e}function _p(t,e,n,r,a="impression"){if(us(t.category)<=1)return {allowed:true};let i=tu(t);if(i.length===0)return {allowed:true};let s={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(w=>Number.isFinite(w)&&w>0)},u=gc({perPayload:{policies:i,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!u.allowed)return {allowed:false,reason:u.reason,updatedState:s};let y=[...s.seenAt,r],k=a==="dismiss"?i.map(w=>w.cooldownMs).filter(w=>typeof w=="number"&&Number.isFinite(w)&&w>0):[],I=k.length>0?r+Math.max(...k):void 0;return {allowed:true,updatedState:{seenAt:y,...I!==void 0?{cooldownUntil:I}:{}}}}function yp(t){return !t||t.trialActive!==true||t.trialState==="expired"?null:typeof t.trialProgressPercent=="number"&&t.trialProgressPercent>=0?Math.min(100,t.trialProgressPercent):typeof t.trialDaysTotal=="number"&&typeof t.trialDaysRemaining=="number"&&t.trialDaysTotal>0?Math.max(0,t.trialDaysTotal-t.trialDaysRemaining)/t.trialDaysTotal*100:typeof t.trialUsageLimit=="number"&&typeof t.trialUsageConsumed=="number"&&t.trialUsageLimit>0?Math.min(100,Math.max(0,t.trialUsageConsumed/t.trialUsageLimit*100)):null}function up(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=yp(e);return n===null?false:n<=5}case "trial_progress":return e.trialActive===true&&e.trialState!=="expired"&&e.trialState!=="converted";case "trial_ending":return e.trialActive!==true||e.trialLimitType==="usage"||typeof e.trialDaysRemaining!="number"?false:e.trialDaysRemaining<=t.daysBeforeEnd;case "trial_ended":return e.trialState==="expired";case "trial_converted":return e.trialState==="converted";default:return false}}function v_(t,e){let n=t.filter(s=>s.trialTrigger?.kind==="trial_progress");if(n.length===0)return null;let r=n.filter(s=>s.trialTrigger?.kind!=="trial_progress"?false:e>=s.trialTrigger.progressPercent);if(r.length===0)return null;let a=r[0];for(let s of r.slice(1)){let u=s.trialTrigger.kind==="trial_progress"?s.trialTrigger.progressPercent:-1,y=a.trialTrigger.kind==="trial_progress"?a.trialTrigger.progressPercent:-1;(u>y||u===y&&s.entryOrder<a.entryOrder)&&(a=s);}let i=r.filter(s=>s!==a).map(s=>s.ruleId).filter(s=>typeof s=="string"&&s.length>0);return {winner:a,supersededIds:i}}function b_(t){if(!(!t||typeof t.type!="string"))switch(t.type){case "trial_started":return {kind:"trial_started"};case "trial_progress":return typeof t.progress_percent=="number"?{kind:"trial_progress",progressPercent:t.progress_percent}:void 0;case "trial_ending":return typeof t.days_before_end=="number"?{kind:"trial_ending",daysBeforeEnd:t.days_before_end}:void 0;case "trial_ended":return {kind:"trial_ended"};case "trial_converted":return {kind:"trial_converted"};default:return}}function UI(t,e){let n=e.grants;if(!n)return;let r=n.user?.[t]??n.instance?.[t]??n.account?.[t];switch(r?.allocation){case "account_pool":case "per_user_pooled":return n.account?.[t]??r;case "per_instance":return n.instance?.[t]??r;case "per_user":return n.user?.[t]??r;default:return r}}function MI(t,e){let n=UI(t,e);if(n&&typeof n.limit=="number")return {used:typeof n.used=="number"?n.used:0,limit:n.limit};let r=e.usage?.[t];return r&&typeof r.limit=="number"?{used:r.used,limit:r.limit,remaining:r.remaining}:null}function FI(t,e){if(!e)return null;let n=MI(t.entitlementHandle,e);return !n||!Number.isFinite(n.limit)||n.limit<=0?null:t.kind==="credit_threshold"&&typeof n.remaining=="number"?(n.limit-n.remaining)/n.limit*100:Number.isFinite(n.used)?n.used/n.limit*100:null}function p_(t,e){if(!t)return true;let n=FI(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:Ze}=oi,{Persisted:nu,Transient:ps}=ds,{External:La}=bi,x_=Zn(yn.Playbook,{sdkInput:true});Zn(yn.Playbook,{inConfig:false,sdkInput:false});var LI=Zn(yn.Playbook,{inConfig:false,sdkInput:true}),NI=Zn(yn.Playbook,{inConfig:false,sdkInput:false,source:Ma.Runtime}),VI=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),BI={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function zI(t){return BI[t]??[]}function KI(t,e){return zI(e).includes(t)}var S_=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":La}),P_=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":La}),$I=z.object({count:z.number().int().positive().meta(Ze),period:P_.meta(Ze)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":La});z.object({surface_type:z.string().min(1).meta(Ze),rules:z.array($I).meta(Ze),cooldown_ms:z.number().int().nonnegative().optional().meta(Ze)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":nu,"x-revturbine-schema-exposure":La,...oi.Operational,...LI});var HI=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":La}),To=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Ze,readOnly:true}),name:$i.meta(Ze),handle:_r.meta(Ze),description:Gm.meta(Ze),category:S_.meta(Ze),drag_order_in_category:z.number().int().default(0).meta(Ze),surface_slot_id:z.string().optional().meta(Ze),entitlement_id:z.string().optional().meta(Ze),tier_threshold:z.string().optional().meta(Ze),threshold_percent:Ks.optional().meta(Ze),trial_type:z.enum(["free","reverse"]).optional().meta(Ze),trigger_type:z.string().optional().meta(Ze),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ze),days_before_end:z.number().int().min(0).optional().meta(Ze),qualifier:VI.optional().meta(Ze),activation_window_start:z.string().datetime().optional().meta(Ze),activation_window_end:z.string().datetime().optional().meta(Ze),metadata:Aa.meta(Ze)}).meta({id:"Placement","x-revturbine-schema-persistence":nu,"x-revturbine-schema-exposure":La,...x_,...li()}),GI=Gr("PlacementAnchor"),YI=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":La}),WI=z.object({code:YI.meta(Ze),message:z.string().min(1).meta(Ze),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ze)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":La}),g_=To.extend({warnings:z.array(WI).optional().meta(Ze)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":La}),JI=z.object({label:z.string().min(1).max(200).meta(Ze),cta_path_type:HI.meta(Ze),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ze)}).meta({id:"CtaObject","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":La}),fc=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Ze,readOnly:true}),handle:_r.meta({...Ze,readOnly:true}),placement_id:z.string().min(1).meta(Ze),drag_order:z.number().int().default(0).meta(Ze),target_plan_ids:z.array(z.string()).default([]).meta(Ze),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ze),target_segments:z.array(z.string()).default([]).meta(Ze),surface_slot_ids:z.array(z.string()).default([]).meta(Ze),surface_template_id:z.string().min(1).meta(Ze),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ze),cta_list:z.array(JI).default([]).meta(Ze),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ze),max_period_unit:P_.default("session").meta(Ze),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ze),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ze),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ze),recommendation_plan_override:z.string().optional().meta(Ze)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":nu,"x-revturbine-schema-exposure":La,...x_,...ci()}),ZI=Gr("PlacementPayloadAnchor"),QI=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ze),surface_type:$m.meta(Ze),surface_template_ids:z.array(z.string()).default([]).meta(Ze),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ze),first_seen:z.string().datetime().meta({...Ze,readOnly:true}),last_seen:z.string().datetime().meta({...Ze,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ze),placement_count:z.number().int().min(0).default(0).meta({...Ze,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":nu,"x-revturbine-schema-exposure":La,...NI,...li("surface_slot_handle")}),XI=Sa(To),eC=Sa(fc);({"/api/placement-anchors":{get:M({operationId:"listPlacementAnchors",requestParams:{query:on},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:sn(GI)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:M({operationId:"listPlacements",requestParams:{query:on},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:sn(To)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:M({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Hr(To)}}},responses:{201:{description:"Created",content:{"application/json":{schema:g_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:M({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:M({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:XI}}},responses:{200:{description:"Updated",content:{"application/json":{schema:g_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:M({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:M({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:M({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:S_,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:M({operationId:"listPlacementPayloadAnchors",requestParams:{query:on},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:sn(ZI)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:M({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:on},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:sn(fc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:M({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Hr(fc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:fc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:M({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:eC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:fc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:M({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:M({operationId:"listSurfaceSlots",requestParams:{query:on},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:sn(QI)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function h_(t,e,n){if(!t)return true;if(!KI(t.qualifier,e))return false;switch(t.qualifier){case "none_always_on":return true;case "payment_failed":return n?.paymentFailed===true;case "payment_at_risk":return n?.paymentAtRisk===true;default:return true}}function f_(t,e,n){if(!t||!t.tierThreshold)return true;let r=e.get(t.entitlementHandle);if(!r||r.length===0)return false;let a=r.indexOf(t.tierThreshold);if(a<0)return false;let i=n?.tiers?.[t.entitlementHandle];return (i?r.indexOf(i):-1)<a}function ru(t){let e=Array.isArray(t.payloads)?t.payloads:[],n=new Map((Array.isArray(t.messageBlocks)?t.messageBlocks:[]).map(s=>[s.block_id,s])),r=Array.isArray(t.uiPaths)?t.uiPaths:[],a=Array.isArray(t.promotions)?t.promotions:[],i=Array.isArray(t.tokens)?t.tokens:[];return {listPayloads:s=>e.filter(u=>u.surface_template_id===s),getMessageBlockById:s=>n.get(s),getUiPathById:s=>r.find(u=>u.id===s||u.name===s),getPromotionById:s=>a.find(u=>u.id===s||u.name===s),listPersonalizationTokens:()=>i}}function _c(t,e){let n={...t};for(let r of e){let a=t[r.token];if(a==null||!r.value_map)continue;let i=String(a),s=r.value_map[i];s!==void 0&&(n[r.token]=s);}return n}function vp(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"};return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(r,a)=>{let i=e[a];if(i===void 0){let s=n[a];s&&(i=e[s]);}return i===void 0?r:String(i)})}function bp(t,e){let n={};for(let[r,a]of Object.entries(t))typeof a=="string"?n[r]=vp(a,e):n[r]=a;return n}function T_(t,e){return bp(t,e)}function xp(t,e,n,r,a,i,s){let u=n.filter(O=>O.surface_template_id===t&&O.status==="active");if(u.length===0)return null;let y=new Map(r.map(O=>[O.block_id,O])),k=new Set(e.segmentIds),I=_c(i,a),w=s?.segmentDimensions;for(let O of u){let R=O.default_message_block_id,A,U=O.ui_path_id,oe=O.promotion_id;if(O.segment_content_map){if(w&&Object.keys(w).length>0){let ne=new Map;for(let J of O.segment_content_map){let ot=J.dimension;if(!ot)continue;let Pn=ne.get(ot)??[];Pn.push(J),ne.set(ot,Pn);}if(ne.size>0){let J=true,ot;for(let[,Pn]of ne){let An=Pn.find(be=>k.has(be.segment_id));if(!An){J=false;break}ot||(ot=An);}if(J&&ot)R=ot.message_block_id,A=ot.segment_id,ot.ui_path_id&&(U=ot.ui_path_id),ot.promotion_id&&(oe=ot.promotion_id);else if(!J)continue}else for(let J of O.segment_content_map)if(k.has(J.segment_id)){R=J.message_block_id,A=J.segment_id,J.ui_path_id&&(U=J.ui_path_id),J.promotion_id&&(oe=J.promotion_id);break}}else for(let ne of O.segment_content_map)if(k.has(ne.segment_id)){R=ne.message_block_id,A=ne.segment_id,ne.ui_path_id&&(U=ne.ui_path_id),ne.promotion_id&&(oe=ne.promotion_id);break}}let Z=y.get(R);if(!Z||Z.status!=="active")continue;let _e={...Z.default_content};if(Z.segment_overrides){let ne=A?Z.segment_overrides.find(J=>J.segment_value_id===A):Z.segment_overrides.find(J=>k.has(J.segment_value_id));ne&&(_e={..._e,...ne.content},A=ne.segment_value_id);}let De=T_(_e,I);return {payload:O,messageBlock:Z,resolvedContent:De,matchedSegmentId:A,uiPathId:U,promotionId:oe}}return null}async function au(t,e,n,r,a){let s=(await Promise.resolve(n.listPayloads(t))).filter(I=>I.status==="active");if(s.length===0)return null;let u=new Set(e.segmentIds),y=a??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),k=_c(r,y);for(let I of s){let w=I.default_message_block_id,O,R=I.ui_path_id,A=I.promotion_id;if(I.segment_content_map){for(let ne of I.segment_content_map)if(u.has(ne.segment_id)){w=ne.message_block_id,O=ne.segment_id,ne.ui_path_id&&(R=ne.ui_path_id),ne.promotion_id&&(A=ne.promotion_id);break}}let U=await Promise.resolve(n.getMessageBlockById(w));if(!U||U.status!=="active")continue;let oe={...U.default_content};if(U.segment_overrides){let ne=O?U.segment_overrides.find(J=>J.segment_value_id===O):U.segment_overrides.find(J=>u.has(J.segment_value_id));ne&&(oe={...oe,...ne.content},O=ne.segment_value_id);}let Z=T_(oe,k),_e;R&&n.getUiPathById&&(_e=await Promise.resolve(n.getUiPathById(R)));let De;return A&&n.getPromotionById&&(De=await Promise.resolve(n.getPromotionById(A))),{payload:I,messageBlock:U,resolvedContent:Z,matchedSegmentId:O,uiPathId:R,promotionId:A,uiPath:_e??void 0,promotion:De??void 0}}return null}var tC={modal_overlay:"modal",banner_placement:"banner",in_page_card:"in_page",inline_gate_message:"in_page",usage_counter:"in_page",button:"button",email:"email",full_page:"full_page"};function nC(t,e){return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(n,r)=>{let a=e[r];return a==null?`{{${r}}}`:String(a)})}function rC(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=nC(r,t);continue}e[n]=r;}return e}function aC(t){if(!t?.path)return {type:"dismiss"};let e=t.path,n=t.config??{};return e==="open_checkout"?{type:"open_checkout_modal",plan_handle:typeof n.purchase=="string"?n.purchase:void 0}:e==="view_plans"?{type:"navigate_to_plans"}:e==="open_rt_placement"?{type:"open_rt_placement",placement_handle:typeof n.placement_handle=="string"?n.placement_handle:void 0}:{type:e,...n}}function iC(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function sC(t){if(!t||typeof t!="object")return;let e="type"in t&&typeof t.type=="string"?t.type:void 0,n="qualifier"in t?t.qualifier:void 0;return iC(e,n)}function oC(t,e,n){if(!(t!=="usage_threshold"&&t!=="credit_threshold"&&t!=="seat_threshold")&&!(typeof e!="string"||e.length===0)&&!(typeof n!="number"||!Number.isFinite(n)))return {kind:t,entitlementHandle:e,thresholdPercent:n}}function lC(t,e){if(!t||typeof t!="object")return;let n="type"in t&&typeof t.type=="string"?t.type:void 0,r="threshold_percent"in t?t.threshold_percent:void 0;return oC(n,e,r)}function cC(t,e,n){if(t!=="entitlement_gate"||typeof e!="string"||e.length===0)return;let r=typeof n=="string"&&n.length>0?n:void 0;return {kind:"entitlement_gate",entitlementHandle:e,tierThreshold:r}}function mC(t,e){if(!t||typeof t!="object")return;let n="type"in t&&typeof t.type=="string"?t.type:void 0,r="tier_threshold"in t?t.tier_threshold:void 0;return cC(n,e,r)}function uC(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function dC(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function pC(t,e){let n={...tC};for(let u of t.surface_templates??[])n[u.id]=u.surface_type;let r=new Map;for(let u of t.plans??[])r.set(u.unique_handle,u.unique_handle);let a=new Map;for(let u of t.entitlements??[])u.tier_definitions?.length&&a.set(u.unique_handle,u.tier_definitions.map(y=>y.handle));let i=new Map,s=new Map;for(let u of e.placements){let y=u.payloads[0];if(!y)continue;let k=y.surfaces[0];if(!k)continue;let I=k.template_id,w=n[I]??"custom",O={...k.fields};k.ctas?.[0]&&(O.cta_label=k.ctas[0].label),k.ctas?.[1]&&(O.secondary_cta_label=k.ctas[1].label);let R=aC(k.ctas?.[0]),A=Array.isArray(y.target?.plan_ids)?y.target.plan_ids:[],U=uC(u.trigger),oe=dC(u.trigger),Z=b_(u.trigger),_e=lC(u.trigger,U),De=sC(u.trigger),ne=mC(u.trigger,U),J={output_id:y.id,category:u.category,surface:{template:I,type:w,slot_id:u.id},content:{...O,__target_plan_ids:A,...U?{__trigger_entitlement_handle:U}:{},...Z?{__trigger_kind:Z.kind}:{}},cta_path:R,rule_id:u.id,decision_id:y.id,config_version:zm(t),present_upsell:true},ot=i.get(I)??[];ot.push({output:J,entryOrder:u.order??0,entryCategory:u.category,triggerEntitlementHandle:U,triggerSlotId:oe,trialTrigger:Z,thresholdTrigger:_e,qualifierTrigger:De,entitlementGateTrigger:ne}),i.set(I,ot);let Pn=u.id.replace(/^pl_/,"");s.set(Pn,J),s.set(u.id,J);}for(let u of i.values())u.sort((y,k)=>y.entryOrder-k.entryOrder);return {outputsByTemplate:i,outputsByName:s,planHandleToId:r,tierLaddersByHandle:a}}function gC(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let a=new Map;for(let s of e.placements){let u=s.payloads[0]?.surfaces?.[0]?.template_id;u&&a.set(s.id,u);}let i=[];for(let s of r){let u=s.content_link?.message_block_id;if(!u)continue;let y=a.get(s.placement_id);y&&i.push({payload_id:s.payload_id,tenant_id:"",name:s.payload_id,surface_template_id:y,default_message_block_id:u,ui_path_id:s.content_link?.ui_path_id,promotion_id:s.content_link?.promotion_id,status:"active"});}if(i.length!==0)return ru({payloads:i,messageBlocks:n,uiPaths:t.content_ui_paths,promotions:t.content_promotions,tokens:t.personalization_tokens})}function I_(t){let{source:e,impressionHistory:n}=t,{outputsByTemplate:r,outputsByName:a,planHandleToId:i,tierLaddersByHandle:s}=pC(e.exportedConfig,e.placements),u=gC(e.exportedConfig,e.placements),y=a_(e.exportedConfig.segments??[]);function k(I,w,O,R){let A=Array.isArray(I.content.__target_plan_ids)?I.content.__target_plan_ids.filter(oe=>typeof oe=="string"):[],U=Array.isArray(I.content.__target_billing_periods)?I.content.__target_billing_periods.filter(oe=>typeof oe=="string"):[];return mp({target_plan_ids:A,target_billing_periods:U,category:I.category},{currentPlanId:w,planHandle:O,billingPeriod:R}).eligible}return async(I,w,O)=>{let R=O?.__providers,A=R?.plan?.currentPlanHandle,U=R?.plan?.billingPeriod,oe=A?i.get(A):void 0,Z=_n=>typeof _n=="string"?_n:"",_e=Array.isArray(w?.metadata?.surface_template_ids)?w.metadata.surface_template_ids:void 0,De,ne=[];if(_e&&_e.length>0){let _n=[];for(let hn of _e){let sa=r.get(hn);sa&&_n.push(...sa);}if(_n.length===0)return __(I,"no_candidates_for_template","No placements configured for this surface template");_n.sort((hn,sa)=>hn.entryOrder-sa.entryOrder);let un=w?.metadata?.entitlement_handle,Vn=w?.metadata?.surface_slot_category,ba=Vn?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[Vn]:void 0,Dt=_n;if(un){let hn=_n.filter(sa=>sa.triggerEntitlementHandle===un);hn.length>0&&(Dt=hn);}let jn=w?.metadata?.surface_slot_id;if(jn){let hn=Dt.filter(sa=>sa.triggerSlotId===jn);hn.length>0&&(Dt=hn);}if(w?.metadata?.fixedOnly===true&&(Dt=Dt.filter(hn=>hn.entryCategory==="fixed")),ba&&Vn!=="fixed"&&Dt.length>1){let hn=Dt.filter(sa=>ba.includes(sa.entryCategory));hn.length>0&&(Dt=hn);}n&&(Dt=Dt.filter(hn=>!n.isHiddenSync(hn.output.rule_id??""))),Dt=Dt.filter(hn=>up(hn.trialTrigger,R?.plan)),Dt=Dt.filter(hn=>p_(hn.thresholdTrigger,R?.entitlements)),Dt=Dt.filter(hn=>h_(hn.qualifierTrigger,hn.entryCategory,R?.plan)),Dt=Dt.filter(hn=>f_(hn.entitlementGateTrigger,s,R?.entitlements));let ct,cr=[],Ua=yp(R?.plan);if(Ua!==null&&Dt.length>1){let hn=Dt.map(bo=>({ruleId:bo.output.rule_id??void 0,entryOrder:bo.entryOrder,trialTrigger:bo.trialTrigger,output:bo.output})),sa=v_(hn,Ua);if(sa){ct=sa.winner,cr=sa.supersededIds;let bo=sa.winner.ruleId;Dt=Dt.filter(Mf=>Mf.trialTrigger?.kind!=="trial_progress"||(Mf.output.rule_id??void 0)===bo);}}let xa;for(let hn of Dt)if(k(hn.output,oe,A,U)){De=hn.output,xa=hn;break}xa&&ct&&ct.ruleId===(xa.output.rule_id??void 0)&&cr.length>0&&(De={...De,content:{...De.content,__superseded_placement_ids:cr}}),De||(ne=["no_eligible_candidate"]);}else {let _n=w?.name,un=(_n?a.get(_n):void 0)??a.get(I.placementId),Vn;if(un)for(let Tn of r.values()){let ba=Tn.find(Dt=>Dt.output===un);if(ba){Vn=ba;break}}un&&n?.isHiddenSync(un.rule_id??"")?ne=["placement_retired"]:un&&!up(Vn?.trialTrigger,R?.plan)?ne=["trial_trigger_unmet"]:un&&!p_(Vn?.thresholdTrigger,R?.entitlements)?ne=["threshold_trigger_unmet"]:un&&!h_(Vn?.qualifierTrigger,Vn?.entryCategory??un.category,R?.plan)?ne=["qualifier_trigger_unmet"]:un&&!f_(Vn?.entitlementGateTrigger,s,R?.entitlements)?ne=["entitlement_gate_unmet"]:un&&k(un,oe,A,U)?De=un:un?ne=["plan_target_mismatch"]:ne=["placement_not_found"];}if(!De){let _n=ne[0]??"placement_not_found";return __(I,_n,"Placement not configured")}let J=De.content,ot,Pn=De.surface.template;if(u&&Pn){let _n={userId:typeof I.userId=="string"?I.userId:"",segmentIds:R?.segments?.segmentIds??[]},un=await au(Pn,_n,u,{});un&&(J={...De.content,...un.resolvedContent},ot=un.messageBlock.block_id);}let An={...J},be=typeof An.entitlement=="string"?An.entitlement:typeof An.__trigger_entitlement_handle=="string"?An.__trigger_entitlement_handle:void 0,xt=be?R?.entitlements?.usage?.[be]:void 0;if(xt){An.usage_remaining=Number.isFinite(xt.remaining)?xt.remaining:0,An.usage_limit=Number.isFinite(xt.limit)?xt.limit:0,An.usage_current=Number.isFinite(xt.used)?xt.used:0,An.usage_percent=xt.limit>0?Math.min(100,Math.round(xt.used/xt.limit*100)):0;let _n=xt.reset_date;typeof _n=="string"&&_n.length>0&&(An.reset_date=_n);}let gn=rC(An),wn=i_(y,R?.segments?.segmentIds??[],R?.experiments?.assignments),lt={...De,content:gn,...ot?{message_block_handle:ot}:{},...wn},Jn=!((De.category==="upsell"||De.category==="trial_conversion")&&A==="enterprise");return {placementId:I.placementId,requestId:`local_${Date.now()}`,visible:Jn,decisionSource:"fallback",reasonCodes:Jn?[]:["plan_tier_suppressed"],content:{header:Z(lt.content.header),body:Z(lt.content.body),cta_label:Z(lt.content.cta_label),title:Z(lt.content.header),cta:Z(lt.content.cta_label)},output:lt}}}function __(t,e,n){return {placementId:t.placementId,requestId:`local_${Date.now()}`,visible:false,decisionSource:"fallback",reasonCodes:[e],content:{header:n,body:"",cta_label:"",title:n,cta:""}}}function Co(t){return I_({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}function Io(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim().length>0){let e=Number(t);if(Number.isFinite(e))return e}}function hc(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function hC(t,e){let n=Io(t.limit_value??t.usage_limit??t.limit??t.allowance??t.initial_grant);if(n!==void 0)return n;let r=t.usageLimits;if(r&&typeof r=="object"&&!Array.isArray(r)){let a=(e??"").toLowerCase();for(let[i,s]of Object.entries(r))if(i.toLowerCase()===a)return Io(s)}}function fC(t){let e=Io(t.warning_threshold_percent??t.warning_percentage??t.threshold_percent??t.threshold);if(e!==void 0)return Math.max(0,Math.min(100,e))}function C_(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[R,A]of Object.entries(t.base))(typeof A=="string"||typeof A=="number")&&(e[R]=A);let r=n?.plan?.currentPlanHandle,a=n?.plan?.currentPlanName??r;typeof a=="string"&&a.length>0&&(e.plan_name=a);let i=n?.plan?.trialDaysRemaining;i!==void 0&&Number.isFinite(i)&&(e.trial_days_remaining=i);let s=n?.plan?.trialDaysTotal;s!==void 0&&Number.isFinite(s)&&(e.trial_days_total=s);let u=n?.traits?.traits??{};for(let[R,A]of Object.entries(u))(typeof A=="string"||typeof A=="number")&&(e[R]=A);let y=n?.entitlements?.usage??{};for(let[R,A]of Object.entries(y)){let U=hc(R);if(!U)continue;let oe=Io(A.used),Z=Io(A.remaining),_e=Io(A.limit);if(oe!==void 0&&(e[`${U}_usage_current`]=oe,e.usage_current===void 0&&(e.usage_current=oe),e.current_usage===void 0&&(e.current_usage=oe)),_e!==void 0&&(e[`${U}_usage_limit`]=_e,e.usage_limit===void 0&&(e.usage_limit=_e),e.current_limit===void 0&&(e.current_limit=_e)),Z!==void 0)e[`${U}_usage_remaining`]=Z,e.usage_remaining===void 0&&(e.usage_remaining=Z);else if(oe!==void 0&&_e!==void 0){let ne=Math.max(0,_e-oe);e[`${U}_usage_remaining`]=ne,e.usage_remaining===void 0&&(e.usage_remaining=ne);}if(oe!==void 0&&_e!==void 0&&_e>0){let ne=Math.min(100,Math.round(oe/_e*100));e[`${U}_usage_percent`]=ne,e.usage_percent===void 0&&(e.usage_percent=ne);}let De=A.reset_date;typeof De=="string"&&De.length>0&&(e[`${U}_reset_date`]=De,e.reset_date===void 0&&(e.reset_date=De));}let k=n?.rules?.entitlementRules??{};for(let[R,A]of Object.entries(k)){if(!Array.isArray(A)||A.length===0)continue;let U=A.find(ne=>ne.kind==="usage_limit"||ne.kind==="usage_rate"||ne.kind==="credits"||ne.kind==="seat");if(!U)continue;let oe=hc(R);if(!oe)continue;let Z=U.fields??{},_e=hC(Z,r);_e!==void 0&&e[`${oe}_usage_limit`]===void 0&&(e[`${oe}_usage_limit`]=_e);let De=fC(Z);De!==void 0&&(e[`${oe}_usage_warning_threshold_percent`]=De);}t.userName&&t.userName.length>0&&(e.user_name=t.userName);let I=n?.plan?.currentPlanPrice;typeof I=="string"&&I.length>0&&(e.plan_price=I),t.upgradePlan?.name&&(e.upgrade_plan_name=t.upgradePlan.name),t.upgradePlan?.price&&(e.upgrade_plan_price=t.upgradePlan.price),t.trialPlanName&&t.trialPlanName.length>0&&(e.trial_plan_name=t.trialPlanName),t.promoDiscount&&t.promoDiscount.length>0&&(e.promo_discount=t.promoDiscount),t.featuresLostOnDowngrade&&t.featuresLostOnDowngrade.length>0&&(e.features_lost_on_downgrade=t.featuresLostOnDowngrade);let w=t.effectiveGrants;if(w)for(let[R,A]of Object.entries(w)){if(A.allocation==="per_user"||A.allocation==="per_user_pooled"||!A.allocation){let U=hc(R);if(!U)continue;A.used!==void 0&&e[`${U}_usage_current`]===void 0&&(e[`${U}_usage_current`]=A.used),A.limit!==void 0&&e[`${U}_usage_limit`]===void 0&&(e[`${U}_usage_limit`]=A.limit);}if(A.enforcement&&(A.status==="limited"||A.status==="denied")){let U=hc(R);U&&e[`${U}_enforcement`]===void 0&&(e[`${U}_enforcement`]=A.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=A.enforcement);}}let O=n?.rules?.entitlementRules??{};for(let[R,A]of Object.entries(O)){if(!Array.isArray(A))continue;let U=hc(R);if(U)for(let oe of A){if(oe.kind==="credits"){let Z=e[`${U}_usage_remaining`];Z!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=Z);}if(oe.kind==="seat"){let Z=e[`${U}_usage_current`],_e=e[`${U}_usage_limit`];Z!==void 0&&e.seat_count===void 0&&(e.seat_count=Z),_e!==void 0&&e.seat_limit===void 0&&(e.seat_limit=_e);}}}if(t.featureInteractions&&w){let{invokedFeatureHandles:R,interactionCounts:A,topFeaturesByEngagement:U}=t.featureInteractions,oe=new Set(R),Z=new Set;for(let[ne,J]of Object.entries(w))(J.status==="denied"||J.status==="limited")&&Z.add(ne);let _e=0,De=0;for(let ne of R)Z.has(ne)&&(_e++,A&&(De+=A[ne]??0));if(e.gated_features_used_count=_e,A&&(e.gated_action_count=De),U){let ne=U.find(J=>!oe.has(J)&&Z.has(J));ne&&(e.top_unused_gated_feature=ne);}if(n?.plan?.trialActive){let ne=0;for(let J of R)J in w&&ne++;e.trial_features_used=ne;}}return e}function Sp(t,e){let n={};for(let[r,a]of Object.entries(e))a!==void 0&&(n[r]=a);return {...t,...n,custom:{...t.custom||{},...e.custom||{}},entitlements:{...t.entitlements||{},...e.entitlements||{}},usage:{...t.usage||{},...e.usage||{}},personalization:{...t.personalization||{},...e.personalization||{}}}}function iu(t,e,n){let r={};for(let[a,i]of Object.entries(t))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(r[a]=i);e&&r.plan===void 0&&(r.plan=e);for(let[a,i]of Object.entries(n))r[a]===void 0&&(r[a]=i);return r}function su(t,e,n){let r=Bm(t),a=Bs(e,r),i=a??r,s={...t.custom??{}};for(let[y,k]of Object.entries(t.entitlements??{}))s[y]===void 0&&(s[y]=k);r?s.plan_handle=r:delete s.plan_handle,a&&s.plan_name===void 0&&(s.plan_name=a),i&&s.plan===void 0&&(s.plan=i);let u={...vi(t.usage),...n??{}};for(let[y,k]of Object.entries(u))s[y]===void 0&&(s[y]=k);return {effectivePlan:i,traits:s,usage:u,segmentTraits:iu(s,i,u)}}function _C(t){return {plan_handle:t.plan_handle??null,plan:t.plan??null,usage:t.usage??{},custom:t.custom??{},trial:t.trial??null,instances:t.instances??[]}}function Pp(t,e=cp){return e.sha256Base64Url(pc(_C(t)))}function Tp(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:a,usageThresholdLookup:i}=t,s={};for(let[Z,_e]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(Z)||(s[Z]=_e);let u={...s},y=Bs(n,Bm(e));y?u.plan_name=y:typeof e.plan=="object"&&e.plan?.name&&(u.plan_name=e.plan.name);let k={...vi(e.usage),...r},I=Object.entries(k).filter(([,Z])=>Number.isFinite(Z)).sort(([Z],[_e])=>Z<_e?-1:Z>_e?1:0),w,O,R,A,U=[];for(let[Z,_e]of I){let De=a.get(Z)??So(Z);if(!De)continue;let J=i(Z)?.limit,ot=J!==void 0?Math.max(0,J-_e):void 0,Pn=J!==void 0&&J>0?Math.min(100,Math.round(_e/J*100)):void 0;u[`${De}_usage_current`]=_e,J!==void 0&&(u[`${De}_usage_limit`]=J),ot!==void 0&&(u[`${De}_usage_remaining`]=ot),Pn!==void 0&&(u[`${De}_usage_percent`]=Pn),U.push({prefix:De,current:_e,...J!==void 0?{limit:J}:{},...ot!==void 0?{remaining:ot}:{},...Pn!==void 0?{percent:Pn}:{}}),w===void 0&&(w=_e,O=J,R=ot,A=Pn);}let oe=U.find(Z=>Z.prefix==="core")??U.find(Z=>Z.limit!==void 0)??U[0];return oe&&(w=oe.current,O=oe.limit,R=oe.remaining,A=oe.percent),w!==void 0&&(u.usage_current=w),O!==void 0&&(u.usage_limit=O),R!==void 0&&(u.usage_remaining=R),A!==void 0&&(u.usage_percent=A),u}function Ip(t,e,n){let r=[];for(let[a,i]of Object.entries(e)){let s=t[a]||0;if(!Number.isFinite(i)||i<=s)continue;let u=n(a);if(!u)continue;let y=s/u.limit*100,k=i/u.limit*100;k>=u.warningPercent&&y<u.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:a,current_usage:i,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(k)),threshold:u.warningPercent}),i>=u.limit&&s<u.limit&&r.push({type:"usage_limit_reached",entitlement_handle:a,current_usage:i,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(k)),threshold:100});}return r}function Cp(t,e,n=3){if(!t.in_trial)return e==="none"?"none":"expired";let r=Number(t.days_remaining);if(Number.isFinite(r)&&r<=0)return "expired";if(Number.isFinite(r)&&r<=n)return "expiring";let a=Number(t.day_number);if(Number.isFinite(a)&&a>0&&Number.isFinite(r)){let i=a+Math.max(0,r);if(i>0&&a>=Math.ceil(i/2))return "midpoint"}return "none"}var E_="__self__",yC={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},Ep={plans:{sortKey:"unique_handle",indexBy:["unique_handle"],fields:{unique_handle:{},name:{},tier_position:{},sort_order:{},visibility:{}}},entitlements:{sortKey:"unique_handle",indexBy:["unique_handle"],fields:{unique_handle:{},name:{},type:{},unit:{},tier_definitions:{}}},entitlement_rules:{sortKey:"id",fields:{id:{},entitlement_id:{reference:{table:"entitlements",by:"unique_handle",kind:"one",onDelete:"cascade"}},targets:{},segment_ids:{reference:{table:"segments",by:"handle",kind:"list",onDelete:"restrict"}},kind:{include:"never"},unit:{include:"never"},tier_name:{include:"never"},tier_description:{include:"never"},enabled:{},limit_value:{},enforcement:{},tier_value:{},period_scope:{},included_count:{},seat_type_id:{},initial_grant:{},allowance_value:{},rollover_enabled:{},max_balance:{},reset_period:{},max_seats:{},rate_value:{},amount_cents:{},currency:{},current_usage:{include:"never"},allocation:{}}},segments:{sortKey:"handle",indexBy:["handle"],fields:{name:{},handle:{},predicates:{},dimension_id:{},experiment_handle:{},experiment_id:{}}},placement_slots:{sortKey:"id",indexBy:["id","placement_handle"],fields:{id:{},label:{},description:{},surface_type:{},placement_handle:{},template:{}}},slot_configs:{sortKey:"slot_id",fields:{slot_id:{reference:{table:"placement_slots",by:"id",kind:"one",onDelete:"cascade"}},active:{},triggers:{}}},surface_templates:{sortKey:"id",indexBy:["id"],fields:{id:{},surface_type:{},fields:{}}},placements:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},category:{},trigger:{discriminator:{keyed_on:{table:E_,via:"__self__",field:"trigger.type"},variants:{surface_render:["type","slot_id"],entitlement_gate:["type","entitlement_handle","tier_threshold"],usage_threshold:["type","entitlement_handle","threshold_percent"],credit_threshold:["type","entitlement_handle","threshold_percent"],seat_threshold:["type","entitlement_handle","threshold_percent"],trial_started:["type","trial_type"],trial_progress:["type","progress_percent"],trial_ending:["type","days_before_end"],trial_ended:["type"],trial_converted:["type"],qualifier:["type","qualifier"]}}},payloads:{},order:{}}},placement_payloads:{sortKey:"payload_id",fields:{payload_id:{},placement_id:{reference:{table:"placements",by:"id",kind:"one",onDelete:"cascade"}},target:{chipResolution:yC},caps:{},created_at:{},updated_at:{},source_mode:{},surfaces:{},content_link:{},surface_slot_ids:{},remind_later_minutes:{}}},content_ui_paths:{sortKey:"name",fields:{name:{},action_type:{},plan_handle:{reference:{table:"plans",by:"unique_handle",kind:"optional",onDelete:"detach"}},promotion_id:{reference:{table:"content_promotions",by:"id",kind:"optional",onDelete:"detach"}},placement_handle:{reference:{table:"placement_slots",by:"placement_handle",kind:"optional",onDelete:"detach"}},url:{},tour_id:{},target_billing_period:{},description:{}}},content_promotions:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},discount:{},type:{},status:{}}},personalization_tokens:{sortKey:"token",indexBy:["token"],fields:{token:{},label:{},description:{},category:{},data_source:{},example_value:{},value_map:{},format:{}}},message_blocks:{sortKey:"block_id",indexBy:["block_id"],fields:{block_id:{},tenant_id:{},name:{},surface_template_id:{reference:{table:"surface_templates",by:"id",kind:"optional",onDelete:"detach"}},default_content:{},segment_overrides:{},child_blocks:{},tokens_used:{},status:{},created_at:{},updated_at:{}}}};var k_=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(k_).default([]),days_before_end:z.number().int().min(0).max(365).nullable().default(null),trial_type:z.enum(["free","reverse"]).nullable().default(null)});z.object({threshold_percent:z.number().int().min(0).max(100),trial_type:z.enum(["free","reverse"]).nullable().default(null)});var {Unrestricted:Pe}=oi,{Persisted:Up,Transient:Pa}=ds,{Internal:w_,External:ca}=bi,j_=Zn(yn.Playbook,{sdkInput:true}),xC=Zn(yn.Playbook,{inConfig:false,sdkInput:false}),O_=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),cu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),SC=z.enum($f).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),PC=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),q_=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),Rp=z.object({entitlement_id:z.string().min(1).meta(Pe),entitlement_handle:z.string().min(1).meta(Pe),status:SC.meta(Pe),limit:z.number().optional().meta(Pe),used:z.number().optional().meta(Pe),allocation:cu.optional().meta(Pe),enforcement:q_.optional().meta(Pe),source:PC.optional().meta(Pe),plan_id:z.string().optional().meta(Pe),segment_id:z.string().optional().meta(Pe),seat_type_id:z.string().optional().meta(Pe),rule_id:z.string().optional().meta(Pe)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca,...oi.Operational});z.object({account:z.record(z.string(),Rp).optional().meta(Pe),instance:z.record(z.string(),Rp).optional().meta(Pe),user:z.record(z.string(),Rp).optional().meta(Pe)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca,...oi.Operational});var TC=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),IC=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),D_=z.object({kind:IC.meta(Pe),id:z.string().min(1).meta(Pe)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),CC=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),jo=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Pe,readOnly:true}),name:$i.meta(Pe),handle:_r.meta(Pe),customer_facing_description:z.string().max(500).optional().meta(Pe),type:Hm.meta(Pe),unit:z.string().max(100).optional().meta(Pe),period_scope:O_.optional().meta(Pe),allocation:cu.optional().meta(Pe),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Pe),sort_order:z.number().int().default(0).meta(Pe),metadata:Aa.meta(Pe)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Up,"x-revturbine-schema-exposure":ca,...j_,...li()}),EC=Gr("EntitlementAnchor"),Lo=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Pe,readOnly:true}),handle:_r.meta({...Pe,readOnly:true}),entitlement_id:z.string().min(1).meta(Pe),targets:z.array(D_).min(1).meta(Pe),segment_ids:z.array(z.string()).default([]).meta(Pe),visibility:TC.default("public").meta(Pe),period_scope:O_.optional().meta(Pe),instance:z.string().max(100).optional().meta(Pe),reset_period:CC.optional().meta(Pe),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Pe),enforcement:q_.optional().meta(Pe),warning_threshold_percent:Ks.optional().meta(Pe),overage_price_ref:z.string().optional().meta(Pe),grace_period_hours:z.number().int().min(0).optional().meta(Pe),tier_value:z.string().optional().meta(Pe),rate_value:z.number().optional().meta(Pe),initial_grant:z.number().optional().meta(Pe),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Pe),rollover_enabled:z.boolean().optional().meta(Pe),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Pe),seat_type_id:z.string().optional().meta(Pe),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Pe),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Pe),stripe_metered_price_id:z.string().optional().meta(Pe),enabled:z.boolean().optional().meta(Pe),allocation:cu.optional().meta(Pe),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Pe),amount_cents:z.number().int().optional().meta(Pe),currency:z.string().optional().meta(Pe)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Up,"x-revturbine-schema-exposure":w_,...j_,...ci()}),kC=Gr("EntitlementRuleAnchor");Lo.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var RC=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),AC=z.object({code:RC.meta(Pe),message:z.string().min(1).meta(Pe),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Pe)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),Ap=Lo.extend({warnings:z.array(AC).optional().meta(Pe)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Pa,"x-revturbine-schema-exposure":ca}),wp=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({handle:_r.meta({...Pe,readOnly:true}),rule_id:z.string().min(1).meta(Pe),experiment_id:z.string().min(1).meta(Pe),variant_name:z.string().min(1).max(200).meta(Pe),is_control:z.boolean().default(false).meta(Pe),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Pe)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Up,"x-revturbine-schema-exposure":w_,...xC,...ci()}),wC=Sa(jo),jC=Sa(Lo);({"/api/entitlement-anchors":{get:M({operationId:"listEntitlementAnchors",requestParams:{query:on},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:sn(EC)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:M({operationId:"listEntitlementRuleAnchors",requestParams:{query:on},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:sn(kC)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:M({operationId:"listEntitlements",requestParams:{query:on},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:sn(jo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:M({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(jo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:M({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:M({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:wC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:M({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:M({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:on},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:sn(Lo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:M({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Lo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ap}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:M({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:jC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ap}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:M({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:M({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ap}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:M({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:on},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:sn(wp)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:M({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(wp)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:dt}=oi,{Persisted:Pc,Transient:Tc}=ds,{Internal:Si}=bi,U_=Zn(yn.Playbook,{sdkInput:true}),M_=Zn(yn.Playbook,{inConfig:false,sdkInput:true}),OC=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":Si}),Mp=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":Si}),F_=z.object({name:$i.meta(dt),handle:_r.meta(dt),plan_id:z.string().nullable().optional().meta(dt),segment_id:z.string().nullable().optional().meta(dt),trial_limit_type:Mp.default("time").meta(dt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(dt),grace_period_days:z.number().int().min(0).default(0).meta(dt),usage_entitlement_handle:z.string().min(1).optional().meta(dt),usage_limit_value:z.number().int().min(1).optional().meta(dt),require_payment_method:z.boolean().default(false).meta(dt),auto_convert:z.boolean().default(true).meta(dt),convert_to_plan_id:z.string().optional().meta(dt),fallback_plan_id:z.string().optional().meta(dt),limit_per_customer:z.number().int().min(1).default(1).meta(dt),is_active:z.boolean().default(true).meta(dt),metadata:Aa.meta(dt)}),Eo=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true})}).merge(F_).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Pc,"x-revturbine-schema-exposure":Si,...U_,...li()}),qC=Gr("FreeTrialRuleAnchor"),DC=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":Si}),L_=z.object({name:$i.meta(dt),handle:_r.meta(dt),premium_plan_id:z.string().min(1).meta(dt),fallback_plan_id:z.string().min(1).meta(dt),segment_id:z.string().nullable().optional().meta(dt),trial_limit_type:Mp.default("time").meta(dt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(dt),usage_entitlement_handle:z.string().min(1).optional().meta(dt),usage_limit_value:z.number().int().min(1).optional().meta(dt),start_policy:DC.default("signup").meta(dt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(dt),entitlements_during_trial:z.array(z.string()).default([]).meta(dt),is_active:z.boolean().default(true).meta(dt),metadata:Aa.meta(dt)}),ko=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true})}).merge(L_).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Pc,"x-revturbine-schema-exposure":Si,...U_,...li()}),UC=Gr("ReverseTrialRuleAnchor"),N_=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":Si}),V_=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":Si}),Ro=Mn.merge(Bn).merge(zn).extend({trial_limit_policy:N_.default("1_per_lifetime").meta(dt),eligibility_scope:V_.default("per_customer").meta(dt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Pc,"x-revturbine-schema-exposure":Si,...M_}),Ao=Mn.merge(Bn).merge(zn).extend({trial_limit_policy:N_.default("1_per_lifetime").meta(dt),eligibility_scope:V_.default("per_customer").meta(dt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Pc,"x-revturbine-schema-exposure":Si,...M_}),ou=Mn.merge(Bn).merge(zn).extend({customer_id:z.string().min(1).meta(dt),rule_id:z.string().min(1).meta(dt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(dt),plan_id:z.string().min(1).meta(dt),status:OC.default("active").meta(dt),started_at:z.string().datetime().meta({...dt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(dt),trial_limit_type:Mp.default("time").meta(dt),usage_entitlement_handle:z.string().min(1).optional().meta(dt),usage_limit_value:z.number().int().min(1).optional().meta(dt),converted_at:Ym.meta(dt),cancelled_at:Ym.meta(dt),metadata:Aa.meta(dt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Pc,"x-revturbine-schema-exposure":Si});({"/api/free-trial-rule-anchors":{get:M({operationId:"listFreeTrialRuleAnchors",requestParams:{query:on},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:sn(qC)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:M({operationId:"listFreeTrialRules",requestParams:{query:on},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:sn(Eo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:M({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:Eo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:M({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Eo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Eo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:M({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:M({operationId:"listReverseTrialRuleAnchors",requestParams:{query:on},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:sn(UC)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:M({operationId:"listReverseTrialRules",requestParams:{query:on},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:sn(ko)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:M({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:ko}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:M({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ko.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ko}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:M({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:M({operationId:"listFreeTrialSettings",requestParams:{query:on},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:sn(Ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:M({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:M({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ro.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:M({operationId:"listReverseTrialSettings",requestParams:{query:on},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:sn(Ao)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:M({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:M({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ao.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:M({operationId:"listTrialInstances",requestParams:{query:on},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:sn(ou)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:M({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:M({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:M({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Jt,Financial:lu}=oi,{Persisted:Ic,Transient:mu}=ds,{External:Hi}=bi,MC=Zn(yn.Playbook,{sdkInput:true}),FC=Zn(yn.Playbook,{sdkInput:false}),Fp=Zn(yn.Billing,{sdkInput:false}),hs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":mu,"x-revturbine-schema-exposure":Hi}),Cc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":mu,"x-revturbine-schema-exposure":Hi}),uu=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":mu,"x-revturbine-schema-exposure":Hi}),Oo=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),name:$i.meta(Jt),handle:_r.meta(Jt),tier_position:z.number().int().min(0).default(0).meta(Jt),sort_order:z.number().int().default(0).meta(Jt),visibility:hs.default("public").meta(Jt),metadata:Aa.meta(Jt)}).meta({id:"Plan","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Hi,...MC,...li()}),LC=Gr("PlanAnchor"),qo=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),handle:_r.meta({...Jt,readOnly:true}),plan_id:z.string().min(1).meta(Jt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Jt),segment_id:z.string().nullable().default(null).meta(Jt),price_amount:z.number().min(0).meta(lu),pricing_model:Cc.meta(Jt),visibility:hs.default("public").meta(Jt),stripe_price_id:z.string().optional().meta(Jt),price_source:uu.default("static").meta(Jt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Hi,...Fp,...ci()}),NC=Gr("PlanVariationAnchor"),Do=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),name:$i.meta(Jt),handle:_r.meta(Jt),sort_order:z.number().int().default(0).meta(Jt),visibility:hs.default("public").meta(Jt),metadata:Aa.meta(Jt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Hi,...FC,...li()}),VC=Gr("AddOnAnchor"),Uo=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),handle:_r.meta({...Jt,readOnly:true}),addon_id:z.string().min(1).meta(Jt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Jt),segment_id:z.string().nullable().default(null).meta(Jt),price_amount:z.number().min(0).meta(lu),pricing_model:Cc.meta(Jt),visibility:hs.default("public").meta(Jt),stripe_price_id:z.string().optional().meta(Jt),price_source:uu.default("static").meta(Jt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Hi,...Fp,...ci()}),BC=Gr("AddOnVariationAnchor"),zC=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":mu,"x-revturbine-schema-exposure":Hi}),Mo=Mn.merge(Bn).merge(zn).extend({stripe_price_id:z.string().min(1).meta(Jt),stripe_product_id:z.string().min(1).meta(Jt),billing_period:zC.meta(Jt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(lu),currency:Hf.meta(lu),pricing_model:Cc.meta(Jt),nickname:z.string().nullable().default(null).meta(Jt),is_mock:z.boolean().default(false).meta(Jt),last_updated_from_stripe:Ym.meta(Jt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Hi,...Fp}),KC=Sa(Oo),$C=Sa(qo),HC=Sa(Do),GC=Sa(Uo),YC=Sa(Mo);({"/api/plan-anchors":{get:M({operationId:"listPlanAnchors",requestParams:{query:on},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:sn(LC)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:M({operationId:"listPlans",requestParams:{query:on},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:sn(Oo)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:M({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Oo)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Oo}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:M({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Oo}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:M({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:KC}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Oo}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:M({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:M({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:M({operationId:"listPlanVariationAnchors",requestParams:{query:on},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:sn(NC)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:M({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:on},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:sn(qo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:M({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(qo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:M({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:M({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:$C}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:M({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:M({operationId:"listAddOnAnchors",requestParams:{query:on},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:sn(VC)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:M({operationId:"listAddOns",requestParams:{query:on},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:sn(Do)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:M({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Do)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:M({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:M({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:HC}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:M({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:M({operationId:"listAddOnVariationAnchors",requestParams:{query:on},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:sn(BC)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:M({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:on},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:sn(Uo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:M({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Uo)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Uo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:M({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Uo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:M({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:GC}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Uo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:M({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:M({operationId:"listStripePrices",requestParams:{query:on},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:sn(Mo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:M({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Mo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Mo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:M({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Mo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:M({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:YC}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Mo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:M({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:d}=oi,{Persisted:No,Transient:_t}=ds,{Internal:Na,External:Ut}=bi,Rt=Zn(yn.Playbook,{sdkInput:true}),Fo=Zn(yn.Playbook,{sdkInput:false}),gs=Zn(yn.Playbook,{inConfig:false,sdkInput:false}),B_=Zn(yn.Playbook,{inConfig:false,sdkInput:true}),wo=Zn(yn.Playbook,{inConfig:false,sdkInput:true,source:Ma.CodeConstant}),jp=Zn(yn.Playbook,{inConfig:false,sdkInput:true,source:Ma.Runtime}),Op=Zn(yn.Playbook,{inConfig:false,sdkInput:false,source:Ma.Runtime}),WC=Zn(yn.Billing,{sdkInput:false}),JC=Zn(yn.Metering,{sdkInput:false}),ZC=Zn(yn.Branding,{inConfig:true,sdkInput:true}),QC=Zn(yn.Branding,{sdkInput:false}),XC="1.0.0",vc=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),name:$i.meta(d),handle:_r.meta(d),description:Gm.meta(d),is_default:z.boolean().default(false).meta(d),entitlement_ids:z.array(z.string()).default([]).meta(d),metadata:Aa.meta(d)}).meta({id:"SeatType","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Na,...gs,...li()}),e0=Gr("SeatTypeAnchor"),bc=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:_r.meta(d),label:z.string().min(1).meta(d),description:z.string().nullable().default(null).meta(d),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(d),data_source:z.string().nullable().default(null).meta(d),example_value:z.string().nullable().default(null).meta(d),value_map:z.record(z.string(),z.string()).default({}).meta(d),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(d),metadata:Aa.meta(d)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Na,...gs,...li()}),t0=Gr("PersonalizationTokenAnchor"),n0=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Na}),qp=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({handle:_r.meta({...d,readOnly:true}),stripe_account_id:z.string().min(1).meta(d),live_mode:z.boolean().default(false).meta(d),onboarding_state:n0.default("not_started").meta({...d,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...d,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...d,readOnly:true}),details_submitted:z.boolean().default(false).meta({...d,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...d,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...d,readOnly:true}),sync_products:z.boolean().default(true).meta(d),sync_prices:z.boolean().default(true).meta(d),sync_subscriptions:z.boolean().default(true).meta(d),sync_invoices:z.boolean().default(false).meta(d),default_currency:z.string().length(3).default("USD").meta(d),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(d),last_sync_at:z.string().optional().meta({...d,readOnly:true}),metadata:Aa.meta(d)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Na,...WC,...ci()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(d),workspace_name:z.string().optional().meta(d),logo_url:z.string().optional().meta(d),support_email:z.string().optional().meta(d)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...QC});var xc=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({handle:_r.meta({...d,readOnly:true}),entitlement_id:z.string().min(1).meta(d),meter_key:z.string().min(1).max(100).meta(d),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(d),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(d),stripe_meter_id:z.string().nullable().default(null).meta(d),is_active:z.boolean().default(true).meta(d),metadata:Aa.meta(d)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Na,...JC,...ci()}),R_=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Na}),Sc=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:_r.meta({...d,readOnly:true}),entitlement_id:z.string().min(1).meta(d),soft_limit_percent:z.number().min(0).max(100).default(80).meta(d),hard_limit_percent:z.number().min(0).max(100).default(100).meta(d),soft_limit_action:R_.default("warn").meta(d),hard_limit_action:R_.default("block").meta(d),grace_period_hours:z.number().int().min(0).default(0).meta(d),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(d),is_active:z.boolean().default(true).meta(d)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Na,...B_,...ci()}),r0=Gr("UsageEnforcementSettingsAnchor"),a0=z.object({kind:z.enum(["template","slot"]).meta(d),id:z.string().min(1).meta(d),label:z.string().min(1).optional().meta(d)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Na}),i0=z.object({id:z.string().min(1).meta(d),group:z.array(a0).min(1).meta(d),cap:z.object({count:z.number().int().min(1).meta(d),period:z.enum(["session","day","week","month"]).meta(d)}).meta(d)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Na}),s0=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Na}),z_=z.object({capRules:z.array(i0).default([]).meta(d),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(d),remindLaterMinutes:z.number().int().min(0).default(60).meta(d),testMode:s0.default("off").meta(d)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Na}),Dp=Mn.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:_r.meta({...d,readOnly:true}),global_frequency_cap:z_.nullable().default(null).meta(d),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(d),suppress_for_paid:z.boolean().default(false).meta(d),suppress_for_trial:z.boolean().default(false).meta(d),allow_stacking:z.boolean().default(false).meta(d),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(d)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Na,...B_,...ci()}),o0=Gr("PlacementSettingsAnchor"),l0=z.object({field:z.string().min(1).meta(d),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(d),value:z.string().meta(d)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),c0=z.object({name:z.string().min(1).meta(d),handle:z.string().min(1).meta(d),predicates:z.array(l0).optional().meta(d),dimension_id:z.string().optional().meta(d),experiment_handle:z.string().min(1).optional().meta(d),experiment_id:z.string().min(1).optional().meta(d)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),m0=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),tier_position:z.number().int().min(0).default(0).meta(d),sort_order:z.number().int().min(0).default(0).meta(d),visibility:hs.default("public").meta(d)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),u0=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),sort_order:z.number().int().min(0).default(0).meta(d),visibility:hs.default("public").meta(d)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Fo}),d0=z.object({handle:z.string().min(1).meta(d),plan_handle:z.string().min(1).meta(d),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(d),segment_handle:z.string().nullable().default(null).meta(d),price_amount:z.number().min(0).meta(d),pricing_model:Cc.meta(d),visibility:hs.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:uu.meta(d)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...gs}),p0=z.object({handle:z.string().min(1).meta(d),addon_handle:z.string().min(1).meta(d),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(d),segment_handle:z.string().nullable().default(null).meta(d),price_amount:z.number().min(0).meta(d),pricing_model:Cc.meta(d),visibility:hs.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:uu.meta(d)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...gs}),g0=z.object({handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),description:z.string().nullable().default(null).meta(d),is_default:z.boolean().default(false).meta(d),entitlement_handles:z.array(z.string()).default([]).meta(d)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),h0=z.object({handle:z.string().min(1).meta(d),entitlement_handle:z.string().nullable().default(null).meta(d),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(d),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(d),soft_limit_action:z.string().meta(d),hard_limit_action:z.string().meta(d),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(d),notification_channels:z.array(z.string()).default([]).meta(d),is_active:z.boolean().default(true).meta(d)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),f0=z.object({handle:z.string().min(1).meta(d),global_frequency_cap:z_.nullable().default(null).meta(d),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(d),suppress_for_paid:z.boolean().default(false).meta(d),suppress_for_trial:z.boolean().default(false).meta(d),allow_stacking:z.boolean().default(false).meta(d),priority_collision_strategy:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),_0=z.object({handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),category:z.string().nullable().default(null).meta(d),visibility_toggle:z.boolean().default(true).meta(d),source_type:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),y0=z.object({handle:z.string().min(1).meta(d),entitlement_handle:z.string().min(1).meta(d),meter_handle:z.string().min(1).meta(d),limit:z.number().int().min(0).nullable().default(null).meta(d),reset_period:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),v0=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),type:Hm.meta(d),unit:z.string().optional().meta(d),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),b0=z.object({id:z.string().min(1).meta(d),entitlement_id:z.string().min(1).meta(d),targets:z.array(D_).min(1).meta(d),segment_ids:z.array(z.string()).default([]).meta(d),kind:Hm.optional().meta({...d,readOnly:true}),unit:z.string().optional().meta({...d,readOnly:true}),tier_name:z.string().optional().meta({...d,readOnly:true}),tier_description:z.string().optional().meta({...d,readOnly:true}),...Lo.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(d),allocation:cu.optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),x0=z.object({slot_id:z.string().min(1).meta(d),active:z.boolean().meta(d),triggers:z.array(z.string()).meta(d)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),S0=z.object({id:z.string().min(1).meta(d),label:z.string().min(1).meta(d),description:z.string().meta(d),surface_type:z.string().meta(d),placement_handle:z.string().min(1).meta(d),template:z.string().optional().meta(d)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),P0=z.object({name:z.string().min(1).meta(d),type:z.string().optional().meta(d),required:z.boolean().optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),T0=z.object({id:z.string().min(1).meta(d),surface_type:z.string().meta(d),fields:z.array(P0).optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),I0=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),C0=z.object({name:z.string().min(1).meta(d),action_type:I0.meta(d),plan_handle:z.string().optional().meta(d),promotion_id:z.string().optional().meta(d),placement_handle:z.string().optional().meta(d),url:z.string().optional().meta(d),tour_id:z.string().optional().meta(d),target_billing_period:z.enum(["monthly","annual"]).optional().meta(d),description:z.string().optional().meta(d)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),E0=z.object({id:z.string().meta(d),name:z.string().meta(d),discount:z.string().meta(d),type:z.string().meta(d),status:z.string().meta(d)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),k0=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(d),label:z.string().min(1).meta(d),description:z.string().optional().meta(d),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(d),data_source:z.string().optional().meta(d),example_value:z.string().optional().meta(d),value_map:z.record(z.string(),z.string()).optional().meta(d),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(d)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),A_=z.object({header:z.string().optional().meta(d),body:z.string().optional().meta(d),cta_label:z.string().optional().meta(d),secondary_cta_label:z.string().optional().meta(d)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),R0=z.object({block_id:z.string().min(1).meta(d),tenant_id:z.string().min(1).meta(d),name:z.string().min(1).meta(d),surface_template_id:z.string().optional().meta(d),default_content:A_.meta(d),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:A_})).optional().meta(d),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(d),tokens_used:z.array(z.string()).optional().meta(d),status:z.enum(["draft","active","archived"]).meta(d),created_at:z.string().datetime().meta({...d,readOnly:true}),updated_at:z.string().datetime().meta({...d,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),A0=z.object({label:z.string().meta(d),path:Gf.meta(d),config:z.record(z.string(),z.string()).optional().meta(d)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),K_=z.object({template_id:z.string().min(1).meta(d),fields:z.record(z.string(),z.string()).meta(d),ctas:z.array(A0).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),$_=z.object({plan_ids:z.array(z.string()).meta(d),billing_cadences:z.array(z.string()).optional().meta(d),segment_chips:z.array(z.string()).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),w0=z.object({count:z.number().int().min(1).meta(d),period:z.enum(["session","day","week","month","lifetime"]).meta(d)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),H_=z.object({max_per_period:w0.optional().meta(d),cooldown_days:z.number().int().min(0).optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),j0=z.object({id:z.string().min(1).meta(d),target:$_.meta(d),surfaces:z.array(K_).meta(d),caps:H_.optional().meta(d),surface_slot_ids:z.array(z.string()).optional().meta(d),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(d),created_at:z.string().optional().meta({...d,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(d),recommendation_plan_override:z.string().optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),O0=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ks}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ks}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ks}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),q0=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut}),D0=z.object({id:z.string().min(1).meta(d),name:z.string().min(1).meta(d),category:q0.meta(d),trigger:O0.meta(d),payloads:z.array(j0).meta(d),order:z.number().int().min(0).meta(d)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),U0=z.object({payload_id:z.string().min(1).meta(d),placement_id:z.string().min(1).meta(d),target:$_.meta(d),caps:H_.optional().meta(d),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(d),created_at:z.string().meta({...d,readOnly:true}),updated_at:z.string().datetime().optional().meta({...d,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(d),surfaces:z.array(K_).optional().meta(d),surface_slot_ids:z.array(z.string()).optional().meta(d),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(d)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),M0=z.object({kind:z.string().min(1).meta(d),schema_version:z.number().int().nonnegative().meta(d),config:z.unknown().meta(d)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),F0=Mn.merge(F_).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...gs}),L0=Mn.merge(L_).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...gs}),N0=z.object({plans:z.array(m0).meta({...d,...Rt}),addons:z.array(u0).optional().meta({...d,...Fo}),entitlements:z.array(v0).meta({...d,...Rt}),entitlement_rules:z.array(b0).meta({...d,...Rt}),segments:z.array(c0).meta({...d,...Rt}),content_ui_paths:z.array(C0).meta({...d,...Rt}),slot_configs:z.array(x0).optional().meta({...d,...Rt,...Xm({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...d,...Rt,...Xm({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...d,...ZC,...Xm({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(S0).optional().meta({...d,...Rt}),message_blocks:z.array(R0).optional().meta({...d,...Rt}),placement_payloads:z.array(U0).optional().meta({...d,...Rt}),placements:z.array(D0).optional().meta({...d,...Rt}),content_promotions:z.array(E0).optional().meta({...d,...Rt}),personalization_tokens:z.array(k0).optional().meta({...d,...Rt}),surface_templates:z.array(T0).optional().meta({...d,...Rt}),free_trial_rules:z.array(F0).optional().meta({...d,...Fo}),reverse_trial_rules:z.array(L0).optional().meta({...d,...Fo}),plan_variations:z.array(d0).optional().meta({...d,...Fo}),addon_variations:z.array(p0).optional().meta({...d,...Fo}),extension_rules:z.array(M0).optional().meta({...d,...Rt}),seat_types:z.array(g0).optional().meta({...d,...Rt}),enforcement_defaults:z.array(h0).optional().meta({...d,...Rt}),placement_settings:z.array(f0).optional().meta({...d,...Rt}),segment_dimensions:z.array(_0).optional().meta({...d,...Rt}),meter_bindings:z.array(y0).optional().meta({...d,...Rt}),experiments:z.array(z.unknown()).max(0).optional().meta({...d,...gs}),signal_catalog:z.object({}).strict().optional().meta({...d,...gs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt}),V0=z.object({artifact_type:z.literal("playbook").meta({...d,...wo,readOnly:true}),format_version:z.literal(XC).meta({...d,...wo,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...d,...wo}),playbook_version_id:z.string().nullable().default(null).meta({...d,...jp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...d,...Op,readOnly:true}),environment_id:z.string().min(1).optional().meta({...d,...Op,readOnly:true}),project_id:z.string().min(1).optional().meta({...d,...Op,readOnly:true}),exported_at:z.string().datetime().optional().meta({...d,...jp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...d,...wo,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...d,...wo,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...d,...wo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...jp}),G_=V0.extend(N0.shape).meta({"x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt});function B0(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Y_(t){if(!B0(t))return t;let e={...t};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess(Y_,G_).meta({id:"Playbook","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt});z.preprocess(Y_,G_.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":_t,"x-revturbine-schema-exposure":Ut,...Rt});({"/api/seat-type-anchors":{get:M({operationId:"listSeatTypeAnchors",requestParams:{query:on},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:sn(e0)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:M({operationId:"listSeatTypes",requestParams:{query:on},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:sn(vc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:M({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(vc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:vc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:M({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:vc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:M({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:M({operationId:"listPersonalizationTokenAnchors",requestParams:{query:on},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:sn(t0)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:M({operationId:"listPersonalizationTokens",requestParams:{query:on},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:sn(bc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:M({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(bc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:bc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:M({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:bc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:bc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:M({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:M({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Sa(qp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:qp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:M({operationId:"listMeteringConfigs",requestParams:{query:on},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:sn(xc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:M({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(xc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:M({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:xc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:M({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:M({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:on},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:sn(r0)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:M({operationId:"listUsageEnforcementSettings",requestParams:{query:on},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:sn(Sc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:M({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Sc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Sc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:M({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Sc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Sc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:M({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:M({operationId:"listPlacementSettingsAnchors",requestParams:{query:on},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:sn(o0)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:M({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Sa(Dp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Dp}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});function Bo(){return typeof window>"u"||typeof document>"u"}function Yr(){return !Bo()}var Ec=class{constructor(){this.providers=new Map,this.cache=new Map,this.unsubscribers=new Map;}register(t){let e=this.providers.get(t.domain);if(e&&this.unregister(e.domain),this.providers.set(t.domain,t),t.subscribe){let n=t.subscribe(r=>{this.cache.set(t.domain,{value:r,resolvedAt:Date.now(),ttlMs:t.cacheTtlMs??0});});this.unsubscribers.set(t.domain,n);}}unregister(t){this.providers.delete(t),this.cache.delete(t);let e=this.unsubscribers.get(t);e&&(e(),this.unsubscribers.delete(t));}clear(){for(let t of this.unsubscribers.values())t();this.providers.clear(),this.cache.clear(),this.unsubscribers.clear();}async resolveAll(){let t=Array.from(this.providers.entries()),e=await Promise.all(t.map(async([i,s])=>{let u=this.cache.get(i),y=Date.now();if(u&&u.ttlMs>0&&y-u.resolvedAt<u.ttlMs)return [i,u.value];let k=await s.resolve();return this.cache.set(i,{value:k,resolvedAt:y,ttlMs:s.cacheTtlMs??0}),[i,k]})),n={},r={},a=false;for(let[i,s]of e)if(i==="traits"||i.startsWith("traits:")){let u=s;u?.traits&&(Object.assign(r,u.traits),a=true);}else n[i]=s;return a&&(n.traits={traits:r}),n}async get(t){let e=this.providers.get(t);if(!e)return;let n=this.cache.get(t),r=Date.now();if(n&&n.ttlMs>0&&r-n.resolvedAt<n.ttlMs)return n.value;let a=await e.resolve();return this.cache.set(t,{value:a,resolvedAt:r,ttlMs:e.cacheTtlMs??0}),a}has(t){return this.providers.has(t)}get size(){return this.providers.size}invalidate(t){this.cache.delete(t);}invalidateAll(){this.cache.clear();}},K0=new Set(["cta_completed"]),$0=1440*60*1e3,W_=10080*60*1e3,H0="revturbine:interaction-state",J_=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??W_,this.defaultRemindLaterMs=t.defaultRemindLaterMs??3600*1e3,this.hydrate();}track(t){let e=this.stateKey(t.placementId,t.userId,t.treatmentId),n=Date.now(),r=t.metadata??{},i={...this.state.get(e)??{updatedAt:new Date(n).toISOString()},lastInteractionType:t.interactionType,updatedAt:t.interactionAt??new Date(n).toISOString()};if(t.interactionType==="dismiss"){let s=Number(r.cooldown_ms);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let s=Number(r.remind_after_seconds);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let s=Number(r.cooldown_ms);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(i.suppressedUntil=n+300*1e3),this.state.set(e,i),this.persist();}checkSuppression(t,e,n){let r=this.stateKey(t,e,n),a=this.state.get(r);return a?.suppressedUntil?a.suppressedUntil<=Date.now()?{suppressed:false}:{suppressed:true,reason:a.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}clearSuppression(t,e,n){let r=this.stateKey(t,e,n);this.state.delete(r),this.persist();}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e))!r||typeof r!="object"||this.state.set(n,r);}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.state.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${H0}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},G0="revturbine:presentation-caps";function Vo(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Y0(t){if(!Vo(t))return null;let e=Number(t.count),n=typeof t.period=="string"?t.period:"";return !Number.isFinite(e)||e<=0||n!=="session"&&n!=="day"&&n!=="week"&&n!=="month"&&n!=="lifetime"?null:{count:e,period:n}}var Z_=class{constructor(t){this.capsByKey=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.hydrate();}enforce(t){let e=this.extractPolicies(t);if(e.length===0)return {allowed:true};let n=this.capKey(t),r=Date.now(),a=this.capsByKey.get(n)??{seenAt:[]},i={...a,seenAt:a.seenAt.filter(y=>Number.isFinite(y)&&y>0)},s=gc({perPayload:{policies:e,seenAt:i.seenAt,cooldownUntil:i.cooldownUntil},now:r});if(!s.allowed)return this.capsByKey.set(n,i),{allowed:false,reason:s.reason};i.seenAt.push(r);let u=e.map(y=>y.cooldownMs).filter(y=>typeof y=="number"&&Number.isFinite(y)&&y>0);return u.length>0?i.cooldownUntil=r+Math.max(...u):delete i.cooldownUntil,this.capsByKey.set(n,i),this.persist(),{allowed:true}}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let a=Array.isArray(r.seenAt)?r.seenAt.filter(s=>Number.isFinite(s)&&s>0):[],i=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:a,cooldownUntil:i});}}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.capsByKey.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${G0}:${this.tenantId}:${this.userId}`}capKey(t){return [this.tenantId,this.userId,t.surface.type,t.output_id].join(":")}extractPolicies(t){let e=[],n=[t,t.content,Vo(t.content)?t.content.payload:void 0,Vo(t.content)?t.content.placement:void 0,Vo(t.content)?t.content.surface:void 0];for(let r of n){if(!Vo(r))continue;let a=Vo(r.caps)?r.caps:void 0;if(!a)continue;let i=[],s=Y0(a.max_per_period);s&&i.push(s);let u=Number(a.cooldown_days),y=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:i,...y!==void 0?{cooldownMs:y}:{}});}return e}},zo=class{constructor(){this.store=new Map;}getItem(t){return this.store.get(t)??null}setItem(t,e){this.store.set(t,e);}removeItem(t){this.store.delete(t);}};function Q_(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function X_(t,e=Date.now()){return t?.suppressedUntil?t.suppressedUntil<=e?{suppressed:false}:{suppressed:true,reason:t.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}var Lp=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??$0,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??W_;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,a){let i=a??this.defaultDismissCooldownMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordClickThru(t,e,n,r,a){let i=a??this.defaultDismissCooldownMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"clicked_thru",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordConversion(t,e,n,r){await this.appendRecord(t,"cta_completed",e,n,r),this.retireInCache(t);}async recordSuppression(t,e,n,r,a){let i=a??this.defaultSuppressionMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"suppressed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async isRetired(t){return (await this.getRetiredIds()).has(t)}async getRetiredIds(){if(this.retiredCache)return this.retiredCache;let t=await this.store.getRetiredPlacementIds(this.userId);return this.retiredCache=t,t}isRetiredSync(t){return this.retiredCache?.has(t)??false}isSuppressedSync(t){if(!this.suppressedCache)return false;let e=this.suppressedCache.get(t);return e?new Date(e).getTime()>Date.now()?true:(this.suppressedCache.delete(t),false):false}isHiddenSync(t){return this.isRetiredSync(t)||this.isSuppressedSync(t)}async queryHistory(t){return this.store.query(this.userId,t)}async hydrate(){this.retiredCache=await this.store.getRetiredPlacementIds(this.userId),this.suppressedCache=await this.store.getSuppressedPlacements(this.userId);}async reset(){await this.store.clear(this.userId),this.retiredCache=new Set,this.suppressedCache=new Map;}setUserId(t){this.userId=t,this.retiredCache=null,this.suppressedCache=null;}async appendRecord(t,e,n,r,a){let i={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...a?{metadata:a}:{}};await this.store.append(this.userId,i);}retireInCache(t){this.retiredCache||(this.retiredCache=new Set),this.retiredCache.add(t);}suppressInCache(t,e){this.suppressedCache||(this.suppressedCache=new Map),this.suppressedCache.set(t,e);}},W0=class{constructor(){this.records=new Map;}append(t,e){let n=this.records.get(t)??[];n.push(e),this.records.set(t,n);}query(t,e){let n=this.records.get(t)??[];return e&&(n=ey(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return ty(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return ny(e)}clear(t){this.records.delete(t);}},J0="revturbine:impression-history",du=class{constructor(t){this.storage=t.storage,this.tenantId=t.tenantId,this.maxRecords=t.maxRecords??500;}append(t,e){let n=this.load(t);n.push(e),n.length>this.maxRecords&&n.splice(0,n.length-this.maxRecords),this.save(t,n);}query(t,e){let n=this.load(t);return e&&(n=ey(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return ty(e)}getSuppressedPlacements(t){let e=this.load(t);return ny(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${J0}:${this.tenantId}:${t}`}load(t){let e=this.storage.getItem(this.key(t));if(!e)return [];try{let n=JSON.parse(e);return Array.isArray(n)?n:[]}catch{return []}}save(t,e){try{this.storage.setItem(this.key(t),JSON.stringify(e));}catch{}}};function ey(t,e){let n=t;if(e.placementIds&&e.placementIds.length>0){let r=new Set(e.placementIds);n=n.filter(a=>r.has(a.placementId));}if(e.outcomes&&e.outcomes.length>0){let r=new Set(e.outcomes);n=n.filter(a=>r.has(a.outcome));}if(e.since){let r=new Date(e.since).getTime();n=n.filter(a=>new Date(a.occurredAt).getTime()>=r);}return n}function ty(t){let e=new Set;for(let n of t)K0.has(n.outcome)&&e.add(n.placementId);return e}function ny(t){let e=new Map,n=Date.now();for(let r=t.length-1;r>=0;r--){let a=t[r];if(e.has(a.placementId))continue;let i=a.metadata?.suppressUntil;typeof i=="string"&&new Date(i).getTime()>n&&e.set(a.placementId,i);}return e}function Z0(t){let{config:e,cacheTtlMs:n}=t,r=[];if(t.planHandle){let a={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:t.planHandle,currentPlanName:t.planName??t.planHandle,...t.paymentFailed!==void 0?{paymentFailed:t.paymentFailed}:{},...t.paymentAtRisk!==void 0?{paymentAtRisk:t.paymentAtRisk}:{}})};r.push(a);}if(e.entitlements?.length){let a=t.defaultEntitlementPolicy??"allow",i={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={},u={};for(let y of e.entitlements??[]){s[y.unique_handle]={status:a==="allow"?"allowed":"denied",allowed:a==="allow",reason:`static_config_default_${a}`};let k=t.usage?.[y.unique_handle];k&&(u[y.unique_handle]={used:k.used,limit:k.limit,remaining:Math.max(0,k.limit-k.used),unit:y.unit});}return {entries:s,usage:u,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(i);}if(e.segments?.length){let a={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(i=>i.handle),segmentSlugs:(e.segments??[]).map(i=>i.handle)})};r.push(a);}if(e.entitlement_rules?.length){let a={domain:"rules",cacheTtlMs:n,resolve:()=>{let i={},s=new Map;for(let y of e.entitlements??[]){let k=y;typeof k.unique_handle=="string"&&typeof k.type=="string"&&s.set(k.unique_handle,k.type);}for(let y of e.entitlement_rules??[]){let k=y.entitlement_id;i[k]||(i[k]=[]);let I=y,w=Array.isArray(I.segment_ids)?I.segment_ids.filter(A=>typeof A=="string"):typeof I.segment_id=="string"&&I.segment_id!=="all"?[I.segment_id]:[],O=Array.isArray(I.plan_ids)?I.plan_ids.filter(A=>typeof A=="string"):[],R={ruleId:y.id,entitlementId:k,planIds:(y.targets??[]).length>0?(y.targets??[]).filter(A=>A.kind==="plan").map(A=>A.id):O,segmentIds:w,kind:(()=>{let A=typeof I.type_fields=="object"&&I.type_fields!==null?I.type_fields:{};return (typeof I.kind=="string"?I.kind:void 0)??(typeof A.kind=="string"?A.kind:void 0)??s.get(k)??"feature"})(),fields:{...typeof I.type_fields=="object"&&I.type_fields!==null?I.type_fields:{},...I}};i[k].push(R);}let u={};for(let y of e.segments??[])typeof y.dimension_id=="string"&&typeof y.handle=="string"&&(u[y.handle]=y.dimension_id);return {entitlementRules:i,segmentDimensions:u,configVersion:zm(e)}}};r.push(a);}if(e.message_blocks?.length||e.personalization_tokens?.length){let a={domain:"content",cacheTtlMs:n,resolve:()=>{let i={};for(let s of e.message_blocks??[])i[s.block_id]={blockId:s.block_id,name:s.name,defaultContent:s.default_content,segmentOverrides:s.segment_overrides?.map(u=>({segmentId:u.segment_value_id,content:u.content})),status:s.status};return {messageBlocks:i,personalization:{}}}};r.push(a);}if(e.theme&&Object.keys(e.theme).length>0){let a={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(a);}return r}function Q0(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let a=e.user_context,i={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:a.plan_handle??"unknown",currentPlanName:a.plan_name,billingPeriod:a.billing_period,trialActive:a.trial_active,trialLimitType:a.trial_limit_type,trialProgressPercent:a.trial_progress_percent,trialDaysRemaining:a.trial_days_remaining,trialDaysTotal:a.trial_days_total,trialState:a.trial_state,trialUsageEntitlementHandle:a.trial_usage_entitlement_handle,trialUsageConsumed:a.trial_usage_consumed,trialUsageLimit:a.trial_usage_limit})};r.push(i);}if(e.entitlements){let a=e.entitlements,i={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={};for(let[u,y]of Object.entries(a))s[u]=y;return {entries:s}}};r.push(i);}if(e.user_context){let a=e.user_context;if(Array.isArray(a.segment_ids)){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:a.segment_ids})};r.push(i);}}if(e.user_context){let a=e.user_context;if(a.traits&&typeof a.traits=="object"){let i={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:a.traits})};r.push(i);}}if(e.theme){let a={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(a);}return r}var ry=class{constructor(t){this.registeredPlacements=new Map,this.tenantId=t.tenantId,this.userId=t.userId,this.exportedConfig=t.exportedConfig;let e=t.storage??new zo;this.registry=new Ec;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new J_({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new Z_({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new Lp({store:t.impressionStore??new W0,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new op({registry:this.registry,interactionTracker:this.interactionTracker,capEnforcer:this.capEnforcer,options:t.engineOptions,placements:this.registeredPlacements,placementResolver:n});}registerPlacement(t){this.registeredPlacements.set(t.id,t);}async getPlacementDecision(t){return this.engine.evaluate(t)}async getPlacementDecisions(t){return this.engine.evaluateBatch(t)}async getPlacement(t){let e=this.slotRecordForConfig(t);return e?(this.registerPlacement(e),this.engine.evaluate({placementId:e.id,userId:this.userId})):null}async checkEntitlement(t,e){let n=await this.engine.checkEntitlement(t,e);if(n.reason==="no_entitlement_provider"){let r=await this.engine.resolveProviders();return this.deriveEntitlementFromConfig(t,e,r.plan?.currentPlanHandle??"")}return n}trackInteraction(t){this.engine.trackInteraction(t);}clearSuppression(t,e){this.interactionTracker.clearSuppression(t,e??this.userId);}async resolveProviders(){return this.registry.resolveAll()}evaluateSegments(t){let e=this.exportedConfig.segments??[];return uc(e,t)}buildTargetingState(t,e){return su(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return C_({userId:this.userId,providers:e,base:t})}setUserId(t){this.userId=t,this.impressionHistory.setUserId(t);}getUserId(){return this.userId}getExportedConfig(){return this.exportedConfig}async hydrate(){await this.impressionHistory.hydrate();}updateProviders(t){this.registry.clear();for(let e of t)this.registry.register(e);}slotRecordForConfig(t){if(t.slotId){let r=this.registeredPlacements.get(t.slotId);if(r)return r}let n=(this.exportedConfig.placement_slots??[]).find(r=>t.slotId?r.id===t.slotId:t.surfaceType?r.surface_type===t.surfaceType:false);return n?{id:n.id,name:t.placementHandle??n.placement_handle,route:"",metadata:{surface_slot_id:n.id,surface_type:n.surface_type,surface_template_ids:n.template?[n.template]:[],...t.entitlementHandle?{entitlement_handle:t.entitlementHandle}:{},...t.fixedOnly?{fixedOnly:true}:{}}}:null}buildPlacementResolver(t){let e=t.placements??{placements:t.exportedConfig.placements??[]};return Co({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e,n){return cc({handle:t,context:e,currentPlanHandle:n,segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"denied",allowed:false,reason:"entitlement_not_in_playbook"}}},X0=["web-client"],eE=z.enum(X0),tE=["method","meta","component"],nE=z.enum(tE),rE=["ts","python","java","csharp","rust"];z.enum(rE);var aE=z.object({ts:z.string().min(1).optional(),python:z.string().min(1).optional(),java:z.string().min(1).optional(),csharp:z.string().min(1).optional(),rust:z.string().min(1).optional()}).strict(),iE=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:nE,appliesTo:z.array(eE).min(1),composes:z.string().min(1).optional(),perLanguage:aE.optional(),description:z.string().min(1)}).strict().refine(t=>t.kind!=="meta"||t.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),sE=z.object({version:z.number().int().positive(),functions:z.array(iE).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let a of [r.canonical,...r.aliases]){let i=n.get(a);i!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${a}" (also on "${i}")`,path:["functions"]}),n.set(a,r.canonical);}});sE.parse({version:3,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client"],description:"Check whether the user is entitled to a feature/handle; returns the rich EntitlementResult (allowed, status, reason, limits, enforcement)."},{canonical:"gate",aliases:[],kind:"meta",appliesTo:["web-client"],composes:"checkEntitlement",description:"Gate an action behind an entitlement: checks the handle, runs fn when allowed, otherwise returns the entitlement so the caller can surface a paywall."},{canonical:"trackEvent",aliases:["track"],kind:"method",appliesTo:["web-client"],description:"Emit a product/analytics event powering frequency caps, attribution, and experiments."},{canonical:"updateUsage",aliases:["update"],kind:"method",appliesTo:["web-client"],description:"Patch customer-reported usage balances for client-side metering display (the advertised update({ usage }) verb)."},{canonical:"resetIdentity",aliases:["reset"],kind:"method",appliesTo:["web-client"],description:"Clear the current user and revert to the anonymous identity (e.g. on sign-out)."},{canonical:"identify",aliases:[],kind:"method",appliesTo:["web-client"],description:"Associate the session with a known user id and optional traits/context."},{canonical:"getPlacement",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a single placement decision for a surface."},{canonical:"getPlacementDecision",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a placement decision from an explicit decision input (headless)."},{canonical:"SurfaceSlotComponent",aliases:["Slot","RTSlot"],kind:"component",appliesTo:["web-client"],description:"React slot component that renders the resolved placement; advertised as <Slot> (<RTSlot> is the deprecated prior name)."},{canonical:"AccessGateSurfaceSlot",aliases:["Gate"],kind:"component",appliesTo:["web-client"],description:"React component that gates content behind an entitlement, rendering an upsell placement when denied; advertised as <Gate>."}]});var oE=[{from:"entitlement_rules",field:"targets[].id",to:"plans",by:"unique_handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"plan",note:"Entry-level; a rule losing its last target is swept whole (targets.min(1))."},{from:"entitlement_rules",field:"targets[].id",to:"addons",by:"unique_handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"addon",note:"Entry-level; a rule losing its last target is swept whole (targets.min(1))."},{from:"entitlement_rules",field:"targets[].id",to:"plan_variations",by:"handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"plan_variation",note:"Variation-level targeting is dead per the plan-125 audit; declared for kind-enum totality."},{from:"entitlement_rules",field:"targets[].id",to:"addon_variations",by:"handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"addon_variation",note:"Variation-level targeting is dead per the plan-125 audit; declared for kind-enum totality."},{from:"plan_variations",field:"plan_handle",to:"plans",by:"unique_handle",kind:"one",onDelete:"cascade",resolution:"playbook"},{from:"addon_variations",field:"addon_handle",to:"addons",by:"unique_handle",kind:"one",onDelete:"cascade",resolution:"playbook"},{from:"plan_variations",field:"segment_handle",to:"segments",by:"handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"Detach would silently widen variation availability \u2014 restrict pending Q-1 ratification."},{from:"addon_variations",field:"segment_handle",to:"segments",by:"handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"Detach would silently widen variation availability \u2014 restrict pending Q-1 ratification."},{from:"free_trial_rules",field:"plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:'null means "All plans" and never blocks.'},{from:"free_trial_rules",field:"convert_to_plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook"},{from:"free_trial_rules",field:"fallback_plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook"},{from:"reverse_trial_rules",field:"premium_plan_id",to:"plans",by:"unique_handle",kind:"one",onDelete:"restrict",resolution:"playbook"},{from:"reverse_trial_rules",field:"fallback_plan_id",to:"plans",by:"unique_handle",kind:"one",onDelete:"restrict",resolution:"playbook"},{from:"placements",field:"trigger.entitlement_handle",to:"entitlements",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"entitlement_gate / usage_threshold / credit_threshold / seat_threshold trigger variants."},{from:"placements",field:"trigger.slot_id",to:"placement_slots",by:"id",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"surface_render trigger variant."},{from:"placement_payloads",field:"target.segment_chips[]",to:"segments",by:"handle",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry",note:"Chip resolution falls back segment \u2192 plan \u2192 literal; stale chips degrade to literals."},{from:"placement_payloads",field:"target.segment_chips[]",to:"plans",by:"unique_handle",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry",note:"Chip resolution falls back segment \u2192 plan \u2192 literal; stale chips degrade to literals."},{from:"placement_payloads",field:"surface_slot_ids[]",to:"placement_slots",by:"id",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry"},{from:"customer_overrides",field:"plan_handle",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Grant-Plan overrides (Q-1 restrict class)."},{from:"subscriptions",field:"variation_handle",to:"plan_variations",by:"handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Active-subscriber variations (Q-1 restrict class)."},{from:"subscriptions",field:"variation_handle",to:"addon_variations",by:"handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Active-subscriber add-on variations (Q-1 restrict class)."}];function lE(){let t=[];for(let[e,n]of Object.entries(Ep))for(let[r,a]of Object.entries(n.fields)){let i=a.reference;if(i){if(!i.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${i.table} has no onDelete policy`);t.push({from:e,field:r,to:i.table,by:i.by,kind:i.kind,onDelete:i.onDelete,resolution:"playbook"});}}return t}function cE(t){return [...t].sort((e,n)=>e.from.localeCompare(n.from)||e.field.localeCompare(n.field)||e.to.localeCompare(n.to)||(e.targetKind??"").localeCompare(n.targetKind??""))}Object.freeze(cE([...lE(),...oE]));var ay="traits:server",kc=class{constructor(){j(this,"domain",ay);j(this,"snapshot",{});}setSnapshot(e){this.snapshot=e??{};}hasSignals(){return Object.keys(this.toTraits()).length>0}resolve(){return {traits:this.toTraits()}}toTraits(){let e={},n=this.snapshot.trial;return n&&(typeof n.in_trial=="boolean"&&(e.trial_active=n.in_trial),typeof n.state=="string"&&n.state.length>0&&(e.trial_state=n.state),typeof n.days_remaining=="number"&&(e.trial_days_remaining=n.days_remaining)),this.snapshot.payment_at_risk===true&&(e.payment_at_risk=true),e}};var Np={workspace_name:"Your workspace",theme:{}};function iy(t){return !!t&&Object.keys(t).length>0}var sy=false;function Vp(t={}){let e=(n,r)=>({branding:{...Np,...n,theme:{...Np.theme,...n?.theme}},source:r});return iy(t.explicit)?e(t.explicit,"explicit"):iy(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!sy&&Vs()&&(sy=true,console.warn("[RevTurbine] Branding embedded in the config `theme` field is deprecated. Pass a `branding` option to the SDK, or resolve it via the Branding API. See the Branding resolution ladder in the SDK docs.")),e({theme:t.legacyConfigTheme},"legacy-config")):e(void 0,"default")}var oy="[REDACTED]",mE=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,uE=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,dE=/\d(?:[ -]?\d){12,18}/g;function pE(t){let e=0,n=false;for(let r=t.length-1;r>=0;r-=1){let a=t.charCodeAt(r)-48;if(a<0||a>9)return false;if(n){let i=a*2;i>9&&(i-=9),e+=i;}else e+=a;n=!n;}return e%10===0}function gE(t){let e=0,n=t.replace(mE,()=>(e+=1,oy));return n=n.replace(dE,r=>{let a=r.replace(/[ -]/g,"");return a.length>=13&&a.length<=19&&pE(a)?(e+=1,oy):r}),{value:n,count:e}}function Bp(t){let e=0,n=r=>{if(typeof r=="string"){let a=gE(r);return e+=a.count,a.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let a={};for(let[i,s]of Object.entries(r))a[i]=n(s);return a}return r};return {value:n(t),redactions:e}}function hE(t){return uE.test(t.trim())}function fE(t){let e=t.trim().toLowerCase();return `eml_${vE(e).slice(0,16)}`}function zp(t){return hE(t)?{value:fE(t),redacted:true}:{value:t,redacted:false}}function ly(t){let e=zp(t.user_id??""),n=Bp({url:t.url,path:t.path,page_title:t.page_title,tags:t.tags,traits:t.identity?.traits??null,properties:t.properties});return {value:{...t,url:n.value.url,path:n.value.path,page_title:n.value.page_title,tags:n.value.tags,user_id:t.user_id===null||t.user_id===void 0?t.user_id:e.value,identity:t.identity?{...t.identity,traits:n.value.traits??void 0}:t.identity,properties:n.value.properties},redactions:n.redactions+(e.redacted?1:0)}}var _E=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function yE(t){let e=[];for(let n=0;n<t.length;n+=1){let r=t.charCodeAt(n);if(r<128)e.push(r);else if(r<2048)e.push(192|r>>6,128|r&63);else if(r>=55296&&r<=56319){let a=r,i=t.charCodeAt(n+1);n+=1,r=65536+((a&1023)<<10)+(i&1023),e.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|r&63);}else e.push(224|r>>12,128|r>>6&63,128|r&63);}return e}function Pi(t,e){return t>>>e|t<<32-e}function vE(t){let e=yE(t),n=e.length*8;for(e.push(128);e.length%64!==56;)e.push(0);for(let O=0;O<4;O+=1)e.push(0);e.push(n>>>24&255,n>>>16&255,n>>>8&255,n&255);let r=1779033703,a=3144134277,i=1013904242,s=2773480762,u=1359893119,y=2600822924,k=528734635,I=1541459225,w=new Array(64);for(let O=0;O<e.length;O+=64){for(let J=0;J<16;J+=1){let ot=O+J*4;w[J]=(e[ot]<<24|e[ot+1]<<16|e[ot+2]<<8|e[ot+3])>>>0;}for(let J=16;J<64;J+=1){let ot=Pi(w[J-15],7)^Pi(w[J-15],18)^w[J-15]>>>3,Pn=Pi(w[J-2],17)^Pi(w[J-2],19)^w[J-2]>>>10;w[J]=w[J-16]+ot+w[J-7]+Pn>>>0;}let R=r,A=a,U=i,oe=s,Z=u,_e=y,De=k,ne=I;for(let J=0;J<64;J+=1){let ot=Pi(Z,6)^Pi(Z,11)^Pi(Z,25),Pn=Z&_e^~Z&De,An=ne+ot+Pn+_E[J]+w[J]>>>0,be=Pi(R,2)^Pi(R,13)^Pi(R,22),xt=R&A^R&U^A&U,gn=be+xt>>>0;ne=De,De=_e,_e=Z,Z=oe+An>>>0,oe=U,U=A,A=R,R=An+gn>>>0;}r=r+R>>>0,a=a+A>>>0,i=i+U>>>0,s=s+oe>>>0,u=u+Z>>>0,y=y+_e>>>0,k=k+De>>>0,I=I+ne>>>0;}return [r,a,i,s,u,y,k,I].map(O=>O.toString(16).padStart(8,"0")).join("")}var cy={web_signed_up:"system",web_signed_in:"system",cli_signed_up:"system",cli_signed_in:"system",cli_command_executed:"system",changeset_submitted:"workflow",changeset_approved:"workflow",changeset_rejected:"workflow",changeset_deployed:"workflow",changeset_launched:"workflow",changeset_parked:"workflow",changeset_resumed:"workflow",changeset_discarded:"workflow",changeset_archived:"workflow",config_imported:"workflow",config_exported:"workflow",entity_created:"workflow",entity_updated:"workflow",entity_deleted:"workflow",web_api_error:"system"},my="control_plane_source";function Kp(t,e={}){return {eventName:t,properties:{[my]:cy[t],...e}}}var Rc=class{constructor(e){j(this,"backend");this.backend=e;}getItem(e){try{return this.backend.getItem(e)}catch{return null}}setItem(e,n){try{this.backend.setItem(e,n);}catch{}}removeItem(e){try{this.backend.removeItem(e);}catch{}}};function fs(t){if(t)return t;if(Yr())try{return new Rc(window.localStorage)}catch{}return new zo}function $p(t){if(t)return t;if(Yr())try{return new Rc(window.sessionStorage)}catch{}return new zo}var bE=/^[a-z0-9._]{1,100}$/,En={Persisted:"persisted",Transient:"transient"},vn={Internal:"internal",External:"external"},fn={Pii:{"x-revturbine-data-classification":"pii"},Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}};var Iy="x-revturbine-schema-exposure",SE="readOnly",PE="x-revturbine-decision-only",uy={[PE]:true},Ta={[Iy]:vn.External},TE={[Iy]:vn.Internal};function Ur(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[SE]===true||(e[n]=r);}return z.object(e)}function Mr(t){let e=Ur(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(bE)}):e}var {Unrestricted:br}=fn,{Transient:Qr,Persisted:IE}=En,{Internal:Ys,External:Ei}=vn;z.object({page:z.coerce.number().int().min(1).default(1).meta(br),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(br)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei});var CE=t=>z.object({items:z.array(t).meta(br),total:z.number().int().min(0).meta(br),page:z.number().int().min(1).meta(br),per_page:z.number().int().min(1).meta(br),has_more:z.boolean().meta(br)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei}),ze=z.object({created_at:z.string().datetime().meta({...br,readOnly:true}),updated_at:z.string().datetime().meta({...br,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei}),he=z.object({id:z.string().min(1).meta({...br,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei}),at=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...br,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ys});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei});var xu=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei}),Cy=["allowed","limited","denied"],pu={window_days:30,high_min:10,medium_min:3,low_min:1};z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei});var dg=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei}),EE=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ys});var Xn=z.string().min(1).max(200),Yt=z.string().min(1).max(100),Ws=z.string().max(500).optional(),er=z.record(z.string(),z.unknown()).default({}),Mc=z.number().int().min(10).max(100).multipleOf(10),Kn=z.string().datetime().nullable().default(null),Sn=z.object({environment_id:z.string().min(1).default("production").meta({...br,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ys}),kn=z.object({playbook_version_id:z.string().nullable().default(null).meta(br),is_current:z.boolean().default(true).meta({...br,readOnly:true}),is_deleted:z.boolean().default(false).meta({...br,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...br,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...br,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...br,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ys}),kE=he.merge(ze).merge(at).merge(Sn).extend({handle:Yt.meta({...br,readOnly:true}),active:z.boolean().default(true).meta({...br,readOnly:true})});function pr(t){return kE.meta({id:t,"x-revturbine-schema-persistence":IE,"x-revturbine-schema-exposure":Ys})}var pg=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ys}),RE=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ys}),Ey=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ei}),Mt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},wa={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},AE="x-revturbine-context",wE="x-revturbine-in-config",jE="x-revturbine-sdk-input",OE="x-revturbine-source",qE="x-revturbine-deprecation",DE={[Mt.Playbook]:wa.Customer,[Mt.Branding]:wa.Customer,[Mt.Billing]:wa.Stripe,[Mt.Metering]:wa.Customer,[Mt.CustomerOperations]:wa.Runtime,[Mt.EventIngestion]:wa.Runtime};function mn(t,e){return {[AE]:t,[wE]:e.inConfig??t===Mt.Playbook,[jE]:e.sdkInput,[OE]:e.source??DE[t]}}function Hp(t){return {deprecated:true,[qE]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var ky={Named:"named",Minted:"minted"},Ry="x-revturbine-schema-identity";function zr(t="handle"){return {[Ry]:{kind:ky.Named,handleField:t}}}function Ka(t="handle"){return {[Ry]:{kind:ky.Minted,handleField:t}}}var ce=t=>z.object({items:z.array(t)}),kt=z.object({error:z.string(),code:z.string(),request_id:z.string()}),_=t=>t,me=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()}),{Unrestricted:Zt,Financial:bu}=fn,{Persisted:Vc,Transient:Su}=En,{External:Zi}=vn,UE=mn(Mt.Playbook,{sdkInput:true}),ME=mn(Mt.Playbook,{sdkInput:false}),gg=mn(Mt.Billing,{sdkInput:false}),xs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Su,"x-revturbine-schema-exposure":Zi}),Bc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Su,"x-revturbine-schema-exposure":Zi}),Pu=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Su,"x-revturbine-schema-exposure":Zi}),Zo=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),name:Xn.meta(Zt),handle:Yt.meta(Zt),tier_position:z.number().int().min(0).default(0).meta(Zt),sort_order:z.number().int().default(0).meta(Zt),visibility:xs.default("public").meta(Zt),metadata:er.meta(Zt)}).meta({id:"Plan","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Zi,...UE,...zr()}),FE=pr("PlanAnchor"),Qo=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),handle:Yt.meta({...Zt,readOnly:true}),plan_id:z.string().min(1).meta(Zt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Zt),segment_id:z.string().nullable().default(null).meta(Zt),price_amount:z.number().min(0).meta(bu),pricing_model:Bc.meta(Zt),visibility:xs.default("public").meta(Zt),stripe_price_id:z.string().optional().meta(Zt),price_source:Pu.default("static").meta(Zt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Zi,...gg,...Ka()}),LE=pr("PlanVariationAnchor"),Xo=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),name:Xn.meta(Zt),handle:Yt.meta(Zt),sort_order:z.number().int().default(0).meta(Zt),visibility:xs.default("public").meta(Zt),metadata:er.meta(Zt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Zi,...ME,...zr()}),NE=pr("AddOnAnchor"),el=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),handle:Yt.meta({...Zt,readOnly:true}),addon_id:z.string().min(1).meta(Zt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Zt),segment_id:z.string().nullable().default(null).meta(Zt),price_amount:z.number().min(0).meta(bu),pricing_model:Bc.meta(Zt),visibility:xs.default("public").meta(Zt),stripe_price_id:z.string().optional().meta(Zt),price_source:Pu.default("static").meta(Zt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Zi,...gg,...Ka()}),VE=pr("AddOnVariationAnchor"),BE=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Su,"x-revturbine-schema-exposure":Zi}),tl=he.merge(ze).merge(at).extend({stripe_price_id:z.string().min(1).meta(Zt),stripe_product_id:z.string().min(1).meta(Zt),billing_period:BE.meta(Zt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(bu),currency:EE.meta(bu),pricing_model:Bc.meta(Zt),nickname:z.string().nullable().default(null).meta(Zt),is_mock:z.boolean().default(false).meta(Zt),last_updated_from_stripe:Kn.meta(Zt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Zi,...gg});var zE=Ur(Zo),KE=Ur(Qo),$E=Ur(Xo),HE=Ur(el),GE=Ur(tl);({"/api/plan-anchors":{get:_({operationId:"listPlanAnchors",requestParams:{query:me},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:ce(FE)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:_({operationId:"listPlans",requestParams:{query:me},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:ce(Zo)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:_({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(Zo)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Zo}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:_({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Zo}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:_({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:zE}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Zo}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:_({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:_({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:_({operationId:"listPlanVariationAnchors",requestParams:{query:me},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:ce(LE)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:_({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:me},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:ce(Qo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:_({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(Qo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Qo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:_({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:Qo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:_({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:KE}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Qo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:_({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:_({operationId:"listAddOnAnchors",requestParams:{query:me},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:ce(NE)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:_({operationId:"listAddOns",requestParams:{query:me},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:ce(Xo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:_({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(Xo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:_({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:_({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:$E}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:_({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:_({operationId:"listAddOnVariationAnchors",requestParams:{query:me},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:ce(VE)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:_({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:me},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:ce(el)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:_({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(el)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:el}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:_({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:el}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:_({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:HE}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:el}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:_({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:_({operationId:"listStripePrices",requestParams:{query:me},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:ce(tl)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:_({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(tl)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:tl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:_({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:tl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:_({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:GE}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:tl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:_({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:Ce}=fn,{Persisted:hg,Transient:Ia}=En,{Internal:Ay,External:ua}=vn,wy=mn(Mt.Playbook,{sdkInput:true}),YE=mn(Mt.Playbook,{inConfig:false,sdkInput:false}),jy=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),Tu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),WE=z.enum(Cy).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),JE=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),Oy=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),Fc=z.object({entitlement_id:z.string().min(1).meta(Ce),entitlement_handle:z.string().min(1).meta(Ce),status:WE.meta(Ce),limit:z.number().optional().meta(Ce),used:z.number().optional().meta(Ce),allocation:Tu.optional().meta(Ce),enforcement:Oy.optional().meta(Ce),source:JE.optional().meta(Ce),plan_id:z.string().optional().meta(Ce),segment_id:z.string().optional().meta(Ce),seat_type_id:z.string().optional().meta(Ce),rule_id:z.string().optional().meta(Ce)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua,...fn.Operational});z.object({account:z.record(z.string(),Fc).optional().meta(Ce),instance:z.record(z.string(),Fc).optional().meta(Ce),user:z.record(z.string(),Fc).optional().meta(Ce)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua,...fn.Operational});var ZE=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),QE=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),qy=z.object({kind:QE.meta(Ce),id:z.string().min(1).meta(Ce)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),XE=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),nl=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ce,readOnly:true}),name:Xn.meta(Ce),handle:Yt.meta(Ce),customer_facing_description:z.string().max(500).optional().meta(Ce),type:dg.meta(Ce),unit:z.string().max(100).optional().meta(Ce),period_scope:jy.optional().meta(Ce),allocation:Tu.optional().meta(Ce),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Ce),sort_order:z.number().int().default(0).meta(Ce),metadata:er.meta(Ce)}).meta({id:"Entitlement","x-revturbine-schema-persistence":hg,"x-revturbine-schema-exposure":ua,...wy,...zr()}),ek=pr("EntitlementAnchor"),sl=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ce,readOnly:true}),handle:Yt.meta({...Ce,readOnly:true}),entitlement_id:z.string().min(1).meta(Ce),targets:z.array(qy).min(1).meta(Ce),segment_ids:z.array(z.string()).default([]).meta(Ce),visibility:ZE.default("public").meta(Ce),period_scope:jy.optional().meta(Ce),instance:z.string().max(100).optional().meta(Ce),reset_period:XE.optional().meta(Ce),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Ce),enforcement:Oy.optional().meta(Ce),warning_threshold_percent:Mc.optional().meta(Ce),overage_price_ref:z.string().optional().meta(Ce),grace_period_hours:z.number().int().min(0).optional().meta(Ce),tier_value:z.string().optional().meta(Ce),rate_value:z.number().optional().meta(Ce),initial_grant:z.number().optional().meta(Ce),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Ce),rollover_enabled:z.boolean().optional().meta(Ce),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Ce),seat_type_id:z.string().optional().meta(Ce),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Ce),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Ce),stripe_metered_price_id:z.string().optional().meta(Ce),enabled:z.boolean().optional().meta(Ce),allocation:Tu.optional().meta(Ce),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Ce),amount_cents:z.number().int().optional().meta(Ce),currency:z.string().optional().meta(Ce)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":hg,"x-revturbine-schema-exposure":Ay,...wy,...Ka()}),tk=pr("EntitlementRuleAnchor");sl.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var nk=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),rk=z.object({code:nk.meta(Ce),message:z.string().min(1).meta(Ce),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ce)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua}),Gp=sl.extend({warnings:z.array(rk).optional().meta(Ce)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ua});var Yp=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({handle:Yt.meta({...Ce,readOnly:true}),rule_id:z.string().min(1).meta(Ce),experiment_id:z.string().min(1).meta(Ce),variant_name:z.string().min(1).max(200).meta(Ce),is_control:z.boolean().default(false).meta(Ce),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Ce)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":hg,"x-revturbine-schema-exposure":Ay,...YE,...Ka()}),ak=Ur(nl),ik=Ur(sl);({"/api/entitlement-anchors":{get:_({operationId:"listEntitlementAnchors",requestParams:{query:me},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:ce(ek)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:_({operationId:"listEntitlementRuleAnchors",requestParams:{query:me},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:ce(tk)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:_({operationId:"listEntitlements",requestParams:{query:me},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:ce(nl)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:_({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Mr(nl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:nl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:_({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:nl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:_({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:ak}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:_({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:_({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:me},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:ce(sl)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:_({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Mr(sl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Gp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:_({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:ik}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Gp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:_({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Gp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:_({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:me},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:ce(Yp)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:_({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Mr(Yp)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Qe}=fn,{Persisted:Iu,Transient:Ss}=En,{External:$a}=vn,Dy=mn(Mt.Playbook,{sdkInput:true});mn(Mt.Playbook,{inConfig:false,sdkInput:false});var sk=mn(Mt.Playbook,{inConfig:false,sdkInput:true}),ok=mn(Mt.Playbook,{inConfig:false,sdkInput:false,source:wa.Runtime}),lk=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Uy=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":$a}),My=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":$a}),ck=z.object({count:z.number().int().positive().meta(Qe),period:My.meta(Qe)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":$a});z.object({surface_type:z.string().min(1).meta(Qe),rules:z.array(ck).meta(Qe),cooldown_ms:z.number().int().nonnegative().optional().meta(Qe)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Iu,"x-revturbine-schema-exposure":$a,...fn.Operational,...sk});var mk=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":$a}),al=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Qe,readOnly:true}),name:Xn.meta(Qe),handle:Yt.meta(Qe),description:Ws.meta(Qe),category:Uy.meta(Qe),drag_order_in_category:z.number().int().default(0).meta(Qe),surface_slot_id:z.string().optional().meta(Qe),entitlement_id:z.string().optional().meta(Qe),tier_threshold:z.string().optional().meta(Qe),threshold_percent:Mc.optional().meta(Qe),trial_type:z.enum(["free","reverse"]).optional().meta(Qe),trigger_type:z.string().optional().meta(Qe),trial_progress_percent:z.number().min(0).max(100).optional().meta(Qe),days_before_end:z.number().int().min(0).optional().meta(Qe),qualifier:lk.optional().meta(Qe),activation_window_start:z.string().datetime().optional().meta(Qe),activation_window_end:z.string().datetime().optional().meta(Qe),metadata:er.meta(Qe)}).meta({id:"Placement","x-revturbine-schema-persistence":Iu,"x-revturbine-schema-exposure":$a,...Dy,...zr()}),uk=pr("PlacementAnchor"),dk=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":$a}),pk=z.object({code:dk.meta(Qe),message:z.string().min(1).meta(Qe),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Qe)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":$a}),dy=al.extend({warnings:z.array(pk).optional().meta(Qe)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":$a});var gk=z.object({label:z.string().min(1).max(200).meta(Qe),cta_path_type:mk.meta(Qe),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Qe)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":$a}),Dc=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Qe,readOnly:true}),handle:Yt.meta({...Qe,readOnly:true}),placement_id:z.string().min(1).meta(Qe),drag_order:z.number().int().default(0).meta(Qe),target_plan_ids:z.array(z.string()).default([]).meta(Qe),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Qe),target_segments:z.array(z.string()).default([]).meta(Qe),surface_slot_ids:z.array(z.string()).default([]).meta(Qe),surface_template_id:z.string().min(1).meta(Qe),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Qe),cta_list:z.array(gk).default([]).meta(Qe),max_per_period:z.number().int().min(0).nullable().default(null).meta(Qe),max_period_unit:My.default("session").meta(Qe),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Qe),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Qe),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Qe),recommendation_plan_override:z.string().optional().meta(Qe)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Iu,"x-revturbine-schema-exposure":$a,...Dy,...Ka()}),hk=pr("PlacementPayloadAnchor"),fk=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({surface_slot_handle:z.string().min(1).max(200).meta(Qe),surface_type:xu.meta(Qe),surface_template_ids:z.array(z.string()).default([]).meta(Qe),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Qe),first_seen:z.string().datetime().meta({...Qe,readOnly:true}),last_seen:z.string().datetime().meta({...Qe,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Qe),placement_count:z.number().int().min(0).default(0).meta({...Qe,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Iu,"x-revturbine-schema-exposure":$a,...ok,...zr("surface_slot_handle")}),_k=Ur(al),yk=Ur(Dc);({"/api/placement-anchors":{get:_({operationId:"listPlacementAnchors",requestParams:{query:me},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:ce(uk)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:_({operationId:"listPlacements",requestParams:{query:me},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:ce(al)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:_({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Mr(al)}}},responses:{201:{description:"Created",content:{"application/json":{schema:dy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:_({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:al}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:_({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:_k}}},responses:{200:{description:"Updated",content:{"application/json":{schema:dy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:_({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:_({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:al}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:_({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Uy,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:_({operationId:"listPlacementPayloadAnchors",requestParams:{query:me},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:ce(hk)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:_({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:me},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:ce(Dc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:_({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Mr(Dc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Dc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:_({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:yk}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Dc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:_({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:_({operationId:"listSurfaceSlots",requestParams:{query:me},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:ce(fk)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Br,Pii:ol}=fn,{Persisted:fg,Transient:_g}=En,{Internal:cl}=vn,vk=mn(Mt.CustomerOperations,{sdkInput:false}),bk=z.object({external_id:z.string().min(1).meta(ol),traits:z.record(z.string(),z.unknown()).default({}).meta(ol),plan_id:z.string().optional().meta(Br)}).meta({id:"Identity","x-revturbine-schema-persistence":fg,"x-revturbine-schema-exposure":cl}),Fy=z.enum(["payment_failed","payment_method_missing"]),py=he.merge(ze).merge(at).extend({external_id:z.string().min(1).meta(ol),identity:bk.meta(ol),stripe_customer_id:z.string().optional().meta(Br),current_plan_id:z.string().optional().meta(Br),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Br),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Br),billing_health_issues:z.array(Fy).default([]).meta(Br),metadata:er.meta(Br)}).meta({id:"Customer","x-revturbine-schema-persistence":fg,"x-revturbine-schema-exposure":cl}),xk=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":_g,"x-revturbine-schema-exposure":cl}),Sk=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":_g,"x-revturbine-schema-exposure":cl}),Pk=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":_g,"x-revturbine-schema-exposure":cl}),_s=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({handle:Yt.meta({...Br,readOnly:true}),customer_id:z.string().min(1).meta(ol),customer_id_list:z.array(z.string()).optional().meta(ol),override_type:Sk.meta(Br),target_id:z.string().min(1).meta(Br),value:z.record(z.string(),z.unknown()).default({}).meta(Br),duration_type:xk.default("permanent").meta(Br),duration_value:z.string().optional().meta(Br),expiry_date:Kn.meta(Br),status:Pk.default("active").meta(Br),reason:z.string().max(500).optional().meta(Br),created_by:z.string().optional().meta(Br)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":fg,"x-revturbine-schema-exposure":cl,...vk,...Ka()});({"/api/customers":{get:_({operationId:"listCustomers",requestParams:{query:me},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:ce(py)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:_({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:py}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:_({operationId:"listCustomerOverrides",requestParams:{query:me},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:ce(_s)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:_({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:_s}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:_({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:_s.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_s}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:_({operationId:"deleteCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:_({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:_s}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:_({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:_s}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:Be,Pii:Uc,Financial:Wp}=fn,{Persisted:Ly,Transient:ki}=En,{External:ml,Internal:zc}=vn,yg=z.object({in_trial:z.boolean().meta(Be),trial_type:z.string().optional().meta(Be),plan_handle:z.string().optional().meta(Be),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(Be),trial_limit_type:z.enum(["time","usage"]).optional().meta(Be),progress_percent:z.number().min(0).max(100).optional().meta(Be),day_number:z.number().int().min(0).optional().meta(Be),days_remaining:z.number().int().min(0).optional().meta(Be),usage_entitlement_handle:z.string().optional().meta(Be),usage_consumed:z.number().int().min(0).optional().meta(Be),usage_remaining:z.number().int().min(0).optional().meta(Be),usage_limit:z.number().int().min(0).optional().meta(Be)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":ml}),Ny=z.object({entitlement_handle:z.string().min(1).meta(Be),unit:z.string().min(1).meta(Be),amount:z.number().min(0).meta(Be),limit:z.number().min(0).optional().meta(Be),reset_date:z.string().optional().meta(Be)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":ml});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":ml});var Vy=z.object({handle:z.string().min(1).meta(Be),name:z.string().min(1).meta(Be),price:z.string().optional().meta(Be),billing_period:z.enum(["monthly","annual","none"]).optional().meta(Be)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":ml}),Tk=z.object({product_instance_id:z.string().min(1).meta(Be),user_id:z.string().min(1).meta(Uc),plan:Vy.optional().meta(Be),usage:z.record(z.string(),Ny).default({}).meta(Be),trial:yg.optional().meta(Be),entitlements:z.record(z.string(),z.union([z.boolean(),Fc])).default({}).meta(Be)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":Ly,"x-revturbine-schema-exposure":ml}),Ko=he.merge(at).merge(ze).extend({user_id:z.string().min(1).meta(Uc),account_id:z.string().min(1).nullable().optional().meta(Uc),email:z.string().email().nullable().optional().meta(Uc),email_type:z.string().optional().meta(Be),plan_handle:z.string().min(1).optional().meta(Be),plan:Vy.optional().meta(Be),usage:z.record(z.string(),Ny).default({}).meta(Be),trial:yg.optional().meta(Be),payment_failed:z.boolean().optional().meta(Be),payment_at_risk:z.boolean().optional().meta(Be),tiers:z.record(z.string(),z.string()).optional().meta(Be),entitlements:z.record(z.string(),z.union([z.boolean(),Fc])).default({}).meta(Be),instances:z.array(Tk).optional().meta(Be),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Uc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Be,"x-revturbine-schema-persistence":ki}),derived_config_version:z.string().nullable().optional().meta(Be),context_hash:z.string().nullable().optional().meta(Be),derived_computed_at:Kn.meta(Be),activity_score:z.number().int().min(0).nullable().optional().meta(Be),activity_score_computed_at:z.string().datetime().nullable().optional().meta(Be),experiments:z.record(z.string(),z.string()).optional().meta(Be)}).meta({id:"UserContext","x-revturbine-schema-persistence":Ly,"x-revturbine-schema-exposure":ml}),Ik=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Be,...Ta}),days_remaining:z.number().int().min(0).optional().meta({...Be,...Ta}),ends_at:z.string().optional().meta({...Be,...Ta})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":zc}),Ck=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Be,...Ta}),failed_payment_reason:z.string().optional().meta({...Wp,...uy}),issues:z.array(Fy).optional().meta({...Wp,...uy}),provider_subscription_id:z.string().optional().meta({...Wp,...TE})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":zc}),Ek=z.object({can_upgrade:z.boolean().optional().meta({...Be,...Ta}),can_manage_billing:z.boolean().optional().meta({...Be,...Ta})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":zc}),kk=z.object({handle:z.string().min(1).optional().meta({...Be,...Ta}),name:z.string().min(1).optional().meta({...Be,...Ta})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":zc});z.object({subject:z.string().min(1).meta({...Be,...Ta}),context_version:z.string().optional().meta({...Be,...Ta}),trial:Ik.optional().meta({...Be,...Ta}),billing:Ck.optional().meta({...Be,...Ta}),plan:kk.optional().meta({...Be,...Ta}),capabilities:Ek.optional().meta({...Be,...Ta})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":zc});({"/api/user-contexts":{get:_({operationId:"listUserContexts",requestParams:{query:me},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:ce(Ko)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:_({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:Ko}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:_({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:Ko.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ko}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:_({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:Qn}=fn,{Persisted:vg,Transient:By}=En,{Internal:Kc}=vn,Rk=mn(Mt.Playbook,{sdkInput:true}),zy=mn(Mt.Playbook,{inConfig:false,sdkInput:true}),Ak=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":By,"x-revturbine-schema-exposure":Kc}),wk=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":By,"x-revturbine-schema-exposure":Kc}),Jp=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Qn,readOnly:true}),name:Xn.meta(Qn),handle:Yt.optional().meta(Qn),category:Ak.default("custom").meta(Qn),visibility_toggle:z.boolean().default(true).meta(Qn),source_type:wk.default("system").meta(Qn),estimated_size:z.number().int().min(0).optional().meta(Qn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":vg,"x-revturbine-schema-exposure":Kc,...zy,...zr()}),jk=pr("SegmentDimensionAnchor"),Zp=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Qn,readOnly:true}),dimension_id:z.string().min(1).meta(Qn),name:Xn.meta(Qn),handle:Yt.meta(Qn),description:Ws.meta(Qn),definition_rule:z.record(z.string(),z.unknown()).optional().meta(Qn),used_in_count:z.number().int().min(0).default(0).meta({...Qn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":vg,"x-revturbine-schema-exposure":Kc,...zy,...zr()}),Ok=pr("SegmentValueAnchor");he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Qn,readOnly:true}),name:Xn.meta(Qn),handle:Yt.meta(Qn),description:Ws.meta(Qn),rules:z.record(z.string(),z.unknown()).default({}).meta(Qn),experiment_handle:z.string().min(1).optional().meta(Qn),experiment_id:z.string().min(1).optional().meta(Qn),is_active:z.boolean().default(true).meta(Qn),estimated_size:z.number().int().min(0).nullable().default(null).meta(Qn),metadata:er.meta(Qn)}).meta({id:"Segment","x-revturbine-schema-persistence":vg,"x-revturbine-schema-exposure":Kc,...Rk,...zr()});({"/api/segment-dimension-anchors":{get:_({operationId:"listSegmentDimensionAnchors",requestParams:{query:me},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:ce(jk)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:_({operationId:"listSegmentValueAnchors",requestParams:{query:me},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:ce(Ok)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:_({operationId:"listSegmentDimensions",requestParams:{query:me},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:ce(Jp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:_({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),description:z.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:_({operationId:"deleteCustomDimension",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:_({operationId:"toggleDimensionVisibility",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({visible:z.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Jp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:_({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:me},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:ce(Zp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:_({operationId:"createSegmentValue",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),handle:z.string(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:Zp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:_({operationId:"updateSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().optional(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:_({operationId:"deleteSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Delete segment value",tags:["segments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"delete"}}})}});var {Unrestricted:Ct}=fn,{Persisted:ul,Transient:Ky}=En,{External:Ps}=vn,bg=mn(Mt.Playbook,{sdkInput:true}),qk=mn(Mt.Playbook,{inConfig:false,sdkInput:false}),Dk=mn(Mt.Playbook,{inConfig:false,sdkInput:true}),Uk=mn(Mt.Playbook,{inConfig:false,sdkInput:true,source:wa.CodeConstant});he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ct,readOnly:true}),handle:Yt.meta({...Ct,readOnly:true}),name:Xn.meta(Ct),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(Ct),subject:z.string().max(500).optional().meta(Ct),body:z.string().meta(Ct),template_variables:z.array(z.string()).default([]).meta(Ct),metadata:er.meta(Ct)}).meta({id:"Message","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ps,...qk,...Ka()});var Qp=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ct,readOnly:true}),name:Xn.meta(Ct),handle:Yt.meta(Ct),action_type:Ey.meta(Ct),target_url:z.string().optional().meta(Ct),target_plan_id:z.string().optional().meta(Ct),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ct),metadata:er.meta(Ct)}).meta({id:"CtaPath","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ps,...bg,...zr()}),Mk=pr("CtaPathAnchor"),Fk=z.enum(["header","body","secondary_body","message","cta_label","secondary_label","image","toggle","duration","send_delay","entitlement","plan","dropdown","json"]).meta({id:"TemplateFieldType","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ps,...Uk}),Lk=z.object({name:z.string().min(1),field_type:Fk,required:z.boolean().default(false),default_value:z.unknown().optional(),order:z.number().int().min(0).optional(),help_text:z.string().max(500).optional()}).meta({id:"FieldDefinition","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ps,...Dk}),Xp=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ct,readOnly:true}),name:Xn.meta(Ct),handle:Yt.meta(Ct),surface_type:RE.meta(Ct),field_definitions:z.array(Lk).default([]).meta(Ct),description:Ws.meta(Ct)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ps,...bg,...zr()}),Nk=pr("SurfaceTemplateAnchor"),eg=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ct,readOnly:true}),name:Xn.meta(Ct),handle:Yt.meta(Ct),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ct),variation_dimension_id:z.string().optional().meta(Ct),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(Ct),notes:z.string().max(1e3).optional().meta(Ct),used_in_count:z.number().int().min(0).default(0).meta({...Ct,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ps,...bg,...zr()}),Vk=pr("MessageBlockRecordAnchor"),Bk=z.object({segment_id:z.string().min(1).meta(Ct),message_block_id:z.string().min(1).meta(Ct),ui_path_id:z.string().optional().meta(Ct),promotion_id:z.string().optional().meta(Ct)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":Ky,"x-revturbine-schema-exposure":Ps});z.object({payload_id:z.string().min(1).meta(Ct),tenant_id:z.string().min(1).meta(Ct),name:Xn.meta(Ct),surface_template_id:z.string().min(1).meta(Ct),default_message_block_id:z.string().min(1).meta(Ct),segment_content_map:z.array(Bk).optional().meta(Ct),ui_path_id:z.string().optional().meta(Ct),promotion_id:z.string().optional().meta(Ct),status:z.enum(["draft","active","inactive"]).meta(Ct),created_at:z.string().datetime().optional().meta({...Ct,readOnly:true}),updated_at:z.string().datetime().optional().meta({...Ct,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":Ky,"x-revturbine-schema-exposure":Ps});({"/api/surface-template-anchors":{get:_({operationId:"listSurfaceTemplateAnchors",requestParams:{query:me},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:ce(Nk)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:_({operationId:"listSurfaceTemplates",requestParams:{query:me},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:ce(Xp)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:_({operationId:"listMessageBlockRecordAnchors",requestParams:{query:me},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:ce(Vk)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:_({operationId:"listMessageBlocks",requestParams:{query:me},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:ce(eg)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:_({operationId:"listCtaPathAnchors",requestParams:{query:me},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:ce(Mk)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:_({operationId:"listCtaPaths",requestParams:{query:me},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:ce(Qp)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:il,Pii:zk}=fn,{Persisted:$y}=En,{Internal:Kk,External:$k}=vn,Hk=mn(Mt.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...il,readOnly:true}),name:z.string().min(1).max(120).meta(il),mode:z.enum(["light","dark","system"]).default("system").meta(il),tokens:z.record(z.string(),z.string()).default({}).meta(il)}).meta({id:"Theme","x-revturbine-schema-persistence":$y,"x-revturbine-schema-exposure":$k,...Hk});var gy=he.merge(ze).extend({user_id:z.string().min(1).meta(zk),scope:z.string().min(1).meta(il),preferences:z.record(z.string(),z.unknown()).default({}).meta(il)}).meta({id:"UiPreference","x-revturbine-schema-persistence":$y,"x-revturbine-schema-exposure":Kk});({"/api/ui-preferences":{get:_({operationId:"listUiPreferences",requestParams:{query:me},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:ce(gy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:_({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Ur(gy))}}},responses:{200:{description:"UI preferences upsert response",content:{"application/json":{schema:z.object({updated:z.number().int().min(0)})}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"upsert",writeSchema:"UiPreferenceSchema#writable"}}})}});var {Unrestricted:wt,Financial:Ii}=fn,{Persisted:Hy,Transient:$c}=En,{External:Hc,Internal:Gy}=vn,Gk=z.object({month:z.string().meta(wt),cohort_size:z.number().int().min(0).meta(wt),retained:z.number().int().min(0).meta(wt),retention_rate:z.number().min(0).max(1).meta(wt),revenue_cents:z.number().int().min(0).meta(Ii)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":Hc}),Yk=z.object({step:z.string().meta(wt),label:z.string().meta(wt),count:z.number().int().min(0).meta(wt),conversion_rate:z.number().min(0).max(1).meta(wt),drop_off_rate:z.number().min(0).max(1).meta(wt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":Hc}),Wk=z.object({placement_id:z.string().meta(wt),placement_name:z.string().meta(wt),impressions:z.number().int().min(0).meta(wt),clicks:z.number().int().min(0).meta(wt),conversions:z.number().int().min(0).meta(wt),ctr:z.number().min(0).meta(wt),conversion_rate:z.number().min(0).meta(wt),revenue_cents:z.number().int().min(0).meta(Ii)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":Hc}),Jk=z.object({date:z.string().meta(wt),mrr_cents:z.number().int().min(0).meta(Ii),arr_cents:z.number().int().min(0).meta(Ii),new_mrr_cents:z.number().int().min(0).meta(Ii),churned_mrr_cents:z.number().int().min(0).meta(Ii),expansion_mrr_cents:z.number().int().min(0).meta(Ii),net_new_mrr_cents:z.number().int().meta(Ii)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":Hc}),Zk=z.object({metric_key:z.string().min(1).meta(wt),label:z.string().meta(wt),current_value:z.number().meta(Ii),previous_value:z.number().nullable().default(null).meta(Ii),change_percent:z.number().nullable().default(null).meta(wt),period:z.string().meta(wt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(wt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":Hc}),hy=he.merge(ze).merge(at).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(wt),severity:pg.meta(wt),resource_type:z.string().min(1).meta(wt),resource_id:z.string().min(1).meta(wt),summary:z.string().max(1e3).meta(wt),expected_value:z.unknown().optional().meta(wt),actual_value:z.unknown().optional().meta(wt),affected_customer_count:z.number().int().min(0).default(0).meta(wt),is_resolved:z.boolean().default(false).meta(wt),resolved_at:Kn.meta(wt),metadata:er.meta(wt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":Hy,"x-revturbine-schema-exposure":Gy}),fy=he.merge(ze).merge(at).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(wt),severity:pg.meta(wt),title:z.string().min(1).max(300).meta(wt),description:z.string().max(2e3).meta(wt),resource_type:z.string().optional().meta(wt),resource_id:z.string().optional().meta(wt),is_acknowledged:z.boolean().default(false).meta(wt),acknowledged_at:Kn.meta(wt),acknowledged_by:z.string().nullable().default(null).meta(wt),metadata:er.meta(wt)}).meta({id:"Alert","x-revturbine-schema-persistence":Hy,"x-revturbine-schema-exposure":Gy});({"/api/analytics/kpis":{get:_({operationId:"listKpiAggregates",requestParams:{query:me},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:ce(Zk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:_({operationId:"listPlacementPerformance",requestParams:{query:me},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:ce(Wk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:_({operationId:"listRevenueMetrics",requestParams:{query:me},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:ce(Jk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:_({operationId:"listCohortMetrics",requestParams:{query:me},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:ce(Gk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:_({operationId:"listFunnelSteps",requestParams:{query:me},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:ce(Yk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:_({operationId:"listDriftReports",requestParams:{query:me},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:ce(hy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:_({operationId:"resolveDriftReport",requestParams:{path:z.object({reportId:z.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:hy}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:_({operationId:"listAlerts",requestParams:{query:me},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:ce(fy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:_({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:fy}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:x}=fn,{Transient:Qk}=En,{Internal:Xk}=vn,Xe=t=>({id:t,"x-revturbine-schema-persistence":Qk,"x-revturbine-schema-exposure":Xk}),eR=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,Yy=/^[a-z][a-z0-9_-]{0,99}$/,tn=z.string().regex(eR).max(120),ja=z.string().regex(Yy),Zr=tn.meta(Xe("AnalyticsSemanticId")),Ha=z.enum(["account","user","billing_unit","organization"]).meta(Xe("AnalyticsAnalyticalUnit")),Cu=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(Xe("AnalyticsQueryFamily")),Js=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(Xe("AnalyticsSourceScope")),Wy=z.enum(["as_of_event","current"]).meta(Xe("AnalyticsHistoricalMode")),tR=z.enum(["hour","day","week","month","quarter"]).meta(Xe("AnalyticsTimeGrain")),xg=z.enum(["none","previous_period","previous_year"]).meta(Xe("AnalyticsCompareMode")),Eu=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(Xe("AnalyticsFilterOperator")),Sg=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(Xe("AnalyticsFilterControl")),nR=z.enum(["low","medium","high"]).meta(Xe("AnalyticsCardinalityClass")),Pg=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(Xe("AnalyticsFieldType")),rR=z.enum(["increase","decrease","neutral"]).meta(Xe("AnalyticsMetricDirection")),aR=z.enum(["binary","count","continuous","ratio","revenue"]).meta(Xe("AnalyticsMetricStatisticalType")),iR=z.enum(["additive","semi_additive","non_additive"]).meta(Xe("AnalyticsMetricAggregationSemantics")),sR=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(Xe("AnalyticsDimensionType")),Jy=z.enum(["filter","group","split","sort"]).meta(Xe("AnalyticsDimensionCapability")),Zy=z.enum(["private","team","tenant"]).meta(Xe("AnalyticsViewVisibility")),_y=z.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta(Xe("AnalyticsCustomizationCapability")),oR=z.enum(["unrestricted","pii","financial","operational"]).meta(Xe("AnalyticsClassification")),Oa=z.strictObject({value:z.string().min(1).max(300).meta(x),key:z.string().max(120).optional().meta(x)}).meta(Xe("LocalizedText")),ug=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),ku=z.union([ug,z.array(ug).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(x),compare:xg.optional().meta(x)}),z.strictObject({min:z.number().optional().meta(x),max:z.number().optional().meta(x)})]).meta(Xe("AnalyticsFilterValue")),Tg=z.strictObject({dimension:tn.meta(x),operator:Eu.meta(x),value:ku.optional().meta(x)}).meta(Xe("AnalyticsSemanticFilter")),Lc=z.strictObject({type:z.enum(["number","currency","percent","duration"]).meta(x),decimals:z.number().int().min(0).max(6).optional().meta(x),compact:z.boolean().optional().meta(x)}).meta(Xe("AnalyticsFormatSpec")),lR=z.strictObject({legend:z.enum(["none","top","right","bottom","left"]).optional().meta(x),value_labels:z.boolean().optional().meta(x),reference_lines:z.array(z.strictObject({value:z.number().meta(x),label:Oa.optional().meta(x)})).max(5).optional().meta(x),x_axis_format:Lc.optional().meta(x),y_axis_format:Lc.optional().meta(x),empty_state:z.enum(["blank","message"]).optional().meta(x)}).meta(Xe("AnalyticsSafeChartOptions")),Ru=z.object({deprecated:z.boolean().meta(x),replaced_by:tn.optional().meta(x)}).meta(Xe("AnalyticsCatalogDeprecation")),cR=Ru,mR=z.object({id:tn.meta(x),label:z.string().min(1).max(120).meta(x),description:z.string().max(500).optional().meta(x),when_to_use:z.string().max(500).optional().meta(x),do_not_use_for:z.string().max(500).optional().meta(x),type:sR.meta(x),operators:z.array(Eu).min(1).meta(x),control:Sg.meta(x),capabilities:z.array(Jy).min(1).meta(x),cardinality:nR.meta(x),classification:oR.default("unrestricted").meta(x),historical_mode:Wy.optional().meta(x),allowed_concepts:z.array(tn).optional().meta(x),exclude_from_segment_picker:z.boolean().default(false).meta(x),deprecation:Ru.optional().meta(x)}).meta(Xe("AnalyticsCatalogDimension")),uR=z.object({id:tn.meta(x),label:z.string().min(1).max(120).meta(x),description:z.string().max(500).optional().meta(x),when_to_use:z.string().max(500).optional().meta(x),do_not_use_for:z.string().max(500).optional().meta(x),value_type:Pg.meta(x),format:Lc.optional().meta(x),source_scope:Js.optional().meta(x),direction:rR.optional().meta(x),statistical_type:aR.optional().meta(x),aggregation_semantics:iR.optional().meta(x),preferred_analysis_unit:Ha.optional().meta(x),deprecation:Ru.optional().meta(x)}).meta(Xe("AnalyticsCatalogMetric")),dR=z.object({id:tn.meta(x),version:z.number().int().min(1).meta(x),label:z.string().min(1).max(120).meta(x),description:z.string().max(500).optional().meta(x),when_to_use:z.string().max(500).optional().meta(x),do_not_use_for:z.string().max(500).optional().meta(x),grain:z.array(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/)).min(1).meta(x),analytical_units:z.array(Ha).min(1).meta(x),primary_time_dimension:tn.meta(x),historical_mode:Wy.meta(x),dimensions:z.array(tn).min(1).meta(x),metrics:z.array(tn).min(1).meta(x),query_families:z.array(Cu).min(1).meta(x),source_scope:Js.meta(x),coverage_metric:tn.optional().meta(x),deprecation:Ru.optional().meta(x)}).meta(Xe("AnalyticsCatalogConcept")),Qy=z.strictObject({field:tn.meta(x),direction:z.enum(["asc","desc"]).meta(x)}),Xy=z.strictObject({dimension:tn.meta(x),grain:tR.meta(x)}),ev=8,pR=z.strictObject({concept:tn.meta(x),family:Cu.meta(x),metrics:z.array(tn).min(1).max(10).meta(x),group_by:z.array(tn).max(ev).optional().meta(x),time:Xy.optional().meta(x),filters_from:z.array(ja).max(20).optional().meta(x),fixed_filters:z.array(Tg).max(20).optional().meta(x),compare:xg.optional().meta(x),order_by:z.array(Qy).max(3).optional().meta(x),limit:z.number().int().min(1).max(1e3).optional().meta(x)}).meta(Xe("AnalyticsViewQuery")),gR=z.strictObject({type:z.literal("metric").meta(x),value:tn.meta(x),comparison:tn.optional().meta(x),format:Lc.optional().meta(x)}).meta(Xe("AnalyticsRenderMetric")),hR=z.strictObject({type:z.literal("cartesian").meta(x),mark:z.enum(["line","area","bar","stacked_bar","scatter"]).meta(x),encoding:z.strictObject({x:tn.meta(x),y:z.union([tn,z.array(tn).min(1).max(5)]).meta(x),color:tn.optional().meta(x),facet:tn.optional().meta(x)}).meta(x),options:lR.optional().meta(x)}).meta(Xe("AnalyticsRenderCartesian")),fR=z.strictObject({type:z.literal("funnel").meta(x),stages:z.array(tn).min(2).max(10).meta(x),split_by:tn.optional().meta(x)}).meta(Xe("AnalyticsRenderFunnel")),_R=z.strictObject({type:z.literal("table").meta(x),columns:z.array(tn).min(1).max(20).meta(x)}).meta(Xe("AnalyticsRenderTable")),yR=z.strictObject({type:z.literal("timeline").meta(x),timestamp:tn.meta(x),event_type:tn.meta(x)}).meta(Xe("AnalyticsRenderTimeline")),vR=z.strictObject({type:z.literal("recommendations").meta(x),presentation:z.enum(["list","ranked_cards"]).meta(x)}).meta(Xe("AnalyticsRenderRecommendations")),tv=z.discriminatedUnion("type",[gR,hR,fR,_R,yR,vR]).meta(Xe("AnalyticsRenderSpec")),bR=z.strictObject({id:ja.meta(x),dimension:tn.meta(x),control:Sg.meta(x),label:Oa.optional().meta(x),operators:z.array(Eu).min(1).meta(x),default_value:ku.optional().meta(x),required:z.boolean().default(false).meta(x),pinned:z.boolean().default(false).meta(x),applies_to:z.union([z.literal("all"),z.array(ja).min(1).max(24)]).default("all").meta(x)}).meta(Xe("AnalyticsViewFilter")),nv=z.strictObject({type:z.literal("grid").meta(x),columns:z.number().int().min(1).max(24).default(12).meta(x),items:z.array(z.strictObject({block_id:ja.meta(x),x:z.number().int().min(0).meta(x),y:z.number().int().min(0).meta(x),w:z.number().int().min(1).max(24).meta(x),h:z.number().int().min(1).max(24).meta(x)})).max(24).meta(x)}).meta(Xe("AnalyticsViewLayout")),xR=z.strictObject({id:ja.meta(x),title:Oa.optional().meta(x),description:Oa.optional().meta(x),query:pR.meta(x),render:tv.meta(x)}).meta(Xe("AnalyticsViewBlock")),SR=z.strictObject({id:ja.meta(x),label:Oa.meta(x),target:tn.meta(x),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).default({}).meta(x)}).meta(Xe("AnalyticsViewHandoff")),PR=z.strictObject({allow:z.array(_y).default([]).meta(x),deny:z.array(_y).default([]).meta(x)}).meta(Xe("AnalyticsCustomizationPolicy"));var rv=z.string().regex(/^\d+\.\d+$/),av=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(x),schema_version:rv.meta(x),id:ja.meta(x),revision:z.number().int().min(1).meta(x),title:Oa.meta(x),description:Oa.optional().meta(x),analytical_unit:Ha.meta(x),base_template:z.strictObject({id:ja.meta(x),version:z.number().int().min(1).meta(x)}).optional().meta(x),catalog_version:z.string().min(1).max(64).meta(x),filters:z.array(bR).max(20).meta(x),layout:nv.meta(x),blocks:z.array(xR).min(1).max(24).meta(x),handoffs:z.array(SR).max(10).optional().meta(x),customization_policy:PR.meta(x)}).meta(Xe("AnalyticsView")),TR=z.strictObject({id:ja.optional().meta(x),dimension:tn.meta(x),control:Sg.optional().meta(x),label:Oa.optional().meta(x),operators:z.array(Eu).min(1).optional().meta(x),default_value:ku.optional().meta(x),required:z.boolean().optional().meta(x),pinned:z.boolean().optional().meta(x),applies_to:z.union([z.literal("all"),z.array(ja).min(1).max(24)]).optional().meta(x)}).meta(Xe("AnalyticsViewFilterDraft")),IR=z.strictObject({id:ja.optional().meta(x),title:Oa.optional().meta(x),concept:tn.meta(x),family:Cu.meta(x),metrics:z.array(tn).min(1).max(10).meta(x),group_by:z.array(tn).max(ev).optional().meta(x),time:Xy.optional().meta(x),filters_from:z.array(ja).max(20).optional().meta(x),fixed_filters:z.array(Tg).max(20).optional().meta(x),compare:xg.optional().meta(x),order_by:z.array(Qy).max(3).optional().meta(x),limit:z.number().int().min(1).max(1e3).optional().meta(x),render:z.union([z.literal("auto"),tv]).optional().meta(x)}).meta(Xe("AnalyticsViewBlockDraft")),CR=z.strictObject({id:ja.optional().meta(x),label:Oa.optional().meta(x),target:tn.meta(x),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).optional().meta(x)}).meta(Xe("AnalyticsViewHandoffDraft"));z.strictObject({kind:z.literal("revturbine.analytics-view-draft").meta(x),schema_version:rv.meta(x),title:Oa.meta(x),analytical_unit:Ha.optional().meta(x),filters:z.union([z.literal("recommended"),z.array(TR).max(20)]).optional().meta(x),layout:z.union([z.literal("auto"),nv]).optional().meta(x),blocks:z.array(IR).min(1).max(24).meta(x),handoffs:z.union([z.literal("recommended"),z.array(CR).max(10)]).optional().meta(x),visibility:Zy.optional().meta(x)}).meta(Xe("AnalyticsViewDraft"));var Ig=z.string().regex(/^(\/[^/]*)*$/).max(300),ER=z.strictObject({op:z.enum(["add","replace","remove"]).meta(x),path:Ig.meta(x),value:z.unknown().optional().meta(x)}).meta(Xe("AnalyticsSuggestedPatchOp")),iv=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(x),message:z.string().min(1).max(500).meta(x)}).meta(Xe("AnalyticsWarning")),kR=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(x),path:Ig.meta(x),message:z.string().min(1).max(500).meta(x),actual:z.unknown().optional().meta(x),allowed:z.array(ug).max(50).optional().meta(x),suggested_patch:z.array(ER).max(10).optional().meta(x)}).meta(Xe("AnalyticsValidationIssue"));z.object({path:Ig.meta(x),rule:z.string().min(1).max(120).meta(x),value:z.unknown().optional().meta(x)}).meta(Xe("AnalyticsCompileResolution"));z.object({valid:z.boolean().meta(x),errors:z.array(kR).default([]).meta(x),warnings:z.array(iv).default([]).meta(x),catalog_version:z.string().min(1).max(64).meta(x)}).meta(Xe("AnalyticsValidationResult"));var RR=z.object({id:tn.meta(x),type:Pg.meta(x),nullable:z.boolean().meta(x)}).meta(Xe("AnalyticsResultField")),AR=z.object({numerator:z.number().int().min(0).meta(x),denominator:z.number().int().min(0).meta(x),rate:z.number().min(0).max(1).meta(x)}).meta(Xe("AnalyticsCoverage")),wR=z.object({query_hash:z.string().min(1).max(128).meta(x),concept:tn.meta(x),analytical_unit:Ha.meta(x),source_scope:Js.meta(x),coverage:AR.optional().meta(x),as_of:z.string().datetime().meta(x),freshness_seconds:z.number().int().min(0).meta(x),applied_filters:z.array(Tg).default([]).meta(x),next_cursor:z.string().max(500).optional().meta(x),warnings:z.array(iv).default([]).meta(x)}).meta(Xe("AnalyticsResultMeta")),jR=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(x),fields:z.array(RR).meta(x),meta:wR.meta(x)}).meta(Xe("AnalyticsResult")),{Unrestricted:ur}=fn,{Persisted:OR,Transient:qR}=En,{Internal:sv}=vn,DR=mn(Mt.CustomerOperations,{inConfig:false,sdkInput:false,source:wa.Customer}),Cg=t=>({id:t,"x-revturbine-schema-persistence":OR,"x-revturbine-schema-exposure":sv,...DR}),UR=t=>({id:t,"x-revturbine-schema-persistence":qR,"x-revturbine-schema-exposure":sv}),Eg=z.object({environment_id:z.string().min(1).meta({...ur,readOnly:true})}),MR=z.enum(["viewer","editor"]).meta(UR("AnalyticsViewAccessRole")),FR=he.merge(at).merge(Eg).merge(ze).extend({owner_user_id:z.string().min(1).meta(ur),name:z.string().min(1).max(300).meta(ur),visibility:Zy.meta(ur),base_template_id:z.string().min(1).max(100).nullable().optional().meta(ur),base_template_version:z.number().int().min(1).nullable().optional().meta(ur),current_revision:z.number().int().min(1).meta(ur),is_default:z.boolean().default(false).meta(ur),idempotency_key:z.string().min(1).max(200).nullable().optional().meta(ur)}).meta(Cg("AnalyticsSavedView")),LR=he.merge(at).merge(Eg).extend({view_id:z.string().min(1).meta(ur),revision:z.number().int().min(1).meta(ur),schema_version:z.string().regex(/^\d+\.\d+$/).meta(ur),catalog_version:z.string().min(1).max(64).meta(ur),document_jsonb:av.meta(ur),content_hash:z.string().regex(/^[a-f0-9]{64}$/).meta(ur),created_by:z.string().min(1).meta(ur),created_at:z.string().datetime().meta({...ur,readOnly:true})}).meta(Cg("AnalyticsViewRevision")),NR=he.merge(at).merge(Eg).extend({view_id:z.string().min(1).meta(ur),principal_type:z.string().regex(/^[a-z][a-z0-9_]{0,49}$/).meta(ur),principal_id:z.string().min(1).meta(ur),role:MR.meta(ur)}).meta(Cg("AnalyticsViewAccess")),{Unrestricted:Cn}=fn,{Transient:VR}=En,{Internal:BR}=vn,Zs=t=>({id:t,"x-revturbine-schema-persistence":VR,"x-revturbine-schema-exposure":BR}),zR=z.enum(["fixture","generated"]).meta(Zs("AnalyticsCatalogSource")),KR=z.enum(["event_taxonomy","openapi_identity","tinybird_project"]).meta(Zs("AnalyticsCatalogProvenanceKind")),$R=z.object({kind:KR.meta(Cn),location:z.string().min(1).max(240).meta(Cn),version:z.string().min(1).max(64).optional().meta(Cn),entry_count:z.number().int().nonnegative().meta(Cn)}).meta(Zs("AnalyticsCatalogProvenance"));z.object({catalog_version:z.string().min(1).max(64).meta(Cn),source:zR.meta(Cn),generated_at:z.string().datetime().optional().meta(Cn),provenance:z.array($R).optional().meta(Cn),concepts:z.array(dR).min(1).meta(Cn),dimensions:z.array(mR).min(1).meta(Cn),metrics:z.array(uR).min(1).meta(Cn)}).meta(Zs("AnalyticsCatalog"));var GR=z.enum(["concept","dimension","metric","query_family"]).meta(Zs("AnalyticsAgentCatalogEntryKind")),YR=z.object({id:Zr.meta(Cn),kind:GR.meta(Cn),label:z.string().min(1).max(120).meta(Cn),description:z.string().min(1).max(500).meta(Cn),when_to_use:z.string().max(500).optional().meta(Cn),do_not_use_for:z.string().max(500).optional().meta(Cn),value_type:Pg.optional().meta(Cn),format:Lc.optional().meta(Cn),capabilities:z.array(Jy).optional().meta(Cn),compatible_concepts:z.array(Zr).optional().meta(Cn),compatible_families:z.array(Cu).optional().meta(Cn),analytical_units:z.array(Ha).optional().meta(Cn),source_scope:Js.optional().meta(Cn),example:z.string().max(2e3).optional().meta(Cn),deprecation:cR.optional().meta(Cn)}).meta(Zs("AnalyticsAgentCatalogEntry"));z.object({catalog_version:z.string().min(1).max(64).meta(Cn),query:z.string().min(1).max(200).meta(Cn),entries:z.array(YR).max(50).meta(Cn)}).meta(Zs("AnalyticsCatalogSearchResult"));var {Unrestricted:dr}=fn,{Transient:JR}=En,{Internal:ZR}=vn,dl=t=>({id:t,"x-revturbine-schema-persistence":JR,"x-revturbine-schema-exposure":ZR}),Gs=z.string().regex(Yy),QR=z.strictObject({filter_id:Gs.meta(dr),value:ku.nullable().meta(dr)}).meta(dl("AnalyticsFilterState"));z.strictObject({view_id:Gs.meta(dr),revision:z.number().int().min(1).optional().meta(dr),block_ids:z.array(Gs).min(1).max(24).optional().meta(dr),filter_state:z.array(QR).max(20).optional().meta(dr)}).meta(dl("AnalyticsQueryRequest"));var eA=z.object({block_id:Gs.meta(dr),code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(dr),message:z.string().min(1).max(500).meta(dr)}).meta(dl("AnalyticsBlockError")),tA=z.object({block_id:Gs.meta(dr),result:jR.meta(dr)}).meta(dl("AnalyticsBlockResult"));z.object({view_id:Gs.meta(dr),revision:z.number().int().min(1).meta(dr),catalog_version:z.string().min(1).max(64).meta(dr),results:z.array(tA).meta(dr),errors:z.array(eA).default([]).meta(dr)}).meta(dl("AnalyticsQueryResponse"));var rA=z.object({id:Gs.meta(dr),version:z.number().int().min(1).meta(dr),title:Oa.meta(dr),description:Oa.optional().meta(dr),block_count:z.number().int().min(1).meta(dr)}).meta(dl("AnalyticsTemplateSummary"));z.object({q:z.string().min(1).max(200),limit:z.coerce.number().int().min(1).max(50).optional()});({"/api/analytics/views":{get:_({operationId:"listAnalyticsViews",requestParams:{query:me},summary:"List saved analytics views",tags:["analytics-views"],responses:{200:{description:"Saved analytics views",content:{"application/json":{schema:ce(FR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views",persistence:{table:"analyticsViews",mode:"list",uniqueBy:["tenant_id","environment_id","idempotency_key"]}}})},"/api/analytics/view-revisions":{get:_({operationId:"listAnalyticsViewRevisions",requestParams:{query:me},summary:"List immutable saved-view revisions",tags:["analytics-views"],responses:{200:{description:"Saved-view revisions",content:{"application/json":{schema:ce(LR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-view-revisions",persistence:{table:"analyticsViewRevisions",mode:"list",uniqueBy:["tenant_id","environment_id","view_id","revision"]}}})},"/api/analytics/view-access":{get:_({operationId:"listAnalyticsViewAccess",requestParams:{query:me},summary:"List explicit saved-view access grants",tags:["analytics-views"],responses:{200:{description:"Saved-view access grants",content:{"application/json":{schema:ce(NR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-view-access",persistence:{table:"analyticsViewAccess",mode:"list",uniqueBy:["tenant_id","environment_id","view_id","principal_type","principal_id"]}}})},"/api/analytics/templates":{get:_({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:ce(rA)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:_({operationId:"getAnalyticsView",requestParams:{path:z.object({viewId:z.string()})},summary:"Load a system or saved view document",tags:["analytics-views"],responses:{200:{description:"Canonical view document",content:{"application/json":{schema:av}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var {Unrestricted:Ji}=fn,{Transient:iA}=En,{Internal:sA}=vn,Au=t=>({id:t,"x-revturbine-schema-persistence":iA,"x-revturbine-schema-exposure":sA}),oA=z.enum(["analytics_execution","experiment_assignment","experiment_evidence","experiment_analysis","growth_signal","growth_benchmark","optimization"]).meta(Au("ProviderCapability")),ov=z.enum(["available","stale","unavailable","unsupported","partial"]).meta(Au("ProviderAvailability")),Gc=z.object({provider_handle:Yt.meta(Ji),provider_type:z.string().min(1).max(100).meta(Ji),provider_version:z.string().min(1).max(100).meta(Ji),contract_version:z.number().int().min(1).meta(Ji),generated_at:z.string().datetime().meta(Ji),data_watermark:z.string().datetime().optional().meta(Ji),source_revision:z.string().min(1).max(200).optional().meta(Ji)}).meta(Au("ProviderProvenance")),tg=z.object({provider_handle:Yt.meta(Ji),capability:oA.meta(Ji)}).meta(Au("ProviderBindingRef")),{Unrestricted:Le}=fn,{Transient:lA}=En,{Internal:cA}=vn,Qi=t=>({id:t,"x-revturbine-schema-persistence":lA,"x-revturbine-schema-exposure":cA}),mA=z.object({start:z.string().datetime().meta(Le),end:z.string().datetime().meta(Le),value:z.number().meta(Le),numerator:z.number().optional().meta(Le),denominator:z.number().optional().meta(Le),sample_size:z.number().int().min(0).optional().meta(Le)}).meta(Qi("GrowthSignalPoint")),uA=z.object({metric:Zr.meta(Le),analytical_unit:Ha.meta(Le),source_scope:Js.meta(Le),dimensions:z.record(Zr,z.string()).meta(Le),points:z.array(mA).meta(Le),provenance:Gc.meta(Le)}).meta(Qi("GrowthSignalSeries"));z.object({availability:ov.meta(Le),series:z.array(uA).meta(Le),provenance:Gc.meta(Le)}).meta(Qi("GrowthSignalBundle"));z.object({current:z.number().meta(Le),baseline:z.number().meta(Le),absolute_delta:z.number().meta(Le),relative_delta:z.number().meta(Le),short_window:z.number().meta(Le),long_window:z.number().meta(Le),slope:z.number().meta(Le),acceleration:z.number().meta(Le),volatility:z.number().meta(Le),persistence:z.number().meta(Le),seasonal_expected:z.number().optional().meta(Le),seasonal_deviation:z.number().optional().meta(Le),peer_value:z.number().optional().meta(Le),peer_gap:z.number().optional().meta(Le),sample_size:z.number().int().min(0).optional().meta(Le)}).meta(Qi("TrendFeatures"));var dA=z.object({min_units:z.number().int().min(0).optional().meta(Le),min_events:z.number().int().min(0).optional().meta(Le),min_periods:z.number().int().min(0).optional().meta(Le),min_denominator:z.number().min(0).optional().meta(Le)}).meta(Qi("EvidenceRequirement")),pA=z.enum(["increase","decrease","level_shift","threshold","peer_gap","correlation"]).meta(Qi("OpportunityInterpretation")),lv=z.object({metric:Zr.meta(Le),current:z.number().meta(Le),baseline:z.number().optional().meta(Le),relative_delta:z.number().optional().meta(Le),window:z.object({start:z.string().datetime().meta(Le),end:z.string().datetime().meta(Le)}).meta(Le),sample_size:z.number().int().min(0).optional().meta(Le),source_scope:Js.meta(Le),interpretation:pA.meta(Le)}).meta(Qi("OpportunityEvidence"));z.object({required_metrics:z.array(Zr).min(1).meta(Le),evidence:dA.meta(Le)}).meta(Qi("DetectorRequirements"));var ng=z.record(z.string(),z.unknown());z.object({detector_id:z.string().min(1).meta(Le),detector_version:z.number().int().min(1).meta(Le),opportunity_type:z.string().min(1).meta(Le),resource:z.object({type:z.string().min(1).meta(Le),handle:z.string().min(1).meta(Le)}).optional().meta(Le),segment_handles:z.array(z.string().min(1)).optional().meta(Le),evidence:z.array(lv).min(1).meta(Le),hypothesis:z.string().min(1).meta(Le),confidence:z.number().min(0).max(1).meta(Le),impact:ng.optional().meta(Le),suggested_action:ng.optional().meta(Le),suggested_experiment:ng.optional().meta(Le)}).meta(Qi("OpportunityCandidate"));var {Unrestricted:Ci}=fn,{Transient:Yc}=En,{External:Wc}=vn,cv=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wc}),gA=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wc}),hA=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(Ci),surface:cv.meta(Ci),purpose:z.string().min(1).max(300).meta(Ci),stability:gA.meta(Ci)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wc}),fA=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(Ci),surface:cv.meta(Ci),purpose:z.string().min(1).max(300).meta(Ci)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wc});z.object({version:z.number().int().min(1).meta(Ci),events:z.array(hA).min(1).meta(Ci),prefix_families:z.array(fA).meta(Ci)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Wc});var mv=["web_signed_up","web_signed_in","cli_signed_up","cli_signed_in","cli_command_executed","changeset_submitted","changeset_approved","changeset_rejected","changeset_deployed","changeset_launched","changeset_parked","changeset_resumed","changeset_discarded","changeset_archived","config_imported","config_exported","entity_created","entity_updated","entity_deleted","web_api_error"],kg=["placement_resolved","placement_rendered","placement_exposed","placement_outcome","placement_interaction","gate_evaluated","gate_attempted","gate_allowed","gate_denied","slot_evaluated","slot_filled","slot_empty","slot_suppressed","slot_error","segment_enrolled","segment_unenrolled","user_context_observed","page_view"],_A=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],yA=["area_viewed","feature_gated"],yy={web_signed_up:{purpose:"An operator created a control-plane account via the web app.",stability:"stable"},web_signed_in:{purpose:"An operator signed in to the web app.",stability:"stable"},cli_signed_up:{purpose:"An operator created an account through the CLI device flow.",stability:"stable"},cli_signed_in:{purpose:"An operator authenticated the CLI.",stability:"stable"},cli_command_executed:{purpose:"A CLI command ran; the command name rides on payload.command.",stability:"stable"},changeset_submitted:{purpose:"A playbook version was submitted for review.",stability:"stable"},changeset_approved:{purpose:"A playbook version was approved.",stability:"stable"},changeset_rejected:{purpose:"A playbook version was rejected.",stability:"stable"},changeset_deployed:{purpose:"A playbook version was compiled and activated.",stability:"stable"},changeset_launched:{purpose:"A deployed playbook version was launched to traffic.",stability:"stable"},changeset_parked:{purpose:"A playbook version was parked.",stability:"stable"},changeset_resumed:{purpose:"A parked playbook version resumed.",stability:"stable"},changeset_discarded:{purpose:"A draft playbook version was discarded.",stability:"stable"},changeset_archived:{purpose:"A playbook version was archived.",stability:"stable"},config_imported:{purpose:"A Playbook was imported as a staged change set.",stability:"stable"},config_exported:{purpose:"A Playbook was exported.",stability:"stable"},entity_created:{purpose:"A config entity was created; the resource rides on payload.resource.",stability:"stable"},entity_updated:{purpose:"A config entity was updated; the resource rides on payload.resource.",stability:"stable"},entity_deleted:{purpose:"A config entity was deleted; the resource rides on payload.resource.",stability:"stable"},web_api_error:{purpose:"A control-plane API request failed; internal telemetry only, never via the customer SDK.",stability:"internal"},area_viewed:{purpose:"An authenticated product area of the web app was viewed (dashboard, a studio).",stability:"internal"},feature_gated:{purpose:"A nav-gated section of the web app rendered its gate notice \u2014 the control plane\u2019s own paywall analog.",stability:"internal"},placement_resolved:{purpose:"The decision engine resolved a placement for a slot.",stability:"stable"},placement_rendered:{purpose:"A resolved placement's visual root rendered.",stability:"stable"},placement_exposed:{purpose:"A rendered placement met the exposure basis (render or viewport).",stability:"stable"},placement_outcome:{purpose:"A placement reached a terminal outcome (converted, dismissed, \u2026).",stability:"stable"},placement_interaction:{purpose:"A user interacted with a presented placement.",stability:"stable"},gate_evaluated:{purpose:"A gate was evaluated during render; the passive denominator signal.",stability:"stable"},gate_attempted:{purpose:"A user actively invoked a gated action.",stability:"stable"},gate_allowed:{purpose:"An actively invoked gated action was allowed.",stability:"stable"},gate_denied:{purpose:"An actively invoked gated action was denied.",stability:"stable"},slot_evaluated:{purpose:"A surface slot resolution ran; the funnel denominator.",stability:"stable"},slot_filled:{purpose:"A slot resolved to a payload and will render.",stability:"stable"},slot_empty:{purpose:"A slot resolved to nothing eligible.",stability:"stable"},slot_suppressed:{purpose:"A slot was eligible but suppressed by caps or cooldown.",stability:"stable"},slot_error:{purpose:"A slot resolution failed.",stability:"internal"},segment_enrolled:{purpose:"A user entered a targeting segment.",stability:"stable"},segment_unenrolled:{purpose:"A user left a targeting segment.",stability:"stable"},user_context_observed:{purpose:"Reserved: the NAMES of custom user-context fields set on identify/setUserContext. Names only, never values.",stability:"internal"},page_view:{purpose:"A route change tracked by the SDK router integration.",stability:"stable"},sdk_init:{purpose:"One anonymous adoption beacon per SDK startup.",stability:"internal"},sdk_error:{purpose:"The SDK itself malfunctioned; distinct from a decision producing nothing.",stability:"internal"},sdk_validation_warning:{purpose:"The SDK found a config or usage problem worth surfacing.",stability:"internal"},resolution_failure:{purpose:"A decision produced nothing; allow-listed handles and closed reason codes only.",stability:"internal"}};function gu(t,e){return t.map(n=>({name:n,surface:e,purpose:yy[n].purpose,stability:yy[n].stability}))}var uv=["impression"],Rg=[{prefix:"engagement_",surface:"sdk_client",purpose:"Organic product-signal events under customer-declared engagement scopes."}],dv={events:[...gu(mv,"control_plane"),...gu(yA,"control_plane"),...gu(kg,"sdk_client"),...gu(_A,"sdk_client")]};dv.events.map(t=>t.name);dv.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:L,Pii:ll}=fn,{Persisted:pv,Transient:$n}=En,{Internal:Ts,External:wr}=vn,gv=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),vA=he.extend({event_type:z.string().min(1).meta(L),source:gv.default("sdk").meta(L),tenant_id:z.string().min(1).optional().meta(L),user_id:z.string().min(1).optional().meta(ll),session_id:z.string().min(1).optional().meta(ll),occurred_at:z.string().datetime().meta(L),request_id:z.string().min(1).meta(L),attributes:z.record(z.string(),z.unknown()).default({}).meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ts}),bA=vA.extend({ingested_at:z.string().datetime().meta(L)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":pv,"x-revturbine-schema-exposure":Ts});z.array(z.object({id:z.string().min(1).optional().meta(L),event_type:z.string().min(1).meta(L),occurred_at:z.string().datetime().optional().meta(L),tenant_id:z.string().min(1).optional().meta(L),user_id:z.string().min(1).optional().meta(ll),session_id:z.string().min(1).optional().meta(ll),attributes:z.record(z.string(),z.unknown()).optional().meta(L),payload:z.record(z.string(),z.unknown()).optional().meta(L),message:z.string().optional().meta(L),level:z.string().optional().meta(L),path:z.string().optional().meta(L)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ts});var xA=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({user_id:z.string().min(1).meta(ll),placement_id:z.string().min(1).meta(L),treatment_id:z.string().min(1).optional().meta(L),surface_slot_id:z.string().min(1).optional().meta(L),surface_template_id:z.string().min(1).optional().meta(L),payload_id:z.string().min(1).optional().meta(L),interaction_type:xA.meta(L),interaction_at:z.string().datetime().optional().meta(L),message_block_handle:z.string().min(1).optional().meta(L),message_block_id:z.string().min(1).optional().meta(L),experiment_id:z.string().min(1).optional().meta(L),variant_key:z.string().min(1).optional().meta(L),test:z.boolean().optional().meta(L),metadata:z.record(z.string(),z.unknown()).optional().meta(L)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.enum(["trial_midpoint","trial_expiring","trial_expired","usage_limit_approaching","usage_limit_reached","credit_balance_low","seat_limit_reached","feature_gated","cancel_intent","payment_failed","auto_renewal_reminder","onboarding_complete","invite_teammate_prompt","referral_offer","plan_upgrade_nudge"]).meta({id:"TriggerEventType","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({days_remaining:z.number().int().min(0).optional().meta(L)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({entitlement_handle:z.string().optional().meta(L),current_usage:z.number().min(0).optional().meta(L),usage_limit:z.number().min(0).optional().meta(L),usage_percent:z.number().min(0).max(100).optional().meta(L),threshold:z.number().min(0).optional().meta(L),balance:z.number().min(0).optional().meta(L),allocation:z.number().min(0).optional().meta(L),seats_used:z.number().int().min(0).optional().meta(L),seats_allowed:z.number().int().min(0).optional().meta(L)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({feature:z.string().min(1).meta(L)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({retry_count:z.number().int().min(0).optional().meta(L),renewal_date:z.string().optional().meta(L)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({event_type:z.string().min(1).meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});var PA=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),TA=z.enum(mv).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({event_type:TA.meta(L),source:PA.meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({q:z.string().optional().meta(L),source:gv.optional().meta(L),event_type:z.string().optional().meta(L),from:z.string().datetime().optional().meta(L),to:z.string().datetime().optional().meta(L),page:z.coerce.number().int().min(1).default(1).meta(L),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(L)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ts});var IA=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ts}),CA=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ts}),rg=he.merge(ze).merge(at).extend({event_id:z.string().min(1).meta(L),event_type:z.string().min(1).meta(L),source:IA.meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L),status:CA.default("processed").meta(L),processed_at:z.string().datetime().optional().meta(L),error_message:z.string().optional().meta(L)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":pv,"x-revturbine-schema-exposure":Ts});z.object({accepted:z.number().int().min(0).meta(L)}).meta({id:"null","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ts});var EA=500,kA=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),RA=z.object({environment_id:z.string().min(1).meta(L),user_id:z.string().min(1).meta(ll),account_id:z.string().min(1).meta(L),event_name:z.string().min(1).max(120).meta(L),event_ts:z.string().datetime().meta(L),properties:z.string().optional().meta(L),surface_slot_id:z.string().nullable().optional().meta(L),placement_id:z.string().nullable().optional().meta(L),payload_id:z.string().nullable().optional().meta(L),request_id:z.string().optional().meta(L),experiment_id:z.string().nullable().optional().meta(L),variant_key:z.string().nullable().optional().meta(L),tenant_id:z.string().optional().meta(L),event_id:z.string().nullable().optional().meta(L),origin:kA.nullable().optional().meta(L),playbook_version:z.string().nullable().optional().meta(L),decision_id:z.string().nullable().optional().meta(L),test:z.boolean().optional().meta(L)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({events:z.array(RA).min(1).max(EA).meta(L)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});var wA=10,jA=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),OA=z.object({plans:z.number().int().min(0).meta(L),entitlements:z.number().int().min(0).meta(L),entitlement_rules:z.number().int().min(0).meta(L),segments:z.number().int().min(0).meta(L),placements:z.number().int().min(0).meta(L),placement_payloads:z.number().int().min(0).meta(L),content_ui_paths:z.number().int().min(0).meta(L),surface_templates:z.number().int().min(0).meta(L)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),qA=z.object({event_type:jA.meta(L),occurred_at:z.string().datetime().meta(L),request_id:z.string().min(1).optional().meta(L),config_hash_id:z.string().min(1).max(64).optional().meta(L),sdk_version:z.string().min(1).max(64).optional().meta(L),runtime_mode:z.string().min(1).max(64).optional().meta(L),schema_version:z.string().min(1).max(64).optional().meta(L),bundle_version:z.string().min(1).max(64).optional().meta(L),config_shape:OA.optional().meta(L),message:z.string().max(500).optional().meta(L),reason:z.string().min(1).max(64).optional().meta(L),placement_handle:z.string().min(1).max(64).optional().meta(L),slot_handle:z.string().min(1).max(64).optional().meta(L),surface:z.string().min(1).max(64).optional().meta(L),plan_handle:z.string().min(1).max(64).optional().meta(L),entitlement_handle:z.string().min(1).max(64).optional().meta(L)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({events:z.array(qA).min(1).max(wA).meta(L)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});({"/api/events/search":{get:_({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:CE(bA)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:_({operationId:"listWebhookEvents",requestParams:{query:me},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:ce(rg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:pt}=fn,{Persisted:Jc,Transient:Zc}=En,{Internal:Ri}=vn,hv=mn(Mt.Playbook,{sdkInput:true}),fv=mn(Mt.Playbook,{inConfig:false,sdkInput:true}),UA=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Ri}),Ag=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Ri}),_v=z.object({name:Xn.meta(pt),handle:Yt.meta(pt),plan_id:z.string().nullable().optional().meta(pt),segment_id:z.string().nullable().optional().meta(pt),trial_limit_type:Ag.default("time").meta(pt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(pt),grace_period_days:z.number().int().min(0).default(0).meta(pt),usage_entitlement_handle:z.string().min(1).optional().meta(pt),usage_limit_value:z.number().int().min(1).optional().meta(pt),require_payment_method:z.boolean().default(false).meta(pt),auto_convert:z.boolean().default(true).meta(pt),convert_to_plan_id:z.string().optional().meta(pt),fallback_plan_id:z.string().optional().meta(pt),limit_per_customer:z.number().int().min(1).default(1).meta(pt),is_active:z.boolean().default(true).meta(pt),metadata:er.meta(pt)}),$o=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...pt,readOnly:true})}).merge(_v).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":Ri,...hv,...zr()}),MA=pr("FreeTrialRuleAnchor"),FA=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Ri}),yv=z.object({name:Xn.meta(pt),handle:Yt.meta(pt),premium_plan_id:z.string().min(1).meta(pt),fallback_plan_id:z.string().min(1).meta(pt),segment_id:z.string().nullable().optional().meta(pt),trial_limit_type:Ag.default("time").meta(pt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(pt),usage_entitlement_handle:z.string().min(1).optional().meta(pt),usage_limit_value:z.number().int().min(1).optional().meta(pt),start_policy:FA.default("signup").meta(pt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(pt),entitlements_during_trial:z.array(z.string()).default([]).meta(pt),is_active:z.boolean().default(true).meta(pt),metadata:er.meta(pt)}),Ho=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...pt,readOnly:true})}).merge(yv).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":Ri,...hv,...zr()}),LA=pr("ReverseTrialRuleAnchor"),vv=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Ri}),bv=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Ri}),Go=he.merge(ze).merge(at).extend({trial_limit_policy:vv.default("1_per_lifetime").meta(pt),eligibility_scope:bv.default("per_customer").meta(pt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":Ri,...fv}),Yo=he.merge(ze).merge(at).extend({trial_limit_policy:vv.default("1_per_lifetime").meta(pt),eligibility_scope:bv.default("per_customer").meta(pt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":Ri,...fv}),hu=he.merge(ze).merge(at).extend({customer_id:z.string().min(1).meta(pt),rule_id:z.string().min(1).meta(pt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(pt),plan_id:z.string().min(1).meta(pt),status:UA.default("active").meta(pt),started_at:z.string().datetime().meta({...pt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(pt),trial_limit_type:Ag.default("time").meta(pt),usage_entitlement_handle:z.string().min(1).optional().meta(pt),usage_limit_value:z.number().int().min(1).optional().meta(pt),converted_at:Kn.meta(pt),cancelled_at:Kn.meta(pt),metadata:er.meta(pt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":Ri});({"/api/free-trial-rule-anchors":{get:_({operationId:"listFreeTrialRuleAnchors",requestParams:{query:me},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:ce(MA)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:_({operationId:"listFreeTrialRules",requestParams:{query:me},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:ce($o)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:_({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:_({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:$o.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:_({operationId:"listReverseTrialRuleAnchors",requestParams:{query:me},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:ce(LA)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:_({operationId:"listReverseTrialRules",requestParams:{query:me},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:ce(Ho)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:_({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:Ho}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:_({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ho.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ho}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:_({operationId:"listFreeTrialSettings",requestParams:{query:me},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:ce(Go)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:_({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:_({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Go.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:_({operationId:"listReverseTrialSettings",requestParams:{query:me},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:ce(Yo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:_({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Yo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:_({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Yo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:_({operationId:"listTrialInstances",requestParams:{query:me},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:ce(hu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:_({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:hu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:_({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:hu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:_({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:hu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var{Unrestricted:C,Financial:vy}=fn,{Persisted:Is,Transient:wg}=En,{Internal:mi}=vn,wu=mn(Mt.Playbook,{inConfig:false,sdkInput:true}),xv=mn(Mt.CustomerOperations,{sdkInput:false}),NA=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":wg,"x-revturbine-schema-exposure":mi}),VA=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":wg,"x-revturbine-schema-exposure":mi}),BA=z.enum(["managed","observed"]).meta({id:"ExperimentAllocationMode","x-revturbine-schema-persistence":Is,"x-revturbine-schema-exposure":mi}),zA=z.discriminatedUnion("kind",[z.object({kind:z.literal("placement"),placement_handle:z.string().min(1),placement_payload_handle:z.string().min(1).optional()}),z.object({kind:z.literal("entitlement"),entitlement_handle:z.string().min(1),rule_handle:z.string().min(1).optional()}),z.object({kind:z.literal("plan"),plan_handle:z.string().min(1),plan_variation_handle:z.string().min(1).optional()}),z.object({kind:z.literal("pricing"),plan_variation_handle:z.string().min(1),promotion_handle:z.string().min(1).optional()}),z.object({kind:z.literal("custom"),provider_payload:z.record(z.string(),z.json())})]).meta({id:"ExperimentVariantTarget","x-revturbine-schema-persistence":Is,"x-revturbine-schema-exposure":mi,...wu}),KA=z.object({variant_id:z.string().min(1),name:Xn,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),targets:z.array(zA).min(1).optional(),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":Is,"x-revturbine-schema-exposure":mi,...wu}),$A=z.object({method:z.literal("always_valid"),look_count:z.number().int().positive(),alpha:z.number().positive().lt(1).default(.05)}).strict(),HA=z.object({minimum_revenue_effect:z.number().min(0)}).strict(),GA=z.discriminatedUnion("method",[z.object({method:z.literal("cuped"),covariate_metric:Zr,lookback_days:z.number().int().positive()}),z.object({method:z.literal("regression_adjustment"),covariate_metric:Zr,lookback_days:z.number().int().positive()})]),YA=z.object({method:z.literal("holm"),family_scope:z.literal("primary_and_guardrails_separate")}),Sv=z.object({methodology:z.enum(["frequentist","bayesian"]),analysis_unit:Ha,sequential:$A.optional(),multiple_comparisons:YA.optional(),variance_reduction:GA.optional(),practical_significance:HA.optional()}).meta({id:"ExperimentAnalysisConfig","x-revturbine-schema-persistence":Is,"x-revturbine-schema-exposure":mi,...wu});var xr=t=>({id:t,"x-revturbine-schema-persistence":wg,"x-revturbine-schema-exposure":mi}),ju=z.object({variant_id:z.string().min(1).meta(C)}),WA=z.object({n:z.number().int().positive().meta(C),sum_numerator:z.number().meta(C),sum_denominator:z.number().positive().meta(C),sum_covariate:z.number().optional().meta(C)}).meta(xr("ExperimentClusterAggregate")),JA=z.object({assignment_unit:Ha.meta(C),clusters:z.array(WA).min(2).meta(C)}).meta(xr("ExperimentClusteredSufficientStatistics")),Ou={clustered:JA.optional().meta(C)},ZA=ju.extend({statistic_type:z.literal("mean").meta(C),n:z.number().int().min(0).meta(C),sum_y:z.number().meta(C),sum_y2:z.number().min(0).meta(C),...Ou}).meta(xr("MeanVariantStatisticalSummary")),QA=ju.extend({statistic_type:z.literal("binary").meta(C),n:z.number().int().min(0).meta(C),successes:z.number().int().min(0).meta(C),...Ou}).meta(xr("BinaryVariantStatisticalSummary")),XA=ju.extend({statistic_type:z.literal("ratio").meta(C),n:z.number().int().min(0).meta(C),sum_numerator:z.number().meta(C),sum_denominator:z.number().meta(C),sum_numerator2:z.number().min(0).meta(C),sum_denominator2:z.number().min(0).meta(C),sum_cross:z.number().meta(C),...Ou}).meta(xr("RatioVariantStatisticalSummary")),ew=ju.extend({statistic_type:z.literal("covariance").meta(C),n:z.number().int().min(0).meta(C),sum_x:z.number().meta(C),sum_y:z.number().meta(C),sum_x2:z.number().min(0).meta(C),sum_y2:z.number().min(0).meta(C),sum_xy:z.number().meta(C),...Ou}).meta(xr("CovarianceVariantStatisticalSummary")),tw=z.discriminatedUnion("statistic_type",[ZA,QA,XA,ew]).meta(xr("VariantStatisticalSummary")),Pv=z.object({start:z.string().datetime().meta(C),end:z.string().datetime().meta(C)}).meta(xr("ExperimentObservationWindow")),nw=z.object({metric:Zr.meta(C),observation_window:Pv.meta(C)}).meta(xr("ExperimentCovariateProvenance")),rw=z.object({schema_version:z.number().int().min(1).meta(C),experiment_handle:Yt.meta(C),experiment_version:z.number().int().min(1).meta(C),metric:Zr.meta(C),analysis_unit:Ha.meta(C),variants:z.array(tw).min(1).meta(C),observation_window:Pv.meta(C),covariate:nw.optional().meta(C),data_watermark:z.string().datetime().meta(C),source_scope:Js.meta(C),provider:Gc.meta(C)}).meta(xr("ExperimentEvidence")),aw=z.object({status:z.enum(["not_evaluated","pass","fail"]).meta(C),p_value:z.number().min(0).max(1).optional().meta(C),chi_squared:z.number().min(0).optional().meta(C),variants:z.array(z.object({variant_id:z.string().min(1).meta(C),observed_count:z.number().int().min(0).meta(C),expected_count:z.number().min(0).meta(C)})).default([]).meta(C),reason:z.string().min(1).max(500).optional().meta(C)}).meta(xr("ExperimentSampleRatioMismatch")),iw=z.object({status:z.enum(["healthy","warning","unhealthy","insufficient_data"]).meta(C),sample_ratio_mismatch:aw.optional().meta(C),issues:z.array(z.object({code:z.string().min(1).max(100).meta(C),message:z.string().min(1).max(500).meta(C)})).default([]).meta(C)}).meta(xr("ExperimentHealth")),sw=z.object({lower:z.number().meta(C),upper:z.number().meta(C),level:z.number().min(0).max(1).meta(C)}).meta(xr("ExperimentConfidenceInterval")),ow=z.object({method:z.literal("always_valid").meta(C),status:z.enum(["continue","significant_positive","significant_negative"]).meta(C),look_count:z.number().int().min(1).meta(C),spending_state:z.object({alpha:z.number().positive().lt(1).meta(C),look_alpha:z.number().positive().lt(1).meta(C),cumulative_alpha_spent:z.number().positive().lt(1).meta(C),alpha_remaining:z.number().positive().lt(1).meta(C),unadjusted_p_value:z.number().min(0).max(1).optional().meta(C)}).meta(C)}).meta(xr("ExperimentSequentialResult")),lw=z.object({minimum_revenue_effect:z.number().min(0).meta(vy),revenue_effect:z.number().meta(vy),status:z.enum(["meaningful_positive","meaningful_negative","not_demonstrated"]).meta(C)}).meta(xr("ExperimentPracticalSignificanceResult")),cw=z.object({method:z.literal("holm").meta(C),family:z.enum(["primary","guardrails"]).meta(C),family_size:z.number().int().positive().meta(C),unadjusted_p_value:z.number().min(0).max(1).meta(C)}).meta(xr("ExperimentMultipleComparisonResult")),mw=z.object({metric:Zr.meta(C),control_variant_id:z.string().min(1).meta(C),variant_id:z.string().min(1).meta(C),estimator:z.string().min(1).max(100).meta(C),estimator_version:z.string().min(1).max(100).meta(C),estimate:z.number().meta(C),control_estimate:z.number().meta(C),absolute_effect:z.number().meta(C),relative_effect:z.number().optional().meta(C),standard_error:z.number().min(0).optional().meta(C),confidence_interval:sw.optional().meta(C),p_value:z.number().min(0).max(1).optional().meta(C),multiple_comparison:cw.optional().meta(C),probability_positive:z.number().min(0).max(1).optional().meta(C),expected_loss:z.number().min(0).optional().meta(C),sequential:ow.optional().meta(C),practical_significance:lw.optional().meta(C),sample_size:z.number().int().min(0).optional().meta(C)}).meta(xr("ExperimentMetricResult")),uw=z.object({metric:Zr.meta(C),summary_schema_version:z.number().int().min(1).meta(C),data_watermark:z.string().datetime().meta(C),provider:Gc.meta(C)}).meta(xr("ExperimentEvidenceProvenance")),dw=z.object({provider:Gc.meta(C),evidence:z.array(uw).min(1).meta(C)}).meta(xr("AnalysisProvenance")),pw=z.object({schema_version:z.number().int().min(1).meta(C),engine:z.string().min(1).max(100).meta(C),engine_version:z.string().min(1).max(100).meta(C),methodology:z.string().min(1).max(100).meta(C),metrics:z.array(mw).meta(C),health:iw.meta(C),provenance:dw.meta(C)}).meta(xr("ExperimentAnalysisResult")),Tv=he.merge(at).extend({created_at:z.string().datetime().meta({...C,readOnly:true}),experiment_handle:Yt.meta(C),experiment_version:z.number().int().min(1).meta(C),metric_semantic_id:Zr.meta(C),metric_catalog_version:z.string().min(1).max(64).meta(C),endpoint_version:z.string().min(1).max(100).meta(C),query_hash:z.string().min(1).max(128).meta(C),evidence_provider_handle:Yt.meta(C),evidence_provider_type:z.string().min(1).max(100).meta(C),evidence_provider_version:z.string().min(1).max(100).meta(C),evidence_provider_contract_version:z.number().int().min(1).meta(C),summary_schema_version:z.number().int().min(1).meta(C),observation_window_start:z.string().datetime().meta(C),observation_window_end:z.string().datetime().meta(C),data_watermark:z.string().datetime().meta(C)}),gw=Tv.extend({analysis_unit:Ha.meta(C),evidence:rw.meta(C)}).meta({id:"ExperimentEvidenceSnapshot","x-revturbine-schema-persistence":Is,"x-revturbine-schema-exposure":mi,...xv}),hw=Tv.extend({evidence_snapshot_id:z.string().min(1).meta(C),analysis_provider_handle:Yt.meta(C),analysis_provider_type:z.string().min(1).max(100).meta(C),analysis_provider_version:z.string().min(1).max(100).meta(C),analysis_provider_contract_version:z.number().int().min(1).meta(C),engine:z.string().min(1).max(100).meta(C),engine_version:z.string().min(1).max(100).meta(C),estimator:z.string().min(1).max(100).meta(C),estimator_version:z.string().min(1).max(100).meta(C),analysis_config:Sv.meta(C),result:pw.meta(C)}).meta({id:"ExperimentAnalysisResultRecord","x-revturbine-schema-persistence":Is,"x-revturbine-schema-exposure":mi,...xv}),Gi=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...C,readOnly:true}),name:Xn.meta(C),handle:Yt.meta(C),description:z.string().max(1e3).optional().meta(C),experiment_type:VA.meta(C),status:NA.default("draft").meta(C),target_resource_id:z.string().optional().meta(C),target_segments:z.array(z.string()).optional().meta(C),target_segment_ids:z.array(z.string()).default([]).meta(C),variants:z.array(KA).min(2).meta(C),primary_metric:Zr.meta(C),guardrail_metrics:z.array(Zr).optional().meta(C),assignment_unit:Ha.optional().meta(C),assignment_provider_binding:tg.extend({capability:z.literal("experiment_assignment"),allocation_mode:BA}).optional().meta(C),evidence_provider_binding:tg.extend({capability:z.literal("experiment_evidence")}).optional().meta(C),analysis_provider_binding:tg.extend({capability:z.literal("experiment_analysis")}).optional().meta(C),analysis_config:Sv.optional().meta(C),metric_threshold:z.number().default(.05).meta(C),secondary_metrics:z.array(Zr).default([]).meta(C),traffic_allocation:z.number().min(0).max(1).default(1).meta(C),started_at:Kn.meta(C),ended_at:Kn.meta(C),confidence_threshold:z.number().min(0).max(1).default(.95).meta(C),winning_variant_id:z.string().nullable().default(null).meta(C),metadata:er.meta(C)}).meta({id:"Experiment","x-revturbine-schema-persistence":Is,"x-revturbine-schema-exposure":mi,...wu,...zr()}),fw=pr("ExperimentAnchor"),_w=pg,by=he.merge(ze).merge(at).extend({experiment_id:z.string().optional().meta(C),resource_type:z.string().min(1).meta(C),resource_id:z.string().min(1).meta(C),severity:_w.default("info").meta(C),title:z.string().min(1).max(300).meta(C),description:z.string().max(2e3).meta(C),suggested_action:z.string().max(1e3).optional().meta(C),estimated_impact:z.number().optional().meta(C),detector_id:z.string().min(1).nullable().optional().meta(C),detector_version:z.number().int().min(1).nullable().optional().meta(C),opportunity_type:z.string().min(1).nullable().optional().meta(C),evidence:z.array(lv).nullable().optional().meta(C),hypothesis:z.string().min(1).nullable().optional().meta(C),confidence:z.number().min(0).max(1).nullable().optional().meta(C),is_dismissed:z.boolean().default(false).meta(C),metadata:er.meta(C)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Is,"x-revturbine-schema-exposure":mi});({"/api/experiment-evidence-snapshots":{get:_({operationId:"listExperimentEvidenceSnapshots",requestParams:{query:me},summary:"List immutable experiment evidence snapshots",tags:["experiments"],responses:{200:{description:"Experiment evidence snapshots",content:{"application/json":{schema:ce(gw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-evidence-snapshots",persistence:{table:"experimentEvidenceSnapshots",mode:"list"}}})},"/api/experiment-analysis-results":{get:_({operationId:"listExperimentAnalysisResults",requestParams:{query:me},summary:"List immutable experiment analysis results",tags:["experiments"],responses:{200:{description:"Experiment analysis results",content:{"application/json":{schema:ce(hw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-analysis-results",persistence:{table:"experimentAnalysisResults",mode:"list"}}})},"/api/experiment-anchors":{get:_({operationId:"listExperimentAnchors",requestParams:{query:me},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:ce(fw)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:_({operationId:"listExperiments",requestParams:{query:me},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:ce(Gi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:_({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Gi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:_({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Gi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Gi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:_({operationId:"deleteExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:_({operationId:"startExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:Gi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:_({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Gi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:_({operationId:"completeExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z.object({winning_variant_id:z.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:Gi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:_({operationId:"listOptimizationSuggestions",requestParams:{query:me},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:ce(by)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:_({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:by}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Dr,Financial:xy}=fn,{Persisted:yw,Transient:Iv}=En,{Internal:jg}=vn,vw=mn(Mt.Playbook,{sdkInput:true}),bw=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Iv,"x-revturbine-schema-exposure":jg}),xw=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Iv,"x-revturbine-schema-exposure":jg}),ys=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Dr,readOnly:true}),name:Xn.meta(Dr),handle:Yt.meta(Dr),description:z.string().max(1e3).optional().meta(Dr),rt_status:bw.default("draft").meta(Dr),discount_type:xw.meta(Dr),discount_value:z.number().min(0).meta(xy),currency:z.string().length(3).default("USD").meta(xy),applicable_plan_ids:z.array(z.string()).default([]).meta(Dr),applicable_addon_ids:z.array(z.string()).default([]).meta(Dr),target_segment_ids:z.array(z.string()).default([]).meta(Dr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(Dr),current_redemptions:z.number().int().min(0).default(0).meta({...Dr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(Dr),starts_at:Kn.meta(Dr),ends_at:Kn.meta(Dr),stripe_coupon_id:z.string().nullable().default(null).meta(Dr),stripe_promotion_code_id:z.string().nullable().default(null).meta(Dr),auto_sync_stripe:z.boolean().default(false).meta(Dr),metadata:er.meta(Dr)}).meta({id:"Promotion","x-revturbine-schema-persistence":yw,"x-revturbine-schema-exposure":jg,...vw,...zr()}),Sw=pr("PromotionAnchor");({"/api/promotion-anchors":{get:_({operationId:"listPromotionAnchors",requestParams:{query:me},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:ce(Sw)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:_({operationId:"listPromotions",requestParams:{query:me},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:ce(ys)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:_({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:_({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:ys.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:_({operationId:"deletePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:_({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:_({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:p}=fn,{Persisted:pl,Transient:yt}=En,{Internal:Ga,External:Ft}=vn,At=mn(Mt.Playbook,{sdkInput:true}),rl=mn(Mt.Playbook,{sdkInput:false}),bs=mn(Mt.Playbook,{inConfig:false,sdkInput:false}),Cv=mn(Mt.Playbook,{inConfig:false,sdkInput:true}),Wo=mn(Mt.Playbook,{inConfig:false,sdkInput:true,source:wa.CodeConstant}),ig=mn(Mt.Playbook,{inConfig:false,sdkInput:true,source:wa.Runtime}),sg=mn(Mt.Playbook,{inConfig:false,sdkInput:false,source:wa.Runtime}),Pw=mn(Mt.Billing,{sdkInput:false}),Tw=mn(Mt.Metering,{sdkInput:false}),Iw=mn(Mt.Branding,{inConfig:true,sdkInput:true}),Cw=mn(Mt.Branding,{sdkInput:false}),Ew="1.0.0",Ac=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),name:Xn.meta(p),handle:Yt.meta(p),description:Ws.meta(p),is_default:z.boolean().default(false).meta(p),entitlement_ids:z.array(z.string()).default([]).meta(p),metadata:er.meta(p)}).meta({id:"SeatType","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ga,...bs,...zr()}),kw=pr("SeatTypeAnchor"),wc=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:Yt.meta(p),label:z.string().min(1).meta(p),description:z.string().nullable().default(null).meta(p),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(p),data_source:z.string().nullable().default(null).meta(p),example_value:z.string().nullable().default(null).meta(p),value_map:z.record(z.string(),z.string()).default({}).meta(p),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(p),metadata:er.meta(p)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ga,...bs,...zr()}),Rw=pr("PersonalizationTokenAnchor"),Aw=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ga}),og=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({handle:Yt.meta({...p,readOnly:true}),stripe_account_id:z.string().min(1).meta(p),live_mode:z.boolean().default(false).meta(p),onboarding_state:Aw.default("not_started").meta({...p,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...p,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...p,readOnly:true}),details_submitted:z.boolean().default(false).meta({...p,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...p,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...p,readOnly:true}),sync_products:z.boolean().default(true).meta(p),sync_prices:z.boolean().default(true).meta(p),sync_subscriptions:z.boolean().default(true).meta(p),sync_invoices:z.boolean().default(false).meta(p),default_currency:z.string().length(3).default("USD").meta(p),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(p),last_sync_at:z.string().optional().meta({...p,readOnly:true}),metadata:er.meta(p)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ga,...Pw,...Ka()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(p),workspace_name:z.string().optional().meta(p),logo_url:z.string().optional().meta(p),support_email:z.string().optional().meta(p)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...Cw});var jc=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({handle:Yt.meta({...p,readOnly:true}),entitlement_id:z.string().min(1).meta(p),meter_key:z.string().min(1).max(100).meta(p),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(p),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(p),stripe_meter_id:z.string().nullable().default(null).meta(p),is_active:z.boolean().default(true).meta(p),metadata:er.meta(p)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ga,...Tw,...Ka()}),Sy=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ga}),Oc=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:Yt.meta({...p,readOnly:true}),entitlement_id:z.string().min(1).meta(p),soft_limit_percent:z.number().min(0).max(100).default(80).meta(p),hard_limit_percent:z.number().min(0).max(100).default(100).meta(p),soft_limit_action:Sy.default("warn").meta(p),hard_limit_action:Sy.default("block").meta(p),grace_period_hours:z.number().int().min(0).default(0).meta(p),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(p),is_active:z.boolean().default(true).meta(p)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ga,...Cv,...Ka()}),ww=pr("UsageEnforcementSettingsAnchor"),jw=z.object({kind:z.enum(["template","slot"]).meta(p),id:z.string().min(1).meta(p),label:z.string().min(1).optional().meta(p)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ga}),Ow=z.object({id:z.string().min(1).meta(p),group:z.array(jw).min(1).meta(p),cap:z.object({count:z.number().int().min(1).meta(p),period:z.enum(["session","day","week","month"]).meta(p)}).meta(p)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ga}),qw=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ga}),Ev=z.object({capRules:z.array(Ow).default([]).meta(p),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(p),remindLaterMinutes:z.number().int().min(0).default(60).meta(p),testMode:qw.default("off").meta(p)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ga}),lg=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:Yt.meta({...p,readOnly:true}),global_frequency_cap:Ev.nullable().default(null).meta(p),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(p),suppress_for_paid:z.boolean().default(false).meta(p),suppress_for_trial:z.boolean().default(false).meta(p),allow_stacking:z.boolean().default(false).meta(p),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(p)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ga,...Cv,...Ka()}),Dw=pr("PlacementSettingsAnchor"),Uw=z.object({field:z.string().min(1).meta(p),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(p),value:z.string().meta(p)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),Mw=z.object({name:z.string().min(1).meta(p),handle:z.string().min(1).meta(p),predicates:z.array(Uw).optional().meta(p),dimension_id:z.string().optional().meta(p),experiment_handle:z.string().min(1).optional().meta(p),experiment_id:z.string().min(1).optional().meta(p)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Fw=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),tier_position:z.number().int().min(0).default(0).meta(p),sort_order:z.number().int().min(0).default(0).meta(p),visibility:xs.default("public").meta(p)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Lw=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),sort_order:z.number().int().min(0).default(0).meta(p),visibility:xs.default("public").meta(p)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...rl}),Nw=z.object({handle:z.string().min(1).meta(p),plan_handle:z.string().min(1).meta(p),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(p),segment_handle:z.string().nullable().default(null).meta(p),price_amount:z.number().min(0).meta(p),pricing_model:Bc.meta(p),visibility:xs.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:Pu.meta(p)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...bs}),Vw=z.object({handle:z.string().min(1).meta(p),addon_handle:z.string().min(1).meta(p),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(p),segment_handle:z.string().nullable().default(null).meta(p),price_amount:z.number().min(0).meta(p),pricing_model:Bc.meta(p),visibility:xs.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:Pu.meta(p)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...bs}),Bw=z.object({handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),description:z.string().nullable().default(null).meta(p),is_default:z.boolean().default(false).meta(p),entitlement_handles:z.array(z.string()).default([]).meta(p)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),zw=z.object({handle:z.string().min(1).meta(p),entitlement_handle:z.string().nullable().default(null).meta(p),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(p),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(p),soft_limit_action:z.string().meta(p),hard_limit_action:z.string().meta(p),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(p),notification_channels:z.array(z.string()).default([]).meta(p),is_active:z.boolean().default(true).meta(p)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Kw=z.object({handle:z.string().min(1).meta(p),global_frequency_cap:Ev.nullable().default(null).meta(p),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(p),suppress_for_paid:z.boolean().default(false).meta(p),suppress_for_trial:z.boolean().default(false).meta(p),allow_stacking:z.boolean().default(false).meta(p),priority_collision_strategy:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),$w=z.object({handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:z.string().nullable().default(null).meta(p),visibility_toggle:z.boolean().default(true).meta(p),source_type:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Hw=z.object({handle:z.string().min(1).meta(p),entitlement_handle:z.string().min(1).meta(p),meter_handle:z.string().min(1).meta(p),limit:z.number().int().min(0).nullable().default(null).meta(p),reset_period:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Gw=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),type:dg.meta(p),unit:z.string().optional().meta(p),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Yw=z.object({id:z.string().min(1).meta(p),entitlement_id:z.string().min(1).meta(p),targets:z.array(qy).min(1).meta(p),segment_ids:z.array(z.string()).default([]).meta(p),kind:dg.optional().meta({...p,readOnly:true}),unit:z.string().optional().meta({...p,readOnly:true}),tier_name:z.string().optional().meta({...p,readOnly:true}),tier_description:z.string().optional().meta({...p,readOnly:true}),...sl.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(p),allocation:Tu.optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Ww=z.object({slot_id:z.string().min(1).meta(p),active:z.boolean().meta(p),triggers:z.array(z.string()).meta(p)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Jw=z.object({id:z.string().min(1).meta(p),label:z.string().min(1).meta(p),description:z.string().meta(p),surface_type:z.string().meta(p),placement_handle:z.string().min(1).meta(p),template:z.string().optional().meta(p)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Zw=z.object({name:z.string().min(1).meta(p),type:z.string().optional().meta(p),required:z.boolean().optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),Qw=z.object({id:z.string().min(1).meta(p),surface_type:z.string().meta(p),fields:z.array(Zw).optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Xw=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),ej=z.object({name:z.string().min(1).meta(p),action_type:Xw.meta(p),plan_handle:z.string().optional().meta(p),promotion_id:z.string().optional().meta(p),placement_handle:z.string().optional().meta(p),url:z.string().optional().meta(p),tour_id:z.string().optional().meta(p),target_billing_period:z.enum(["monthly","annual"]).optional().meta(p),description:z.string().optional().meta(p)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),tj=z.object({id:z.string().meta(p),name:z.string().meta(p),discount:z.string().meta(p),type:z.string().meta(p),status:z.string().meta(p)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),nj=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(p),label:z.string().min(1).meta(p),description:z.string().optional().meta(p),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(p),data_source:z.string().optional().meta(p),example_value:z.string().optional().meta(p),value_map:z.record(z.string(),z.string()).optional().meta(p),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(p)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),Py=z.object({header:z.string().optional().meta(p),body:z.string().optional().meta(p),cta_label:z.string().optional().meta(p),secondary_cta_label:z.string().optional().meta(p)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),rj=z.object({block_id:z.string().min(1).meta(p),tenant_id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),surface_template_id:z.string().optional().meta(p),default_content:Py.meta(p),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Py})).optional().meta(p),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(p),tokens_used:z.array(z.string()).optional().meta(p),status:z.enum(["draft","active","archived"]).meta(p),created_at:z.string().datetime().meta({...p,readOnly:true}),updated_at:z.string().datetime().meta({...p,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),aj=z.object({label:z.string().meta(p),path:Ey.meta(p),config:z.record(z.string(),z.string()).optional().meta(p)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),kv=z.object({template_id:z.string().min(1).meta(p),fields:z.record(z.string(),z.string()).meta(p),ctas:z.array(aj).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),Rv=z.object({plan_ids:z.array(z.string()).meta(p),billing_cadences:z.array(z.string()).optional().meta(p),segment_chips:z.array(z.string()).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),ij=z.object({count:z.number().int().min(1).meta(p),period:z.enum(["session","day","week","month","lifetime"]).meta(p)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),Av=z.object({max_per_period:ij.optional().meta(p),cooldown_days:z.number().int().min(0).optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),sj=z.object({id:z.string().min(1).meta(p),target:Rv.meta(p),surfaces:z.array(kv).meta(p),caps:Av.optional().meta(p),surface_slot_ids:z.array(z.string()).optional().meta(p),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(p),created_at:z.string().optional().meta({...p,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(p),recommendation_plan_override:z.string().optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),oj=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Mc}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Mc}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Mc}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),lj=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft}),cj=z.object({id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:lj.meta(p),trigger:oj.meta(p),payloads:z.array(sj).meta(p),order:z.number().int().min(0).meta(p)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),mj=z.object({payload_id:z.string().min(1).meta(p),placement_id:z.string().min(1).meta(p),target:Rv.meta(p),caps:Av.optional().meta(p),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(p),created_at:z.string().meta({...p,readOnly:true}),updated_at:z.string().datetime().optional().meta({...p,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(p),surfaces:z.array(kv).optional().meta(p),surface_slot_ids:z.array(z.string()).optional().meta(p),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(p)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),uj=z.object({kind:z.string().min(1).meta(p),schema_version:z.number().int().nonnegative().meta(p),config:z.unknown().meta(p)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),dj=he.merge(_v).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...bs}),pj=he.merge(yv).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...bs}),gj=z.object({plans:z.array(Fw).meta({...p,...At}),addons:z.array(Lw).optional().meta({...p,...rl}),entitlements:z.array(Gw).meta({...p,...At}),entitlement_rules:z.array(Yw).meta({...p,...At}),segments:z.array(Mw).meta({...p,...At}),content_ui_paths:z.array(ej).meta({...p,...At}),slot_configs:z.array(Ww).optional().meta({...p,...At,...Hp({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...p,...At,...Hp({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...p,...Iw,...Hp({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(Jw).optional().meta({...p,...At}),message_blocks:z.array(rj).optional().meta({...p,...At}),placement_payloads:z.array(mj).optional().meta({...p,...At}),placements:z.array(cj).optional().meta({...p,...At}),content_promotions:z.array(tj).optional().meta({...p,...At}),personalization_tokens:z.array(nj).optional().meta({...p,...At}),surface_templates:z.array(Qw).optional().meta({...p,...At}),free_trial_rules:z.array(dj).optional().meta({...p,...rl}),reverse_trial_rules:z.array(pj).optional().meta({...p,...rl}),plan_variations:z.array(Nw).optional().meta({...p,...rl}),addon_variations:z.array(Vw).optional().meta({...p,...rl}),extension_rules:z.array(uj).optional().meta({...p,...At}),seat_types:z.array(Bw).optional().meta({...p,...At}),enforcement_defaults:z.array(zw).optional().meta({...p,...At}),placement_settings:z.array(Kw).optional().meta({...p,...At}),segment_dimensions:z.array($w).optional().meta({...p,...At}),meter_bindings:z.array(Hw).optional().meta({...p,...At}),experiments:z.array(z.unknown()).max(0).optional().meta({...p,...bs}),signal_catalog:z.object({}).strict().optional().meta({...p,...bs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At}),hj=z.object({artifact_type:z.literal("playbook").meta({...p,...Wo,readOnly:true}),format_version:z.literal(Ew).meta({...p,...Wo,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...p,...Wo}),playbook_version_id:z.string().nullable().default(null).meta({...p,...ig,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...p,...sg,readOnly:true}),environment_id:z.string().min(1).optional().meta({...p,...sg,readOnly:true}),project_id:z.string().min(1).optional().meta({...p,...sg,readOnly:true}),exported_at:z.string().datetime().optional().meta({...p,...ig,readOnly:true}),schema_version:z.string().min(1).optional().meta({...p,...Wo,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...p,...Wo,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...p,...Wo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...ig}),wv=hj.extend(gj.shape).meta({"x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At});function fj(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function jv(t){if(!fj(t))return t;let e={...t};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess(jv,wv).meta({id:"Playbook","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At});z.preprocess(jv,wv.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":yt,"x-revturbine-schema-exposure":Ft,...At});({"/api/seat-type-anchors":{get:_({operationId:"listSeatTypeAnchors",requestParams:{query:me},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:ce(kw)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:_({operationId:"listSeatTypes",requestParams:{query:me},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:ce(Ac)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:_({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(Ac)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ac}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:_({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ac.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ac}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:_({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:_({operationId:"listPersonalizationTokenAnchors",requestParams:{query:me},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:ce(Rw)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:_({operationId:"listPersonalizationTokens",requestParams:{query:me},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:ce(wc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:_({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(wc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:_({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:wc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:_({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:_({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(og)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:og}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:_({operationId:"listMeteringConfigs",requestParams:{query:me},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:ce(jc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:_({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(jc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:jc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:_({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:jc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:jc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:_({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:_({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:me},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:ce(ww)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:_({operationId:"listUsageEnforcementSettings",requestParams:{query:me},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:ce(Oc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:_({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(Oc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Oc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:_({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Oc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Oc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:_({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:_({operationId:"listPlacementSettingsAnchors",requestParams:{query:me},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:ce(Dw)}}},default:{description:"Error response",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:_({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(lg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:lg}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Yi}=fn,{Persisted:Ov}=En,{Internal:qv}=vn,_j=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Ov,"x-revturbine-schema-exposure":qv}),Ty=he.merge(ze).merge(at).extend({action:_j.meta(Yi),resource_type:z.string().min(1).max(100).meta(Yi),resource_id:z.string().min(1).meta(Yi),resource_name:z.string().max(200).optional().meta(Yi),actor_id:z.string().min(1).meta(Yi),actor_email:z.string().email().optional().meta(Yi),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Yi),summary:z.string().max(1e3).optional().meta(Yi),metadata:er.meta(Yi)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Ov,"x-revturbine-schema-exposure":qv});({"/api/changelog":{get:_({operationId:"listChangeLogEntries",requestParams:{query:me},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:ce(Ty)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:_({operationId:"getChangeLogEntry",requestParams:{path:z.object({entryId:z.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:Ty}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:fu}=fn,{Persisted:yj,Transient:vj}=En,{Internal:Dv}=vn,bj=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":vj,"x-revturbine-schema-exposure":Dv}),vs=he.merge(ze).extend({name:Xn.meta(fu),handle:Yt.meta(fu),status:bj.default("active").meta(fu),metadata:er.meta(fu)}).meta({id:"Tenant","x-revturbine-schema-persistence":yj,"x-revturbine-schema-exposure":Dv});({"/api/tenants":{get:_({operationId:"listTenants",requestParams:{query:me},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:ce(vs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:_({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:_({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:vs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:_({operationId:"suspendTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:_({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Va}=fn,{Persisted:xj,Transient:Uv}=En,{Internal:Og}=vn,Sj=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Uv,"x-revturbine-schema-exposure":Og}),Jo=he.merge(ze).merge(at).extend({name:Xn.meta(Va),handle:Yt.meta(Va),description:Ws.meta(Va),is_production:z.boolean().default(false).meta({...Va,readOnly:true}),status:Sj.default("active").meta(Va),cloned_from_environment_id:z.string().nullable().default(null).meta({...Va,readOnly:true}),cloned_at:Kn.meta({...Va,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Va,readOnly:true}),requires_approval:z.boolean().default(false).meta(Va),auto_deploy_on_approval:z.boolean().default(false).meta(Va),created_by:z.string().optional().meta(Va),metadata:er.meta(Va)}).meta({id:"Environment","x-revturbine-schema-persistence":xj,"x-revturbine-schema-exposure":Og}),Pj=z.object({source_environment_id:z.string().min(1),target_environment_id:z.string().min(1),playbook_version_ids:z.array(z.string()).optional(),strategy:z.enum(["all_current","selected_playbook_versions"]).default("all_current")}).meta({id:"EnvironmentPromotionRequest","x-revturbine-schema-persistence":Uv,"x-revturbine-schema-exposure":Og});({"/api/environments":{get:_({operationId:"listEnvironments",requestParams:{query:me},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:ce(Jo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:_({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200),handle:z.string().min(1).max(100),description:z.string().max(500).optional(),clone_from_environment_id:z.string().optional(),requires_approval:z.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jo}}},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:_({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:Jo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:_({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Jo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Jo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:_({operationId:"archiveEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:Jo}}},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:_({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Pj}}},responses:{200:{description:"Promotion result",content:{"application/json":{schema:z.object({promoted_count:z.number().int(),conflict_count:z.number().int(),conflicts:z.array(z.object({handle:z.string(),resource_type:z.string(),source_sequence:z.number().int(),target_sequence:z.number().int()}))})}}},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:rt,Pii:Nc}=fn,{Transient:Ai,Persisted:Tj}=En,{External:ui}=vn,Ij=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui});z.object({superseded_output_id:z.string().min(1).meta(rt),superseded_by:z.string().min(1).meta(rt),reason:Ij.meta(rt)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":Tj,"x-revturbine-schema-exposure":ui,...fn.Operational});var Cj=z.enum(Cy).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui}),Mv=z.object({output_id:z.string().meta(rt),category:z.string().meta(rt),surface:z.object({template:z.string().optional().meta(rt),type:xu.meta(rt),slot_id:z.string().optional().meta(rt)}).meta(rt),content:z.record(z.string(),z.unknown()).meta(rt),promotion:z.record(z.string(),z.unknown()).optional().meta(rt),cta_path:z.record(z.string(),z.unknown()).optional().meta(rt),ui_path:z.record(z.string(),z.unknown()).optional().meta(rt),rule_id:z.string().meta(rt),decision_id:z.string().meta(rt),config_version:z.string().meta(rt),present_upsell:z.boolean().meta(rt),message_block_handle:z.string().optional().meta(rt),message_block_id:z.string().optional().meta(rt),experiment_id:z.string().optional().meta(rt),variant_key:z.string().optional().meta(rt),experiment_version_id:z.string().optional().meta(rt)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui}),Ej=z.object({status:Cj.meta(rt),allowed:z.boolean().meta(rt),reason:z.string().optional().meta(rt),current_tier:z.string().optional().meta(rt),limit:z.number().optional().meta(rt),used:z.number().optional().meta(rt),remaining:z.number().optional().meta(rt),placement:Mv.optional().meta(rt)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui});z.object({id:z.string().meta(rt),name:z.string().optional().meta(rt),discount:z.string().optional().meta(rt),type:z.string().optional().meta(rt),status:z.string().optional().meta(rt)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui});var kj=z.object({id:z.string().meta(Nc),anonymous_id:z.string().optional().meta(rt),traits:z.record(z.string(),z.unknown()).optional().meta(Nc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui}),Rj=z.object({slot_id:z.string().optional().meta(rt),entitlement_handle:z.string().optional().meta(rt),plan_handle:z.string().optional().meta(rt),placement_handle:z.string().optional().meta(rt),visible:z.boolean().meta(rt),output:Mv.optional().meta(rt),reason_codes:z.array(z.string()).optional().meta(rt)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui}),Aj=Ej,wj=yg.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui}),jj=z.object({segments:z.array(z.string()).optional().meta(rt),traits:z.record(z.string(),z.unknown()).optional().meta(Nc),usage_balances:z.record(z.string(),z.number()).optional().meta(rt)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui});z.object({version:z.literal("1.0.0").meta(rt),request_id:z.string().meta(rt),tenant_id:z.string().meta(rt),evaluated_at:z.string().datetime().meta(rt),ttl_seconds:z.number().int().min(0).max(86400).meta(rt),user:kj.meta(Nc),decisions:z.array(Rj).meta(rt),entitlements:z.record(z.string(),Aj).optional().meta(rt),theme:z.record(z.string(),z.unknown()).optional().meta(rt),trial_status:wj.optional().meta(rt),user_context:jj.optional().meta(Nc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":Ai,"x-revturbine-schema-exposure":ui});var {Unrestricted:en}=fn,{Persisted:Oj,Transient:qu}=En,{Internal:Qc}=vn,qj=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":qu,"x-revturbine-schema-exposure":Qc}),qc=he.merge(ze).merge(at).extend({environment_id:z.string().min(1).meta(en),name:Xn.meta(en),description:z.string().max(2e3).optional().meta(en),status:qj.default("draft").meta(en),labels:z.array(z.string()).default([]).meta(en),created_by:z.string().min(1).meta(en),submitted_by:z.string().nullable().default(null).meta({...en,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...en,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...en,readOnly:true}),submitted_at:Kn.meta({...en,readOnly:true}),reviewed_at:Kn.meta({...en,readOnly:true}),deployed_at:Kn.meta({...en,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...en,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...en,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...en,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(en),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(en),review_notes:z.string().max(2e3).optional().meta(en),rejection_reason:z.string().max(2e3).optional().meta(en),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...en,readOnly:true}),bundle:z.string().nullable().default(null).meta({...en,readOnly:true}),metadata:er.meta(en)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":Oj,"x-revturbine-schema-exposure":Qc}),Fv=z.object({handle:z.string().meta(en),resource_type:z.string().meta(en),resource_name:z.string().optional().meta(en),action:z.enum(["create","update","delete"]).meta(en),has_conflict:z.boolean().meta(en)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":qu,"x-revturbine-schema-exposure":Qc}),Dj=z.object({playbook_version_id:z.string().meta(en),entries:z.array(Fv).meta(en),total_entries:z.number().int().min(0).meta(en),total_conflicts:z.number().int().min(0).meta(en),deployable:z.boolean().meta(en)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":qu,"x-revturbine-schema-exposure":Qc}),Uj=z.object({playbook_version_id:z.string().meta(en),deployed_count:z.number().int().min(0).meta(en),superseded_count:z.number().int().min(0).meta(en),skipped_conflicts:z.number().int().min(0).meta(en),deployed_at:z.string().datetime().meta(en)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":qu,"x-revturbine-schema-exposure":Qc});({"/api/playbook-versions/{playbookVersionId}/submit":{post:_({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:qc}}},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:_({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:qc}}},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:_({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:qc}}},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:_({operationId:"deployPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({force:z.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:Uj}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:_({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:qc}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:_({operationId:"previewPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Preview diff of all entries vs current state (dry-run deploy)",tags:["playbook-versions"],responses:{200:{description:"Diff preview",content:{"application/json":{schema:Dj}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:_({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:me},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:ce(Fv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:_({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:qc}}},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:_({operationId:"cherryPickEntries",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({handles:z.array(z.string()).min(1),target_playbook_version_id:z.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z.object({copied_count:z.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:kt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:He,Pii:Mj}=fn,{Persisted:Ya}=En,{Internal:Wa}=vn,Fj=mn(Mt.CustomerOperations,{sdkInput:false,source:wa.Customer}),Lj=365,$s=he.merge(ze).merge(at).extend({provider_handle:Yt.meta(He),provider_type:Yt.meta(He),endpoint:z.string().url().max(2048).nullable().default(null).meta(He),credential_reference:z.string().min(1).max(255).nullable().default(null).meta({...He,readOnly:true}),environment_id:z.string().min(1).max(200).default("production").meta(He),health_state:ov.default("unavailable").meta({...He,readOnly:true}),last_health_check_at:Kn.meta({...He,readOnly:true}),supported_capability_versions:z.record(z.string().min(1).max(100),z.array(z.number().int().min(1)).min(1)).default({}).meta({...He,readOnly:true}),external_project_id:z.string().min(1).max(255).nullable().default(null).meta(He),external_workspace_id:z.string().min(1).max(255).nullable().default(null).meta(He),timeout_ms:z.number().int().min(1).max(12e4).default(1e4).meta(He),stale_after_ms:z.number().int().min(1).default(3e5).meta(He),unavailable_after_failures:z.number().int().min(1).max(100).default(3).meta(He)}).meta({id:"ProviderConnection","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa,...Fj}),Nj=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),_u=he.merge(ze).merge(at).extend({name:Xn.meta(He),key_hash:z.string().min(1).meta({...Mj,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...He,readOnly:true}),key_last4:z.string().length(4).meta({...He,readOnly:true}),status:Nj.default("active").meta(He),last_used_at:Kn.meta({...He,readOnly:true}),expires_at:Kn.meta(He)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),Vj=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),Hs=he.merge(ze).merge(at).extend({key:z.string().min(1).max(100).meta(He),value_type:Vj.default("boolean").meta(He),value:z.string().max(4e3).default("false").meta(He),description:Ws.meta(He),enabled:z.boolean().default(true).meta(He)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),cg=he.merge(ze).merge(at).extend({workspace_name:z.string().min(1).max(200).meta(He),support_email:z.string().email().nullable().default(null).meta(He),timezone:z.string().max(50).default("UTC").meta(He),default_currency:z.string().length(3).default("USD").meta(He),logo_url:z.string().url().nullable().default(null).meta(He),activity_window_days:z.number().int().min(1).default(pu.window_days).meta(He),activity_high_min:z.number().int().min(1).default(pu.high_min).meta(He),activity_medium_min:z.number().int().min(1).default(pu.medium_min).meta(He),activity_low_min:z.number().int().min(1).default(pu.low_min).meta(He),analytics_retention_days:z.number().int().min(1).default(Lj).meta(He)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),mg=he.merge(ze).merge(at).extend({server_url:z.string().url().max(500).meta(He),api_token_hint:z.string().max(50).nullable().default(null).meta(He),allow_write_actions:z.boolean().default(false).meta(He),enabled_tools:z.array(z.string().max(100)).default([]).meta(He),enabled:z.boolean().default(false).meta(He)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),yu=he.merge(ze).merge(at).extend({step_key:z.string().min(1).max(100).meta(He),label:z.string().min(1).max(200).meta(He),done:z.boolean().default(false).meta(He),completed_at:Kn.meta({...He,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),Bj=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),zj=he.merge(at).extend({environment_id:z.string().min(1).default("production").meta(He),actor_type:Bj.meta(He),actor_id:z.string().nullable().default(null).meta(He),action:z.string().min(1).max(120).meta(He),object_type:z.string().max(120).nullable().default(null).meta(He),object_id:z.string().max(200).nullable().default(null).meta(He),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(He),occurred_at:z.string().datetime().meta({...He,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),Kj=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa}),vu=he.merge(ze).merge(at).merge(Sn).merge(kn).extend({handle:Yt.meta({...He,readOnly:true}),identifier:z.string().min(1).max(200).meta(He),identifier_type:Kj.default("user_id").meta(He),note:z.string().max(500).nullable().default(null).meta(He),added_by:z.string().meta(He)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Ya,"x-revturbine-schema-exposure":Wa,...Ka()});({"/api/settings/api-keys":{get:_({operationId:"listApiKeys",requestParams:{query:me},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:ce(_u)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:_({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(_u)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:_u}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:_({operationId:"revokeApiKey",requestParams:{path:z.object({keyId:z.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:_u}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:_({operationId:"listFeatureFlags",requestParams:{query:me},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:ce(Hs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:_({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(Hs)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:Hs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:_({operationId:"getFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:Hs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:_({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(Hs).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:Hs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:_({operationId:"deleteFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:Hs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:_({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(cg).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:cg}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:_({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(mg).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:mg}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:_({operationId:"listOnboardingSteps",requestParams:{query:me},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:ce(yu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:_({operationId:"getOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:yu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:_({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(yu).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:yu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:_({operationId:"listAuditEvents",requestParams:{query:me},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:ce(zj)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:_({operationId:"listPlacementTestUsers",requestParams:{query:me},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:ce(vu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:_({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(vu)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:vu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:_({operationId:"deletePlacementTestUser",requestParams:{path:z.object({testUserId:z.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:vu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})},"/api/settings/provider-connections":{get:_({operationId:"listProviderConnections",requestParams:{query:me},summary:"List provider connections for the tenant",tags:["settings"],responses:{200:{description:"Provider connections",content:{"application/json":{schema:ce($s)}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"list"}}}),post:_({operationId:"createProviderConnection",summary:"Create a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr($s)}}},responses:{201:{description:"Provider connection created",content:{"application/json":{schema:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"create",writeSchema:"ProviderConnectionSchema#writable"}}})},"/api/settings/provider-connections/{connectionId}":{get:_({operationId:"getProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Get a provider connection",tags:["settings"],responses:{200:{description:"Provider connection",content:{"application/json":{schema:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"get"}}}),put:_({operationId:"updateProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Update a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur($s).partial()}}},responses:{200:{description:"Provider connection updated",content:{"application/json":{schema:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"update",writeSchema:"ProviderConnectionSchema#writable"}}}),delete:_({operationId:"deleteProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Delete a provider connection",tags:["settings"],responses:{200:{description:"Provider connection deleted",content:{"application/json":{schema:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"delete"}}})}});var {Unrestricted:ye,Pii:Jr}=fn,{Persisted:da,Transient:qg}=En,{Internal:Fr}=vn,$j=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.merge(ze).extend({name:Xn.meta(ye),email:z.string().email().meta(Jr),email_verified:z.boolean().default(false).meta(ye),image:z.string().url().nullable().default(null).meta(Jr),role:$j.default("user").meta(ye),banned:z.boolean().default(false).meta({...ye,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...ye,readOnly:true}),ban_expires:Kn.meta({...ye,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ye,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.merge(ze).extend({expires_at:z.string().datetime().meta(ye),token:z.string().min(1).meta({...Jr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Jr),user_agent:z.string().nullable().default(null).meta(Jr),user_id:z.string().min(1).meta({...ye,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(ye),impersonated_by:z.string().nullable().default(null).meta({...ye,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.merge(ze).extend({account_id:z.string().min(1).meta(ye),provider_id:z.string().min(1).meta(ye),user_id:z.string().min(1).meta({...ye,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Jr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Jr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Jr,readOnly:true}),access_token_expires_at:Kn.meta({...ye,readOnly:true}),refresh_token_expires_at:Kn.meta({...ye,readOnly:true}),scope:z.string().nullable().default(null).meta(ye),password:z.string().nullable().default(null).meta({...Jr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.merge(ze).extend({identifier:z.string().min(1).meta(Jr),value:z.string().min(1).meta({...Jr,readOnly:true}),expires_at:z.string().datetime().meta(ye)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.extend({secret:z.string().min(1).meta({...Jr,readOnly:true}),backup_codes:z.string().min(1).meta({...Jr,readOnly:true}),user_id:z.string().min(1).meta({...ye,readOnly:true}),verified:z.boolean().default(false).meta({...ye,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.extend({name:Xn.meta(ye),slug:z.string().min(1).max(100).nullable().default(null).meta(ye),logo:z.string().url().nullable().default(null).meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true}),metadata:z.string().nullable().default(null).meta(ye)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});var Lv=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});var Nv=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":qg,"x-revturbine-schema-exposure":Fr}),Vv=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":qg,"x-revturbine-schema-exposure":Fr});z.object({resource:Nv,action:Vv}).meta({id:"Permission","x-revturbine-schema-persistence":qg,"x-revturbine-schema-exposure":Fr});var Hj=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],Gj=["plans","entitlements","placements","targeting","content","experiments"],Yj=["plans","entitlements","placements","targeting","content","experiments"],Wj=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],Jj=["read","create","update","delete","publish","approve","invite","manage_roles"];function Du(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var Zj=Du(Hj,["read"]),Qj=[...Zj,...Du(Gj,["create","update"])];[...Qj,...Du(Yj,["publish","approve","delete"])];Du(Wj,Jj);var Xj=Nv.options.flatMap(t=>Vv.options.map(e=>`${t}:${e}`));z.enum(Xj).meta({id:"McpTokenScope","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.extend({organization_id:z.string().min(1).meta({...ye,readOnly:true}),user_id:z.string().min(1).meta({...ye,readOnly:true}),role:Lv.default("viewer").meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});var eO=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.extend({organization_id:z.string().min(1).meta({...ye,readOnly:true}),email:z.string().email().meta(Jr),role:Lv.nullable().default(null).meta(ye),status:eO.default("pending").meta(ye),expires_at:z.string().datetime().meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true}),inviter_id:z.string().min(1).meta({...ye,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.extend({name:z.string().max(200).nullable().default(null).meta(ye),public_key:z.string().min(1).meta({...Jr,readOnly:true}),user_id:z.string().min(1).meta({...ye,readOnly:true}),credential_id:z.string().min(1).meta({...ye,readOnly:true}),counter:z.number().int().default(0).meta({...ye,readOnly:true}),device_type:z.string().min(1).meta(ye),backed_up:z.boolean().default(false).meta(ye),transports:z.string().nullable().default(null).meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true}),aaguid:z.string().nullable().default(null).meta(ye)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.merge(ze).extend({config_id:z.string().min(1).meta(ye),name:z.string().max(200).nullable().default(null).meta(ye),start:z.string().nullable().default(null).meta(ye),reference_id:z.string().min(1).meta(ye),prefix:z.string().nullable().default(null).meta(ye),key:z.string().min(1).meta({...Jr,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(ye),refill_amount:z.number().int().nullable().default(null).meta(ye),last_refill_at:Kn.meta({...ye,readOnly:true}),enabled:z.boolean().default(true).meta(ye),rate_limit_enabled:z.boolean().default(false).meta(ye),rate_limit_time_window:z.number().int().nullable().default(null).meta(ye),rate_limit_max:z.number().int().nullable().default(null).meta(ye),request_count:z.number().int().default(0).meta({...ye,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...ye,readOnly:true}),last_request:Kn.meta({...ye,readOnly:true}),expires_at:Kn.meta(ye),permissions:z.string().nullable().default(null).meta(ye),metadata:z.string().nullable().default(null).meta(ye)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});he.extend({issuer:z.string().min(1).meta(ye),oidc_config:z.string().nullable().default(null).meta(ye),saml_config:z.string().nullable().default(null).meta(ye),user_id:z.string().min(1).meta({...ye,readOnly:true}),provider_id:z.string().min(1).meta(ye),organization_id:z.string().nullable().default(null).meta(ye),domain:z.string().min(1).meta(ye)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":da,"x-revturbine-schema-exposure":Fr});var Bv="0.7.3";var Uu=/^[a-z0-9._]{1,100}$/;var Ne={Persisted:"persisted",Transient:"transient"},Ue={Internal:"internal",External:"external"},qe={Pii:{"x-revturbine-data-classification":"pii"},Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}};var zv="x-revturbine-schema-exposure",rO="readOnly",aO="x-revturbine-decision-only",Mu={[aO]:true},Xr={[zv]:Ue.External},Dg={[zv]:Ue.Internal};function Hn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[rO]===true||(e[n]=r);}return z.object(e)}function tr(t){let e=Hn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(Uu)}):e}var {Unrestricted:Sr}=qe,{Transient:ea,Persisted:iO}=Ne,{Internal:Qs,External:wi}=Ue;z.object({page:z.coerce.number().int().min(1).default(1).meta(Sr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(Sr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi});var Ug=t=>z.object({items:z.array(t).meta(Sr),total:z.number().int().min(0).meta(Sr),page:z.number().int().min(1).meta(Sr),per_page:z.number().int().min(1).meta(Sr),has_more:z.boolean().meta(Sr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi}),le=z.object({created_at:z.string().datetime().meta({...Sr,readOnly:true}),updated_at:z.string().datetime().meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi}),W=z.object({id:z.string().min(1).meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi}),de=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":Qs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi});var Xc=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi}),em=["allowed","limited","denied"],tm={window_days:30,high_min:10,medium_min:3,low_min:1};z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi});var gl=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi}),Mg=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":Qs});var Wt=z.string().min(1).max(200),it=z.string().min(1).max(100),Ca=z.string().max(500).optional(),$t=z.record(z.string(),z.unknown()).default({}),Cs=z.number().int().min(10).max(100).multipleOf(10),nn=z.string().datetime().nullable().default(null),Lt=z.object({environment_id:z.string().min(1).default("production").meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":Qs}),Bt=z.object({playbook_version_id:z.string().nullable().default(null).meta(Sr),is_current:z.boolean().default(true).meta({...Sr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...Sr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...Sr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...Sr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":Qs}),mO=W.merge(le).merge(de).merge(Lt).extend({handle:it.meta({...Sr,readOnly:true}),active:z.boolean().default(true).meta({...Sr,readOnly:true})});function bn(t){return mO.meta({id:t,"x-revturbine-schema-persistence":iO,"x-revturbine-schema-exposure":Qs})}var hl=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":Qs}),Fg=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":Qs}),fl=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":ea,"x-revturbine-schema-exposure":wi});var Ye={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},jr={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},uO="x-revturbine-context",dO="x-revturbine-in-config",pO="x-revturbine-sdk-input",gO="x-revturbine-source",hO="x-revturbine-deprecation",fO={[Ye.Playbook]:jr.Customer,[Ye.Branding]:jr.Customer,[Ye.Billing]:jr.Stripe,[Ye.Metering]:jr.Customer,[Ye.CustomerOperations]:jr.Runtime,[Ye.EventIngestion]:jr.Runtime};function gt(t,e){return {[uO]:t,[dO]:e.inConfig??t===Ye.Playbook,[pO]:e.sdkInput,[gO]:e.source??fO[t]}}function nm(t){return {deprecated:true,[hO]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Lg={Named:"named",Minted:"minted"},Kv="x-revturbine-schema-identity";function Fn(t="handle"){return {[Kv]:{kind:Lg.Named,handleField:t}}}function Pr(t="handle"){return {[Kv]:{kind:Lg.Minted,handleField:t}}}var $=t=>z.object({items:z.array(t)}),Ke=z.object({error:z.string(),code:z.string(),request_id:z.string()}),f=t=>t,H=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()});var{Unrestricted:Qt,Financial:Fu}=qe,{Persisted:rm,Transient:Lu}=Ne,{External:Xi}=Ue,_O=gt(Ye.Playbook,{sdkInput:true}),yO=gt(Ye.Playbook,{sdkInput:false}),Ng=gt(Ye.Billing,{sdkInput:false}),ji=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":Xi}),ao=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":Xi}),_l=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":Xi}),Xs=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),name:Wt.meta(Qt),handle:it.meta(Qt),tier_position:z.number().int().min(0).default(0).meta(Qt),sort_order:z.number().int().default(0).meta(Qt),visibility:ji.default("public").meta(Qt),metadata:$t.meta(Qt)}).meta({id:"Plan","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Xi,..._O,...Fn()}),vO=bn("PlanAnchor"),eo=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),handle:it.meta({...Qt,readOnly:true}),plan_id:z.string().min(1).meta(Qt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Qt),segment_id:z.string().nullable().default(null).meta(Qt),price_amount:z.number().min(0).meta(Fu),pricing_model:ao.meta(Qt),visibility:ji.default("public").meta(Qt),stripe_price_id:z.string().optional().meta(Qt),price_source:_l.default("static").meta(Qt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Xi,...Ng,...Pr()}),bO=bn("PlanVariationAnchor"),to=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),name:Wt.meta(Qt),handle:it.meta(Qt),sort_order:z.number().int().default(0).meta(Qt),visibility:ji.default("public").meta(Qt),metadata:$t.meta(Qt)}).meta({id:"AddOn","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Xi,...yO,...Fn()}),xO=bn("AddOnAnchor"),no=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),handle:it.meta({...Qt,readOnly:true}),addon_id:z.string().min(1).meta(Qt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Qt),segment_id:z.string().nullable().default(null).meta(Qt),price_amount:z.number().min(0).meta(Fu),pricing_model:ao.meta(Qt),visibility:ji.default("public").meta(Qt),stripe_price_id:z.string().optional().meta(Qt),price_source:_l.default("static").meta(Qt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Xi,...Ng,...Pr()}),SO=bn("AddOnVariationAnchor"),$v=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":Xi}),ro=W.merge(le).merge(de).extend({stripe_price_id:z.string().min(1).meta(Qt),stripe_product_id:z.string().min(1).meta(Qt),billing_period:$v.meta(Qt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Fu),currency:Mg.meta(Fu),pricing_model:ao.meta(Qt),nickname:z.string().nullable().default(null).meta(Qt),is_mock:z.boolean().default(false).meta(Qt),last_updated_from_stripe:nn.meta(Qt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Xi,...Ng});var PO=Hn(Xs),TO=Hn(eo),IO=Hn(to),CO=Hn(no),EO=Hn(ro);({"/api/plan-anchors":{get:f({operationId:"listPlanAnchors",requestParams:{query:H},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:$(vO)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:f({operationId:"listPlans",requestParams:{query:H},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:$(Xs)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:f({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(Xs)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Xs}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:f({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Xs}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:f({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:PO}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Xs}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:f({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:f({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:f({operationId:"listPlanVariationAnchors",requestParams:{query:H},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:$(bO)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:f({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:H},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:$(eo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:f({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(eo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:f({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:f({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:TO}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:f({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:f({operationId:"listAddOnAnchors",requestParams:{query:H},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:$(xO)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:f({operationId:"listAddOns",requestParams:{query:H},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:$(to)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:f({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(to)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:f({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:f({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:IO}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:f({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:f({operationId:"listAddOnVariationAnchors",requestParams:{query:H},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:$(SO)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:f({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:H},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:$(no)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:f({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(no)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:f({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:f({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:CO}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:f({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:f({operationId:"listStripePrices",requestParams:{query:H},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:$(ro)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:f({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(ro)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:f({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:f({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:EO}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:f({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:Re}=qe,{Persisted:Bg,Transient:Ea}=Ne,{Internal:Hv,External:pa}=Ue,Gv=gt(Ye.Playbook,{sdkInput:true}),RO=gt(Ye.Playbook,{inConfig:false,sdkInput:false}),zg=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),yl=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),Yv=z.enum(em).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),Wv=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),Kg=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),so=z.object({entitlement_id:z.string().min(1).meta(Re),entitlement_handle:z.string().min(1).meta(Re),status:Yv.meta(Re),limit:z.number().optional().meta(Re),used:z.number().optional().meta(Re),allocation:yl.optional().meta(Re),enforcement:Kg.optional().meta(Re),source:Wv.optional().meta(Re),plan_id:z.string().optional().meta(Re),segment_id:z.string().optional().meta(Re),seat_type_id:z.string().optional().meta(Re),rule_id:z.string().optional().meta(Re)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa,...qe.Operational});z.object({account:z.record(z.string(),so).optional().meta(Re),instance:z.record(z.string(),so).optional().meta(Re),user:z.record(z.string(),so).optional().meta(Re)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa,...qe.Operational});var Jv=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),Zv=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),Vu=z.object({kind:Zv.meta(Re),id:z.string().min(1).meta(Re)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),Qv=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),io=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),name:Wt.meta(Re),handle:it.meta(Re),customer_facing_description:z.string().max(500).optional().meta(Re),type:gl.meta(Re),unit:z.string().max(100).optional().meta(Re),period_scope:zg.optional().meta(Re),allocation:yl.optional().meta(Re),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Re),sort_order:z.number().int().default(0).meta(Re),metadata:$t.meta(Re)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Bg,"x-revturbine-schema-exposure":pa,...Gv,...Fn()}),wO=bn("EntitlementAnchor"),Es=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),handle:it.meta({...Re,readOnly:true}),entitlement_id:z.string().min(1).meta(Re),targets:z.array(Vu).min(1).meta(Re),segment_ids:z.array(z.string()).default([]).meta(Re),visibility:Jv.default("public").meta(Re),period_scope:zg.optional().meta(Re),instance:z.string().max(100).optional().meta(Re),reset_period:Qv.optional().meta(Re),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Re),enforcement:Kg.optional().meta(Re),warning_threshold_percent:Cs.optional().meta(Re),overage_price_ref:z.string().optional().meta(Re),grace_period_hours:z.number().int().min(0).optional().meta(Re),tier_value:z.string().optional().meta(Re),rate_value:z.number().optional().meta(Re),initial_grant:z.number().optional().meta(Re),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Re),rollover_enabled:z.boolean().optional().meta(Re),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Re),seat_type_id:z.string().optional().meta(Re),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Re),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Re),stripe_metered_price_id:z.string().optional().meta(Re),enabled:z.boolean().optional().meta(Re),allocation:yl.optional().meta(Re),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Re),amount_cents:z.number().int().optional().meta(Re),currency:z.string().optional().meta(Re)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Bg,"x-revturbine-schema-exposure":Hv,...Gv,...Pr()}),jO=bn("EntitlementRuleAnchor");Es.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var qO=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),DO=z.object({code:qO.meta(Re),message:z.string().min(1).meta(Re),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Re)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa}),Vg=Es.extend({warnings:z.array(DO).optional().meta(Re)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":pa});var Nu=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({handle:it.meta({...Re,readOnly:true}),rule_id:z.string().min(1).meta(Re),experiment_id:z.string().min(1).meta(Re),variant_name:z.string().min(1).max(200).meta(Re),is_control:z.boolean().default(false).meta(Re),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Re)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Bg,"x-revturbine-schema-exposure":Hv,...RO,...Pr()}),UO=Hn(io),MO=Hn(Es);({"/api/entitlement-anchors":{get:f({operationId:"listEntitlementAnchors",requestParams:{query:H},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:$(wO)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:f({operationId:"listEntitlementRuleAnchors",requestParams:{query:H},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:$(jO)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:f({operationId:"listEntitlements",requestParams:{query:H},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:$(io)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:f({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:tr(io)}}},responses:{201:{description:"Created",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:f({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:f({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:UO}}},responses:{200:{description:"Updated",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:f({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:f({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:H},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:$(Es)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:f({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:tr(Es)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Vg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:f({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:MO}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Vg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:f({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Vg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:f({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:H},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:$(Nu)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:f({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:tr(Nu)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Nu}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:et}=qe,{Persisted:Bu,Transient:ks}=Ne,{External:Za}=Ue,eb=gt(Ye.Playbook,{sdkInput:true});gt(Ye.Playbook,{inConfig:false,sdkInput:false});var LO=gt(Ye.Playbook,{inConfig:false,sdkInput:true}),NO=gt(Ye.Playbook,{inConfig:false,sdkInput:false,source:jr.Runtime}),VO=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var $g=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Za}),Hg=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Za}),tb=z.object({count:z.number().int().positive().meta(et),period:Hg.meta(et)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Za});z.object({surface_type:z.string().min(1).meta(et),rules:z.array(tb).meta(et),cooldown_ms:z.number().int().nonnegative().optional().meta(et)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Bu,"x-revturbine-schema-exposure":Za,...qe.Operational,...LO});var nb=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Za}),oo=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...et,readOnly:true}),name:Wt.meta(et),handle:it.meta(et),description:Ca.meta(et),category:$g.meta(et),drag_order_in_category:z.number().int().default(0).meta(et),surface_slot_id:z.string().optional().meta(et),entitlement_id:z.string().optional().meta(et),tier_threshold:z.string().optional().meta(et),threshold_percent:Cs.optional().meta(et),trial_type:z.enum(["free","reverse"]).optional().meta(et),trigger_type:z.string().optional().meta(et),trial_progress_percent:z.number().min(0).max(100).optional().meta(et),days_before_end:z.number().int().min(0).optional().meta(et),qualifier:VO.optional().meta(et),activation_window_start:z.string().datetime().optional().meta(et),activation_window_end:z.string().datetime().optional().meta(et),metadata:$t.meta(et)}).meta({id:"Placement","x-revturbine-schema-persistence":Bu,"x-revturbine-schema-exposure":Za,...eb,...Fn()}),zO=bn("PlacementAnchor"),rb=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Za}),ab=z.object({code:rb.meta(et),message:z.string().min(1).meta(et),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(et)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Za}),Xv=oo.extend({warnings:z.array(ab).optional().meta(et)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Za});var ib=z.object({label:z.string().min(1).max(200).meta(et),cta_path_type:nb.meta(et),config_fields:z.record(z.string(),z.unknown()).default({}).meta(et)}).meta({id:"CtaObject","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Za}),vl=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...et,readOnly:true}),handle:it.meta({...et,readOnly:true}),placement_id:z.string().min(1).meta(et),drag_order:z.number().int().default(0).meta(et),target_plan_ids:z.array(z.string()).default([]).meta(et),target_plan_billing_cadences:z.array(z.string()).default([]).meta(et),target_segments:z.array(z.string()).default([]).meta(et),surface_slot_ids:z.array(z.string()).default([]).meta(et),surface_template_id:z.string().min(1).meta(et),content_fields:z.record(z.string(),z.unknown()).default({}).meta(et),cta_list:z.array(ib).default([]).meta(et),max_per_period:z.number().int().min(0).nullable().default(null).meta(et),max_period_unit:Hg.default("session").meta(et),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(et),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(et),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(et),recommendation_plan_override:z.string().optional().meta(et)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Bu,"x-revturbine-schema-exposure":Za,...eb,...Pr()}),KO=bn("PlacementPayloadAnchor"),sb=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({surface_slot_handle:z.string().min(1).max(200).meta(et),surface_type:Xc.meta(et),surface_template_ids:z.array(z.string()).default([]).meta(et),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(et),first_seen:z.string().datetime().meta({...et,readOnly:true}),last_seen:z.string().datetime().meta({...et,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(et),placement_count:z.number().int().min(0).default(0).meta({...et,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Bu,"x-revturbine-schema-exposure":Za,...NO,...Fn("surface_slot_handle")}),$O=Hn(oo),HO=Hn(vl);({"/api/placement-anchors":{get:f({operationId:"listPlacementAnchors",requestParams:{query:H},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:$(zO)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:f({operationId:"listPlacements",requestParams:{query:H},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:$(oo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:f({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:tr(oo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Xv}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:f({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:oo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:f({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:$O}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xv}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:f({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:f({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:oo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:f({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:$g,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:f({operationId:"listPlacementPayloadAnchors",requestParams:{query:H},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:$(KO)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:f({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:H},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:$(vl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:f({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:tr(vl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:vl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:f({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:HO}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:f({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:f({operationId:"listSurfaceSlots",requestParams:{query:H},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:$(sb)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Kr,Pii:bl}=qe,{Persisted:Yg,Transient:Wg}=Ne,{Internal:xl}=Ue,YO=gt(Ye.CustomerOperations,{sdkInput:false}),ob=z.object({external_id:z.string().min(1).meta(bl),traits:z.record(z.string(),z.unknown()).default({}).meta(bl),plan_id:z.string().optional().meta(Kr)}).meta({id:"Identity","x-revturbine-schema-persistence":Yg,"x-revturbine-schema-exposure":xl}),zu=z.enum(["payment_failed","payment_method_missing"]),Gg=W.merge(le).merge(de).extend({external_id:z.string().min(1).meta(bl),identity:ob.meta(bl),stripe_customer_id:z.string().optional().meta(Kr),current_plan_id:z.string().optional().meta(Kr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Kr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Kr),billing_health_issues:z.array(zu).default([]).meta(Kr),metadata:$t.meta(Kr)}).meta({id:"Customer","x-revturbine-schema-persistence":Yg,"x-revturbine-schema-exposure":xl}),lb=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Wg,"x-revturbine-schema-exposure":xl}),cb=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Wg,"x-revturbine-schema-exposure":xl}),mb=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Wg,"x-revturbine-schema-exposure":xl}),es=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({handle:it.meta({...Kr,readOnly:true}),customer_id:z.string().min(1).meta(bl),customer_id_list:z.array(z.string()).optional().meta(bl),override_type:cb.meta(Kr),target_id:z.string().min(1).meta(Kr),value:z.record(z.string(),z.unknown()).default({}).meta(Kr),duration_type:lb.default("permanent").meta(Kr),duration_value:z.string().optional().meta(Kr),expiry_date:nn.meta(Kr),status:mb.default("active").meta(Kr),reason:z.string().max(500).optional().meta(Kr),created_by:z.string().optional().meta(Kr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":Yg,"x-revturbine-schema-exposure":xl,...YO,...Pr()});({"/api/customers":{get:f({operationId:"listCustomers",requestParams:{query:H},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:$(Gg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:f({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:Gg}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:f({operationId:"listCustomerOverrides",requestParams:{query:H},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:$(es)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:f({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:es}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:f({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:es.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:es}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:f({operationId:"deleteCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:f({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:es}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:f({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:es}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:$e,Pii:am,Financial:Jg}=qe,{Persisted:ub,Transient:Oi}=Ne,{External:Sl,Internal:im}=Ue,sm=z.object({in_trial:z.boolean().meta($e),trial_type:z.string().optional().meta($e),plan_handle:z.string().optional().meta($e),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta($e),trial_limit_type:z.enum(["time","usage"]).optional().meta($e),progress_percent:z.number().min(0).max(100).optional().meta($e),day_number:z.number().int().min(0).optional().meta($e),days_remaining:z.number().int().min(0).optional().meta($e),usage_entitlement_handle:z.string().optional().meta($e),usage_consumed:z.number().int().min(0).optional().meta($e),usage_remaining:z.number().int().min(0).optional().meta($e),usage_limit:z.number().int().min(0).optional().meta($e)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":Sl}),Zg=z.object({entitlement_handle:z.string().min(1).meta($e),unit:z.string().min(1).meta($e),amount:z.number().min(0).meta($e),limit:z.number().min(0).optional().meta($e),reset_date:z.string().optional().meta($e)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":Sl});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":Sl});var Qg=z.object({handle:z.string().min(1).meta($e),name:z.string().min(1).meta($e),price:z.string().optional().meta($e),billing_period:z.enum(["monthly","annual","none"]).optional().meta($e)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":Sl}),db=z.object({product_instance_id:z.string().min(1).meta($e),user_id:z.string().min(1).meta(am),plan:Qg.optional().meta($e),usage:z.record(z.string(),Zg).default({}).meta($e),trial:sm.optional().meta($e),entitlements:z.record(z.string(),z.union([z.boolean(),so])).default({}).meta($e)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":ub,"x-revturbine-schema-exposure":Sl}),lo=W.merge(de).merge(le).extend({user_id:z.string().min(1).meta(am),account_id:z.string().min(1).nullable().optional().meta(am),email:z.string().email().nullable().optional().meta(am),email_type:z.string().optional().meta($e),plan_handle:z.string().min(1).optional().meta($e),plan:Qg.optional().meta($e),usage:z.record(z.string(),Zg).default({}).meta($e),trial:sm.optional().meta($e),payment_failed:z.boolean().optional().meta($e),payment_at_risk:z.boolean().optional().meta($e),tiers:z.record(z.string(),z.string()).optional().meta($e),entitlements:z.record(z.string(),z.union([z.boolean(),so])).default({}).meta($e),instances:z.array(db).optional().meta($e),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(am),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...$e,"x-revturbine-schema-persistence":Oi}),derived_config_version:z.string().nullable().optional().meta($e),context_hash:z.string().nullable().optional().meta($e),derived_computed_at:nn.meta($e),activity_score:z.number().int().min(0).nullable().optional().meta($e),activity_score_computed_at:z.string().datetime().nullable().optional().meta($e),experiments:z.record(z.string(),z.string()).optional().meta($e)}).meta({id:"UserContext","x-revturbine-schema-persistence":ub,"x-revturbine-schema-exposure":Sl}),ZO=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...$e,...Xr}),days_remaining:z.number().int().min(0).optional().meta({...$e,...Xr}),ends_at:z.string().optional().meta({...$e,...Xr})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":im}),QO=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...$e,...Xr}),failed_payment_reason:z.string().optional().meta({...Jg,...Mu}),issues:z.array(zu).optional().meta({...Jg,...Mu}),provider_subscription_id:z.string().optional().meta({...Jg,...Dg})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":im}),XO=z.object({can_upgrade:z.boolean().optional().meta({...$e,...Xr}),can_manage_billing:z.boolean().optional().meta({...$e,...Xr})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":im}),e1=z.object({handle:z.string().min(1).optional().meta({...$e,...Xr}),name:z.string().min(1).optional().meta({...$e,...Xr})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":im});z.object({subject:z.string().min(1).meta({...$e,...Xr}),context_version:z.string().optional().meta({...$e,...Xr}),trial:ZO.optional().meta({...$e,...Xr}),billing:QO.optional().meta({...$e,...Xr}),plan:e1.optional().meta({...$e,...Xr}),capabilities:XO.optional().meta({...$e,...Xr})}).meta({id:"ClientContext","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":im});({"/api/user-contexts":{get:f({operationId:"listUserContexts",requestParams:{query:H},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:$(lo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:f({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:f({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:lo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:f({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:nr}=qe,{Persisted:Xg,Transient:pb}=Ne,{Internal:om}=Ue,r1=gt(Ye.Playbook,{sdkInput:true}),gb=gt(Ye.Playbook,{inConfig:false,sdkInput:true}),hb=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":pb,"x-revturbine-schema-exposure":om}),fb=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":pb,"x-revturbine-schema-exposure":om}),Ku=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...nr,readOnly:true}),name:Wt.meta(nr),handle:it.optional().meta(nr),category:hb.default("custom").meta(nr),visibility_toggle:z.boolean().default(true).meta(nr),source_type:fb.default("system").meta(nr),estimated_size:z.number().int().min(0).optional().meta(nr)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":om,...gb,...Fn()}),a1=bn("SegmentDimensionAnchor"),$u=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...nr,readOnly:true}),dimension_id:z.string().min(1).meta(nr),name:Wt.meta(nr),handle:it.meta(nr),description:Ca.meta(nr),definition_rule:z.record(z.string(),z.unknown()).optional().meta(nr),used_in_count:z.number().int().min(0).default(0).meta({...nr,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":om,...gb,...Fn()}),i1=bn("SegmentValueAnchor");W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...nr,readOnly:true}),name:Wt.meta(nr),handle:it.meta(nr),description:Ca.meta(nr),rules:z.record(z.string(),z.unknown()).default({}).meta(nr),experiment_handle:z.string().min(1).optional().meta(nr),experiment_id:z.string().min(1).optional().meta(nr),is_active:z.boolean().default(true).meta(nr),estimated_size:z.number().int().min(0).nullable().default(null).meta(nr),metadata:$t.meta(nr)}).meta({id:"Segment","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":om,...r1,...Fn()});({"/api/segment-dimension-anchors":{get:f({operationId:"listSegmentDimensionAnchors",requestParams:{query:H},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:$(a1)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:f({operationId:"listSegmentValueAnchors",requestParams:{query:H},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:$(i1)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:f({operationId:"listSegmentDimensions",requestParams:{query:H},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:$(Ku)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:f({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),description:z.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ku}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:f({operationId:"deleteCustomDimension",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:f({operationId:"toggleDimensionVisibility",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({visible:z.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ku}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:f({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:H},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:$($u)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:f({operationId:"createSegmentValue",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),handle:z.string(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:$u}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:f({operationId:"updateSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().optional(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$u}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:f({operationId:"deleteSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Delete segment value",tags:["segments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"delete"}}})}});var {Unrestricted:Et}=qe,{Persisted:Pl,Transient:_b}=Ne,{External:Rs}=Ue,eh=gt(Ye.Playbook,{sdkInput:true}),l1=gt(Ye.Playbook,{inConfig:false,sdkInput:false}),c1=gt(Ye.Playbook,{inConfig:false,sdkInput:true}),m1=gt(Ye.Playbook,{inConfig:false,sdkInput:true,source:jr.CodeConstant});W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Et,readOnly:true}),handle:it.meta({...Et,readOnly:true}),name:Wt.meta(Et),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(Et),subject:z.string().max(500).optional().meta(Et),body:z.string().meta(Et),template_variables:z.array(z.string()).default([]).meta(Et),metadata:$t.meta(Et)}).meta({id:"Message","x-revturbine-schema-persistence":Pl,"x-revturbine-schema-exposure":Rs,...l1,...Pr()});var Hu=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Et,readOnly:true}),name:Wt.meta(Et),handle:it.meta(Et),action_type:fl.meta(Et),target_url:z.string().optional().meta(Et),target_plan_id:z.string().optional().meta(Et),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Et),metadata:$t.meta(Et)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Pl,"x-revturbine-schema-exposure":Rs,...eh,...Fn()}),d1=bn("CtaPathAnchor"),yb=z.enum(["header","body","secondary_body","message","cta_label","secondary_label","image","toggle","duration","send_delay","entitlement","plan","dropdown","json"]).meta({id:"TemplateFieldType","x-revturbine-schema-persistence":Pl,"x-revturbine-schema-exposure":Rs,...m1}),vb=z.object({name:z.string().min(1),field_type:yb,required:z.boolean().default(false),default_value:z.unknown().optional(),order:z.number().int().min(0).optional(),help_text:z.string().max(500).optional()}).meta({id:"FieldDefinition","x-revturbine-schema-persistence":Pl,"x-revturbine-schema-exposure":Rs,...c1}),Gu=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Et,readOnly:true}),name:Wt.meta(Et),handle:it.meta(Et),surface_type:Fg.meta(Et),field_definitions:z.array(vb).default([]).meta(Et),description:Ca.meta(Et)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Pl,"x-revturbine-schema-exposure":Rs,...eh,...Fn()}),p1=bn("SurfaceTemplateAnchor"),Yu=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Et,readOnly:true}),name:Wt.meta(Et),handle:it.meta(Et),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Et),variation_dimension_id:z.string().optional().meta(Et),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(Et),notes:z.string().max(1e3).optional().meta(Et),used_in_count:z.number().int().min(0).default(0).meta({...Et,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Pl,"x-revturbine-schema-exposure":Rs,...eh,...Fn()}),g1=bn("MessageBlockRecordAnchor"),bb=z.object({segment_id:z.string().min(1).meta(Et),message_block_id:z.string().min(1).meta(Et),ui_path_id:z.string().optional().meta(Et),promotion_id:z.string().optional().meta(Et)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":_b,"x-revturbine-schema-exposure":Rs});z.object({payload_id:z.string().min(1).meta(Et),tenant_id:z.string().min(1).meta(Et),name:Wt.meta(Et),surface_template_id:z.string().min(1).meta(Et),default_message_block_id:z.string().min(1).meta(Et),segment_content_map:z.array(bb).optional().meta(Et),ui_path_id:z.string().optional().meta(Et),promotion_id:z.string().optional().meta(Et),status:z.enum(["draft","active","inactive"]).meta(Et),created_at:z.string().datetime().optional().meta({...Et,readOnly:true}),updated_at:z.string().datetime().optional().meta({...Et,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":_b,"x-revturbine-schema-exposure":Rs});({"/api/surface-template-anchors":{get:f({operationId:"listSurfaceTemplateAnchors",requestParams:{query:H},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:$(p1)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:f({operationId:"listSurfaceTemplates",requestParams:{query:H},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:$(Gu)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:f({operationId:"listMessageBlockRecordAnchors",requestParams:{query:H},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:$(g1)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:f({operationId:"listMessageBlocks",requestParams:{query:H},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:$(Yu)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:f({operationId:"listCtaPathAnchors",requestParams:{query:H},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:$(d1)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:f({operationId:"listCtaPaths",requestParams:{query:H},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:$(Hu)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Tl,Pii:_1}=qe,{Persisted:xb}=Ne,{Internal:y1,External:v1}=Ue,b1=gt(Ye.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...Tl,readOnly:true}),name:z.string().min(1).max(120).meta(Tl),mode:z.enum(["light","dark","system"]).default("system").meta(Tl),tokens:z.record(z.string(),z.string()).default({}).meta(Tl)}).meta({id:"Theme","x-revturbine-schema-persistence":xb,"x-revturbine-schema-exposure":v1,...b1});var th=W.merge(le).extend({user_id:z.string().min(1).meta(_1),scope:z.string().min(1).meta(Tl),preferences:z.record(z.string(),z.unknown()).default({}).meta(Tl)}).meta({id:"UiPreference","x-revturbine-schema-persistence":xb,"x-revturbine-schema-exposure":y1});({"/api/ui-preferences":{get:f({operationId:"listUiPreferences",requestParams:{query:H},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:$(th)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:f({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Hn(th))}}},responses:{200:{description:"UI preferences upsert response",content:{"application/json":{schema:z.object({updated:z.number().int().min(0)})}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"upsert",writeSchema:"UiPreferenceSchema#writable"}}})}});var {Unrestricted:jt,Financial:qi}=qe,{Persisted:Sb,Transient:lm}=Ne,{External:cm,Internal:Pb}=Ue,Tb=z.object({month:z.string().meta(jt),cohort_size:z.number().int().min(0).meta(jt),retained:z.number().int().min(0).meta(jt),retention_rate:z.number().min(0).max(1).meta(jt),revenue_cents:z.number().int().min(0).meta(qi)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":cm}),Ib=z.object({step:z.string().meta(jt),label:z.string().meta(jt),count:z.number().int().min(0).meta(jt),conversion_rate:z.number().min(0).max(1).meta(jt),drop_off_rate:z.number().min(0).max(1).meta(jt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":cm}),Cb=z.object({placement_id:z.string().meta(jt),placement_name:z.string().meta(jt),impressions:z.number().int().min(0).meta(jt),clicks:z.number().int().min(0).meta(jt),conversions:z.number().int().min(0).meta(jt),ctr:z.number().min(0).meta(jt),conversion_rate:z.number().min(0).meta(jt),revenue_cents:z.number().int().min(0).meta(qi)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":cm}),Eb=z.object({date:z.string().meta(jt),mrr_cents:z.number().int().min(0).meta(qi),arr_cents:z.number().int().min(0).meta(qi),new_mrr_cents:z.number().int().min(0).meta(qi),churned_mrr_cents:z.number().int().min(0).meta(qi),expansion_mrr_cents:z.number().int().min(0).meta(qi),net_new_mrr_cents:z.number().int().meta(qi)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":cm}),kb=z.object({metric_key:z.string().min(1).meta(jt),label:z.string().meta(jt),current_value:z.number().meta(qi),previous_value:z.number().nullable().default(null).meta(qi),change_percent:z.number().nullable().default(null).meta(jt),period:z.string().meta(jt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(jt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":cm}),nh=W.merge(le).merge(de).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(jt),severity:hl.meta(jt),resource_type:z.string().min(1).meta(jt),resource_id:z.string().min(1).meta(jt),summary:z.string().max(1e3).meta(jt),expected_value:z.unknown().optional().meta(jt),actual_value:z.unknown().optional().meta(jt),affected_customer_count:z.number().int().min(0).default(0).meta(jt),is_resolved:z.boolean().default(false).meta(jt),resolved_at:nn.meta(jt),metadata:$t.meta(jt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":Sb,"x-revturbine-schema-exposure":Pb}),rh=W.merge(le).merge(de).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(jt),severity:hl.meta(jt),title:z.string().min(1).max(300).meta(jt),description:z.string().max(2e3).meta(jt),resource_type:z.string().optional().meta(jt),resource_id:z.string().optional().meta(jt),is_acknowledged:z.boolean().default(false).meta(jt),acknowledged_at:nn.meta(jt),acknowledged_by:z.string().nullable().default(null).meta(jt),metadata:$t.meta(jt)}).meta({id:"Alert","x-revturbine-schema-persistence":Sb,"x-revturbine-schema-exposure":Pb});({"/api/analytics/kpis":{get:f({operationId:"listKpiAggregates",requestParams:{query:H},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:$(kb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:f({operationId:"listPlacementPerformance",requestParams:{query:H},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:$(Cb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:f({operationId:"listRevenueMetrics",requestParams:{query:H},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:$(Eb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:f({operationId:"listCohortMetrics",requestParams:{query:H},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:$(Tb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:f({operationId:"listFunnelSteps",requestParams:{query:H},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:$(Ib)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:f({operationId:"listDriftReports",requestParams:{query:H},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:$(nh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:f({operationId:"resolveDriftReport",requestParams:{path:z.object({reportId:z.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:nh}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:f({operationId:"listAlerts",requestParams:{query:H},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:$(rh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:f({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:rh}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var{Unrestricted:S}=qe,{Transient:T1}=Ne,{Internal:I1}=Ue,tt=t=>({id:t,"x-revturbine-schema-persistence":T1,"x-revturbine-schema-exposure":I1}),Rb=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,Wu=/^[a-z][a-z0-9_-]{0,99}$/,rn=z.string().regex(Rb).max(120),qa=z.string().regex(Wu),Tr=rn.meta(tt("AnalyticsSemanticId")),ta=z.enum(["account","user","billing_unit","organization"]).meta(tt("AnalyticsAnalyticalUnit")),Il=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(tt("AnalyticsQueryFamily")),di=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(tt("AnalyticsSourceScope")),sh=z.enum(["as_of_event","current"]).meta(tt("AnalyticsHistoricalMode")),Ab=z.enum(["hour","day","week","month","quarter"]).meta(tt("AnalyticsTimeGrain")),Ju=z.enum(["none","previous_period","previous_year"]).meta(tt("AnalyticsCompareMode")),mm=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(tt("AnalyticsFilterOperator")),Zu=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(tt("AnalyticsFilterControl")),wb=z.enum(["low","medium","high"]).meta(tt("AnalyticsCardinalityClass")),um=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(tt("AnalyticsFieldType")),jb=z.enum(["increase","decrease","neutral"]).meta(tt("AnalyticsMetricDirection")),Ob=z.enum(["binary","count","continuous","ratio","revenue"]).meta(tt("AnalyticsMetricStatisticalType")),qb=z.enum(["additive","semi_additive","non_additive"]).meta(tt("AnalyticsMetricAggregationSemantics")),Db=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(tt("AnalyticsDimensionType")),Qu=z.enum(["filter","group","split","sort"]).meta(tt("AnalyticsDimensionCapability")),Xu=z.enum(["private","team","tenant"]).meta(tt("AnalyticsViewVisibility")),ah=z.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta(tt("AnalyticsCustomizationCapability")),Ub=z.enum(["unrestricted","pii","financial","operational"]).meta(tt("AnalyticsClassification")),ha=z.strictObject({value:z.string().min(1).max(300).meta(S),key:z.string().max(120).optional().meta(S)}).meta(tt("LocalizedText")),ih=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),Cl=z.union([ih,z.array(ih).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(S),compare:Ju.optional().meta(S)}),z.strictObject({min:z.number().optional().meta(S),max:z.number().optional().meta(S)})]).meta(tt("AnalyticsFilterValue")),ed=z.strictObject({dimension:rn.meta(S),operator:mm.meta(S),value:Cl.optional().meta(S)}).meta(tt("AnalyticsSemanticFilter")),co=z.strictObject({type:z.enum(["number","currency","percent","duration"]).meta(S),decimals:z.number().int().min(0).max(6).optional().meta(S),compact:z.boolean().optional().meta(S)}).meta(tt("AnalyticsFormatSpec")),Mb=z.strictObject({legend:z.enum(["none","top","right","bottom","left"]).optional().meta(S),value_labels:z.boolean().optional().meta(S),reference_lines:z.array(z.strictObject({value:z.number().meta(S),label:ha.optional().meta(S)})).max(5).optional().meta(S),x_axis_format:co.optional().meta(S),y_axis_format:co.optional().meta(S),empty_state:z.enum(["blank","message"]).optional().meta(S)}).meta(tt("AnalyticsSafeChartOptions")),td=z.object({deprecated:z.boolean().meta(S),replaced_by:rn.optional().meta(S)}).meta(tt("AnalyticsCatalogDeprecation")),oh=td,lh=z.object({id:rn.meta(S),label:z.string().min(1).max(120).meta(S),description:z.string().max(500).optional().meta(S),when_to_use:z.string().max(500).optional().meta(S),do_not_use_for:z.string().max(500).optional().meta(S),type:Db.meta(S),operators:z.array(mm).min(1).meta(S),control:Zu.meta(S),capabilities:z.array(Qu).min(1).meta(S),cardinality:wb.meta(S),classification:Ub.default("unrestricted").meta(S),historical_mode:sh.optional().meta(S),allowed_concepts:z.array(rn).optional().meta(S),exclude_from_segment_picker:z.boolean().default(false).meta(S),deprecation:td.optional().meta(S)}).meta(tt("AnalyticsCatalogDimension")),ch=z.object({id:rn.meta(S),label:z.string().min(1).max(120).meta(S),description:z.string().max(500).optional().meta(S),when_to_use:z.string().max(500).optional().meta(S),do_not_use_for:z.string().max(500).optional().meta(S),value_type:um.meta(S),format:co.optional().meta(S),source_scope:di.optional().meta(S),direction:jb.optional().meta(S),statistical_type:Ob.optional().meta(S),aggregation_semantics:qb.optional().meta(S),preferred_analysis_unit:ta.optional().meta(S),deprecation:td.optional().meta(S)}).meta(tt("AnalyticsCatalogMetric")),mh=z.object({id:rn.meta(S),version:z.number().int().min(1).meta(S),label:z.string().min(1).max(120).meta(S),description:z.string().max(500).optional().meta(S),when_to_use:z.string().max(500).optional().meta(S),do_not_use_for:z.string().max(500).optional().meta(S),grain:z.array(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/)).min(1).meta(S),analytical_units:z.array(ta).min(1).meta(S),primary_time_dimension:rn.meta(S),historical_mode:sh.meta(S),dimensions:z.array(rn).min(1).meta(S),metrics:z.array(rn).min(1).meta(S),query_families:z.array(Il).min(1).meta(S),source_scope:di.meta(S),coverage_metric:rn.optional().meta(S),deprecation:td.optional().meta(S)}).meta(tt("AnalyticsCatalogConcept")),Fb=z.strictObject({field:rn.meta(S),direction:z.enum(["asc","desc"]).meta(S)}),Lb=z.strictObject({dimension:rn.meta(S),grain:Ab.meta(S)}),Nb=8,Vb=z.strictObject({concept:rn.meta(S),family:Il.meta(S),metrics:z.array(rn).min(1).max(10).meta(S),group_by:z.array(rn).max(Nb).optional().meta(S),time:Lb.optional().meta(S),filters_from:z.array(qa).max(20).optional().meta(S),fixed_filters:z.array(ed).max(20).optional().meta(S),compare:Ju.optional().meta(S),order_by:z.array(Fb).max(3).optional().meta(S),limit:z.number().int().min(1).max(1e3).optional().meta(S)}).meta(tt("AnalyticsViewQuery")),Bb=z.strictObject({type:z.literal("metric").meta(S),value:rn.meta(S),comparison:rn.optional().meta(S),format:co.optional().meta(S)}).meta(tt("AnalyticsRenderMetric")),zb=z.strictObject({type:z.literal("cartesian").meta(S),mark:z.enum(["line","area","bar","stacked_bar","scatter"]).meta(S),encoding:z.strictObject({x:rn.meta(S),y:z.union([rn,z.array(rn).min(1).max(5)]).meta(S),color:rn.optional().meta(S),facet:rn.optional().meta(S)}).meta(S),options:Mb.optional().meta(S)}).meta(tt("AnalyticsRenderCartesian")),Kb=z.strictObject({type:z.literal("funnel").meta(S),stages:z.array(rn).min(2).max(10).meta(S),split_by:rn.optional().meta(S)}).meta(tt("AnalyticsRenderFunnel")),$b=z.strictObject({type:z.literal("table").meta(S),columns:z.array(rn).min(1).max(20).meta(S)}).meta(tt("AnalyticsRenderTable")),Hb=z.strictObject({type:z.literal("timeline").meta(S),timestamp:rn.meta(S),event_type:rn.meta(S)}).meta(tt("AnalyticsRenderTimeline")),Gb=z.strictObject({type:z.literal("recommendations").meta(S),presentation:z.enum(["list","ranked_cards"]).meta(S)}).meta(tt("AnalyticsRenderRecommendations")),uh=z.discriminatedUnion("type",[Bb,zb,Kb,$b,Hb,Gb]).meta(tt("AnalyticsRenderSpec")),Yb=z.strictObject({id:qa.meta(S),dimension:rn.meta(S),control:Zu.meta(S),label:ha.optional().meta(S),operators:z.array(mm).min(1).meta(S),default_value:Cl.optional().meta(S),required:z.boolean().default(false).meta(S),pinned:z.boolean().default(false).meta(S),applies_to:z.union([z.literal("all"),z.array(qa).min(1).max(24)]).default("all").meta(S)}).meta(tt("AnalyticsViewFilter")),dh=z.strictObject({type:z.literal("grid").meta(S),columns:z.number().int().min(1).max(24).default(12).meta(S),items:z.array(z.strictObject({block_id:qa.meta(S),x:z.number().int().min(0).meta(S),y:z.number().int().min(0).meta(S),w:z.number().int().min(1).max(24).meta(S),h:z.number().int().min(1).max(24).meta(S)})).max(24).meta(S)}).meta(tt("AnalyticsViewLayout")),Wb=z.strictObject({id:qa.meta(S),title:ha.optional().meta(S),description:ha.optional().meta(S),query:Vb.meta(S),render:uh.meta(S)}).meta(tt("AnalyticsViewBlock")),Jb=z.strictObject({id:qa.meta(S),label:ha.meta(S),target:rn.meta(S),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).default({}).meta(S)}).meta(tt("AnalyticsViewHandoff")),Zb=z.strictObject({allow:z.array(ah).default([]).meta(S),deny:z.array(ah).default([]).meta(S)}).meta(tt("AnalyticsCustomizationPolicy"));var Qb=z.string().regex(/^\d+\.\d+$/),El=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(S),schema_version:Qb.meta(S),id:qa.meta(S),revision:z.number().int().min(1).meta(S),title:ha.meta(S),description:ha.optional().meta(S),analytical_unit:ta.meta(S),base_template:z.strictObject({id:qa.meta(S),version:z.number().int().min(1).meta(S)}).optional().meta(S),catalog_version:z.string().min(1).max(64).meta(S),filters:z.array(Yb).max(20).meta(S),layout:dh.meta(S),blocks:z.array(Wb).min(1).max(24).meta(S),handoffs:z.array(Jb).max(10).optional().meta(S),customization_policy:Zb.meta(S)}).meta(tt("AnalyticsView")),Xb=z.strictObject({id:qa.optional().meta(S),dimension:rn.meta(S),control:Zu.optional().meta(S),label:ha.optional().meta(S),operators:z.array(mm).min(1).optional().meta(S),default_value:Cl.optional().meta(S),required:z.boolean().optional().meta(S),pinned:z.boolean().optional().meta(S),applies_to:z.union([z.literal("all"),z.array(qa).min(1).max(24)]).optional().meta(S)}).meta(tt("AnalyticsViewFilterDraft")),ex=z.strictObject({id:qa.optional().meta(S),title:ha.optional().meta(S),concept:rn.meta(S),family:Il.meta(S),metrics:z.array(rn).min(1).max(10).meta(S),group_by:z.array(rn).max(Nb).optional().meta(S),time:Lb.optional().meta(S),filters_from:z.array(qa).max(20).optional().meta(S),fixed_filters:z.array(ed).max(20).optional().meta(S),compare:Ju.optional().meta(S),order_by:z.array(Fb).max(3).optional().meta(S),limit:z.number().int().min(1).max(1e3).optional().meta(S),render:z.union([z.literal("auto"),uh]).optional().meta(S)}).meta(tt("AnalyticsViewBlockDraft")),tx=z.strictObject({id:qa.optional().meta(S),label:ha.optional().meta(S),target:rn.meta(S),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).optional().meta(S)}).meta(tt("AnalyticsViewHandoffDraft"));z.strictObject({kind:z.literal("revturbine.analytics-view-draft").meta(S),schema_version:Qb.meta(S),title:ha.meta(S),analytical_unit:ta.optional().meta(S),filters:z.union([z.literal("recommended"),z.array(Xb).max(20)]).optional().meta(S),layout:z.union([z.literal("auto"),dh]).optional().meta(S),blocks:z.array(ex).min(1).max(24).meta(S),handoffs:z.union([z.literal("recommended"),z.array(tx).max(10)]).optional().meta(S),visibility:Xu.optional().meta(S)}).meta(tt("AnalyticsViewDraft"));var ph=z.string().regex(/^(\/[^/]*)*$/).max(300),nx=z.strictObject({op:z.enum(["add","replace","remove"]).meta(S),path:ph.meta(S),value:z.unknown().optional().meta(S)}).meta(tt("AnalyticsSuggestedPatchOp")),gh=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(S),message:z.string().min(1).max(500).meta(S)}).meta(tt("AnalyticsWarning")),rx=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(S),path:ph.meta(S),message:z.string().min(1).max(500).meta(S),actual:z.unknown().optional().meta(S),allowed:z.array(ih).max(50).optional().meta(S),suggested_patch:z.array(nx).max(10).optional().meta(S)}).meta(tt("AnalyticsValidationIssue"));z.object({path:ph.meta(S),rule:z.string().min(1).max(120).meta(S),value:z.unknown().optional().meta(S)}).meta(tt("AnalyticsCompileResolution"));z.object({valid:z.boolean().meta(S),errors:z.array(rx).default([]).meta(S),warnings:z.array(gh).default([]).meta(S),catalog_version:z.string().min(1).max(64).meta(S)}).meta(tt("AnalyticsValidationResult"));var ax=z.object({id:rn.meta(S),type:um.meta(S),nullable:z.boolean().meta(S)}).meta(tt("AnalyticsResultField")),ix=z.object({numerator:z.number().int().min(0).meta(S),denominator:z.number().int().min(0).meta(S),rate:z.number().min(0).max(1).meta(S)}).meta(tt("AnalyticsCoverage")),sx=z.object({query_hash:z.string().min(1).max(128).meta(S),concept:rn.meta(S),analytical_unit:ta.meta(S),source_scope:di.meta(S),coverage:ix.optional().meta(S),as_of:z.string().datetime().meta(S),freshness_seconds:z.number().int().min(0).meta(S),applied_filters:z.array(ed).default([]).meta(S),next_cursor:z.string().max(500).optional().meta(S),warnings:z.array(gh).default([]).meta(S)}).meta(tt("AnalyticsResultMeta")),hh=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(S),fields:z.array(ax).meta(S),meta:sx.meta(S)}).meta(tt("AnalyticsResult"));var{Unrestricted:gr}=qe,{Persisted:R1,Transient:A1}=Ne,{Internal:ox}=Ue,w1=gt(Ye.CustomerOperations,{inConfig:false,sdkInput:false,source:jr.Customer}),fh=t=>({id:t,"x-revturbine-schema-persistence":R1,"x-revturbine-schema-exposure":ox,...w1}),j1=t=>({id:t,"x-revturbine-schema-persistence":A1,"x-revturbine-schema-exposure":ox}),_h=z.object({environment_id:z.string().min(1).meta({...gr,readOnly:true})}),lx=z.enum(["viewer","editor"]).meta(j1("AnalyticsViewAccessRole")),yh=W.merge(de).merge(_h).merge(le).extend({owner_user_id:z.string().min(1).meta(gr),name:z.string().min(1).max(300).meta(gr),visibility:Xu.meta(gr),base_template_id:z.string().min(1).max(100).nullable().optional().meta(gr),base_template_version:z.number().int().min(1).nullable().optional().meta(gr),current_revision:z.number().int().min(1).meta(gr),is_default:z.boolean().default(false).meta(gr),idempotency_key:z.string().min(1).max(200).nullable().optional().meta(gr)}).meta(fh("AnalyticsSavedView")),vh=W.merge(de).merge(_h).extend({view_id:z.string().min(1).meta(gr),revision:z.number().int().min(1).meta(gr),schema_version:z.string().regex(/^\d+\.\d+$/).meta(gr),catalog_version:z.string().min(1).max(64).meta(gr),document_jsonb:El.meta(gr),content_hash:z.string().regex(/^[a-f0-9]{64}$/).meta(gr),created_by:z.string().min(1).meta(gr),created_at:z.string().datetime().meta({...gr,readOnly:true})}).meta(fh("AnalyticsViewRevision")),bh=W.merge(de).merge(_h).extend({view_id:z.string().min(1).meta(gr),principal_type:z.string().regex(/^[a-z][a-z0-9_]{0,49}$/).meta(gr),principal_id:z.string().min(1).meta(gr),role:lx.meta(gr)}).meta(fh("AnalyticsViewAccess"));var {Unrestricted:Rn}=qe,{Transient:O1}=Ne,{Internal:q1}=Ue,mo=t=>({id:t,"x-revturbine-schema-persistence":O1,"x-revturbine-schema-exposure":q1}),cx=z.enum(["fixture","generated"]).meta(mo("AnalyticsCatalogSource")),mx=z.enum(["event_taxonomy","openapi_identity","tinybird_project"]).meta(mo("AnalyticsCatalogProvenanceKind")),ux=z.object({kind:mx.meta(Rn),location:z.string().min(1).max(240).meta(Rn),version:z.string().min(1).max(64).optional().meta(Rn),entry_count:z.number().int().nonnegative().meta(Rn)}).meta(mo("AnalyticsCatalogProvenance"));z.object({catalog_version:z.string().min(1).max(64).meta(Rn),source:cx.meta(Rn),generated_at:z.string().datetime().optional().meta(Rn),provenance:z.array(ux).optional().meta(Rn),concepts:z.array(mh).min(1).meta(Rn),dimensions:z.array(lh).min(1).meta(Rn),metrics:z.array(ch).min(1).meta(Rn)}).meta(mo("AnalyticsCatalog"));var dx=z.enum(["concept","dimension","metric","query_family"]).meta(mo("AnalyticsAgentCatalogEntryKind")),px=z.object({id:Tr.meta(Rn),kind:dx.meta(Rn),label:z.string().min(1).max(120).meta(Rn),description:z.string().min(1).max(500).meta(Rn),when_to_use:z.string().max(500).optional().meta(Rn),do_not_use_for:z.string().max(500).optional().meta(Rn),value_type:um.optional().meta(Rn),format:co.optional().meta(Rn),capabilities:z.array(Qu).optional().meta(Rn),compatible_concepts:z.array(Tr).optional().meta(Rn),compatible_families:z.array(Il).optional().meta(Rn),analytical_units:z.array(ta).optional().meta(Rn),source_scope:di.optional().meta(Rn),example:z.string().max(2e3).optional().meta(Rn),deprecation:oh.optional().meta(Rn)}).meta(mo("AnalyticsAgentCatalogEntry"));z.object({catalog_version:z.string().min(1).max(64).meta(Rn),query:z.string().min(1).max(200).meta(Rn),entries:z.array(px).max(50).meta(Rn)}).meta(mo("AnalyticsCatalogSearchResult"));var {Unrestricted:hr}=qe,{Transient:L1}=Ne,{Internal:N1}=Ue,kl=t=>({id:t,"x-revturbine-schema-persistence":L1,"x-revturbine-schema-exposure":N1}),uo=z.string().regex(Wu),hx=z.strictObject({filter_id:uo.meta(hr),value:Cl.nullable().meta(hr)}).meta(kl("AnalyticsFilterState"));z.strictObject({view_id:uo.meta(hr),revision:z.number().int().min(1).optional().meta(hr),block_ids:z.array(uo).min(1).max(24).optional().meta(hr),filter_state:z.array(hx).max(20).optional().meta(hr)}).meta(kl("AnalyticsQueryRequest"));var _x=z.object({block_id:uo.meta(hr),code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(hr),message:z.string().min(1).max(500).meta(hr)}).meta(kl("AnalyticsBlockError")),yx=z.object({block_id:uo.meta(hr),result:hh.meta(hr)}).meta(kl("AnalyticsBlockResult"));z.object({view_id:uo.meta(hr),revision:z.number().int().min(1).meta(hr),catalog_version:z.string().min(1).max(64).meta(hr),results:z.array(yx).meta(hr),errors:z.array(_x).default([]).meta(hr)}).meta(kl("AnalyticsQueryResponse"));var bx=z.object({id:uo.meta(hr),version:z.number().int().min(1).meta(hr),title:ha.meta(hr),description:ha.optional().meta(hr),block_count:z.number().int().min(1).meta(hr)}).meta(kl("AnalyticsTemplateSummary"));z.object({q:z.string().min(1).max(200),limit:z.coerce.number().int().min(1).max(50).optional()});({"/api/analytics/views":{get:f({operationId:"listAnalyticsViews",requestParams:{query:H},summary:"List saved analytics views",tags:["analytics-views"],responses:{200:{description:"Saved analytics views",content:{"application/json":{schema:$(yh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views",persistence:{table:"analyticsViews",mode:"list",uniqueBy:["tenant_id","environment_id","idempotency_key"]}}})},"/api/analytics/view-revisions":{get:f({operationId:"listAnalyticsViewRevisions",requestParams:{query:H},summary:"List immutable saved-view revisions",tags:["analytics-views"],responses:{200:{description:"Saved-view revisions",content:{"application/json":{schema:$(vh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-view-revisions",persistence:{table:"analyticsViewRevisions",mode:"list",uniqueBy:["tenant_id","environment_id","view_id","revision"]}}})},"/api/analytics/view-access":{get:f({operationId:"listAnalyticsViewAccess",requestParams:{query:H},summary:"List explicit saved-view access grants",tags:["analytics-views"],responses:{200:{description:"Saved-view access grants",content:{"application/json":{schema:$(bh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-view-access",persistence:{table:"analyticsViewAccess",mode:"list",uniqueBy:["tenant_id","environment_id","view_id","principal_type","principal_id"]}}})},"/api/analytics/templates":{get:f({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:$(bx)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:f({operationId:"getAnalyticsView",requestParams:{path:z.object({viewId:z.string()})},summary:"Load a system or saved view document",tags:["analytics-views"],responses:{200:{description:"Canonical view document",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var{Unrestricted:ts}=qe,{Transient:z1}=Ne,{Internal:K1}=Ue,rd=t=>({id:t,"x-revturbine-schema-persistence":z1,"x-revturbine-schema-exposure":K1}),xx=z.enum(["analytics_execution","experiment_assignment","experiment_evidence","experiment_analysis","growth_signal","growth_benchmark","optimization"]).meta(rd("ProviderCapability")),dm=z.enum(["available","stale","unavailable","unsupported","partial"]).meta(rd("ProviderAvailability")),As=z.object({provider_handle:it.meta(ts),provider_type:z.string().min(1).max(100).meta(ts),provider_version:z.string().min(1).max(100).meta(ts),contract_version:z.number().int().min(1).meta(ts),generated_at:z.string().datetime().meta(ts),data_watermark:z.string().datetime().optional().meta(ts),source_revision:z.string().min(1).max(200).optional().meta(ts)}).meta(rd("ProviderProvenance")),pm=z.object({provider_handle:it.meta(ts),capability:xx.meta(ts)}).meta(rd("ProviderBindingRef"));var {Unrestricted:Ve}=qe,{Transient:$1}=Ne,{Internal:H1}=Ue,ns=t=>({id:t,"x-revturbine-schema-persistence":$1,"x-revturbine-schema-exposure":H1}),Sx=z.object({start:z.string().datetime().meta(Ve),end:z.string().datetime().meta(Ve),value:z.number().meta(Ve),numerator:z.number().optional().meta(Ve),denominator:z.number().optional().meta(Ve),sample_size:z.number().int().min(0).optional().meta(Ve)}).meta(ns("GrowthSignalPoint")),Px=z.object({metric:Tr.meta(Ve),analytical_unit:ta.meta(Ve),source_scope:di.meta(Ve),dimensions:z.record(Tr,z.string()).meta(Ve),points:z.array(Sx).meta(Ve),provenance:As.meta(Ve)}).meta(ns("GrowthSignalSeries"));z.object({availability:dm.meta(Ve),series:z.array(Px).meta(Ve),provenance:As.meta(Ve)}).meta(ns("GrowthSignalBundle"));z.object({current:z.number().meta(Ve),baseline:z.number().meta(Ve),absolute_delta:z.number().meta(Ve),relative_delta:z.number().meta(Ve),short_window:z.number().meta(Ve),long_window:z.number().meta(Ve),slope:z.number().meta(Ve),acceleration:z.number().meta(Ve),volatility:z.number().meta(Ve),persistence:z.number().meta(Ve),seasonal_expected:z.number().optional().meta(Ve),seasonal_deviation:z.number().optional().meta(Ve),peer_value:z.number().optional().meta(Ve),peer_gap:z.number().optional().meta(Ve),sample_size:z.number().int().min(0).optional().meta(Ve)}).meta(ns("TrendFeatures"));var Tx=z.object({min_units:z.number().int().min(0).optional().meta(Ve),min_events:z.number().int().min(0).optional().meta(Ve),min_periods:z.number().int().min(0).optional().meta(Ve),min_denominator:z.number().min(0).optional().meta(Ve)}).meta(ns("EvidenceRequirement")),Ix=z.enum(["increase","decrease","level_shift","threshold","peer_gap","correlation"]).meta(ns("OpportunityInterpretation")),ad=z.object({metric:Tr.meta(Ve),current:z.number().meta(Ve),baseline:z.number().optional().meta(Ve),relative_delta:z.number().optional().meta(Ve),window:z.object({start:z.string().datetime().meta(Ve),end:z.string().datetime().meta(Ve)}).meta(Ve),sample_size:z.number().int().min(0).optional().meta(Ve),source_scope:di.meta(Ve),interpretation:Ix.meta(Ve)}).meta(ns("OpportunityEvidence"));z.object({required_metrics:z.array(Tr).min(1).meta(Ve),evidence:Tx.meta(Ve)}).meta(ns("DetectorRequirements"));var Sh=z.record(z.string(),z.unknown());z.object({detector_id:z.string().min(1).meta(Ve),detector_version:z.number().int().min(1).meta(Ve),opportunity_type:z.string().min(1).meta(Ve),resource:z.object({type:z.string().min(1).meta(Ve),handle:z.string().min(1).meta(Ve)}).optional().meta(Ve),segment_handles:z.array(z.string().min(1)).optional().meta(Ve),evidence:z.array(ad).min(1).meta(Ve),hypothesis:z.string().min(1).meta(Ve),confidence:z.number().min(0).max(1).meta(Ve),impact:Sh.optional().meta(Ve),suggested_action:Sh.optional().meta(Ve),suggested_experiment:Sh.optional().meta(Ve)}).meta(ns("OpportunityCandidate"));var {Unrestricted:Ui}=qe,{Transient:gm}=Ne,{External:hm}=Ue,Ph=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm}),Ex=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm}),kx=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(Ui),surface:Ph.meta(Ui),purpose:z.string().min(1).max(300).meta(Ui),stability:Ex.meta(Ui)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm}),Rx=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(Ui),surface:Ph.meta(Ui),purpose:z.string().min(1).max(300).meta(Ui)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm});z.object({version:z.number().int().min(1).meta(Ui),events:z.array(kx).min(1).meta(Ui),prefix_families:z.array(Rx).meta(Ui)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm});var sd=["web_signed_up","web_signed_in","cli_signed_up","cli_signed_in","cli_command_executed","changeset_submitted","changeset_approved","changeset_rejected","changeset_deployed","changeset_launched","changeset_parked","changeset_resumed","changeset_discarded","changeset_archived","config_imported","config_exported","entity_created","entity_updated","entity_deleted","web_api_error"],Ax=["placement_resolved","placement_rendered","placement_exposed","placement_outcome","placement_interaction","gate_evaluated","gate_attempted","gate_allowed","gate_denied","slot_evaluated","slot_filled","slot_empty","slot_suppressed","slot_error","segment_enrolled","segment_unenrolled","user_context_observed","page_view"],wx=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],jx=["area_viewed","feature_gated"],Cx={web_signed_up:{purpose:"An operator created a control-plane account via the web app.",stability:"stable"},web_signed_in:{purpose:"An operator signed in to the web app.",stability:"stable"},cli_signed_up:{purpose:"An operator created an account through the CLI device flow.",stability:"stable"},cli_signed_in:{purpose:"An operator authenticated the CLI.",stability:"stable"},cli_command_executed:{purpose:"A CLI command ran; the command name rides on payload.command.",stability:"stable"},changeset_submitted:{purpose:"A playbook version was submitted for review.",stability:"stable"},changeset_approved:{purpose:"A playbook version was approved.",stability:"stable"},changeset_rejected:{purpose:"A playbook version was rejected.",stability:"stable"},changeset_deployed:{purpose:"A playbook version was compiled and activated.",stability:"stable"},changeset_launched:{purpose:"A deployed playbook version was launched to traffic.",stability:"stable"},changeset_parked:{purpose:"A playbook version was parked.",stability:"stable"},changeset_resumed:{purpose:"A parked playbook version resumed.",stability:"stable"},changeset_discarded:{purpose:"A draft playbook version was discarded.",stability:"stable"},changeset_archived:{purpose:"A playbook version was archived.",stability:"stable"},config_imported:{purpose:"A Playbook was imported as a staged change set.",stability:"stable"},config_exported:{purpose:"A Playbook was exported.",stability:"stable"},entity_created:{purpose:"A config entity was created; the resource rides on payload.resource.",stability:"stable"},entity_updated:{purpose:"A config entity was updated; the resource rides on payload.resource.",stability:"stable"},entity_deleted:{purpose:"A config entity was deleted; the resource rides on payload.resource.",stability:"stable"},web_api_error:{purpose:"A control-plane API request failed; internal telemetry only, never via the customer SDK.",stability:"internal"},area_viewed:{purpose:"An authenticated product area of the web app was viewed (dashboard, a studio).",stability:"internal"},feature_gated:{purpose:"A nav-gated section of the web app rendered its gate notice \u2014 the control plane\u2019s own paywall analog.",stability:"internal"},placement_resolved:{purpose:"The decision engine resolved a placement for a slot.",stability:"stable"},placement_rendered:{purpose:"A resolved placement's visual root rendered.",stability:"stable"},placement_exposed:{purpose:"A rendered placement met the exposure basis (render or viewport).",stability:"stable"},placement_outcome:{purpose:"A placement reached a terminal outcome (converted, dismissed, \u2026).",stability:"stable"},placement_interaction:{purpose:"A user interacted with a presented placement.",stability:"stable"},gate_evaluated:{purpose:"A gate was evaluated during render; the passive denominator signal.",stability:"stable"},gate_attempted:{purpose:"A user actively invoked a gated action.",stability:"stable"},gate_allowed:{purpose:"An actively invoked gated action was allowed.",stability:"stable"},gate_denied:{purpose:"An actively invoked gated action was denied.",stability:"stable"},slot_evaluated:{purpose:"A surface slot resolution ran; the funnel denominator.",stability:"stable"},slot_filled:{purpose:"A slot resolved to a payload and will render.",stability:"stable"},slot_empty:{purpose:"A slot resolved to nothing eligible.",stability:"stable"},slot_suppressed:{purpose:"A slot was eligible but suppressed by caps or cooldown.",stability:"stable"},slot_error:{purpose:"A slot resolution failed.",stability:"internal"},segment_enrolled:{purpose:"A user entered a targeting segment.",stability:"stable"},segment_unenrolled:{purpose:"A user left a targeting segment.",stability:"stable"},user_context_observed:{purpose:"Reserved: the NAMES of custom user-context fields set on identify/setUserContext. Names only, never values.",stability:"internal"},page_view:{purpose:"A route change tracked by the SDK router integration.",stability:"stable"},sdk_init:{purpose:"One anonymous adoption beacon per SDK startup.",stability:"internal"},sdk_error:{purpose:"The SDK itself malfunctioned; distinct from a decision producing nothing.",stability:"internal"},sdk_validation_warning:{purpose:"The SDK found a config or usage problem worth surfacing.",stability:"internal"},resolution_failure:{purpose:"A decision produced nothing; allow-listed handles and closed reason codes only.",stability:"internal"}};function id(t,e){return t.map(n=>({name:n,surface:e,purpose:Cx[n].purpose,stability:Cx[n].stability}))}var Th={events:[...id(sd,"control_plane"),...id(jx,"control_plane"),...id(Ax,"sdk_client"),...id(wx,"sdk_client")]};Th.events.map(t=>t.name);Th.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:N,Pii:Rl}=qe,{Persisted:qx,Transient:Gn}=Ne,{Internal:ws,External:Or}=Ue,Ch=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),Dx=W.extend({event_type:z.string().min(1).meta(N),source:Ch.default("sdk").meta(N),tenant_id:z.string().min(1).optional().meta(N),user_id:z.string().min(1).optional().meta(Rl),session_id:z.string().min(1).optional().meta(Rl),occurred_at:z.string().datetime().meta(N),request_id:z.string().min(1).meta(N),attributes:z.record(z.string(),z.unknown()).default({}).meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":ws}),Ux=Dx.extend({ingested_at:z.string().datetime().meta(N)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":qx,"x-revturbine-schema-exposure":ws});z.array(z.object({id:z.string().min(1).optional().meta(N),event_type:z.string().min(1).meta(N),occurred_at:z.string().datetime().optional().meta(N),tenant_id:z.string().min(1).optional().meta(N),user_id:z.string().min(1).optional().meta(Rl),session_id:z.string().min(1).optional().meta(Rl),attributes:z.record(z.string(),z.unknown()).optional().meta(N),payload:z.record(z.string(),z.unknown()).optional().meta(N),message:z.string().optional().meta(N),level:z.string().optional().meta(N),path:z.string().optional().meta(N)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":ws});var Mx=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({user_id:z.string().min(1).meta(Rl),placement_id:z.string().min(1).meta(N),treatment_id:z.string().min(1).optional().meta(N),surface_slot_id:z.string().min(1).optional().meta(N),surface_template_id:z.string().min(1).optional().meta(N),payload_id:z.string().min(1).optional().meta(N),interaction_type:Mx.meta(N),interaction_at:z.string().datetime().optional().meta(N),message_block_handle:z.string().min(1).optional().meta(N),message_block_id:z.string().min(1).optional().meta(N),experiment_id:z.string().min(1).optional().meta(N),variant_key:z.string().min(1).optional().meta(N),test:z.boolean().optional().meta(N),metadata:z.record(z.string(),z.unknown()).optional().meta(N)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.enum(["trial_midpoint","trial_expiring","trial_expired","usage_limit_approaching","usage_limit_reached","credit_balance_low","seat_limit_reached","feature_gated","cancel_intent","payment_failed","auto_renewal_reminder","onboarding_complete","invite_teammate_prompt","referral_offer","plan_upgrade_nudge"]).meta({id:"TriggerEventType","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({days_remaining:z.number().int().min(0).optional().meta(N)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({entitlement_handle:z.string().optional().meta(N),current_usage:z.number().min(0).optional().meta(N),usage_limit:z.number().min(0).optional().meta(N),usage_percent:z.number().min(0).max(100).optional().meta(N),threshold:z.number().min(0).optional().meta(N),balance:z.number().min(0).optional().meta(N),allocation:z.number().min(0).optional().meta(N),seats_used:z.number().int().min(0).optional().meta(N),seats_allowed:z.number().int().min(0).optional().meta(N)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({feature:z.string().min(1).meta(N)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({retry_count:z.number().int().min(0).optional().meta(N),renewal_date:z.string().optional().meta(N)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({event_type:z.string().min(1).meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});var Lx=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),Nx=z.enum(sd).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({event_type:Nx.meta(N),source:Lx.meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({q:z.string().optional().meta(N),source:Ch.optional().meta(N),event_type:z.string().optional().meta(N),from:z.string().datetime().optional().meta(N),to:z.string().datetime().optional().meta(N),page:z.coerce.number().int().min(1).default(1).meta(N),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(N)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":ws});var Vx=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":ws}),Bx=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":ws}),od=W.merge(le).merge(de).extend({event_id:z.string().min(1).meta(N),event_type:z.string().min(1).meta(N),source:Vx.meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N),status:Bx.default("processed").meta(N),processed_at:z.string().datetime().optional().meta(N),error_message:z.string().optional().meta(N)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":qx,"x-revturbine-schema-exposure":ws});z.object({accepted:z.number().int().min(0).meta(N)}).meta({id:"null","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":ws});var cq=500,mq=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),zx=z.object({environment_id:z.string().min(1).meta(N),user_id:z.string().min(1).meta(Rl),account_id:z.string().min(1).meta(N),event_name:z.string().min(1).max(120).meta(N),event_ts:z.string().datetime().meta(N),properties:z.string().optional().meta(N),surface_slot_id:z.string().nullable().optional().meta(N),placement_id:z.string().nullable().optional().meta(N),payload_id:z.string().nullable().optional().meta(N),request_id:z.string().optional().meta(N),experiment_id:z.string().nullable().optional().meta(N),variant_key:z.string().nullable().optional().meta(N),tenant_id:z.string().optional().meta(N),event_id:z.string().nullable().optional().meta(N),origin:mq.nullable().optional().meta(N),playbook_version:z.string().nullable().optional().meta(N),decision_id:z.string().nullable().optional().meta(N),test:z.boolean().optional().meta(N)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({events:z.array(zx).min(1).max(cq).meta(N)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});var uq=10,$x=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),Hx=z.object({plans:z.number().int().min(0).meta(N),entitlements:z.number().int().min(0).meta(N),entitlement_rules:z.number().int().min(0).meta(N),segments:z.number().int().min(0).meta(N),placements:z.number().int().min(0).meta(N),placement_payloads:z.number().int().min(0).meta(N),content_ui_paths:z.number().int().min(0).meta(N),surface_templates:z.number().int().min(0).meta(N)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),Gx=z.object({event_type:$x.meta(N),occurred_at:z.string().datetime().meta(N),request_id:z.string().min(1).optional().meta(N),config_hash_id:z.string().min(1).max(64).optional().meta(N),sdk_version:z.string().min(1).max(64).optional().meta(N),runtime_mode:z.string().min(1).max(64).optional().meta(N),schema_version:z.string().min(1).max(64).optional().meta(N),bundle_version:z.string().min(1).max(64).optional().meta(N),config_shape:Hx.optional().meta(N),message:z.string().max(500).optional().meta(N),reason:z.string().min(1).max(64).optional().meta(N),placement_handle:z.string().min(1).max(64).optional().meta(N),slot_handle:z.string().min(1).max(64).optional().meta(N),surface:z.string().min(1).max(64).optional().meta(N),plan_handle:z.string().min(1).max(64).optional().meta(N),entitlement_handle:z.string().min(1).max(64).optional().meta(N)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({events:z.array(Gx).min(1).max(uq).meta(N)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});({"/api/events/search":{get:f({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:Ug(Ux)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:f({operationId:"listWebhookEvents",requestParams:{query:H},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:$(od)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:ht}=qe,{Persisted:_m,Transient:ym}=Ne,{Internal:Mi}=Ue,Wx=gt(Ye.Playbook,{sdkInput:true}),Jx=gt(Ye.Playbook,{inConfig:false,sdkInput:true}),Zx=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Mi}),Eh=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Mi}),kh=z.object({name:Wt.meta(ht),handle:it.meta(ht),plan_id:z.string().nullable().optional().meta(ht),segment_id:z.string().nullable().optional().meta(ht),trial_limit_type:Eh.default("time").meta(ht),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ht),grace_period_days:z.number().int().min(0).default(0).meta(ht),usage_entitlement_handle:z.string().min(1).optional().meta(ht),usage_limit_value:z.number().int().min(1).optional().meta(ht),require_payment_method:z.boolean().default(false).meta(ht),auto_convert:z.boolean().default(true).meta(ht),convert_to_plan_id:z.string().optional().meta(ht),fallback_plan_id:z.string().optional().meta(ht),limit_per_customer:z.number().int().min(1).default(1).meta(ht),is_active:z.boolean().default(true).meta(ht),metadata:$t.meta(ht)}),po=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...ht,readOnly:true})}).merge(kh).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":_m,"x-revturbine-schema-exposure":Mi,...Wx,...Fn()}),pq=bn("FreeTrialRuleAnchor"),Qx=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Mi}),Rh=z.object({name:Wt.meta(ht),handle:it.meta(ht),premium_plan_id:z.string().min(1).meta(ht),fallback_plan_id:z.string().min(1).meta(ht),segment_id:z.string().nullable().optional().meta(ht),trial_limit_type:Eh.default("time").meta(ht),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ht),usage_entitlement_handle:z.string().min(1).optional().meta(ht),usage_limit_value:z.number().int().min(1).optional().meta(ht),start_policy:Qx.default("signup").meta(ht),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(ht),entitlements_during_trial:z.array(z.string()).default([]).meta(ht),is_active:z.boolean().default(true).meta(ht),metadata:$t.meta(ht)}),go=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...ht,readOnly:true})}).merge(Rh).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":_m,"x-revturbine-schema-exposure":Mi,...Wx,...Fn()}),gq=bn("ReverseTrialRuleAnchor"),Ah=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Mi}),wh=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Mi}),ho=W.merge(le).merge(de).extend({trial_limit_policy:Ah.default("1_per_lifetime").meta(ht),eligibility_scope:wh.default("per_customer").meta(ht)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":_m,"x-revturbine-schema-exposure":Mi,...Jx}),fo=W.merge(le).merge(de).extend({trial_limit_policy:Ah.default("1_per_lifetime").meta(ht),eligibility_scope:wh.default("per_customer").meta(ht)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":_m,"x-revturbine-schema-exposure":Mi,...Jx}),fm=W.merge(le).merge(de).extend({customer_id:z.string().min(1).meta(ht),rule_id:z.string().min(1).meta(ht),rule_type:z.enum(["free_trial","reverse_trial"]).meta(ht),plan_id:z.string().min(1).meta(ht),status:Zx.default("active").meta(ht),started_at:z.string().datetime().meta({...ht,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(ht),trial_limit_type:Eh.default("time").meta(ht),usage_entitlement_handle:z.string().min(1).optional().meta(ht),usage_limit_value:z.number().int().min(1).optional().meta(ht),converted_at:nn.meta(ht),cancelled_at:nn.meta(ht),metadata:$t.meta(ht)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":_m,"x-revturbine-schema-exposure":Mi});({"/api/free-trial-rule-anchors":{get:f({operationId:"listFreeTrialRuleAnchors",requestParams:{query:H},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:$(pq)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:f({operationId:"listFreeTrialRules",requestParams:{query:H},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:$(po)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:f({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:po}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:f({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:po.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:po}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:f({operationId:"listReverseTrialRuleAnchors",requestParams:{query:H},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:$(gq)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:f({operationId:"listReverseTrialRules",requestParams:{query:H},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:$(go)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:f({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:go}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:f({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:go.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:go}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:f({operationId:"listFreeTrialSettings",requestParams:{query:H},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:$(ho)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:f({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:ho}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:f({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ho.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ho}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:f({operationId:"listReverseTrialSettings",requestParams:{query:H},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:$(fo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:f({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:f({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:fo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:f({operationId:"listTrialInstances",requestParams:{query:H},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:$(fm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:f({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:fm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:f({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:fm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:f({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:fm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var{Unrestricted:E,Financial:Xx}=qe,{Persisted:js,Transient:Oh}=Ne,{Internal:pi}=Ue,ld=gt(Ye.Playbook,{inConfig:false,sdkInput:true}),eS=gt(Ye.CustomerOperations,{sdkInput:false}),tS=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Oh,"x-revturbine-schema-exposure":pi}),nS=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Oh,"x-revturbine-schema-exposure":pi}),fq=z.enum(["managed","observed"]).meta({id:"ExperimentAllocationMode","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":pi}),rS=z.discriminatedUnion("kind",[z.object({kind:z.literal("placement"),placement_handle:z.string().min(1),placement_payload_handle:z.string().min(1).optional()}),z.object({kind:z.literal("entitlement"),entitlement_handle:z.string().min(1),rule_handle:z.string().min(1).optional()}),z.object({kind:z.literal("plan"),plan_handle:z.string().min(1),plan_variation_handle:z.string().min(1).optional()}),z.object({kind:z.literal("pricing"),plan_variation_handle:z.string().min(1),promotion_handle:z.string().min(1).optional()}),z.object({kind:z.literal("custom"),provider_payload:z.record(z.string(),z.json())})]).meta({id:"ExperimentVariantTarget","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":pi,...ld}),aS=z.object({variant_id:z.string().min(1),name:Wt,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),targets:z.array(rS).min(1).optional(),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":pi,...ld}),_q=z.object({method:z.literal("always_valid"),look_count:z.number().int().positive(),alpha:z.number().positive().lt(1).default(.05)}).strict(),yq=z.object({minimum_revenue_effect:z.number().min(0)}).strict(),vq=z.discriminatedUnion("method",[z.object({method:z.literal("cuped"),covariate_metric:Tr,lookback_days:z.number().int().positive()}),z.object({method:z.literal("regression_adjustment"),covariate_metric:Tr,lookback_days:z.number().int().positive()})]),bq=z.object({method:z.literal("holm"),family_scope:z.literal("primary_and_guardrails_separate")}),qh=z.object({methodology:z.enum(["frequentist","bayesian"]),analysis_unit:ta,sequential:_q.optional(),multiple_comparisons:bq.optional(),variance_reduction:vq.optional(),practical_significance:yq.optional()}).meta({id:"ExperimentAnalysisConfig","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":pi,...ld});var Cr=t=>({id:t,"x-revturbine-schema-persistence":Oh,"x-revturbine-schema-exposure":pi}),cd=z.object({variant_id:z.string().min(1).meta(E)}),xq=z.object({n:z.number().int().positive().meta(E),sum_numerator:z.number().meta(E),sum_denominator:z.number().positive().meta(E),sum_covariate:z.number().optional().meta(E)}).meta(Cr("ExperimentClusterAggregate")),Sq=z.object({assignment_unit:ta.meta(E),clusters:z.array(xq).min(2).meta(E)}).meta(Cr("ExperimentClusteredSufficientStatistics")),md={clustered:Sq.optional().meta(E)},Pq=cd.extend({statistic_type:z.literal("mean").meta(E),n:z.number().int().min(0).meta(E),sum_y:z.number().meta(E),sum_y2:z.number().min(0).meta(E),...md}).meta(Cr("MeanVariantStatisticalSummary")),Tq=cd.extend({statistic_type:z.literal("binary").meta(E),n:z.number().int().min(0).meta(E),successes:z.number().int().min(0).meta(E),...md}).meta(Cr("BinaryVariantStatisticalSummary")),Iq=cd.extend({statistic_type:z.literal("ratio").meta(E),n:z.number().int().min(0).meta(E),sum_numerator:z.number().meta(E),sum_denominator:z.number().meta(E),sum_numerator2:z.number().min(0).meta(E),sum_denominator2:z.number().min(0).meta(E),sum_cross:z.number().meta(E),...md}).meta(Cr("RatioVariantStatisticalSummary")),Cq=cd.extend({statistic_type:z.literal("covariance").meta(E),n:z.number().int().min(0).meta(E),sum_x:z.number().meta(E),sum_y:z.number().meta(E),sum_x2:z.number().min(0).meta(E),sum_y2:z.number().min(0).meta(E),sum_xy:z.number().meta(E),...md}).meta(Cr("CovarianceVariantStatisticalSummary")),iS=z.discriminatedUnion("statistic_type",[Pq,Tq,Iq,Cq]).meta(Cr("VariantStatisticalSummary")),sS=z.object({start:z.string().datetime().meta(E),end:z.string().datetime().meta(E)}).meta(Cr("ExperimentObservationWindow")),Eq=z.object({metric:Tr.meta(E),observation_window:sS.meta(E)}).meta(Cr("ExperimentCovariateProvenance")),oS=z.object({schema_version:z.number().int().min(1).meta(E),experiment_handle:it.meta(E),experiment_version:z.number().int().min(1).meta(E),metric:Tr.meta(E),analysis_unit:ta.meta(E),variants:z.array(iS).min(1).meta(E),observation_window:sS.meta(E),covariate:Eq.optional().meta(E),data_watermark:z.string().datetime().meta(E),source_scope:di.meta(E),provider:As.meta(E)}).meta(Cr("ExperimentEvidence")),kq=z.object({status:z.enum(["not_evaluated","pass","fail"]).meta(E),p_value:z.number().min(0).max(1).optional().meta(E),chi_squared:z.number().min(0).optional().meta(E),variants:z.array(z.object({variant_id:z.string().min(1).meta(E),observed_count:z.number().int().min(0).meta(E),expected_count:z.number().min(0).meta(E)})).default([]).meta(E),reason:z.string().min(1).max(500).optional().meta(E)}).meta(Cr("ExperimentSampleRatioMismatch")),lS=z.object({status:z.enum(["healthy","warning","unhealthy","insufficient_data"]).meta(E),sample_ratio_mismatch:kq.optional().meta(E),issues:z.array(z.object({code:z.string().min(1).max(100).meta(E),message:z.string().min(1).max(500).meta(E)})).default([]).meta(E)}).meta(Cr("ExperimentHealth")),Rq=z.object({lower:z.number().meta(E),upper:z.number().meta(E),level:z.number().min(0).max(1).meta(E)}).meta(Cr("ExperimentConfidenceInterval")),Aq=z.object({method:z.literal("always_valid").meta(E),status:z.enum(["continue","significant_positive","significant_negative"]).meta(E),look_count:z.number().int().min(1).meta(E),spending_state:z.object({alpha:z.number().positive().lt(1).meta(E),look_alpha:z.number().positive().lt(1).meta(E),cumulative_alpha_spent:z.number().positive().lt(1).meta(E),alpha_remaining:z.number().positive().lt(1).meta(E),unadjusted_p_value:z.number().min(0).max(1).optional().meta(E)}).meta(E)}).meta(Cr("ExperimentSequentialResult")),wq=z.object({minimum_revenue_effect:z.number().min(0).meta(Xx),revenue_effect:z.number().meta(Xx),status:z.enum(["meaningful_positive","meaningful_negative","not_demonstrated"]).meta(E)}).meta(Cr("ExperimentPracticalSignificanceResult")),jq=z.object({method:z.literal("holm").meta(E),family:z.enum(["primary","guardrails"]).meta(E),family_size:z.number().int().positive().meta(E),unadjusted_p_value:z.number().min(0).max(1).meta(E)}).meta(Cr("ExperimentMultipleComparisonResult")),cS=z.object({metric:Tr.meta(E),control_variant_id:z.string().min(1).meta(E),variant_id:z.string().min(1).meta(E),estimator:z.string().min(1).max(100).meta(E),estimator_version:z.string().min(1).max(100).meta(E),estimate:z.number().meta(E),control_estimate:z.number().meta(E),absolute_effect:z.number().meta(E),relative_effect:z.number().optional().meta(E),standard_error:z.number().min(0).optional().meta(E),confidence_interval:Rq.optional().meta(E),p_value:z.number().min(0).max(1).optional().meta(E),multiple_comparison:jq.optional().meta(E),probability_positive:z.number().min(0).max(1).optional().meta(E),expected_loss:z.number().min(0).optional().meta(E),sequential:Aq.optional().meta(E),practical_significance:wq.optional().meta(E),sample_size:z.number().int().min(0).optional().meta(E)}).meta(Cr("ExperimentMetricResult")),Oq=z.object({metric:Tr.meta(E),summary_schema_version:z.number().int().min(1).meta(E),data_watermark:z.string().datetime().meta(E),provider:As.meta(E)}).meta(Cr("ExperimentEvidenceProvenance")),mS=z.object({provider:As.meta(E),evidence:z.array(Oq).min(1).meta(E)}).meta(Cr("AnalysisProvenance")),uS=z.object({schema_version:z.number().int().min(1).meta(E),engine:z.string().min(1).max(100).meta(E),engine_version:z.string().min(1).max(100).meta(E),methodology:z.string().min(1).max(100).meta(E),metrics:z.array(cS).meta(E),health:lS.meta(E),provenance:mS.meta(E)}).meta(Cr("ExperimentAnalysisResult")),dS=W.merge(de).extend({created_at:z.string().datetime().meta({...E,readOnly:true}),experiment_handle:it.meta(E),experiment_version:z.number().int().min(1).meta(E),metric_semantic_id:Tr.meta(E),metric_catalog_version:z.string().min(1).max(64).meta(E),endpoint_version:z.string().min(1).max(100).meta(E),query_hash:z.string().min(1).max(128).meta(E),evidence_provider_handle:it.meta(E),evidence_provider_type:z.string().min(1).max(100).meta(E),evidence_provider_version:z.string().min(1).max(100).meta(E),evidence_provider_contract_version:z.number().int().min(1).meta(E),summary_schema_version:z.number().int().min(1).meta(E),observation_window_start:z.string().datetime().meta(E),observation_window_end:z.string().datetime().meta(E),data_watermark:z.string().datetime().meta(E)}),pS=dS.extend({analysis_unit:ta.meta(E),evidence:oS.meta(E)}).meta({id:"ExperimentEvidenceSnapshot","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":pi,...eS}),gS=dS.extend({evidence_snapshot_id:z.string().min(1).meta(E),analysis_provider_handle:it.meta(E),analysis_provider_type:z.string().min(1).max(100).meta(E),analysis_provider_version:z.string().min(1).max(100).meta(E),analysis_provider_contract_version:z.number().int().min(1).meta(E),engine:z.string().min(1).max(100).meta(E),engine_version:z.string().min(1).max(100).meta(E),estimator:z.string().min(1).max(100).meta(E),estimator_version:z.string().min(1).max(100).meta(E),analysis_config:qh.meta(E),result:uS.meta(E)}).meta({id:"ExperimentAnalysisResultRecord","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":pi,...eS}),Fi=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...E,readOnly:true}),name:Wt.meta(E),handle:it.meta(E),description:z.string().max(1e3).optional().meta(E),experiment_type:nS.meta(E),status:tS.default("draft").meta(E),target_resource_id:z.string().optional().meta(E),target_segments:z.array(z.string()).optional().meta(E),target_segment_ids:z.array(z.string()).default([]).meta(E),variants:z.array(aS).min(2).meta(E),primary_metric:Tr.meta(E),guardrail_metrics:z.array(Tr).optional().meta(E),assignment_unit:ta.optional().meta(E),assignment_provider_binding:pm.extend({capability:z.literal("experiment_assignment"),allocation_mode:fq}).optional().meta(E),evidence_provider_binding:pm.extend({capability:z.literal("experiment_evidence")}).optional().meta(E),analysis_provider_binding:pm.extend({capability:z.literal("experiment_analysis")}).optional().meta(E),analysis_config:qh.optional().meta(E),metric_threshold:z.number().default(.05).meta(E),secondary_metrics:z.array(Tr).default([]).meta(E),traffic_allocation:z.number().min(0).max(1).default(1).meta(E),started_at:nn.meta(E),ended_at:nn.meta(E),confidence_threshold:z.number().min(0).max(1).default(.95).meta(E),winning_variant_id:z.string().nullable().default(null).meta(E),metadata:$t.meta(E)}).meta({id:"Experiment","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":pi,...ld,...Fn()}),qq=bn("ExperimentAnchor"),hS=hl,jh=W.merge(le).merge(de).extend({experiment_id:z.string().optional().meta(E),resource_type:z.string().min(1).meta(E),resource_id:z.string().min(1).meta(E),severity:hS.default("info").meta(E),title:z.string().min(1).max(300).meta(E),description:z.string().max(2e3).meta(E),suggested_action:z.string().max(1e3).optional().meta(E),estimated_impact:z.number().optional().meta(E),detector_id:z.string().min(1).nullable().optional().meta(E),detector_version:z.number().int().min(1).nullable().optional().meta(E),opportunity_type:z.string().min(1).nullable().optional().meta(E),evidence:z.array(ad).nullable().optional().meta(E),hypothesis:z.string().min(1).nullable().optional().meta(E),confidence:z.number().min(0).max(1).nullable().optional().meta(E),is_dismissed:z.boolean().default(false).meta(E),metadata:$t.meta(E)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":pi});({"/api/experiment-evidence-snapshots":{get:f({operationId:"listExperimentEvidenceSnapshots",requestParams:{query:H},summary:"List immutable experiment evidence snapshots",tags:["experiments"],responses:{200:{description:"Experiment evidence snapshots",content:{"application/json":{schema:$(pS)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-evidence-snapshots",persistence:{table:"experimentEvidenceSnapshots",mode:"list"}}})},"/api/experiment-analysis-results":{get:f({operationId:"listExperimentAnalysisResults",requestParams:{query:H},summary:"List immutable experiment analysis results",tags:["experiments"],responses:{200:{description:"Experiment analysis results",content:{"application/json":{schema:$(gS)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-analysis-results",persistence:{table:"experimentAnalysisResults",mode:"list"}}})},"/api/experiment-anchors":{get:f({operationId:"listExperimentAnchors",requestParams:{query:H},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:$(qq)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:f({operationId:"listExperiments",requestParams:{query:H},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:$(Fi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:f({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:f({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Fi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:f({operationId:"deleteExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:f({operationId:"startExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:f({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:f({operationId:"completeExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z.object({winning_variant_id:z.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:f({operationId:"listOptimizationSuggestions",requestParams:{query:H},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:$(jh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:f({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:jh}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Lr,Financial:fS}=qe,{Persisted:Uq,Transient:_S}=Ne,{Internal:Dh}=Ue,Mq=gt(Ye.Playbook,{sdkInput:true}),yS=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":_S,"x-revturbine-schema-exposure":Dh}),vS=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":_S,"x-revturbine-schema-exposure":Dh}),rs=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Lr,readOnly:true}),name:Wt.meta(Lr),handle:it.meta(Lr),description:z.string().max(1e3).optional().meta(Lr),rt_status:yS.default("draft").meta(Lr),discount_type:vS.meta(Lr),discount_value:z.number().min(0).meta(fS),currency:z.string().length(3).default("USD").meta(fS),applicable_plan_ids:z.array(z.string()).default([]).meta(Lr),applicable_addon_ids:z.array(z.string()).default([]).meta(Lr),target_segment_ids:z.array(z.string()).default([]).meta(Lr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(Lr),current_redemptions:z.number().int().min(0).default(0).meta({...Lr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(Lr),starts_at:nn.meta(Lr),ends_at:nn.meta(Lr),stripe_coupon_id:z.string().nullable().default(null).meta(Lr),stripe_promotion_code_id:z.string().nullable().default(null).meta(Lr),auto_sync_stripe:z.boolean().default(false).meta(Lr),metadata:$t.meta(Lr)}).meta({id:"Promotion","x-revturbine-schema-persistence":Uq,"x-revturbine-schema-exposure":Dh,...Mq,...Fn()}),Fq=bn("PromotionAnchor");({"/api/promotion-anchors":{get:f({operationId:"listPromotionAnchors",requestParams:{query:H},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:$(Fq)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:f({operationId:"listPromotions",requestParams:{query:H},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:$(rs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:f({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:rs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:f({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:rs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:f({operationId:"deletePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:f({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:rs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:f({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:rs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:g}=qe,{Persisted:Ul,Transient:vt}=Ne,{Internal:Xa,External:Nt}=Ue,Ot=gt(Ye.Playbook,{sdkInput:true}),wl=gt(Ye.Playbook,{sdkInput:false}),Os=gt(Ye.Playbook,{inConfig:false,sdkInput:false}),bS=gt(Ye.Playbook,{inConfig:false,sdkInput:true}),Al=gt(Ye.Playbook,{inConfig:false,sdkInput:true,source:jr.CodeConstant}),Uh=gt(Ye.Playbook,{inConfig:false,sdkInput:true,source:jr.Runtime}),Mh=gt(Ye.Playbook,{inConfig:false,sdkInput:false,source:jr.Runtime}),Nq=gt(Ye.Billing,{sdkInput:false}),Vq=gt(Ye.Metering,{sdkInput:false}),Bq=gt(Ye.Branding,{inConfig:true,sdkInput:true}),zq=gt(Ye.Branding,{sdkInput:false}),xS="1.0.0",jl=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),name:Wt.meta(g),handle:it.meta(g),description:Ca.meta(g),is_default:z.boolean().default(false).meta(g),entitlement_ids:z.array(z.string()).default([]).meta(g),metadata:$t.meta(g)}).meta({id:"SeatType","x-revturbine-schema-persistence":Ul,"x-revturbine-schema-exposure":Xa,...Os,...Fn()}),Kq=bn("SeatTypeAnchor"),Ol=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:it.meta(g),label:z.string().min(1).meta(g),description:z.string().nullable().default(null).meta(g),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(g),data_source:z.string().nullable().default(null).meta(g),example_value:z.string().nullable().default(null).meta(g),value_map:z.record(z.string(),z.string()).default({}).meta(g),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(g),metadata:$t.meta(g)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Ul,"x-revturbine-schema-exposure":Xa,...Os,...Fn()}),$q=bn("PersonalizationTokenAnchor"),SS=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Xa}),ud=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({handle:it.meta({...g,readOnly:true}),stripe_account_id:z.string().min(1).meta(g),live_mode:z.boolean().default(false).meta(g),onboarding_state:SS.default("not_started").meta({...g,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...g,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...g,readOnly:true}),details_submitted:z.boolean().default(false).meta({...g,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...g,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...g,readOnly:true}),sync_products:z.boolean().default(true).meta(g),sync_prices:z.boolean().default(true).meta(g),sync_subscriptions:z.boolean().default(true).meta(g),sync_invoices:z.boolean().default(false).meta(g),default_currency:z.string().length(3).default("USD").meta(g),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(g),last_sync_at:z.string().optional().meta({...g,readOnly:true}),metadata:$t.meta(g)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Ul,"x-revturbine-schema-exposure":Xa,...Nq,...Pr()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(g),workspace_name:z.string().optional().meta(g),logo_url:z.string().optional().meta(g),support_email:z.string().optional().meta(g)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...zq});var ql=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({handle:it.meta({...g,readOnly:true}),entitlement_id:z.string().min(1).meta(g),meter_key:z.string().min(1).max(100).meta(g),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(g),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(g),stripe_meter_id:z.string().nullable().default(null).meta(g),is_active:z.boolean().default(true).meta(g),metadata:$t.meta(g)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Ul,"x-revturbine-schema-exposure":Xa,...Vq,...Pr()}),Fh=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Xa}),Dl=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:it.meta({...g,readOnly:true}),entitlement_id:z.string().min(1).meta(g),soft_limit_percent:z.number().min(0).max(100).default(80).meta(g),hard_limit_percent:z.number().min(0).max(100).default(100).meta(g),soft_limit_action:Fh.default("warn").meta(g),hard_limit_action:Fh.default("block").meta(g),grace_period_hours:z.number().int().min(0).default(0).meta(g),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(g),is_active:z.boolean().default(true).meta(g)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Ul,"x-revturbine-schema-exposure":Xa,...bS,...Pr()}),Gq=bn("UsageEnforcementSettingsAnchor"),PS=z.object({kind:z.enum(["template","slot"]).meta(g),id:z.string().min(1).meta(g),label:z.string().min(1).optional().meta(g)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Xa}),TS=z.object({id:z.string().min(1).meta(g),group:z.array(PS).min(1).meta(g),cap:z.object({count:z.number().int().min(1).meta(g),period:z.enum(["session","day","week","month"]).meta(g)}).meta(g)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Xa}),IS=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Xa}),Nh=z.object({capRules:z.array(TS).default([]).meta(g),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(g),remindLaterMinutes:z.number().int().min(0).default(60).meta(g),testMode:IS.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Xa}),dd=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:it.meta({...g,readOnly:true}),global_frequency_cap:Nh.nullable().default(null).meta(g),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z.boolean().default(false).meta(g),suppress_for_trial:z.boolean().default(false).meta(g),allow_stacking:z.boolean().default(false).meta(g),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(g)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Ul,"x-revturbine-schema-exposure":Xa,...bS,...Pr()}),Yq=bn("PlacementSettingsAnchor"),Vh=z.object({field:z.string().min(1).meta(g),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(g),value:z.string().meta(g)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),Bh=z.object({name:z.string().min(1).meta(g),handle:z.string().min(1).meta(g),predicates:z.array(Vh).optional().meta(g),dimension_id:z.string().optional().meta(g),experiment_handle:z.string().min(1).optional().meta(g),experiment_id:z.string().min(1).optional().meta(g)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),CS=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),tier_position:z.number().int().min(0).default(0).meta(g),sort_order:z.number().int().min(0).default(0).meta(g),visibility:ji.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),ES=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),sort_order:z.number().int().min(0).default(0).meta(g),visibility:ji.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...wl}),kS=z.object({handle:z.string().min(1).meta(g),plan_handle:z.string().min(1).meta(g),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z.string().nullable().default(null).meta(g),price_amount:z.number().min(0).meta(g),pricing_model:ao.meta(g),visibility:ji.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:_l.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Os}),RS=z.object({handle:z.string().min(1).meta(g),addon_handle:z.string().min(1).meta(g),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z.string().nullable().default(null).meta(g),price_amount:z.number().min(0).meta(g),pricing_model:ao.meta(g),visibility:ji.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:_l.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Os}),AS=z.object({handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),description:z.string().nullable().default(null).meta(g),is_default:z.boolean().default(false).meta(g),entitlement_handles:z.array(z.string()).default([]).meta(g)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),wS=z.object({handle:z.string().min(1).meta(g),entitlement_handle:z.string().nullable().default(null).meta(g),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(g),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(g),soft_limit_action:z.string().meta(g),hard_limit_action:z.string().meta(g),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(g),notification_channels:z.array(z.string()).default([]).meta(g),is_active:z.boolean().default(true).meta(g)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),jS=z.object({handle:z.string().min(1).meta(g),global_frequency_cap:Nh.nullable().default(null).meta(g),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z.boolean().default(false).meta(g),suppress_for_trial:z.boolean().default(false).meta(g),allow_stacking:z.boolean().default(false).meta(g),priority_collision_strategy:z.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),OS=z.object({handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:z.string().nullable().default(null).meta(g),visibility_toggle:z.boolean().default(true).meta(g),source_type:z.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),qS=z.object({handle:z.string().min(1).meta(g),entitlement_handle:z.string().min(1).meta(g),meter_handle:z.string().min(1).meta(g),limit:z.number().int().min(0).nullable().default(null).meta(g),reset_period:z.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),DS=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),type:gl.meta(g),unit:z.string().optional().meta(g),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),US=z.object({id:z.string().min(1).meta(g),entitlement_id:z.string().min(1).meta(g),targets:z.array(Vu).min(1).meta(g),segment_ids:z.array(z.string()).default([]).meta(g),kind:gl.optional().meta({...g,readOnly:true}),unit:z.string().optional().meta({...g,readOnly:true}),tier_name:z.string().optional().meta({...g,readOnly:true}),tier_description:z.string().optional().meta({...g,readOnly:true}),...Es.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(g),allocation:yl.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),MS=z.object({slot_id:z.string().min(1).meta(g),active:z.boolean().meta(g),triggers:z.array(z.string()).meta(g)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),FS=z.object({id:z.string().min(1).meta(g),label:z.string().min(1).meta(g),description:z.string().meta(g),surface_type:z.string().meta(g),placement_handle:z.string().min(1).meta(g),template:z.string().optional().meta(g)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),LS=z.object({name:z.string().min(1).meta(g),type:z.string().optional().meta(g),required:z.boolean().optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),NS=z.object({id:z.string().min(1).meta(g),surface_type:z.string().meta(g),fields:z.array(LS).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),zh=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),VS=z.object({name:z.string().min(1).meta(g),action_type:zh.meta(g),plan_handle:z.string().optional().meta(g),promotion_id:z.string().optional().meta(g),placement_handle:z.string().optional().meta(g),url:z.string().optional().meta(g),tour_id:z.string().optional().meta(g),target_billing_period:z.enum(["monthly","annual"]).optional().meta(g),description:z.string().optional().meta(g)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),BS=z.object({id:z.string().meta(g),name:z.string().meta(g),discount:z.string().meta(g),type:z.string().meta(g),status:z.string().meta(g)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),zS=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(g),label:z.string().min(1).meta(g),description:z.string().optional().meta(g),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(g),data_source:z.string().optional().meta(g),example_value:z.string().optional().meta(g),value_map:z.record(z.string(),z.string()).optional().meta(g),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(g)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),Lh=z.object({header:z.string().optional().meta(g),body:z.string().optional().meta(g),cta_label:z.string().optional().meta(g),secondary_cta_label:z.string().optional().meta(g)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),KS=z.object({block_id:z.string().min(1).meta(g),tenant_id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),surface_template_id:z.string().optional().meta(g),default_content:Lh.meta(g),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Lh})).optional().meta(g),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(g),tokens_used:z.array(z.string()).optional().meta(g),status:z.enum(["draft","active","archived"]).meta(g),created_at:z.string().datetime().meta({...g,readOnly:true}),updated_at:z.string().datetime().meta({...g,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),$S=z.object({label:z.string().meta(g),path:fl.meta(g),config:z.record(z.string(),z.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),Kh=z.object({template_id:z.string().min(1).meta(g),fields:z.record(z.string(),z.string()).meta(g),ctas:z.array($S).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),$h=z.object({plan_ids:z.array(z.string()).meta(g),billing_cadences:z.array(z.string()).optional().meta(g),segment_chips:z.array(z.string()).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),HS=z.object({count:z.number().int().min(1).meta(g),period:z.enum(["session","day","week","month","lifetime"]).meta(g)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),Hh=z.object({max_per_period:HS.optional().meta(g),cooldown_days:z.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),GS=z.object({id:z.string().min(1).meta(g),target:$h.meta(g),surfaces:z.array(Kh).meta(g),caps:Hh.optional().meta(g),surface_slot_ids:z.array(z.string()).optional().meta(g),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(g),created_at:z.string().optional().meta({...g,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(g),recommendation_plan_override:z.string().optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),YS=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Cs}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Cs}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Cs}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),WS=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt}),Gh=z.object({id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:WS.meta(g),trigger:YS.meta(g),payloads:z.array(GS).meta(g),order:z.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),JS=z.object({payload_id:z.string().min(1).meta(g),placement_id:z.string().min(1).meta(g),target:$h.meta(g),caps:Hh.optional().meta(g),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(g),created_at:z.string().meta({...g,readOnly:true}),updated_at:z.string().datetime().optional().meta({...g,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(g),surfaces:z.array(Kh).optional().meta(g),surface_slot_ids:z.array(z.string()).optional().meta(g),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(g)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),Wq=z.object({kind:z.string().min(1).meta(g),schema_version:z.number().int().nonnegative().meta(g),config:z.unknown().meta(g)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),Jq=W.merge(kh).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Os}),Zq=W.merge(Rh).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Os}),ZS=z.object({plans:z.array(CS).meta({...g,...Ot}),addons:z.array(ES).optional().meta({...g,...wl}),entitlements:z.array(DS).meta({...g,...Ot}),entitlement_rules:z.array(US).meta({...g,...Ot}),segments:z.array(Bh).meta({...g,...Ot}),content_ui_paths:z.array(VS).meta({...g,...Ot}),slot_configs:z.array(MS).optional().meta({...g,...Ot,...nm({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...g,...Ot,...nm({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...g,...Bq,...nm({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(FS).optional().meta({...g,...Ot}),message_blocks:z.array(KS).optional().meta({...g,...Ot}),placement_payloads:z.array(JS).optional().meta({...g,...Ot}),placements:z.array(Gh).optional().meta({...g,...Ot}),content_promotions:z.array(BS).optional().meta({...g,...Ot}),personalization_tokens:z.array(zS).optional().meta({...g,...Ot}),surface_templates:z.array(NS).optional().meta({...g,...Ot}),free_trial_rules:z.array(Jq).optional().meta({...g,...wl}),reverse_trial_rules:z.array(Zq).optional().meta({...g,...wl}),plan_variations:z.array(kS).optional().meta({...g,...wl}),addon_variations:z.array(RS).optional().meta({...g,...wl}),extension_rules:z.array(Wq).optional().meta({...g,...Ot}),seat_types:z.array(AS).optional().meta({...g,...Ot}),enforcement_defaults:z.array(wS).optional().meta({...g,...Ot}),placement_settings:z.array(jS).optional().meta({...g,...Ot}),segment_dimensions:z.array(OS).optional().meta({...g,...Ot}),meter_bindings:z.array(qS).optional().meta({...g,...Ot}),experiments:z.array(z.unknown()).max(0).optional().meta({...g,...Os}),signal_catalog:z.object({}).strict().optional().meta({...g,...Os})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot}),QS=z.object({artifact_type:z.literal("playbook").meta({...g,...Al,readOnly:true}),format_version:z.literal(xS).meta({...g,...Al,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...g,...Al}),playbook_version_id:z.string().nullable().default(null).meta({...g,...Uh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...g,...Mh,readOnly:true}),environment_id:z.string().min(1).optional().meta({...g,...Mh,readOnly:true}),project_id:z.string().min(1).optional().meta({...g,...Mh,readOnly:true}),exported_at:z.string().datetime().optional().meta({...g,...Uh,readOnly:true}),schema_version:z.string().min(1).optional().meta({...g,...Al,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...g,...Al,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...g,...Al,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Uh}),pd=QS.extend(ZS.shape).meta({"x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot});function Qq(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function XS(t){if(!Qq(t))return t;let e={...t};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess(XS,pd).meta({id:"Playbook","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot});z.preprocess(XS,pd.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":vt,"x-revturbine-schema-exposure":Nt,...Ot});({"/api/seat-type-anchors":{get:f({operationId:"listSeatTypeAnchors",requestParams:{query:H},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:$(Kq)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:f({operationId:"listSeatTypes",requestParams:{query:H},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:$(jl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:f({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tr(jl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:jl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:f({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:jl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:jl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:f({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:f({operationId:"listPersonalizationTokenAnchors",requestParams:{query:H},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:$($q)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:f({operationId:"listPersonalizationTokens",requestParams:{query:H},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:$(Ol)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:f({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tr(Ol)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ol}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:f({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ol.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ol}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:f({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:f({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hn(ud)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:ud}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:f({operationId:"listMeteringConfigs",requestParams:{query:H},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:$(ql)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:f({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tr(ql)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ql}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:f({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ql.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ql}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:f({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:f({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:H},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:$(Gq)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:f({operationId:"listUsageEnforcementSettings",requestParams:{query:H},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:$(Dl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:f({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tr(Dl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Dl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:f({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Dl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Dl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:f({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:f({operationId:"listPlacementSettingsAnchors",requestParams:{query:H},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:$(Yq)}}},default:{description:"Error response",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:f({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hn(dd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:dd}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:as}=qe,{Persisted:eP}=Ne,{Internal:tP}=Ue,nP=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":eP,"x-revturbine-schema-exposure":tP}),Yh=W.merge(le).merge(de).extend({action:nP.meta(as),resource_type:z.string().min(1).max(100).meta(as),resource_id:z.string().min(1).meta(as),resource_name:z.string().max(200).optional().meta(as),actor_id:z.string().min(1).meta(as),actor_email:z.string().email().optional().meta(as),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(as),summary:z.string().max(1e3).optional().meta(as),metadata:$t.meta(as)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":eP,"x-revturbine-schema-exposure":tP});({"/api/changelog":{get:f({operationId:"listChangeLogEntries",requestParams:{query:H},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:$(Yh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:f({operationId:"getChangeLogEntry",requestParams:{path:z.object({entryId:z.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:Yh}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:gd}=qe,{Persisted:rD,Transient:aD}=Ne,{Internal:rP}=Ue,aP=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":aD,"x-revturbine-schema-exposure":rP}),ss=W.merge(le).extend({name:Wt.meta(gd),handle:it.meta(gd),status:aP.default("active").meta(gd),metadata:$t.meta(gd)}).meta({id:"Tenant","x-revturbine-schema-persistence":rD,"x-revturbine-schema-exposure":rP});({"/api/tenants":{get:f({operationId:"listTenants",requestParams:{query:H},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:$(ss)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:f({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:ss}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:f({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:ss.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ss}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:f({operationId:"suspendTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:ss}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:f({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:ss}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:ei}=qe,{Persisted:sD,Transient:iP}=Ne,{Internal:Wh}=Ue,sP=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":iP,"x-revturbine-schema-exposure":Wh}),_o=W.merge(le).merge(de).extend({name:Wt.meta(ei),handle:it.meta(ei),description:Ca.meta(ei),is_production:z.boolean().default(false).meta({...ei,readOnly:true}),status:sP.default("active").meta(ei),cloned_from_environment_id:z.string().nullable().default(null).meta({...ei,readOnly:true}),cloned_at:nn.meta({...ei,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...ei,readOnly:true}),requires_approval:z.boolean().default(false).meta(ei),auto_deploy_on_approval:z.boolean().default(false).meta(ei),created_by:z.string().optional().meta(ei),metadata:$t.meta(ei)}).meta({id:"Environment","x-revturbine-schema-persistence":sD,"x-revturbine-schema-exposure":Wh}),oP=z.object({source_environment_id:z.string().min(1),target_environment_id:z.string().min(1),playbook_version_ids:z.array(z.string()).optional(),strategy:z.enum(["all_current","selected_playbook_versions"]).default("all_current")}).meta({id:"EnvironmentPromotionRequest","x-revturbine-schema-persistence":iP,"x-revturbine-schema-exposure":Wh});({"/api/environments":{get:f({operationId:"listEnvironments",requestParams:{query:H},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:$(_o)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:f({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200),handle:z.string().min(1).max(100),description:z.string().max(500).optional(),clone_from_environment_id:z.string().optional(),requires_approval:z.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:_o}}},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:f({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:_o}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:f({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:_o.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_o}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:f({operationId:"archiveEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:_o}}},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:f({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:oP}}},responses:{200:{description:"Promotion result",content:{"application/json":{schema:z.object({promoted_count:z.number().int(),conflict_count:z.number().int(),conflicts:z.array(z.object({handle:z.string(),resource_type:z.string(),source_sequence:z.number().int(),target_sequence:z.number().int()}))})}}},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:st,Pii:vm}=qe,{Transient:Li,Persisted:lD}=Ne,{External:gi}=Ue,lP=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi});z.object({superseded_output_id:z.string().min(1).meta(st),superseded_by:z.string().min(1).meta(st),reason:lP.meta(st)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":lD,"x-revturbine-schema-exposure":gi,...qe.Operational});var cP=z.enum(em).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi}),Jh=z.object({output_id:z.string().meta(st),category:z.string().meta(st),surface:z.object({template:z.string().optional().meta(st),type:Xc.meta(st),slot_id:z.string().optional().meta(st)}).meta(st),content:z.record(z.string(),z.unknown()).meta(st),promotion:z.record(z.string(),z.unknown()).optional().meta(st),cta_path:z.record(z.string(),z.unknown()).optional().meta(st),ui_path:z.record(z.string(),z.unknown()).optional().meta(st),rule_id:z.string().meta(st),decision_id:z.string().meta(st),config_version:z.string().meta(st),present_upsell:z.boolean().meta(st),message_block_handle:z.string().optional().meta(st),message_block_id:z.string().optional().meta(st),experiment_id:z.string().optional().meta(st),variant_key:z.string().optional().meta(st),experiment_version_id:z.string().optional().meta(st)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi}),mP=z.object({status:cP.meta(st),allowed:z.boolean().meta(st),reason:z.string().optional().meta(st),current_tier:z.string().optional().meta(st),limit:z.number().optional().meta(st),used:z.number().optional().meta(st),remaining:z.number().optional().meta(st),placement:Jh.optional().meta(st)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi});z.object({id:z.string().meta(st),name:z.string().optional().meta(st),discount:z.string().optional().meta(st),type:z.string().optional().meta(st),status:z.string().optional().meta(st)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi});var uP=z.object({id:z.string().meta(vm),anonymous_id:z.string().optional().meta(st),traits:z.record(z.string(),z.unknown()).optional().meta(vm)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi}),dP=z.object({slot_id:z.string().optional().meta(st),entitlement_handle:z.string().optional().meta(st),plan_handle:z.string().optional().meta(st),placement_handle:z.string().optional().meta(st),visible:z.boolean().meta(st),output:Jh.optional().meta(st),reason_codes:z.array(z.string()).optional().meta(st)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi}),pP=mP,gP=sm.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi}),hP=z.object({segments:z.array(z.string()).optional().meta(st),traits:z.record(z.string(),z.unknown()).optional().meta(vm),usage_balances:z.record(z.string(),z.number()).optional().meta(st)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi});z.object({version:z.literal("1.0.0").meta(st),request_id:z.string().meta(st),tenant_id:z.string().meta(st),evaluated_at:z.string().datetime().meta(st),ttl_seconds:z.number().int().min(0).max(86400).meta(st),user:uP.meta(vm),decisions:z.array(dP).meta(st),entitlements:z.record(z.string(),pP).optional().meta(st),theme:z.record(z.string(),z.unknown()).optional().meta(st),trial_status:gP.optional().meta(st),user_context:hP.optional().meta(vm)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":Li,"x-revturbine-schema-exposure":gi});var {Unrestricted:an}=qe,{Persisted:dD,Transient:hd}=Ne,{Internal:bm}=Ue,fP=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":hd,"x-revturbine-schema-exposure":bm}),Ml=W.merge(le).merge(de).extend({environment_id:z.string().min(1).meta(an),name:Wt.meta(an),description:z.string().max(2e3).optional().meta(an),status:fP.default("draft").meta(an),labels:z.array(z.string()).default([]).meta(an),created_by:z.string().min(1).meta(an),submitted_by:z.string().nullable().default(null).meta({...an,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...an,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...an,readOnly:true}),submitted_at:nn.meta({...an,readOnly:true}),reviewed_at:nn.meta({...an,readOnly:true}),deployed_at:nn.meta({...an,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...an,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...an,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...an,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(an),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(an),review_notes:z.string().max(2e3).optional().meta(an),rejection_reason:z.string().max(2e3).optional().meta(an),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...an,readOnly:true}),bundle:z.string().nullable().default(null).meta({...an,readOnly:true}),metadata:$t.meta(an)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":dD,"x-revturbine-schema-exposure":bm}),Zh=z.object({handle:z.string().meta(an),resource_type:z.string().meta(an),resource_name:z.string().optional().meta(an),action:z.enum(["create","update","delete"]).meta(an),has_conflict:z.boolean().meta(an)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":hd,"x-revturbine-schema-exposure":bm}),_P=z.object({playbook_version_id:z.string().meta(an),entries:z.array(Zh).meta(an),total_entries:z.number().int().min(0).meta(an),total_conflicts:z.number().int().min(0).meta(an),deployable:z.boolean().meta(an)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":hd,"x-revturbine-schema-exposure":bm}),yP=z.object({playbook_version_id:z.string().meta(an),deployed_count:z.number().int().min(0).meta(an),superseded_count:z.number().int().min(0).meta(an),skipped_conflicts:z.number().int().min(0).meta(an),deployed_at:z.string().datetime().meta(an)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":hd,"x-revturbine-schema-exposure":bm});({"/api/playbook-versions/{playbookVersionId}/submit":{post:f({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:Ml}}},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:f({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:Ml}}},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:f({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:Ml}}},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:f({operationId:"deployPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({force:z.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:yP}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:f({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:Ml}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:f({operationId:"previewPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Preview diff of all entries vs current state (dry-run deploy)",tags:["playbook-versions"],responses:{200:{description:"Diff preview",content:{"application/json":{schema:_P}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:f({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:H},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:$(Zh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:f({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:Ml}}},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:f({operationId:"cherryPickEntries",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({handles:z.array(z.string()).min(1),target_playbook_version_id:z.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z.object({copied_count:z.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:Ke}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Je,Pii:gD}=qe,{Persisted:ti}=Ne,{Internal:ni}=Ue,hD=gt(Ye.CustomerOperations,{sdkInput:false,source:jr.Customer}),vP=365,qs=W.merge(le).merge(de).extend({provider_handle:it.meta(Je),provider_type:it.meta(Je),endpoint:z.string().url().max(2048).nullable().default(null).meta(Je),credential_reference:z.string().min(1).max(255).nullable().default(null).meta({...Je,readOnly:true}),environment_id:z.string().min(1).max(200).default("production").meta(Je),health_state:dm.default("unavailable").meta({...Je,readOnly:true}),last_health_check_at:nn.meta({...Je,readOnly:true}),supported_capability_versions:z.record(z.string().min(1).max(100),z.array(z.number().int().min(1)).min(1)).default({}).meta({...Je,readOnly:true}),external_project_id:z.string().min(1).max(255).nullable().default(null).meta(Je),external_workspace_id:z.string().min(1).max(255).nullable().default(null).meta(Je),timeout_ms:z.number().int().min(1).max(12e4).default(1e4).meta(Je),stale_after_ms:z.number().int().min(1).default(3e5).meta(Je),unavailable_after_failures:z.number().int().min(1).max(100).default(3).meta(Je)}).meta({id:"ProviderConnection","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni,...hD}),bP=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),xm=W.merge(le).merge(de).extend({name:Wt.meta(Je),key_hash:z.string().min(1).meta({...gD,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...Je,readOnly:true}),key_last4:z.string().length(4).meta({...Je,readOnly:true}),status:bP.default("active").meta(Je),last_used_at:nn.meta({...Je,readOnly:true}),expires_at:nn.meta(Je)}).meta({id:"ApiKey","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),xP=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),Ds=W.merge(le).merge(de).extend({key:z.string().min(1).max(100).meta(Je),value_type:xP.default("boolean").meta(Je),value:z.string().max(4e3).default("false").meta(Je),description:Ca.meta(Je),enabled:z.boolean().default(true).meta(Je)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),fd=W.merge(le).merge(de).extend({workspace_name:z.string().min(1).max(200).meta(Je),support_email:z.string().email().nullable().default(null).meta(Je),timezone:z.string().max(50).default("UTC").meta(Je),default_currency:z.string().length(3).default("USD").meta(Je),logo_url:z.string().url().nullable().default(null).meta(Je),activity_window_days:z.number().int().min(1).default(tm.window_days).meta(Je),activity_high_min:z.number().int().min(1).default(tm.high_min).meta(Je),activity_medium_min:z.number().int().min(1).default(tm.medium_min).meta(Je),activity_low_min:z.number().int().min(1).default(tm.low_min).meta(Je),analytics_retention_days:z.number().int().min(1).default(vP).meta(Je)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),_d=W.merge(le).merge(de).extend({server_url:z.string().url().max(500).meta(Je),api_token_hint:z.string().max(50).nullable().default(null).meta(Je),allow_write_actions:z.boolean().default(false).meta(Je),enabled_tools:z.array(z.string().max(100)).default([]).meta(Je),enabled:z.boolean().default(false).meta(Je)}).meta({id:"McpConfig","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),Sm=W.merge(le).merge(de).extend({step_key:z.string().min(1).max(100).meta(Je),label:z.string().min(1).max(200).meta(Je),done:z.boolean().default(false).meta(Je),completed_at:nn.meta({...Je,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),SP=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),PP=W.merge(de).extend({environment_id:z.string().min(1).default("production").meta(Je),actor_type:SP.meta(Je),actor_id:z.string().nullable().default(null).meta(Je),action:z.string().min(1).max(120).meta(Je),object_type:z.string().max(120).nullable().default(null).meta(Je),object_id:z.string().max(200).nullable().default(null).meta(Je),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(Je),occurred_at:z.string().datetime().meta({...Je,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),TP=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni}),Pm=W.merge(le).merge(de).merge(Lt).merge(Bt).extend({handle:it.meta({...Je,readOnly:true}),identifier:z.string().min(1).max(200).meta(Je),identifier_type:TP.default("user_id").meta(Je),note:z.string().max(500).nullable().default(null).meta(Je),added_by:z.string().meta(Je)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":ti,"x-revturbine-schema-exposure":ni,...Pr()});({"/api/settings/api-keys":{get:f({operationId:"listApiKeys",requestParams:{query:H},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:$(xm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:f({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:tr(xm)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:xm}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:f({operationId:"revokeApiKey",requestParams:{path:z.object({keyId:z.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:xm}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:f({operationId:"listFeatureFlags",requestParams:{query:H},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:$(Ds)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:f({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:tr(Ds)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:Ds}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:f({operationId:"getFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:Ds}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:f({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Hn(Ds).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:Ds}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:f({operationId:"deleteFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:Ds}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:f({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Hn(fd).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:fd}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:f({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Hn(_d).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:_d}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:f({operationId:"listOnboardingSteps",requestParams:{query:H},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:$(Sm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:f({operationId:"getOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:Sm}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:f({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Hn(Sm).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:Sm}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:f({operationId:"listAuditEvents",requestParams:{query:H},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:$(PP)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:f({operationId:"listPlacementTestUsers",requestParams:{query:H},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:$(Pm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:f({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:tr(Pm)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Pm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:f({operationId:"deletePlacementTestUser",requestParams:{path:z.object({testUserId:z.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:Pm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})},"/api/settings/provider-connections":{get:f({operationId:"listProviderConnections",requestParams:{query:H},summary:"List provider connections for the tenant",tags:["settings"],responses:{200:{description:"Provider connections",content:{"application/json":{schema:$(qs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"list"}}}),post:f({operationId:"createProviderConnection",summary:"Create a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:tr(qs)}}},responses:{201:{description:"Provider connection created",content:{"application/json":{schema:qs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"create",writeSchema:"ProviderConnectionSchema#writable"}}})},"/api/settings/provider-connections/{connectionId}":{get:f({operationId:"getProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Get a provider connection",tags:["settings"],responses:{200:{description:"Provider connection",content:{"application/json":{schema:qs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"get"}}}),put:f({operationId:"updateProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Update a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Hn(qs).partial()}}},responses:{200:{description:"Provider connection updated",content:{"application/json":{schema:qs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"update",writeSchema:"ProviderConnectionSchema#writable"}}}),delete:f({operationId:"deleteProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Delete a provider connection",tags:["settings"],responses:{200:{description:"Provider connection deleted",content:{"application/json":{schema:qs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"delete"}}})}});var {Unrestricted:ve,Pii:ra}=qe,{Persisted:fa,Transient:Qh}=Ne,{Internal:Nr}=Ue,IP=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.merge(le).extend({name:Wt.meta(ve),email:z.string().email().meta(ra),email_verified:z.boolean().default(false).meta(ve),image:z.string().url().nullable().default(null).meta(ra),role:IP.default("user").meta(ve),banned:z.boolean().default(false).meta({...ve,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...ve,readOnly:true}),ban_expires:nn.meta({...ve,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ve,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.merge(le).extend({expires_at:z.string().datetime().meta(ve),token:z.string().min(1).meta({...ra,readOnly:true}),ip_address:z.string().nullable().default(null).meta(ra),user_agent:z.string().nullable().default(null).meta(ra),user_id:z.string().min(1).meta({...ve,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(ve),impersonated_by:z.string().nullable().default(null).meta({...ve,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.merge(le).extend({account_id:z.string().min(1).meta(ve),provider_id:z.string().min(1).meta(ve),user_id:z.string().min(1).meta({...ve,readOnly:true}),access_token:z.string().nullable().default(null).meta({...ra,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...ra,readOnly:true}),id_token:z.string().nullable().default(null).meta({...ra,readOnly:true}),access_token_expires_at:nn.meta({...ve,readOnly:true}),refresh_token_expires_at:nn.meta({...ve,readOnly:true}),scope:z.string().nullable().default(null).meta(ve),password:z.string().nullable().default(null).meta({...ra,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.merge(le).extend({identifier:z.string().min(1).meta(ra),value:z.string().min(1).meta({...ra,readOnly:true}),expires_at:z.string().datetime().meta(ve)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.extend({secret:z.string().min(1).meta({...ra,readOnly:true}),backup_codes:z.string().min(1).meta({...ra,readOnly:true}),user_id:z.string().min(1).meta({...ve,readOnly:true}),verified:z.boolean().default(false).meta({...ve,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.extend({name:Wt.meta(ve),slug:z.string().min(1).max(100).nullable().default(null).meta(ve),logo:z.string().url().nullable().default(null).meta(ve),created_at:z.string().datetime().meta({...ve,readOnly:true}),metadata:z.string().nullable().default(null).meta(ve)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});var Xh=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});var ef=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":Qh,"x-revturbine-schema-exposure":Nr}),tf=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Qh,"x-revturbine-schema-exposure":Nr});z.object({resource:ef,action:tf}).meta({id:"Permission","x-revturbine-schema-persistence":Qh,"x-revturbine-schema-exposure":Nr});var TD=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],ID=["plans","entitlements","placements","targeting","content","experiments"],CD=["plans","entitlements","placements","targeting","content","experiments"],ED=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],kD=["read","create","update","delete","publish","approve","invite","manage_roles"];function yd(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var RD=yd(TD,["read"]),AD=[...RD,...yd(ID,["create","update"])];[...AD,...yd(CD,["publish","approve","delete"])];yd(ED,kD);var wD=ef.options.flatMap(t=>tf.options.map(e=>`${t}:${e}`));z.enum(wD).meta({id:"McpTokenScope","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.extend({organization_id:z.string().min(1).meta({...ve,readOnly:true}),user_id:z.string().min(1).meta({...ve,readOnly:true}),role:Xh.default("viewer").meta(ve),created_at:z.string().datetime().meta({...ve,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});var CP=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.extend({organization_id:z.string().min(1).meta({...ve,readOnly:true}),email:z.string().email().meta(ra),role:Xh.nullable().default(null).meta(ve),status:CP.default("pending").meta(ve),expires_at:z.string().datetime().meta(ve),created_at:z.string().datetime().meta({...ve,readOnly:true}),inviter_id:z.string().min(1).meta({...ve,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.extend({name:z.string().max(200).nullable().default(null).meta(ve),public_key:z.string().min(1).meta({...ra,readOnly:true}),user_id:z.string().min(1).meta({...ve,readOnly:true}),credential_id:z.string().min(1).meta({...ve,readOnly:true}),counter:z.number().int().default(0).meta({...ve,readOnly:true}),device_type:z.string().min(1).meta(ve),backed_up:z.boolean().default(false).meta(ve),transports:z.string().nullable().default(null).meta(ve),created_at:z.string().datetime().meta({...ve,readOnly:true}),aaguid:z.string().nullable().default(null).meta(ve)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.merge(le).extend({config_id:z.string().min(1).meta(ve),name:z.string().max(200).nullable().default(null).meta(ve),start:z.string().nullable().default(null).meta(ve),reference_id:z.string().min(1).meta(ve),prefix:z.string().nullable().default(null).meta(ve),key:z.string().min(1).meta({...ra,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(ve),refill_amount:z.number().int().nullable().default(null).meta(ve),last_refill_at:nn.meta({...ve,readOnly:true}),enabled:z.boolean().default(true).meta(ve),rate_limit_enabled:z.boolean().default(false).meta(ve),rate_limit_time_window:z.number().int().nullable().default(null).meta(ve),rate_limit_max:z.number().int().nullable().default(null).meta(ve),request_count:z.number().int().default(0).meta({...ve,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...ve,readOnly:true}),last_request:nn.meta({...ve,readOnly:true}),expires_at:nn.meta(ve),permissions:z.string().nullable().default(null).meta(ve),metadata:z.string().nullable().default(null).meta(ve)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});W.extend({issuer:z.string().min(1).meta(ve),oidc_config:z.string().nullable().default(null).meta(ve),saml_config:z.string().nullable().default(null).meta(ve),user_id:z.string().min(1).meta({...ve,readOnly:true}),provider_id:z.string().min(1).meta(ve),organization_id:z.string().nullable().default(null).meta(ve),domain:z.string().min(1).meta(ve)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":fa,"x-revturbine-schema-exposure":Nr});var LD=15,ND=11;async function RP(t){let e=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(e),n=>n.toString(16).padStart(2,"0")).join("")}function EP(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var Fl=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function VD(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new Fl("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!EP(n))throw new Fl("missing_schema_version",'Playbook payload: missing non-negative integer "bundle_schema_version" \u2014 refusing an unversioned payload');let r=e.bundle_min_readable_schema_version;if(r===void 0)return {schemaVersion:n,minReadableSchemaVersion:n};if(!EP(r)||r>n)throw new Fl("malformed_envelope",`Playbook payload: "bundle_min_readable_schema_version" (${String(r)}) must be a non-negative integer \u2264 bundle_schema_version (${n})`);return {schemaVersion:n,minReadableSchemaVersion:r}}function AP(t,e){let n=LD,r=ND,a=VD(t);if(a.minReadableSchemaVersion>n)throw new Fl("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${a.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(a.schemaVersion>n)throw new Fl("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${a.schemaVersion} (reader supports ${r}..${n})`);if(a.schemaVersion<r)throw new Fl("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${a.schemaVersion} (reader supports ${r}..${n})`);return a}var wP=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),kP=z.string().datetime({offset:true}),BD=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),nf=z.object({url:z.string().min(1),sha256:wP,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),zD=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:BD}).strict(),KD=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z.object({manifest_version:KD,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:nf,standby:nf.optional(),previous:nf.optional(),not_before:kP,expires_at:kP,rollback_to:wP.optional(),signature:zD.optional()}).strict().refine(t=>Date.parse(t.not_before)<=Date.parse(t.expires_at),{message:"not_before must be <= expires_at",path:["expires_at"]});var $D=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]),Ll=class{constructor(){j(this,"types",new Map);j(this,"surfaceIndex",new Map);}register(e){let n=this.types.get(e.id);n&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousSurfaceType:n.surfaceType,nextSurfaceType:e.surfaceType});let r={...e,priority:e.priority??0,accepts:e.accepts??(i=>i.surface.type===e.surfaceType)};this.types.set(r.id,r);let a=this.surfaceIndex.get(r.surfaceType)??[];a.includes(r.id)||(a.push(r.id),this.surfaceIndex.set(r.surfaceType,a));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.surfaceIndex.get(n.surfaceType);if(r){let a=r.filter(i=>i!==e);a.length>0?this.surfaceIndex.set(n.surfaceType,a):this.surfaceIndex.delete(n.surfaceType);}return true}get(e){return this.types.get(e)}resolve(e){if(e.surface.template){let a=this.types.get(e.surface.template);if(a)return a}let r=(this.surfaceIndex.get(e.surface.type)??[]).map(a=>this.types.get(a)).filter(a=>a!=null).sort((a,i)=>i.priority-a.priority);for(let a of r)if(a.accepts?.(e))return a;return this.types.get("custom")}listAll(){return Array.from(this.types.values())}listBySurfaceType(e){return (this.surfaceIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}has(e){return this.types.has(e)}};function jP(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=i=>{if(typeof i=="number"&&Number.isFinite(i))return i;if(typeof i=="string"&&i.trim().length>0){let s=Number(i);if(Number.isFinite(s))return s}},a=i=>{let s="_usage_remaining";if(i==="usage_remaining"){let I=r(e.usage_current??e.current_usage),w=r(e.usage_limit);return I!==void 0&&w!==void 0?Math.max(0,w-I):void 0}if(!i.endsWith(s))return;let u=i.slice(0,-s.length);if(!u)return;let y=r(e[`${u}_usage_current`]),k=r(e[`${u}_usage_limit`]);if(!(y===void 0||k===void 0))return Math.max(0,k-y)};return t.replace(/\{\{(\w+)\}\}/g,(i,s)=>{let u=n[s]??s,y=e[u];if(y!=null)return String(y);let k=a(u);return k!=null?String(k):`{{${s}}}`})}function HD(t,e){let n={};for(let[r,a]of Object.entries(t))typeof a=="string"?n[r]=jP(a,e):n[r]=a;return n}function GD(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,a]of Object.entries(t))$D.has(r)||(n[r]=a);return {type:e,plan_handle:typeof t.plan_handle=="string"?t.plan_handle:void 0,promotion_id:typeof t.promotion_id=="string"?t.promotion_id:void 0,placement_handle:typeof t.placement_handle=="string"?t.placement_handle:void 0,url:typeof t.url=="string"?t.url:void 0,tour_id:typeof t.tour_id=="string"?t.tour_id:void 0,...Object.keys(n).length>0?{params:n}:{}}}function YD(t){if(t)return {id:typeof t.id=="string"?t.id:"",name:typeof t.name=="string"?t.name:void 0,discount:typeof t.discount=="string"?t.discount:void 0,type:typeof t.type=="string"?t.type:void 0,status:typeof t.status=="string"?t.status:void 0}}var Tm=null,rf=null;function qP(t){}function WD(){return Tm||(Tm=new Ll,rf),Tm}function JD(){Tm=null;}var sf=class{constructor(){j(this,"resolvers",new Map);}register(e,n){this.resolvers.has(e)&&console.warn(`[RevTurbine] Replacing existing CTA resolver for action type "${e}".`),this.resolvers.set(e,n);}unregister(e){return this.resolvers.delete(e)}get(e){return this.resolvers.get(e)}has(e){return this.resolvers.has(e)}clear(){this.resolvers.clear();}},af=null;function DP(){return af||(af=new sf),af}function UP(t,e=DP()){let n=new Map;for(let[r,a]of Object.entries(t)){if(e.has(r))continue;let i=(s,u)=>{let y=u.placement.cta_path??u.placement.ui_path??{};Promise.resolve().then(()=>a(y)).catch(k=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,k);});};e.register(r,i),n.set(r,i);}return ()=>{for(let[r,a]of n)e.get(r)===a&&e.unregister(r);}}function MP(t,e=DP()){if(e.has("snooze"))return ()=>{};let n=(r,a)=>{let i=a.placement,s=typeof i.remind_later_minutes=="number"?i.remind_later_minutes:void 0;t(a.placement.output_id,s!==void 0?s*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}var Im={recommended_plan_handle:"",recommended_plan_name:""};function FP(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:a}=t;if(a.length===0)return Im;if(e==="custom"){let u=n??"";if(u===""||u===r)return Im;let y=a.find(k=>k.unique_handle===u);return y?{recommended_plan_handle:y.unique_handle,recommended_plan_name:y.name}:Im}if(r==="")return Im;let i=Zd(r,a);if(i===null)return Im;let s=a.find(u=>u.unique_handle===i);return {recommended_plan_handle:i,recommended_plan_name:s?.name??i}}var of="0123456789ABCDEFGHJKMNPQRSTVWXYZ",bd=of.length,ZD=bd-1,QD=10,vd=16;function XD(t){let e=t,n="";for(let r=0;r<QD;r+=1){let a=e%bd;n=of[a]+n,e=Math.floor(e/bd);}return n}function LP(){let t=new Uint8Array(vd);crypto.getRandomValues(t);let e=new Array(vd);for(let n=0;n<vd;n+=1)e[n]=t[n]%bd;return e}function eU(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<ZD)return t[e]+=1,true;t[e]=0;}return false}function NP(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===vd?eU(e)||(t+=1,e=LP()):(t=n,e=LP());let r=XD(t);for(let a=0;a<e.length;a+=1)r+=of[e[a]];return r}}}var lf=NP();var tU=new Set([408,429,500,502,503,504]);function nU(t){return new Promise(e=>setTimeout(e,t))}async function cf(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,a=e.sleep??nU,i;for(let s=0;s<=n;s+=1){try{let u=await t();if(u.ok)return {delivered:!0,status:u.status,attempts:s+1};if(!tU.has(u.status))return {delivered:!1,status:u.status,attempts:s+1};i=new Error(`ingest_status_${u.status}`);}catch(u){i=u instanceof Error?u:new Error(String(u));}s<n&&await a(r*(s+1));}return {delivered:false,error:i,attempts:n+1}}function mf(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function VP(){let t=typeof IntersectionObserver<"u",e=new Map;function n(a,i,s,u){s.fired||(s.fired=true,s.timer!==null&&(clearTimeout(s.timer),s.timer=null),a.io.unobserve(i),a.tracked.delete(i),s.onExposed(u));}function r(a,i){let s=`${a}|${i}`,u=e.get(s);if(u)return u;let y=new Map,I={io:new IntersectionObserver(w=>{let O=e.get(s);if(O)for(let R of w){let A=y.get(R.target);!A||A.fired||(R.isIntersecting?A.minVisibleMs<=0?n(O,R.target,A,"viewport"):A.timer===null&&(A.timer=setTimeout(()=>n(O,R.target,A,"viewport"),A.minVisibleMs)):A.timer!==null&&(clearTimeout(A.timer),A.timer=null));}},{threshold:a,rootMargin:i}),tracked:y};return e.set(s,I),I}return {supported:t,observe(a,i,s){if(!t){let w=false;return Promise.resolve().then(()=>{w||s("render_fallback");}),()=>{w=true;}}let u=i.threshold??.5,y=i.rootMargin??"0px",k=r(u,y),I={onExposed:s,minVisibleMs:i.minVisibleMs??0,timer:null,fired:false};return k.tracked.set(a,I),k.io.observe(a),()=>{I.fired||(I.timer!==null&&(clearTimeout(I.timer),I.timer=null),k.io.unobserve(a),k.tracked.delete(a));}},disconnect(){for(let a of e.values())a.io.disconnect();e.clear();}}}var uf=VP();var GP=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],rU=new Set(GP),aU=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,iU=Vs();function sU(t){iU&&console.warn(t);}var YP=new Set(xu.options),WP=["usage","account_id","email","email_type","plan_handle","plan","trial","payment_failed","payment_at_risk","tiers","entitlements","instances","custom","personalization","derived_config_version","context_hash","derived_computed_at"],BP=new Set(WP);function kY(t,e){return Pd(e,"defineUiPathResolvers(resolvers)")}function Pd(t,e){if(!t)return {};let n={};for(let[r,a]of Object.entries(t)){let i=String(r||"").trim();if(!i)throw new Error(`[RevTurbine] ${e} contains an empty action_type key.`);if(typeof a!="function")throw new Error(`[RevTurbine] ${e} contains a non-function resolver for action_type '${i}'.`);n[i]=a;}return n}var Cm={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function Id(t){return t?.playbook??t?.exportedConfig}function RY(t){return {...t,runtimeMode:"revturbine_server"}}function AY(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function oU(t){let e=Pd(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function wY(t){return oU(t)}function jY(t,e,n={}){return {slotId:t,surfaceType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function OY(t,e={}){return {entitlementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,planHandle:e.planHandle,placementHandle:e.placementHandle}}function qY(t,e={}){return {placementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function Us(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function DY(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function UY(t,e,n){return {eventType:t,payload:e,options:n}}var zP="revturbine:sdk-route-change",os="sdk_validation_warning",lU="revturbine:decision-cache",cU="revturbine:interaction-state",mU="revturbine:presentation-caps",uU="/api/track",dU="/api/sdk/meta",pU="/api/events/interactions",gU="/api/placements/interactions",hU="revturbine-web-sdk",KP="user_context_observed",fU=20,_U=5e3;function JP(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=ZP(t);if(r){let a=r[e];if(typeof a=="string"&&a.trim().length>0)return a}return null}function ZP(t){return xe(t.payload)?t.payload:null}var yU=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function vU(t){let e={};for(let n of yU)e[n]=JP(t,n);return e}var bU=Rg.map(t=>t.prefix),xU=new Set([...kg,...uv]);function SU(t){let e=ic(t);return e===os?"derived":xU.has(e)||bU.some(n=>e.startsWith(n))?"automatic":"explicit"}var PU=["decision_id"];function TU(t){let e={};for(let n of PU)e[n]=JP(t,n);return e}function IU(t){return Gd(t,yf(8))}async function $P(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Zm(new Uint8Array(e))}function yf(t){let e=Math.ceil(t/2),n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let a=0;a<n.length;a+=1){let i=n[a].toString(16).padStart(2,"0");r+=i;}return r.slice(0,t)}function Vr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${yf(16)}`}function xd(){return Bo()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function HP(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function CU(t,e){let n={};for(let[r,a]of Object.entries(e))(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(n[r]=a);return lp(t,n)}function EU(t,e,n){if(t.length===0)return true;let r=new Map;for(let a of t){let i=n.get(a)??"__no_dim__",s=r.get(i)??[];s.push(a),r.set(i,s);}for(let a of r.values())if(!a.some(i=>e.has(i)))return false;return true}var pf=class{constructor(e){j(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},Td=class Td{constructor(e,n,r,a){j(this,"endpoint",e);j(this,"tenantId",n);j(this,"token",r);j(this,"legacyTargetDefaults",a);j(this,"cached");j(this,"etag");j(this,"lastFetchedAt",0);}getExportedConfig(){return this.cached}async refresh(){let e=Date.now();if(this.cached&&e-this.lastFetchedAt<Td.REFRESH_TTL_MS)return this.cached;try{let n=await fetch(`${this.endpoint}/api/sdk/config`,{method:"GET",headers:{accept:"application/json",authorization:`Bearer ${this.token}`,"x-tenant-id":this.tenantId,...this.etag?{"if-none-match":this.etag}:{}}});if(this.lastFetchedAt=e,n.status===304||!n.ok)return this.cached;let r=await n.text(),a=n.headers.get("x-bundle-sha256");if(a&&await RP(new TextEncoder().encode(r))!==a)return this.cached;let i=JSON.parse(r);AP(i);let s=zi(i,"GET /api/sdk/config",this.legacyTargetDefaults);return s&&(this.cached=s,this.etag=n.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};j(Td,"REFRESH_TTL_MS",6e4);var gf=Td,hf=class{constructor(e,n,r){j(this,"cached");j(this,"resolver");j(this,"legacyTargetDefaults");this.resolver=e,this.cached=r,this.legacyTargetDefaults=n;}getExportedConfig(){return this.cached}async refresh(){let e=zi(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},ff=class{constructor(e,n){j(this,"source");j(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return zi(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return zi(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},Em=class Em{constructor(e){j(this,"tenantId");j(this,"apiKey");j(this,"ingestPublicKey");j(this,"environmentId");j(this,"testTraffic");j(this,"analyticsEnabled");j(this,"anonymousTelemetryEnabled");j(this,"previewMode");j(this,"telemetryConsent");j(this,"telemetryCounters",mf());j(this,"maxBatchSize");j(this,"flushIntervalMs");j(this,"flushTimer");j(this,"batchingTeardown",[]);j(this,"anonTelemetryNoticeShown",false);j(this,"piiRedactionWarned",false);j(this,"endpoint");j(this,"runtimeMode");j(this,"endpointOverrides");j(this,"localRuntime");j(this,"localStorageKey");j(this,"mode");j(this,"policy");j(this,"extensionEnabled");j(this,"placementBehaviorOverrides");j(this,"derivedPlacementBehaviorMemo",null);j(this,"providerFailureSlotBehavior");j(this,"uiPathResolvers");j(this,"unbridgeUiPathCtaResolvers",()=>{});j(this,"unregisterBuiltinSnoozeResolver",()=>{});j(this,"persistentStore");j(this,"sessionStore");j(this,"anonymousId");j(this,"sessionId");j(this,"decisionCache",new Map);j(this,"interactionState",new Map);j(this,"interactionQueue",[]);j(this,"defaultDecisionTtlMs",6e4);j(this,"defaultDismissCooldownMs",1440*60*1e3);j(this,"dismissCooldownDefaultMs",10080*60*1e3);j(this,"defaultRemindLaterMs",3600*1e3);j(this,"defaultUsageWarningPercent",80);j(this,"defaultTrialExpiringDays",3);j(this,"events",[]);j(this,"placements",new Map);j(this,"syncedSurfaceSlotIds",new Set);j(this,"userContext");j(this,"pageContext");j(this,"clientContextToken");j(this,"clientSessionProvider");j(this,"retriedClientContextAfterMint",false);j(this,"serverUserContextProvider");j(this,"lastServerContextHash");j(this,"usageBalances",{});j(this,"localDecisionsByPlacementId",new Map);j(this,"localPlacementsByLookupKey",new Map);j(this,"localEntitlementsByHandle",new Map);j(this,"localUserContextsByUserId",new Map);j(this,"localTrialStatus",{in_trial:false});j(this,"presentationCapsByKey",new Map);j(this,"usageLimitByEntitlement",new Map);j(this,"usageTokenPrefixByEntitlement",new Map);j(this,"segmentIdsByPredicateField",new Map);j(this,"configuredSegmentsById",new Map);j(this,"dirtySegmentIds",new Set);j(this,"segmentMembershipBySegmentId",new Map);j(this,"segmentMembershipUserId");j(this,"lastTrialTriggerStage","none");j(this,"configProvider");j(this,"branding");j(this,"apiBranding");j(this,"cachedPlacementResolver");j(this,"cachedPlacementResolverConfig");j(this,"sdkDisabledByProviderFailure",false);j(this,"sdkDisabledReason");j(this,"providerRegistry");j(this,"placementTypeRegistry");j(this,"impressionHistory");j(this,"emittedResolutionDiagnostics",new Set);j(this,"emittedSdkErrors",new Set);j(this,"reportedUnrecognizedContextKeys",new Set);j(this,"userContextListeners",new Set);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.testTraffic=e.test===true,this.analyticsEnabled=e.analytics!==false,this.anonymousTelemetryEnabled=e.anonymousTelemetry!==false,this.previewMode=e.previewMode===true,this.telemetryConsent=e.telemetry?.consent??"granted",this.maxBatchSize=Math.max(1,e.eventBatching?.maxBatchSize??fU),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??_U),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??Cm.Server,this.endpointOverrides=e.endpointOverrides??{},this.localRuntime=e.localRuntime,this.clientSessionProvider=e.clientSession,this.branding=e.branding,this.apiBranding=e.apiBranding,this.configProvider=this.resolveConfigProvider(e),this.localStorageKey=e.localRuntime?.storageKey??`revturbine:${this.tenantId}:local-runtime`,this.mode=e.mode,this.policy={inferUser:e.contextPolicy?.inferUser??true,inferPage:e.contextPolicy?.inferPage??true,routerAutoTrack:e.contextPolicy?.routerAutoTrack??true},this.extensionEnabled=!!e.extension?.enabled,this.placementBehaviorOverrides={...e.placementBehavior},this.providerFailureSlotBehavior=e.providerFailureSlotBehavior??"invisible",this.uiPathResolvers=Pd(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.persistentStore=fs(e.persistentStorage),this.sessionStore=$p(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?HP():{},...e.user||{}},this.pageContext={...this.policy.inferPage?xd():{},...e.page||{},tags:ac(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),xe(e.user)&&"id"in e.user&&(typeof e.user.id!="string"||e.user.id.trim()==="")){console.error("[RevTurbine] init() received a `user` with a blank id; falling back to an anonymous id. Caps, usage attribution and analytics identity will key to that anonymous id, not to your user. Pass a stable internal user id, or omit `user` entirely if the visitor really is signed out.");try{this.capture(os,{reason:"init received a blank user id"});}catch{}}if(this.sessionId=Vr(),this.providerRegistry=new Ec,this.placementTypeRegistry=new Ll,this.impressionHistory=new Lp({store:new du({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),qP(this.placementTypeRegistry),e.domainProviders)for(let n of e.domainProviders)this.providerRegistry.register(n);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=UP(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=MP((n,r)=>{this.snooze(n,r);}),this.hydrateDecisionCache(),this.hydrateInteractionState(),this.hydratePresentationCaps(),this.hydrateLocalRuntimeState(),this.impressionHistory.hydrate(),this.rebuildSegmentPredicateFieldIndex(),this.refreshExportedConfigSnapshot(),this.recalculateDerivedUsageTraits(),Yr()&&this.policy.routerAutoTrack&&this.installRouteTracking(),Yr()&&this.extensionEnabled&&this.installBridge(),this.capture("page_view",{mode:this.mode,runtime_mode:this.runtimeMode,source:"sdk_init",placement_behavior_flags:this.placementBehavior}),this.startEventBatchFlushing(),this.emitSdkInitTelemetry(),this.autoFetchClientContext();}isLocalOnlyMode(){return this.runtimeMode===Cm.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new ff(e.configProvider,n);let r=zi(Id(e.localRuntime),"localRuntime.playbook",n),a=e.localRuntime?.resolvers?.resolveExportedConfig;if(a)return new hf(a,n,r);if(r)return new pf(r);let i=e.runtimeMode??Cm.Server,s=e.ingestPublicKey??e.apiKey;if(i!==Cm.LocalOnly&&e.endpoint&&s)return new gf(e.endpoint,e.tenantId,s,n)}async refreshExportedConfigSnapshot(){try{await this.configProvider?.refresh?.(),this.rebuildSegmentPredicateFieldIndex();}catch{}}getConfiguredExportedConfig(){return this.configProvider?.getExportedConfig()}get placementBehavior(){let e=this.derivePlacementBehaviorFromPlaybook();return {enableClientCapsEnforcement:this.placementBehaviorOverrides.enableClientCapsEnforcement??e.enableClientCapsEnforcement,enableAutoGatedPlacement:this.placementBehaviorOverrides.enableAutoGatedPlacement??e.enableAutoGatedPlacement,enableTrialAutoTriggers:this.placementBehaviorOverrides.enableTrialAutoTriggers??e.enableTrialAutoTriggers}}derivePlacementBehaviorFromPlaybook(){let e=this.getConfiguredExportedConfig();if(this.derivedPlacementBehaviorMemo&&this.derivedPlacementBehaviorMemo.config===e)return this.derivedPlacementBehaviorMemo.flags;let n=e?.placements??[],i={enableClientCapsEnforcement:[...n.flatMap(s=>s.payloads??[]),...e?.placement_payloads??[]].some(s=>s.caps?.max_per_period!==void 0||s.caps?.cooldown_days!==void 0||s.remind_later_minutes!==void 0&&s.remind_later_minutes!==null),enableAutoGatedPlacement:n.some(s=>s.category==="gated"),enableTrialAutoTriggers:n.some(s=>s.category==="trials")};return this.derivedPlacementBehaviorMemo={config:e,flags:i},i}rebuildSegmentPredicateFieldIndex(){this.segmentIdsByPredicateField.clear(),this.configuredSegmentsById.clear();let n=this.getConfiguredExportedConfig()?.segments??[];for(let r of n)if(this.configuredSegmentsById.set(r.handle,r),!(!r.predicates||r.predicates.length===0))for(let a of r.predicates){let i=String(a.field||"").trim();if(!i)continue;let s=this.segmentIdsByPredicateField.get(i)??new Set;s.add(r.handle),this.segmentIdsByPredicateField.set(i,s);}this.markAllSegmentsDirty();}getOrBuildPlacementResolver(){if(this.localRuntime?.resolvers?.getPlacementDecision)return this.localRuntime.resolvers.getPlacementDecision;let e=this.getConfiguredExportedConfig();if(!e)return;if(this.cachedPlacementResolver&&this.cachedPlacementResolverConfig===e)return this.cachedPlacementResolver;let n=this.localRuntime?.placements??(Array.isArray(e.placements)?{placements:e.placements}:void 0);if(n)return this.cachedPlacementResolver=Co({placements:n,exportedConfig:e,impressionHistory:this.impressionHistory}),this.cachedPlacementResolverConfig=e,this.cachedPlacementResolver}synthesizeProviderContext(){let e=this.userContext.plan,n=this.resolveContextPlanRaw(),r=this.userContext.usage,a=this.localTrialStatus,i=this.userContext.payment_failed,s=this.userContext.payment_at_risk,u=this.userContext.tiers,y=u!==void 0&&Object.keys(u).length>0,k=this.userContext.experiments,I=k!==void 0&&Object.keys(k).length>0;if(!e&&!n&&!r&&!y&&!I)return;let w={};if(r&&typeof r=="object"){let R=vi(r);for(let[A,U]of Object.entries(r)){if(!U||typeof U!="object")continue;let oe=typeof U.amount=="number"?U.amount:R[A]??0,Z=typeof U.limit=="number"?U.limit:0,_e=Z>0?Math.max(0,Z-oe):0;w[A]={used:oe,limit:Z,remaining:_e,unit:typeof U.unit=="string"?U.unit:void 0,reset_date:typeof U.reset_date=="string"?U.reset_date:void 0};}}let O={...a.in_trial!==void 0?{trialActive:a.in_trial}:{},...a.trial_limit_type!==void 0?{trialLimitType:a.trial_limit_type}:{},...a.progress_percent!==void 0?{trialProgressPercent:a.progress_percent}:{},...a.days_remaining!==void 0?{trialDaysRemaining:a.days_remaining}:{},...a.day_number!==void 0&&a.days_remaining!==void 0?{trialDaysTotal:a.day_number+a.days_remaining}:{},...a.state!==void 0?{trialState:a.state}:{},...a.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:a.usage_entitlement_handle}:{},...a.usage_consumed!==void 0?{trialUsageConsumed:a.usage_consumed}:{},...a.usage_limit!==void 0?{trialUsageLimit:a.usage_limit}:{}};return {...e||n?{plan:{currentPlanHandle:n||(e?.handle??""),...e?.name!==void 0?{currentPlanName:e.name}:{},...O,...i!==void 0?{paymentFailed:i}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(w).length>0||y?{entitlements:{entries:{},usage:w,...y?{tiers:u}:{}}}:{},...I?{experiments:{assignments:k}}:{}}}markAllSegmentsDirty(){this.dirtySegmentIds.clear();for(let e of this.configuredSegmentsById.keys())this.dirtySegmentIds.add(e);this.segmentMembershipBySegmentId.clear();}markSegmentsDirtyForFields(e){for(let n of e){let r=this.segmentIdsByPredicateField.get(n);if(r)for(let a of r)this.dirtySegmentIds.add(a);}}toSegmentEvaluationTraits(e,n,r){return iu(e,n,r)}buildTargetingState(e){return su(e,this.getConfiguredExportedConfig(),this.usageBalances)}markSegmentsDirtyFromContextChange(e,n){if(this.configuredSegmentsById.size===0)return;let r=e.id||this.anonymousId,a=n.id||this.anonymousId;if(r!==a){this.segmentMembershipUserId=a,this.markAllSegmentsDirty();return}let i=this.buildTargetingState(e),s=this.buildTargetingState(n),u=new Set,y=new Set([...Object.keys(i.segmentTraits),...Object.keys(s.segmentTraits)]);for(let k of y)i.segmentTraits[k]!==s.segmentTraits[k]&&u.add(k);this.markSegmentsDirtyForFields(u);}currentPathname(){if(this.pageContext.url)try{return new URL(this.pageContext.url).pathname}catch{}return Yr()?window.location.pathname:"/"}disableForProviderFailure(e){this.sdkDisabledByProviderFailure||(this.sdkDisabledByProviderFailure=true,this.sdkDisabledReason=e,this.decisionCache.clear(),this.persistDecisionCache(),console.warn(`[RevTurbine] SDK disabled after provider fallback chain failed: ${e}`));}isDisabledByProviderFailure(){return this.sdkDisabledByProviderFailure}disabledDecisionForPlacement(e,n){let r=this.providerFailureSlotBehavior==="placeholder",a=r?`${n??e} temporarily unavailable`:`${n??e} unavailable`,i=r?"This placement is in safe fallback mode because all configured providers failed.":"This placement is currently hidden because provider fallback resolution failed.";return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",placement_handle:e}),{placementId:e,requestId:Vr(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:Us(a,i,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let n=`disabled_output_${Vr()}`,r=e.slotId?`${e.slotId} temporarily unavailable`:"Placement temporarily unavailable";return {output_id:n,category:"fallback",surface:{type:e.surfaceType??"banner",slot_id:e.slotId},content:{title:r,header:r,body:"This placement is in safe fallback mode because all configured providers failed.",cta_label:"Retry later"},rule_id:"sdk_disabled_provider_failure",decision_id:n,config_version:"sdk-fallback",present_upsell:false}}hasEndpointOverride(e){let n=this.endpointOverrides[e];return typeof n=="string"&&n.trim().length>0}endpointFor(e,n){let r=this.endpointOverrides[e];return r&&r.trim().length>0?/^https?:\/\//i.test(r)?r:`${this.endpoint}${r.startsWith("/")?"":"/"}${r}`:`${this.endpoint}${n}`}localPlacementLookupKey(e){return pp(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId||n.surfaceType&&e.surfaceType&&e.surfaceType!==n.surfaceType)return false;let r=(a,i)=>!a||!i?true:a===i;return r(n.entitlementHandle,e.entitlementHandle)&&r(n.planHandle,e.planHandle)&&r(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return Jd(e,n.planHandle)}applyCategoryConflictSuppression(e){return eu(e)}resolveLocalPlacementFromCandidates(e,n){return hp(e,true,{fixedOnly:n?.fixedOnly??false})}localPlacementForConfig(e){let n=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey(e));if(n&&!this.localOutputMatchesConfig(n,e))return null;let r=[];for(let[a,i]of this.localPlacementsByLookupKey.entries()){if(!i)continue;let s=Wd(a);this.localLookupMatchesConfig(s,e)&&this.localOutputMatchesConfig(i,e)&&r.push(i);}return n&&!r.some(a=>a.output_id===n.output_id)&&r.push(n),this.resolveLocalPlacementFromCandidates(r,e)}hydrateLocalRuntimeState(){if(!this.isLocalOnlyMode())return;let e=this.localRuntime?.initialData;if(e?.placementDecisionsByPlacementId)for(let[r,a]of Object.entries(e.placementDecisionsByPlacementId))this.localDecisionsByPlacementId.set(r,a);if(e?.placementsByLookupKey)for(let[r,a]of Object.entries(e.placementsByLookupKey))this.localPlacementsByLookupKey.set(r,a);if(e?.entitlementByHandle)for(let[r,a]of Object.entries(e.entitlementByHandle))this.localEntitlementsByHandle.set(r,a);if(e?.userContextByUserId)for(let[r,a]of Object.entries(e.userContextByUserId))this.localUserContextsByUserId.set(r,a);e?.trialStatus&&(this.localTrialStatus=e.trialStatus);let n=this.persistentStore.getItem(this.localStorageKey);if(!n){this.persistLocalRuntimeState();return}try{let r=JSON.parse(n);r.userContext&&(this.userContext=this.mergeUserContext(r.userContext)),r.pageContext&&(this.pageContext=this.mergePageContext(r.pageContext)),r.usageBalances&&(this.usageBalances={...this.usageBalances,...r.usageBalances});for(let a of r.placements||[])this.placements.set(a.id,a);for(let[a,i]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(a,i);for(let[a,i]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(a,i);for(let[a,i]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(a,i);for(let[a,i]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(a,i);r.trialStatus&&(this.localTrialStatus=r.trialStatus);}catch{this.persistentStore.removeItem(this.localStorageKey),this.persistLocalRuntimeState();}}persistLocalRuntimeState(){if(this.isLocalOnlyMode())try{let e={userContext:this.userContext,pageContext:this.pageContext,usageBalances:this.usageBalances,placements:Array.from(this.placements.values()),decisions:Object.fromEntries(this.localDecisionsByPlacementId.entries()),placementLookup:Object.fromEntries(this.localPlacementsByLookupKey.entries()),entitlements:Object.fromEntries(this.localEntitlementsByHandle.entries()),userContexts:Object.fromEntries(this.localUserContextsByUserId.entries()),trialStatus:this.localTrialStatus};this.persistentStore.setItem(this.localStorageKey,JSON.stringify(e));}catch{}}decisionCacheStorageKey(){return `${lU}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${cU}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${mU}:${this.tenantId}:${this.anonymousId}`}hydrateDecisionCache(){let e=this.sessionStore.getItem(this.decisionCacheStorageKey());if(e)try{let n=JSON.parse(e),r=Date.now();Object.entries(n).forEach(([a,i])=>{!i||typeof i!="object"||!Number.isFinite(i.expiresAt)||i.expiresAt<=r||this.decisionCache.set(a,i);});}catch{this.sessionStore.removeItem(this.decisionCacheStorageKey());}}persistDecisionCache(){let e=Date.now(),n=Object.fromEntries(Array.from(this.decisionCache.entries()).filter(([,r])=>r.expiresAt>e));try{this.sessionStore.setItem(this.decisionCacheStorageKey(),JSON.stringify(n));}catch{}}hydrateInteractionState(){let e=this.persistentStore.getItem(this.interactionStateStorageKey());if(e)try{let n=JSON.parse(e);Object.entries(n).forEach(([r,a])=>{!a||typeof a!="object"||this.interactionState.set(r,a);});}catch{this.persistentStore.removeItem(this.interactionStateStorageKey());}}persistInteractionState(){let e=Object.fromEntries(this.interactionState.entries());try{this.persistentStore.setItem(this.interactionStateStorageKey(),JSON.stringify(e));}catch{}}hydratePresentationCaps(){let e=this.persistentStore.getItem(this.presentationCapsStorageKey());if(e)try{let n=JSON.parse(e);for(let[r,a]of Object.entries(n)){if(!a||typeof a!="object")continue;let i=Array.isArray(a.seenAt)?a.seenAt.filter(u=>Number.isFinite(u)&&u>0):[],s=Number.isFinite(a.cooldownUntil)?a.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:i,cooldownUntil:s});}}catch{this.persistentStore.removeItem(this.presentationCapsStorageKey());}}persistPresentationCaps(){try{let e=Object.fromEntries(this.presentationCapsByKey.entries());this.persistentStore.setItem(this.presentationCapsStorageKey(),JSON.stringify(e));}catch{}}resolveContextPlanRaw(){let e=this.userContext.plan_handle;if(typeof e=="string"&&e.trim())return e.trim();let n=this.userContext.plan;return xe(n)&&typeof n.handle=="string"&&n.handle.trim()?n.handle.trim():""}activePlanIdentifiers(e){let n=this.resolveContextPlanRaw(),r=String(n||"").toLowerCase(),a=new Set;if(!r)return a;a.add(r);for(let i of e.plans??[]){let s=typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"";s===r&&a.add(s);}return a}ruleTargetsActivePlan(e,n){let a=(Array.isArray(e.targets)?e.targets:[]).filter(i=>xe(i)&&i.kind==="plan");return a.length===0?true:a.some(i=>typeof i.id=="string"&&n.has(i.id.toLowerCase()))}hydrateUsageLimitRulesFromExportedConfig(){let e=this.getConfiguredExportedConfig();if(!e)return;this.usageLimitByEntitlement.clear();let n=this.activePlanIdentifiers(e),r=new Map,a=e.entitlements??[];for(let s of a){let u=typeof s.unique_handle=="string"?s.unique_handle:"";u&&r.set(u,u);}let i=e.entitlement_rules??[];for(let s of i){if(!xe(s))continue;let u=typeof s.entitlement_id=="string"?s.entitlement_id:"";if(!u)continue;let y=typeof s.kind=="string"?s.kind:"";if(!(y==="usage_limit"||y==="credits"||y==="seat"))continue;let I=r.get(u)??"",w=typeof s.unit=="string"?s.unit:"",O=Qd(w),R=O&&!Xd(O)?O:So(I||u);R&&(this.usageTokenPrefixByEntitlement.set(u,R),I&&this.usageTokenPrefixByEntitlement.set(I,R));let A=Number(s.limit_value??s.allowance_value);if(!Number.isFinite(A)||A<=0||!this.ruleTargetsActivePlan(s,n))continue;let U=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(u,{limit:A,warningPercent:U}),I&&this.usageLimitByEntitlement.set(I,{limit:A,warningPercent:U});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=Tp({context:this.userContext,exportedConfig:e,usageBalances:this.usageBalances,usageTokenPrefixByEntitlement:this.usageTokenPrefixByEntitlement,usageThresholdLookup:a=>this.usageThresholdForEntitlement(a)}),r=this.deriveRecommendedPlanTokens(e);this.userContext={...this.userContext,personalization:{...n,...r}};}deriveRecommendedPlanTokens(e,n){let r={recommended_plan_handle:"",recommended_plan_name:""};if(!e?.plans?.length)return r;let a=this.resolveContextPlanRaw(),i=String(a||"").toLowerCase(),s=e.plans.map(u=>({source_id:u.unique_handle,unique_handle:u.unique_handle,name:u.name,tier_position:u.tier_position??0,sort_order:u.sort_order??0}));return FP({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:i,plans:s})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[a,i]of Object.entries(r))a!=="user_id"&&(typeof i=="string"||typeof i=="number")&&(n[a]=i);if(n.plan_name===void 0){let a=Bs(this.getConfiguredExportedConfig(),this.userContext.plan);a?n.plan_name=a:typeof this.userContext.plan=="object"&&this.userContext.plan?.name&&(n.plan_name=this.userContext.plan.name);}if(e?.recommendation_strategy){let a=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig(),{strategy:e.recommendation_strategy,planOverride:e.recommendation_plan_override??void 0});n.recommended_plan_handle=a.recommended_plan_handle,n.recommended_plan_name=a.recommended_plan_name;}return n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...vi(this.userContext.usage),...this.usageBalances},n={};for(let[r,a]of Object.entries(e)){if(!Number.isFinite(a))continue;let i=this.usageTokenPrefixByEntitlement.get(r)??So(r)??r,s=this.usageThresholdForEntitlement(r);n[i]={current:a,...s?.limit!==void 0?{limit:s.limit}:{}};}return n}getPolicy(){let e=this.getConfiguredExportedConfig();return {contextPolicy:this.policy,placementBehavior:this.placementBehavior,runtimeMode:this.runtimeMode,...typeof e?.format_version=="string"?{exportedConfigVersion:e.format_version}:{}}}getBranding(){return Vp({explicit:this.branding,legacyConfigTheme:this.getConfiguredExportedConfig()?.theme,apiBranding:this.apiBranding})}setApiBranding(e){this.apiBranding=e;}deriveLocalEntitlementFromConfiguredRules(e,n){let r=this.getConfiguredExportedConfig();if(!r)return null;let a=this.resolveContextPlanRaw(),i=String(a||"").toLowerCase(),s=this.getTargeting(),u=new Set(s.segmentIds??[]),{trialGrantedEntitlementHandles:y,effectivePlanHandle:k}=this.resolveReverseTrialGrants(r);return cc({handle:e,context:n,currentPlanHandle:i,segmentIds:u,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,...y!==void 0?{trialGrantedEntitlementHandles:y}:{},...k!==void 0?{effectivePlanHandle:k}:{}})}resolveReverseTrialGrants(e){let n=this.localTrialStatus;if(!n.in_trial||n.trial_type!=="reverse")return {};let r=n.plan_handle;if(!r)return {};let i=(e.reverse_trial_rules??[]).find(s=>s.fallback_plan_id===r&&s.is_active!==false);return !i||i.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(i.entitlements_during_trial),effectivePlanHandle:i.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),a=Bs(r,this.userContext.plan),i=a??n?.plan??(this.resolveContextPlanRaw()||void 0),s=[...r?.segments??[]],u=Array.from(new Set(s.flatMap(O=>(O.predicates??[]).map(R=>R.field)))).sort(),y={...n?.traits??{},...this.userContext.custom??{}};for(let[O,R]of Object.entries(this.userContext.entitlements??{}))y[O]===void 0&&(y[O]=R);a&&y.plan_name===void 0&&(y.plan_name=a),i&&y.plan===void 0&&(y.plan=i);let k={...n?.usage??{},...vi(this.userContext.usage),...this.usageBalances};for(let[O,R]of Object.entries(k))y[O]===void 0&&(y[O]=R);let I={};for(let[O,R]of Object.entries(y))(typeof R=="string"||typeof R=="number"||typeof R=="boolean")&&(I[O]=R);if(this.segmentMembershipUserId!==e&&(this.segmentMembershipUserId=e,this.markAllSegmentsDirty()),s.length>0&&this.segmentIdsByPredicateField.size===0&&this.rebuildSegmentPredicateFieldIndex(),s.length>0&&this.dirtySegmentIds.size>0){for(let O of this.dirtySegmentIds){let R=this.configuredSegmentsById.get(O)??s.find(U=>U.handle===O);if(!R){this.segmentMembershipBySegmentId.delete(O);continue}let A=uc([R],I).length>0;this.segmentMembershipBySegmentId.set(O,A);}this.dirtySegmentIds.clear();}let w=s.length>0?s.filter(O=>this.segmentMembershipBySegmentId.get(O.handle)===true).map(O=>O.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:w,traits:y,...i?{plan:i}:{},...Object.keys(k).length>0?{usage:k}:{},configuredSegments:s,configuredTraitFields:u}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),a=this.getEntitlements(),i=this.getPolicy(),s=this.getConfiguredExportedConfig(),u=new Set(r.segmentIds),y=r.configuredSegments.map(be=>{let xt=Array.isArray(be.predicates)?be.predicates.map(wn=>CU(wn,r.traits)):[],gn=xt.length>0?xt.every(wn=>wn.matched):u.has(be.handle);return {segmentId:be.handle,...be.name?{segmentName:be.name}:{},matched:gn,predicates:xt}}),k=new Map,I=new Map;if(Array.isArray(s?.entitlements))for(let be of s.entitlements){let xt=ar(be.unique_handle),gn=xt;gn&&xt&&k.set(gn,xt);let wn=ar(be.type);gn&&wn&&I.set(gn,wn);}let w=new Map;if(Array.isArray(s?.plans))for(let be of s.plans){let xt=ar(be.unique_handle),gn=xt;gn&&xt&&w.set(gn,xt);}let R=(ar(r.traits.plan_handle,r.plan)??"").toLowerCase(),A=new Map;if(Array.isArray(s?.segments))for(let be of s.segments){let xt=ar(be.handle),gn=ar(be.dimension_id);xt&&gn&&A.set(xt,gn);}let U=Array.isArray(s?.entitlement_rules)?s.entitlement_rules.map((be,xt)=>{let gn=ar(be.id)??`entitlement_rule_${xt}`,wn=ar(be.entitlement_id),lt=wn?k.get(wn):void 0,Nn=Array.isArray(be.targets)?be.targets.filter(ct=>ct.kind==="plan").map(ct=>ct.id):[],Rr=Nn.map(ct=>w.get(ct)??ct),Jn=Array.isArray(be.segment_ids)?be.segment_ids.filter(ct=>typeof ct=="string"):[],_n=ar(be.kind),un=!R||Nn.some(ct=>ct.toLowerCase()===R),Vn=EU(Jn,u,A),Tn=un&&Vn,ba=lt?a[lt]:wn?a[wn]:void 0,Dt=Tn?ba?.status??"unknown":"unknown",jn;if(Tn)switch(_n){case "feature":jn=be.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let ct=ar(be.tier_name);jn=ct?`unlocks ${ct} tier`:"unlocks capability tier";break}case "usage_limit":{let ct=typeof be.limit_value=="number"?be.limit_value:void 0,cr=ar(be.unit)??"",Ua=ar(be.period_scope)??"",xa=Ua?` / ${Ua.replace("per_","")}`:"";jn=ct!=null?`sets limit to ${ct.toLocaleString()}${cr?` ${cr}`:""}${xa}`:"sets usage limit";break}case "credits":{let ct=be.allowance_value,cr=typeof ct=="number"?ct:void 0,Ua=ar(be.unit)??"credits",xa=ar(be.reset_period)??"",hn=xa?` / ${xa.replace("per_","")}`:"";jn=cr!=null?`grants ${cr.toLocaleString()} ${Ua}${hn}`:"grants credit allowance";break}case "seat":{let ct=be.included_count,cr=typeof ct=="number"?ct:void 0;jn=cr!=null?`includes ${cr} seat${cr===1?"":"s"}`:"includes seats";break}default:if(wn){let ct=I.get(wn);ct==="feature"?jn="grants access":ct&&(jn=`${ct.replace(/_/g," ")} entitlement`);}break}return {ruleId:gn,...wn?{entitlementId:wn}:{},...lt?{entitlementHandle:lt}:{},..._n?{kind:_n}:{},planScopes:Rr,planIds:Nn,...Jn.length>0?{segmentIds:Jn}:{},matchesPlan:un,matchesSegment:Vn,matched:Tn,outcome:Dt,...jn?{outcomeDescription:jn}:{},...ba?.reason?{reason:ba.reason}:{}}}):[],oe=ar(n.output?.output_id),Z=this.placements.get(e.placementId),_e=ar(Z?.name)??"",De=Array.isArray(Z?.metadata?.surface_template_ids)?Z.metadata.surface_template_ids:[],ne=[],J=new Set;if(Array.isArray(s?.placements))for(let be of s.placements){if(!be||typeof be!="object")continue;let xt=ar(be.id)??"",gn=ar(be.name)??"";if(J.has(xt))continue;let wn=ar(n.output?.rule_id);if(wn&&xt===wn){J.add(xt),ne.push(be);continue}if(_e&&(xt===_e||gn===_e||xt===`pl_${_e}`||gn===`pl_${_e}`)){J.add(xt),ne.push(be);continue}De.length>0&&(be.payloads??[]).some(Rr=>(Rr.surfaces??[]).some(_n=>{let un=ar(_n.template_id);return un?De.includes(un):false}))&&(J.add(xt),ne.push(be));}let ot=ne.flatMap(be=>(be.payloads??[]).map(gn=>{let wn=gn.target,lt=wn?.plan_ids??[],Nn=lt.map(Dt=>w.get(Dt)??Dt),Rr=wn?.segment_chips??[],_n=(gn.surfaces??[]).map(Dt=>ar(Dt.template_id)).filter(Dt=>typeof Dt=="string"),un=lt.length===0||!R||lt.some(Dt=>Dt.toLowerCase()===R),Vn=Rr.length===0||Rr.some(Dt=>u.has(Dt)),Tn="active",ba=Tn==="active"&&un&&Vn;return {payloadId:String(gn.id??""),placementId:String(be.id??""),placementName:String(be.name??""),status:Tn,planIds:lt,planScopes:Nn,segmentChips:Rr,surfaceTemplateIds:_n,matchesPlan:un,matchesSegment:Vn,eligible:ba,selected:!!oe&&oe===String(gn.id??"")}})),Pn=n.output?this.extractPlacementCapPolicies(n.output).flatMap(be=>be.rules.length===0&&be.cooldownMs===void 0?[]:be.rules.length===0?[{count:0,period:"session",cooldownMs:be.cooldownMs}]:be.rules.map(xt=>({count:xt.count,period:xt.period,...be.cooldownMs!==void 0?{cooldownMs:be.cooldownMs}:{}}))):[],An={ruleId:n.output?.rule_id,decisionId:n.output?.decision_id,category:n.output?.category,suppressionReason:n.suppressionReason,reasonCodes:n.reasonCodes,capPolicies:Pn};return {generatedAt:new Date().toISOString(),input:e,decision:n,targeting:r,policy:i,entitlements:a,segments:y,entitlementRules:U,eligiblePayloads:ot,placementRules:An}}usageThresholdForEntitlement(e){return sp(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return Ip(e,n,a=>this.usageThresholdForEntitlement(a)).map(a=>this.emitTrigger(a.type,{entitlement_handle:a.entitlement_handle,current_usage:a.current_usage,usage_limit:a.usage_limit,usage_percent:a.usage_percent,threshold:a.threshold}))}deriveTrialTriggerStage(e){return Cp(e,this.lastTrialTriggerStage,this.defaultTrialExpiringDays)}async evaluateTrialLifecycleTriggers(e){let n=this.deriveTrialTriggerStage(e);if(!this.placementBehavior.enableTrialAutoTriggers){this.lastTrialTriggerStage=n;return}if(n!==this.lastTrialTriggerStage){if(this.lastTrialTriggerStage=n,n==="midpoint"){await this.emitTrigger("trial_midpoint",{days_remaining:e.days_remaining});return}if(n==="expiring"){await this.emitTrigger("trial_expiring",{days_remaining:e.days_remaining});return}n==="expired"&&await this.emitTrigger("trial_expired",{days_remaining:0});}}resolveAnonymousId(){let e=`revturbine:${this.tenantId}:anon`;try{let n=this.persistentStore.getItem(e);if(n)return n;let r=Vr();return this.persistentStore.setItem(e,r),r}catch{return Vr()}}installBridge(){let e={getSnapshot:()=>({tenantId:this.tenantId,user:this.userContext,page:this.pageContext,placements:Array.from(this.placements.values())}),setPageContext:n=>{this.setPageContext(n);},setUserContext:n=>{this.setUserContext(n);}};window.__RT_SDK_BRIDGE__=e;}installRouteTracking(){if(Bo())return;let e=window.history;if(e.__rtPatched)return;let n=()=>{window.dispatchEvent(new CustomEvent(zP,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...i)=>{r(...i),n();});let a=e.replaceState.bind(e);e.replaceState=((...i)=>{a(...i),n();}),window.addEventListener("popstate",n),window.addEventListener(zP,i=>{let s=i.detail;this.onRouteChange({path:s.path,title:s.title,tags:s.tags});}),e.__rtPatched=true;}mergeUserContext(e,n="setUserContext"){let r="plan"in e?{...e,plan:this.rejectLegacyPlanId(n,e.plan)}:e;return Sp(this.userContext,r)}mergePageContext(e){return {...this.pageContext,...e,tags:ac(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?xd():{},...this.pageContext},r=String(n.url||"").trim();if(!r)e.push({code:"invalid_page_context_url",reason:"Page context URL is missing."});else try{new URL(r);}catch{e.push({code:"invalid_page_context_url",reason:"Page context URL is not a valid absolute URL.",details:{value:r}});}return n.tags&&!Array.isArray(n.tags)&&e.push({code:"invalid_page_context_tags",reason:"Page tags must be an array of strings."}),e}collectPayloadIssues(e){let n=[];if(!xe(e))return n.push({code:"invalid_event_payload",reason:"Event payload must be a plain object."}),n;let r=ZP(e),a=typeof e.placement_id=="string"&&e.placement_id.trim()?e.placement_id:typeof r?.placement_id=="string"?r.placement_id:null;return typeof a=="string"&&a.trim()&&(this.placements.has(a)||n.push({code:"unknown_placement_id",reason:"Payload placement_id is not registered in SDK runtime.",details:{placement_id:a}})),n}buildValidationWarningEvent(e,n,r){return this.toEventEnvelope(os,{source_event_type:e,warning_count:n.length,warning_codes:n.map(a=>a.code),warnings:n,page_context:{url:this.pageContext.url??null,title:this.pageContext.title??null},payload_snapshot:xe(r)?r:null})}toEventEnvelope(e,n){let r={...this.policy.inferPage?xd():{},...this.pageContext},a=r.url||(Yr()?window.location.href:""),i=(()=>{try{return new URL(a).pathname}catch{return Yr()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:a,path:i,page_title:r.title||(Yr()?document.title:""),event_time:new Date().toISOString(),anonymous_id:this.anonymousId,user_id:this.userContext.id||null,session_id:this.sessionId,tags:ac(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===KP?{}:{...this.userContext.custom||{}}},properties:n}}warnPiiRedactedOnce(){this.piiRedactionWarned||(this.piiRedactionWarned=true,console.warn("[RevTurbine] Detected and redacted PII-shaped values (emails / card numbers) from event data before sending. Do not put PII in event properties or traits; this is best-effort redaction, not a guarantee."));}anonymousTelemetryActive(){return !this.ingestPublicKey&&this.anonymousTelemetryEnabled&&!this.previewMode&&Yr()}diagnosticTelemetryActive(){return this.anonymousTelemetryEnabled&&this.analyticsEnabled&&!this.previewMode&&Yr()}emitResolutionFailure(e){if(!this.diagnosticTelemetryActive())return;let n=`${e.reason}|${e.placement_handle??e.entitlement_handle??""}`;this.emittedResolutionDiagnostics.has(n)||this.emittedResolutionDiagnostics.size>=Em.RESOLUTION_DIAGNOSTIC_SESSION_CAP||(this.emittedResolutionDiagnostics.add(n),this.postAnonMeta("resolution_failure",e));}reportSdkError(e,n){if(this.diagnosticTelemetryActive()&&!this.emittedSdkErrors.has(e)&&!(this.emittedSdkErrors.size>=Em.RESOLUTION_DIAGNOSTIC_SESSION_CAP)){this.emittedSdkErrors.add(e);try{this.postAnonMeta("sdk_error",n?{reason:e,message:n}:{reason:e});}catch{}}}async emitSdkInitTelemetry(){this.anonymousTelemetryActive()&&await this.emitAnonMeta("sdk_init",{config_shape:this.computeConfigShape()});}computeConfigShape(){let e=this.getConfiguredExportedConfig();if(!e)return;let n=e.placements??[],r=n.reduce((a,i)=>a+(i.payloads?.length??0),0);return {plans:e.plans?.length??0,entitlements:e.entitlements?.length??0,entitlement_rules:e.entitlement_rules?.length??0,segments:e.segments?.length??0,placements:n.length,placement_payloads:r,content_ui_paths:e.content_ui_paths?.length??0,surface_templates:e.surface_templates?.length??0}}async emitAnonMeta(e,n={}){this.anonymousTelemetryActive()&&(this.showAnonTelemetryNoticeOnce(),await this.postAnonMeta(e,n));}async postAnonMeta(e,n={}){try{let r=this.getConfiguredExportedConfig(),a=r?.format_version!=null?String(r.format_version):void 0,i=a?`${this.tenantId}:${a}`:this.tenantId,s=(await $P(i)).slice(0,64),y={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:Vr(),config_hash_id:s,sdk_version:Bv,runtime_mode:this.runtimeMode,...a?{bundle_version:a}:{},...n.config_shape?{config_shape:n.config_shape}:{},...n.message?{message:n.message.slice(0,500)}:{},...n.reason?{reason:n.reason.slice(0,64)}:{},...n.placement_handle?{placement_handle:n.placement_handle.slice(0,64)}:{},...n.slot_handle?{slot_handle:n.slot_handle.slice(0,64)}:{},...n.surface?{surface:n.surface.slice(0,64)}:{},...n.plan_handle?{plan_handle:n.plan_handle.slice(0,64)}:{},...n.entitlement_handle?{entitlement_handle:n.entitlement_handle.slice(0,64)}:{}}]};await fetch(this.endpointFor("ingestSdkMeta",dU),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(y),keepalive:!0});}catch{}}showAnonTelemetryNoticeOnce(){this.anonTelemetryNoticeShown||(this.anonTelemetryNoticeShown=true,console.info("[RevTurbine] Sending anonymous SDK telemetry (config-shape counts and SDK version only \u2014 no user data or PII). Disable it by setting `anonymousTelemetry: false` in your initRevTurbine() options."));}async sendEvents(e){if(e.length===0)return;if(!this.telemetryConsented()){this.telemetryCounters.dropped+=e.length;return}let n=0,r=e.map(w=>{let O=ly(w);return n+=O.redactions,O.value}),a=this.providerRegistry.has("events")||!this.isLocalOnlyMode()&&this.analyticsEnabled;if(n>0&&a&&this.warnPiiRedactedOnce(),this.telemetryCounters.redacted+=n,this.dispatchToEventConsumers(r),this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}if(!this.analyticsEnabled)return;let i=Vr(),s=this.getConfiguredExportedConfig()?.playbook_version_id,u=r.map(w=>{let O=w.user_id||w.anonymous_id,R=zp(this.userContext.account_id||O),A=Bp({level:w.level,message:w.message,path:w.path,url:w.url,page_title:w.page_title,session_id:w.session_id,anonymous_id:w.anonymous_id,tags:w.tags,traits:w.identity.traits??null,payload:w.properties,source:hU});return n+=A.redactions+(R.redacted?1:0),{environment_id:this.environmentId,user_id:O,account_id:R.value,event_name:ic(w.type).slice(0,120),event_ts:w.event_time,properties:JSON.stringify(A.value),...vU(w.properties),...TU(w.properties),origin:SU(w.type),playbook_version:typeof s=="string"&&s.length>0?s:null,event_id:lf.next(),request_id:Vr(),tenant_id:w.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let y=this.endpointFor("ingestEvents",uU),k={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":i},body:JSON.stringify({events:u}),keepalive:true};(await cf(()=>fetch(y,k))).delivered?this.telemetryCounters.sent+=u.length:this.telemetryCounters.failed+=u.length;}dispatchToEventConsumers(e){this.providerRegistry.has("events")&&this.providerRegistry.get("events").then(n=>{let r=n?.consumers;if(!(!r||r.length===0))for(let a of r)try{Promise.resolve(a.consume(e)).catch(()=>{});}catch{}}).catch(()=>{});}telemetryConsented(){return this.telemetryConsent==="granted"}setTelemetryConsent(e){this.telemetryConsent=e;}getTelemetryConsent(){return this.telemetryConsent}getTelemetryCounters(){return {...this.telemetryCounters}}async capture(e,n,r){if(!this.telemetryConsented()){this.telemetryCounters.dropped+=1;return}let a=ic(e),i=this.toEventEnvelope(a,n),s=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],u=[i];if(s.length>0&&u.push(this.buildValidationWarningEvent(a,s,n)),this.telemetryCounters.created+=u.length,r?.immediate){await this.sendEvents(u);return}this.events.push(...u),this.telemetryCounters.queued+=u.length,this.events.length>=this.maxBatchSize&&await this.flushEvents();}async trackControlPlaneEvent(e,n={},r){let{eventName:a,properties:i}=Kp(e,n);await this.capture(a,i,r);}async flushEvents(){if(this.events.length===0)return;let e=[...this.events];this.events.length=0,await this.sendEvents(e);}startEventBatchFlushing(){if(!Yr()||this.isLocalOnlyMode())return;this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flushEvents();},this.flushIntervalMs),this.flushTimer.unref?.());let e=()=>{this.flushEvents();},n=()=>{document.visibilityState==="hidden"&&this.flushEvents();};window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",n),this.batchingTeardown.push(()=>window.removeEventListener("pagehide",e),()=>document.removeEventListener("visibilitychange",n));}dispose(){this.unbridgeUiPathCtaResolvers(),this.unregisterBuiltinSnoozeResolver(),this.flushTimer!==void 0&&(clearInterval(this.flushTimer),this.flushTimer=void 0);for(let e of this.batchingTeardown.splice(0))try{e();}catch{}this.flushEvents();}async emitSemantic(e,n,r){let a=xe(n)?n:{};await this.capture(e,{semantic:true,payload:a},r);}async evaluateUserSegmentsAndUsage(e,n=false){let r=await this.fetchUserContext(this.userContext.id||""),a={...this.userContext,...e,custom:{...this.userContext.custom||{},...e.custom||{}}},i=await this.fetchUserContext(a.id||""),s=new Set(r.segmentIds||[]),u=new Set(i.segmentIds||[]),y=Array.from(u).filter(I=>!s.has(I)),k=Array.from(s).filter(I=>!u.has(I));for(let I of y)await this.emitSemantic("segment_enrolled",{segment_id:I,user_id:a.id??null});for(let I of k)await this.emitSemantic("segment_unenrolled",{segment_id:I,user_id:a.id??null});if(n){let I=r.usage||{},w={...I,...this.usageBalances},O=this.evaluateUsageThresholdCrossings(I,w);await Promise.all(O);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(KP,{context_fields:n});}setUserContext(e){let n=this.userContext;this.userContext=this.mergeUserContext(e),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(e,false),this.emitObservedContextFields(e.custom),this.notifyUserContextChanged();}onUserContextChange(e){return this.userContextListeners.add(e),()=>{this.userContextListeners.delete(e);}}notifyUserContextChanged(){for(let e of [...this.userContextListeners])try{e();}catch{}}setPageContext(e){this.pageContext=this.mergePageContext(e),this.persistLocalRuntimeState();}refreshPageContext(){this.pageContext=this.mergePageContext(xd());}hydrate(e){if(e.version!=="1.0.0"){console.warn(`[RevTurbine] Unknown hydration payload version: ${e.version}. Skipping.`);return}let n=this.userContext;e.user&&(this.userContext=this.mergeUserContext({id:e.user.id,custom:e.user.traits,usage:{}}),this.recalculateDerivedUsageTraits());let r=(e.ttl_seconds??60)*1e3,a=Date.now()+r;for(let i of e.decisions??[]){if(!i.output)continue;let s=[this.tenantId,i.slot_id??i.entitlement_handle??i.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),u=xe(i.output?.content)?i.output.content:{};this.decisionCache.set(s,{value:{placementId:i.slot_id??i.entitlement_handle??i.placement_handle??"unknown",requestId:e.request_id,visible:i.visible,decisionSource:"cache",reasonCodes:i.reason_codes??[],content:Us(String(u.header??""),String(u.body??""),String(u.cta_label??"")),output:i.output},expiresAt:a});}if(this.persistDecisionCache(),e.entitlements)for(let[i,s]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(i,{status:s.status,allowed:s.allowed,reason:s.reason,current_tier:s.current_tier,placement:s.placement});e.trial_status&&(this.localTrialStatus={in_trial:e.trial_status.in_trial,trial_type:e.trial_status.trial_type,plan_handle:e.trial_status.plan_handle,day_number:e.trial_status.day_number,days_remaining:e.trial_status.days_remaining}),e.user_context?.usage_balances&&(this.usageBalances={...this.usageBalances,...e.user_context.usage_balances},this.recalculateDerivedUsageTraits()),this.markSegmentsDirtyFromContextChange(n,this.userContext);}async generatePlacementId(e){return dp({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:$P,randomHex:yf})}async registerPlacement(e){let n=String(e.placementScopeKey||e.name||"").trim();return this.registerSurfaceSlot({id:n||String(e.name||"surface_slot").trim(),name:e.name,metadata:xe(e.metadata)?e.metadata:void 0})}async upsertSurfaceSlot(e){if(this.isLocalOnlyMode())return;let n=Vr(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),a=IU(e.placementScopeKey||e.id||e.name),i={...xe(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},s={name:e.name,slug:a,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:i},u={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},y=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:u,body:JSON.stringify(s)});if(y.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(y.status!==404)throw new Error(`surface_slot_upsert_failed:${y.status}`);let k=await fetch(r,{method:"POST",headers:u,body:JSON.stringify(s)});if(!k.ok)throw new Error(`surface_slot_create_failed:${k.status}`);this.syncedSurfaceSlotIds.add(e.id);}async registerSurfaceSlot(e){let n=xo(this.currentPathname()),r=String(e?.id||"").trim(),a=String(e?.name||r).trim(),i=[];r||i.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),a||i.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!xe(e.metadata)&&i.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let s=await this.generatePlacementId({placementName:a||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),u={id:s,route:n,name:a||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...xe(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},y=this.placements.get(s),k=y?this.stableStringify(y):null,I=this.stableStringify(u);return (!y||k!==I)&&(this.placements.set(s,u),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(s)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(s)&&await this.upsertSurfaceSlot(u),i.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",i,{surface_slot_id:r||null,placement_id:s,route:n,placement_name:a||null})]),s}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;if(!this.hasEndpointOverride("placementTypes")){Vs()&&console.warn("[RevTurbine] persistPlacementTypes() was called but no `endpointOverrides.placementTypes` is configured. RevTurbine hosts no default route for this verb, so the call was skipped. Configure an endpoint if you need placement types persisted.");return}let n=(Array.isArray(e)?e:[]).map(i=>RU(i)).filter(i=>i!==null);if(n.length===0)return;let r=Vr(),a=await fetch(this.endpointFor("placementTypes","/api/sdk/placement-types"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":r},body:JSON.stringify({request_id:r,tenant_id:this.tenantId,types:n})});if(!a.ok)throw new Error(`persist_placement_types_failed:${a.status}`)}stableStringify(e){return rc(e)}decisionCacheKey(e,n){return gp({tenantId:this.tenantId,placementId:e.placementId,userId:e.userId,contextMode:e.contextMode??"auto",overrides:e.overrides??{},traits:e.traits??{},route:this.currentPathname(),...n?{runtimeContextFingerprint:n}:{}})}interactionStateKey(e){return Q_({tenantId:this.tenantId,...e})}readDecisionCache(e){let n=this.decisionCache.get(e);return n?n.expiresAt<=Date.now()?(this.decisionCache.delete(e),this.persistDecisionCache(),null):{...n.value,decisionSource:"cache"}:null}writeDecisionCache(e,n,r){let a=Date.now()+Math.max(5e3,r??this.defaultDecisionTtlMs);this.decisionCache.set(e,{expiresAt:a,value:n}),this.persistDecisionCache();}suppressionForState(e){return X_(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return tu(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,a=this.placementCapKey(e),i=this.presentationCapsByKey.get(a),s=_p(e,a,i,Date.now());return s.updatedState&&r&&(this.presentationCapsByKey.set(a,s.updatedState),s.allowed&&this.persistPresentationCaps()),{allowed:s.allowed,reason:s.reason}}gateDecisionByCaps(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement||!e.visible||!e.output)return e;let r=this.applyPlacementCapsIfNeeded(e.output,{tick:n.tick??true});if(r.allowed)return e;let a=r.reason??"cap_exceeded";return {...e,visible:false,reasonCodes:[...e.reasonCodes??[],a],suppressionReason:a}}normalizeDecisionFromResponse(e,n,r,a){return fp(e,n,r,a)}async getPlacementDecision(e){let n=this.placements.get(e.placementId),r=Vr();if(this.isDisabledByProviderFailure())return this.disabledDecisionForPlacement(e.placementId,n?.name);if(!n)return this.emitResolutionFailure({reason:"placement_not_registered",placement_handle:e.placementId}),{placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["placement_not_registered"],suppressionReason:"placement_not_registered",content:Us("Placement not found","Register the placement before requesting a decision.","Register placement")};let a=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),i=this.suppressionForState(this.interactionState.get(a));if(i.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:i.reason?[i.reason]:[],suppressionReason:i.reason,content:Us(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let s,u=await this.localRuntime?.getContext?.(),y=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(u||y)&&(s=this.stableStringify({legacyCtx:u??{},providerCtx:y??{}}));let k=this.decisionCacheKey(e,s),I=this.readDecisionCache(k);if(I)return this.gateDecisionByCaps(I,{tick:false});{let O=this.getOrBuildPlacementResolver();if(O){let A={...u,...y?{__providers:y}:{}},U=this.gateDecisionByCaps(await O(e,n,A));return this.localDecisionsByPlacementId.set(e.placementId,U),this.writeDecisionCache(k,U,e.ttlMs),this.persistLocalRuntimeState(),U}let R=this.localDecisionsByPlacementId.get(e.placementId);if(R){let A=this.gateDecisionByCaps({...R,decisionSource:"fallback"});return this.writeDecisionCache(k,A,e.ttlMs),this.persistLocalRuntimeState(),A}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let w={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:Us(`${n.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),w}async preloadPlacementDecisions(e){let n=new Map;for(let r of e)n.set(this.decisionCacheKey(r),r);await Promise.allSettled(Array.from(n.values()).map(r=>this.getPlacementDecision(r)));}async bootstrapPlacementDecisions(e){if(this.isDisabledByProviderFailure()){await Promise.all(e.map(async r=>{let a=await this.getPlacementDecision(r),i=this.decisionCacheKey(r);this.writeDecisionCache(i,a,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let i=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),s=n.get(i);if(s){s.placementIds.push(r.placementId);continue}n.set(i,{userId:r.userId,contextMode:r.contextMode,overrides:r.overrides,traits:r.traits,ttlMs:r.ttlMs,placementIds:[r.placementId]});}for(let r of n.values()){let a=e.filter(i=>r.placementIds.includes(i.placementId)&&i.userId===r.userId);await Promise.allSettled(a.map(i=>this.getPlacementDecision(i)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),a=e.metadata??{},s={...this.interactionState.get(n)??{updatedAt:new Date(r).toISOString()},lastInteractionType:e.interactionType,updatedAt:e.interactionAt??new Date(r).toISOString()};if(e.interactionType==="dismiss"){let u=Number(a.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let u=Number(a.remind_after_seconds);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let u=Number(a.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.dismissCooldownDefaultMs);}if(e.interactionType==="cta_completed"&&(s.suppressedUntil=r+300*1e3),e.interactionType==="suppress"){let u=Number(a.suppress_duration_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.defaultDismissCooldownMs);}this.interactionState.set(n,s),this.persistInteractionState();}async flushInteractionQueue(){if(this.interactionQueue.length===0)return;let e=[...this.interactionQueue];if(this.interactionQueue.length=0,this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}let n=e.map(r=>({user_id:r.userId,placement_id:r.placementId,treatment_id:r.treatmentId,interaction_type:r.interactionType,interaction_at:r.interactionAt,surface_slot_id:r.surfaceSlotId,surface_template_id:r.surfaceTemplateId,payload_id:r.payloadId,...r.experimentId?{experiment_id:r.experimentId}:{},...r.variantKey?{variant_key:r.variantKey}:{},metadata:r.metadata??{},tenant_id:this.tenantId,...this.testTraffic?{test:true}:{}}));try{(await fetch(this.endpointFor("touchpointTransition",pU),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Vr()},body:JSON.stringify(n.length===1?n[0]:n)})).ok||(await fetch(this.endpointFor("legacyInteractions",gU),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Vr()},body:JSON.stringify(e.length===1?e[0]:e)})).ok||this.interactionQueue.unshift(...e);}catch{this.interactionQueue.unshift(...e);}}async trackTreatmentInteraction(e){let n={...e,interactionAt:e.interactionAt??new Date().toISOString()};this.updateInteractionState(n),this.interactionQueue.push(n),this.flushInteractionQueue();let r=n.placementId,a=n.treatmentId,i=n.metadata??{},s=Number(i.cooldown_ms),u=Number.isFinite(s)&&s>0?s:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,a,void 0,void 0,u);else if(n.interactionType==="cta_completed")this.impressionHistory.recordConversion(r,a);else if(n.interactionType==="cta_clicked")this.impressionHistory.recordClickThru(r,a,void 0,void 0,u);else if(n.interactionType==="suppress"){let I=Number(i.suppress_duration_ms);this.impressionHistory.recordSuppression(r,a,void 0,i,Number.isFinite(I)&&I>0?I:void 0);}let y=n.metadata??{},k=typeof y.decision_id=="string"?y.decision_id:null;await this.emitSemantic("placement_interaction",{user_id:n.userId,placement_id:n.placementId,treatment_id:n.treatmentId??null,interaction_type:n.interactionType,interaction_at:n.interactionAt??null,...k?{decision_id:k}:{},...n.experimentId?{experiment_id:n.experimentId}:{},...n.variantKey?{variant_key:n.variantKey}:{},metadata:y},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),a=Vr();if(this.isDisabledByProviderFailure()){let u=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:a,decisionSource:"fallback",content:u.content}}if(this.isLocalOnlyMode()){let u=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:a,decisionSource:u?"remote":"fallback",content:Us(typeof u?.content?.title=="string"?String(u.content.title):`${r?.name??e} treatment`,typeof u?.content?.body=="string"?String(u.content.body):"Local runtime placement content.",typeof u?.content?.cta=="string"?String(u.content.cta):"Continue")}}if(!r)return {placementId:e,requestId:a,decisionSource:"fallback",content:Us("Placement not found","Register the placement before requesting content.","Register placement")};let i=this.userContext.id??this.anonymousId,s=await this.getPlacementDecision({placementId:e,userId:i});return {placementId:e,requestId:a,decisionSource:s.decisionSource==="fallback"?"fallback":"remote",content:s.content??Us(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}rejectLegacyPlanId(e,n){if(!xe(n)||!("id"in n))return n;let{id:r,...a}=n,i=typeof a.handle=="string"&&a.handle.trim()!=="",s=`${e}:plan.id`;if(!this.reportedUnrecognizedContextKeys.has(s)){this.reportedUnrecognizedContextKeys.add(s),console.error(`[RevTurbine] ${e}() received a removed \`plan.id\` key and dropped it. Plan identity is the unique_handle: pass { plan: { handle: "\u2026" } } (or the flat plan_handle). `+(i?"A handle was also supplied, so plan matching is unaffected.":"No handle was supplied, so this user has NO plan for entitlement-rule matching and plan-targeted rules will not match."));try{this.capture(os,{reason:`${e} received removed plan.id key`,unrecognized_keys:"plan.id",plan_handle_present:i?"1":"0"});}catch{}}return a}reportUnrecognizedContextKeys(e,n,r,a){if(n.length===0)return;let i=`${e}:${[...n].sort().join(",")}`;if(this.reportedUnrecognizedContextKeys.has(i))return;this.reportedUnrecognizedContextKeys.add(i);let s=a?` ${a}`:"";console.warn(`[RevTurbine] ${e}() dropped unrecognized user-context key(s): ${n.join(", ")}. Recognized keys: ${r.join(", ")}. Pass free-form values under { custom: { \u2026 } }.${s}`);try{this.capture(os,{reason:`${e} received unrecognized user-context key(s)`,unrecognized_keys:n.join(",")});}catch{}}normalizePlacementOutput(e){let n=Wm(e,Vr);return n&&xe(e)&&typeof e.decision_id!="string"&&this.capture(os,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return ap(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=e.surfaceType;if(r&&!YP.has(r))return this.capture(os,{reason:`getPlacement called with unknown surfaceType: ${String(r)}`,slot_id:n??null}),null;Vr();if(this.isLocalOnlyMode()&&this.localRuntime?.resolvers?.getPlacement){let u=await this.localRuntime.resolvers.getPlacement(e);return u&&this.applyPlacementCapsIfNeeded(u).allowed?u:null}if(!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode())return this.refreshExportedConfigSnapshot(),null;let i=this.localPlacementForConfig(e);return i&&this.applyPlacementCapsIfNeeded(i).allowed?i:null}async checkEntitlement(e,n){if(this.isDisabledByProviderFailure())return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.sdkDisabledReason??"sdk_disabled_provider_failure"};if(this.isLocalOnlyMode()){let i=this.localRuntime?.resolvers?.checkEntitlement;if(i){let s=await i(e,n);return this.localEntitlementsByHandle.set(e,s),this.persistLocalRuntimeState(),s}}else this.getConfiguredExportedConfig()||await this.refreshExportedConfigSnapshot();let r=this.deriveLocalEntitlementFromConfiguredRules(e,n);if(r)return this.localEntitlementsByHandle.set(e,r),this.persistLocalRuntimeState(),r;let a=this.localEntitlementsByHandle.get(e);return a||(this.isLocalOnlyMode()||this.emitResolutionFailure({reason:"config_unavailable",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.isLocalOnlyMode()?"entitlement_not_in_playbook":"config_unavailable"})}updateUsage(e){let n=this.userContext,r=vi(e);this.reportUnusableUsageValues(e,r),this.reportUnmatchedUsageKeys(Object.keys(r)),this.usageBalances={...this.usageBalances,...r},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage({},true),this.notifyUserContextChanged();}reportUnusableUsageValues(e,n){let r=Object.keys(e).filter(i=>!(i in n));if(r.length===0)return;let a=`usage:unusable:${[...r].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(a)){this.reportedUnrecognizedContextKeys.add(a),console.warn(`[RevTurbine] updateUsage() dropped usage value(s) it could not read: ${r.join(", ")}. A usage balance is a number \u2014 \`update({ usage: { <entitlement_handle>: 42 } })\` \u2014 or an entry object carrying a numeric \`amount\`. The reported balance was NOT applied, so any limit on these entitlements is still evaluating the previous value.`);try{this.capture(os,{reason:"updateUsage received unusable usage value(s)",unrecognized_keys:r.join(",")});}catch{}}}reportUnmatchedUsageKeys(e){if(e.length===0)return;let r=this.getConfiguredExportedConfig()?.entitlements;if(!Array.isArray(r)||r.length===0)return;let a=new Set(r.map(u=>xe(u)&&typeof u.unique_handle=="string"?u.unique_handle:null).filter(u=>u!==null));if(a.size===0)return;let i=e.filter(u=>!a.has(u));if(i.length===0)return;let s=`usage:unmatched:${[...i].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(s)){this.reportedUnrecognizedContextKeys.add(s),console.warn(`[RevTurbine] updateUsage() received usage key(s) matching no entitlement in the Playbook: ${i.join(", ")}. The balance is stored but nothing reads it, so any limit on the entitlement you meant is still evaluating zero consumed. Usage keys are entitlement unique_handles \u2014 check for a typo. Known handles: ${[...a].sort().join(", ")}.`);try{this.capture(os,{reason:"updateUsage received usage key(s) matching no entitlement handle",unrecognized_keys:i.join(",")});}catch{}}}getUserContext(){let e=this.userContext.id||this.anonymousId,n=new Date().toISOString();return {id:e,tenant_id:this.tenantId,user_id:e,created_at:n,updated_at:n,account_id:this.userContext.account_id,email:this.userContext.email,plan:this.userContext.plan,usage:this.userContext.usage??{},entitlements:this.userContext.entitlements??{},custom:Object.fromEntries(Object.entries(this.userContext.custom??{}).filter(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)),personalization:Object.fromEntries(Object.entries(this.userContext.personalization??{}).filter(([,r])=>typeof r=="string"||typeof r=="number")),derived_computed_at:null}}async fetchUserContext(e){let n=Vr();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let i=await r(e);return this.localUserContextsByUserId.set(e,i),this.persistLocalRuntimeState(),i}let a=this.localUserContextsByUserId.get(e);return a||{userId:e,segmentIds:[],traits:{},plan:void 0,usage:this.usageBalances}}try{let r=await fetch(this.endpointFor("userContext","/api/sdk/user-context"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},body:JSON.stringify({request_id:n,tenant_id:this.tenantId,user_id:e,context:{user:this.userContext,page:this.pageContext}})});if(!r.ok)return {userId:e,segmentIds:[],traits:{}};let a=await r.json(),i={userId:e,segmentIds:Array.isArray(a.segment_ids)?a.segment_ids.filter(s=>typeof s=="string"):[],traits:xe(a.traits)?a.traits:{},plan:typeof a.plan=="string"?a.plan:void 0,usage:xe(a.usage)?Object.fromEntries(Object.entries(a.usage).filter(([,s])=>typeof s=="number")):void 0};return this.localUserContextsByUserId.set(e,i),this.persistLocalRuntimeState(),i}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new kc,this.providerRegistry.register(this.serverUserContextProvider)),this.serverUserContextProvider}async fetchClientContext(e){typeof e=="string"&&e.length>0&&(this.clientContextToken=e),this.clientContextToken||(this.clientContextToken=await this.mintClientSessionToken());let n=this.clientContextToken;if(n)try{let r=await fetch(this.endpointFor("clientContext","/api/sdk/client-context"),{method:"GET",headers:{authorization:`Bearer ${n}`}});if(!r.ok){if(r.status===401&&(this.clientContextToken=void 0,this.clientSessionProvider&&!this.retriedClientContextAfterMint)){let y=await this.mintClientSessionToken();if(y){this.retriedClientContextAfterMint=!0;try{await this.fetchClientContext(y);}finally{this.retriedClientContextAfterMint=!1;}}}return}let a=await r.json(),i=this.mapClientSafeContext(a);if(Object.keys(i).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:i.trial?{in_trial:i.trial.in_trial,state:i.trial.state,days_remaining:i.trial.days_remaining}:void 0,payment_at_risk:i.payment_at_risk});let s=JSON.parse(JSON.stringify({trial:i.trial??null,plan_handle:i.plan_handle??null,plan:i.plan??null})),u=await Pp(s)+`:${i.payment_at_risk===!0?1:0}`;if(u===this.lastServerContextHash)return;this.lastServerContextHash=u,this.applyServerContextPatch(i);}catch{}}async mintClientSessionToken(){if(this.clientSessionProvider)try{let e=await this.clientSessionProvider();return typeof e=="string"&&e.length>0?e:void 0}catch{return}}autoFetchClientContext(){this.clientSessionProvider&&this.fetchClientContext().catch(()=>{});}mapClientSafeContext(e){let n={},a=["active","running_out","expired","converted","none"].find(s=>s===e.trial?.status);a&&(n.trial={in_trial:a==="active"||a==="running_out",state:a,...typeof e.trial?.days_remaining=="number"?{days_remaining:e.trial.days_remaining}:{}}),e.billing?.health==="attention_required"&&(n.payment_at_risk=true);let i=e.plan?.handle;return typeof i=="string"&&i.length>0&&(n.plan_handle=i,n.plan={handle:i,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:i}),n}applyServerContextPatch(e){let n=this.userContext;this.userContext=this.mergeUserContext(e,"update"),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(this.userContext,false);}async recordImpression(e,n,r,a){await this.impressionHistory.recordImpression(e,n,r,a);}async recordDismissal(e,n,r,a,i){await this.impressionHistory.recordDismissal(e,n,r,a,i);}async recordClickThru(e,n,r,a,i){await this.impressionHistory.recordClickThru(e,n,r,a,i);}async recordConversion(e,n,r,a){await this.impressionHistory.recordConversion(e,n,r,a);}async getTrialStatus(){let e=Vr();if(this.isLocalOnlyMode()){let n=this.localRuntime?.resolvers?.getTrialStatus;if(n){let r=await n();return this.localTrialStatus=r,await this.evaluateTrialLifecycleTriggers(r),this.persistLocalRuntimeState(),r}return await this.evaluateTrialLifecycleTriggers(this.localTrialStatus),this.localTrialStatus}try{let n=await fetch(this.endpointFor("trialStatus","/api/sdk/trial-status"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify({request_id:e,tenant_id:this.tenantId,user_id:this.userContext.id})});if(!n.ok)return {in_trial:!1};let r=await n.json(),a=this.validateTrialStatusShape(r);return this.localTrialStatus=a,await this.evaluateTrialLifecycleTriggers(a),this.persistLocalRuntimeState(),a}catch{return {in_trial:false}}}async setTrialInstances(e,n){let r=this.getConfiguredExportedConfig(),a=n?.nowIso??new Date().toISOString(),{trial:i}=Vm({...r?.free_trial_rules!==void 0?{freeTrialRules:r.free_trial_rules}:{},...r?.reverse_trial_rules!==void 0?{reverseTrialRules:r.reverse_trial_rules}:{},instances:e,nowIso:a,usageBalances:this.usageBalances,...n?.basePlanHandle!==void 0?{basePlanHandle:n.basePlanHandle}:{}}),s=i??{in_trial:false};return this.localTrialStatus=s,await this.evaluateTrialLifecycleTriggers(s),this.persistLocalRuntimeState(),s}getExportedConfig(){return this.getConfiguredExportedConfig()}async validateUiPathResolvers(e={}){await this.refreshExportedConfigSnapshot();let n=this.getConfiguredExportedConfig(),r=Array.isArray(e.uiPaths)?e.uiPaths:xe(n)&&Array.isArray(n.content_ui_paths)?n.content_ui_paths:[],a=e.includeProviderHandlers??true,i=Pd(e.resolvers,"validateUiPathResolvers(options.resolvers)"),s={...this.uiPathResolvers,...i};if(a&&this.providerRegistry.has("cta"))try{let I=await this.providerRegistry.resolveAll();xe(I.cta)&&xe(I.cta.handlers)&&Object.assign(s,I.cta.handlers);}catch{}let u=[],y=0;for(let I of r){let w=xe(I)?I:{},O=typeof w.action_type=="string"?w.action_type.trim():"";if(!O){u.push({actionType:"unknown",reason:"missing_action_type",...typeof w.id=="string"?{uiPathId:w.id}:{},...typeof w.name=="string"?{name:w.name}:{}});continue}if(typeof s[O]=="function"){y+=1;continue}u.push({actionType:O,reason:"missing_resolver",...typeof w.id=="string"?{uiPathId:w.id}:{},...typeof w.name=="string"?{name:w.name}:{}});}let k={valid:u.length===0,totalUiPaths:r.length,resolvedUiPaths:y,issues:u};if(!k.valid&&e.throwOnMissing){let I=k.issues.filter(O=>O.reason==="missing_resolver").map(O=>O.actionType),w=I.length>0?` Missing resolver(s) for action_type: ${Array.from(new Set(I)).join(", ")}.`:"";throw new Error(`[RevTurbine] UI path resolver validation failed with ${k.issues.length} issue(s).${w}`)}return k}warnOnUiPathResolverCoverageGaps(){let e=this.getConfiguredExportedConfig(),n=xe(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(n.length===0)return;let r=[],a=0;for(let u of n){let k=(xe(u)?u:{}).action_type,I=typeof k=="string"?k.trim():"";if(!I){a+=1;continue}typeof this.uiPathResolvers[I]!="function"&&r.push(I);}if(a===0&&r.length===0)return;let i=Array.from(new Set(r)),s=[];i.length>0&&s.push(`missing resolvers for action_type: ${i.join(", ")}`),a>0&&s.push(`content_ui_paths with missing action_type: ${a}`),console.warn(`[RevTurbine] uiPathResolvers coverage gap: ${s.join("; ")}. Affected CTAs will track the click and fall back to onCtaClick until a resolver is supplied.`);}async dismiss(e){await this.emitSemantic("placement_interaction",{interaction_type:"dismiss",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async snooze(e,n=3600){await this.emitSemantic("placement_interaction",{interaction_type:"remind_me_later",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString(),remind_after_seconds:n},{immediate:false});}async convert(e){await this.emitSemantic("placement_interaction",{interaction_type:"cta_completed",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async emitTrigger(e,n,r){await this.emitSemantic(e,{...n,user_id:this.userContext.id??null,plan_handle:this.userContext.personalization?.plan_name??null,triggered_at:new Date().toISOString(),source:"sdk"},r);}async trackEvent(e,n){await this.capture(e,n??{});}identify(e,n){if(typeof e!="string"||e.trim()===""){console.error("[RevTurbine] identify() requires a non-empty user id; call ignored. Pass your stable internal user id.");return}aU.test(e)&&sU(`[RevTurbine] identify() received an email-shaped user id ("${e}"). Use an opaque stable id and pass the email as { email } instead.`);let r=this.userContext,a=xe(n)?n:{};xe(n)&&this.reportUnrecognizedContextKeys("identify",Object.keys(n).filter(i=>!rU.has(i)),GP),a.usage&&(this.usageBalances={...this.usageBalances,...vi(a.usage)}),this.userContext=this.mergeUserContext({id:e,account_id:a.account_id,email:a.email,plan_handle:typeof a.plan_handle=="string"&&a.plan_handle.trim()!==""?a.plan_handle.trim():void 0,plan:a.plan,usage:a.usage,entitlements:a.entitlements,custom:a.custom,personalization:a.personalization},"identify"),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(r,this.userContext),this.decisionCache.clear(),this.persistDecisionCache(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(e),this.impressionHistory.hydrate(),this.clientSessionProvider&&(this.clientContextToken=void 0,this.autoFetchClientContext()),this.emitObservedContextFields(a.custom),this.notifyUserContextChanged();}resetIdentity(){this.clearAllUserState({reinfer:true});}resetUserContext(){this.clearAllUserState({reinfer:false});}clearAllUserState({reinfer:e}){let n=this.userContext;this.userContext={usage:{},...e&&this.policy.inferUser?HP():{},id:void 0,custom:{},entitlements:{},personalization:{}},this.usageBalances={},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.decisionCache.clear(),this.interactionState.clear(),this.persistDecisionCache(),this.persistInteractionState(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(this.anonymousId),this.impressionHistory.hydrate(),this.notifyUserContextChanged();}can(e,n){return this.checkEntitlement(e,n)}async gate(e,n,r){this.emitSemantic("gate_attempted",{entitlement_handle:e},{immediate:false});let a=await this.checkEntitlement(e,r);return a.allowed?(this.emitSemantic("gate_allowed",{entitlement_handle:e},{immediate:false}),{ran:true,result:await n(),entitlement:a}):(this.emitSemantic("gate_denied",{entitlement_handle:e,reason:a.reason??null},{immediate:false}),{ran:false,entitlement:a})}track(e,n){return this.trackEvent(e,n)}update(e){let{usage:n,...r}=e??{},a=Object.entries(r).filter(([i])=>BP.has(i));this.reportUnrecognizedContextKeys("update",Object.keys(r).filter(i=>!BP.has(i)),WP,"A bare entitlement handle is not a usage report \u2014 use update({ usage: { <unit>: n } }); to (re)establish identity use identify()."),a.length>0&&this.setUserContext(Object.fromEntries(a)),n&&this.updateUsage(n);}reset(){this.resetIdentity();}onRouteChange(e){this.setPageContext({url:`${Yr()?window.location.origin:""}${e.path}`,title:e.title,tags:e.tags}),this.capture("page_view",{source:"router_auto_track",path:e.path});}};j(Em,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var _f=Em;function vf(t){let e=kU(t),n=new _f(e);if(!e.provider)return n;let r=(I,w)=>{try{return typeof I=="function"?I(e):I}catch(O){return console.warn(`[RevTurbine] Provider factory failed at chain index ${w}.`,O),null}},a=[r(e.provider,0),...(e.providerFallbacks??[]).map((I,w)=>r(I,w+1))].filter(I=>I!==null);if(a.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let i=async(I,w,O)=>{let R=[];for(let A=0;A<a.length;A+=1){let oe=a[A][I];if(oe){R.push(A);try{return await oe(...w)}catch(Z){let _e=a.slice(A+1).some(De=>typeof De[I]=="function");console.warn(A===0&&_e?`[RevTurbine] Primary provider ${I} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${I} failed at chain index ${A}.`,Z);}}}return R.length===0||n.disableForProviderFailure(`provider_${I}_chain_failed`),O()},s=n.getPlacement.bind(n),u=n.checkEntitlement.bind(n),y=n.persistPlacementTypes.bind(n),k=n.identify.bind(n);return n.getPlacement=async I=>i("getPlacement",[I],()=>s(I)),n.checkEntitlement=async(I,w)=>i("checkEntitlement",[I,w],()=>u(I,w)),n.persistPlacementTypes=async I=>i("persistPlacementTypes",[I],()=>y(I)),n.identify=(I,w)=>{let O=0;for(let R=0;R<a.length;R+=1){let A=a[R];if(A.identify){O+=1;try{A.identify(I,w);return}catch(U){let oe=a.slice(R+1).some(Z=>typeof Z.identify=="function");console.warn(R===0&&oe?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${R}.`,U);}}}if(O>0){n.disableForProviderFailure("provider_identify_chain_failed"),k(I,w);return}k(I,w);},n}var Sd={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function df(t){return typeof t=="string"&&t.trim().length>0}function kU(t){return Id(t.localRuntime)!==void 0?{...t,tenantId:df(t.tenantId)?t.tenantId:Sd.tenantId,apiKey:df(t.apiKey)?t.apiKey:Sd.apiKey,endpoint:df(t.endpoint)?t.endpoint:Sd.endpoint,mode:t.mode??Sd.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function RU(t){if(!xe(t))return null;let e=(y,k)=>String(y??"").trim().slice(0,k),n=e(t.id,256),r=e(t.label,256),a=e(t.description,1024),i=e(t.surfaceType,64);if(!n||!r||!a||!YP.has(i))return null;let s=Number(t.priority),u=Number.isFinite(s)?Math.max(0,Math.floor(s)):0;return {id:n,label:r,description:a,surfaceType:i,priority:u}}typeof window<"u"&&(window.RevTurbine={init:vf});var hi=Object.freeze({colors:{primary:"#1e40af",primaryText:"#ffffff",secondary:"#f3f4f6",secondaryText:"#1f2937",accent:"#7c3aed",accentText:"#ffffff",background:"#ffffff",surface:"#f8fafc",surfaceBorder:"#e2e8f0",text:"#111827",textSecondary:"#4b5563",textMuted:"#6b7280",overlay:"rgba(0, 0, 0, 0.5)",success:"#16a34a",warning:"#f59e0b",danger:"#dc2626",info:"#60a5fa",toastBackground:"#1f2937",toastText:"#ffffff",cliBackground:"#1e1e1e",cliText:"#d4d4d4",cliLink:"#569cd6",track:"#e5e7eb"},typography:{fontFamily:"system-ui, -apple-system, sans-serif",fontFamilyMono:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',fontSize:"14px",fontSizeSmall:"13px",fontSizeHeader:"20px",fontSizeLargeHeader:"28px"},shape:{borderRadiusSmall:"6px",borderRadius:"8px",borderRadiusLarge:"12px"},shadows:{medium:"0 10px 40px rgba(0, 0, 0, 0.25)",large:"0 20px 60px rgba(0, 0, 0, 0.3)"}});function Nl(t){return t?{id:t.id??hi.id,name:t.name??hi.name,version:t.version??hi.version,colors:{...hi.colors,...t.colors},typography:{...hi.typography,...t.typography},shape:{...hi.shape,...t.shape},shadows:{...hi.shadows,...t.shadows}}:{...hi}}var AU="revturbine:theme";function bf(t){return `${AU}:${t}`}function wU(t,e){try{let n=e.getItem(bf(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function jU(t,e,n){try{n.setItem(bf(t),JSON.stringify(e));}catch{}}function OU(t,e){let n=e??fs();try{n.removeItem(bf(t));}catch{}}async function xf(t,e){let{tenantId:n,endpoint:r,apiKey:a,base:i}=t,s=t.storage??fs(),u=wU(n,s),y=Nl({...i,...u});return t.onOverride?.(u),qU(r,n,a).then(k=>{k&&(u?.version&&k.version===u.version||(jU(n,k,s),t.onOverride?.(k),e?.(Nl({...i,...k}))));}).catch(()=>{}),y}async function qU(t,e,n){let r=t.replace(/\/$/,""),a=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,i=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":a}});if(!i.ok)return null;let s=await i.json();return typeof s!="object"||s===null?null:s}var Cd=class{constructor(e,n){j(this,"sdk");j(this,"options");j(this,"listeners",new Set);j(this,"_placementId","");j(this,"_decision",null);j(this,"_isLoading",false);j(this,"_error","");j(this,"_impressionTracked",false);j(this,"_loadSeq",0);j(this,"_rendered",false);j(this,"_exposed",false);j(this,"_exposureBasis",null);j(this,"_lastSlotKey",null);this.sdk=e,this.options=n;}get state(){return {isLoading:this._isLoading,error:this._error,placementId:this._placementId,visible:!!this._decision?.visible,decision:this._decision,content:this._decision?.content??null,exposureBasis:this._exposureBasis}}get exposureMode(){return this.options.placementExposure??"legacy_resolution"}markRendered(){this._rendered||(this._rendered=true,this.emitPlacementLifecycle("placement_rendered",null),this.exposureMode==="render"&&this.fireImpression("render"),this.notify());}markVisible(e="viewport"){this._exposed||(this._exposed=true,this._exposureBasis=e,this.emitPlacementLifecycle("placement_exposed",e),this.exposureMode==="viewport"&&e==="viewport"&&this.fireImpression("viewport"),this.notify());}fireImpression(e){let n=this._decision;if(!n?.visible||this._impressionTracked||this.options.autoTrackImpression===false)return;let r=this.options.userId||this.sdk.getUserContext().user_id;if(!r)return;this._impressionTracked=true;let a=n.output;this.sdk.trackTreatmentInteraction({userId:r,placementId:this._placementId,interactionType:"impression",surfaceSlotId:n.output?.surface?.slot_id,surfaceTemplateId:n.output?.surface?.template,payloadId:n.output?.output_id,messageBlockHandle:a?.message_block_handle,messageBlockId:a?.message_block_id,experimentId:n.output?.experiment_id,variantKey:n.output?.variant_key,metadata:{decision_source:n.decisionSource,exposure_basis:e,decision_id:n.output?.decision_id??null}});}emitPlacementLifecycle(e,n){let r=this._decision;try{this.sdk.emitSemantic(e,{placement_id:this._placementId,surface_slot_id:r?.output?.surface?.slot_id??null,payload_id:r?.output?.output_id??null,decision_id:r?.output?.decision_id??null,decision_source:r?.decisionSource??null,...n?{exposure_basis:n}:{}},{immediate:!1});}catch{}}slotContext(){let e=this._decision,n=this.options.surfaceSlot;return {surface_slot_id:e?.output?.surface?.slot_id??n?.id??null,slot_name:n?.name??null,template_ids:n?.surfaceTemplateIds??null,template_id:e?.output?.surface?.template??null,surface_type:e?.output?.surface?.type??null,category:e?.output?.category??null,decision_source:e?.decisionSource??null,reason_codes:e?.reasonCodes??[],decision_id:e?.output?.decision_id??null}}emitSlotResolution(){let e=this._decision,n=e?.visible?"slot_filled":e?.suppressionReason?"slot_suppressed":"slot_empty",r=`${this._placementId}|${e?.output?.decision_id??e?.requestId??""}|${n}`;if(this._lastSlotKey===r)return;this._lastSlotKey=r;let a=this.slotContext();this.emitSlotEvent("slot_evaluated",a),this.emitSlotEvent(n,a);}emitSlotError(e){let n=`${this._placementId}|slot_error`;this._lastSlotKey!==n&&(this._lastSlotKey=n,this.emitSlotEvent("slot_error",{...this.slotContext(),error:e}));}emitSlotEvent(e,n){try{this.sdk.emitSemantic(e,n,{immediate:!1});}catch{}}emitPlacementOutcome(e){let n=this._decision;try{this.sdk.emitSemantic("placement_outcome",{placement_id:this._placementId,surface_slot_id:n?.output?.surface?.slot_id??null,payload_id:n?.output?.output_id??null,decision_id:n?.output?.decision_id??null,decision_source:n?.decisionSource??null,outcome:"cta_completed",cta_target:e},{immediate:!1});}catch{}}get visible(){return !!this._decision?.visible}get content(){return this._decision?.content??null}get decision(){return this._decision}get placementId(){return this._placementId}async load(){let e=this.options,n=e.userId||this.sdk.getUserContext().user_id;if(!n)return this._error="Cannot load placement: no userId available.",this.notify(),null;let r=++this._loadSeq;this._isLoading=true,this._error="",this.notify();try{if(!this._placementId)if(e.surfaceSlot)this._placementId=await this.sdk.registerSurfaceSlot(e.surfaceSlot);else if(e.placement)this._placementId=await this.sdk.registerPlacement(e.placement);else return this._error="Either placement or surfaceSlot must be provided.",this._isLoading=!1,this.notify(),null;if(r!==this._loadSeq)return this._decision;let a=await this.sdk.getPlacementDecision({placementId:this._placementId,userId:n,contextMode:e.contextMode,overrides:e.overrides,traits:e.traits,ttlMs:e.ttlMs});if(r!==this._loadSeq)return this._decision;this._decision=a,this.emitPlacementLifecycle("placement_resolved",null),this.emitSlotResolution();let i=this.exposureMode;return i==="legacy_resolution"?this.fireImpression("legacy_resolution"):i==="viewport"&&!uf.supported&&this.fireImpression("render_fallback"),a}catch(a){return r===this._loadSeq&&(this._error=a instanceof Error?a.message:"Failed to load placement decision.",this.emitSlotError(this._error)),null}finally{r===this._loadSeq&&(this._isLoading=false,this.notify());}}async refresh(){return this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this.load()}async dismiss(e=1440*60*1e3){await this.trackInteraction("dismiss",{cooldown_ms:e});}async snooze(e=3600){await this.trackInteraction("remind_me_later",{remind_after_seconds:e});}async remindMeLater(e=3600){await this.snooze(e);}async ctaClick(e){await this.trackInteraction("cta_clicked",{cta_target:e||null});}async ctaComplete(e){await this.trackInteraction("cta_completed",{cta_target:e||null}),this.emitPlacementOutcome(e||null);}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}reset(){this._placementId="",this._decision=null,this._isLoading=false,this._error="",this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this._lastSlotKey=null,this._loadSeq++,this.notify();}async trackInteraction(e,n){let r=this.options.userId||this.sdk.getUserContext().user_id;if(!this._placementId||!r)return;let a=this._decision?.output?.decision_id??null,i=this._decision?.output;await this.sdk.trackTreatmentInteraction({userId:r,placementId:this._placementId,treatmentId:this._decision?.placementId,interactionType:e,surfaceSlotId:this._decision?.output?.surface?.slot_id,surfaceTemplateId:this._decision?.output?.surface?.template,payloadId:this._decision?.output?.output_id,messageBlockHandle:i?.message_block_handle,messageBlockId:i?.message_block_id,experimentId:this._decision?.output?.experiment_id,variantKey:this._decision?.output?.variant_key,metadata:a?{...n,decision_id:a}:n}),(e==="dismiss"||e==="remind_me_later"||e==="cta_completed")&&this._decision&&(this._decision={...this._decision,visible:false},this.notify());}notify(){for(let e of this.listeners)e();}};function km(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var Ed=class{constructor(e,n){j(this,"sdk");j(this,"options");j(this,"listeners",new Set);j(this,"_isLoading",false);j(this,"_error",null);j(this,"_result",null);j(this,"_gatedPlacement",null);j(this,"_lastEvaluatedKey",null);this.sdk=e,this.options=n;}get state(){return {isLoading:this._isLoading,error:this._error,result:this._result,allowed:this._result?.status==="allowed",limited:this._result?.status==="limited",denied:km(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return km(this._result)}get result(){return this._result}get gatedPlacement(){return this._gatedPlacement}async check(){let{handle:e,context:n,autoGate:r,gatePlacementRequest:a}=this.options;this._isLoading=true,this._error=null,this.notify();try{let i=await this.sdk.checkEntitlement(e,n);if(this._result=i,this.emitGateEvaluated(e,i),!r||!km(i))this._gatedPlacement=null;else if(i.placement)this._gatedPlacement=i.placement;else {let s=await this.sdk.getPlacement({...a,entitlementHandle:e});this._gatedPlacement=s;}return i}catch(i){return this._error=i instanceof Error?i.message:String(i),this._gatedPlacement=null,null}finally{this._isLoading=false,this.notify();}}async recheck(){return this.check()}emitGateEvaluated(e,n){let r=`${e}|${n.status}`;if(this._lastEvaluatedKey!==r){this._lastEvaluatedKey=r;try{this.sdk.emitSemantic("gate_evaluated",{entitlement_handle:e,outcome:n.status,gated:km(n),reason:n.reason??null,limit:n.limit??null,used:n.used??null,remaining:n.remaining??null},{immediate:!1});}catch{}}}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}watchUserContext(){let e=this.sdk.onUserContextChange;return typeof e!="function"?()=>{}:e.call(this.sdk,()=>{this._result===null&&!this._isLoading||this.check();})}notify(){for(let e of this.listeners)e();}},kd=class{constructor(e,n){j(this,"sdk");j(this,"theme");this.sdk=e,this.theme=n;}identify(e,n){this.sdk.identify(e,n);}resetIdentity(){this.sdk.resetIdentity();}resetUserContext(){this.sdk.resetUserContext();}setUserContext(e){this.sdk.setUserContext(e);}getUserContext(){return this.sdk.getUserContext()}updateUsage(e){this.sdk.updateUsage(e);}update(e){this.sdk.update(e);}async fetchUserContext(e){return this.sdk.fetchUserContext(e)}async getTrialStatus(){return this.sdk.getTrialStatus()}getUsage(){return this.sdk.getUsage()}placement(e){return new Cd(this.sdk,e)}async getPlacementBySlotId(e,n){return this.placement({...n,surfaceSlot:{id:e,name:e}}).load()}async getPlacement(e){return this.sdk.getPlacement(e)}entitlement(e){return new Ed(this.sdk,e)}async checkEntitlement(e,n){return this.sdk.checkEntitlement(e,n)}async can(e,n){return this.sdk.checkEntitlement(e,n)}async trackEvent(e,n){return this.sdk.trackEvent(e,n)}track(e,n){return this.sdk.track(e,n)}async flushEvents(){return this.sdk.flushEvents()}};async function DU(t){let{bootstrapPlacements:e,...n}=t,r=n,a=vf(r),i=r.user;i&&typeof i=="object"&&i.id&&a.identify(i.id,i);let s=hi,y=Id(r.localRuntime)?.theme;if(y&&typeof y=="object"?s=Nl(y):s=await xf({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let k=a.getUserContext().user_id,I=[];for(let w of e){let O=await a.registerPlacement(w.placement),R=w.userId||k;R&&I.push({placementId:O,userId:R,contextMode:w.contextMode,overrides:w.overrides,traits:w.traits,ttlMs:w.ttlMs});}I.length>0&&await a.bootstrapPlacementDecisions(I);}return new kd(a,s)}var UU=/\{[^{}]+\}/g,MU=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function FU(){return Math.random().toString(36).slice(2,11)}function tT(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:a,bodySerializer:i,pathSerializer:s,headers:u,requestInitExt:y=void 0,...k}={...t};y=MU()?y:void 0,e=eT(e);let I=[];async function w(O,R){let{baseUrl:A,fetch:U=r,Request:oe=n,headers:Z,params:_e={},parseAs:De="json",querySerializer:ne,bodySerializer:J=i??NU,pathSerializer:ot,body:Pn,middleware:An=[],...be}=R||{},xt=e;A&&(xt=eT(A)??e);let gn=typeof a=="function"?a:QP(a);ne&&(gn=typeof ne=="function"?ne:QP({...typeof a=="object"?a:{},...ne}));let wn=ot||s||LU,lt=Pn===void 0?void 0:J(Pn,XP(u,Z,_e.header)),Nn=XP(lt===void 0||lt instanceof FormData?{}:{"Content-Type":"application/json"},u,Z,_e.header),Rr=[...I,...An],Jn={redirect:"follow",...k,...be,body:lt,headers:Nn},_n,un,Vn=new oe(VU(O,{baseUrl:xt,params:_e,querySerializer:gn,pathSerializer:wn}),Jn),Tn;for(let jn in be)jn in Vn||(Vn[jn]=be[jn]);if(Rr.length){_n=FU(),un=Object.freeze({baseUrl:xt,fetch:U,parseAs:De,querySerializer:gn,bodySerializer:J,pathSerializer:wn});for(let jn of Rr)if(jn&&typeof jn=="object"&&typeof jn.onRequest=="function"){let ct=await jn.onRequest({request:Vn,schemaPath:O,params:_e,options:un,id:_n});if(ct)if(ct instanceof oe)Vn=ct;else if(ct instanceof Response){Tn=ct;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!Tn){try{Tn=await U(Vn,y);}catch(jn){let ct=jn;if(Rr.length)for(let cr=Rr.length-1;cr>=0;cr--){let Ua=Rr[cr];if(Ua&&typeof Ua=="object"&&typeof Ua.onError=="function"){let xa=await Ua.onError({request:Vn,error:ct,schemaPath:O,params:_e,options:un,id:_n});if(xa){if(xa instanceof Response){ct=void 0,Tn=xa;break}if(xa instanceof Error){ct=xa;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(ct)throw ct}if(Rr.length)for(let jn=Rr.length-1;jn>=0;jn--){let ct=Rr[jn];if(ct&&typeof ct=="object"&&typeof ct.onResponse=="function"){let cr=await ct.onResponse({request:Vn,response:Tn,schemaPath:O,params:_e,options:un,id:_n});if(cr){if(!(cr instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");Tn=cr;}}}}let ba=Tn.headers.get("Content-Length");if(Tn.status===204||Vn.method==="HEAD"||ba==="0"&&!Tn.headers.get("Transfer-Encoding")?.includes("chunked"))return Tn.ok?{data:void 0,response:Tn}:{error:void 0,response:Tn};if(Tn.ok)return {data:await(async()=>{if(De==="stream")return Tn.body;if(De==="json"&&!ba){let ct=await Tn.text();return ct?JSON.parse(ct):void 0}return await Tn[De]()})(),response:Tn};let Dt=await Tn.text();try{Dt=JSON.parse(Dt);}catch{}return {error:Dt,response:Tn}}return {request(O,R,A){return w(R,{...A,method:O.toUpperCase()})},GET(O,R){return w(O,{...R,method:"GET"})},PUT(O,R){return w(O,{...R,method:"PUT"})},POST(O,R){return w(O,{...R,method:"POST"})},DELETE(O,R){return w(O,{...R,method:"DELETE"})},OPTIONS(O,R){return w(O,{...R,method:"OPTIONS"})},HEAD(O,R){return w(O,{...R,method:"HEAD"})},PATCH(O,R){return w(O,{...R,method:"PATCH"})},TRACE(O,R){return w(O,{...R,method:"TRACE"})},use(...O){for(let R of O)if(R){if(typeof R!="object"||!("onRequest"in R||"onResponse"in R||"onError"in R))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");I.push(R);}},eject(...O){for(let R of O){let A=I.indexOf(R);A!==-1&&I.splice(A,1);}}}}function Rd(t,e,n){if(e==null)return "";if(typeof e=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return `${t}=${n?.allowReserved===true?e:encodeURIComponent(e)}`}function nT(t,e,n){if(!e||typeof e!="object")return "";let r=[],a={simple:",",label:".",matrix:";"}[n.style]||"&";if(n.style!=="deepObject"&&n.explode===false){for(let u in e)r.push(u,n.allowReserved===true?e[u]:encodeURIComponent(e[u]));let s=r.join(",");switch(n.style){case "form":return `${t}=${s}`;case "label":return `.${s}`;case "matrix":return `;${t}=${s}`;default:return s}}for(let s in e){let u=n.style==="deepObject"?`${t}[${s}]`:s;r.push(Rd(u,e[s],n));}let i=r.join(a);return n.style==="label"||n.style==="matrix"?`${a}${i}`:i}function rT(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let i={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",s=(n.allowReserved===true?e:e.map(u=>encodeURIComponent(u))).join(i);switch(n.style){case "simple":return s;case "label":return `.${s}`;case "matrix":return `;${t}=${s}`;default:return `${t}=${s}`}}let r={simple:",",label:".",matrix:";"}[n.style]||"&",a=[];for(let i of e)n.style==="simple"||n.style==="label"?a.push(n.allowReserved===true?i:encodeURIComponent(i)):a.push(Rd(t,i,n));return n.style==="label"||n.style==="matrix"?`${r}${a.join(r)}`:a.join(r)}function QP(t){return function(n){let r=[];if(n&&typeof n=="object")for(let a in n){let i=n[a];if(i!=null){if(Array.isArray(i)){if(i.length===0)continue;r.push(rT(a,i,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof i=="object"){r.push(nT(a,i,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(Rd(a,i,t));}}return r.join("&")}}function LU(t,e){let n=t;for(let r of t.match(UU)??[]){let a=r.substring(1,r.length-1),i=false,s="simple";if(a.endsWith("*")&&(i=true,a=a.substring(0,a.length-1)),a.startsWith(".")?(s="label",a=a.substring(1)):a.startsWith(";")&&(s="matrix",a=a.substring(1)),!e||e[a]===void 0||e[a]===null)continue;let u=e[a];if(Array.isArray(u)){n=n.replace(r,rT(a,u,{style:s,explode:i}));continue}if(typeof u=="object"){n=n.replace(r,nT(a,u,{style:s,explode:i}));continue}if(s==="matrix"){n=n.replace(r,`;${Rd(a,u)}`);continue}n=n.replace(r,s==="label"?`.${encodeURIComponent(u)}`:encodeURIComponent(u));}return n}function NU(t,e){return t instanceof FormData?t:e&&(e.get instanceof Function?e.get("Content-Type")??e.get("content-type"):e["Content-Type"]??e["content-type"])==="application/x-www-form-urlencoded"?new URLSearchParams(t).toString():JSON.stringify(t)}function VU(t,e){let n=`${e.baseUrl}${t}`;e.params?.path&&(n=e.pathSerializer(n,e.params.path));let r=e.querySerializer(e.params.query??{});return r.startsWith("?")&&(r=r.substring(1)),r&&(n+=`?${r}`),n}function XP(...t){let e=new Headers;for(let n of t){if(!n||typeof n!="object")continue;let r=n instanceof Headers?n.entries():Object.entries(n);for(let[a,i]of r)if(i===null)e.delete(a);else if(Array.isArray(i))for(let s of i)e.append(a,s);else i!==void 0&&e.set(a,i);}return e}function eT(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function BU(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),tT({baseUrl:t.baseUrl,headers:e})}var Sf=class extends Error{constructor(n,r){super(r);j(this,"status",n);this.name="ApiError";}};var Pf=class extends ry{constructor(n){let{exportedConfig:r,environmentId:a,...i}=n,s=zi(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:a??"default"});if(!s)throw new Error("BrowserRuntime requires exportedConfig");let u=fs(n.storage),y=new du({storage:u,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...i,exportedConfig:s,storage:u,impressionStore:y});j(this,"_hydratePromise");let k=n.autoHydrate??true;this._hydratePromise=k?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};var Ad=class extends Error{constructor(n,r,a){super(`Experiment "${n}" requests assignment unit "${r}", but this native provider is configured for "${a}"; refuse launch instead of substituting an assignment unit.`);j(this,"experimentHandle");j(this,"requestedUnit");j(this,"subjectUnit");this.name="UnsupportedExperimentAssignmentUnitError",this.experimentHandle=n,this.requestedUnit=r,this.subjectUnit=a;}};function zU(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=Math.imul(e,16777619)>>>0;return e>>>0}function aT(t){return zU(t)/4294967296}function KU(t){return Array.isArray(t)?t.map(e=>[e,1]):Object.entries(t).filter(([,e])=>Number.isFinite(e)&&e>0).map(([e,n])=>[e,n])}function iT(t,e,n){if(!t)return;let r=KU(n.variants);if(r.length===0)return;let{exposure:a}=n;if(a!==void 0&&(!(a>0)||a<1&&aT(`${t}:${e}:exposure`)>=a))return;let i=r.reduce((u,[,y])=>u+y,0),s=aT(`${t}:${e}:variant`)*i;for(let[u,y]of r)if(s-=y,s<0)return u;return r[r.length-1][0]}function sT(t){let e={};for(let a of t.variants)!Number.isFinite(a.weight)||a.weight<=0||(e[a.variant_id]=(e[a.variant_id]??0)+a.weight);let n=Object.values(e).reduce((a,i)=>a+i,0),r=Number.isFinite(t.traffic_allocation)?Math.min(1,Math.max(0,t.traffic_allocation)):0;return {variants:e,exposure:r*Math.min(1,n)}}function $U(t){let e=t.subjectUnit??"user",n={};for(let r of t.experiments){let a=r.assignment_unit??"user";if(a!==e)throw new Ad(r.handle,a,e);n[r.handle]=sT(r);}return oT({experiments:n,subject:t.subject})}function oT(t){let{experiments:e,subject:n}=t;return {domain:"experiments",resolve(){let r=typeof n=="function"?n():n;if(!r)return {assignments:{}};let a={};for(let[i,s]of Object.entries(e)){let u=iT(r,i,s);u!==void 0&&(a[i]=u);}return {assignments:a}}}}var HU=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function GU(t){let e={};for(let[n,r]of Object.entries(t.properties))e[HU.has(n)?`rt_prop_${n}`:n]=r;return {...e,tenant_id:t.tenant_id,user_id:t.user_id,anonymous_id:t.anonymous_id,session_id:t.session_id,url:t.url,path:t.path,page_title:t.page_title,event_time:t.event_time}}var Tf=class{constructor(e){j(this,"name");j(this,"handler");j(this,"transform");j(this,"filterSet");this.name=e.name??"analytics",this.handler=e.handler,this.transform=e.transform,this.filterSet=e.filter?new Set(e.filter):void 0;}consume(e){for(let n of e){if(this.filterSet&&!this.filterSet.has(n.type))continue;let r=n.type,a=GU(n);if(this.transform){let i=this.transform(r,a);if(i===null)continue;r=i.eventName,a=i.properties;}try{this.handler(r,a);}catch{}}}};function lT(t){let e=new Tf(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function cT(t){let{posthog:e,filter:n,transform:r,name:a}=t;return lT({name:a??"posthog",filter:n,transform:r,handler:(i,s)=>{e.capture(i,s);}})}function YU(t){let{posthog:e,filter:n,transform:r,name:a,syncIdentity:i=false,syncAccountGroup:s=false,mirrorNavigation:u=false}=t,y=a??"posthog",k=cT({posthog:e,filter:n,transform:r,name:y}),I=null,w=null,O=R=>{try{if(i){let A=R.user_id;A&&A!==I?(e.identify?.(A,R.identity.traits),I=A):!A&&I!==null&&(e.reset?.(),I=null);}if(s){let A=R.identity.traits.account_id;typeof A=="string"&&A&&A!==w&&(e.group?.("account",A),w=A);}u&&R.type==="page_view"&&e.capture("$pageview",{$current_url:R.url});}catch{}};return {domain:"events",async resolve(){let A=(await k.resolve())?.consumers??[];return {consumers:[{name:y,consume(oe){for(let Z of oe)O(Z);for(let Z of A)Z.consume(oe);}}]}}}}var WU=["banner_placement"],JU=["banner_placement","in_page_card"],ZU=["toast_message"],QU=["modal_overlay"];var XU=["banner_placement","in_page_card","usage_counter","button"],eM=["modal_overlay","inline_gate_message"],tM=["toast_message","modal_overlay","banner_placement"];function nM(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var wd=class extends Error{constructor(n,r){super(`RevTurbine client-session mint failed (status ${n})`);j(this,"status",n);j(this,"requestId",r);this.name="RevTurbineClientSessionError";}},jd=class{constructor(e){j(this,"tenantId");j(this,"apiKey");j(this,"endpoint");j(this,"defaultTtlSeconds");j(this,"fetchFn");this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.endpoint=e.endpoint.replace(/\/$/,""),this.defaultTtlSeconds=e.defaultTtlSeconds??60,this.fetchFn=e.fetch??globalThis.fetch;}get clientSessions(){return {create:e=>this.createClientSession(e)}}async createClientSession(e){let n=nM(),r=await this.apiCall(n,"/api/sdk/client-sessions",{subject:e.subject,surface:e.surface,capabilities:e.capabilities??["context:read"]});if(!r.ok)throw new wd(r.status,n);let a=await r.json();return {client_token:a.client_token,expires_at:a.expires_at}}async apiCall(e,n,r){return this.fetchFn(`${this.endpoint}${n}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify(r)})}async apiGet(e,n){return this.fetchFn(`${this.endpoint}${n}`,{method:"GET",headers:{authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e}})}};var aM=/^[a-z0-9._]{1,100}$/,Ms={Persisted:"persisted",Transient:"transient"},Ni={Internal:"internal",External:"external"},fi={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},iM="readOnly";function ka(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[iM]===true||(e[n]=r);}return z.object(e)}function aa(t){let e=ka(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(aM)}):e}var {Unrestricted:_a}=fi,{Transient:ya,Persisted:oM}=Ms,{Internal:yo,External:ls}=Ni;z.object({page:z.coerce.number().int().min(1).default(1).meta(_a),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(_a)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls});var Yn=z.object({created_at:z.string().datetime().meta({..._a,readOnly:true}),updated_at:z.string().datetime().meta({..._a,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls}),Ln=z.object({id:z.string().min(1).meta({..._a,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls}),Wn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({..._a,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":yo});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls});var Od=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls}),uT=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls});var qd=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls}),dT=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":yo});var cs=z.string().min(1).max(200),Er=z.string().min(1).max(100),Dd=z.string().max(500).optional(),Da=z.record(z.string(),z.unknown()).default({}),vo=z.number().int().min(10).max(100).multipleOf(10),Ud=z.string().datetime().nullable().default(null),fr=z.object({environment_id:z.string().min(1).default("production").meta({..._a,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":yo}),kr=z.object({playbook_version_id:z.string().nullable().default(null).meta(_a),is_current:z.boolean().default(true).meta({..._a,readOnly:true}),is_deleted:z.boolean().default(false).meta({..._a,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({..._a,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({..._a,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({..._a,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":yo}),lM=Ln.merge(Yn).merge(Wn).merge(fr).extend({handle:Er.meta({..._a,readOnly:true}),active:z.boolean().default(true).meta({..._a,readOnly:true})});function ia(t){return lM.meta({id:t,"x-revturbine-schema-persistence":oM,"x-revturbine-schema-exposure":yo})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":yo});z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":yo});var pT=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":ya,"x-revturbine-schema-exposure":ls});new Set(Od.options);var gT=z.enum(["session","day","week","month"]),hT=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(hT),cap:z.object({count:z.number().int().min(1),period:gT})});z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var _T={Named:"named",Minted:"minted"},yT="x-revturbine-schema-identity";function _i(t="handle"){return {[yT]:{kind:_T.Named,handleField:t}}}function yi(t="handle"){return {[yT]:{kind:_T.Minted,handleField:t}}}var xn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},ri={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},hM="x-revturbine-context",fM="x-revturbine-in-config",_M="x-revturbine-sdk-input",yM="x-revturbine-source",vM="x-revturbine-deprecation",bM={[xn.Playbook]:ri.Customer,[xn.Branding]:ri.Customer,[xn.Billing]:ri.Stripe,[xn.Metering]:ri.Customer,[xn.CustomerOperations]:ri.Runtime,[xn.EventIngestion]:ri.Runtime};function rr(t,e){return {[hM]:t,[fM]:e.inConfig??t===xn.Playbook,[_M]:e.sdkInput,[yM]:e.source??bM[t]}}function Md(t){return {deprecated:true,[vM]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var ln=t=>z.object({items:z.array(t)}),lr=z.object({error:z.string(),code:z.string(),request_id:z.string()}),F=t=>t,cn=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()});var {Unrestricted:nt}=fi,{Persisted:Fd,Transient:Fs}=Ms,{External:ii}=Ni,xT=rr(xn.Playbook,{sdkInput:true});rr(xn.Playbook,{inConfig:false,sdkInput:false});var qM=rr(xn.Playbook,{inConfig:false,sdkInput:true}),DM=rr(xn.Playbook,{inConfig:false,sdkInput:false,source:ri.Runtime}),UM=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var ST=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Fs,"x-revturbine-schema-exposure":ii}),PT=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Fs,"x-revturbine-schema-exposure":ii}),MM=z.object({count:z.number().int().positive().meta(nt),period:PT.meta(nt)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Fs,"x-revturbine-schema-exposure":ii});z.object({surface_type:z.string().min(1).meta(nt),rules:z.array(MM).meta(nt),cooldown_ms:z.number().int().nonnegative().optional().meta(nt)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Fd,"x-revturbine-schema-exposure":ii,...fi.Operational,...qM});var FM=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":Fs,"x-revturbine-schema-exposure":ii}),Bl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...nt,readOnly:true}),name:cs.meta(nt),handle:Er.meta(nt),description:Dd.meta(nt),category:ST.meta(nt),drag_order_in_category:z.number().int().default(0).meta(nt),surface_slot_id:z.string().optional().meta(nt),entitlement_id:z.string().optional().meta(nt),tier_threshold:z.string().optional().meta(nt),threshold_percent:vo.optional().meta(nt),trial_type:z.enum(["free","reverse"]).optional().meta(nt),trigger_type:z.string().optional().meta(nt),trial_progress_percent:z.number().min(0).max(100).optional().meta(nt),days_before_end:z.number().int().min(0).optional().meta(nt),qualifier:UM.optional().meta(nt),activation_window_start:z.string().datetime().optional().meta(nt),activation_window_end:z.string().datetime().optional().meta(nt),metadata:Da.meta(nt)}).meta({id:"Placement","x-revturbine-schema-persistence":Fd,"x-revturbine-schema-exposure":ii,...xT,..._i()}),LM=ia("PlacementAnchor"),NM=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Fs,"x-revturbine-schema-exposure":ii}),VM=z.object({code:NM.meta(nt),message:z.string().min(1).meta(nt),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(nt)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Fs,"x-revturbine-schema-exposure":ii}),vT=Bl.extend({warnings:z.array(VM).optional().meta(nt)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Fs,"x-revturbine-schema-exposure":ii}),BM=z.object({label:z.string().min(1).max(200).meta(nt),cta_path_type:FM.meta(nt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(nt)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Fs,"x-revturbine-schema-exposure":ii}),Rm=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...nt,readOnly:true}),handle:Er.meta({...nt,readOnly:true}),placement_id:z.string().min(1).meta(nt),drag_order:z.number().int().default(0).meta(nt),target_plan_ids:z.array(z.string()).default([]).meta(nt),target_plan_billing_cadences:z.array(z.string()).default([]).meta(nt),target_segments:z.array(z.string()).default([]).meta(nt),surface_slot_ids:z.array(z.string()).default([]).meta(nt),surface_template_id:z.string().min(1).meta(nt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(nt),cta_list:z.array(BM).default([]).meta(nt),max_per_period:z.number().int().min(0).nullable().default(null).meta(nt),max_period_unit:PT.default("session").meta(nt),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(nt),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(nt),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(nt),recommendation_plan_override:z.string().optional().meta(nt)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Fd,"x-revturbine-schema-exposure":ii,...xT,...yi()}),zM=ia("PlacementPayloadAnchor"),KM=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({surface_slot_handle:z.string().min(1).max(200).meta(nt),surface_type:Od.meta(nt),surface_template_ids:z.array(z.string()).default([]).meta(nt),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(nt),first_seen:z.string().datetime().meta({...nt,readOnly:true}),last_seen:z.string().datetime().meta({...nt,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(nt),placement_count:z.number().int().min(0).default(0).meta({...nt,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Fd,"x-revturbine-schema-exposure":ii,...DM,..._i("surface_slot_handle")}),$M=ka(Bl),HM=ka(Rm);({"/api/placement-anchors":{get:F({operationId:"listPlacementAnchors",requestParams:{query:cn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:ln(LM)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:F({operationId:"listPlacements",requestParams:{query:cn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:ln(Bl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:F({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:aa(Bl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:vT}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:F({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Bl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:F({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:$M}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vT}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:F({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:F({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Bl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:F({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:ST,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:F({operationId:"listPlacementPayloadAnchors",requestParams:{query:cn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:ln(zM)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:F({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:cn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:ln(Rm)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:F({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:aa(Rm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Rm}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:F({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:HM}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Rm}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:F({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:F({operationId:"listSurfaceSlots",requestParams:{query:cn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:ln(KM)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var QM="__self__",XM={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},TT={plans:{sortKey:"unique_handle",indexBy:["unique_handle"],fields:{unique_handle:{},name:{},tier_position:{},sort_order:{},visibility:{}}},entitlements:{sortKey:"unique_handle",indexBy:["unique_handle"],fields:{unique_handle:{},name:{},type:{},unit:{},tier_definitions:{}}},entitlement_rules:{sortKey:"id",fields:{id:{},entitlement_id:{reference:{table:"entitlements",by:"unique_handle",kind:"one",onDelete:"cascade"}},targets:{},segment_ids:{reference:{table:"segments",by:"handle",kind:"list",onDelete:"restrict"}},kind:{include:"never"},unit:{include:"never"},tier_name:{include:"never"},tier_description:{include:"never"},enabled:{},limit_value:{},enforcement:{},tier_value:{},period_scope:{},included_count:{},seat_type_id:{},initial_grant:{},allowance_value:{},rollover_enabled:{},max_balance:{},reset_period:{},max_seats:{},rate_value:{},amount_cents:{},currency:{},current_usage:{include:"never"},allocation:{}}},segments:{sortKey:"handle",indexBy:["handle"],fields:{name:{},handle:{},predicates:{},dimension_id:{},experiment_handle:{},experiment_id:{}}},placement_slots:{sortKey:"id",indexBy:["id","placement_handle"],fields:{id:{},label:{},description:{},surface_type:{},placement_handle:{},template:{}}},slot_configs:{sortKey:"slot_id",fields:{slot_id:{reference:{table:"placement_slots",by:"id",kind:"one",onDelete:"cascade"}},active:{},triggers:{}}},surface_templates:{sortKey:"id",indexBy:["id"],fields:{id:{},surface_type:{},fields:{}}},placements:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},category:{},trigger:{discriminator:{keyed_on:{table:QM,via:"__self__",field:"trigger.type"},variants:{surface_render:["type","slot_id"],entitlement_gate:["type","entitlement_handle","tier_threshold"],usage_threshold:["type","entitlement_handle","threshold_percent"],credit_threshold:["type","entitlement_handle","threshold_percent"],seat_threshold:["type","entitlement_handle","threshold_percent"],trial_started:["type","trial_type"],trial_progress:["type","progress_percent"],trial_ending:["type","days_before_end"],trial_ended:["type"],trial_converted:["type"],qualifier:["type","qualifier"]}}},payloads:{},order:{}}},placement_payloads:{sortKey:"payload_id",fields:{payload_id:{},placement_id:{reference:{table:"placements",by:"id",kind:"one",onDelete:"cascade"}},target:{chipResolution:XM},caps:{},created_at:{},updated_at:{},source_mode:{},surfaces:{},content_link:{},surface_slot_ids:{},remind_later_minutes:{}}},content_ui_paths:{sortKey:"name",fields:{name:{},action_type:{},plan_handle:{reference:{table:"plans",by:"unique_handle",kind:"optional",onDelete:"detach"}},promotion_id:{reference:{table:"content_promotions",by:"id",kind:"optional",onDelete:"detach"}},placement_handle:{reference:{table:"placement_slots",by:"placement_handle",kind:"optional",onDelete:"detach"}},url:{},tour_id:{},target_billing_period:{},description:{}}},content_promotions:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},discount:{},type:{},status:{}}},personalization_tokens:{sortKey:"token",indexBy:["token"],fields:{token:{},label:{},description:{},category:{},data_source:{},example_value:{},value_map:{},format:{}}},message_blocks:{sortKey:"block_id",indexBy:["block_id"],fields:{block_id:{},tenant_id:{},name:{},surface_template_id:{reference:{table:"surface_templates",by:"id",kind:"optional",onDelete:"detach"}},default_content:{},segment_overrides:{},child_blocks:{},tokens_used:{},status:{},created_at:{},updated_at:{}}}};var IT=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(IT).default([]),days_before_end:z.number().int().min(0).max(365).nullable().default(null),trial_type:z.enum(["free","reverse"]).nullable().default(null)});z.object({threshold_percent:z.number().int().min(0).max(100),trial_type:z.enum(["free","reverse"]).nullable().default(null)});var {Unrestricted:je}=fi,{Persisted:qf,Transient:Ra}=Ms,{Internal:kT,External:va}=Ni,RT=rr(xn.Playbook,{sdkInput:true}),rF=rr(xn.Playbook,{inConfig:false,sdkInput:false}),AT=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),Vd=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),aF=z.enum(uT).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),iF=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),wT=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),Ef=z.object({entitlement_id:z.string().min(1).meta(je),entitlement_handle:z.string().min(1).meta(je),status:aF.meta(je),limit:z.number().optional().meta(je),used:z.number().optional().meta(je),allocation:Vd.optional().meta(je),enforcement:wT.optional().meta(je),source:iF.optional().meta(je),plan_id:z.string().optional().meta(je),segment_id:z.string().optional().meta(je),seat_type_id:z.string().optional().meta(je),rule_id:z.string().optional().meta(je)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va,...fi.Operational});z.object({account:z.record(z.string(),Ef).optional().meta(je),instance:z.record(z.string(),Ef).optional().meta(je),user:z.record(z.string(),Ef).optional().meta(je)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va,...fi.Operational});var sF=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),oF=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),jT=z.object({kind:oF.meta(je),id:z.string().min(1).meta(je)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),lF=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),Yl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...je,readOnly:true}),name:cs.meta(je),handle:Er.meta(je),customer_facing_description:z.string().max(500).optional().meta(je),type:qd.meta(je),unit:z.string().max(100).optional().meta(je),period_scope:AT.optional().meta(je),allocation:Vd.optional().meta(je),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(je),sort_order:z.number().int().default(0).meta(je),metadata:Da.meta(je)}).meta({id:"Entitlement","x-revturbine-schema-persistence":qf,"x-revturbine-schema-exposure":va,...RT,..._i()}),cF=ia("EntitlementAnchor"),tc=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...je,readOnly:true}),handle:Er.meta({...je,readOnly:true}),entitlement_id:z.string().min(1).meta(je),targets:z.array(jT).min(1).meta(je),segment_ids:z.array(z.string()).default([]).meta(je),visibility:sF.default("public").meta(je),period_scope:AT.optional().meta(je),instance:z.string().max(100).optional().meta(je),reset_period:lF.optional().meta(je),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(je),enforcement:wT.optional().meta(je),warning_threshold_percent:vo.optional().meta(je),overage_price_ref:z.string().optional().meta(je),grace_period_hours:z.number().int().min(0).optional().meta(je),tier_value:z.string().optional().meta(je),rate_value:z.number().optional().meta(je),initial_grant:z.number().optional().meta(je),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(je),rollover_enabled:z.boolean().optional().meta(je),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(je),seat_type_id:z.string().optional().meta(je),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(je),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(je),stripe_metered_price_id:z.string().optional().meta(je),enabled:z.boolean().optional().meta(je),allocation:Vd.optional().meta(je),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(je),amount_cents:z.number().int().optional().meta(je),currency:z.string().optional().meta(je)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":qf,"x-revturbine-schema-exposure":kT,...RT,...yi()}),mF=ia("EntitlementRuleAnchor");tc.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var uF=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),dF=z.object({code:uF.meta(je),message:z.string().min(1).meta(je),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(je)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),kf=tc.extend({warnings:z.array(dF).optional().meta(je)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":va}),Rf=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({handle:Er.meta({...je,readOnly:true}),rule_id:z.string().min(1).meta(je),experiment_id:z.string().min(1).meta(je),variant_name:z.string().min(1).max(200).meta(je),is_control:z.boolean().default(false).meta(je),override_fields:z.record(z.string(),z.unknown()).default({}).meta(je)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":qf,"x-revturbine-schema-exposure":kT,...rF,...yi()}),pF=ka(Yl),gF=ka(tc);({"/api/entitlement-anchors":{get:F({operationId:"listEntitlementAnchors",requestParams:{query:cn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:ln(cF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:F({operationId:"listEntitlementRuleAnchors",requestParams:{query:cn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:ln(mF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:F({operationId:"listEntitlements",requestParams:{query:cn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:ln(Yl)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:F({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:aa(Yl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:F({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:F({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:pF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:F({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:F({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:cn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:ln(tc)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:F({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:aa(tc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:kf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:F({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:gF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:kf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:F({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:F({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:kf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:F({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:cn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:ln(Rf)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:F({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:aa(Rf)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Rf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:ft}=fi,{Persisted:Dm,Transient:Um}=Ms,{Internal:Bi}=Ni,OT=rr(xn.Playbook,{sdkInput:true}),qT=rr(xn.Playbook,{inConfig:false,sdkInput:true}),hF=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Um,"x-revturbine-schema-exposure":Bi}),Df=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Um,"x-revturbine-schema-exposure":Bi}),DT=z.object({name:cs.meta(ft),handle:Er.meta(ft),plan_id:z.string().nullable().optional().meta(ft),segment_id:z.string().nullable().optional().meta(ft),trial_limit_type:Df.default("time").meta(ft),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ft),grace_period_days:z.number().int().min(0).default(0).meta(ft),usage_entitlement_handle:z.string().min(1).optional().meta(ft),usage_limit_value:z.number().int().min(1).optional().meta(ft),require_payment_method:z.boolean().default(false).meta(ft),auto_convert:z.boolean().default(true).meta(ft),convert_to_plan_id:z.string().optional().meta(ft),fallback_plan_id:z.string().optional().meta(ft),limit_per_customer:z.number().int().min(1).default(1).meta(ft),is_active:z.boolean().default(true).meta(ft),metadata:Da.meta(ft)}),zl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...ft,readOnly:true})}).merge(DT).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":Bi,...OT,..._i()}),fF=ia("FreeTrialRuleAnchor"),_F=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Um,"x-revturbine-schema-exposure":Bi}),UT=z.object({name:cs.meta(ft),handle:Er.meta(ft),premium_plan_id:z.string().min(1).meta(ft),fallback_plan_id:z.string().min(1).meta(ft),segment_id:z.string().nullable().optional().meta(ft),trial_limit_type:Df.default("time").meta(ft),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ft),usage_entitlement_handle:z.string().min(1).optional().meta(ft),usage_limit_value:z.number().int().min(1).optional().meta(ft),start_policy:_F.default("signup").meta(ft),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(ft),entitlements_during_trial:z.array(z.string()).default([]).meta(ft),is_active:z.boolean().default(true).meta(ft),metadata:Da.meta(ft)}),Kl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...ft,readOnly:true})}).merge(UT).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":Bi,...OT,..._i()}),yF=ia("ReverseTrialRuleAnchor"),MT=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Um,"x-revturbine-schema-exposure":Bi}),FT=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Um,"x-revturbine-schema-exposure":Bi}),$l=Ln.merge(Yn).merge(Wn).extend({trial_limit_policy:MT.default("1_per_lifetime").meta(ft),eligibility_scope:FT.default("per_customer").meta(ft)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":Bi,...qT}),Hl=Ln.merge(Yn).merge(Wn).extend({trial_limit_policy:MT.default("1_per_lifetime").meta(ft),eligibility_scope:FT.default("per_customer").meta(ft)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":Bi,...qT}),Ld=Ln.merge(Yn).merge(Wn).extend({customer_id:z.string().min(1).meta(ft),rule_id:z.string().min(1).meta(ft),rule_type:z.enum(["free_trial","reverse_trial"]).meta(ft),plan_id:z.string().min(1).meta(ft),status:hF.default("active").meta(ft),started_at:z.string().datetime().meta({...ft,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(ft),trial_limit_type:Df.default("time").meta(ft),usage_entitlement_handle:z.string().min(1).optional().meta(ft),usage_limit_value:z.number().int().min(1).optional().meta(ft),converted_at:Ud.meta(ft),cancelled_at:Ud.meta(ft),metadata:Da.meta(ft)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":Bi});({"/api/free-trial-rule-anchors":{get:F({operationId:"listFreeTrialRuleAnchors",requestParams:{query:cn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:ln(fF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:F({operationId:"listFreeTrialRules",requestParams:{query:cn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:ln(zl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:F({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:F({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:zl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:F({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:F({operationId:"listReverseTrialRuleAnchors",requestParams:{query:cn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:ln(yF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:F({operationId:"listReverseTrialRules",requestParams:{query:cn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:ln(Kl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:F({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:Kl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:F({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Kl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Kl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:F({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:F({operationId:"listFreeTrialSettings",requestParams:{query:cn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:ln($l)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:F({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:$l}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:F({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:$l.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$l}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:F({operationId:"listReverseTrialSettings",requestParams:{query:cn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:ln(Hl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:F({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Hl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:F({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Hl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Hl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:F({operationId:"listTrialInstances",requestParams:{query:cn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:ln(Ld)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:F({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Ld}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:F({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Ld}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:F({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:Ld}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Xt,Financial:Nd}=fi,{Persisted:Mm,Transient:Bd}=Ms,{External:ms}=Ni,vF=rr(xn.Playbook,{sdkInput:true}),bF=rr(xn.Playbook,{sdkInput:false}),Uf=rr(xn.Billing,{sdkInput:false}),Ns=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Bd,"x-revturbine-schema-exposure":ms}),Fm=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Bd,"x-revturbine-schema-exposure":ms}),zd=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Bd,"x-revturbine-schema-exposure":ms}),Wl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),name:cs.meta(Xt),handle:Er.meta(Xt),tier_position:z.number().int().min(0).default(0).meta(Xt),sort_order:z.number().int().default(0).meta(Xt),visibility:Ns.default("public").meta(Xt),metadata:Da.meta(Xt)}).meta({id:"Plan","x-revturbine-schema-persistence":Mm,"x-revturbine-schema-exposure":ms,...vF,..._i()}),xF=ia("PlanAnchor"),Jl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),handle:Er.meta({...Xt,readOnly:true}),plan_id:z.string().min(1).meta(Xt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Xt),segment_id:z.string().nullable().default(null).meta(Xt),price_amount:z.number().min(0).meta(Nd),pricing_model:Fm.meta(Xt),visibility:Ns.default("public").meta(Xt),stripe_price_id:z.string().optional().meta(Xt),price_source:zd.default("static").meta(Xt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Mm,"x-revturbine-schema-exposure":ms,...Uf,...yi()}),SF=ia("PlanVariationAnchor"),Zl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),name:cs.meta(Xt),handle:Er.meta(Xt),sort_order:z.number().int().default(0).meta(Xt),visibility:Ns.default("public").meta(Xt),metadata:Da.meta(Xt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Mm,"x-revturbine-schema-exposure":ms,...bF,..._i()}),PF=ia("AddOnAnchor"),Ql=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),handle:Er.meta({...Xt,readOnly:true}),addon_id:z.string().min(1).meta(Xt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Xt),segment_id:z.string().nullable().default(null).meta(Xt),price_amount:z.number().min(0).meta(Nd),pricing_model:Fm.meta(Xt),visibility:Ns.default("public").meta(Xt),stripe_price_id:z.string().optional().meta(Xt),price_source:zd.default("static").meta(Xt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Mm,"x-revturbine-schema-exposure":ms,...Uf,...yi()}),TF=ia("AddOnVariationAnchor"),IF=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Bd,"x-revturbine-schema-exposure":ms}),Xl=Ln.merge(Yn).merge(Wn).extend({stripe_price_id:z.string().min(1).meta(Xt),stripe_product_id:z.string().min(1).meta(Xt),billing_period:IF.meta(Xt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Nd),currency:dT.meta(Nd),pricing_model:Fm.meta(Xt),nickname:z.string().nullable().default(null).meta(Xt),is_mock:z.boolean().default(false).meta(Xt),last_updated_from_stripe:Ud.meta(Xt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Mm,"x-revturbine-schema-exposure":ms,...Uf}),CF=ka(Wl),EF=ka(Jl),kF=ka(Zl),RF=ka(Ql),AF=ka(Xl);({"/api/plan-anchors":{get:F({operationId:"listPlanAnchors",requestParams:{query:cn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:ln(xF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:F({operationId:"listPlans",requestParams:{query:cn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:ln(Wl)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:F({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:aa(Wl)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Wl}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:F({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Wl}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:F({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:CF}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Wl}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:F({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:F({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:F({operationId:"listPlanVariationAnchors",requestParams:{query:cn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:ln(SF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:F({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:cn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:ln(Jl)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:F({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:aa(Jl)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:F({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:F({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:EF}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:F({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:F({operationId:"listAddOnAnchors",requestParams:{query:cn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:ln(PF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:F({operationId:"listAddOns",requestParams:{query:cn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:ln(Zl)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:F({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:aa(Zl)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Zl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:F({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Zl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:F({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:kF}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Zl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:F({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:F({operationId:"listAddOnVariationAnchors",requestParams:{query:cn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:ln(TF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:F({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:cn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:ln(Ql)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:F({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:aa(Ql)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Ql}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:F({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Ql}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:F({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:RF}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Ql}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:F({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:F({operationId:"listStripePrices",requestParams:{query:cn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:ln(Xl)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:F({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:aa(Xl)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Xl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:F({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Xl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:F({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:AF}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Xl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:F({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:h}=fi,{Persisted:nc,Transient:bt}=Ms,{Internal:si,External:Vt}=Ni,qt=rr(xn.Playbook,{sdkInput:true}),ec=rr(xn.Playbook,{sdkInput:false}),Ls=rr(xn.Playbook,{inConfig:false,sdkInput:false}),LT=rr(xn.Playbook,{inConfig:false,sdkInput:true}),Gl=rr(xn.Playbook,{inConfig:false,sdkInput:true,source:ri.CodeConstant}),Af=rr(xn.Playbook,{inConfig:false,sdkInput:true,source:ri.Runtime}),wf=rr(xn.Playbook,{inConfig:false,sdkInput:false,source:ri.Runtime}),wF=rr(xn.Billing,{sdkInput:false}),jF=rr(xn.Metering,{sdkInput:false}),OF=rr(xn.Branding,{inConfig:true,sdkInput:true}),qF=rr(xn.Branding,{sdkInput:false}),DF="1.0.0",wm=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:cs.meta(h),handle:Er.meta(h),description:Dd.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:Da.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":si,...Ls,..._i()}),UF=ia("SeatTypeAnchor"),jm=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:Er.meta(h),label:z.string().min(1).meta(h),description:z.string().nullable().default(null).meta(h),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(h),data_source:z.string().nullable().default(null).meta(h),example_value:z.string().nullable().default(null).meta(h),value_map:z.record(z.string(),z.string()).default({}).meta(h),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(h),metadata:Da.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":si,...Ls,..._i()}),MF=ia("PersonalizationTokenAnchor"),FF=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":si}),jf=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({handle:Er.meta({...h,readOnly:true}),stripe_account_id:z.string().min(1).meta(h),live_mode:z.boolean().default(false).meta(h),onboarding_state:FF.default("not_started").meta({...h,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...h,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...h,readOnly:true}),details_submitted:z.boolean().default(false).meta({...h,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...h,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...h,readOnly:true}),sync_products:z.boolean().default(true).meta(h),sync_prices:z.boolean().default(true).meta(h),sync_subscriptions:z.boolean().default(true).meta(h),sync_invoices:z.boolean().default(false).meta(h),default_currency:z.string().length(3).default("USD").meta(h),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(h),last_sync_at:z.string().optional().meta({...h,readOnly:true}),metadata:Da.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":si,...wF,...yi()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(h),workspace_name:z.string().optional().meta(h),logo_url:z.string().optional().meta(h),support_email:z.string().optional().meta(h)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qF});var Om=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({handle:Er.meta({...h,readOnly:true}),entitlement_id:z.string().min(1).meta(h),meter_key:z.string().min(1).max(100).meta(h),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(h),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(h),stripe_meter_id:z.string().nullable().default(null).meta(h),is_active:z.boolean().default(true).meta(h),metadata:Da.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":si,...jF,...yi()}),CT=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":si}),qm=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:Er.meta({...h,readOnly:true}),entitlement_id:z.string().min(1).meta(h),soft_limit_percent:z.number().min(0).max(100).default(80).meta(h),hard_limit_percent:z.number().min(0).max(100).default(100).meta(h),soft_limit_action:CT.default("warn").meta(h),hard_limit_action:CT.default("block").meta(h),grace_period_hours:z.number().int().min(0).default(0).meta(h),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(h),is_active:z.boolean().default(true).meta(h)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":si,...LT,...yi()}),LF=ia("UsageEnforcementSettingsAnchor"),NF=z.object({kind:z.enum(["template","slot"]).meta(h),id:z.string().min(1).meta(h),label:z.string().min(1).optional().meta(h)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":si}),VF=z.object({id:z.string().min(1).meta(h),group:z.array(NF).min(1).meta(h),cap:z.object({count:z.number().int().min(1).meta(h),period:z.enum(["session","day","week","month"]).meta(h)}).meta(h)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":si}),BF=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":si}),NT=z.object({capRules:z.array(VF).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:BF.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":si}),Of=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:Er.meta({...h,readOnly:true}),global_frequency_cap:NT.nullable().default(null).meta(h),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(h),suppress_for_paid:z.boolean().default(false).meta(h),suppress_for_trial:z.boolean().default(false).meta(h),allow_stacking:z.boolean().default(false).meta(h),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(h)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":si,...LT,...yi()}),zF=ia("PlacementSettingsAnchor"),KF=z.object({field:z.string().min(1).meta(h),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(h),value:z.string().meta(h)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),$F=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(KF).optional().meta(h),dimension_id:z.string().optional().meta(h),experiment_handle:z.string().min(1).optional().meta(h),experiment_id:z.string().min(1).optional().meta(h)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),HF=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),tier_position:z.number().int().min(0).default(0).meta(h),sort_order:z.number().int().min(0).default(0).meta(h),visibility:Ns.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),GF=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),sort_order:z.number().int().min(0).default(0).meta(h),visibility:Ns.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...ec}),YF=z.object({handle:z.string().min(1).meta(h),plan_handle:z.string().min(1).meta(h),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z.string().nullable().default(null).meta(h),price_amount:z.number().min(0).meta(h),pricing_model:Fm.meta(h),visibility:Ns.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:zd.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...Ls}),WF=z.object({handle:z.string().min(1).meta(h),addon_handle:z.string().min(1).meta(h),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z.string().nullable().default(null).meta(h),price_amount:z.number().min(0).meta(h),pricing_model:Fm.meta(h),visibility:Ns.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:zd.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...Ls}),JF=z.object({handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),description:z.string().nullable().default(null).meta(h),is_default:z.boolean().default(false).meta(h),entitlement_handles:z.array(z.string()).default([]).meta(h)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),ZF=z.object({handle:z.string().min(1).meta(h),entitlement_handle:z.string().nullable().default(null).meta(h),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(h),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(h),soft_limit_action:z.string().meta(h),hard_limit_action:z.string().meta(h),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(h),notification_channels:z.array(z.string()).default([]).meta(h),is_active:z.boolean().default(true).meta(h)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),QF=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:NT.nullable().default(null).meta(h),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(h),suppress_for_paid:z.boolean().default(false).meta(h),suppress_for_trial:z.boolean().default(false).meta(h),allow_stacking:z.boolean().default(false).meta(h),priority_collision_strategy:z.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),XF=z.object({handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:z.string().nullable().default(null).meta(h),visibility_toggle:z.boolean().default(true).meta(h),source_type:z.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),eL=z.object({handle:z.string().min(1).meta(h),entitlement_handle:z.string().min(1).meta(h),meter_handle:z.string().min(1).meta(h),limit:z.number().int().min(0).nullable().default(null).meta(h),reset_period:z.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),tL=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:qd.meta(h),unit:z.string().optional().meta(h),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),nL=z.object({id:z.string().min(1).meta(h),entitlement_id:z.string().min(1).meta(h),targets:z.array(jT).min(1).meta(h),segment_ids:z.array(z.string()).default([]).meta(h),kind:qd.optional().meta({...h,readOnly:true}),unit:z.string().optional().meta({...h,readOnly:true}),tier_name:z.string().optional().meta({...h,readOnly:true}),tier_description:z.string().optional().meta({...h,readOnly:true}),...tc.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(h),allocation:Vd.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),rL=z.object({slot_id:z.string().min(1).meta(h),active:z.boolean().meta(h),triggers:z.array(z.string()).meta(h)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),aL=z.object({id:z.string().min(1).meta(h),label:z.string().min(1).meta(h),description:z.string().meta(h),surface_type:z.string().meta(h),placement_handle:z.string().min(1).meta(h),template:z.string().optional().meta(h)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),iL=z.object({name:z.string().min(1).meta(h),type:z.string().optional().meta(h),required:z.boolean().optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),sL=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(iL).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),oL=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),lL=z.object({name:z.string().min(1).meta(h),action_type:oL.meta(h),plan_handle:z.string().optional().meta(h),promotion_id:z.string().optional().meta(h),placement_handle:z.string().optional().meta(h),url:z.string().optional().meta(h),tour_id:z.string().optional().meta(h),target_billing_period:z.enum(["monthly","annual"]).optional().meta(h),description:z.string().optional().meta(h)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),cL=z.object({id:z.string().meta(h),name:z.string().meta(h),discount:z.string().meta(h),type:z.string().meta(h),status:z.string().meta(h)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),mL=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(h),label:z.string().min(1).meta(h),description:z.string().optional().meta(h),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(h),data_source:z.string().optional().meta(h),example_value:z.string().optional().meta(h),value_map:z.record(z.string(),z.string()).optional().meta(h),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(h)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),ET=z.object({header:z.string().optional().meta(h),body:z.string().optional().meta(h),cta_label:z.string().optional().meta(h),secondary_cta_label:z.string().optional().meta(h)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),uL=z.object({block_id:z.string().min(1).meta(h),tenant_id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),surface_template_id:z.string().optional().meta(h),default_content:ET.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:ET})).optional().meta(h),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(h),tokens_used:z.array(z.string()).optional().meta(h),status:z.enum(["draft","active","archived"]).meta(h),created_at:z.string().datetime().meta({...h,readOnly:true}),updated_at:z.string().datetime().meta({...h,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),dL=z.object({label:z.string().meta(h),path:pT.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),VT=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array(dL).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),BT=z.object({plan_ids:z.array(z.string()).meta(h),billing_cadences:z.array(z.string()).optional().meta(h),segment_chips:z.array(z.string()).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),pL=z.object({count:z.number().int().min(1).meta(h),period:z.enum(["session","day","week","month","lifetime"]).meta(h)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),zT=z.object({max_per_period:pL.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),gL=z.object({id:z.string().min(1).meta(h),target:BT.meta(h),surfaces:z.array(VT).meta(h),caps:zT.optional().meta(h),surface_slot_ids:z.array(z.string()).optional().meta(h),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(h),created_at:z.string().optional().meta({...h,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(h),recommendation_plan_override:z.string().optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),hL=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:vo}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:vo}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:vo}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),fL=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt}),_L=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:fL.meta(h),trigger:hL.meta(h),payloads:z.array(gL).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),yL=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:BT.meta(h),caps:zT.optional().meta(h),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(h),created_at:z.string().meta({...h,readOnly:true}),updated_at:z.string().datetime().optional().meta({...h,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(h),surfaces:z.array(VT).optional().meta(h),surface_slot_ids:z.array(z.string()).optional().meta(h),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(h)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),vL=z.object({kind:z.string().min(1).meta(h),schema_version:z.number().int().nonnegative().meta(h),config:z.unknown().meta(h)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),bL=Ln.merge(DT).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...Ls}),xL=Ln.merge(UT).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...Ls}),SL=z.object({plans:z.array(HF).meta({...h,...qt}),addons:z.array(GF).optional().meta({...h,...ec}),entitlements:z.array(tL).meta({...h,...qt}),entitlement_rules:z.array(nL).meta({...h,...qt}),segments:z.array($F).meta({...h,...qt}),content_ui_paths:z.array(lL).meta({...h,...qt}),slot_configs:z.array(rL).optional().meta({...h,...qt,...Md({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...h,...qt,...Md({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...h,...OF,...Md({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(aL).optional().meta({...h,...qt}),message_blocks:z.array(uL).optional().meta({...h,...qt}),placement_payloads:z.array(yL).optional().meta({...h,...qt}),placements:z.array(_L).optional().meta({...h,...qt}),content_promotions:z.array(cL).optional().meta({...h,...qt}),personalization_tokens:z.array(mL).optional().meta({...h,...qt}),surface_templates:z.array(sL).optional().meta({...h,...qt}),free_trial_rules:z.array(bL).optional().meta({...h,...ec}),reverse_trial_rules:z.array(xL).optional().meta({...h,...ec}),plan_variations:z.array(YF).optional().meta({...h,...ec}),addon_variations:z.array(WF).optional().meta({...h,...ec}),extension_rules:z.array(vL).optional().meta({...h,...qt}),seat_types:z.array(JF).optional().meta({...h,...qt}),enforcement_defaults:z.array(ZF).optional().meta({...h,...qt}),placement_settings:z.array(QF).optional().meta({...h,...qt}),segment_dimensions:z.array(XF).optional().meta({...h,...qt}),meter_bindings:z.array(eL).optional().meta({...h,...qt}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...Ls}),signal_catalog:z.object({}).strict().optional().meta({...h,...Ls})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt}),PL=z.object({artifact_type:z.literal("playbook").meta({...h,...Gl,readOnly:true}),format_version:z.literal(DF).meta({...h,...Gl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Gl}),playbook_version_id:z.string().nullable().default(null).meta({...h,...Af,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...wf,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...wf,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...wf,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...Af,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Gl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Gl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...h,...Gl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...Af}),KT=PL.extend(SL.shape).meta({"x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt});function TL(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function $T(t){if(!TL(t))return t;let e={...t};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess($T,KT).meta({id:"Playbook","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt});z.preprocess($T,KT.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":bt,"x-revturbine-schema-exposure":Vt,...qt});({"/api/seat-type-anchors":{get:F({operationId:"listSeatTypeAnchors",requestParams:{query:cn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:ln(UF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:F({operationId:"listSeatTypes",requestParams:{query:cn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:ln(wm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:F({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:aa(wm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wm}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:F({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:wm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wm}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:F({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:F({operationId:"listPersonalizationTokenAnchors",requestParams:{query:cn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:ln(MF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:F({operationId:"listPersonalizationTokens",requestParams:{query:cn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:ln(jm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:F({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:aa(jm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:jm}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:F({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:jm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:jm}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:F({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:F({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ka(jf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:jf}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:F({operationId:"listMeteringConfigs",requestParams:{query:cn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:ln(Om)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:F({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:aa(Om)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Om}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:F({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Om.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Om}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:F({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:F({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:cn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:ln(LF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:F({operationId:"listUsageEnforcementSettings",requestParams:{query:cn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:ln(qm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:F({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:aa(qm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:qm}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:F({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:qm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:qm}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:F({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:F({operationId:"listPlacementSettingsAnchors",requestParams:{query:cn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:ln(zF)}}},default:{description:"Error response",content:{"application/json":{schema:lr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:F({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ka(Of)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Of}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var CL=["web-client"],EL=z.enum(CL),kL=["method","meta","component"],RL=z.enum(kL),AL=["ts","python","java","csharp","rust"];z.enum(AL);var wL=z.object({ts:z.string().min(1).optional(),python:z.string().min(1).optional(),java:z.string().min(1).optional(),csharp:z.string().min(1).optional(),rust:z.string().min(1).optional()}).strict(),jL=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:RL,appliesTo:z.array(EL).min(1),composes:z.string().min(1).optional(),perLanguage:wL.optional(),description:z.string().min(1)}).strict().refine(t=>t.kind!=="meta"||t.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),OL=z.object({version:z.number().int().positive(),functions:z.array(jL).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let a of [r.canonical,...r.aliases]){let i=n.get(a);i!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${a}" (also on "${i}")`,path:["functions"]}),n.set(a,r.canonical);}});OL.parse({version:3,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client"],description:"Check whether the user is entitled to a feature/handle; returns the rich EntitlementResult (allowed, status, reason, limits, enforcement)."},{canonical:"gate",aliases:[],kind:"meta",appliesTo:["web-client"],composes:"checkEntitlement",description:"Gate an action behind an entitlement: checks the handle, runs fn when allowed, otherwise returns the entitlement so the caller can surface a paywall."},{canonical:"trackEvent",aliases:["track"],kind:"method",appliesTo:["web-client"],description:"Emit a product/analytics event powering frequency caps, attribution, and experiments."},{canonical:"updateUsage",aliases:["update"],kind:"method",appliesTo:["web-client"],description:"Patch customer-reported usage balances for client-side metering display (the advertised update({ usage }) verb)."},{canonical:"resetIdentity",aliases:["reset"],kind:"method",appliesTo:["web-client"],description:"Clear the current user and revert to the anonymous identity (e.g. on sign-out)."},{canonical:"identify",aliases:[],kind:"method",appliesTo:["web-client"],description:"Associate the session with a known user id and optional traits/context."},{canonical:"getPlacement",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a single placement decision for a surface."},{canonical:"getPlacementDecision",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a placement decision from an explicit decision input (headless)."},{canonical:"SurfaceSlotComponent",aliases:["Slot","RTSlot"],kind:"component",appliesTo:["web-client"],description:"React slot component that renders the resolved placement; advertised as <Slot> (<RTSlot> is the deprecated prior name)."},{canonical:"AccessGateSurfaceSlot",aliases:["Gate"],kind:"component",appliesTo:["web-client"],description:"React component that gates content behind an entitlement, rendering an upsell placement when denied; advertised as <Gate>."}]});var qL=[{from:"entitlement_rules",field:"targets[].id",to:"plans",by:"unique_handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"plan",note:"Entry-level; a rule losing its last target is swept whole (targets.min(1))."},{from:"entitlement_rules",field:"targets[].id",to:"addons",by:"unique_handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"addon",note:"Entry-level; a rule losing its last target is swept whole (targets.min(1))."},{from:"entitlement_rules",field:"targets[].id",to:"plan_variations",by:"handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"plan_variation",note:"Variation-level targeting is dead per the plan-125 audit; declared for kind-enum totality."},{from:"entitlement_rules",field:"targets[].id",to:"addon_variations",by:"handle",kind:"list",onDelete:"cascade",resolution:"playbook",granularity:"entry",targetKind:"addon_variation",note:"Variation-level targeting is dead per the plan-125 audit; declared for kind-enum totality."},{from:"plan_variations",field:"plan_handle",to:"plans",by:"unique_handle",kind:"one",onDelete:"cascade",resolution:"playbook"},{from:"addon_variations",field:"addon_handle",to:"addons",by:"unique_handle",kind:"one",onDelete:"cascade",resolution:"playbook"},{from:"plan_variations",field:"segment_handle",to:"segments",by:"handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"Detach would silently widen variation availability \u2014 restrict pending Q-1 ratification."},{from:"addon_variations",field:"segment_handle",to:"segments",by:"handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"Detach would silently widen variation availability \u2014 restrict pending Q-1 ratification."},{from:"free_trial_rules",field:"plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:'null means "All plans" and never blocks.'},{from:"free_trial_rules",field:"convert_to_plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook"},{from:"free_trial_rules",field:"fallback_plan_id",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook"},{from:"reverse_trial_rules",field:"premium_plan_id",to:"plans",by:"unique_handle",kind:"one",onDelete:"restrict",resolution:"playbook"},{from:"reverse_trial_rules",field:"fallback_plan_id",to:"plans",by:"unique_handle",kind:"one",onDelete:"restrict",resolution:"playbook"},{from:"placements",field:"trigger.entitlement_handle",to:"entitlements",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"entitlement_gate / usage_threshold / credit_threshold / seat_threshold trigger variants."},{from:"placements",field:"trigger.slot_id",to:"placement_slots",by:"id",kind:"optional",onDelete:"restrict",resolution:"playbook",note:"surface_render trigger variant."},{from:"placement_payloads",field:"target.segment_chips[]",to:"segments",by:"handle",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry",note:"Chip resolution falls back segment \u2192 plan \u2192 literal; stale chips degrade to literals."},{from:"placement_payloads",field:"target.segment_chips[]",to:"plans",by:"unique_handle",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry",note:"Chip resolution falls back segment \u2192 plan \u2192 literal; stale chips degrade to literals."},{from:"placement_payloads",field:"surface_slot_ids[]",to:"placement_slots",by:"id",kind:"list",onDelete:"detach",resolution:"playbook",granularity:"entry"},{from:"customer_overrides",field:"plan_handle",to:"plans",by:"unique_handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Grant-Plan overrides (Q-1 restrict class)."},{from:"subscriptions",field:"variation_handle",to:"plan_variations",by:"handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Active-subscriber variations (Q-1 restrict class)."},{from:"subscriptions",field:"variation_handle",to:"addon_variations",by:"handle",kind:"optional",onDelete:"restrict",resolution:"control_plane",note:"Active-subscriber add-on variations (Q-1 restrict class)."}];function DL(){let t=[];for(let[e,n]of Object.entries(TT))for(let[r,a]of Object.entries(n.fields)){let i=a.reference;if(i){if(!i.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${i.table} has no onDelete policy`);t.push({from:e,field:r,to:i.table,by:i.by,kind:i.kind,onDelete:i.onDelete,resolution:"playbook"});}}return t}function UL(t){return [...t].sort((e,n)=>e.from.localeCompare(n.from)||e.field.localeCompare(n.field)||e.to.localeCompare(n.to)||(e.targetKind??"").localeCompare(n.targetKind??""))}Object.freeze(UL([...DL(),...qL]));
|
|
2
|
+
export{Pf as BrowserRuntime,Rc as BrowserStorage,cy as CONTROL_PLANE_EVENT_SOURCE,my as CONTROL_PLANE_SOURCE_KEY,Z_ as CapEnforcer,Np as DEFAULT_BRANDING,hi as DEFAULT_THEME,op as DecisionEngine,Ec as DomainProviderRegistry,Ed as EntitlementGate,WU as FIXED_BANNER_TEMPLATE_IDS,XU as FIXED_SURFACE_TEMPLATE_IDS,eM as GATED_SURFACE_TEMPLATE_IDS,JU as GENERAL_BANNER_TEMPLATE_IDS,QU as GENERAL_MODAL_TEMPLATE_IDS,ZU as GENERAL_TOAST_TEMPLATE_IDS,zo as InMemoryStorage,J_ as InteractionTracker,tM as MESSAGE_SURFACE_TEMPLATE_IDS,Cd as PlacementController,Ll as PlacementTypeRegistry,WP as RECOGNIZED_UPDATE_KEYS,Sf as RevTurbineApiError,_f as RevTurbineCustomerSdk,jd as RevTurbineServer,Cm as RuntimeMode,ay as SERVER_TRAITS_DOMAIN,kd as SdkSession,kc as ServerUserContextProvider,Ad as UnsupportedExperimentAssignmentUnitError,sT as adaptExperimentVersionToBucketer,_c as applyValueMaps,iT as bucketSubject,Kp as buildControlPlaneEvent,OU as clearPersistedTheme,lT as createAnalyticsProvider,oT as createBasicExperimentProvider,qY as createChainedPlacementRequest,AY as createCustomEndpointRuntimeConfig,OY as createEntitlementPlacementRequest,Q0 as createHydrationProviders,oU as createLocalRuntimeConfig,$U as createNativeExperimentAssignmentProvider,cT as createPostHogAnalyticsProvider,YU as createPostHogIntegration,BU as createRevTurbineApiClient,UY as createSemanticEvent,RY as createServerRuntimeConfig,jY as createSlotPlacementRequest,ru as createStaticPlacementContentLookupProvider,Co as createStaticPlacementResolver,Z0 as createStaticProviders,wY as createStrictLocalRuntimeConfig,DY as createTreatmentInteraction,kY as defineUiPathResolvers,Nm as deriveLocalTrialStatusFromInstance,$d as deriveReverseTrialGrants,km as entitlementResultDenies,uc as evaluateSegments,Vm as evaluateTrialStatus,Vf as findActiveTrialInstance,Hd as findLatestStartedTrialInstance,WD as getDefaultRegistry,DU as initRevTurbine,Yr as isBrowser,Bo as isServer,xf as loadTheme,Nl as mergeTheme,Lf as normalizeConfigArtifactOrThrow,YD as parsePromotion,GD as parseUiPath,JD as resetDefaultRegistry,Vp as resolveBranding,HD as resolveContent,Id as resolveLocalPlaybook,xp as resolvePayloadForUser,au as resolvePayloadForUserWithProvider,fs as resolvePersistentStorage,$p as resolveSessionStorage,jP as resolveTokens};//# sourceMappingURL=headless.js.map
|
|
3
3
|
//# sourceMappingURL=headless.js.map
|